標準I/O和管道

程序包含指令和數據,經常需要讀入數據和輸出數據

打開的文件都有一個fd:file descriptor(文件描述符)

用nano打開一個文件,查看其PID 

wKioL1ei033zWPLWAABcWvSDE2w865.jpg-wh_50

0,1,2就是所謂的文件描述符。

在Linux里輸入輸出和錯誤都由這三個描述符來表示

標準輸入(STDIN) -0 默認接受來自鍵盤的輸入

標準輸出(STDOUT)-1 默認輸出到終端窗口

標準錯誤(STDERR)-2 默認輸出到終端窗口

我們可以把本來默認顯示到終端窗口的輸出內容輸出到自己指定的終端或文件中,這就是標準輸出的重定向 

wKiom1ei04vB-WGJAAAnPQLAbnc397.jpg-wh_50

如果目標文件存在會覆蓋目標文件的內容,如果目標文件不存在,自動創建。如果我們想要保留原有文件內容,可以是用“>>”把重定向的內容追加到指定的文件中

wKioL1ei06PiP6rVAABC4KJcosA696.jpg-wh_50

有時候不小心輸入錯誤的命令,會在終端設備上輸出錯誤信息,這時如果我們用“>”符號,發現輸出的錯誤信息并沒有重定向到指定的文件中,如果我們想要把輸出的錯誤信息重定向,那么可以使用“2>”符號,這就叫做標準錯誤的重定向。與標準輸出重定向類似,這種輸出也會覆蓋源文件,如果想要把輸出的內容追加到指定文件中,需要使用“2>>”符號

wKioL1ei062jG3WfAAAVLUlxWLI759.jpg-wh_50

為了防止誤操作導致有用的文件被覆蓋,我們可以使用set -C,禁止將內容覆蓋已有文件,但可追加強制覆蓋:“>|”,set +C: 允許覆蓋。只針對當前終端有效。

如果一條命令有一部分是正確的有一部分是錯誤的,無論正確的輸出結果還是錯誤的輸出結果,都想要重定向到新的文件中,那么我們需要使用“&>”或“>”和“2>&1”配合使用,如果想要追加,只需要把“>”改成“>>”即可。

wKioL1ei08qBzaGTAAAgonQ-D0c310.jpg-wh_50

wKiom1ei1JCB5s1JAAAdTTDMYhw058.jpg-wh_50


不同的結果可以分別重定向到不同的文件中


wKioL1ei1M3C14ahAAAu-KI0Cmc968.jpg-wh_50


也可以同時把兩條命令的標準輸出重定向到一個文件中,

():合并多個程序的STDOUT ( cal 2007 ; cal 2008 ) > all.txt


wKiom1ei1AaiMreoAAAwdRSEkJ4196.jpg-wh_50


通過重定向,可以實現把不同文件中的內容合并到同一個文件中


wKioL1ei2HjCl_KmAABhplWChAg943.jpg-wh_50


標準輸入的重定向

有些命令需要輸入數據,一般需要我們手工通過鍵盤輸入數據,但也可以通過標準輸入的重定向把文件中的數據輸入到計算機中


wKiom1ei3Uax7NkLAAAVn6H_ozU894.jpg-wh_50


利用標準輸入的重定向發送郵件

首先把郵件內容寫入到一個文件中


wKioL1ei6kGRUAC9AAClFHaCBGE423.jpg-wh_50

多行重定向

標準I/O和管道

tr命令——轉換或刪除字符

tr – 轉換和刪除字符

tr [OPTION]… SET1 [SET2] 

選項:-c或——complerment:取字符集的補集 

    -d或——delete:刪除所有屬于第一字符集的字符

    -s或—squeeze-repeats:把連續重復的字符以單獨一個字符表示

    -t或–truncate-set1:將第一個字符集對應字符轉化為第二字符集對應的字符

使用<來重定向標準輸入

某些命令能夠接受從文件中導入的STDIN: $ tr ‘a-z’ ‘A-Z’< /etc/issue 

該命令會把/etc/issue中的小寫字符都轉換成寫寫字符并輸出

tr –d abc < /etc/fstab 刪除fstab文件中的所有abc中任意字符 


管道(使用符號“|”表示)用來連接命令

命令1 | 命令2 | 命令3 | … 

將命令1的STDOUT發送給命令2的STDIN,命令2的STDOUT發送到命令3的STDIN

STDERR默認不能通過管道轉發,可利用“2>&1”或“|&” 實現

最后一個命令會在當前shell進程的子shell進程中執行

用來組合多種工具的功能 ls  | tr 'a-z' 'A-Z'



$命令1 | tee 文件名 | 命令2 

把命令1的STDOUT保存在文件名中,然后管道輸入給命令2使用: 

保存不同階段的輸出

復雜管道的故障排除 

同時查看和記錄輸出


















原創文章,作者:M20-16劉國新,如若轉載,請注明出處:http://www.www58058.com/28338

(0)
M20-16劉國新M20-16劉國新
上一篇 2016-08-08
下一篇 2016-08-08

相關推薦

  • 網絡26期 第五周作業

    1. 顯示當前系統上root、fedora或user1用戶的默認shell egrep -o “^(root|fedora|user1)\>.*[^:]+$” /etc/passwd | cut -d: -f1,7 2. 找出/etc/rc.d/init.d/functions文件中某單詞后面跟一組小括號的行,形如:hello(…

    2017-03-13
  • 正則表達式—grep的用法詳解

    grep與sed、awk共稱為文字處理三劍客,支持正則表達式語句,具體用法如下: grep [options] PATTERN [file]     #常用選項:     –color=auto  #對匹配到的文本著色顯示 &n…

    Linux干貨 2016-07-04
  • ?Linux基礎知識之文件權限

    實驗環境:    Linux系統版本為CentOS6.8_x86_64版本,以root用戶和sjsir用戶遠程用xshell連接系統,進行試驗。 文本目錄:    1.文件的屬性    2.文件權限相關的命令    3.umask 新建文件和目錄的默認權限   &nbs…

    Linux干貨 2016-08-05
  • 0811:腳本練習

    系統信息獲取腳本 1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。 [root@centos7 scripts]#cat systeminfo.sh  #!/usr/bin/bash  server_ip…

    Linux干貨 2016-08-22
  • 一次完整的HTTP事務是怎樣一個過程?

    聲明:本文章中的說法僅是個人理解總結,不一定完全正確,但是可以有助于理解。 關于HTTP協議可以參考以下: HTTP協議漫談 http://kb.cnblogs.com/page/140611/ HTTP協議概覽 http://www.cnblogs.com/vamei/archive/2013/05/11/3069788.html 了解HTTP Heade…

    Linux干貨 2015-03-10
  • 文本處理工具

    分頁查看文件內容 less和more命令介紹 分頁查看文件內容:less和more less:一頁一頁地查看文件或STDIN輸出   # less FILE less的快捷鍵:     Ctrl+u:向上翻半屏     Ctrl+d:向下翻…

    Linux干貨 2016-08-07
欧美性久久久久