如何在linux上使用管道

使用Linux管道編排命令列實用程式如何協作。透過利用一組獨立命令並將它們轉化為一個專注的團隊,簡化複雜的流程並提高生產率。我們教你怎麼做。...

使用Linux管道編排命令列實用程式如何協作。透過利用一組獨立命令並將它們轉化為一個專注的團隊,簡化複雜的流程並提高生產率。我們教你怎麼做。

到處都是管道

管道是Linux和類Unix作業系統最有用的命令列特性之一。管道的使用方式不計其數。看看任何網站上的任何Linux命令列文章,不僅僅是我們的,您會發現管道出現的頻率比沒有出現的頻率要高。我回顧了How To Geek的一些Linux文章,它們中都以某種方式使用了管道。

Linux管道允許您執行shell不支援的開箱即用操作。但是,由於Linux的設計理念是讓許多小型實用程式能夠很好地執行它們的專用功能,而且沒有不必要的功能“做一件事,把它做好”的口號,因此您可以將命令字串與管道連線在一起,以便一個命令的輸出成為另一個命令的輸入。你的每一個命令都會給球隊帶來獨特的天賦,很快你就會發現你已經組建了一支獲勝的隊伍。

一個簡單的例子

假設我們有一個目錄,裡面有許多不同型別的檔案。我們想知道那個目錄中有多少特定型別的檔案。有其他方法可以做到這一點,但是本練習的目的是引入管道,所以我們將使用管道來實現。

我們可以使用ls輕鬆獲得檔案列表:

ls

如何在linux上使用管道

為了區分感興趣的檔案型別,我們將使用grep。我們想找到檔名或副檔名中有“頁”這個詞的檔案。

我們將使用shell特殊字元“|”將ls的輸出透過管道傳輸到grep中。

ls | grep "page"

如何在linux上使用管道

grep打印出與其搜尋模式匹配的行。所以這給了我們一個只包含“.page”檔案的列表。

如何在linux上使用管道

即使是這個微不足道的例子也顯示了管道的功能。ls的輸出沒有傳送到終端視窗。它作為grep命令使用的資料傳送給grep。我們看到的輸出來自grep,它是這個鏈中的最後一個命令。

延伸我們的鏈條

讓我們開始擴充套件管道命令鏈。我們可以透過新增wc命令來計算“.page”檔案。我們將在wc中使用-l(行計數)選項。注意,我們還為ls添加了-l(長格式)選項。我們很快就會用到這個。

ls - | grep "page" | wc -l

如何在linux上使用管道

grep不再是鏈中的最後一個命令,因此我們看不到它的輸出。grep的輸出被輸入wc命令。我們在終端視窗中看到的輸出來自wc。wc報告目錄中有69個“.page”檔案。

讓我們再擴充套件一下。我們將從命令列中刪除wc命令並用awk替換它。ls的輸出中有9列帶有-l(長格式)選項。我們將使用awk列印第五列、第三列和第九列。這些是檔案的大小、所有者和名稱。

ls -l | grep "page" | awk '{print $5 " " $3 " " $9}'

如何在linux上使用管道

對於每個匹配的檔案,我們會得到這些列的列表。

如何在linux上使用管道

現在我們將透過sort命令傳遞該輸出。我們將使用-n(數字)選項讓sort知道第一列應該被視為數字。

ls -l | grep "page" | awk '{print $5 " " $3 " " $9}' | sort -n

如何在linux上使用管道

輸出現在按檔案大小順序排序,我們自定義選擇了三列。

如何在linux上使用管道

新增其他命令

最後我們將新增tail命令。我們將告訴它只列出最後五行輸出。

ls -l | grep "page" | awk '{print $5 " " $3 " " $9}' | sort -n | tail -5

如何在linux上使用管道

這意味著我們的命令會轉換為類似“show me the five largest”.page“這個目錄中的檔案,按大小排序。”當然,沒有命令可以完成這一點,但是透過使用管道,我們建立了自己的檔案。我們可以將此命令或任何其他長命令新增為別名或shell函式,以儲存所有鍵入的內容。

以下是輸出:

如何在linux上使用管道

我們可以透過在sort命令中新增-r(reverse)選項,並使用head而不是tail從輸出的頂部拾取行來反轉大小順序。

007Ys3FFgy1gp62qr8qd2j30hy025jrd

這一次,從大到小列出了五個最大的“.page”檔案:

如何在linux上使用管道

最近的一些例子

這裡有兩個有趣的例子來自最近的How To geek文章。

