我們知道,在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、刪除Windows文本文件中的'^M'字符
7、處理字符串“xt.,l 1 jr#!$mn2 c*/fe3 uz4”,只保留其中的數字和空格
8、將PATH變量每個目錄顯示在獨立的一行
9、刪除指定文件的空行
10、將文件中每個單詞(字母)顯示在獨立的一行,並無空行
本文出自 “11798474” 博客,請務必保留此出處http://11808474.blog.51cto.com/11798474/1832037