在命令行上檢索磁碟統計資訊
我怎樣才能最便攜地從 bash 腳本中獲取磁碟統計資訊?
我已經在使用
cat /sys/block/*/stat
按磁碟/分區計算總體頻寬,但是我也試圖確定磁碟的總體大小,以及使用/空閒的扇區數。
df
我知道這些統計資訊/sys/class/
可以使用/sys/block/
.這可能嗎?還是我需要使用
df | awk
top 來獲取我正在尋找的統計數據?編輯
案例:
這用於度量報告腳本,該腳本將從系統收集各種資訊並將其報告給圖形系統。
即抓取扇區讀/寫統計資訊
for device in /sys/block/* do stats=$( cat $device/stat ) sectorsRead=$( echo $stats | awk '{print $3}' ) sectorsWrite=$( echo $stats | awk '{print $7}' ) doSomethingWith sectorsRead doSomethingWith sectorsWrite done
我想做類似的事情,但要獲取扇區總數,而不是使用/免費的扇區。
您嘗試做的最便攜的工具是
df
. 不要擺弄/sys
哪個不能保證在任何非 Linux 系統上。並且不要重新發明輪子。這正是POSIX指定df
的目的和原因。當然,事情並沒有那麼簡單,並且有多種
df
實現方式,其中一些具有不同的格式。然而,編寫 POSIX 規範的好人,在他們無限的智慧中,在規範中包含了以下選項df
:-P Produce output in the format described in the STDOUT section.
所以,如果你總是使用
df -P
它,它應該盡可能便攜。使用該標誌時,任何符合 POSIX 的df
版本(應該是所有版本或盡可能接近沒有區別)將產生遵循以下規範的輸出(取自POSIXdf
頁面):當同時指定 -k 和 -P 選項時,應寫入以下標題行(在 POSIX 語言環境中):
“文件系統 1024 塊已用可用容量已安裝在\n”
如果指定了 -P 選項而沒有指定 -k 選項,則應寫入以下標題行(在 POSIX 語言環境中):
“文件系統 512 塊已使用可用容量已安裝在\n”
該實現可以調整標題行和各個數據行的間距,以便資訊以有序的列呈現。
帶有 -P 的剩餘輸出應包含每個指定文件系統的一行資訊。這些行的格式如下:
“%s %d %d %d %d%% %s\n”, , , , , ,
在下面的列表中,所有以 512 字節為單位(指定 -k 時為 1024 字節)表示的數量應向上舍入到下一個更高的單位。這些欄位是:
文件系統的名稱,採用實現定義的格式。文件系統的總大小,以 512 字節為單位。該圖的確切含義是實現定義的,但應包括 , , 以及系統保留的任何通常不提供給使用者的空間。分配給文件系統中現有文件的總空間量,以 512 字節為單位。文件系統中可供非特權使用者創建新文件的可用空間總量,以 512 字節為單位。當這個數字小於或等於 0 時,除非程序具有適當的權限,否則在不先刪除其他文件的情況下,不能在文件系統上創建任何新文件。寫入的數字可能小於零。目前分配給文件系統上所有文件的正常可用空間的百分比。這應使用分數計算:/( + )
以百分比表示。如果小於零,此百分比可能大於 100。百分比值應表示為正整數,任何小數結果都會導致它四捨五入到下一個最高整數。
文件系統層次結構出現在其下的目錄。
您可能還應該使用該
-k
標誌來始終將結果列印為 1024 字節單位而不是 512。您還可以設置LC_ALL=POSIX
以確保語言環境不會影響輸出。將所有這些放在一起給出:將其與超便攜的 相結合
awk
,您可以:totalSectors=$(env -i LC_ALL=POSIX df -k -P /dev/sda1 | awk 'NR>1{print $2}') usedSectors=$(env -i LC_ALL=POSIX df -k -P /dev/sda1 | awk 'NR>1{print $3}') availableSectors=$(env -i LC_ALL=POSIX df -k -P /dev/sda1 | awk 'NR>1{print $4}')