为什么
sudo /dev/null > /var/log/syslog
和 sudo > /var/log/syslog
不起作用,而 sudo rm /var/log/syslog
起作用?!sudo /dev/null > /var/log/syslog
和 sudo > /var/log/syslog
不起作用,而 sudo rm /var/log/syslog
起作用?!/dev/null
不是一个命令,所以运行sudo /dev/null
是无法成功的。你需要sudo [一个命令]
。在这种情况下,你可能想要sudo cat /dev/null
。>
将事物分成左边的完整命令和右边的文件,所以左边的完整命令是sudo cat /dev/null
,而sudo
的工作在运行cat /dev/null
后就完成了。>
是以你的用户身份运行的,而不是在sudo
下运行。你的用户没有写入/var/log/syslog
的权限,所以这将失败。cat /dev/null > /var/log/syslog
。嗯,>
不是一个命令或其他什么东西。它是shell处理的内容,所以你需要让shell正确处理重定向符号。你可以使用sh的-c选项来实现: sh -c 'cat /dev/null > /var/log/syslog'
。sudo sh -c 'cat /dev/null > /var/log/syslog'
>
符号即可。原帖的作者遇到了一个错误,但是他截断了目标文件,请参考我的回答。 - terdonsudo
,OP 都会收到相同的错误,这是来自于 bash
,而不是 sudo
。 - terdon> /var/log/syslog
不需要其他东西。 在bash和其他shell中,>
会立即截断文件,将其清空。 但是,当您运行此命令时:
sudo /dev/null > /var/log/syslog
/dev/null
作为命令运行,您将会收到以下错误信息:sudo: /dev/null: command not found
/var/log/syslog
实际上已经被清空了,因为正如我之前所说的那样,>
就足够了,不需要任何命令。sudo > /etc/syslog
,那当然会出现权限错误。>
不是以 root 用户身份运行的,它不是 sudo 的一部分。如果你运行 sudo -i
来获取 root shell,然后再运行 > /etc/syslog
,它就会起作用。>
不是一个命令,所以在它前面加上 sudo
不会有影响。 - terdonsudo tee </dev/null /var/log/syslog
猫
:cat /dev/null | sudo tee /var/log/syslog
# /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 2
# uncomment this if you want your log files compressed
compress
# size
size 3G