標準輸入(stdin 0),標準輸出(stdout 1),標準錯誤(stderr 2)
重定向標準輸出
ls -l /usr/bin > test.txt //標準輸出至文件test.txt,寫之前先清空文件。
ls -l /usr/bin >> test.txt //追加寫入至文件。
重定向標準錯誤
ls -l /usr/bin 2> test.error.txt
重定向標準輸出和標準錯誤至同一文件
ls -l /usr/bin > test.txt 2>&1 //重定向標準輸出至文件text.txt,然後把標準錯誤重定向到標準輸出。
// or
ls -l /usr/bin &> test.txt
位存儲桶(a bit bucket) /dev/null
ls -l /usr/bin 2> /dev/null //把不需要的輸出直接丟掉。
cat 拷貝單個/多個文件內容至標準輸出(屏幕)
cat test.txt error.txt
cat // 不接文件名,默認標準輸出爲鍵盤,標準輸出爲屏幕,輸入一行,立刻會打印一行。
cat > test.txt // 默認標準輸入爲鍵盤,標準輸出爲test.txt,可以直接鍵盤寫入文件。
insert first line
insert second line
CTRL+D 終止輸入作爲文件EOF
cat test.txt // 打印文件內容
管道線(pipelines)
命令可以從標準輸入讀取數據,然後再把數據輸送到標準輸出,命令的這種能力被一個 shell 特性所利用,這個特性叫做管道線。使用管道操作符 “|”(豎槓),一個命令的標準輸出可 以管道到另一個命令的標準輸入:
command1 | command2 //注意管道線連接的是兩個命令
過濾器
管道線經常用來對數據完成複雜的操作。有可能會把幾個命令放在一起組成一個管道線。通常,以這種方式使用的命令被稱爲過濾器。過濾器接受輸入,以某種方式改變它,然後輸出它。
ls /bin /usr/bin | sort | less //先排序再輸出
ls /bin /usr/bin | sort | uniq | less // 先排序,後去除重複列,再輸出。
ls /bin /usr/bin | sort | uniq -d | less //先排序,後找到重複列,然後輸出。 “-d” 參數取出重複項。
wc - 打印行數(lines -l),單詞數(words -m),字節數(bytes -c),字符數(character -m)。
wc test.txt
20 64664 455454 test.txt
wc -lmbc test.txt
grep 正則匹配查找
ps aux | grep nginx -ab10 // -ab 顯示關鍵字上下10行內容
ps aux | grep -v nginx // -v 取反,及只打印不包含nginx關鍵字的行
ps aux | grep -i nginx // -i 匹配時忽略大小寫
head/tail 打印頭尾10行數據
head -n 100 text.txt
tail -n 500 text.txt
tail -f text.txt // 不停打印寫入的新日誌。
tee -從 Stdin 讀取數據,並同時輸出到 Stdout 和文件
爲了和我們的管道隱喻保持一致,Linux 提供了一個叫做 tee 的命令,這個命令製造了一 個 “tee”,安裝到我們的管道上。tee 程序從標準輸入讀入數據,並且同時複製數據到標準輸出 (允許數據繼續隨着管道線流動)和一個或多個文件。當在某個中間處理階段來捕捉一個管道 線的內容時,這很有幫助。這裏,我們重複執行一個先前的例子,這次包含 tee 命令,在 grep 過濾管道線的內容之前,來捕捉整個目錄列表到文件 ls.txt:
ls /usr/bin | tee ls.txt | grep zip
bunzip2
bzip2
....