天天看點

Linux bash中I/O重定向及管道

    我們知道,在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檔案中

Linux bash中I/O重定向及管道

2、将目前系統登入使用者的資訊轉換為大寫後儲存至/tmp/who.out檔案中

Linux bash中I/O重定向及管道

3、一個linux使用者給root發郵件,要求郵件标題為”help”,郵件正文如下:

Hello, I am 使用者名,the system version is here,pleasehelp me to check it ,thanks!

作業系統版本資訊

Linux bash中I/O重定向及管道
Linux bash中I/O重定向及管道

4、将/root/下檔案清單,顯示成一行,并檔案名之間用空格隔開

Linux bash中I/O重定向及管道

5、file1檔案的内容為:”1 2 3 4 5 6 7 8 9 10” 計算出所有數字的總和

Linux bash中I/O重定向及管道
Linux bash中I/O重定向及管道

6、處理字元串“xt.,l 1 jr#!$mn2 c*/fe3 uz4”,隻保留其中的數字和空格

7、将PATH變量每個目錄顯示在獨立的一行

Linux bash中I/O重定向及管道

8、删除指定檔案的空行

Linux bash中I/O重定向及管道

9、将檔案中每個單詞(字母)顯示在獨立的一行,并無空行

Linux bash中I/O重定向及管道

轉載于:https://blog.51cto.com/11808474/1832037

繼續閱讀