1. 程式人生 > >Linux基礎入門--IO重定向及管道

Linux基礎入門--IO重定向及管道

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重定向及管道