用於監控網路、磁碟使用情況、執行時間、平均負載和記憶體的Shell指令碼
在Linux環境中,跟蹤系統資源(如網路使用情況、磁碟使用情況、執行時間、平均負載和記憶體使用情況)至關重要。這些資訊有助於系統管理員檢測潛在問題並提高系統性能。但是,手動監控這些指標既費時又費力。因此,在本文中,我們將討論如何使用shell指令碼監控這些系統資源。
什麼是Shell指令碼?
Shell指令碼是在命令列介面上執行並自動執行重複性任務的程式。它是一系列用指令碼語言(如Bash)編寫的命令,可以在Linux終端中執行。
建立Shell指令碼
要建立shell指令碼,我們首先需要建立一個副檔名為.sh的檔案。例如,讓我們使用nano編輯器建立一個名為“sysmon.sh”的檔案:
nano sysmon.sh
這將開啟nano編輯器,我們可以在其中編寫shell指令碼。編寫完指令碼後,我們可以按“Ctrl + X”儲存並關閉編輯器,然後按“Y”,最後按“Enter”。
下一步是使用以下命令更改指令碼的許可權,使其可執行:
chmod +x sysmon.sh
現在我們的指令碼可執行了,讓我們繼續監控系統資源。
監控網路使用情況
要監控網路使用情況,我們可以使用“iftop”命令列實用程式。此工具透過監控網路連線並顯示每個連線的頻寬使用情況來顯示即時網路使用情況。要在我們的指令碼中使用iftop,我們需要使用以下命令安裝它:
sudo apt-get install iftop
安裝iftop後,我們可以使用以下命令在指令碼中使用它來監控網路使用情況:
iftop -t -s 2
此命令每兩秒顯示一次即時網路使用情況,如下所示:
22:46:25 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 22:46:27 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 22:46:29 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 22:46:31 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 22:46:33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
監控磁碟使用情況
要監控磁碟使用情況,我們可以使用“df”命令列實用程式。此工具按分割槽顯示檔案系統磁碟空間使用情況。要在我們的指令碼中使用“df”命令,我們可以使用以下命令:
df -h
此命令以人類可讀的格式顯示磁碟使用情況,如下所示:
Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 798M 1.1M 797M 1% /run /dev/sda1 93G 9.9G 78G 12% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/loop1 56M 56M 0 100% /snap/core18/2128 /dev/loop2 33M 33M 0 100% /snap/snapd/14788
監控執行時間
要監控系統執行時間,我們可以使用“uptime”命令列實用程式。此工具顯示當前時間、系統執行時間、使用者數量以及過去1、5和15分鐘的系統平均負載。要在我們的指令碼中使用“uptime”命令,我們可以使用以下命令:
uptime
此命令顯示系統執行時間和平均負載,如下所示:
22:56:16 up 15 days, 8:43, 1 user, load average: 0.00, 0.01, 0.05
監控平均負載
要監控系統平均負載,我們可以使用“top”命令列實用程式。此工具顯示即時的系統資源使用情況,包括CPU使用率、記憶體使用率和系統平均負載。要在我們的指令碼中使用“top”命令,我們可以使用以下命令:
top -bn1 | grep load | awk '{printf "%.2f
", $(NF-2)}'
此命令顯示1分鐘平均負載,如下所示:
0.00
監控記憶體使用情況
要監控記憶體使用情況,我們可以使用“free”命令列實用程式。此工具顯示系統上可用的總記憶體、已用記憶體和空閒記憶體。要在我們的指令碼中使用“free”命令,我們可以使用以下命令:
free -m | awk 'NR==2{printf "%.2f%%
", $3*100/$2 }'
此命令顯示已用RAM的百分比,如下所示:
35.00%
將命令組合到指令碼中
現在我們有了監控網路使用情況、磁碟使用情況、執行時間、平均負載和記憶體使用情況的命令,我們可以將它們組合到一個shell指令碼中。我們的最終指令碼如下所示:
#!/bin/bash echo "Network Usage:" sudo iftop -t -s 2 echo "Disk Usage:" df -h echo "Uptime:" uptime echo "Load Average:" top -bn1 | grep load | awk '{printf "%.2f
", $(NF-2)}' echo "RAM Usage:" free -m | awk 'NR==2{printf "%.2f%%
", $3*100/$2 }'
此指令碼首先顯示網路使用情況,然後顯示磁碟使用情況、系統執行時間、平均負載和記憶體使用情況。要執行此指令碼,我們需要導航到儲存檔案的目錄,並使用以下命令執行它:
./sysmon.sh
這將執行指令碼並在終端中顯示系統資源指標。
此外,可以使用cron作業將指令碼安排為定期自動執行。cron作業是在指定時間間隔執行的計劃任務,可用於自動化重複性任務。要將指令碼安排為每10分鐘執行一次,我們可以將以下條目新增到crontab檔案中:
*/10 * * * * /path/to/sysmon.sh
此條目將每10分鐘執行一次指令碼,並在終端中顯示系統資源指標。我們還可以將輸出重定向到檔案以進行進一步分析,或者使用mail命令將其傳送到電子郵件地址。
結論
監控系統資源對於確保Linux環境的順利執行至關重要。在本文中,我們討論瞭如何在Linux中使用shell指令碼監控網路使用情況、磁碟使用情況、執行時間、平均負載和記憶體使用情況。透過組合相關的命令,我們可以自動化監控過程併為系統管理員節省時間。
此外,值得一提的是,可以進一步自定義此指令碼以適應特定的監控需求。例如,可以修改網路使用情況,使其僅顯示來自特定介面或IP地址的流量。同樣,可以過濾磁碟使用情況,使其僅顯示特定分割槽或目錄。
總之,shell指令碼是監控Linux環境中系統資源的強大工具。透過正確的命令組合,系統管理員可以自動化監控過程並節省時間。可以使用cron作業進一步自定義和安排指令碼自動執行,使其成為系統管理員不可或缺的工具。