Linux:shell中的管道命令

來源:互聯網
上載者:User

轉自:http://hi.baidu.com/rytech/blog/item/0ddd1428cce175f899250abb.html



那麼一條複雜的Linux命令怎樣構成呢?下面來介紹幾個技巧。
  
  利用輸入/輸出重新導向
  在Linux命令列模式中,如果命令所需的輸出不是來自鍵盤,而是來自指定的檔案,這就是輸入重新導向。同理,命令的輸出也可以不顯示在螢幕上,而是寫入到指定檔案中,這就是輸出重新導向。
  
  接下來看看標準輸入/輸出重新導向在構造一條Linux命令中的實際應用。
  
  1.輸入重新導向和輸出重新導向
  # wc 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' ' '{print $2}'`
  
  這個例子的功能和上面的功能是一樣的,不過它不依賴pidof命令,使用的是多數Unix類系統中都有的命令,適用於更多的系統內容。但是它看起來更複雜一些,使用了三個管道和一次命令替換,另外使用了grep、tr和awk三個與字元操作相關的命令。
  
  從前面的介紹可以看出,通過幾種技巧的組合,Linux命令可以完成複雜的功能。除此之外,還可以將這些命令組織到一個指令碼中來,加上函數、變數、判斷和迴圈等功能,再加入一些編程思想,就是功能更強大的Shell指令碼了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.