Linux中國

在 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 系統看起來更友好一點。

via: https://www.networkworld.com/article/3296631/linux/displaying-data-in-a-human-friendly-way-on-linux.html

作者:Sandra Henry-Stocker 選題:lujun9972 譯者:MjSeven 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國