Sudo Echo 重定向无权限解决方案
编辑
30
2024-05-13
Sudo Echo 重定向无权限解决方案
2024年5月13日
摘要
在 Linux 中,echo
命令常和重定向指令搭配用于将文本输入至文件,然而在输入至系统文件时,我们必须调用 sudo
来执行,此时就会报错。本文将会介绍此问题的原因和解决方案。
问题
举个例子,假如 ~/temp.txt
是一个当前用户所有的文件,则:
echo "Some Text to Save." >> ~/temp.txt
可以将 Some Text to Save.
存入 ~/temp.txt
。
假如 /etc/temp.txt
是一个系统文件,或是 root
所有的文件,我们理所应当的加上 sudo
执行命令:
sudo echo "Some Text to Save." >> /etc/temp.txt
然而此时,即使加上了 sudo
,我们依然会得到一个 Permission Denied
的报错。
原因
在 Shell 中,重定向指令是 Shell 负责执行的,格式为 [COMMAND] [REDIRECTION]
,因此,sudo
其实是属于 [COMMAND]
这个部分,输出结果才会递交给 Shell,此时 Shell 才会将输出重定向至指定位置。
由于 Shell 本身是当前用户打开的,因此其重定向过程中所能获得的权限还是从当前用户继承,无法输出至自己并没有所有权的文件。
解决方案
一般情况下,有两种常见的解决方案。
使用 tee
命令
tee
命令可以将输入的内容复制成两份,一份输出给指定文件,一份输出给 STDOUT
,因此,我们可以使用以下命令完成:
echo "Some Text to Save." | sudo tee -a /etc/temp.txt > /dev/null
此处,-a
选项是为了使用 append 模式,否则此文件会被清空覆盖。> /dev/null
是为了将 tee
命令的标准输出隐藏,否则 Console 中还会显示一遍此字符串。
使用子 Shell
我们可以使用 sudo
唤起一个 root
权限的 Shell 来执行原本的命令:
sudo zsh -c 'echo "Some Text to Save." >> /etc/temp.txt'
- 0
-
赞助
微信
支付宝
-
分享