如何用 10 行 bash shell 腳本監控 Linux?
监控我们的环境对于服务器运维至关重要,特别是在部署新应用程序时。如今,许多公司每天都在使用开源解决方案来监控系统资源。但是,当我们需要在一段时间内进行测试监控时,bash脚本就会派上用场。
在本教程中,我们将编写一个bash shell脚本,它将输出一个三列表,显示我们计算机上内存、磁盘和CPU的百分比使用情况。
让我们开始吧!
这个脚本主要由三个部分组成:
1. 监控内存:
free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }' 9.24%
free -m
是用于显示已使用和空闲内存的命令,输出如下:
[root@localhost tmp]# free -m total used free shared buffers cached Mem: 996 92 904 0 11 31 -/+ buffers/cache: 49 947 Swap: 1583 0 1583
但是,我们需要从上面的输出中获取第二行的总内存和已用内存。我们可以使用 AWK 来从给定输出中提取数据。
AWK 是一种用于文本处理和数据提取的编程语言。它是大多数 UNIX 系统的标准功能。awk ‘NR==2’
从第二行提取数据。$3
和 $2
分别充当已用量和总量。
监控磁盘
df -h | awk '$NF=="/"{printf "%s\t\t", $5}' 7%
第二个命令输出使用的磁盘百分比。df -h
输出与磁盘使用情况和分区相关的数据。
[root@localhost tmp]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 14G 814M 12G 7% / tmpfs 499M 0 499M 0% /dev/shm /dev/sda1 485M 32M 428M 7% /boot
awk $NF
输出字段数。但是,df -h | awk '$NF=="/"
将转到包含字符 /
的那一行。$5
将从该行中选择第 5 个字段。这可确保该命令能够提取正确的磁盘使用百分比(在我们的示例中为 %7)。
监控 CPU
top -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}'
top -bn1
命令将只执行一次 top
命令(n1
= 一次迭代),当我们想在 bash 脚本中使用 top
或将其数据输出到文件时使用可以使用 -b
选项。
grep load
将输出包含字符串 load
的行。$(NF-2)
将计算该行上的字段数并减 2。
[root@localhost tmp]# top -bn1 | grep load top - 19:31:25 up 1:47, 1 user, load average: 0.00, 0.00, 0.00
在浏览完 bash 脚本的基本部分之后,我们需要将这些命令保存到变量 MEMORY
、DISK
和 CPU
中:
MEMORY=$(free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }') DISK=$(df -h | awk '$NF=="/"{printf "%s\t\t", $5}') CPU=$(top -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}')
我们需要脚本运行一段时间(比如,一个小时)。为了做到这一点,我们需要使用 while do
循环,每次循环后延迟 x 秒(取决于您的测试):
end=$((SECONDS+3600)) while [ $SECONDS -lt $end ]; do echo "$MEMORY$DISK$CPU" sleep 5 done
为了在一定时间内运行一次循环,我们可以定义一个变量 $end
,它从 bash 脚本开始的时间开始计算当前的秒数,因此是 SECONDS
,并在当前秒数上加上一个数字。所以一个小时就是 3600 秒。
上述代码片段的第二行指出,只要$SECONDS
(当前秒数)小于 $SECONDS+3600
,while
循环就会继续执行。因此,我们定义了循环的开始时间和结束时间,以及将每个循环暂停 5 秒的睡眠时间。循环内部是每 5 秒将那三个变量分配一次新值,以及将输出三个资源使用情况的 echo "$MEMORY$DISK$CPU"
。
完整代码如下:
#! /bin/bash printf "Memory\t\tDisk\t\tCPU\n" end=$((SECONDS+3600)) while [ $SECONDS -lt $end ]; do MEMORY=$(free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }') DISK=$(df -h | awk '$NF=="/"{printf "%s\t\t", $5}') CPU=$(top -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}') echo "$MEMORY$DISK$CPU" sleep 5 done
上面的代码将输出以下内容:
[root@localhost tmp]# ./stats.sh Memory Disk CPU 9.34% 7% 0.00% 9.34% 7% 0.00% 9.34% 7% 0.00% 9.34% 7% 0.00% ^C[root@localhost tmp]#
您始终可以将数据输出到日志文件:
[root@localhost tmp]# ./stats.sh >> log.txt
Stress 测试

