如何清空(“截断”)在Linux上的文件已经存在,并在某种程度上受到保护?

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

cat /dev/null > error.log 

我收到消息

 File already exists. 

很明显,在服务器上有一些configuration可以防止意外覆盖文件。 任何人都可以告诉我如何在一个命令中“截断”文件?

你有noclobber选项设置。 这个错误看起来像是来自csh,所以你会这样做:

 cat /dev/null >! file 

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

 cat /dev/null >| file 

在bash中,你也可以缩短到:

 >| file 

你也可以使用函数截断

 $truncate -s0 yourfile 

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

 $sudo truncate -s0 yourfile 

帮助/手动: 人截断

在Ubuntu的Linux上testing

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

 > error.log 

我的高级同事为此表示赞赏:

 :> filename 

这不会破坏日志文件,所以你甚至可以在syslog上使用它。

false | tee fileToTruncate

也可以工作

由于sudo不能使用redirect > ,所以我喜欢这个tee命令

 echo "" | sudo tee fileName 

你也可以尝试:

echo -n > /my/file