linux系統輸出重定向淺析

當初剛剛接觸Linux的時候,在定時腳本里面發現了一個比較特別的字段(>>/dev/null 2>&1 &),所以今天來看看這個是代表什麼意思?順便學習一些Linux的重定向知識。


在這裡會先來了解一些Linux的重定向的知識,在Linux裡面,默認打開的文件描述符有三種,它們是標準輸入,標準輸出以及標準錯誤輸出。我們知道一個程序一般具備有輸入參數,同是有輸出參數,不過輸出參數有兩種類型,當程序執行正常的時候的輸出稱為正確輸出,而當程序出現異常的輸出則稱之為錯誤輸出。在Linux的shell裡面這三個的描述大概如下圖:

linux系統輸出重定向淺析

輸入輸出


下面我們先看運行一個腳本的執行情況,如下圖:

linux系統輸出重定向淺析

std

這裡,我們看到當程序執行正常的時候輸出是對的,而當腳本錯誤的時候會輸出相對應的提示。假設這個是一個任務或許某個組件的二進制,執行的時候要將輸出日誌都放在一個文件裡面,那應該怎麼做呢?這時我們就需要用到重定向的功能了,這裡需要了解的一個地方是使用的符號,當使用一個大於號的時候,表示覆蓋原來文件的裡面原有的舊的日誌,而使用兩個大於號的時候表示在原有的舊的日誌上進行追加。如下:

linux系統輸出重定向淺析

std2

在這裡,我們可以清楚地看到,使用兩個大於號的時候沒有覆蓋原有的日誌,我們看log的文件的時候應該還要看到一點,那就是錯誤的輸出沒有重定向到日誌文件裡面,而是直接輸出到前臺,那我們怎麼才能將錯誤的輸出也重定向到文件裡面呢?這時就需要將錯誤的輸出先重定向給標準輸出,然後一起重定向到日誌文件裡面,如下:

linux系統輸出重定向淺析

std3

這時,我們應該知道基本剛剛開始提的那個問題的答案了吧,不過還有一個&是什麼意思呢,這個就是表示讓程序在後臺運行的意思,所以現在來看看(>>/dev/null 2>&1 &)這個代表的是什麼意思吧,首先將錯誤輸出重定向給標準輸出,然後將輸出重定向給/dev/null這個文件,/dev/null這個文件也是蠻有意思的,我們一般稱為空文件,而由於我們無論放什麼東西,其實裡面都不存在的,所以大家有時候稱它為黑洞。最後就是讓程序在後臺運行。


好了,本篇內容到此結束。

May you share freely, never taking more than you give.



分享到:


相關文章: