<a href="https://stackoverflow.com/questions/6207951/bash-wrong-pipe-output-when-using-sudo-sh-c" target="_blank">https://stackoverflow.com/questions/6207951/bash-wrong-pipe-output-when-using-sudo-sh-c</a>
避免’sudo echo x >’ 時’Permission denied’
甲: 示例
sudo echo a > 1.txt
-bash: 1.txt: Permission denied
乙: 分析:
bash 拒絕這麼做,說是權限不夠.
這是因為重定向符号 “>” 也是 bash 的指令。sudo 隻是讓 echo 指令具有了 root 權限,
但是沒有讓 “>” 指令也具有root 權限,是以 bash 會認為這個指令沒有寫入資訊的權限。
丙: 解決辦法。三種:
1. 利用 “sh -c” 指令,它可以讓 bash 将一個字串作為完整的指令來執行,這樣就可以将 sudo 的影響範圍擴充到整條指令。
具體用法如下:
sudo sh -c "echo a > 1.txt"
利用bash -c 也是一樣的,現在bash shell 流行。
2. 利用管道和 tee 指令,該指令可以從标準輸入中讀入資訊并将其寫入标準輸出或檔案中,
echo a |sudo tee 1.txt
echo a |sudo tee -a 1.txt // -a 是追加的意思,等同于 >>
tee 指令很好用,它從管道接受資訊,一邊向螢幕輸出,一邊向檔案寫入。
linux 總是有一些小工具為我們考慮的很貼切!
3. 提升shell 權限。
sudo -s //提到root 權限。提示符為#
當你覺得該退回到普通權限時,
sudo su username //退回到username 權限,提示符為$
exit 退出目前使用者,回到上一層目錄.
centos 提升權限: su -
ubuntu 提升權限: sudu -s, sudo su
本文轉自Tenderrain 51CTO部落格,原文連結:http://blog.51cto.com/tenderrain/1979402,如需轉載請自行聯系原作者