如何清空(“截断”) linux 上已经存在并以某种方式受到保护的文件?

我的服务器上有一个名为 error.log 的文件,需要经常截断它。我有文件的 rw 权限。在 vi 中打开文件 > 删除所有内容 > 保存工作(显然)。但是当我尝试下面的

cat /dev/null > error.log

I get the message

File already exists.

显然,服务器上进行了某种配置,以防止意外重写文件。有人能告诉我如何在一个命令中“截断”文件吗?

114314 次浏览

您已经设置了 noclobber选项。错误看起来像是来自 csh,所以您应该这样做:

cat /dev/null >! file

如果我错了,你正在使用 bash,你应该这样做:

cat /dev/null >| file

在 bash 中,还可以将其缩短为:

>| file

False | tee fileToTruncate

可能也有用

这将足以将文件大小设置为0:

> error.log

你也可以试试:

echo -n > /my/file

也可以使用函数 截短

$truncate -s0 yourfile

如果权限被拒绝,请使用 sudo

$sudo truncate -s0 yourfile

帮助/手册: 男子截肢

在 ubuntu Linux 上测试

由于 sudo 不能与 重定向 >一起工作,因此我喜欢使用 tee命令

echo "" | sudo tee fileName

这要归功于我的资深同事:

:> filename

这不会破坏日志文件,因此您甚至可以在 syslog 上使用它,例如。

任何人都可以尝试这个命令来截断 Linux 系统中的任何文件

这肯定会以任何形式奏效:

truncate -s 0 file.txt

我喜欢这样: cp /dev/null file