LINUX常用命令--重定向、管道篇(四)


一、Linux重定向

重定向能夠實現Linux命令的輸入輸出與文件之間重定向,以及實現將多個命令組合起來實現更加強大的命令。這部分涉及到的比較多的命令主要有:

涉及到的比較多的命令主要有:

  • cat:連接文件
  • sort:排序文本行
  • uniq:忽略或者報告重復行
  • wc:統計文件的行數、詞數、字節數
  • grep:打印匹配制定模式的行
  • head:輸出文件的頭部
  • tail:輸出文件的尾部
  • tee:從標准輸入讀,並往標准輸出或者文件寫

 

1.重定向標准輸出

 

  使用>可以將本來出現在屏幕的標准輸出信息重定向到一個文件中。

  用>>可以在實現重定向時不覆蓋原有內容,而是在文件末尾追加內容.

 

2.重定向標准錯誤信息到文件

沒有單純的一個操作符可以將標准錯誤信息重定向到文件中。要實現這一點有兩種辦法。第一種使用文件描述符,在shell中,默認用數字0,1,2分別代表標准輸入、標准輸出、標准錯誤。

 

3.屏蔽不想看到的信息

Linux中有一個特殊的文件/dev/null,這個文件叫做bit bucket,可以接受輸入信息但是什么都不做。因此要抑制命令的輸出信息,只需要如下操作:

  ls /usr/ > /dev/null

 

 

4.重定向標准輸入

 

cat命令可以接受一組文件為參數,將這些文件復制到標准輸出。我們前面的例子中已經多次使用到cat命令來將文本文件的內容讀取到屏幕上。

cat還有一個很重要的功能:接受一組文件,然后通過重定向將他們重新組合到一個文件中。我們看一個例子:

  jerry@ubuntu:~$ cat ls1

  aaaaaaaaaaaaaaaaaaaaaaaa
  jerry@ubuntu:~$ cat ls2
  bbbbbbbbbbbbbbbbbbbbbbbb
  jerry@ubuntu:~$ cat ls1 ls2 > ls
  jerry@ubuntu:~$ cat ls
  aaaaaaaaaaaaaaaaaaaaaaaa
  bbbbbbbbbbbbbbbbbbbbbbbb

其它實例:

 

  ls -l /usr/tmp >dir 重定向

  ls -l /usr/tmp >>dir 追加重定向

  ls /usr/tmp 2>err.file 錯誤輸出到err.file

  ls /usr/tmp >output.file 2>&1 錯誤和輸出重定向到output

  ls /usr/tmp 2>&1 >output.file 錯誤到標准輸出,其他輸到output

  wc </etc/passwd

標准的輸入,輸出和錯誤輸出分別表示為STDIN,STDOUT,STDERR,也可以用0,1,2來表示

 

二、管道

將一個程序的標准輸出寫到一個文件中去,再將這個文件作為另一個程序的輸入。管道要解決的就是不需要臨時文件就能將兩條命令結合在一起。如:
  ls /usr/bin | wc -w
 
Linux提供|操作符,該操作符可以將一個命令的輸出作為另一個命令的輸入,這樣通過多個命令的協作來完成一些比較復雜的內容。比如,我們可以通過uniq命令來排除重復的行。但是uniq命令往往需要和sort命令配合使用。因為uniq接收一組排好序的文本,而剛好sort可以將文本行排序。我們看下面的例子:
  [root@test]#cat ls 
  aaaaaaaaaaaaaaaaaaaaaaaa
  bbbbbbbbbbbbbbbbbbbbbbbb
  aaaaaaaaaaaaaaaaaaaaaaaa
  
  [root@test]#cat ls |sort|uniq
  aaaaaaaaaaaaaaaaaaaaaaaa
  bbbbbbbbbbbbbbbbbbbbbbbb
 
 

我們還可以對uniq命令加上-d選項來查看重復的行,如下:

  [root@test]#cat ls |sort|uniq -d

  aaaaaaaaaaaaaaaaaaaaaaaa

 

使用wc命令可以統計文本的行數、單詞書和字節數。可以和例如ls命令的輸出一起組成管道命令:

  [root@test]#ls /bin /usr/bin/ | sort | uniq | wc

  

 

如果僅僅想要統計行數,只需要在wc命令后面添加-l選項即可。wc命令常用來統計代碼的行數。

  [root@test]#find cn/ -name "*.php" |xargs cat|wc -l

 

 

上面這個例子統計了cn目錄下所有php文件的行數之和。

grep命令用來查找匹配的模式,並且打印包含該模式的行。舉個例子:

  [root@test]#ls /bin /usr/bin/ | sort | uniq | grep zip

 

在這個例子中,zip就是一個模式,表示包含字符串zip。我們在/bin和/usr/bin目錄下找出名字帶有zip的程序,並且打印這些程序的名字。grep命令可以使用正則表達式,功能也非常強大,這里我們不側重介紹。

head和tail命令也常常用於組成管道命令。head可以查看文件或者文本的前面部分。tail查看文件或者文本的末尾部分。二者都可以接收-n選項,表示顯示的行數。

看例子:

  [root@test]#ls /bin/ | head -n 5

 

tail還有一個重要的用處,就是實時顯示某些程序的日志文件。tail能接受一個選項-f,實時顯示出新添加到文件末尾的行數。這樣一旦有新的行追加到日志文件的末尾,就會被實時顯示在后面。

 [root@test]#tail -f /var/log/messages

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM