聲明:所有文章只作為學(xué)習(xí)筆記用,轉(zhuǎn)載非原創(chuàng)
管道有兩種 一種是匿名管道荣暮,一種是通過mkfifo 建立的命名管道
mkfifo a.fifo
原因是管道實(shí)現(xiàn)的是進(jìn)程間通信挽鞠,兩個(gè)進(jìn)程之間存在交叉,在運(yùn)行ps進(jìn)程后開始收集進(jìn)程信息,grep也已經(jīng)開始并處于等待接收數(shù)據(jù)狀態(tài),當(dāng)ps收集到任何數(shù)據(jù)后都將輸出放入內(nèi)存由管道傳遞給grep進(jìn)行篩選崎溃。
管道其本質(zhì)是數(shù)據(jù)傳遞,管道左邊的輸出數(shù)據(jù)放入內(nèi)存盯质,由管道右邊的進(jìn)程讀取
例如echo "abcd" | passwd --stdin username笨奠,表示將進(jìn)程echo的輸出結(jié)果"abcd"作為進(jìn)程passwd的輸入數(shù)據(jù)。
#結(jié)合 https://www.cnblogs.com/f-ck-need-u/p/7325378.html
標(biāo)準(zhǔn)輸入 = /dev/stdin = 代號(hào)0 = <符號(hào)(注意唤殴,沒有包含<<符號(hào))。
標(biāo)準(zhǔn)輸出 = /dev/stdout = 代號(hào)1 = >或>>符號(hào)到腥。
標(biāo)準(zhǔn)錯(cuò)誤輸出 = /dev/stderr = 代號(hào)2 = 使用2>或2>>符號(hào)朵逝。
注意,上面的/dev/std{in,out,err}分別是0乡范、1配名、2默認(rèn)的輸出目標(biāo),當(dāng)重定向后晋辆,就不再使用這些目標(biāo)渠脉。具體見后文。
<瓶佳、>芋膘、2>實(shí)現(xiàn)的是覆蓋功能,>>霸饲、2>>實(shí)現(xiàn)的是追加的功能为朋,
但是注意"<<"不是追加功能,而是表示此處生成文檔(here document)厚脉,在后面cat和重定向配合的內(nèi)容里有說明习寸。此外,還有<<<傻工,它表示此處字符串(here string)霞溪,
有時(shí)候孵滞,使用"-"也表示/dev/stdin
cat /etc/fstab | cat -
"&"符號(hào)表示描述符重用(fd 2 duplicate from fd 1)
可以使用set -C來設(shè)置如果輸出重定向文件已經(jīng)存在則不覆蓋。使用set +C來取消set -C的效果鸯匹。如果在設(shè)置了set -C時(shí)仍然想強(qiáng)制覆蓋坊饶,可以使用“>|”代替“>”來重定向輸出。同理錯(cuò)誤輸出也有此特性忽你。
set -o +o
[root@xuexi tmp]# set -C
[root@xuexi tmp]# cat flip >ttt.txt
-bash: ttt.txt: cannot overwrite existing file
[root@xuexi tmp]# cat flip >| ttt.txt
[root@xuexi tmp]# set +C
<<eof"幼东,它表示here document,此后輸入的內(nèi)容都作為一個(gè)document輸入給cat科雳。既然是document根蟹,那就肯定有document結(jié)束符標(biāo)記document到此結(jié)束,結(jié)束符使用的是here document后的字符糟秘,例如此處為eof简逮。其實(shí)不使用eof,使用其他字符也是一樣的
#<<<
對(duì)于here string尿赚,表示將<<<后的字符串作為輸入數(shù)據(jù)散庶。
例如:
passwd --stdin user <<< password_value
等價(jià)于:
echo password_value | passwd --stdin user