Linux運維之路 基礎篇:Linux基礎命令(二) 輸入輸出重定向及管道
標準輸入:用0表示(鍵盤)
標準輸出:用1表示(監視器)
標準錯誤輸出:用2表示(監視器)
IO重定向:改變標準位置
標準輸出重定向:
>:覆蓋重定向,目標文件原有的內容會被清除(set -C:禁止對已有文件進行覆蓋重定 向)
(>|:強制進行覆蓋重定向)
>>:追加重定向,目標文件原有的內容會被保留,新內容追加至結尾
標準錯誤輸出重定向:
2>:標準錯誤輸出覆蓋重定向
2>>:標準錯誤輸出追加重定向
標準輸出和錯誤輸出各自定向至不同位置
命令 > 位置1 2> 位置2 (兩個文件都會被創建)
合併標準輸出和錯誤輸出爲同一個數據流進行重定向
命令 &> 文件或目錄 或 命令 > 目錄或文件 2>&1
輸入重定向:符號 <
tr命令: tr [OPTION]... SET1 [SET2]
不加選項表示將字符1中的字符替換到位置與之對應的字符2中的數據
tr "a-z" "A-Z" 把小寫字母轉換爲大寫字母
加特定選項-d,將數據中的和字符1中的數據匹配到的刪除
-c或——complerment:取代所有不屬於第一字符集的字符
-s或--squeeze-repeats:把連續重複的字符以單獨一個字符表示;
-t例如:--all例如:--all或--truncate-set1:先刪除第一字符集較第二字符集多出的字符。tr [OPTION]... SET1 [SET2] < 文件 表示從給定的文件中讀取內容
<< 結束符:將結束符之前的內容合併輸出
用處: cat >>/tmp/tese <<EOF 可以向指定文件中寫多行內容[root@weiying ~]# cat <<EOF my name is root my version is `lsb_release -d` EOF my name is root my version is Description: CentOS Linux release 7.4.1708 (Core)
管道
把前一個命令的輸出當做後一個命令的輸入(最後一個命令會在當前shell進程的子進程中執行),標準錯誤輸出默認不能通過管道轉發,可利用2>&1 或 |& 實現
tee命令:從標準輸入讀取數據,輸出至標準輸出和文件中
-a:追加
例:將/etc/passwd文件前五行,轉換爲大寫後,保存至/tmp/passwd中
head -n 5 | tr "a-z" "A-Z" | tee /tmp/passwd
練習:
- 將/etc/issue文件中的內容轉換爲大寫後保存至/tmp/issue.out文件中
[root@weiying ~]# tr [:lowwer:] [:upper:] < /etc/issue > /tmp/issue.out
- 將當前系統登錄用戶的信息轉換爲大寫後保存至/tmp/who.out文件中
[root@weiying ~]# who | tr 'a-z' 'A-Z' > /tmp/who.out
- 一個linux用戶給root發郵件,要求郵件標題爲”help”,郵件正文如下:
Hello, I am 用戶名,The system version is here,please help me to check it ,thanks!操作系統版本信息[root@weiying ~]# mail -s "HELP" root <<EOF > Hello: > I am `whoami` > zhe system version is `lsb_release -d` > plesas help me to check it > thanks > `cat /etc/redhat-release` > EOF
- 將/root下文件列表,顯示成一行,並文件名之間用空格隔開
[root@weiying ~]# ls /root | tr '\n' ' '
- 計算1+2+3+..+99+100的總和
[root@weiying ~]# echo {1..100}| tr ' ' '+'|bc
- 刪除Windows文本文件中的回車字符 ,即“\r”
[root@weiying ~]# tr -d '\t' < win.txt
- 處理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的數字和空格
[root@weiying ~]# echo "xt.,l 1 jr#hexdumpmn 2 c*/fe 3 uz 4" | tr -d -c '0-9 " "'
- 將PATH變量每個目錄顯示在獨立的一行
[root@weiying ~]# echo $PATH | tr ":" "\n"
- 將指定文件中0-9分別替代成a-j
[root@weiying ~]# tr '0-9' 'a-j' < test
- 將文件/etc/centos-release中每個單詞(由字母組成)顯示在獨立一行,並無空行
[root@weiying ~]# cat /etc/centos-release | tr -sc '[:alpha:]' '\n'