一,I/O重定向
-
重定向正常輸出
-
> :覆寫以存在檔案的內容,很危險的操作
-
>>:如果檔案已經存在,則是在原內容的最后追加,
-
可以禁止>的覆寫行為,使用
set -C,只在當前會話有效,set +C恢復覆寫行為,# set -C # cat /etc/issue > /tmp/is1 -bash: /tmp/is1: cannot overwrite existing file # cat /etc/issue >| /tmp/is1 -
>|:
set -C已經禁止了覆寫,但是確認就是要覆寫,可以使用,
-
-
重定向錯誤輸出
- 2>:覆寫以存在檔案的內容,很危險的操作
- 2>>:如果檔案已經存在,則是在原內容的最后追加,
- 2>|:強制覆寫
-
合并重定向正常輸出和錯誤輸出
- &>:覆寫以存在檔案的內容,很危險的操作
- &>>:如果檔案已經存在,則是在原內容的最后追加,
- &>|:不支持,語法報錯,
-
把錯誤輸出,重定向到正常輸出:2>&1
# cat /etc/issue2 >> /tmp/is1 2>&1如果命令產生的是正常輸出,則重定向到/tmp/is1;如果產生的是錯誤輸出,則把錯誤輸出重定向到正常輸出,由于正常輸出已經重定向到了/tmp/is1了,所以錯誤輸出也重定向到了/tmp/is1.
-
重定向輸入:
<支持檔案作為引數的命令,可以不使用
<,也能夠重定向輸入,比如cat# cat < /etc/issue \S Kernel \r on an \m # cat /etc/issue \S Kernel \r on an \m不支持檔案作為引數的命令,必須明確使用
<,才能夠重定向輸入,比如trtr命令用途:替換或者洗掉特定的字符語法:
tr [OPTION]... SET1 [SET2]-
把輸入的1替換成2,把輸入的2替換成4
$ tr [12] [34] 12//輸入的12 34//被替換成了34 22//輸入的22 44//被替換成了44 -
利用重定向,把檔案里的小寫字母,全部替換成相應的大寫字母,把結果顯示到標準輸出,
# cat /etc/issue \S Kernel \r on an \m # tr [:lower:] [:upper:] < /etc/issue \S KERNEL \R ON AN \M -
利用重定向,把檔案里的小寫字母,全部洗掉后,把結果顯示到標準輸出,
# cat /etc/issue \S Kernel \r on an \m # tr -d [a-z] < /etc/issue \S K \ \
-
-
<<:是干什么的?<<后面的詞作為結尾,把內容重定向到檔案里# cat > /tmp/is1.out << EOF > hello > cat cat > EOF # cat /tmp/is1.out hello cat cat -
特殊設備:/dev/null
重定向到/dev/null,就相當于消失了,
在shell腳本程式里,當關心的是,命令的執行結果(成功,還是失敗),而不是命令執行后的輸出的時候,就可以把命令的輸出重定向到/dev/null里,
例子:只想知道/etc/passwd檔案里是否有第一行,而不關心第一行的內容時,使用下面的命令,
# head -1 /etc/passwds &> /dev/null # echo $? 1 # head -1 /etc/passwd &> /dev/null # echo $? 0
二,管道
連接程式,把前一個命令的輸出作為后一個命令的輸入,
command1 | command2 | command3 ...
例子1:把cat的輸出,作為tr的輸入
# cat /etc/issue
\S
Kernel \r on an \m
# cat /etc/issue | tr [a-z] [A-Z]
\S
KERNEL \R ON AN \M
例子:把who的輸出,作為tail的輸入,再把tail的輸出,作為tr的輸入,
# who
ys :0 2019-12-16 10:22 (:0)
ys pts/0 2019-12-16 10:22 (:0)
root pts/1 2019-12-16 10:23 ()
# who | tail -2
aa pts/0 2019-12-16 10:22 (:0)
root pts/1 2019-12-16 10:23 ()
# who | tail -2 | tr [a-z] [A-Z]
AA PTS/0 2019-12-16 10:22 (:0)
ROOT PTS/1 2019-12-16 10:23 ()
重定向后,原來命令的輸出就沒有了,能夠保存上一個命令的輸出嗎?使用tee命令,
tee:read from standard input and write to standard output and files,從標準輸入讀取,然后寫入到標準輸出和檔案中,
例子:保留cat的輸出,并把cat的輸出,傳遞給tr命令
# cat /etc/issue | tee /tmp/is3.out | tr [a-z] [A-Z]
\S
KERNEL \R ON AN \M
# cat /tmp/is3.out
\S
Kernel \r on an \m
練習1:把/etc/passwd檔案的前6行的資訊轉換為大寫字母后輸出
# head -6 /etc/passwd | tr [a-z] [A-Z]
ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN
ADM:X:3:4:ADM:/VAR/ADM:/SBIN/NOLOGIN
LP:X:4:7:LP:/VAR/SPOOL/LPD:/SBIN/NOLOGIN
SYNC:X:5:0:SYNC:/SBIN:/BIN/SYNC
c/c++ 學習互助QQ群:877684253

本人微信:xiaoshitou5854
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/147219.html
標籤:Linux
上一篇:Sersync實時同步
