删除所有的/ var / log吗?


26

我可以删除其中的所有内容/var/log吗?还是应该只(递归地)删除文件/var/log夹中的文件而保留文件夹?

有人有一个好的rm命令行吗?(我的管理技能使我感到紧张。)

注意:我正在使用Debian。我不确定是哪个版本。


3
删除日志文件是一个坏主意(您还需要找到每个运行的进程,该进程都有自己的日志文件,然后“杀死-HUP”,这是软重启,将导致程序重新创建任何必要的日志文件)。我强烈建议您不要删除日志文件,而是依靠logrotate之类的实用程序来自动为您管理/ var / log的内容(它确实类似于HUP进程),如果我想从另一个角度解决这个问题。您要解决什么问题导致您考虑这个问题?
Twirrim

Answers:


22

而不是删除文件,您应该旋转文件,例如使用logrotate

您永远都不知道从何时开始真正需要日志,因此最好将它们归档(最长期限是合理的,例如3个月)。

logrotate 可以压缩您的旧日志文件,以便它们不占用大量磁盘空间。


3
logrotate也可以删除最早的文件。
凯文M

8
好吧,恕我直言,删除所有日志在某些情况下可能很合理。例如,我想构建一个Virtial Machine映像以用于新的部署。不用说,我希望它是一个真正干净的系统,不保存任何日志,历史记录,缓存等。
伊万(Ivan)

2
抱歉,考古学只看了三个月的日志文件。如果您收集日志以发现问题,请快速评估它们。
countermode

4
@countermode您永远不会怀旧吗?就像查看3个月大的日志文件来思考好时光一样?
Broco

好的,我看到了命令。如何使用它?logrotate的人说在cron中使用它。我想使用-f选项吗?
SDsolar '17

17

如果删除/ var / log中的所有内容,则极有可能在很短的时间内收到大量错误消息,因为其中存在预期存在的文件夹(例如exim4,apache2,apt,cups,mysql,samba和更多)。另外:如果不存在某些服务或应用程序,则不会创建其日志文件。他们希望至少存在一个空文件。因此,您问题的直接答案实际上是“不要这样做!!!”

正如joschi指出的那样,没有理由这样做。我运行的Debian服务器多年来没有删除任何日志文件。


我没有意识到。很高兴知道。+1 +更改了我的接受。

1
我刚刚做到了。希望!我早些时候读过这个答案
VarunAgw 2015年

有充分的理由删除日志文件,恕我直言。例如,您要导出供他人使用的虚拟机,但您不希望虚拟机映像包含导出前发生的所有事情的详细信息。
a3nm

15

删除所有文件:

find /var/log -type f -delete

删除所有.gz和旋转文件

find /var/log -type f -regex ".*\.gz$"
find /var/log -type f -regex ".*\.[0-9]$"

尝试运行不带“ -delete”的命令来进行测试。


我发现在打包之前清除Vagrant框的日志文件很有用。
鲁道夫·瓦夫鲁奇

10

我正在从主机克隆虚拟机。清除主服务器上的日志非常有道理,这样当您启动克隆时,您将不会获得主服务器的日志。我在tcsh中做了:

cd /var/log
foreach ii ( `find . -type f` )
foreach? cp /dev/null $ii
foreach? end

清除日志,但保留文件。


这应该限于您所描述的用例。
斯文

4
在bash中:找到/ var / log / -type f -exec cp / dev / null {} \;
杰拉德

7

不删除文件的情况下清除 Linux系统上的所有日志:

for CLEAN in $(find /var/log/ -type f)
do
    cp /dev/null  $CLEAN
done

Samba(/var/www/samba)使用IP地址创建日志文件名,您可能希望删除它们:

for CLEAN in $(find /var/log/samba -type f)
do
    rm -rf $CLEAN
done

2
有用的脚本。
Anmol Singh Jaggi

您可以cp /dev/null $CLEAN通过交换> $CLEAN
ThoriumBR

2

您可以使用选项ctime查找旧文件...例如:

find -ctime +30

正如bindbn所解释的,首先尝试查找获取文件,然后使用选项delete:D


2

/var/log通常具有的权限drwxrwxr-x,因此用户不可写,除非该用户是root用户或属于特权组。这意味着非特权用户无法创建新的日志文件。

期望登录到某个位置的应用程序通常会在安装期间/var/log使文件接触到/var/log层次结构中的某个位置(通常以提升的特权出现),并且在那时chmod可能(并且有可能)chown获得适合将要成为非特权用户的权限的文件。使用该应用程序。

例如,Apache日志通常由写入nobody,该用户是具有尽可能少的特权的用户,以便Apache能够完成其工作而不会给系统带来不必要的风险。但是,甚至更普通的应用程序通常也希望能够写入中的日志文件/var/log

那么,如果日志文件和日志文件的路径不存在怎么办?这完全取决于应用程序。一些应用程序将悄悄地跳过日志记录。其他人会发出很多警告。其他人则可以纾困。没有硬性规定。这取决于应用程序开发人员的警惕性以及开发人员认为其日志记录功能的重要性。充其量,该应用程序将尝试写入或可能创建一个日志文件,然后写入内的目标位置/var/log,并且会发现自己无法执行此操作,因为该文件正在由没有特权写入的用户运行文件系统的那部分。

因此,简短的答案是“否”,不要删除其中的所有内容/var/log-它破坏了具有足够特权的合同用户,使其无法在其系统上运行的应用程序执行此类操作,并且会引起噪音,某些日志静默失败以及一些全面的破坏。

要采取的适当措施是logrotate使用适当的配置文件进行设置。通常,旋转将与cron作业相关联。旋转可以基于间隔或基于大小,或两者兼而有之。如果间隔到期时日志文件仍然为空,则甚至可以设置规则以避免基于间隔的轮换。轮换可以包括日志文件的邮寄,压缩,删除,粉碎等。

一般用户无需太担心日志轮换。开发人员可能希望确保他们使用的日志已建立轮换规则。实际上,对于软件将要创建和编写的任何特定于软件的日志,开发人员最好在安装时设置日志轮换的良好方式。


1

我在这里实现了一个简单的清洁器:

https://github.com/Lin-Buo-Ren/Coward-Unix-Log-Cleaner

它只是:

  • 删除具有以下logrotated文件名模式的文件名 /var/log
    • ^.*/.+\.[[:digit:]]+(\.[[:alpha:]]+)?$
    • ^.*/.+\.old$ (不区分大小写)
  • 使用以下日志文​​件名模式截断/清空文件名的文件 /var/log
    • ^.*/.+\.log$ (不区分大小写)

-2
function goodbyelogs {
find /var/log -type f
}

for i in return $(goodbyelogs);
do sudo cat /dev/null > $i;
echo "Log $i has been cleared";
done

制作一个可执行脚本,如果sudo不为您工作,请尝试以root身份运行

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.