linux I/O重定向

標準輸入(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 
    ....

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章