Linux 管理员的 10 个关键技巧(8)-命令行脚本和实用程序

本文介绍如何利用Linux命令行脚本提高系统管理员的工作效率,通过示例展示了如何批量生成hosts文件和检查集群节点内存一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux 系统管理员通过使用权威的命令行脚本会变得更高效。这包括巧妙使用循环和知道如何使用 awkgrepsed 等的实用程序解析数据。通常这可以减少击键次数,降低用户出错率。

例如,假设需要为即将安装的 Linux 集群生成一个新的 /etc/hosts 文件。一般的做法是在 vi 或文本编辑器中添加 IP 地址。不过,可以通过使用现有 /etc/hosts 文件并将以下内容追加到此文件来实现。在命令行上运行:

# P=1; for i in $(seq -w 200); do echo "192.168.99.$P n$i"; P=$(expr $P + 1);
done >>/etc/hosts

200 个主机名(n001 到 n200)将由 IP 地址(192.168.99.1 到 192.168.99.200)来创建。手动填充这样的文件有可能会创建重复的 IP 地址或主机名,因此这是使用内置命令行消除用户错误的好例子。请注意,这是在 bash shell(大多数 Linux 发行版的默认值)内完成的。

再举一个例子,假设要检查 Linux 集群中的各个计算节点中的内存大小是否一样。通常,拥有一个发行版或类似的 shell 是最好的。但是为了演示,以下使用 SSH。

假设 SSH 设置为不使用密码验证。然后运行:

# for num in $(seq -w 200); do ssh n$num free -tm | grep Mem | awk '{print $2}';
done | sort | uniq

这样的命令行相当简洁。(如果在其中放入正则表达式情况会更糟)。让我们对它进行细分,详细讨论各部分。

首先从 001 循环到 200。使用 seq 命令的 -w 选项在前面填充 0。 然后替换 num 变量,创建通过 SSH 连接的主机。有了目标主机后,向它发出命令。本例中是:

free -m | grep Mem | awk '{print $2}'

这个命令的意思是:

  • 使用 free 命令获取以兆字节为单位的内存大小。
  • 获取这个命令的结果,并使用 grep 获取包含字符串 Mem 的行。
  • 获取那一行并使用 awk 输出第二个字段,它是节点中的总内存。

在每个节点上执行这个操作。

在每个节点上执行命令后,200 个节点的整个输出就传送(| d)到 sort 命令,以对所有内存值进行排序。

最后,使用 uniq 命令消除重复项。这个命令会导致以下情况中的一种:

  • 如果所有节点(n001 到 n200)拥有相同的内存大小,则只显示一个数字。这个数字就是每个操作系统看到的内存大小。
  • 如果节点内存大小不同,将会看到几个内存大小的值。
  • 最后,如果某个节点上的 SSH 出现故障,则会看到一些错误消息。

这个命令并不是完美无缺的。如果发现与预期不同的内存值,您就不知道是哪一个节点出了问题,或者有多少个节点。为此需要发出另一个命令。

这个技巧提供了一种查看某些内容的快速方式,而且如果发生错误,您可以立刻知道。其价值在于快速检查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值