为什么sudo /dev/null > /var/log/syslog
和不起作用sudo > /var/log/syslog
,而 whilesudo rm /var/log/syslog
起作用?!
答案1
答案2
主要有两个问题。
一个问题是/dev/null
不是命令,因此sudo /dev/null
无法成功运行。您需要sudo [a command]
。在这种情况下,您可能需要sudo cat /dev/null
。
另一个问题是将>
内容分成左边的完整命令和右边的文件,因此完整命令左边是sudo cat /dev/null
,sudo
一旦运行,它的工作就完成了cat /dev/null
。
这意味着>
以您的用户身份运行,而不是sudo
。您的用户没有权限写入/var/log/syslog
,因此这将失败。
cat /dev/null > /var/log/syslog
您需要某种方式来运行下的整行sudo
。好吧,>
不是一个命令或任何东西。这是 shell 处理的东西,因此您需要让 shell 正确处理该重定向符号。您可以使用 的sh
选项来做到这一点-c
:sh -c 'cat /dev/null > /var/log/syslog'
。
现在您已将所有内容整合为一个命令,您可以sudo
运行整个命令:
sudo sh -c 'cat /dev/null > /var/log/syslog'
答案3
您正在考虑的命令可能是
> /var/log/syslog
无需其他操作。在 bash 和其他 shell 中,>
将立即截断文件,将其清空。但是,当您运行以下命令时:
sudo /dev/null > /var/log/syslog
系统正在尝试/dev/null
作为命令运行,您将收到此错误:
sudo: /dev/null: command not found
但请注意,尽管如此,/var/log/syslog
已被清空因为正如我上面所说,这就>
足够了,不需要任何命令。
答案4
另一种方法是
sudo tee </dev/null /var/log/syslog
或者如果你更喜欢无用地使用cat
:
cat /dev/null | sudo tee /var/log/syslog