2015年8月29日 星期六

Linux 第四章

重新導向輸出到檔案或程式

代碼0 stdin(標準輸入)      
代碼1 stdout(標準輸出)
代碼2 stderr(標準錯誤輸出)

用法            解釋
>file            重新導向stdout到檔案
>>file          重新導向stdout到檔案,並在當前檔案上增加內容
2>file          重新導向stderr到檔案
2>/dev/null 將stderr錯誤資訊重新導向到/dev/null,/dev/null可以吃掉任何導向這個裝                                       置的資訊!!
&>file          結合stderr and stdout 到同一個檔案
>>file 2>&   結合stdout and stderr增加到當下的檔案內容


Pipelines  管線指令(from鳥哥)

 其實這個管線命令『 | 』僅能處理經由前面一個指令傳來的正確資訊,也就是 standard output 的資訊,對於 stdandard error 並沒有直接處理的能力。那麼整體的管線命令可以使用下圖表示:
線命令的處理示意圖
圖10.6.1、管線命令的處理示意圖

在每個管線後面接的第一個資料必定是『指令』喔!而且這個指令必須要能夠接受 standard input 的資料才行,這樣的指令才可以是為『管線命令』,例如 less, more, head, tail 等都是可以接受 standard input 的管線命令啦。至於例如 ls, cp, mv 等就不是管線命令了!因為 ls, cp, mv 並不會接受來自 stdin 的資料。 也就是說,管線命令主要有兩個比較需要注意的地方:

  • 管線命令僅會處理 standard output,對於 standard error output 會予以忽略
  • 管線命令必須要能夠接受來自前一個指令的資料成為 standard input 繼續處理才行。

tee(from鳥哥)

想個簡單的東西,我們由前一節知道 > 會將資料流整個傳送給檔案或裝置,因此我們除非去讀取該檔案或裝置, 否則就無法繼續利用這個資料流。萬一我想要將這個資料流的處理過程中將某段訊息存下來,應該怎麼做? 利用 tee 就可以囉~我們可以這樣簡單的看一下:

tee 的工作流程示意圖
圖10.6.2、tee 的工作流程示意圖
tee 會同時將資料流分送到檔案去與螢幕 (screen);而輸出到螢幕的,其實就是 stdout ,那就可以讓下個指令繼續處理喔!
[dmtsai@study ~]$ tee [-a] file
選項與參數:
-a  :以累加 (append) 的方式,將資料加入 file 當中!

[dmtsai@study ~]$ last | tee last.list | cut -d " " -f1
# 這個範例可以讓我們將 last 的輸出存一份到 last.list 檔案中;

[dmtsai@study ~]$ ls -l /home | tee ~/homefile | more
# 這個範例則是將 ls 的資料存一份到 ~/homefile ,同時螢幕也有輸出訊息!

[dmtsai@study ~]$ ls -l / | tee -a ~/homefile | more
# 要注意! tee 後接的檔案會被覆蓋,若加上 -a 這個選項則能將訊息累加。
tee 可以讓 standard output 轉存一份到檔案內並將同樣的資料繼續送到螢幕去處理! 這樣除了可以讓我們同時分析一份資料並記錄下來之外,還可以作為處理一份資料的中間暫存檔記錄之用! tee 這傢伙在很多選擇/填充的認證考試中很容易考呢!




從shell提示下編輯文字文件

#vim
按V可以切換命令模式到視覺模式,或切換回來命令模式
按I可以切換到編輯模式,按ESC可以切換回來命令模式
按Shift + :可以切換到延伸命令模式,按ENTER可以切換回命令模式


#gedit
這個應用程式似乎只能字圖形介面下使用呢!
跟記事本很像的工具,滿好用的

P.S.  再呼叫gedit之類的程式,可以再命令後面加上&,這樣可以使程式跑完後回到terminal
#gedit file_name &

沒有留言:

張貼留言