Linux基礎入門--IO重定向及管道
IO重定向及管道
一直都提到,程序:指令+數據
其實程序也有IO,數據的來源有多個地方:文件、外部
可用於輸入的設備:文件(linux一切皆文件)
鍵盤設備、文件系統上的常規文件加載內容、網卡等;
可用於輸出的設備:文件(linux一切皆文件)
顯示器、文件系統上的常規文件輸出保存、網卡等;
程序的數據流有三種:
輸入的數據流;<-- 標準輸入(stdin),是鍵盤;
輸出的數據流:--> 標準輸出(stdout),顯示器;
錯誤輸出流: --> 錯誤輸出(stderr),顯示器;
fd: file descriptor,文件描述符;所對應標識符如下:
標準輸入:0
標準輸出:1
錯誤輸出:2
IO重定向:
輸出重定向:>
特性:覆蓋輸出,將anaconda-ks.cfg文件內容覆蓋到kk.txt中
[[email protected]_1 ~]# cat anaconda-ks.cfg > kk.txt
輸出重定向:>>
特性:追加輸出,從文件尾部加入
[[email protected]_1 ~]# cat anaconda-ks.cfg >> kk.txt
錯誤輸出流重定向:2>,2>>(追加)
[[email protected]_1 sh]# cat test.txt 2> error.log
[[email protected]_1 sh]# cat error.log
cat: test.txt: No such file or directory
[[email protected]_1 sh]# cat test.log 2>> error.log
[[email protected]_1 sh]# cat error.log
cat: test.txt: No such file or directory
cat: test.log: No such file or directory
合並正常輸出流和錯誤輸出流:
合並輸出流也是有覆蓋和追加兩種方式:
(1) &>, &>>
(2) COMMAND > /path/to/somefile 2>&1
COMMAND >> /path/to/somefile 2>&1
[[email protected] tmp]# cat /root/anaconda-ks.cfg >> an.cfg 2>&1
註解:查看anaconda-ks.cfg文件內容追加到an.cfg中,如有錯誤輸出也將追加到an.cfg文 件中;
提一下特殊設備:/dev/null
此特殊設備理解為“數據黑洞”,所有的數據扔進去就會被刪除
set為shell內部命令,可以設置禁止覆蓋輸出重定向至已存在文件;(Centos 6)
[[email protected] ~]# set -C
[[email protected] ~]# cat fstab > issue
-bash: issue: cannot overwrite existing file
如果將開啟後無法使用重定向功能,此時可使用強制覆蓋輸出:>|:
[[email protected] ~]# cat fstab >| issue
關閉上述特性:
[[email protected] ~]# set -C
註:set設定只對當前shell生效
輸入重定向:<
輸入重定向就是將“數據”作為命令的數據輸入源,從而對數據做一些操作
先來一個命令:
tr命令:
tr - translate or delete characters
格式:
tr [OPTION]... SET1 [SET2]
把輸入的數據當中的字符,凡是在SET1定義範圍內出現的,通通一一對位轉換為 SET2出現的字符
選項:
-d:刪除字符集合
示例1:
tr SET1 SET2 < /PATH/FROM/SOMEFILE
[[email protected]_1 sh]# tr S s < ./issue
\s
Kernel \r on an \m
註解:將issue中出現所有大寫S,轉換成小寫s
示例2:
tr -d SET1 < /PATH/FROM/SOMEFILE
[[email protected]_1 sh]# tr -d S < ./issue
\
Kernel \r on an \m
註意:不修改原文件
Here Document(此處創建文檔):<<
結束符操作兩種方式:
cat << EOF
cat > /PATH/TO/SOMEFILE << EOF
示例:
[[email protected]_1 sh]# cat << EOF
> hello
> EOF
hello
解釋:
EOF為結束符,當輸入的內容中有EOF時會退出
管道:
連接程序作用,實現將前一個命令的輸出直接定向後一個程序當做輸入數據流
可以多級連接:
COMMAND1 | COMMAND2 | COMMAND3 | ...
管道符號: |
[[email protected]_1 sh]# cat /etc/issue | tr COS cos
tee命令:
雙向管道,意思是輸入數據流保留並在次向後一個程序當做輸入數據流
格式:
COMMAND | tee /PATH/TO/SOMEFILE
示例:
[[email protected] ~]# cat /etc/issue | tee kkk | tr -d ‘6.4‘
CentOS release (Final)
Kernel \r on an \m
[[email protected] ~]# cat kkk
CentOS release 6.4 (Final)
Kernel \r on an \m
練習1:把/etc/passwd文件的前6行的信息轉換為大寫字符後輸出;
[[email protected] ~]# head -n 6 /etc/passwd | tr ‘a-z‘ ‘A-Z‘
本文出自 “變相怪傑” 博客,請務必保留此出處http://waldenkk.blog.51cto.com/2410270/1929948
Linux基礎入門--IO重定向及管道