sudo tee 重定向与权限
你将会收到错误消息bash: /root/file.txt: Permission denied是因为重定向在调用sudo命令之前发生
udo命令允许您以其他用户身份运行命令与程序,默认是root用户。如果您是个命令行用户,那么sudo是您将经常使用的命令之一。
使用sudo而不是以root用户身份登录会更安全,因为您可以为单个用户授予有限的管理权限,而无需让他们知道root用户密码。
sudo命令已预先安装在大多数Linux发行版中。要检查系统是否安装sudo命令,请使用快捷键ctrl+alt+t打开终端台,键入sudo,然后按Enter。
如果您的系统已安装sudo,系统将显示一条简短的帮助消息,否则您将看到类似sudo command not found的信息。
如果你未安装sudo,则可以使用发行版的软件包管理器安装它,例如apt命令或者yum命令安装sudo。
如果你的计算机运行的是基于Debian的Linux发行版,例如Ubuntu,Linux mint,则可以运行命令sudo apt install sudo安装sudo。
如果你的计算机运行的是基于RedHat的Linux发行版,例如CentOS,Fedora,则可以运行命令yum install sudo安装sudo。
apt install sudo #for ubuntu and debian
yum install sudo #for CentOS and RedHatsudo命令选项
sudo命令的基本语法是sudo OPTION.. COMMAND。sudo命令有用于控制其行为的选项,但通常sudo都是以其最基本的形式使用,没有任何选项。
其中COMMAND是您要运行的命令。sudo将读取/etc/sudoers文件,并检查用户是否授予sudo的访问权限。
在第一次使用sudo时,系统会提示您输入当前用户密码,并且该命令将以root用户执行。
例如,要列出/root目录中的所有文件,请运行命令sudo ls /root。
sudo ls /root[sudo] password for myfreax:
.  ..  .bashrc	.cache	.config  .local  .profilesudo 重定向
如果您尝试将sudo命令的输出重定向到用户没有写权限的文件,则会收到权限拒绝的错误消息permission denied。
例如命令sudo echo "test" > /root/file.txt使用echo和重定向操作符> ,将标准输出重定向到/root/file.txt文件。
你将会收到错误消息bash: /root/file.txt: Permission denied。之所以会这样,是因为标准输出的重定向>是以您登录的用户而不是sudo指定的用户运行。
重定向在调用sudo命令之前发生。一种解决方案是使用sudo sh -c以root用户创建子shell进程运行命令。
另一种解决方是将普通用户的标准输出通过管道传递给到tee命令。
sudo echo "test" > /root/file.txtbash: /root/file.txt: Permission deniedsudo sh -c 'echo "test" > /root/file.txt'
echo "test" | sudo tee /root/file.txt结论
至此,你已经理解如何解决sudo与重定向的权限拒绝的问题,如果您有任何疑问,请随时发表评论。