在linux中,管道符是“|”,主要用於將兩個或多個命令連接到一起,把一個命令的輸出作為下一個命令的輸入;語法“command1 | command2 [ | commandN... ]”,“|”符左邊指令的輸出會作為“|”符號右邊指令的輸入。管道符是可以連續使用的,第一個指令的輸出會作為第二個指令的輸入,第二個指令的輸出又會作為第三個指令的輸入,依此類推。
本教學操作環境:linux7.3系統、Dell G3電腦。
Shell 還有一個功能,就是可以將兩個或多個命令(程式或進程)連接在一起,把一個命令的輸出當作下一個命令的輸入,以這種方式連接的兩個或多個指令就形成了管道(pipe)。
Linux 管道使用豎線|
連接多個命令,這稱為管道符。
command1 | command2 command1 | command2 [ | commandN... ]
當在兩個指令之間設定管道時,管道符|左邊指令的輸出就變成了右邊指令的輸入。只要第一個指令向標準輸出寫入,而第二個指令是從標準輸入讀取,那麼這兩個指令就可以形成一個管道。大部分的 Linux 指令都可以用來形成管道。
管道符是可以連續使用的,第一個指令的輸出會作為第二個指令的輸入,第二個指令的輸出又會作為第三個指令的輸入,依此類推。
這裡需要注意,command1 必須有正確輸出,而command2 必須可以處理command2 的輸出結果;而且command2 只能處理command1 的正確輸出結果,不能處理command1 的錯誤訊息。
舉個栗子:對hello.sh檔案進行排序去重以後找出包含"better"的行
指令為:cat hello.sh | sort | uniq | grep 'better'
- 查看文字
- 排序 ##去重
- ##過濾
-
首先使用cat指令查看文本,列印到螢幕上內容即為cat指令的輸出結果
[root@linuxforliuhj test]# cat hello.sh hello this is linux be better be better i am lhj hello this is linux i am lhj i am lhj be better i am lhj have a nice day have a nice day hello this is linux hello this is linux have a nice day zzzzzzzzzzzzzz dddddddd gggggggggggggggggggg [root@linuxforliuhj test]#
【2】第二道工序-排序
將前面cat指令輸出的結果經由管道丟給sort指令,所以sort指令是對前面cat指令輸出的文字進行排序
[root@linuxforliuhj test]# cat hello.sh | sort be better be better be better dddddddd gggggggggggggggggggg have a nice day have a nice day have a nice day hello this is linux hello this is linux hello this is linux hello this is linux i am lhj i am lhj i am lhj i am lhj zzzzzzzzzzzzzz [root@linuxforliuhj test]#
【3】第三道工序-去重
前面介紹uniq的文章中提到,sort跟uniq結合使用才能有效去重,所以透過管道將sort處理後輸出的文本丟給uniq處理,所以uniq處理的是排序好的文本,可以進行有效去重
[root@linuxforliuhj test]# cat hello.sh | sort | uniq be better dddddddd gggggggggggggggggggg have a nice day hello this is linux i am lhj zzzzzzzzzzzzzz [root@linuxforliuhj test]#
【4】第四道工序-過濾
最後一步過濾則同樣是將前面指令即uniq指令處理後輸出的文字進行過濾
[root@linuxforliuhj test]# cat hello.sh | sort | uniq | grep 'better' be better [root@linuxforliuhj test]#重點來了!
##重點來了!
重點來了!
以上的cat、sort、uniq、grep等指令皆支援管道符,是因為這些指令皆可從標準輸入讀取要處理的文字(即從標準輸入中讀取參數);而對於部分命令,例如rm、kill等命令則不支援從標準輸入中讀取參數,只支援從命令列讀取參數(即rm命令後面必須指定刪除的檔案或目錄,kill指令後面必須要指定殺死的進程號等)
那什麼樣的指令支援管道,什麼樣的指令不支援管道呢?一般情況下,處理文字的指令,例如sort、uniq、grep、awk、sed等指令皆支援管道;像rm、ls這類的不是處理文字的指令均不支援管道
當rm後面不指定刪除的檔案時,則會報錯遺失參數,所以,rm等指令不支援從標準輸入讀取參數,只支援在命令列指定參數,也就是指定刪除的檔案。
[root@linuxforliuhj test]# cat hello.sh | sort be better be better be better dddddddd gggggggggggggggggggg have a nice day have a nice day have a nice day hello this is linux hello this is linux hello this is linux hello this is linux i am lhj i am lhj i am lhj i am lhj zzzzzzzzzzzzzz [root@linuxforliuhj test]#
sort後面沒有參數時,則對管道符丟給它的前一個命令的輸出結果進行處理(即前一個命令的標準輸出作為本次命令的標準輸入)[root@linuxforliuhj test]# ls beifen.txt hello.sh mk read.ln read.sh read.txt sub.sh [root@linuxforliuhj test]# ls | grep read.sh read.sh [root@linuxforliuhj test]# ls | grep read.sh | rm rm: missing operand Try 'rm --help' for more information. [root@linuxforliuhj test]#
標準輸入和命令列參數那個優先?
有以下兩個檔案[root@linuxforliuhj test]# cat a.txt
aaaa
dddd
cccc
bbbb
[root@linuxforliuhj test]# cat b.txt
1111
3333
4444
2222
[root@linuxforliuhj test]#
執行指令:cat a.txt | sort[root@linuxforliuhj test]# cat a.txt | sort aaaa bbbb cccc dddd [root@linuxforliuhj test]#當sort的指令列參數為空時,預設使用前一個命令的輸出結果作為本命令的輸入執行命令:cat a.txt | sort b.txt
[root@linuxforliuhj test]# cat a.txt | sort b.txt 1111 2222 3333 4444 [root@linuxforliuhj test]#可以看到,當sort的命令列參數(此處為b.txt)不為空時,sort不會讀取標準輸入裡的參數,而時讀取命令列參數執行命令:cat a.txt | sort b.txt -
[root@linuxforliuhj test]# cat a.txt | sort b.txt - 1111 2222 3333 4444 aaaa bbbb cccc dddd [root@linuxforliuhj test]#" - "表示標準輸入,即指令cat a.txt 的輸出,相當與對檔案b.txt和標準輸入一起進行排序,相當於sort a.txt b.txt
[root@linuxforliuhj test]# sort a.txt b.txt 1111 2222 3333 4444 aaaa bbbb cccc dddd [root@linuxforliuhj test]#
思考:对于rm、kill等命令,我们写脚本时常常会遇到需要查询某个进程的进程号然后杀掉该进程,查找某个文件然后删除它这样的需求,该怎么办呢?那就用xargs吧!
相关推荐:《Linux视频教程》
以上是linux中管道符是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Linux是一個基於Unix的多用戶、多任務操作系統,強調簡單性、模塊化和開放性。其核心功能包括:文件系統:以樹狀結構組織,支持多種文件系統如ext4、XFS、Btrfs,使用df-T查看文件系統類型。進程管理:通過ps命令查看進程,使用PID管理進程,涉及優先級設置和信號處理。網絡配置:靈活設置IP地址和管理網絡服務,使用sudoipaddradd配置IP。這些功能在實際操作中通過基本命令和高級腳本自動化得以應用,提升效率並減少錯誤。