有些命令(如xargscommand)被設計為將輸入透過管道傳輸到它們。下面是一種讓wc對多個檔案中的單詞、字元和行進行計數的方法,方法是將ls管道化到xargs中,然後xargs將檔名列表作為命令列引數傳遞給wc。

ls *.page | xargs wc

如何在linux上使用管道

單詞、字元和行的總數列在終端視窗的底部。

如何在linux上使用管道

下面是一種獲取當前目錄中唯一副檔名的排序列表的方法,其中包含每種型別的計數。

ls | rev | cut -d'.' -f1 | rev | sort | uniq -c

如何在linux上使用管道

這裡發生了很多事情。

  • ls:列出目錄中的檔案
  • rev:反轉檔名中的文字。
  • 剪下:在指定分隔符“.”第一次出現時剪下字串。在此之後的文字將被丟棄。
  • rev:反轉剩餘的文字,即副檔名。
  • 排序:按字母順序對列表排序。
  • uniq:統計列表中每個唯一項的數目。

輸出顯示副檔名的列表,按字母順序排列,每個唯一型別的計數。

如何在linux上使用管道

命名管道

我們可以使用另一種型別的管道,稱為命名管道。前面示例中的管道是shell在處理命令列時動態建立的。建立、使用然後丟棄管道。它們是短暫的,不留痕跡。它們只在使用它們的命令執行時存在。

命名管道在檔案系統中顯示為持久物件,因此可以使用ls檢視它們。它們是永續性的,因為它們將在計算機重新啟動後繼續存在,儘管此時其中的任何未讀資料都將被丟棄。

命名管道一次被大量使用,以允許不同的程序傳送和接收資料,但我已經很久沒有看到它們以這種方式使用了。毫無疑問,有人在那裡仍然使用他們的偉大效果,但我沒有遇到任何最近。但是為了完整起見,或者只是為了滿足你的好奇心,這裡有一些你可以使用它們的方法。

命名管道是使用mkfifo命令建立的。此命令將在當前目錄中建立一個名為“geek pipe”的命名管道。

mkfifo geek-pipe

如何在linux上使用管道

如果將ls命令與-l(長格式)選項一起使用,則可以看到命名管道的詳細資訊:

ls -l geek-pipe

如何在linux上使用管道

清單的第一個字元是“p”,表示它是一個管道。如果是“d”,則表示檔案系統物件是一個目錄,破折號“-”表示它是一個常規檔案。

使用命名管道

我們用菸斗吧。我們在前面的示例中使用的未命名管道將資料立即從傳送命令傳遞到接收命令。透過命名管道傳送的資料將保留在管道中,直到讀取為止。資料實際上儲存在記憶體中,因此無論ls列表中是否有資料,命名管道的大小都不會發生變化。

在這個例子中,我們將使用兩個終端視窗。我將使用標籤:

# Terminal-1

在一個終端視窗和

# Terminal-2

在另一個,所以你可以區分他們。雜湊“#”告訴shell後面是一個註釋,並忽略它。

讓我們把前面示例的全部內容重定向到命名管道中。因此,我們在一個命令中同時使用未命名管道和命名管道:

ls | rev | cut -d'.' -f1 | rev | sort | uniq -c > geek-pipe

如何在linux上使用管道

看來不會有什麼大的變化。但是,您可能注意到沒有返回到命令提示符,因此發生了一些事情。

在另一個終端視窗中,發出以下命令:

cat < geek-pipe

如何在linux上使用管道

我們將命名管道的內容重定向到cat中,以便cat在第二個終端視窗中顯示該內容。輸出如下:

如何在linux上使用管道

您將看到在第一個終端視窗中返回到命令提示符。

如何在linux上使用管道

那麼,剛才發生了什麼。

  • 我們將一些輸出重定向到指定的管道中。
  • 第一個終端視窗沒有返回到命令提示符。
  • 資料一直保留在管道中,直到從第二個終端的管道中讀取為止。
  • 我們在第一個終端視窗返回到命令提示符。

您可能認為可以在第一個終端視窗中將命令作為後臺任務執行,方法是在命令末尾新增一個&amp;字元。你是對的。在這種情況下,我們會立即返回到命令提示符。

不使用後臺處理的目的是強調命名管道是一個阻塞程序。將某物放入命名管道只會開啟管道的一端。在讀取程式提取資料之前,另一端不會開啟。核心掛起第一個終端視窗中的程序,直到從管道的另一端讀取資料。

管道的力量

如今,命名管道是一種新奇的行為。

另一方面,普通的老Linux管道是終端視窗工具箱中最有用的工具之一。Linux命令列開始為您帶來活力,當您可以協調一組命令以產生一種內聚效能時,您將獲得全新的動力。

