歡迎光臨
每天分享高質量文章

一套有用的 Unix 實用程式 | Linux 中國

還有更多有用的實用程式沒有預裝在類 Unix 操作系統中,它們彙集起來構成了 moreutilis 這個日益增長的集合。
— Sk


致謝
編譯自 | 
https://www.ostechnix.com/moreutils-collection-useful-unix-utilities/
 
 作者 | Sk
 譯者 | Andy Song (pinewall) ????共計翻譯:35 篇 貢獻時間:156 天

我們都瞭解 GNU 核心實用程式GNU Core Utilities,所有類 Unix 操作系統都預裝了它們。它們是 GNU 操作系統中與檔案、Shell 和 文本處理相關的基礎實用工具。GNU 核心實用程式包括很多日常操作命令,例如 catlsrmmkdirrmdirtouchtail 和 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:

  1. $ sudo pacman -S moreutils

在 Fedora 上,運行:

  1. $ sudo dnf install moreutils

在 RHELCentOS 和 Scientific Linux 上,運行:

  1. $ sudo yum install epel-release

  2. $ sudo yum install moreutils

在 DebianUbuntu 和 Linux Mint 上,運行:

  1. $ sudo apt-get install moreutils

Moreutils – 打包更多有用的 Unix 實用程式

讓我們看一下幾個 moreutils 工具的用法細節。

combine 實用程式

正如 combine 名稱所示,moreutils 中的這個實用程式可以使用包括 andnotor和 xor 在內的布爾操作,合併兩個檔案中的行。

◈ and – 輸出 file1 和 file2 都包含的行。
◈ not – 輸出 file1 包含但 file2 不包含的行。
◈ or – 輸出 file1 或 file2 包含的行。
◈ xor – 輸出僅被 file1 或 file2 包含的行

下麵舉例說明,方便你理解該實用程式的功能。這裡有兩個檔案,檔案名分別為 file1 和 file2,其內容如下:

  1. $ cat file1

  2. is

  3. was

  4. were

  5. where

  6. there

  7. $ cat file2

  8. is

  9. were

  10. there

下麵,我使用 and 布爾操作合併這兩個檔案。

  1. $ combine file1 and file2

  2. is

  3. were

  4. there

從上例的輸出中可以看出,and 布爾操作只輸出那些 file1 和 file2 都包含的行;更具體的來說,命令輸出為兩個檔案共有的行,即 is,were 和 there。

下麵我們換成 not 操作,觀察一下輸出。

  1. $ combine file1 not file2

  2. was

  3. where

從上面的輸出中可以看出,not 操作輸出 file1 包含但 file2 不包含的行。

ifdata 實用程式

ifdata 實用程式可用於檢查網絡接口是否存在,也可用於獲取網絡接口的信息,例如 IP 地址等。與預裝的 ifconfig 和 ip 命令不同,ifdata 的輸出更容易解析,這種設計的初衷是便於在 Shell 腳本中使用。

如果希望查看某個接口的 IP 地址,不妨以 wlp9s0 為例,運行如下命令:

  1. $ ifdata -p wlp9s0

  2. 192.168.43.192 255.255.255.0 192.168.43.255 1500

如果只查看掩碼信息,運行如下命令:

  1. $ ifdata -pn wlp9s0

  2. 255.255.255.0

如果查看網絡接口的物理地址,運行如下命令:

  1. $ ifdata -ph wlp9s0

  2. A0:15:46:90:12:3E

如果判斷接口是否存在,可以使用 -pe 引數:

  1. $ ifdata -pe wlp9s0

  2. yes

pee 命令

該命令某種程度上類似於 tee 命令。

我們先用一個例子看一下 tee 的用法。

  1. $ echo "Welcome to OSTechNIx" | tee file1 file2

  2. Welcome to OSTechNIx

上述命令首先創建兩個檔案,名為 file1 和 file2;接著,將 “Welcome to OSTechNix” 行分別附加到兩個檔案中;最後,在終端中打印輸出 “Welcome to OSTechNix”。

pee 命令提供類似的功能,但與 tee 又稍微有些差異。查看下麵的例子:

  1. $ echo "Welcome to OSTechNIx" | pee cat cat

  2. Welcome to OSTechNIx

  3. Welcome to OSTechNIx

從上面的命令輸出中可以看出,有兩個 cat 命令實體獲取 echo 命令的輸出並執行,因而終端中出現兩個同樣的輸出。

sponge 實用程式

這是 moreutils 軟體包中的另一個有用的實用程式。sponge 讀取標準輸入並寫入到指定的檔案中。與 Shell 中的重定向不同,sponge 接收到完整輸入後再寫入輸出檔案。

查看下麵這個文本檔案的內容:

  1. $ cat file1

  2. I

  3. You

  4. Me

  5. We

  6. Us

可見,檔案包含了一些無序的行;更具體的說,這些行“沒有”按照字母順序排序。如果希望將其內容安裝字母順序排序,你會怎麼做呢?

  1. $ sort file1 > file1_sorted

這樣做沒錯,對吧?當然沒錯!在上面的命令中,我將 file1 檔案內容按照字母順序排序,將排序後的內容儲存在 file1_sorted 檔案中。但如果使用 sponge 命令,你可以在不創建新檔案(即 file1_sorted)的情況下完成同樣的任務,命令如下:

  1. $ sort file1 | sponge file1

