標準I O和管道

2021-09-27 05:37:08 字數 2550 閱讀 1921

重定向 redirect

標準輸入和輸出

程式:指令+資料

讀入資料:input

輸出資料:output

開啟的檔案都有乙個fd:file descriptor(檔案描述符)

/dev/std*

/proc/self/fd 終端

linux給程式提供三種i/o管道
標準輸入(stdin) -0 預設接受來自鍵盤的輸入

例如:bc(計算器)

標準輸出(stdout) -1 預設輸出到終端視窗

標準錯誤(stderr) -2 預設輸出到終端視窗

i/o重定向:改變預設位置

stdout和stderr可以被重定向到檔案

命令 操作符號 檔名

> 把stdout重定向到檔案

2> 把stderr重定向到檔案

&> = > file 2&>1 把所有輸出重定向到檔案

< 輸入重定向

清空大檔案:> /boot/bigfile 立即釋放空間

>> 追加 >> /data/ls.log 更加安全的建立檔案

依賴於當前shell ,更換其他shell將無法建立

(command;command)>file

set -c 禁止重定向覆蓋

set +c 允許重定向覆蓋

>| file 強制覆蓋

tr命令(外部命令)
tr 轉換和刪除字元

選項 :

-c -c --complement:取代所有不屬於第一字符集的字元

-d --delete:刪除所有屬於第一字符集的字元

-s --squeeze-repeats:把連續重複的字元以單獨乙個字元表示

-t --truncate-set1:將第一字符集對應字元轉化第二字元對應的字元

[:alnum:]: 字母和數字 

[:alpha:]: 字母

[:cntrl:]: 控制(非列印)字元

[:digit:]: 數字

[:graph:]: 圖形字元

[:lower:]: 小寫字母

[:print:]: 可列印字元

[:punct:]: 標點符號

[:space:]: 空白字元

[:upper:]: 大寫字母

[:xdigit:]:十六進製制字元

windows和linux的文字格式不同(不可見字元)

man ascii 檢視ascii

在linux ascii中 '\n'表示回車 '\r'表示換行

在windows中 回車和換行意思基本相同

hexdump -c 命令 可以檢視檔案16進製制

tr -d '\r' < win.txt

tr -d '\r' < win.txt > win2.txt (生成新檔案)

用這樣的方式將windows格式轉化為linux格式

或者 可以使用 dos2unix 命令 將windows格式轉化為unix格式

unix2dos 命令 可以將unix格式 轉化為windows格式

慎用

cat f1.txt  

cat >f2.txt

passwd root &> /dev/null 隱藏資訊
管道 ( | )

將命令1的標準輸出作為命令2的標準輸入

將標準錯誤輸出

ls /data  /err  2<&1 | tr '[:lower:]' '[upper]'

或 ls /data /err |& tr '[:lower:]' '[upper]'

重定向到多個目標

tee 

command 1 | tee [-a] file | command 2

把命令1的stdout儲存在檔案中,作為命令2的輸入

使用:

儲存不同階段的輸出

複雜管道的故障排除

同時檢視和記錄輸出

seq 生成序列

面試題:

計算1+2+...+100的總和

seq -s + 1 2 100 | bc
管道中 - 符號

示例:

將/home裡面的檔案打包,但打包的資料不是記錄到檔案呢,而是傳送到stdout,

經過管道後,將tar -cvf - /home 傳送給後面的tar -xvf -,後面的這個 - 則是取前乙個命令的stdout,因此,就不需要使用臨時file了

tar -cvf - /home | tar -xvf

標準I O和管道

標準輸入 0 標準輸出 1 錯誤輸出 2標準輸入 stdin 0 預設接受來自鍵盤的輸入 標準輸出 stdout 1 預設輸出到終端視窗 標準錯誤 stderr 2 預設輸出到終端視窗改變檔案儲存的預設位置 格式 命令 操作符號 檔名 支援的操作符號包括 把標準輸出重定向到檔案 把輸出內容重定向追加...

標準IO和管道

1 將 etc issue檔案中的內容轉換為大寫後儲存至 tmp issue.out檔案中 1.cat etc issue tr a z a z tmp issue.out 2.tr a z a z tmp issue.out 2 將當前系統登入使用者的資訊轉換為大寫後儲存至 tmp who.out...

Linux標準I O和管道

程式 指令 資料 linux給程式提供三種 i o 裝置 標準輸入 stdin 0 預設接受來自鍵盤的輸入 標準輸出 stdout 1 預設輸出到終端視窗 標準錯誤 stderr 2 預設輸出到終端視窗 i o重定向 改變預設位置 重定向操作符 把標準輸出重定向到檔案 ls lh data ls.l...