Linux命令學習(重定向)
1.重定向概念
標準輸入,輸出,和錯誤到目前為止,我們用到的許多程式都會產生某種輸出。這種輸出,經常由兩種型別組成。 第一,程式執行結果;這是說,程式要完成的功能。第二,我們得到狀態和錯誤資訊, 這些告訴我們程式進展。如果我們觀察一個命令,像 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 命令學習Linux
- Linux 常用基本命令 重定向Linux
- linux命令學習——psLinux
- Linux命令學習(一)Linux
- 學習一個 Linux 命令:shutdown 命令Linux
- linux基礎命令學習Linux
- Linux命令學習---目錄Linux
- 每天學習linux命令(1)Linux
- Linux 下vi 命令學習Linux
- linux學習筆記---一些命令學習Linux筆記
- linux進階命令學習一Linux
- Linux 常用命令學習Linux
- 學習Linux基本命令(一)Linux
- 【Linux學習筆記】reboot命令Linux筆記boot
- Linux | 常用命令學習Linux
- [Linux]學習⑨----其他幫助命令Linux
- Linux命令學習總結:rmdirLinux
- 【LINUX學習】例行命令的建立Linux
- Linux 命令學習 (110413)Linux
- linux基礎學習 - free命令Linux
- Linux基本命令學習之二:Linux基本命令Linux
- Linux基本命令學習之一:Linux基本命令Linux
- LINUX學習(五)Linux文字處理命令Linux
- url重定向-基於Pikachu的學習
- Linux的常用命令學習Linux
- 學習一個 Linux 命令:pstreeLinux
- Linux命令和shell指令碼學習Linux指令碼
- 學習Linux必須掌握的命令!Linux
- Linux命令ping,nc的學習Linux
- Linux 命令 及 簡單操作 學習Linux
- 【Linux學習教程】Linux中Sed命令如何使用?Linux
- Linux學習之linux的find命令如何使用?Linux
- LINUX學習(八)Linux檔案連結命令Linux
- linux學習day1——linux常見命令Linux
- Linux重定向Linux
- 重定向學習小記(forward與sendRedirect) (轉)Forward
- 每天學習一個Linux命令-目錄Linux
- Linux學習之iostat命令詳解LinuxiOS