当我尝试使用sudo将文件中的数据附加到另一个文件时,这是导致“权限被拒绝”的shell命令:
sudo cat add_file >> /etc/file
/etc/file 的文件归 root (即我)所有,其权限为 rw-r--r-- . 我是否应该暂时成为 root 才能使其正常工作或 sudo 是否有解决方法?
/etc/file
root
rw-r--r--
sudo
运行 bash 为 sudo :
bash
$ sudo bash -c "cat add_file >> /etc/file" $ whoami;sudo bash -c "whoami";whoami iiSeymour root iiSeymour
尝试这样做:
sudo tee -a /etc/file < add_file
它比运行bash或 sh -c command 轻
sh -c command
一个有趣的可能性是使用 ed (标准编辑器):
ed
sudo ed -s /etc/file <<< $'r add_file\nwq'
我知道我不会因为这个美妙的答案而被投票,但我想把它包含在这里(因为它很有趣) . 完成!
您正在尝试将命令 sudo cat add_file 的结果写入文件/ etc / file . 显然你没有这个权利 .
sudo cat add_file
man sudo 给出了这个例子:
man sudo
在/ home分区中创建目录的用法列表 . 注意这会在子shell中运行命令来生成cd和文件重定向工作 .
$ sudo sh -c“cd / home; du -s * | sort -rn> USAGE”
所以你应该尝试:
sudo sh -c "cat add_file >> /etc/file"
类似的方法@gniourf_gniourf回答,但使用 ex :
ex
sudo ex +"r in.txt" -cwq out.txt
这相当于 vi / vim Ex-mode( -e ) .
vi
vim
-e
这个就地编辑示例是简单,安全和方便的方法,因为它不在shell解决方法中使用任何shell管道,FIFO或shell .
要提高脚本编写性能,请考虑使用静默模式( -s ) .
-s
尝试
sudo bash -c 'cat add_file >> /etc/file'
要么
cat add_file | sudo tee -a /etc/file > /dev/null
6 回答
运行
bash
为sudo
:尝试这样做:
它比运行bash或
sh -c command
轻一个有趣的可能性是使用
ed
(标准编辑器):我知道我不会因为这个美妙的答案而被投票,但我想把它包含在这里(因为它很有趣) . 完成!
您正在尝试将命令
sudo cat add_file
的结果写入文件/ etc / file . 显然你没有这个权利 .man sudo
给出了这个例子:$ sudo sh -c“cd / home; du -s * | sort -rn> USAGE”
所以你应该尝试:
sudo sh -c "cat add_file >> /etc/file"
类似的方法@gniourf_gniourf回答,但使用
ex
:这相当于
vi
/vim
Ex-mode(-e
) .这个就地编辑示例是简单,安全和方便的方法,因为它不在shell解决方法中使用任何shell管道,FIFO或shell .
要提高脚本编写性能,请考虑使用静默模式(
-s
) .尝试
要么