一、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來表示
二、管道
aaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbb
aaaaaaaaaaaaaaaaaaaaaaaa
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