歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux中管道以及重定向

Linux中管道以及重定向

日期:2017/2/28 14:55:05   编辑:Linux教程

1:管道

Linux 系統的理念是匯集許多小程序,每個程序都有特殊的專長。負載的任務不是由大型軟件完成,而是由Shell的機制,組合許多小程序共同完成。

信號在進程間傳送的只是一個信號值,管道可以在進程間傳送大量的數據。管道機制的兩端必定連接著兩個進程,向管道中寫入數據的進程稱為寫管道進程,從管道中讀取數據的進程稱為讀管道進程。

Linux管道機制是一種傳送方向固定的單向管道,一旦確定了其數據傳送方向就不能再更改。Linux把管道看作是一種文件,采用文件管理的方法對管道進行管理。但管道與文件的根本區別在於,管道不使用外存而是使用物理內存存放傳送的數據

Linux采用循環方式使用管道緩沖區,當L數據寫入緩沖區到達尾部後就繼續從頭部寫入。Linux命名管道作為一種特殊文件納入文件系統,和一般文件一樣有名字,在文件系統的目錄樹中有命名管道的目錄項,磁盤上有其對應的inode節點管道與普通文件的區別,命名管道不使用命名磁盤的數據區存放數據而是使用內存緩沖區存放數據,http://www.linuxidc.com

利用輸入/輸出重定向

在Linux命令行模式中,如果命令所需的輸入不是來自鍵盤,而是來自指定的文件,這就是輸入重定向。同理,命令的輸出也可以不顯示在屏幕上,而是寫入到指定文件中,這就是輸出重定向。

接下來看看標准輸入/輸出重定向在構造一條Linux命令中的實際應用。

1.輸入重定向和輸出重定向

# wc aa.txt

# ls > home.txt

第一條命令將文件aa.txt作為wc命令的輸入,統計出aa.txt的行數、單詞數和字符數。第二條命令將ls命令的輸出保存在一個名為home.txt的文件中。如果>符號後邊的文件已存在,那麼這個文件將被重寫。

2.同時使用輸入和輸出重定向

# iconv -f gb18030 -t utf-8 new-aa.txt

這條命令裡同時用到了輸入重定向(new-aa.txt)。aa.txt實際是一個gb18030編碼的文件,而new-aa.txt則是將aa.txt的內容轉換成utf-8格式的新文件。

利用管道

利用Linux所提供的管道符“|”將兩個命令隔開,管道符左邊命令的輸出就會作為管道符右邊命令的輸入。連續使用管道意味著第一個命令的輸出會作為第二個命令的輸入,第二個命令的輸出又會作為第三個命令的輸入,依此類推。下面來看看管道是如何在構造一條Linux命令中得到應用的。

1.利用一個管道

# rpm -qa|grep licq

這條命令使用一個管道符“|”建立了一個管道。管道將rpm-qa命令的輸出(包括系統中所有安裝的RPM包)作為grep命令的輸入,從而列出帶有licq字符的RPM包來。

4.利用多個管道

這條命令使用一個管道符“|”建立了一個管道。管道將rpm-qa命令的輸出(包括系統中所有安裝的RPM包)作為grep命令的輸入,從而列出帶有licq字符的RPM包來。

4.利用多個管道

# cat /etc/passwd | grep /bin/bash | wc -l

這條命令使用了兩個管道,利用第一個管道將cat命令(顯示passwd文件的內容)的輸出送給grep命令,grep命令找出含有“/bin/bash”的所有行;第二個管道將grep的輸出送給wc命令,wc命令統計出輸入中的行數。這個命令的功能在於找出系統中有多少個用戶使用bash。

利用命令替換

在Linux命令行模式下,當遇到一對“`”(上分割符)時,將首先執行“`”中間包含的命令,然後將其輸出結果作為參數代入命令行中,這就是命令替換了。它類似於輸入輸出的重定向功能,但區別在於命令替換是將一個命令的輸出作為另外一個命令的參數。下面來看它的實際應用。

Copyright © Linux教程網 All Rights Reserved