Linux 零散知識點

Linux輸出重定向>和>>

> 是定向輸出到文件,如果文件不存在,就創建文件;如果文件存在,就將其清空;一般我們備份清理日誌文件的時候,就是這種方法:先備份日誌,再用>,將日誌文件清空(文件大小變成0字節);

>>是將輸出內容追加到目標文件中。如果文件不存在,就創建文件;如果文件存在,則將新的內容追加到那個文件的末尾,該文件中的原有內容不受影響。


Linux裏的2>&1
在Linux下經常會碰到nohup command>/dev/null 2>&1類似的命令

幾個基本符號及其含義

/dev/null 表示空設備文件
0 表示stdin標準輸入
1 表示stdout標準輸出
2 表示stderr標準錯誤

通過上面command > /dev/null等價於command 1 > /dev/null,那麼對於 2>&1也就好理解了,2就是標準錯誤,1是標準輸出,那麼這條命令不就是相當於把標準錯誤重定向到標準輸出麼。等等是&1而不是1,這裏&是什麼?這裏&相當於等效於標準輸出。這裏有點不好理解,先看下面。
command>a 2>a 與 command>a 2>&1的區別

通過上面的分析,對於command>a 2>&1這條命令,等價於command 1>a 2>&1可以理解爲執行command產生的標準輸入重定向到文件a中,標準錯誤也重定向到文件a中。那麼是否就說command 1>a 2>&1等價於command 1>a 2>a呢。其實不是,command 1>a 2>&1與command 1>a 2>a還是有區別的,區別就在於前者只打開一次文件a,後者會打開文件兩次,並導致stdout被stderr覆蓋。&1的含義就可以理解爲用標準輸出的引用,引用的就是重定向標準輸出產生打開的a。從IO效率上來講,command 1>a 2>&1比command 1>a 2>a的效率更高。

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