天天看點

sudo 與輸出重定向

本文介紹如何使用 sudo 将輸出重定向到目前使用者沒有權限的檔案。

注意:本文中 demo 的示範環境為 ubuntu 18.04。

如果目前使用者沒有某個檔案的寫權限,又要通過輸出重定向往該檔案中寫入内容。結果隻能是 "Permission denied"。比如目前使用者為 nick,下面的指令視圖查詢 /root 目錄下的檔案并把結果寫入到 /root/test.txt 檔案中(注意:使用者 nick 沒有對 /root/test.txt 檔案的寫權限):

sudo 與輸出重定向

sudo ls -al /root > /root/test.txt 指令不工作的原因是:

雖然 ls 指令是以 sudo 方式執行的,但是輸出重定向操作是由目前 shell 執行的,它(目前 shell)沒有 /root/test.txt 檔案的權限,是以最終失敗。

搞清楚了原因,就可以通過不同的方式來解決這個問題了,下面介紹四種方式。

既然是 shell 程序沒有權限,那就用 sudo 的方式執行 shell:

sudo 與輸出重定向

把下面的代碼儲存到腳本檔案 test.sh 中:

然後通過下面的方式執行:

sudo 與輸出重定向

如果覺着建立腳本麻煩的話還可以使用變通的方式:

或者是下面的寫法:

先通過 sudo -s 指令切換到 root 使用者再執行指令,最後 ctrl + d 退出:

sudo 與輸出重定向

Tee 指令用于将資料重定向到檔案,另一方面還可以提供一份重定向資料的副本作為後續指令的 stdin。簡單的說就是把資料重定向到給定檔案和螢幕上(下圖來自網際網路):

sudo 與輸出重定向

下面的指令中通過 sudo tee 把 ls 指令的輸出寫入檔案:

其中的 > /dev/null 阻止 tee 把内容輸出到終端:

sudo 與輸出重定向

參考:

linux – 如何使用sudo将輸出重定向到一個我沒有權限寫入的位置?

作者:sparkdev

出處:http://www.cnblogs.com/sparkdev/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

繼續閱讀