重定向,回憶一下這個概念是不是之前學過:在 Java web 開發(fā)中請求的重定向。在本章節(jié)中,我們要學的是“IO重定向”。本文將從以下命令開始展開:
- cat
- sort
- uniq
- grep
- wc
- head
- tail
- tee
I/O 重定向允許我們更改輸出地點和輸入來源。一般地,輸出送到屏幕,輸入來自鍵盤, 但是通過 I/O 重定向,我們可以做出改變。我們使用 “>” 重定向符后接文件名將標準輸出重定向到除屏幕 以外的另一個文件。為什么我們要這樣做呢?因為有時候把一個命令的運行結果存儲到 一個文件很有用處。
例如,我們可以告訴 shell 把 ls 命令的運行結果輸送到文件 ls-output.txt 中去, 由文件代替屏幕。
[me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt
這樣,我們就把 bin 目錄下的詳細信息重定向到了文件 ls-output.txt 了,并且有內容。
技巧:單純的使用> ls-output.txt 這個命令可以清空一個存在的文件或者創(chuàng)建一個文件。
> 符號每次都是從頭開始寫。那么,如果我們想追加文件內容怎么辦呢? 使用>> 符號。
也就是每次都是在文件末尾添加內容,不會覆蓋之前的內容。
如果,現在需要把標準輸出和標準輸出錯誤都重定向到文件中,可以使用
ls -l /bin/usr &> ls-output.txt
cat 連接文件
cat 命令讀取一個或多個文件,然后復制到標準輸出。cat 經常用來顯示簡短的文件,cat 可以連接多個文件。比如我們下載了一個大型文件,文件被分成了還幾個小文件,可以使用 cat 命令把它們連接起來。
例子:
cat file-1.* >file-1
管道
管道操作符|,一個命令的標準輸出可以通過管道送至另一個命令的標準輸入。
例子:
ls -l /usr/bin | less
過濾器(管道線)
管道線經常用來對數據完成復雜的操作。有可能會把幾個命令放在一起組成一個管道線。 通常,以這種方式使用的命令被稱為過濾器。過濾器接受輸入,以某種方式改變它,然后 輸出它。
uniq 去掉重復的行
uniq 命令經常和 sort 命令結合在一起使用 默認情況下,從數據列表中刪除任何重復行。但是如果我們想看到 重復的數據列表,讓 uniq 命令帶上-d選項
wc 打印行數、字數和字節(jié)
默認顯示三個數據,如果加上參數 -l 就只顯示行數。
例子:統(tǒng)計 /bin 和 /usr/bin 有序程序列表的個數
ls /bin /usr/bin | sort | uniq | wc -l
grep 打印匹配行
grep 是個很強大的程序,用來找到文件中的匹配文本。
用法也很簡單:grep pattern [file...]
grep 有一些方便的選項:”-i”使得 grep 在執(zhí)行搜索時忽略大小寫(通常,搜索是大小寫 敏感的),”-v”選項會告訴 grep 只打印不匹配的行。
head / tail 打印開頭或者結尾
默認情況下兩個命令都打印 10 行。通過參數 -n 來控制打印的行數。
tail 有一個選項允許你實時地瀏覽文件。使用-f選項,tail 命令繼續(xù)監(jiān)測這個文件,當新的內容添加到文件后,它們會立即 出現在屏幕上。這會一直繼續(xù)下去直到你輸入 Ctrl-c。
tee 用來捕捉管道線某個時期的數據
tee 程序從標準輸入讀入數據,并且同時復制數據 到標準輸出和一個或多個文件。當在某個中間處理 階段來捕捉一個管道線的內容時,這很有幫助。
例子:
ls /usr/bin | tee ls.txt | grep zip
這次包含 tee 命令,在 grep 過濾管道線的內容之前,來捕捉整個目錄列表到文件 ls.txt: