linux 管道介紹

2021-06-15 01:20:40 字數 2215 閱讀 2689

利用輸入/輸出重定向

在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.利用多個管道

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

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

利用命令替換

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

1.使用命令替換

# touch `date +%y%m%d%k%m%s`.txt

該命令使用了一次命令替換,date +%y%m%d%k%m%s命令將首先執行,它將按指定格式輸出當前的時間。然後,這個時間將被作為touch命令的引數,其結果是建立了乙個以當前時間為檔名的檔案。

2.使用命令替換

# kill `/sbin/pidof smbd`

該命令將殺掉sshd的所有程序。這裡用pidof這個命令給出程序號,因為kill是針對程序號進行操作的。兩者通過命令替換,實現了只用一條命令就殺掉sshd所有程序的功能。

綜合應用

在理解和熟悉了前面的幾個技巧後,將它們綜合運用起來就是較高的技巧了。同時,一些常用的、且本身用法就比較複雜的linux命令一定要熟練掌握。在 構造linux命令中常常用到的一些基礎的、重要的命令有grep、tr、sed、awk、find、cat和echo等,下面來看一些綜合應用的例子。

1.# man ls | col -b > ls.man.txt

這條命令同時運用了輸出重定向和管道兩種技巧,作用是將ls的幫助資訊轉成乙個可以直接閱讀的文字檔案。

2.# kill -9 `ps -ef | grep smbd | tr -s ' ' | awk -f' ' ''`

這個例子的功能和上面的功能是一樣的,不過它不依賴pidof命令,使用的是多數unix類系統中都有的命令,適用於更多的系統環境。但是它看起來更複雜一些,使用了三個管道和一次命令替換,另外使用了grep、tr和awk三個與字元操作相關的命令。

從前面的介紹可以看出,通過幾種技巧的組合,linux命令可以完成複雜的功能。除此之外,還可以將這些命令組織到乙個指令碼中來,加上函式、變數、判斷和迴圈等功能,再加入一些程式設計思想,就是功能更強大的shell指令碼了。

linux管道(無名管道)

首先管道是程序之間的乙個單向資料流,它的資料流向由核心管理,只能從乙個程序流向另外乙個程序,乙個程序向管道寫入資料,另外乙個程序從這個管道讀取資料。在使用管道 無名管道 時,只能用在父子程序或者親屬程序之間,若要用在任意程序之間則需要使用fifo 有名管道 如圖程序ab通過管道進行資料交換。程序a通...

Linux管道(無名管道)

是一套免費使用和自由傳播的類unix作業系統,是乙個基於posix和unix的多使用者 多工 支援多執行緒和多cpu的作業系統。它能執行主要的unix工具軟體 應用程式和網路協議。它支援32位和64位硬體。linux繼承了unix以網路為核心的設計思想,是乙個效能穩定的多使用者網路作業系統。它主要用...

Redis簡單介紹 管道

redis是乙個使用客戶機 伺服器模型和所謂的請求 響應協議的tcp伺服器。這意味著請求通常通過以下步驟完成 客戶端和伺服器通過網路連線。這樣的鏈結可以是非常快 環迴介面 或非常慢 在internet上建立的連線,兩台主機之間有許多跳 無論網路延遲是什麼,資料報都有一段時間從客戶機傳輸到伺服器,然後...