Linux命令學習 重定向

2021-08-18 07:21:21 字數 3389 閱讀 4285

標準輸入,輸出,和錯誤到目前為止,我們用到的許多程式都會產生某種輸出。這種輸出,經常由兩種型別組成。 第一,程式執行結果;這是說,程式要完成的功能。第二,我們得到狀態和錯誤資訊, 這些告訴我們程式進展。如果我們觀察乙個命令,像 ls,會看到它的執行結果和錯誤資訊 顯示在螢幕上。與 unix 主題「任何東西都是乙個檔案」保持一致,程式,比方說 ls,實際上把他們的執行結果 輸送到乙個叫做標準輸出的特殊檔案(經常用 stdout 表示),而它們的狀態資訊則送到另乙個 叫做標準錯誤的檔案(stderr)。預設情況下,標準輸出和標準錯誤都連線到螢幕,而不是 儲存到磁碟檔案。除此之外,許多程式從乙個叫做標準輸入(stdin)的裝置得到輸入,預設情況下, 標準輸入連線到鍵盤。i/o 重定向允許我們可以更改輸出走向和輸入來向。一般地,輸出送到螢幕,輸入來自鍵盤, 但是通過i/o 重定向,我們可以改變輸入輸出方向。

2.標準輸出

使用 」>」 進行標準的輸出,將命令的結果輸出到乙個檔案中, 但是這個重定向符進行輸出將會將原檔案中的內容清除 ,並且如果命令的輸出不是標準輸出,而是產生了錯誤資訊,這個錯誤資訊不會輸入到檔案中,而是顯示在螢幕上.

如果想在進行標準輸出的時候不是將檔案重寫,而是在檔案內容的後面新增,就是用>>重定向符

上面提到 使用上面的重定向符不能將錯誤資訊輸出到檔案,可以使用shell提供的一種表示方式,shell內部為標準輸入,標準輸出和錯誤的檔案描述符為0,1,2, 使用檔案描述符來重定向錯誤資訊

ls -l /bin/usr 2> ls-error.txt
要想將標準輸出和錯誤資訊都輸出到乙個檔案,在bash中提供了兩種方法,這裡主要介紹第二種新的方法.

ls -l /bin/usr &> ls-output.txt
處理不需要的輸出

有時候,不想要乙個命令的輸出結果,想把他們扔掉,,系統提供了乙個方法,將資訊重定向到乙個特殊的叫做 「/dev/null」 的檔案,這個是個系統裝置,叫做位儲存桶,可以接受輸入,並且對輸入不做任何處理.為了隱瞞命令錯誤資訊可以這麼做:

ls -l /bin/usr 2> /dev/

null

3.標準輸入

3.1cat 連線檔案

cat [file] //顯示檔案的內容,一般用來顯示簡短的文字檔案
cat可以接受不止乙個檔案作為引數,將這些檔案的內容連線起來

cat movie*.txt > movie.txt //將多個檔案內容鏈結起來,重新定向到另乙個檔案,萬用字元總是按照有序的循序展開,所以會按照循序正確安排.
如果cat 沒有給出任何引數,它會從標準輸入讀入資料,因為標準輸入,預設情況下,連線到鍵盤。它正在等待我們輸入資料! 使用ctrl + d 告訴cat 在標準輸入中已經到了結尾.

可以用這個來建立個簡單的文字檔案

cat > a.txt// 回車

i am a boy.//這一行輸入想要輸入的內容,然後使用ctrl + d 告訴cat到了標準輸入的結尾

cat < a.txt //使用< 重定向符將標準輸入源從鍵盤改到檔案a.txt,結果和使用只檔名一樣,

4.管道線

使用管道操作符 「|」 ,乙個命令的標準輸出可以管道到另乙個命令的表追輸入.

command1 | command2
如:

ls -l /usr/bin | less
過濾器

幾個命令放在一起組成乙個管道線,通常,以這種方式使用的命令被稱為過濾器

ls /bin  /usr/bin | sort | less //將兩個檔案中的檔案或資料夾排序輸出
uniq 報道或忽略重複行

通常和sort一起使用,來刪除重複的行

ls /bin /usr/bin | sort | uniq | less  //uniq -d 可以看到重複的行
wc 列印行, 字 和位元組數 (按照順序列印)

wc a.txt
如果不帶引數, wc接受標準輸入 -l 屬性表示 只列印行數

ls /bin /usr/bin | sort | uniq | wc -l
grep 列印匹配行

在文件中找到匹配的文字,列印出包含該這個型別的行,

grep

pattern

[file...]

在這裡匹配的模式可以很複雜,可以是正規表示式.同時它也接受標準輸入

ls /bin /usr/bin |sort | uniq | grep zip
grep 有兩個方便的選項 -i 導致grep在執行搜尋忽略大小寫(通常,搜尋大小寫是敏感的),

「-v」 只列印不匹配的行

head / tail 列印檔案開頭部分 / 結尾部分

一般是列印文章的開頭 / 結尾的十行, 可以使用 」 -n 」 屬性來規定列印的行數,沒有引數的時候也接受標準輸入

ls /usr/bin | head -n 5

//列印前五行

tail 有乙個選項 」 -f 「, 可以實時的瀏覽檔案,當檔案有更新的時候,就顯示出來, 比如/var/log下的資訊檔案,

tail -f /var/log/messages
tee 從stdin 讀取資料, 並同時輸出到stdout和檔案

為了和管道的隱喻保持乙個, linux提供乙個tee的命令,tee 程式從標準輸入讀入資料,並且同事複製資料到標準輸出(允許資料繼續隨著管道線流動) 和乙個或多個檔案,當需要從某個中間處理階段來捕捉乙個管道線的內容的時候,很有幫助.即將標準輸入中的內容在中間的時候放在檔案中,並且保證資料繼續隨著管道繼續流動.

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

//將ls出來的資料先存放在ls-out.txt中,在進行grep zip

總結: 上面說到用到標準輸入的程式有 sort , uniq , less ,wc, grep , head, tail ,tee

重定向,總結為 就是將輸入或者輸出不直接顯示在螢幕上,而是其他的檔案或者命令中.(這個總結可能片面,在剛學時候的簡單理解)

linux 重定向命令

command filename 把標準輸出重定向到乙個新檔案中 command filename 把標準輸出重定向到乙個檔案中 追加 command 1 fielname 把標準輸出重定向到乙個檔案中 command filename 2 1 把標準輸出和標準錯誤一起重定向到乙個檔案中 comma...

linux重定向命令

昨天參加網易ttt的筆試,填空題考了cmd file 2 1的含義,我以前做專案接觸過重定向命令,但沒用這個,然後居然沒寫出正確答案來,慚愧啊。謹記,對遇到的問題要求甚解,要徹底弄懂,並且還要複習!現把所有命令列出來 cmd file 把 stdout 重定向到 file 檔案中 cmd file ...

linux 重定向命令

標準輸入,輸出和錯誤 檔案檔案 描述符 輸入檔案 標準輸入 0 輸出檔案 標準輸出 1 錯誤輸出檔案 標準錯誤 2 1.重定向 command filename 把標準輸出重定向到乙個新檔案中 command filename 把標準輸出重定向到乙個檔案中 追加 command1 fielname ...