2014IT鐵人賽-10-重導向練習
今天一樣使用 EasyCloud 雲端簡單龍的帳戶, 那就登入 https://gemini.nchc.org.tw/ 來開始練習openSUSE 基礎指令吧.
今天練習重導向的練習, 來控制資訊的輸出入
筆記部份:
在Linux 裏面, 主要有三種輸出入的狀況,分別是:
標準輸入;代碼為 0 ;或稱為 stdin ; 使用的方式為 <
標準輸出:代碼為 1 ;或稱為 stdout;使用的方式為 1>
錯誤輸出:代碼為 2 ;或稱為 stderr; 使用的方式為 2>
在符號的使用上
> 輸出導向(新的會覆蓋舊的)
>> 以附加方式輸出導向(新的會附加舊的後面)
< 輸入導向
那該如何知道是成功的執行還是錯誤輸入呢?
這個時候可以去 echo $? ( Return value 回覆值, 一般來說正確為0, 不是0代表錯誤 )
開始練習吧
Lab: >
#cd /home/max
#ls /
#echo $? <$?為回覆值,通常0代表成功, 故ls / 為STDOUT>
#ls /123
#echo $? <$?為回覆值,通常0代表成功, 故ls /123 為STDERR>
#ls / > ls.txt <將ls / 的結果導向到ls.txt ">" 預設針對STDOUT >
#/bin/ls
#cat ls.txt <請觀察內容>
#ls /123 > ls.txt <ls /123 訊息為標準錯誤, 故無法導向到ls.txt>
#cat ls.txt <請觀察內容, 空白,因 ">" 新的內容會覆蓋舊的 >
#ls /123 2> ls.txt <將ls /123 的STDERR 導向到ls.txt, 2> 指定STDERR>
#cat ls.txt
Q: 若執行#ls / /123 會同時出現 STDOUT and STDERR
試問要如何將STDOUT and STDERR 導向 ls.txt?
Hint: 2>&1
Hint: 1>&2
Ans: 利用 & 合併資料流
#ls / /123 > ls.txt 2>&1
Lab: >> , <
#date
#date > df.txt <將date 結果導向df.txt>
#cat df.txt
#df -h > df.txt <將df -h結果導向df.txt,因使用">" 故新的會覆蓋舊的>
#cat df.txt
#date >> df.txt <使用附加的方式將date結果導向 df.txt >
#cat df.txt <使用 ">>" 新的訊息會附加在舊的後面 >
#mail root -s "disk free" < df.txt <以df.txt 為信件內容寫信給root,主旨為disk free >
#mail <收信,請按信件編號觀察,按 q 離開>
Fun with Day 10 ~