我无法清除系统日志,但我可以删除它吗?

为什么 sudo /dev/null > /var/log/syslogsudo > /var/log/syslog 不起作用,而 sudo rm /var/log/syslog 起作用?!
6个回答


3适用于树莓派 - 3kstc

有两个主要问题。
一个问题是/dev/null不是一个命令,所以运行sudo /dev/null是无法成功的。你需要sudo [一个命令]。在这种情况下,你可能想要sudo cat /dev/null
另一个问题是>将事物分成左边的完整命令和右边的文件,所以左边的完整命令是sudo cat /dev/null,而sudo的工作在运行cat /dev/null后就完成了。
这意味着>是以你的用户身份运行的,而不是在sudo下运行。你的用户没有写入/var/log/syslog的权限,所以这将失败。
你需要一种方法在sudo下运行整个命令行cat /dev/null > /var/log/syslog。嗯,>不是一个命令或其他什么东西。它是shell处理的内容,所以你需要让shell正确处理重定向符号。你可以使用sh的-c选项来实现: sh -c 'cat /dev/null > /var/log/syslog'
现在,你已经将所有内容组合成一个命令,你可以让sudo运行整个命令:
sudo sh -c 'cat /dev/null > /var/log/syslog'

不需要任何命令,只需使用>符号即可。原帖的作者遇到了一个错误,但是他截断了目标文件,请参考我的回答。 - terdon
同意。除了"sudo允许授权用户以超级用户或其他用户的身份执行命令,根据安全策略指定。" - Elliott Frisch
正确,但不相关。无论是否使用 sudo,OP 都会收到相同的错误,这是来自于 bash,而不是 sudo - terdon
第一个命令对我来说使用了root登录。 - We are Borg

你可能在想的命令是
> /var/log/syslog

不需要其他东西。 在bash和其他shell中,>会立即截断文件,将其清空。 但是,当您运行此命令时:

sudo /dev/null > /var/log/syslog

系统正在尝试将/dev/null作为命令运行,您将会收到以下错误信息:
sudo: /dev/null: command not found

请注意,尽管如此,/var/log/syslog实际上已经被清空了,因为正如我之前所说的那样,>就足够了,不需要任何命令。

不行,我使用"> /var/log/syslog"时出现了权限错误。就像之前提到的那样,使用sudo也不起作用。 - Thomas Covenant
@ThomasCovenant 抱歉,但我不知道你在运行什么。如果你运行的是 sudo > /etc/syslog,那当然会出现权限错误。> 不是以 root 用户身份运行的,它不是 sudo 的一部分。如果你运行 sudo -i 来获取 root shell,然后再运行 > /etc/syslog,它就会起作用。> 不是一个命令,所以在它前面加上 sudo 不会有影响。 - terdon
啊,是的,它可以使用sudo -i命令运行。 - Thomas Covenant

截断:截断过程基本上会删除文件的所有内容。它不会删除文件本身,而是将其保留在磁盘上作为一个零字节文件。
清除Syslog的所有内容:
sudo truncate -s 0 /var/log/syslog

另一种方法是这样做
sudo tee </dev/null /var/log/syslog 

或者如果你喜欢一个毫无用处的
cat /dev/null | sudo tee /var/log/syslog

昨天我注意到在我的22.04 (jammy) 6.2.0-34-generic中有一个14GB的syslog文件,然后我就来到这里了。我找到了一个不同于man页面的解决方案,并且它起作用了。所以我想与那些在Ubuntu的最新版本中遇到相同问题(不是问题,而是偏好)的人分享一下。
我刚刚编辑了/etc/logrotate.conf文件,调整了几行。将"weekly"改为仅保留2周的日志,将"size 3G"限制在3GB以下,并添加了"compress"选项。
# /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

结果是syslog文件被分成了几个多个syslog文件,每个文件大小不超过40MB,现在总共约为80MB(具体大小取决于机器的日志记录历史)。