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
命令的作用就等同于 > 命令。