Linux Permission denied 問題


Linux Permission denied 問題

來源  https://www.cnblogs.com/sparkdev/p/10287164.html

 

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

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

Permission denied 的原因

sudo ls -al /root > /root/test.txt 命令不工作的原因是:
雖然 ls 命令是以 sudo 方式執行的,但是輸出重定向操作是由當前 shell 執行的,它(當前 shell)沒有 /root/test.txt 文件的權限,所以最終失敗。

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

以 sudo 方式運行 shell

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

$ sudo bash -c 'ls -al /root > /root/test.txt'

把命令寫入腳本,以 sudo 方式執行腳本

把下面的代碼保存到腳本文件 test.sh 中:

#!/bin/bash
ls -al /root > /root/test.txt

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

$ chmod +x test.sh
$ sudo ./test.sh

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

$ sudo bash <<EOF
> ls -al /root > /root/test.txt
> EOF

或者是下面的寫法:

$ echo 'ls -al /root > /root/test.txt' | sudo bash

先通過 sudo -s 啟動 shell,然后執行命令

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

通過 sudo tee 命令實現

Tee 命令用於將數據重定向到文件,另一方面還可以提供一份重定向數據的副本作為后續命令的 stdin。簡單的說就是把數據重定向到給定文件和屏幕上(下圖來自互聯網):

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

$ sudo ls -al /root | sudo tee /root/test.txt > /dev/null

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

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

 

====================== End

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM