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文件中
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
總結
以上是生活随笔為你收集整理的Linux bash中I/O重定向及管道的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NFS 网络文件系统
- 下一篇: Linux基础知识(一)