描述:
標準輸出(standard output)指的是命令執行所回傳的正確的信息
標準輸出(standard error output)指的是命令執行失敗後所回傳的錯誤信息
Linux 給程序提供三種I/O 設備
標準輸入(STDIN )- 0 默認接受來自鍵盤的輸入,使用< 或者 <<
標準輸出(STDOUT )- 1 默認輸出到終端窗口,默認是屏幕,使用> 或者 >>
標準錯誤輸出(STDERR )- 2 默認輸出到終端窗口,默認是屏幕,使用2> 或者 2>>
通過I/O 重定向可改變默認位置,可將正確的或者錯誤的信息輸出到屏幕或者文件裏,輸入的信息可從鍵盤或者文件中讀取
程序是由指令+數據組成的,STDOUT 和STDERR 可以被重定向到文件
說明:
格式爲: 命令 操作符號 文件名
1> 以覆蓋的方式將正確的數據輸出到指定的文件或者設備上
1>> 以追加的方式將正確的數據輸出到指定的文件或者設備上
2> 以覆蓋的方式將錯誤的數據輸出到指定的文件或者設備上
2>> 以追加的方式將錯誤的數據輸出到指定的文件或者設備上
&> 把所有輸出重定向到文件
>> 在原有內容的基礎上,追加內容
可通過# set -C: 禁止將內容覆蓋 已有文件, 但可追加,強制覆蓋:>|
# set +C: 允許覆蓋
[root@localhost ~]# echo "a" > file1 [root@localhost ~]# cat file1 a [root@localhost ~]# set -C [root@localhost ~]# echo "123" >file1 bash: file1: cannot overwrite existing file [root@localhost ~]# echo "123" >| file1 [root@localhost ~]# cat file1 123
[ping@localhost ~]$ find /home -name .bashrc > list_right 2> list_error [ping@localhost ~]$ cat list_right /home/ping/.bashrc [ping@localhost ~]$ cat list_error find: `/home/user1': Permission denied
標準輸出和錯誤輸出各自定向至不同位置:
COMMAND > /path/to/file.out 2> /path/to/error.out
合併標準輸出和錯誤輸出爲同一個數據流進行重定向:
&> :覆蓋重定向
&>> :追加重定向
COMMAND > /path/to/file.out 2> &1 (順序很重要)
COMMAND >> /path/to/file.out 2>> &1
find /etc -name passwd 2> /dev/null
():合併多個程序的STDOUT
( cal 2010 ; cal 2011 ) > all.txt
[ping@localhost ~]$ find /home -name .bashrc 2&>1 list [ping@localhost ~]$ find /home -name .bashrc &> list [ping@localhost ~]$ cat list find: `/home/user1': Permission denied /home/ping/.bashrc
標準輸入(standard input): < 與 <<
將原來要由鍵盤輸入的數據改由文件內容來替代
使用< 來重定向標準輸入
使用“<< 終止詞”命令從鍵盤把多行重導向給STDIN
[root@localhost ~]# cat > catfile testing cat file test [root@localhost ~]# cat > catfile < ~/.bashrc [root@localhost ~]# ll catfile ~/.bashrc -rw-r--r-- 1 root gentoo 235 Aug 11 03:22 catfile -rw-r--r-- 1 root root 235 Jul 27 2016 /root/.bashr [root@localhost ~]# cat > catfile << "eof" > this is a test > ok now stop > eof [root@localhost ~]# cat catfile this is a test ok now stop
管道命令:
使用符號 “|” 表示,用來連接命令
格式:命令1 | 命令2 | 命令3 | ...
管道命令僅會處理standard output, 對於standard error output 會予以忽略
管道命令必須要能夠接受來自前一個命令的數據成爲standard input 繼續處理才行
stderr 默認不能通過管道轉發,可利用 2>&1 或 |& 實現
[root@localhost ~]# ls -al /etc | less [root@localhost ~]# lss -al /etc | less
tr命令:
轉換和刪除字符
格式:tr [OPTION]... SET1 [SET2]
-c 或——complerment :取字符集的補集
-d 或——delete :刪除所有屬於第一字符集 的字符
-s 或—squeeze-repeats :把連續重複的字符以單獨一個字符表示
-t 或--truncate-set1 :將第一個字符集對應字符轉化爲第二字符集對應的字符
示例:
1,將/etc/issue 文件中的內容轉換爲大寫後保存至/tmp/issue.out 文件中
[root@localhost tmp]# cat /etc/issue | tr 'a-z' 'A-Z' > /tmp/issue.out [root@localhost tmp]# cat /tmp/issue.out CENTOS RELEASE 6.8 (FINAL) KERNEL \R ON AN \M TTY IS \L HOSTNAME IS \N TIME IS \T
2,將PATH 變量每個目錄顯示在獨立的一行
[root@localhost ~]# echo $PATH | tr -s '\n' /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
結束語:
本篇內容是本人上課內容的總結和整理,若有錯誤或不足,請各位路過的達人多多指教。