Chinaunix首页 | 论坛 | 博客
  • 博客访问: 61469
  • 博文数量: 15
  • 博客积分: 1425
  • 博客等级: 上尉
  • 技术积分: 185
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-31 00:34
文章分类

全部博文(15)

文章存档

2009年(2)

2008年(13)

我的朋友
最近访客

分类: LINUX

2009-03-26 09:42:20

许多基于Linux的开发其代码编写均在Window上完成,这归功于Windows上IDE的便利性以及数量众多的辅助工具,但两个平台间的代码文件共享就成了问题,一般来讲会通过Window共享然后在Linux上通过Samba进行挂载。
Samba挂载是需要耗费一定的时间的,一般需要半分钟左右(我的环境是这样,不知道是否所有的都要这么久,如果是本机开虚拟机运行Linux挂载的话倒是很快,1s左右就足够了),而当Window关机时如果未进行Smb卸载的话,那么挂载点目录就成为了"坏目录",需要使用smbumount命令进行卸载(并且这个时间一般也在1分钟左右).
根据实际开发环境编写了以下脚本,用来自动化的smb挂载/卸载操作。使用方法很简单,只需要在用户的主目录下生成.mountdir文件,且内容如下:
 

WINIP=172.16.224.1   # Window IP地址

USERNAME=phrack      # 共享使用的用户名(Window用户)

PASSWORD=123456      # 共享用户的密码(Window用户密码)

DIRLIST="WinShare1 WinShare2"   # Window共享目录的共享名列表

代码如下[autosmb]:

#!/bin/bash

##############################################################

#File: autosmb

#Date: 08/08/21

#Author: Neil Wang

#

#Description:

# Automic mount/umount Shared Directory from Windows

#         accroding to config file[~/.mountdir].

#         Frequence: check once every 10 minutes

##############################################################


# TimeEcho string with time str

function TimeEcho
{
    timestr=`date +"%F %T"`
    echo "[$timestr] $1"
}

# check dir if it's a bad smbmount dir, bad then smbumount it

function CheckSmbDir
{
    dir=$1
    TimeEcho "CheckSmbDir:[$dir]"

    ls $dir > /dev/null
    if [ $? -ne 0 ];then
        TimeEcho "Found a bad smbdir [$dir]!" >&2
        smbumount $dir
    fi
}

TimeEcho "########################################"
TimeEcho "# Auto Smb Mount/Unmount Tool V1.00 #"
TimeEcho "# RunTime: `date +'%F %T'` #"
TimeEcho "########################################"

# main loop

while :
do
    for userdir in `ls -p /home|grep /$`
    do
        user=${userdir%/}
        pushd /home/$userdir &> /dev/null
        [ $? -ne 0 ] && continue; # have not permission

        [ ! -f .mountdir ] && continue;
        TimeEcho "@@@Processing dir[$userdir]...@@@"
        eval `cat .mountdir`

        # check smb dir and auto umount bad dirs

        for mntdir in $DIRLIST
        do
            CheckSmbDir $mntdir
        done
        
        # check win host is alive

        ping -c 1 -W 1 $WINIP > /dev/null
        if [ $? -ne 0 ]; then
            continue;
        else
            for mntdir in $DIRLIST
            do
                [ ! -d $mntdir ] && mkdir $mntdir; # build dir if it not exist

                # check dir if already mounted

                if [ "`mount|grep -w "/home/$userdir$mntdir"|grep -v grep`" != "" ];then
                    TimeEcho "Dir[$mntdir] already mounted."
                    continue;
                fi
                TimeEcho "Smb mount dir[$mntdir]..."
                smbmount //$WINIP/$mntdir $mntdir \
                    -o username=$USERNAME,password=$PASSWORD,rw,uid=`id -u $user`,gid=`id -g $user`
            done
        fi
        popd > /dev/null
    done

    sleep 600 # check once every 10 minutes


done

 

使用root用户执行以下命令:

nohup ./autosmb >> /var/log/autosmb.log &

那么从此基本上就不用再关心共享目录的挂载问题了,并且新增用户只需要在自己目录下生成配置文件即可加入到自动操作中去。

阅读(592) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~