使用 shell 脚本一键安装 Samba
1 配置本地 yum 源
1.1 删除原有的 repo 文件
[root@samba_shell_install ~]$ cd /etc/yum.repos.d/
[root@samba_shell_install yum.repos.d]$ rm -rf ./*
1.2 编写新的 repo 文件
[root@samba_shell_install yum.repos.d]$ vi yum.repo
[AppStream]
name=AppStream
baseurl=file:///mnt
gpgcheck=0
enabled=1
1.3 挂载光盘并设置永久挂载
[root@samba_shell_install yum.repos.d]$ mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@samba_shell_install yum.repos.d]$ vi /etc/fstab
/dev/cdrom /mnt iso9660 default 0 0
[root@samba_shell_install yum.repos.d]$ mount -a
1.4 验证本地 yum 源是否可用
[root@samba_shell_install yum.repos.d]$ yum makecache
已加载插件:fastestmirror
Determining fastest mirrors
AppStream | 3.6 kB 00:00:00
(1/4): AppStream/group_gz | 153 kB 00:00:00
(2/4): AppStream/primary_db | 6.1 MB 00:00:00
(3/4): AppStream/filelists_db | 7.2 MB 00:00:00
(4/4): AppStream/other_db | 2.6 MB 00:00:00
元数据缓存已建立
[root@samba_shell_install yum.repos.d]$ yum -y install vim net-tools bash-completion
2 编写 shell 脚本
2.1 编写shell脚本安装samba服务
[root@samba_shell_install ~]$ vim install_samba.sh
#!/bin/bash
if [ "$#" -ne 1 ]; then #检查传递给脚本的参数数量($#)是否不等于(-ne)1。如果参数数量不是1,则执行then后面的代码块
echo "脚本运行路径为: $0 /dir/" #在参数数量不是1的情况下,输出一个错误消息,说明脚本需要一个参数(即共享目录的路径),并且该参数应该跟在脚本名称($0)后面。
exit 1 #如果参数数量不正确,则退出脚本,并返回一个非零的退出状态码
else
dir="$1" #将传递给脚本的第一个参数($1)赋值给变量dir
if ! [[ "$dir" =~ ^/ ]]; then #检查dir变量是否以根目录开头。如果不以根目录开头(即不是一个绝对路径),则执行then后面的代码块
echo "请提供一个绝对路径:" #如果dir不是绝对路径,则输出一个错误消息,要求用户提供一个绝对路径
exit 1
fi
if ! rpm -q samba >/dev/null; then #使用rpm命令查询是否已安装samba软件包。>/dev/null将输出重定向到空设备,即不显示任何输出。如果samba没有安装(rpm -q samba返回非零状态码),则执行then后面的代码块
echo "开始安装samba服务" #如果samba没有安装,则输出一个消息说明开始安装
sleep 2 #暂停脚本执行2秒钟,可能是为了让用户看到前面的消息
yum -y install samba #使用yum命令自动安装samba软件包
if [ $? -ne 0 ]; then #检查上一条命令执行后的返回状态($?)是否不等于(-ne)0,如果不等于0,则执行then后面的代码块
echo "服务未正确安装" #如果yum命令执行失败则输出一个错误消息,告知用户安装失败
exit 1
fi
fi
dirconf="/etc/samba/smb.conf" #将smb.conf文件的路径赋值给变量dirconf,这个文件是Samba的主要配置文件
cat >> "$dirconf" <<EOF #使用cat命令将由<<EOF开始和EOF结束的部分的内容追加到smb.conf文件的末尾,定义了一个新的Samba共享
[share] #这是共享的名称。在Windows的网络浏览器中,会看到这个名称作为共享文件夹的名称
comment = share all #这是关于此共享的描述或注释。当用户在网络浏览器中查看此共享时,会看到这个描述
path = $dir #将目录($dir)作为共享文件夹的实际路径
browseable = yes #表明此共享可以在网络浏览器中被浏览。如果设置为 no,则用户需要知道确切的共享名称才能访问它
public = yes #表明此共享是公共的,不需要用户名和密码即可访问
writable = no #表明此共享是只读的,用户不能在此共享上写入或修改文件。如果设置为 yes,则用户可以在此共享上创建、修改和删除文件
EOF
if [ ! -d "$dir" ]; then #检查目录($dir)是否存在,如果不存在,则执行then后面的代码块
mkdir -p "$dir" #创建目录($dir)
fi
chmod 777 "$dir" #将目录($dir)赋予可读、可写、可执行权限(777)
chown nobody:nobody "$dir" #设置目录($dir)的主、组均为nobody
echo "test" > "$dir/test.txt" #在共享目录中创建一个名为test.txt的文件,并写入内容“test”
systemctl start smb #使用systemctl命令启动Samba服务
if [ $? -ne 0 ]; then #检查上一条命令返回值($?)是否不等于0,如果不等于0,则执行then后面的代码块
echo "服务启动失败。请检查配置文件" #samba服务重启失败,告知用户
else
echo "samba 配置完毕,请验证" #samba服务重启成功,告知用户配置完成
fi
fi
[root@samba_shell_install ~]$ chmod 777 install_samba.sh
[root@samba_shell_install ~]$ ./install_samba.sh /share
2.2 添加samba用户并设置密码
[root@samba_shell_install ~]$ useradd sambauser
[root@samba_shell_install ~]$ smbpasswd -a sambauser
New SMB password:
Retype new SMB password:
Added user sambauser.
2.3 将用户添加到samba数据库中
[root@samba_shell_install ~]$ pdbedit -a -u sambauser
new password:
retype new password:
Unix username: sambauser
NT username:
Account Flags: [U ]
User SID: S-1-5-21-1048911917-1102794934-2356885306-1000
Primary Group SID: S-1-5-21-1048911917-1102794934-2356885306-513
Full Name:
Home Directory: \\samba_shell_install\sambauser
HomeDir Drive:
Logon Script:
Profile Path: \\samba_shell_install\sambauser\profile
Domain: SAMBA_SHELL_INSTALL
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: 三, 06 2月 2036 23:06:39 CST
Kickoff time: 三, 06 2月 2036 23:06:39 CST
Password last set: 五, 14 6月 2024 17:40:52 CST
Password can change: 五, 14 6月 2024 17:40:52 CST
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
[root@samba_shell_install ~]$ pdbedit -L
sambauser:1001:
3 验证
3.1 在物理机中使用 win+R 调出运行窗口,按照图片输入samba服务器ip地址和共享文件夹名
文件夹、文档均可查看