1. 程式人生 > >原版英文書籍《Linux命令列》閱讀記錄6 | 重定向

原版英文書籍《Linux命令列》閱讀記錄6 | 重定向

重定向,回憶一下這個概念是不是之前學過:在 Java web 開發中請求的重定向。在本章節中,我們要學的是“IO重定向”。本文將從以下命令開始展開:

  • cat
  • sort
  • uniq
  • grep
  • wc
  • head
  • tail
  • tee

I/O 重定向允許我們更改輸出地點和輸入來源。一般地,輸出送到螢幕,輸入來自鍵盤, 但是通過 I/O 重定向,我們可以做出改變。我們使用 “>” 重定向符後接檔名將標準輸出重定向到除螢幕 以外的另一個檔案。為什麼我們要這樣做呢?因為有時候把一個命令的執行結果儲存到 一個檔案很有用處。 例如,我們可以告訴 shell 把 ls 命令的執行結果輸送到檔案 ls-output.txt 中去, 由檔案代替螢幕。

[[email protected] ~]$ ls -l /usr/bin > ls-output.txt

這樣,我們就把 bin 目錄下的詳細資訊重定向到了檔案 ls-output.txt 了,並且有內容。

技巧:單純的使用> ls-output.txt 這個命令可以清空一個存在的檔案或者建立一個檔案。

> 符號每次都是從頭開始寫。那麼,如果我們想追加檔案內容怎麼辦呢? 使用>> 符號。

也就是每次都是在檔案末尾新增內容,不會覆蓋之前的內容。

如果,現在需要把標準輸出和標準輸出錯誤都重定向到檔案中,可以使用

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 列印行數、字數和位元組

預設顯示三個資料,如果加上引數 -l 就只顯示行數。 例子:統計 /bin 和 /usr/bin 有序程式列表的個數

ls /bin /usr/bin | sort | uniq | wc -l

grep 列印匹配行

grep 是個很強大的程式,用來找到檔案中的匹配文字。

用法也很簡單:grep pattern [file...]

grep 有一些方便的選項:”-i”使得 grep 在執行搜尋時忽略大小寫(通常,搜尋是大小寫 敏感的),”-v”選項會告訴 grep 只打印不匹配的行。

head / tail 列印開頭或者結尾

預設情況下兩個命令都列印 10 行。通過引數 -n 來控制列印的行數。

tail 有一個選項允許你實時地瀏覽檔案。使用-f選項,tail 命令繼續監測這個檔案,當新的內容新增到檔案後,它們會立即 出現在螢幕上。這會一直繼續下去直到你輸入 Ctrl-c。

tee 用來捕捉管道線某個時期的資料

tee 程式從標準輸入讀入資料,並且同時複製資料 到標準輸出和一個或多個檔案。當在某個中間處理 階段來捕捉一個管道線的內容時,這很有幫助。 例子:

ls /usr/bin | tee ls.txt | grep zip

這次包含 tee 命令,在 grep 過濾管道線的內容之前,來捕捉整個目錄列表到檔案 ls.txt: