我們知道,在Linux中一切皆檔案。這就意味着,任何一個裝置在系統中都有一個檔案與之對應。是以我們就可以通過檔案來通路裝置。對于使用者來講,通路檔案就是通過檔案名來進行的,使用者看到就是一個檔案名,但對于核心來說,看到的隻能是數字,這個數字就叫做檔案描述符,核心就是通過利用檔案描述符fd(file descriptor)來通路檔案。打開現存檔案或者建立檔案時,核心會傳回一個檔案描述符。讀寫檔案也需要使用檔案描述符來指定待讀寫的檔案。
在Linux系統中,預設有三種标準輸入輸出情況
标準輸入:鍵盤,0
标準輸出:顯示器,1
标準錯誤輸出:顯示器,2
但是如果我們不想實作标準的輸入輸出怎麼辦,是以我們可以利用I/O重定向這種機制來實作改變标準位置。下面來說下I/O重定向的具體用法:
IO重定向:
輸出重定向:>
特性:覆寫輸出
輸出重定向:>>
特性:追加輸出
# set -C
禁止覆寫輸出重定向至已存在的檔案;
此時可使用強制輸出覆寫:>
# set +C
關閉上述特性
錯誤輸出流重定向:2>,2>>
合并正常輸出流和錯誤輸出流:
(1) &>,&>>
(2) COMMAND > /path/to/somefile 2>&1
COMMAND >> /path/to/somefile 2>&1
特殊裝置:/dev/null
輸入重定向:<
tr指令:
tr [OPTION]... SET1 [SET2]
把輸入的資料當中的字元,凡是在SET1定義範圍内出現的,統統對位轉換成SET2出現的字元;
用法1:
tr SET1 SET2 < /PATH/FROM/SOMELIFE
用法2:
tr SET1 -d < /PATH/FROM/SOMELIFE
注意:不修改原檔案
Here Document: <<
cat << EOF
cat >/PATH/TO/SOMELIFE << EOF
管道:連接配接程式,實作将前一個指令的輸出直接定向後一個程式當做輸入資料流;
COMMAND1 | COMMOND2 | COMMAND3 |...
STDERR預設不能通過管道轉發,可利用2>&1 或|& 實作
最後一個指令會在目前shell程序的子shell程序中執行用來
tee指令:
COMMAND | tee /PATH/TO/SOMELIFE
練習題:
1、将/etc/issue檔案中的内容轉換為大寫後儲存至/tmp/issue.out檔案中

2、将目前系統登入使用者的資訊轉換為大寫後儲存至/tmp/who.out檔案中
3、一個linux使用者給root發郵件,要求郵件标題為”help”,郵件正文如下:
Hello, I am 使用者名,the system version is here,pleasehelp me to check it ,thanks!
作業系統版本資訊
4、将/root/下檔案清單,顯示成一行,并檔案名之間用空格隔開
5、file1檔案的内容為:”1 2 3 4 5 6 7 8 9 10” 計算出所有數字的總和
6、處理字元串“xt.,l 1 jr#!$mn2 c*/fe3 uz4”,隻保留其中的數字和空格
7、将PATH變量每個目錄顯示在獨立的一行
8、删除指定檔案的空行
9、将檔案中每個單詞(字母)顯示在獨立的一行,并無空行
轉載于:https://blog.51cto.com/11808474/1832037