Linux Command 入門(二)

了解 Command 的輸入與輸出方式,如何傳遞 Command 的結果給下個 Command,可以讓你真正感受到 Shell 的強大,廢話不多說就馬上開始吧!

Command 的 Input 和 Output

給 Command輸入的資料可以是 Standard Input 或者是參數, Command 執行完的結果是 Standard Output 或是Standard Error,Standard Output 和 Error 預設的輸出位置是 Terminal

Standard Input: 預設是鍵盤輸入

imgur
我們用 cat command 舉例,我們先查看 cat 指令的 man page
imgur
說明寫著,如果沒有給 file 參數的話,就會從 standard input 讀取

我們試試看只給 cat command 不給參數後,我們就可以打字用 input 給 cat
imgur

Rediretion

將 Standard Iput, Out, Error 的 data stream 轉向非 terminal 的地方

每個 data stream 都有其代表的數字

  • standard input: 0
  • standard output: 1
  • standard error: 2

Example

Standard Output 範例:
cat 1> output.txt 裡的 1 就代表 standard output, > 代表輸出的位置,也可以省略 1 cat > output.txt

如果你已經有 output.txt 檔了,Linux 會其清空檔案後再輸入,術語叫 truncation,如果你不想要原本檔案的資料被清空,則可以用 cat >> output.txt, >> 為 appending 的符號
Standard Error 範例: cat -k bla 2> error.txt
Standard Output 和 Error 都輸出: cat 1> output.txt 2>error.txt
Standard Input: 我們讀取一個檔案的資料當作 standard input, cat 0< inpput.txt 或是 cat < inpput.txt

練習: 利用 cat command 讀取某個檔案的內容後寫入 hello.txt
答案: cat < input.txt > hello.txt

Piping

利用 | 符號可以將 command 的 standard output 轉為下個 command 的 standard input,並且可以不斷接下去

語法: command1 [-options] [args] | command2 [-options] [args] | ...

Q: 如果我們現在希望將 date 指令的第一個欄位的值,該怎麼做呢?

利用 redirection:

  • date 指令的 output 存在 date.txt: date > date.txt
  • cut 指令讀取 date.txt 後再取第一個欄位: cut < date.txt -d " " -f 1

利用 Piping:

  • date 的 standard output 轉為 cut standard input 然後執行:
    date | cut -d " " -f 1

tee 指令

當我們希望指令的輸出可以同時產生檔案變為下個指令的輸入時,我們可以利用 tee 指令,
tee 指令就像多了一個出口的水管
imgur
Q: 如果我們想 date 將完整的日期寫入 full_date.txt 同時取得 date 輸出的第一個欄位,指令該怎麼寫?
A: date | tee full_date.txt | cut -d " " -f 1

xargs

某些指令不接受 standard input,只接受 command args, 像是 echo 指令,但我們可以使用 xargs 來接前面指令 piping 過來的 standard input 轉換成 command args,給 echo 指令當參數

ex: date | xargs echo

Linux | Understand Permissions Linux Command 入門(一)
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×