为什么犯规sudo /dev/null > /var/log/syslog和sudo > /var/log/syslog工作,而sudo rm /var/log/syslog工作?
emv*_*idi 52
truncate -s 0 /var/log/syslog
18.04 为我工作。从这里得到它:
https://ubuntuforums.org/showthread.php?t=2191156
Ell*_*sch 19
有两个主要问题。
一个问题是它/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's -coption:来做到这一点sh -c 'cat /dev/null > /var/log/syslog'。
现在你把所有东西都作为一个命令,你可以sudo运行整个事情:
sudo sh -c 'cat /dev/null > /var/log/syslog'
Run Code Online (Sandbox Code Playgroud)
ter*_*don 12
您正在考虑的命令可能是
> /var/log/syslog
Run Code Online (Sandbox Code Playgroud)
不需要其他任何东西。在 bash 和其他 shell 中,>将立即截断文件,清空它。但是,当您运行此命令时:
sudo /dev/null > /var/log/syslog
Run Code Online (Sandbox Code Playgroud)
系统正在尝试/dev/null作为命令运行,您将收到此错误:
sudo: /dev/null: command not found
Run Code Online (Sandbox Code Playgroud)
但是请注意,尽管如此,/var/log/syslog 实际上已被清空,因为正如我上面所说的,>就足够了,不需要任何命令。