sudo 與輸出重定向

2022-01-12 23:01:17 字數 1866 閱讀 3690

本文介紹如何使用 sudo 將輸出重定向到當前使用者沒有許可權的檔案。

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

如果當前使用者沒有某個檔案的寫許可權,又要通過輸出重定向往該檔案中寫入內容。結果只能是 "permission denied"。比如當前使用者為 nick,下面的命令檢視查詢 /root 目錄下的檔案並把結果寫入到 /root/test.txt 檔案中(注意:使用者 nick 沒有對 /root/test.txt 檔案的寫許可權):

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

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

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

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

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

如果覺著建立指令碼麻煩的話還可以使用變通的方式:

$ sudo bash <

> ls -al /root > /root/test.txt

> eof

或者是下面的寫法:

$ echo

'ls -al /root > /root/test.txt

' | sudo bash

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

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

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

$ sudo

ls -al /root | sudo

tee /root/test.txt > /dev/null

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

參考:

linux – 如何使用sudo將輸出重定向到乙個我沒有許可權寫入的位置?

輸入重定向,正確輸出重定向,錯誤輸出重定向

一 標準輸入 stdin a.輸入重定向 標準輸入 作用 將原先鍵盤輸入的內容改由檔案內容代替 root wenwen cat test.txt asdas asdas asdas 按crtl d 退出 將network內容匯入到test.txt中去 root wenwen cat test.txt...

流與輸出重定向

流就是讀一點資料,處理一點點資料 和 符號只是將標準輸出重定向到檔案,並不能將標準錯誤輸出重定向到檔案。那麼我們要重定向標準錯誤輸出,該怎麼辦呢?我們就要用到 2 這個符號。是的,就是在 這個符號左邊緊挨著寫乙個 2。為什麼是 2 呢?標準錯誤輸出的檔案描述符是 2,所以這裡的 2 表示標準錯誤輸出...

Linux重定向(輸入輸出重定向)

我們知道,linux 中標準的輸入裝置預設指的是鍵盤,標準的輸出裝置預設指的是顯示器。而本節所要介紹的輸入 輸出重定向,完全可以從字面意思去理解,也就是 通常是用檔案或命令的執行結果來代替鍵盤作為新的輸入裝置,而新的輸出裝置通常指的就是檔案。對於輸入重定向來說,其需要用到的符號以及作用如表 1 所示...