在 Linux 中如何以人性化的方式顯示數據
不是每個人都以二進位方式思考,他們不想在大腦中給大數字插入逗號來了解文件的大小。因此,Linux 命令在過去的幾十年里不斷發展,以更人性化的方式向用戶顯示信息,這一點也不奇怪。在今天的文章中,我們將看一看各種命令所提供的一些選項,它們使得數據變得更容易理解。
為什麼默認顯示不更友好一些?
如果你想知道為什麼默認不顯示得更人性化,畢竟,我們人類才是計算機的默認用戶啊。你可能會問自己:「為什麼我們不竭盡全力輸出對每個人都有意義的命令的響應?」主要的答案是:改變命令的默認輸出可能會干擾許多其它進程,這些進程是在期望默認響應之上構建的。其它的工具,以及過去幾十年開發的腳本,如果突然以一種完全不同的格式輸出,而不是它們過去所期望的那樣,可能會被一種非常醜陋的方式破壞。
說真的,也許我們中的一些人可能更願意看文件大小中的所有數字,即 1338277310 而不是 1.3G。在任何情況下,切換默認習慣都可能造成破壞,但是為更加人性化的響應提供一些簡單的選項只需要讓我們學習一些命令選項而已。
可以顯示人性化數據的命令
有哪些簡單的選項可以使 Unix 命令的輸出更容易解析呢?讓我們來看一些命令。
top
你可能沒有注意到這個命令,但是在 top 命令中,你可以通過輸入 E
(大寫字母 E)來更改顯示全部內存使用的方式。連續按下將數字顯示從 KiB 到 MiB,再到 GiB,接著是 TiB、PiB、EiB,最後回到 KiB。
認識這些單位吧?這裡有一組定義:
2`10 = 1,024 = 1 KiB (kibibyte)
2`20 = 1,048,576 = 1 MiB (mebibyte)
2`30 = 1,073,741,824 = 1 GiB (gibibyte)
2`40 = 1,099,511,627,776 = 1 TiB (tebibyte)
2`50 = 1,125,899,906,842,624 = PiB (pebibyte)
2`60 = 1,152,921,504,606,846,976 = EiB (exbibyte)
2`70 = 1,180,591,620,717,411,303,424 = 1 ZiB (zebibyte)
2`80 = 1,208,925,819,614,629,174,706,176 = 1 YiB (yobibyte)
這些單位與千位元組(KB)、兆位元組(MB)和千兆位元組(GB)密切相關。雖然它們很接近,但是它們之間仍有很大的區別:一組是基於 10 的冪,另一組是基於 2 的冪。例如,比較千位元組和千兆位元組,我們可以看看它們不同點:
KB = 1000 = 10`3
KiB = 1024 = 2`10
以下是 top
命令輸出示例,使用 KiB 為單位默認顯示:
top - 10:49:06 up 5 days, 35 min, 1 user, load average: 0.05, 0.04, 0.01
Tasks: 158 total, 1 running, 118 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 6102680 total, 4634980 free, 392244 used, 1075456 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 5407432 avail Mem
在按下 E
之後,單位變成了 MiB:
top - 10:49:31 up 5 days, 36 min, 1 user, load average: 0.03, 0.04, 0.01
Tasks: 158 total, 2 running, 118 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.6 sy, 0.0 ni, 99.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 5959.648 total, 4526.348 free, 383.055 used, 1050.246 buff/cache
MiB Swap: 2047.996 total, 2047.996 free, 0.000 used. 5280.684 avail Mem
再次按下 E
,單位變為 GiB:
top - 10:49:49 up 5 days, 36 min, 1 user, load average: 0.02, 0.03, 0.01
Tasks: 158 total, 1 running, 118 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
GiB Mem : 5.820 total, 4.420 free, 0.374 used, 1.026 buff/cache
GiB Swap: 2.000 total, 2.000 free, 0.000 used. 5.157 avail Mem
你還可以通過按字母 e
來更改為顯示每個進程使用內存的數字單位。它將從默認的 KiB 到 MiB,再到 GiB、TiB,接著到 PiB(估計你能看到小數點後的很多 0),然後返回 KiB。下面是按了一下 e
之後的 top
輸出:
top - 08:45:28 up 4 days, 22:32, 1 user, load average: 0.02, 0.03, 0.00
Tasks: 167 total, 1 running, 118 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.2 us, 0.0 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 6102680 total, 4641836 free, 393348 used, 1067496 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 5406396 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
784 root 20 0 543.2m 26.8m 16.1m S 0.9 0.5 0:22.20 snapd
733 root 20 0 107.8m 2.0m 1.8m S 0.4 0.0 0:18.49 irqbalance
22574 shs 20 0 107.5m 5.5m 4.6m S 0.4 0.1 0:00.09 sshd
1 root 20 0 156.4m 9.3m 6.7m S 0.0 0.2 0:05.59 systemd
du
du
命令顯示磁碟空間文件或目錄使用了多少,如果使用 -h
選項,則將輸出大小調整為最合適的單位。默認情況下,它以千位元組(KB)為單位。
$ du camper*
360 camper_10.jpg
5684 camper.jpg
240 camper_small.jpg
$ du -h camper*
360K camper_10.jpg
5.6M camper.jpg
240K camper_small.jpg
df
df
命令也提供了一個 -h
選項。請注意在下面的示例中是如何以千兆位元組(GB)和兆位元組(MB)輸出的:
$ df -h | grep -v loop
Filesystem Size Used Avail Use% Mounted on
udev 2.9G 0 2.9G 0% /dev
tmpfs 596M 1.7M 595M 1% /run
/dev/sda1 110G 9.0G 95G 9% /
tmpfs 3.0G 0 3.0G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 3.0G 0 3.0G 0% /sys/fs/cgroup
tmpfs 596M 16K 596M 1% /run/user/121
/dev/sdb2 457G 73M 434G 1% /apps
tmpfs 596M 0 596M 0% /run/user/1000
下面的命令使用了 -h
選項,同時使用 -T
選項來顯示我們正在查看的文件系統的類型。
$ df -hT /mnt2
Filesystem Type Size Used Avail Use% Mounted on
/dev/sdb2 ext4 457G 73M 434G 1% /apps
ls
即使是 ls
,它也為我們提供了調整大小顯示的選項,保證是最合理的單位。
$ ls -l camper*
-rw-rw-r-- 1 shs shs 365091 Jul 14 19:42 camper_10.jpg
-rw-rw-r-- 1 shs shs 5818597 Jul 14 19:41 camper.jpg
-rw-rw-r-- 1 shs shs 241844 Jul 14 19:45 camper_small.jpg
$ ls -lh camper*
-rw-rw-r-- 1 shs shs 357K Jul 14 19:42 camper_10.jpg
-rw-rw-r-- 1 shs shs 5.6M Jul 14 19:41 camper.jpg
-rw-rw-r-- 1 shs shs 237K Jul 14 19:45 camper_small.jpg
free
free
命令允許你以位元組(B),千位元組(KB),兆位元組(MB)和千兆位元組(GB)為單位查看內存使用情況。
$ free -b
total used free shared buff/cache available
Mem: 6249144320 393076736 4851625984 1654784 1004441600 5561253888
Swap: 2147479552 0 2147479552
$ free -k
total used free shared buff/cache available
Mem: 6102680 383836 4737924 1616 980920 5430932
Swap: 2097148 0 2097148
$ free -m
total used free shared buff/cache available
Mem: 5959 374 4627 1 957 5303
Swap: 2047 0 2047
$ free -g
total used free shared buff/cache available
Mem: 5 0 4 0 0 5
Swap: 1 0 1
tree
雖然 tree
命令與文件或內存計算無關,但它也提供了非常人性化的文件視圖,它分層顯示文件以說明文件是如何組織的。當你試圖了解如何安排目錄內容時,這種顯示方式非常有用。(LCTT 譯註:也可以看看 pstree
,它以樹狀結構顯示進程樹。)
$ tree
.g to
├── 123
├── appended.png
├── appts
├── arrow.jpg
├── arrow.png
├── bin
│ ├── append
│ ├── cpuhog1
│ ├── cpuhog2
│ ├── loop
│ ├── mkhome
│ ├── runme
stat
stat
命令是另一個以非常人性化的格式顯示信息的命令。它提供了更多關於文件的元數據,包括文件大小(以位元組和塊為單位)、文件類型、設備和 inode(索引節點)、文件所有者和組(名稱和數字 ID)、以數字和 rwx 格式顯示的文件許可權以及文件的最後訪問和修改日期。在某些情況下,它也可能顯示最初創建文件的時間。
$ stat camper*
File: camper_10.jpg
Size: 365091 Blocks: 720 IO Block: 4096 regular file
Device: 801h/2049d Inode: 796059 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ shs) Gid: ( 1000/ shs)
Access: 2018-07-19 18:56:31.841013385 -0400
Modify: 2018-07-14 19:42:25.230519509 -0400
Change: 2018-07-14 19:42:25.230519509 -0400
Birth: -
File: camper.jpg
Size: 5818597 Blocks: 11368 IO Block: 4096 regular file
Device: 801h/2049d Inode: 796058 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ shs) Gid: ( 1000/ shs)
Access: 2018-07-19 18:56:31.845013872 -0400
Modify: 2018-07-14 19:41:46.882024039 -0400
Change: 2018-07-14 19:41:46.882024039 -0400
Birth: -
總結
Linux 命令提供了許多選項,可以讓用戶更容易理解或比較它們的輸出。對於許多命令,-h
選項會顯示更友好的輸出格式。對於其它的,你可能必須通過使用某些特定選項或者按下某個鍵來查看你希望的輸出。我希望這其中一些選項會讓你的 Linux 系統看起來更友好一點。
作者:Sandra Henry-Stocker 選題:lujun9972 譯者:MjSeven 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive