Linux-io操作
標准輸入和輸出
- 標准輸入 stdin 0 默認接受來自鍵盤的輸入
- 標准輸出 stdout 1 默認輸出到終端窗口
- 標准錯誤 stderr 2 默認輸出到終端窗口
I/O重定向
把輸出和錯誤重新定向到文件
> 覆蓋
- > 將stdout重定向到文件
- 2> 把stderr重定向到文件
- &> 把所有輸出重定向到文件
禁止/允許覆蓋
[root@centos ~]#set -C [root@centos ~]#> a.txt -bash: a.txt: 無法覆蓋已存在的文件 [root@centos ~]#set +C [root@centos ~]#> a.txt
>> 追加
- >> 將stdout追加到文件
- 2>> 把stderr追加到文件
- &>> 把所有輸出追加到文件
標准輸出和錯誤輸出各自定向到不同的文件
ls b bbbbb > info.log 2> error.log
合並所有輸出
- &> 覆蓋重定向
- &>> 追加重定向
- command > /path/to/file.out 2>&1
- command >> /path/to/file.out 2>&1
- ():合並多個程序的stdout
- /dev/null 無限接收的無底洞
tr 'a-z' 'A-Z' </etc/issue [root@localhost jiangyi]#tr ab 12 ab 12 [root@localhost jiangyi]#tr abc 12 如果后面的位數不足的話,則用最后一位補齊 abc 122 ab 12 tr -d abc < issue > issue2 從定向不能為原來的文件,如果說為原來的文件,則文件情況 -t 用來截斷 [root@localhost jiangyi]#tr -t abcd 12 abcd 12cd cd cd -s 壓縮 去重 [root@localhost jiangyi]#tr -s abc abc abc aaabbbccccccccccccccccccccccccccccc abc -c 取反 [root@localhost jiangyi]#tr -sc abc aaaaaaaaaaaaaabbbbbbbbbbbbbbbcccccccccccccc aaaaaaaaaaaaaabbbbbbbbbbbbbbbcccccccccccccc aaaaaaaaaaaaaaaaaabbbbbbbbbbbbbcccccccccccccccccdddddddddddddeeeeeeeeeeeeffffffffffffff aaaaaaaaaaaaaaaaaabbbbbbbbbbbbbcccccccccccccccccdef aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccc1111111111111111222222222222333333333333 aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccc123 [root@localhost jiangyi]#tr -dc abc aaaaaaaaaaaaabbbbbbbbbbbbccccccccccccccccccdddddddddddddddwqweqweqwqeqwqwqwq wqqqqqqqqqqqqqqqqqqqqqqqqq ctrl+d結束 [root@localhost jiangyi]#tr -dc "abc\n" adsada aaa sadasdcxzczx aacc asdadwq aa [root@localhost jiangyi]#seq 1 10 >f1 [root@localhost jiangyi]#tr -d "\n" <f1 [root@localhost jiangyi]tr "\n" " "<f1 [root@localhost jiangyi] tr " " "\n" <f2
[root@localhost jiangyi]#cat >f1 <<EOF > 1 > 2 > 3 > 4 > 5 > 6 > 7 > > 8 > 9 > EOF [root@localhost jiangyi]# cat > f4 asdas sad asd ctrl+d結束 ctrl+c也可以 兩者區別 第一種方式輸出結束,文件才會產生 第二方式,回車一次就會寫入文件 EOF 約定俗成
(多行重定向 不結束不會生成文件
單行重定向 回車一次就會寫入文件)
管道
管道使用“|”來連接命令
命令1|命令2|命令3|。。。
- 將命令1的stdout發給命令2的stdin,將命令2的stdout發給命令3的stdin
- stderr默認不能通過管道轉發,可以使用|&實現
- [root@centos ~]#ls /daopda|& tr -s 'a-z' 'A-Z' LS: 無法訪問/DAOPDA: 沒有那個文件或目錄
- 作用一般是用來組合多種工具
- ls |tr 'a-z' 'A-Z'
[root@localhost jiangyi]#ls /dadadasda|tr -s "a-z" "A-Z" ls: cannot access /dadadasda: No such file or directory [root@localhost jiangyi]#ls|tr "a-z" "A-Z"