Linux执行sudo echo xxx >> 命令提示权限不够的问题

问题:
想要将文本追加到root用户的文件a.txt里,于是使用sudo echo xxx >> a.txt命令,结果出现了权限不够的问题。

sudo echo aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa >> a.txt
bash: a.txt: 权限不够

原因:
出现此问题的原因是文件a.txt是root用户所有,普通用户无写权限

ls -l a.txt
-rw-r--r-- 1 root root 4 1120 17:07 a.txt

sudo命令只让echo命令有root权限,而重定向命令>>不具有该权限,或者说root权限没有“传递”到重定向命令>>,因此也就无法将输出文本重定向到root用户的文件a.txt。
解决办法:
方法一:
使用bash -c命令。该命令可以让bash运行整条字符串命令,前加sudo使得整条命令运行时具有root权限

sudo bash -c 'echo xx >> a.txt'

方法二:
使用tee命令。该命令可以将管道中内容写入文件,只需要对该命令赋予root权限就可以操作a.txt文件

echo xx |sudo tee -a a.txt >/dev/null

注意:tee命令的-a选项是追加的意思,如果不加此选项,输出文本将覆盖文件。
方法三:
如果你可以切换到root用户,直接用root用户的身份运行命令就可以了

su
echo xx >> a.txt

root用户使用chmod增加权限也是可以

sudo chmod a+w a.txt
echo echo xx >> a.txt

另外使用sudo并非所有的命令root权限不可传递,比如下面的命令

sudo nohup apt-get update

而apt-get命令就获得了root权限而正常执行

sudo nohup apt-get update
nohup: 忽略输入并把输出追加到"nohup.out"
cat nohup.out |tail -n 10
已下载 10 MB,耗时 10(3072 KB/S)
正在读取软件包列表... 完成
  • 11
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百口可乐__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值