進入Linux維護模式的方法包括:1.編輯GRUB配置文件,添加"single"或"1"參數並更新GRUB配置;2.在GRUB菜單中編輯啟動參數,添加"single"或"1"。退出維護模式只需重啟系統。通過這些步驟,你可以在需要時快速進入維護模式,並安全地退出,確保系統的穩定性和安全性。

Linux的核心組件包括內核、shell、文件系統、進程管理和內存管理。 1)內核管理系統資源,2)shell提供用戶交互界面,3)文件系統支持多種格式,4)進程管理通過fork等系統調用實現,5)內存管理使用虛擬內存技術。

Linux系統的核心組成部分包括內核、文件系統和用戶空間。 1.內核管理硬件資源並提供基本服務。 2.文件系統負責數據存儲和組織。 3.用戶空間運行用戶程序和服務。

維護模式是Linux系統中通過單用戶模式或救援模式進入的特殊運行級別,用於系統維護和修復。 1.進入維護模式使用命令“sudosystemctlisolaterescue.target”。 2.在維護模式中,可以檢查並修復文件系統,使用命令“fsck/dev/sda1”。 3.高級用法包括重置root用戶密碼,需掛載文件系統為讀寫模式並編輯密碼文件。

維護模式用於系統維護和修復,允許管理員在簡化環境中工作。 1.系統修復:修復損壞的文件系統和啟動加載器。 2.密碼重置:重置root用戶密碼。 3.軟件包管理:安裝、更新或刪除軟件包。通過修改GRUB配置或使用特定鍵進入維護模式,執行維護任務後可安全退出。

Linux網絡配置可以通過以下步驟完成:1.配置網絡接口,使用ip命令臨時設置或編輯配置文件持久化設置。 2.設置靜態IP,適合需要固定IP的設備。 3.管理防火牆,使用iptables或firewalld工具來控製網絡流量。

維護模式在Linux系統管理中扮演關鍵角色,幫助進行系統修復、升級和配置變更。 1.進入維護模式可以通過GRUB菜單選擇或使用命令“sudosystemctlisolaterescue.target”。 2.在維護模式下,可以執行文件系統修復和系統更新等操作。 3.高級用法包括重置root密碼等任務。 4.常見錯誤如無法進入維護模式或掛載文件系統,可通過檢查GRUB配置和使用fsck命令修復。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver CS6
視覺化網頁開發工具