那麼,讓我們檢查一下檔案內容是否已經按照字母順序排序:

  1. $ cat file1

  2. I

  3. Me

  4. Us

  5. We

  6. You

看到了吧?並不需要創建新檔案。在腳本編程中,這非常有用。另一個好訊息是,如果待寫入的檔案已經存在,sponge 會保持其權限信息permissions不變。

ts 實用程式

正如名稱所示,ts 命令在每一行輸出的行首增加時間戳timestamp

查看如下命令的輸出:

  1. $ ping -c 2 localhost

  2. PING localhost(localhost.localdomain (::1)) 56 data bytes

  3. 64 bytes from localhost.localdomain (::1): icmp_seq=1 ttl=64 time=0.055 ms

  4. 64 bytes from localhost.localdomain (::1): icmp_seq=2 ttl=64 time=0.079 ms

  5. --- localhost ping statistics ---

  6. 2 packets transmitted, 2 received, 0% packet loss, time 1018ms

  7. rtt min/avg/max/mdev = 0.055/0.067/0.079/0.012 ms

下麵,結合 ts 實用程式運行同樣地命令:

  1. $ ping -c 2 localhost | ts

  2. Aug 21 13:32:28 PING localhost(localhost (::1)) 56 data bytes

  3. Aug 21 13:32:28 64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.063 ms

  4. Aug 21 13:32:28 64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.113 ms

  5. Aug 21 13:32:28

  6. Aug 21 13:32:28 --- localhost ping statistics ---

  7. Aug 21 13:32:28 2 packets transmitted, 2 received, 0% packet loss, time 4ms

  8. Aug 21 13:32:28 rtt min/avg/max/mdev = 0.063/0.088/0.113/0.025 ms

對比輸出可以看出,ts 在每一行行首增加了時間戳。下麵給出另一個例子:

  1. $ ls -l | ts

  2. Aug 21 13:34:25 total 120

  3. Aug 21 13:34:25 drwxr-xr-x 2 sk users 12288 Aug 20 20:05 Desktop

  4. Aug 21 13:34:25 drwxr-xr-x 2 sk users 4096 Aug 10 18:44 Documents

  5. Aug 21 13:34:25 drwxr-xr-x 24 sk users 12288 Aug 21 13:06 Downloads

  6. [...]

vidir 實用程式

vidir 實用程式可以讓你使用 vi 編輯器(或其它 $EDITOR 環境變數指定的編輯器)編輯指定目錄的內容。如果沒有指定目錄,vidir 會預設編輯你當前的目錄。

下麵的命令編輯 Desktop 目錄的內容:

  1. $ vidir Desktop/

vidir

上述命令使用 vi 編輯器打開了指定的目錄,其中目錄內的檔案都會對應一個數字。下麵你可以按照 vi 的操作方式來編輯目錄中的這些檔案:例如,刪除行意味著刪除目錄中對應的檔案,修改行中字串意味著對檔案進行重命名。

你也可以編輯子目錄。下麵的命令會編輯當前目錄及所有子目錄:

  1. $ find | vidir -

請註意命令結尾的 -。如果 - 被指定為待編輯的目錄,vidir 會從標準輸入讀取一系列檔案名,列出它們讓你進行編輯。

如果你只想編輯當前目錄下的檔案,可以使用如下命令:

  1. $ find -type f | vidir -

只想編輯特定型別的檔案,例如 .PNG 檔案?你可以使用如下命令:

  1. $ vidir *.png

這時命令只會編輯當前目錄下以 .PNG 為後綴的檔案。

vipe 實用程式

vipe 命令可以讓你使用預設編輯器接收 Unix 管道輸入,編輯之後使用管道輸出供下一個程式使用。

執行下麵的命令會打開 vi 編輯器(當然是我預設使用的編輯器),你可以編輯 echo 命令的管道輸入(即 “Welcome to OSTechNix”),最後將編輯過的內容輸出到終端中。

  1. $ echo "Welcome to OSTechNIx" | vipe

  2. Hello World

從上面的輸出可以看出,我通過管道將 “Welcome to OSTechNix” 輸入到 vi 編輯器中,將內容編輯為 “Hello World”,最後顯示該內容。

好了,就介紹這麼多吧。我只介紹了一小部分實用程式,而 moreutils 包含更多有用的實用程式。我在文章開始的時候已經列出目前 moreutils 軟體包內包含的實用程式,你可以通過 man 幫助頁面獲取更多相關命令的細節信息。舉個例子,如果你想瞭解 vidir 命令,請運行:

  1. $ man vidir

希望這些內容對你有所幫助。我還將繼續分享其它有趣且實用的指南,如果你認為這些內容對你有所幫助,請分享到社交網絡或專業圈子,也歡迎你支持 OSTechNix 專案。

乾杯!


via: https://www.ostechnix.com/moreutils-collection-useful-unix-utilities/

作者:SK[2] 選題:lujun9972 譯者:pinewall 校對:wxy

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

赞(0)

分享創造快樂

© 2021 知識星球   网站地图