许多基于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) |