您现在可以使用所有 bash 你在这个 Bash 初学者系列中学到的技能来创建非常有用的 bash 可以帮助您自动执行无聊的重复性管理任务的脚本。
每当您编写一个 bash 脚本。
在本教程中,我将向您展示一些自动化脚本,您可以在以后扩展它们以自动化您想要的任何任务。 这些脚本将利用 bash 数组、if-else、循环和您在本系列中学到的其他概念。
自动化用户管理 bash 脚本
在多台服务器上创建用户可能是您作为系统管理员每天都会做的事情。 这是一项乏味的任务,所以让我们创建一个 bash 自动化它的脚本。
首先,创建一个文本文件,其中包含您希望在其中添加用户的所有服务器主机名或 IP 地址。
为了 example这里我创建了文件 服务器.txt 其中包括五个不同的服务器:
[email protected]:~$ cat servers.txt
server1
server2
server3
server4
server5
请记住,我使用了服务器主机名,因为我已经在我的 /etc/hosts 文件。 您也可以在此处使用 SSH 配置文件。
现在看看以下 添加用户.sh bash 脚本:
#!/bin/bash
servers=$(cat servers.txt)
echo -n "Enter the username: "
read name
echo -n "Enter the user id: "
read uid
for i in $servers; do
echo $i
ssh $i "sudo useradd -m -u $uid ansible"
if [ $? -eq 0 ]; then
echo "User $name added on $i"
else
echo "Error on $i"
fi
done
这 添加用户.sh 脚本首先会要求您输入要添加的用户的用户名和用户 ID; 然后,它将循环并连接到所有服务器 服务器.txt 通过 SSH 文件并添加请求的用户。
让我们运行脚本,看看它是如何工作的:
该脚本运行成功,并且在所有五台服务器上都添加了用户 ansible。 这里有几个重要的点你需要理解:
- 您可以使用空的 SSH 传递短语或运行 ssh 代理 以避免在脚本运行时提示输入密钥(或密码)。
- 您必须拥有在所有服务器上具有超级用户访问权限(无需密码)的有效帐户。
想象一下,您需要在 100 多个不同的 Linux 服务器上添加一个用户! 这 添加用户.sh 脚本绝对可以为您节省无数小时的工作。
使用自动备份 bash 脚本
备份是我们所有人都会定期做的事情,那么为什么不自动化呢? 看看以下 备份.sh 脚本:
#!/bin/bash
backup_dirs=("/etc" "/home" "/boot")
dest_dir="/backup"
dest_server="server1"
backup_date=$(date +%b-%d-%y)
echo "Starting backup of: ${backup_dirs[@]}"
for i in "${backup_dirs[@]}"; do
sudo tar -Pczf /tmp/$i-$backup_date.tar.gz $i
if [ $? -eq 0 ]; then
echo "$i backup succeeded."
else
echo "$i backup failed."
fi
scp /tmp/$i-$backup_date.tar.gz $dest_server:$dest_dir
if [ $? -eq 0 ]; then
echo "$i transfer succeeded."
else
echo "$i transfer failed."
fi
done
sudo rm /tmp/*.gzecho "Backup is done."
因此,您首先创建了一个名为 备份目录 存储我们要备份的所有目录名称。 然后,您创建了其他三个变量:
- 目标目录: 指定备份目标目录。
- 目标服务器: 指定备份目标服务器。
- 备份时间: 指定备份的日期。
接下来,对于目录中的所有目录 备份目录 数组,在其中创建一个 gzip 压缩的 tar 存档 /tmp,然后使用 scp 命令将备份发送/复制到目标服务器。 最后,从 /tmp.
这是一个示例运行 备份.sh 脚本:
[email protected]:~$ ./backup.sh
Starting backup of: /etc /home /boot
/etc backup succeeded.
etc-Aug-30-20.tar.gz 100% 1288KB 460.1KB/s 00:02
/etc transfer succeeded.
/home backup succeeded.
home-Aug-30-20.tar.gz 100% 2543KB 547.0KB/s 00:04
/home transfer succeeded.
/boot backup succeeded.
boot-Aug-30-20.tar.gz 100% 105MB 520.2KB/s 03:26
/boot transfer succeeded.
Backup is done.
您可能希望每天午夜运行备份。 在这种情况下,您可以安排脚本作为 cron 作业运行:
[email protected]:~$ crontab -e
0 0 * * * /home/kabary/scripts/backup.sh
监控可用磁盘空间
文件系统注定会耗尽空间,您唯一能做的就是在系统崩溃之前迅速采取行动! 您可以使用 df 命令查看任何文件系统上的剩余空间:
[email protected]:~$ df -h / /apps /database
Filesystem Size Used Avail Use% Mounted on
/dev/sda5 20G 7.9G 11G 44% /
/dev/mapper/vg1-applv 4.9G 2.4G 2.3G 52% /apps
/dev/mapper/vg1-dblv 4.9G 4.5G 180M 97% /database
我的 /数据库 文件系统几乎没有空间,因为它目前的使用率为 97%。 如果我使用 awk 命令只显示第五个字段,我只能显示用法。
现在看看以下 磁盘空间.sh bash 脚本:
#!/bin/bash
filesystems=("/" "/apps" "/database")
for i in ${filesystems[@]}; do
usage=$(df -h $i | tail -n 1 | awk '{print $5}' | cut -d % -f1)
if [ $usage -ge 90 ]; then
alert="Running out of space on $i, Usage is: $usage%"
echo "Sending out a disk space alert email."
echo $alert | mail -s "$i is $usage% full" your_email
fi
done
首先,您创建了一个 文件系统 包含您要监视的所有文件系统的数组。 然后,对于每个文件系统,您获取使用百分比并检查它是否大于或等于 90。如果使用率高于 90%,它会发送一封警报电子邮件,指示文件系统空间不足。
请注意,您需要更换 你的邮件 在脚本中使用您的实际电子邮件。
我运行了脚本:
[email protected]:~$ ./disk_space.sh
Sending out a disk space alert email.
我在收件箱中收到了以下电子邮件:
您可能想要运行 磁盘空间.sh 脚本六个小时左右。 在这种情况下,您还可以安排脚本作为 cron 作业运行:
[email protected]:~$ crontab -e
0 */6 * * * /home/kabary/scripts/disk_space.sh
您可以通过尝试解决以下工作簿中提出的问题来进行更多练习。 是的,它们也包括答案。
Bash 第 10 章练习题问题及其解决方案,用于练习您在本章中刚刚学到的内容 Bash-Chapter-10-Practice-Questions-Linux-Handbook.pdf 40 KB
下载圈
这将我们带到了我们的尽头 bash 初学者教程系列。 我希望你喜欢学习 bash 脚本。 和 bash 在您的技能库中编写脚本,您可以在 Linux 中自动执行任何无聊、乏味的任务!
整个 Bash 初学者系列也提供 PDF 格式。 您可以购买它来支持我们。 这本书是免费提供的(连同其他几本书,我们的 Pro 会员)。