在Linux或者Unix上使用sudo命令时如何将文本追加到文件
时间:2020-01-09 10:43:47 来源:igfitidea点击:
我正在尝试使用sudo echo'192.168.1.254 router'>>/etc/hosts
将条目添加到/etc/hosts文件,但是得到一个读为-bash:/etc/hosts:权限被拒绝
的错误。
在Linux或者类似Unix的系统上运行sudo命令时,如何在文件中插入或者添加文本?
在Linux或者Unix上使用sudo命令时,有多种方法可以将文本或者数据追加到文件中。
您可以使用将输入选择为标准输出的tee命令。
另一种选择是将shell本身传递给sudo命令。
该页面包括在sudo和tee命令的帮助下追加到特权文件的示例。
如何在Linux或者类Unix系统上使用sudo将文本追加/插入文件?
让我们看看两种方法。
方法1:使用tee命令
tee命令从标准输入(例如键盘)读取并写入标准输出(例如屏幕)和文件。
语法为:
echo 'text' | sudo tee -a /path/to/file echo '192.168.1.254 router' | sudo tee -a /etc/hosts
输出示例:
Password: 192.168.1.254 router
该解决方案很简单,您避免以root特权运行bash/sh shell。
仅追加或者写入部分需要root权限。
Bash:使用sudo和tee追加到文件
是否想在使用sudo时将文本追加到多个文件中?
尝试:
echo 'data' | sudo tee -a file1 file2 fil3
使用cat命令验证您刚刚以sudo身份追加到文件:
cat file1 cat file2
我们可以使用sudo追加到文件:
cat my_file.txt | sudo tee -a existing_file.txt > /dev/null
追加文本时,将tee输出重定向到/dev/null是一个好主意。
换句话说,当您不希望tee命令写入标准输出(例如screen)时,请使用>/dev/null
。
了解tee命令选项
-a
或者--append
:追加到给定的文件,请勿覆盖- -i或者--ignore-interrupts:忽略中断信号
- -p:诊断写入非管道的错误
通过执行以下man命令来查看tee命令手册页
man tee
方法2:使用bash/sh shell
语法为:
sudo sh -c 'echo text >> /path/to/file' sudo -- sh -c "echo 'text foo bar' >> /path/to/file" sudo -- bash -c 'echo data >> /path/to/file' sudo bash -c 'echo data text >> /path/to/file'
例如:
sudo sh -c 'echo "192.168.1.254 router" >> /etc/hosts'
您正在以root特权运行bash/sh shell,并且重定向在该shell会话中进行。
但是,引用复杂命令可能会成为问题。
因此,建议所有人使用tee方法。