由于机器上几乎没有任何负载,我们可以使用 stress
来使 CPU 和内存负载一段时间。
使用以下命令安装(在 CentOS 上):
[root@localhost tmp]# yum install stress Failed to set locale, defaulting to C Loaded plugins: fastestmirror Determining fastest mirrors epel/metalink | 4.2 kB 00:00 * base: ba.mirror.garr.it * epel: ftp.riken.jp * extras: centos.fastbull.org * updates: centos.fastbull.org base | 3.7 kB 00:00 epel | 4.3 kB 00:00 epel/primary_db | 5.9 MB 00:37 extras | 3.4 kB 00:00 extras/primary_db | 37 kB 00:00 updates | 3.4 kB 00:00 updates/primary_db | 5.2 MB 00:30 Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package stress.x86_64 0:1.0.4-4.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved =================================================================================================== Package Arch Version Repository Size =================================================================================================== Installing: stress x86_64 1.0.4-4.el6 epel 36 k Transaction Summary =================================================================================================== Install 1 Package(s) Total download size: 36 k Installed size: 89 k Is this ok [y/N]: y Downloading Packages: stress-1.0.4-4.el6.x86_64.rpm | 36 kB 00:01 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : stress-1.0.4-4.el6.x86_64 1/1 Verifying : stress-1.0.4-4.el6.x86_64 1/1 Installed: stress.x86_64 0:1.0.4-4.el6 Complete!
现在我们可以使用命令 stress
来负载我们的机器。例如,通过指定两个 CPU 密集型进程、一个 I/O 密集型进程和一个内存分配器进程,对系统施加 4 个平均负载,如下所示。以下压力测试将运行 1 小时。
[root@localhost tmp]# stress -c 2 -i 1 -m 1 --vm-bytes 128M -t 3600s stress: info: [1574] dispatching hogs: 2 cpu, 1 io, 1 vm, 0 hdd stress: info: [1574] successful run completed in 3600s [root@localhost tmp]# ./stats.sh Memory Disk CPU 20.48% 7% 1.21% 20.48% 7% 1.02% 20.48% 7% 0.94% 21.89% 7% 1.18% 20.68% 7% 1.41% 22.09% 7% 1.62% 24.10% 7% 1.81% 24.90% 7% 1.98% 32.93% 7% 2.14% 30.32% 7% 2.29% 20.58% 7% 2.63% 27.91% 7% 2.82% 20.48% 7% 2.59% 20.48% 7% 2.38% 20.48% 7% 2.19% 20.48% 7% 2.02% 20.48% 7% 1.86%
关于如何为所有系统管理员创建一个非常容易且有用的 bash 脚本的教程到此结束。
以上是如何用 10 行 bash shell 腳本監控 Linux?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

CentOS 和 Ubuntu 的關鍵差異在於:起源(CentOS 源自 Red Hat,面向企業;Ubuntu 源自 Debian,面向個人)、包管理(CentOS 使用 yum,注重穩定;Ubuntu 使用 apt,更新頻率高)、支持週期(CentOS 提供 10 年支持,Ubuntu 提供 5 年 LTS 支持)、社區支持(CentOS 側重穩定,Ubuntu 提供廣泛教程和文檔)、用途(CentOS 偏向服務器,Ubuntu 適用於服務器和桌面),其他差異包括安裝精簡度(CentOS 精

CentOS 安裝步驟:下載 ISO 映像並刻錄可引導媒體;啟動並選擇安裝源;選擇語言和鍵盤佈局;配置網絡;分區硬盤;設置系統時鐘;創建 root 用戶;選擇軟件包;開始安裝;安裝完成後重啟並從硬盤啟動。

CentOS 已停止維護,替代選擇包括:1. Rocky Linux(兼容性最佳);2. AlmaLinux(與 CentOS 兼容);3. Ubuntu Server(需要配置);4. Red Hat Enterprise Linux(商業版,付費許可);5. Oracle Linux(與 CentOS 和 RHEL 兼容)。在遷移時,考慮因素有:兼容性、可用性、支持、成本和社區支持。

如何使用 Docker Desktop? Docker Desktop 是一款工具,用於在本地機器上運行 Docker 容器。其使用步驟包括:1. 安裝 Docker Desktop;2. 啟動 Docker Desktop;3. 創建 Docker 鏡像(使用 Dockerfile);4. 構建 Docker 鏡像(使用 docker build);5. 運行 Docker 容器(使用 docker run)。

Docker利用Linux內核特性,提供高效、隔離的應用運行環境。其工作原理如下:1. 鏡像作為只讀模板,包含運行應用所需的一切;2. 聯合文件系統(UnionFS)層疊多個文件系統,只存儲差異部分,節省空間並加快速度;3. 守護進程管理鏡像和容器,客戶端用於交互;4. Namespaces和cgroups實現容器隔離和資源限制;5. 多種網絡模式支持容器互聯。理解這些核心概念,才能更好地利用Docker。

CentOS 停止維護後,用戶可以採取以下措施應對:選擇兼容髮行版:如 AlmaLinux、Rocky Linux、CentOS Stream。遷移到商業發行版:如 Red Hat Enterprise Linux、Oracle Linux。升級到 CentOS 9 Stream:滾動發行版,提供最新技術。選擇其他 Linux 發行版:如 Ubuntu、Debian。評估容器、虛擬機或云平台等其他選項。

Docker鏡像構建失敗的故障排除步驟:檢查Dockerfile語法和依賴項版本。檢查構建上下文中是否包含所需源代碼和依賴項。查看構建日誌以獲取錯誤詳細信息。使用--target選項構建分層階段以識別失敗點。確保使用最新版本的Docker引擎。使用--t [image-name]:debug模式構建鏡像以調試問題。檢查磁盤空間並確保足夠。禁用SELinux以防止干擾構建過程。向社區平台尋求幫助,提供Dockerfile和構建日誌描述以獲得更具體的建議。

Docker 進程查看方法:1. Docker CLI 命令:docker ps;2. Systemd CLI 命令:systemctl status docker;3. Docker Compose CLI 命令:docker-compose ps;4. Process Explorer(Windows);5. /proc 目錄(Linux)。
