重定向煮嫌,回憶一下這個概念是不是之前學(xué)過:在 Java web 開發(fā)中請求的重定向。在本章節(jié)中抱虐,我們要學(xué)的是“IO重定向”昌阿。本文將從以下命令開始展開:
- cat
- sort
- uniq
- grep
- wc
- head
- tail
- tee
I/O 重定向允許我們更改輸出地點和輸入來源。一般地恳邀,輸出送到屏幕懦冰,輸入來自鍵盤, 但是通過 I/O 重定向谣沸,我們可以做出改變刷钢。我們使用 “>” 重定向符后接文件名將標(biāo)準(zhǔn)輸出重定向到除屏幕 以外的另一個文件。為什么我們要這樣做呢乳附?因為有時候把一個命令的運(yùn)行結(jié)果存儲到 一個文件很有用處内地。
例如伴澄,我們可以告訴 shell 把 ls 命令的運(yùn)行結(jié)果輸送到文件 ls-output.txt 中去, 由文件代替屏幕瓤鼻。
[me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt
這樣秉版,我們就把 bin 目錄下的詳細(xì)信息重定向到了文件 ls-output.txt 了,并且有內(nèi)容茬祷。
技巧:單純的使用> ls-output.txt
這個命令可以清空一個存在的文件或者創(chuàng)建一個文件清焕。
>
符號每次都是從頭開始寫。那么祭犯,如果我們想追加文件內(nèi)容怎么辦呢秸妥? 使用>>
符號。
也就是每次都是在文件末尾添加內(nèi)容沃粗,不會覆蓋之前的內(nèi)容粥惧。
如果,現(xiàn)在需要把標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)輸出錯誤都重定向到文件中最盅,可以使用
ls -l /bin/usr &> ls-output.txt
cat 連接文件
cat 命令讀取一個或多個文件突雪,然后復(fù)制到標(biāo)準(zhǔn)輸出。cat 經(jīng)常用來顯示簡短的文件涡贱,cat 可以連接多個文件咏删。比如我們下載了一個大型文件,文件被分成了還幾個小文件问词,可以使用 cat 命令把它們連接起來督函。
例子:
cat file-1.* >file-1
管道
管道操作符|
,一個命令的標(biāo)準(zhǔn)輸出可以通過管道
送至另一個命令的標(biāo)準(zhǔn)輸入。
例子:
ls -l /usr/bin | less
過濾器(管道線)
管道線經(jīng)常用來對數(shù)據(jù)完成復(fù)雜的操作激挪。有可能會把幾個命令放在一起組成一個管道線辰狡。 通常,以這種方式使用的命令被稱為過濾器垄分。過濾器接受輸入宛篇,以某種方式改變它,然后 輸出它锋喜。
uniq 去掉重復(fù)的行
uniq 命令經(jīng)常和 sort 命令結(jié)合在一起使用
默認(rèn)情況下些己,從數(shù)據(jù)列表中刪除任何重復(fù)行。但是如果我們想看到 重復(fù)的數(shù)據(jù)列表嘿般,讓 uniq 命令帶上-d
選項
wc 打印行數(shù)、字?jǐn)?shù)和字節(jié)
默認(rèn)顯示三個數(shù)據(jù)涯冠,如果加上參數(shù) -l
就只顯示行數(shù)炉奴。
例子:統(tǒng)計 /bin 和 /usr/bin 有序程序列表的個數(shù)
ls /bin /usr/bin | sort | uniq | wc -l
grep 打印匹配行
grep 是個很強(qiáng)大的程序,用來找到文件中的匹配文本蛇更。
用法也很簡單:grep pattern [file...]
grep 有一些方便的選項:”-i”使得 grep 在執(zhí)行搜索時忽略大小寫(通常瞻赶,搜索是大小寫 敏感的)赛糟,”-v”選項會告訴 grep 只打印不匹配的行。
head / tail 打印開頭或者結(jié)尾
默認(rèn)情況下兩個命令都打印 10 行砸逊。通過參數(shù) -n 來控制打印的行數(shù)璧南。
tail 有一個選項允許你實時地瀏覽文件。使用-f
選項师逸,tail 命令繼續(xù)監(jiān)測這個文件司倚,當(dāng)新的內(nèi)容添加到文件后,它們會立即 出現(xiàn)在屏幕上篓像。這會一直繼續(xù)下去直到你輸入 Ctrl-c动知。
tee 用來捕捉管道線某個時期的數(shù)據(jù)
tee 程序從標(biāo)準(zhǔn)輸入讀入數(shù)據(jù),并且同時復(fù)制數(shù)據(jù) 到標(biāo)準(zhǔn)輸出和一個或多個文件员辩。當(dāng)在某個中間處理 階段來捕捉一個管道線的內(nèi)容時盒粮,這很有幫助。
例子:
ls /usr/bin | tee ls.txt | grep zip
這次包含 tee 命令奠滑,在 grep 過濾管道線的內(nèi)容之前丹皱,來捕捉整個目錄列表到文件 ls.txt: