一、I/O重定向
程序=指定+數據
讀取數據:input
輸出數據:output
打開的文件都有一個fd:文件描述符
linux給程序提供三種I/O設備:
標準輸入(standard input) -0 默認接受來自鍵盤的輸入
標注輸出(standard output) -1 默認輸出到終端窗口
標準錯誤(standard erroe) -2 默認輸出到終端窗口
I/O重定向:改變默認位置
二、標準輸出和標準錯誤可以被重定向到文件
command 操作符號 文件名
支持的操作符號:
>:把標準輸出重定向到文件
[root@localhost ~]# ls > /wang/dir [root@localhost ~]# cat /wang/dir anaconda-ks.cfg mima.txt mulu1 mulu2 wenjian1 wenjian2 yonghu.txt
2>:把標準錯誤重定向到文件
[root@localhost ~]# xxx 2> /wang/dir [root@localhost ~]# cat /wang/dir -bash: xxx: command not found
&>:把所有輸入重定向到文件
[root@localhost ~]# ls /wang /wang/x &> /wang/dir [root@localhost ~]# cat /wang/dir ls: cannot access /wang/x: No such file or directory /wang: 123 dir
>文件內容會被覆蓋
set -C:禁止將內容覆蓋已有文件,但可追加
強制覆蓋>|
set +C:允許覆蓋
>>:在原有的內容上,追加內容,不會被覆蓋。
2>:覆蓋重定向錯誤輸出數據流
2>>:追加重定向錯誤輸出數據流
標準輸出和標準錯誤各自定向不同位置
command > 文件1 2> 文件2
[root@localhost ~]# ls /wang /wang/xx > /wang/yes 2> /wang/no [root@localhost ~]# cat /wang/yes /wang/no /wang: 123 dir no yes ls: cannot access /wang/xx: No such file or directory
合并標準輸出和錯誤輸出為同一個數據流進行重定向
&>:覆蓋重定向
&>>:追加重定向
command > 文件 2>>&1 (固定順序)
command >> 文件 2>>&1
():合并多個程序的標準輸出
[root@localhost ~]# (ls;pwd) > /wang/321 [root@localhost ~]# cat /wang/321 anaconda-ks.cfg mima.txt mulu1 mulu2 wenjian1 wenjian2 yonghu.txt /root
三、tr命令
tr – 轉換和刪除字符
t2 選項 set1 set2
常用選項:
-c或–complerment:取字符集的補集
-d或–delete:刪除所有屬于第一字符集的字符
-s或-squeezu-repeats:把連續重復的字符以單獨一個字符表示
-t或–truncate
set1:將第一個字符集對應字符轉化為第二字符集對應的字符
四、從文件中導入標準輸入
使用<來重定向標準輸入
某些命令能接受從文件中導入的stdin
tr ‘a-z’ ‘A-Z’ < /etc/issue
這條命令會把/etc/issus中的小寫字符都轉換成大寫字符
[root@localhost wang]# tr 'a-c' 'A-C' < /wang/qqq ABCdefg
tr -d abc < /etc/fstab
刪除fstab文件中的所有adc中任意字符
[root@localhost wang]# tr -d abc < /wang/qqq defg
cat > filea
mage
wang
按ctry+d離開,可以使用文件來代替鍵盤的輸入
[root@localhost wang]# cat > qqq 123 qwe asd 123[root@localhost wang]#
cat > filea < filed
[root@localhost wang]# cat > 123 < qqq [root@localhost wang]# cat 123 123 qwe asd 123
五、把多行發送給標準輸入
使用“<<終止詞”命令從鍵盤把多行重定向給stdin
直到 終止詞 位置的所有文本都發送給stdin
有時被成為就地文本(heretext)
[root@localhost wang]# mail -s "Please Call" linux@wang <<end > Hi wang > please give me a cao when you get in , > we man need to do some maintenance on server > > end [root@localhost wang]#
六、管道
使用符號“|”表示,用來鏈接命令
命令1|命令2|命令3
將命令1的標準輸出發送給命令2的標準輸入,命令2的標準輸出發送到命令3的標準輸入
標準錯誤默認不能通過管道轉發,可利用2>&1或|&實現
最后一個命令會在當前shell進程的字shell進程中執行,用來組合多種工具的功能
[root@localhost wang]# cat qqq | tr 'a-d' 'A-D' 123 qwe AsD 123
less:一頁一頁的查看輸入
ls -l /wang | less
mail:通過電子郵件發送輸入:
echo"test email" | mail -s "test" user@example.com
lpr:把輸入發送給打印機
echo"test print" |lpr -P printer_name
七、重定向到多個目標(tee)
命令1 | tee 文件名 | 命令2
把命令1中的標準輸出保存在文件名中,然后管道輸出給命令2使用:
保存不同階段的輸出
復雜管道的故意排除
同時查看和記錄輸出
[root@localhost wang]# ls | tee /wang/wang 123 321 dir no qqq wang yes [root@localhost wang]# cat /wang/wang 123 321 dir no qqq wang yes
原創文章,作者:DYW,如若轉載,請注明出處:http://www.www58058.com/27268