臨別提示:編寫管道命令最好是一次新增一個命令並使該部分正常工作,然後在下一個命令中使用管道。

  • 發表於 2021-04-03 04:49
  • 閱讀 ( 49 )
  • 分類:網際網路

你可能感興趣的文章

pipelight的終結:如何讓它在linux上執行

... pipelight是如何被棄用的? ...

  • 發佈於 2021-03-13 13:01
  • 閲讀 ( 44 )

如何在linux中使用ls命令

如果您不知道如何使用ls命令,那麼獲取與儲存上的檔案相關的詳細資訊是很困難的。在這裡,我們將討論Linux上與ls命令相關的所有內容,以及它使用的一些不同的標誌。 ...

  • 發佈於 2021-03-26 18:01
  • 閲讀 ( 55 )

如何在linux上使用seq命令

Linux seq命令可以在眨眼之間生成數字列表。但是如何將這個功能付諸實際使用呢?我們將向您展示seq如何為您帶來便利。 seq命令 乍一看,Linux seq命令似乎有些奇怪。它可以讓你快速生成數字序列,就這樣!不過,這裡的關鍵...

  • 發佈於 2021-04-01 11:46
  • 閲讀 ( 42 )

如何使用shopt定製bashshell

...shshell的行為,您可以控制超過50個設定。我們將向您展示如何按照您喜歡的方式定製您的Linux系統。 shopt內建 shopt內建是bashshell所有版本的一部分,因此不需要安裝任何東西。多年來,shopt提供的選項數量穩步增加。所以,Bash...

  • 發佈於 2021-04-01 12:30
  • 閲讀 ( 55 )

如何在linux上使用uniq命令

...行。在本指南中,我們將介紹它的多功能性和特性,以及如何充分利用這個漂亮的實用程式。 在linux上查詢匹配的文字行 uniq命令是快速、靈活的,而且非常擅長它所做的事情。不過,與許多Linux命令一樣,它也有一些怪癖,只...

  • 發佈於 2021-04-02 16:25
  • 閲讀 ( 45 )

如何在linux上使用grep命令

...列表(不考慮年份),按檔案大小的升序排列。 相關:如何在Linux上使用管道 格雷普:少了指揮權,多了一個盟友 grep是一個非常好的工具,您可以隨時使用。它可以追溯到1974年,現在仍然很強大,因為我們需要它所做的,沒...

  • 發佈於 2021-04-02 17:23
  • 閲讀 ( 44 )

如何在linux上使用tail命令

...料。它甚至可以實時顯示新增到檔案中的更新。我們教你如何使用它。 他殺了尾巴嗎? tail命令顯示檔案末尾的資料。通常,新資料會新增到檔案的末尾,因此tail命令是檢視檔案中最新新增內容的一種快速簡便的方法。它還可...

  • 發佈於 2021-04-02 17:32
  • 閲讀 ( 37 )

如何在linux上使用history命令

...複您過去執行的命令。一旦您瞭解了Linux history命令以及如何使用它,它就可以顯著地提高您的生產效率。 操縱歷史 正如喬治桑塔亞納(georgestantayana)的一句名言:“那些記不住過去的人註定要重蹈覆轍。”不幸的是,在Linux...

  • 發佈於 2021-04-02 18:17
  • 閲讀 ( 49 )

如何在linux上使用dmesg命令

...和術語。按less中的正斜槓“/”鍵啟動搜尋功能。 相關:如何在Linux上使用less命令 不再需要sudo 如果希望避免每次使用dmesg時都必須使用sudo,可以使用以下命令。但是,請注意:它允許任何擁有您的計算機使用者帳戶的人使用dme...

  • 發佈於 2021-04-02 21:09
  • 閲讀 ( 55 )

命令列:為什麼人們還在為它們煩惱?

...。你的指令碼就會執行。 命令列是最小的公分母。學習如何使用它,無論Linux發行版和圖形桌面環境如何,您都可以執行所需的所有任務。不同的桌面有自己的做事方式。不同的Linux發行版捆綁了各種實用程式和程式。 但是開啟...

  • 發佈於 2021-04-03 05:30
  • 閲讀 ( 43 )
f857977146
f857977146

0 篇文章

作家榜

  1. admin 0 文章
  2. 孫小欽 0 文章
  3. JVhby0 0 文章
  4. fvpvzrr 0 文章
  5. 0sus8kksc 0 文章
  6. zsfn1903 0 文章
  7. w91395898 0 文章
  8. SuperQueen123 0 文章

相關推薦