cat - 連接文件
? ? cat 命令讀取一個或多個文件,然后復制它們到標準輸出。你可以使用 cat 來顯示 文件而沒有分頁? ? cat 經常被用來顯示簡短的文本文件。
案例 | 意義 |
cat?ls-output.txt | 讀取文件標準輸出 |
cat?movie.mpeg.0* >?movie.mpeg | 連接文件,cat?可以?接受不只一個文件作為參數,所以它也可以用來把文件連接在一起。比方說我們下載了一個?大型文件,這個文件被分離成多個部分(USENET?中的多媒體文件經常以這種方式分離),?我們想把它們連起來。我們能用這個命令把它們連接起來: 因為通配符總是以有序的方式展開,所以這些參數會以正確順序安排。 |
管道符號
? ? 使用管道操作符”|”(豎杠),一個命令的 標準輸出可以管道到另一個命令的標準輸入:command1 | command2例如:ls -l /usr/bin | less
將ls -l /usr/bin命令的輸出內容作為 less命令的輸入,最終的運行是less分頁的顯示ls -l /usr/bin運行的結果內容
排序
? ? 管道線經常用來對數據完成復雜的操作。有可能會把幾個命令放在一起組成一個管道線。 通常,以這種方式使用的命令被稱為過濾器。過濾器接受輸入,以某種方式改變它,然后 輸出它。第一個我們想試驗的過濾器是 sort。想象一下,我們想把目錄/bin 和/usr/bin 中 的可執行程序都聯合在一起,再把它們排序。? ? 例如:ls /bin /usr/bin | sort | less
? ? 因為我們指定了兩個目錄(/bin 和/usr/bin),ls 命令的輸出結果由有序列表組成, 各自針對一個目錄。通過在管道線中包含 sort,我們改變輸出數據,從而產生一個 有序列表。
過濾器
? ? uniq 命令(報告或忽略重復行)經常和 sort 命令結合在一起使用。uniq 從標準輸入或單個文件名參數接受數據有序 列表(詳情查看 uniq 手冊頁),默認情況下,從數據列表中刪除任何重復行。所以,為了確信 我們的列表中不包含重復句子(這是說,出現在目錄/bin 和/usr/bin 中重名的程序),我們添加 uniq 到我們的管道線中:ls /bin /usr/bin | sort | uniq | less
在這個例子中,我們使用 uniq 從 sort 命令的輸出結果中,來刪除任何重復行。如果我們想看到 重復的數據列表,讓 uniq 命令帶上”-d”選項,就像這樣: ls /bin /usr/bin | sort | uniq -d | less
WC(字計數)
wc(字計數)命令是用來顯示文件所包含的行數,字數和字節數。
grep(打印匹配行)
grep 是個很強大的程序,用來找到文件中的匹配文本。grep 命令格式:grep pattern [file...]
例如:我們想在我們的程序列表中,找到文件名中包含單詞”zip”的所有文件
ls /bin /usr/bin | sort | uniq | grep zip
grep 有更方便的選項:”-i”告訴 grep 當執行搜索時忽略大小寫(通常,搜索是大小寫 敏感的);
”-v”選項會告訴 grep 只打印不匹配的行。
head / tail(打印文件開頭部分/結尾部分)
? ? 有時候你不需要一個命令的所有輸出。可能你只想要前幾行或者后幾行的輸出內容。 head 命令打印文件的前十行,而 tail 命令打印文件的后十行。默認情況下,兩個命令 都打印十行文本,但是可以通過”-n”選項來調整命令打印的行數。? ? 例如: head -n 5 ls-output.txt ? 打印頭5行數據
? ? ? tail -n 5 ls_output.txt ? 打印結尾5行數據
? ls /usr/bin | tail -n 5 打印 ls /usr/bin 運行結果的結尾5行數據
? ? tail 有一個選項允許你實時的瀏覽文件。當觀察日志文件的進展時,這很有用,因為 它們同時在被寫入。在以下的例子里,我們要查看目錄/var/log 里面的信息文件。在 一些 Linux 發行版中,要求有超級用戶權限才能閱讀這些文件,因為文件/var/log/messages 可能包含安全信息。
? ? 例如:tail -f /var/log/messages
? ? 使用”-f”選項,tail 命令繼續監測這個文件,當新的內容添加到文件后,它們會立即 出現在屏幕上。這會一直繼續下去直到你輸入 Ctrl-c。
? ??
tee(從 Stdin 讀取數據,并同時輸出到 Stdout 和文件)
? ? tee 程序從標準輸入讀入數據,并且同時復制數據 到標準輸出(允許數據繼續隨著管道線流動)和一個或多個文件。當在某個中間處理 階段來捕捉一個管道線的內容時,這很有幫助。這里,我們重復執行一個先前的例子, 這次包含 tee 命令,在 grep 過濾管道線的內容之前,來捕捉整個目錄列表到文件 ls.txt:? ? 命令:ls /usr/bin | tee ls.txt | grep zip
? ? 注釋:tee程序(ls 程序管道過來的)獲取標準輸入(ls /usr/bin程序執行的結果)數據輸出到標準輸出同時也寫入到ls.txt文件中