Linux重定向权限不够的解决方案
在使用 cat
或echo
等命令,将一些内容添加到root
权限的文件,比如/etc/hosts
时,系统会报出“权限不够”的错误。
原因分析
以向/etc/hosts
中添加一条记录为例,通常代码写为
1 | sudo echo "220.181.111.232 www.baidu.com" >> /etc/hosts |
此时,bash
拒绝这么做会提示权限不够,是因为重定向符号
>
和 >>
也是 bash
的命令。由于使用 sudo
只是让 echo
命令具有了
root
权限,但是没有让 >
和
>>
命令也具有 root
权限,所以
bash
会认为这两个命令都没有向/etc/hosts
写入信息的权限。
解决方法
使用命令sh -c
sh -c
命令,可以让 bash
将一个字串作为完整的命令来执行,这样就可以将 sudo
的影响范围扩展到整条命令。具体用法如下:
1 | sudo sh -c 'echo "220.181.111.232 www.baidu.com" >> /etc/hosts' |
使用命令tee
利用管道和 tee 命令,该命令可以从标准输入中读入信息并将其写入标准输出或文件中,具体用法如下:
1 | echo "220.181.111.232 www.baidu.com" | sudo tee -a /etc/hosts |
注意: tee
命令的 -a
选项的作用等同于
>>
命令。如果去除该选项,那么 tee
命令的作用就等同于 >
命令。