注:此文属于「不求甚解」的,只是记录「哟,这个能用」的命令😄

如何清空日志文件,听起来非常简单,其实也没那么简单(对小白来说)。

最最常见的,比如 nginx 生成的站点的日志文件,如错误日志 error.log,我们可以把这个文件直接删了,然后新建一个同名的,但是这样操作会有一段空隙,在已经删除了但是还没有新建之前,nginx 找不到日志文件了,它也不会自己新建一个,虽然不会影响到站点运行,但是这其实已经出错了,如果 nginx -t,就会发现它提示找不到 error.log

我们也可以编辑这个日志文件,把里面的内容全部删除,然后再保存一下。但是,这样明显很繁琐,而且如果日志文件很大,加载起来都有些困难。

上面说的,其实就是小白级别的,我们平时使用 Windows 系统时的思维。在 Linux 上这样操作时不对的。那么具体要怎么清空呢?用 ubuntu empty log file,或者 ubuntu truncate log file 搜索一下,就能找到答案了,当然换成其他发行版或者直接使用 linux 也同理。

下面写下我自己使用的,比较简单的,还有更复杂的,可以自行了解

> error.log

这个命令最简单,对于当前用户有操作权限的日志,使用这个命令就可以清空了。但如果是没有权限的,会报错,类似下面这样:

-bash: error.log: Permission denied

此时加上 sudo,就不对了,因为这个 > 号在 Linux 里是 Redirecting Standard Output (stdout) 的意思,是一个基本的 Linux 命令,如果前面加上 sudo,那么整条命令结构就变了,成了把执行 sudo 命令后的 stdout 保存到这个日志文件的意思了。而只单独运行一个 sudo 未加任何命令显然是不行的。

那么怎么办呢?可以用下面这条命令:

sudo bash -c '> error.log'

注意,这里除了这种直接跑到这个日志所在的目录操作外,其他的涉及多层目录路径的,最好用绝对路径,否则容易出错。