2015-10-14 74 views
1

我搜索了但我沒有發現任何問題。 我想在Linux命令行中提供關於CPU使用率和本地硬盤驅動器的信息,格式化文本就像我的程序下面的例子一樣。 這些示例是MS-Windows上的命令行輸出。我希望在Linux上也可以。CPU和HDD信息

謝謝

wmic logicaldisk where drivetype=3 get caption,freespace,size 

Caption FreeSpace  Size 
C:  135314194432 255953203200 
D:  126288519168 128033222656 
E:  336546639872 1000194015232 
F:  162184503296 1000194015232 

wmic cpu get loadpercentage 

LoadPercentage 
4 
+1

'man df'(df做你需要的)而且:linux沒有「driveletters」 – wildplasser

+0

也是爲了cpu的使用? 在我的程序中,我檢查每個硬盤驅動器的可用空間併發送警告。 如果沒有driveletters,我該怎麼辦? 我會嘗試命令tomorow工作。 謝謝。 – Mercenaire

+0

Unix系統通常具有*掛載點*的概念,您可以將其視爲在Windows中等同於*驅動器號*。裝載點是裝有給定文件系統的路徑。安裝點可以是例如'/ home','/'或'/ mnt/pendrive' –

回答

0

沒有命令,讓你的CPU的負載百分比。實際上不可能通過系統調用來實現(在Windows中也不在Linux中)。你可以得到的是當前執行的滴答數(對於每個字段,用戶,系統,io,irq空閒)...,然後在一段時間後再次調用並計算它。這樣就是如何工作讀取CPU百分比的所有命令。

下面的腳本bash的,讓你的是:(只創建一個名爲例如文件cpu.sh粘貼此代碼並執行看到的結果)

_estado() 
{ 
     cat /proc/stat | grep "cpu " | sed -e 's/ */:/g' -e 's/^cpux//' 
} 

_ticksconcretos() 
{ 
     echo $1 | cut -d ':' -f $2 

} 

while true ; do 
     INICIAL=$(_estado) 
     sleep 1 
     FINAL=$(_estado) 

     UsuarioI=$(_ticksconcretos $INICIAL 1) 
     UsuarioF=$(_ticksconcretos $FINAL 1) 

     NiceI=$(_ticksconcretos $INICIAL 2) 
     NiceF=$(_ticksconcretos $FINAL 2) 

     SistemaI=$(_ticksconcretos $INICIAL 3) 
     SistemaF=$(_ticksconcretos $FINAL 3) 

     idleI=$(_ticksconcretos $INICIAL 4) 
     idleF=$(_ticksconcretos $FINAL 4) 

     IOI=$(_ticksconcretos $INICIAL 5) 
     IOF=$(_ticksconcretos $FINAL 5) 

     IRQI=$(_ticksconcretos $INICIAL 6) 
     IRQF=$(_ticksconcretos $FINAL 6) 

     SOFTIRQI=$(_ticksconcretos $INICIAL 7) 
     SOFTIRQF=$(_ticksconcretos $FINAL 7) 

     STEALI=$(_ticksconcretos $INICIAL 8) 
     STEALF=$(_ticksconcretos $FINAL 8) 

     InactivoF=$(($idleF + $IOF)) 
     InactivoI=$(($idleI + $IOI)) 
     ActivoI=$(($UsuarioI + $NiceI + $SistemaI + $IRQI + $SOFTIRQI + $STEALI)) 
     ActivoF=$(($UsuarioF + $NiceF + $SistemaF + $IRQF + $SOFTIRQF + $STEALF)) 

     TOTALI=$(($ActivoI + $InactivoI)) 
     TOTALF=$(($ActivoF + $InactivoF)) 

     PORC=$((((($TOTALF - $TOTALI) - ($InactivoF - $InactivoI)) * 100/($TOTALF - $TOTALI)))) 
     clear 
     echo "CPU: $PORC %" 

     done 

對於自由空間,您可以使用類似這樣的:

df -h -x tmpfs -x devtmpfs | awk -F " " '{print $1 " " $4 " " $2}' 

至極會給你這樣的輸出:

Filesystem Free Size 
/dev/sda1 16G 25G 
/dev/sda5 46G 79G 
/dev/sdb8 130G 423G 

SDA代表第一個磁盤,sda1第一個分區,sda2,第二個等等,您可以在打印中添加(或更改)$ 6以獲取掛載點而不是分區,更改順序或更多事物。

+0

謝謝。它幫助了我 – Mercenaire

3

你不會找到任何正是像你所提供的輸出。 唯一的選擇是使用磁盤空間df

Filesystem     1K-blocks  Used Available Use% Mounted on 
/dev/root      73216256 27988724 41485276 41%/
devtmpfs      8170164   0 8170164 0% /dev 
tmpfs       8203680  544 8203136 1% /dev/shm 
tmpfs       8203680  12004 8191676 1% /run 
tmpfs        5120   4  5116 1% /run/lock 
tmpfs       8203680   0 8203680 0% /sys/fs/cgroup 
/dev/sdb1      482922  83939 374049 19% /boot 

和CPU你有更多的選擇,如 vmstat

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- 
r b swpd free buff cache si so bi bo in cs us sy id wa st 
0 0  0 11865304 149956 1474172 0 0 53 46 126 707 3 0 96 0 0 

top -b | head

top - 21:48:43 up 54 min, 1 user, load average: 0.13, 0.17, 0.22 
Tasks: 188 total, 1 running, 187 sleeping, 0 stopped, 0 zombie 
%Cpu(s): 3.0 us, 0.4 sy, 0.1 ni, 96.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st 
KiB Mem : 16407364 total, 11848936 free, 2888844 used, 1669584 buff/cache 
KiB Swap:  0 total,  0 free,  0 used. 13230972 avail Mem 

    PID USER  PR NI VIRT RES SHR S %CPU %MEM  TIME+ COMMAND 
    1 root  20 0 40544 6440 3780 S 0.0 0.0 0:01.15 systemd 
    2 root  20 0  0  0  0 S 0.0 0.0 0:00.00 kthreadd 
    3 root  20 0  0  0  0 S 0.0 0.0 0:00.00 ksoftirqd/0 
+0

在我的程序中,我使用Java檢索字符串中的信息,並檢查每個硬盤驅動器的可用空間併發送警告。如果沒有driveletters,我該怎麼辦?我已經看到這個命令,但有很多文本要刪除,我如何只保留我需要的信息? 謝謝 – Mercenaire

+0

在'df'的情況下,你有6列而不是你的3,這並不是很難刪除。您必須將Windows輸出分割爲程序中的列,因此對於6列應該很容易。 –