2021-05-12 14:32:11
一套有用的 Unix 實用程式
我們都了解 GNU 核心實用程式GNU Core Utilities,所有類 Unix 作業系統都預裝了它們。它們是 GNU 作業系統中與檔案、Shell 和 文字處理相關的基礎實用工具。GNU 核心實用程式包括很多日常操作命令,例如 cat
、ls
、rm
、mkdir
、rmdir
、touch
、tail
和 wc
等。除了這些實用程式,還有更多有用的實用程式沒有預裝在類 Unix 作業系統中,它們匯集起來構成了 moreutilis
這個日益增長的集合。moreutils
可以在 GNU/Linux 和包括 FreeBSD,openBSD 及 Mac OS 在內的多種 Unix 型別作業系統上安裝。
截至到編寫這份指南時, moreutils
提供如下實用程式:
chronic
– 執行程式並忽略正常執行的輸出combine
– 使用布林操作合併檔案的行errno
– 查詢 errno 名稱及描述ifdata
– 獲取網路介面資訊,無需解析ifconfig
的結果ifne
– 在標準輸入非空的情況下執行程式isutf8
– 檢查檔案或標準輸入是否採用 UTF-8 編碼lckdo
– 帶鎖執行程式mispipe
– 使用管道連線兩個命令,返回第一個命令的退出狀態parallel
– 同時執行多個任務pee
– 將標準輸入傳遞給多個管道sponge
– 整合標準輸入並寫入檔案ts
– 為標准輸入增加時間戳資訊vidir
– 使用你預設的文字編輯器操作目錄檔案vipe
– 在管道中插入資訊編輯zrun
– 自動解壓並將其作為引數傳遞給命令
在 Linux 上安裝 moreutils
由於 moreutils
已經被打包到多種 Linux 發行版中,你可以使用發行版對應的軟體包管理器安裝 moreutils
。
在 Arch Linux 或衍生的 Antergos 和 Manjaro Linux 上,執行如下命令安裝 moreutils
:
$ sudo pacman -S moreutils
在 Fedora 上,執行:
$ sudo dnf install moreutils
在 RHEL,CentOS 和 Scientific Linux 上,執行:
$ sudoyum install epel-release
$ sudoyum install moreutils
在 Debian,Ubuntu 和 Linux Mint 上,執行:
$ sudoapt-get install moreutils
Moreutils – 打包更多有用的 Unix 實用程式
讓我們看一下幾個 moreutils
工具的用法細節。
combine 實用程式
正如 combine
名稱所示,moreutils 中的這個實用程式可以使用包括 and
,not
,or
和 xor
在內的布林操作,合併兩個檔案中的行。
and
– 輸出file1
和file2
都包含的行。not
– 輸出file1
包含但file2
不包含的行。or
– 輸出file1
或file2
包含的行。xor
– 輸出僅被file1
或file2
包含的行
下面舉例說明,方便你理解該實用程式的功能。這裡有兩個檔案,檔名分別為 file1
和 file2
,其內容如下:
$ cat file1
is
was
were
where
there
$ cat file2
is
were
there
下面,我使用 and
布林操作合併這兩個檔案。
$ combine file1 and file2
is
were
there
從上例的輸出中可以看出,and
布林操作只輸出那些 file1
和 file2
都包含的行;更具體的來說,命令輸出為兩個檔案共有的行,即 is,were 和 there。
下面我們換成 not
操作,觀察一下輸出。
$ combine file1 not file2
was
where
從上面的輸出中可以看出,not
操作輸出 file1
包含但 file2
不包含的行。
ifdata 實用程式
ifdata
實用程式可用於檢查網路介面是否存在,也可用於獲取網路介面的資訊,例如 IP 地址等。與預裝的 ifconfig
和 ip
命令不同,ifdata
的輸出更容易解析,這種設計的初衷是便於在 Shell 指令碼中使用。
如果希望檢視某個介面的 IP 地址,不妨以 wlp9s0
為例,執行如下命令:
$ ifdata -p wlp9s0
192.168.43.192255.255.255.0192.168.43.2551500
如果只檢視掩碼資訊,執行如下命令:
$ ifdata -pn wlp9s0
255.255.255.0
如果檢視網路介面的實體地址,執行如下命令:
$ ifdata -ph wlp9s0
A0:15:46:90:12:3E
如果判斷介面是否存在,可以使用 -pe
引數:
$ ifdata -pe wlp9s0
yes
pee 命令
該命令某種程度上類似於 tee
命令。
我們先用一個例子看一下 tee
的用法。
$ echo"Welcome to OSTechNIx"|tee file1 file2
Welcome to OSTechNIx
上述命令首先建立兩個檔案,名為 file1
和 file2
;接著,將 “Welcome to OSTechNix” 行分別附加到兩個檔案中;最後,在終端中列印輸出 “Welcome to OSTechNix”。
pee
命令提供類似的功能,但與 tee
又稍微有些差異。檢視下面的例子:
$ echo"Welcome to OSTechNIx"| pee catcat
Welcome to OSTechNIx
Welcome to OSTechNIx
從上面的命令輸出中可以看出,有兩個 cat
命令範例獲取 echo
命令的輸出並執行,因而終端中出現兩個同樣的輸出。
sponge 實用程式
這是 moreutils
軟體包中的另一個有用的實用程式。sponge
讀取標准輸入並寫入到指定的檔案中。與 Shell 中的重定向不同,sponge
接收到完整輸入後再寫入輸出檔案。
檢視下面這個文字檔案的內容:
$ cat file1
I
You
Me
We
Us
可見,檔案包含了一些無序的行;更具體的說,這些行“沒有”按照字母順序排序。如果希望將其內容安裝字母順序排序,你會怎麼做呢?
$ sort file1 > file1_sorted
這樣做沒錯,對吧?當然沒錯!在上面的命令中,我將 file1
檔案內容按照字母順序排序,將排序後的內容儲存在 file1_sorted
檔案中。但如果使用 sponge
命令,你可以在不建立新檔案(即 file1_sorted
)的情況下完成同樣的任務,命令如下:
$ sort file1 | sponge file1
那麼,讓我們檢查一下檔案內容是否已經按照字母順序排序:
$ cat file1
I
Me
Us
We
You
看到了吧?並不需要建立新檔案。在指令碼程式設計中,這非常有用。另一個好訊息是,如果待寫入的檔案已經存在,sponge
會保持其許可權資訊permissions不變。
ts 實用程式
正如名稱所示,ts
命令在每一行輸出的行首增加時間戳timestamp。
檢視如下命令的輸出:
$ ping-c 2 localhost
PING localhost(localhost.localdomain (::1))56 data bytes
64 bytes from localhost.localdomain (::1): icmp_seq=1 ttl=64time=0.055 ms
64 bytes from localhost.localdomain (::1): icmp_seq=2 ttl=64time=0.079 ms
--- localhost ping statistics ---
2 packets transmitted,2 received,0% packet loss,time1018ms
rtt min/avg/max/mdev =0.055/0.067/0.079/0.012 ms
下面,結合 ts
實用程式執行同樣地命令:
$ ping-c 2 localhost | ts
Aug2113:32:28 PING localhost(localhost (::1))56 data bytes
Aug2113:32:2864 bytes from localhost (::1): icmp_seq=1 ttl=64time=0.063 ms
Aug2113:32:2864 bytes from localhost (::1): icmp_seq=2 ttl=64time=0.113 ms
Aug2113:32:28
Aug2113:32:28--- localhost ping statistics ---
Aug2113:32:282 packets transmitted,2 received,0% packet loss,time4ms
Aug2113:32:28 rtt min/avg/max/mdev =0.063/0.088/0.113/0.025 ms
對比輸出可以看出,ts
在每一行行首增加了時間戳。下面給出另一個例子:
$ ls-l | ts
Aug2113:34:25 total 120
Aug2113:34:25 drwxr-xr-x 2 sk users12288Aug2020:05Desktop
Aug2113:34:25 drwxr-xr-x 2 sk users4096Aug1018:44Documents
Aug2113:34:25 drwxr-xr-x 24 sk users12288Aug2113:06Downloads
[...]
vidir 實用程式
vidir
實用程式可以讓你使用 vi
編輯器(或其它 $EDITOR
環境變數指定的編輯器)編輯指定目錄的內容。如果沒有指定目錄,vidir
會預設編輯你當前的目錄。
下面的命令編輯 Desktop
目錄的內容:
$ vidir Desktop/
vidir
上述命令使用 vi
編輯器開啟了指定的目錄,其中目錄內的檔案都會對應一個數位。下面你可以按照 vi
的操作方式來編輯目錄中的這些檔案:例如,刪除行意味著刪除目錄中對應的檔案,修改行中字串意味著對檔案進行重新命名。
你也可以編輯子目錄。下面的命令會編輯當前目錄及所有子目錄:
$ find| vidir -
請注意命令結尾的 -
。如果 -
被指定為待編輯的目錄,vidir
會從標準輸入讀取一系列檔名,列出它們讓你進行編輯。
如果你只想編輯當前目錄下的檔案,可以使用如下命令:
$ find-type f | vidir -
只想編輯特定型別的檔案,例如 .PNG
檔案?你可以使用如下命令:
$ vidir *.png
這時命令只會編輯當前目錄下以 .PNG
為字尾的檔案。
vipe 實用程式
vipe
命令可以讓你使用預設編輯器接收 Unix 管道輸入,編輯之後使用管道輸出供下一個程式使用。
執行下面的命令會開啟 vi
編輯器(當然是我預設使用的編輯器),你可以編輯 echo
命令的管道輸入(即 “Welcome to OSTechNix”),最後將編輯過的內容輸出到終端中。
$ echo"Welcome to OSTechNIx"| vipe
HelloWorld
從上面的輸出可以看出,我通過管道將 “Welcome to OSTechNix” 輸入到 vi
編輯器中,將內容編輯為 “Hello World”,最後顯示該內容。
好了,就介紹這麼多吧。我只介紹了一小部分實用程式,而 moreutils
包含更多有用的實用程式。我在文章開始的時候已經列出目前 moreutils
軟體包內包含的實用程式,你可以通過 man
幫助頁面獲取更多相關命令的細節資訊。舉個例子,如果你想了解 vidir
命令,請執行:
$ man vidir
希望這些內容對你有所幫助。我還將繼續分享其它有趣且實用的指南,如果你認為這些內容對你有所幫助,請分享到社群網路或專業圈子,也歡迎你支援 OSTechNix 專案。
乾杯!
via: https://www.ostechnix.com/moreutils-collection-useful-unix-utilities/
作者:SK 選題:lujun9972 譯者:pinewall 校對:wxy
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址:https://www.linuxidc.com/Linux/2018-08/153793.htm
相關文章