如何清空(“截断”)在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