samba是什么?能干什么?什么场合需要用到它?
samba 是基于SMB协议(ServerMessage Block,信息服务块)的开源软件,samba也可以是SMB协议的商标。SMB是一种Linux、UNIX系统上可用于共享文件和打印机等资源的协议,这种协议是基于Client\Server型的协议,Client端可以通过SMB访问到Server(服务器)上的共享资源。当Windows是 Client,CentOS是服务器时,通过Samba就可以实现window访问Linux的资源,实现两个系统间的数据交互。Linux对于开发来说是一个非常好的系统,但是人机友好不如windows,我就通常在windows上用sourceinsight编辑代码,然后在Linux端编译运行,而且经常需要把音视频从Linux和windows端互相拷贝,这时候Samba就显得很方便了。
下面的是实现脚本一次添加多个用户.smb创建用户的时候需要交互,这里用到 echo 很好的解决了这个问题 .
添加的用户前提是系统的用户,不然在添加smb 用户的时候会提示Failed to add entry for user的错误.
#!/bin/sh
# FileName: smbuser.sh
# Useage : sh smbbuser.sh userfile / username
#批量添加用户
add_list(){
#从userlist中读取用户帐号并循环添加
cat $1 | while read username
do
#利用echo -e 的回车功能解决smbpasswd需要交互的问题,比expect简单多了
echo -e "$username\n$username" | smbpasswd -a $username -s
#如果添加成功,则新建家目录,避免首次直接登陆samba失败,适合公司铁将军鉴权方式,其他环境可以省略
if [[ 0 = $? ]]
then
mkdir -p /home/$username
chown -R $username:users /home/$username
fi
done
}
#单个添加用户
add_one() {
echo -e "$1\n$1" | smbpasswd -a $1 -s && (
mkdir -p /home/$1
chown -R $1:users /home/$1
)
}
# 先确认系统安装了samba,如果没有就安装
which smbpasswd || yum install -y samba
#如果参数1是文件那么执行批量添加,否则就单个添加
if [[ ! -z $1 ]];then
test -f $1 && (
add_list $1
) || (
add_one $1
)
else
echo "Usage: $0 username / userfile"
exit 1
fi
使用方法,将如上代码保存为 smbuser.sh,然后将需要添加的用户名一行一个保存到一个文本文件,比如userfile,然后执行 bash smbuser.sh userfile 就能批量添加这些用户了,初始密码和用户名一致。
当然,直接执行 bash smbuser.sh + 用户名 还能添加单个用户。
由于smbpasswd正常使用是需要交互进行的,也就是输入用户名,再输入密码,这种批量交互的活完全可以使用expect脚本来完成。但是本文比较巧妙的利用了echo -e 可以输出回车符(\n)的特性.