在某些情况下,您可能希望将现有文件截断(空)为零长度。简单来说,截断文件意味着删除文件内容而不删除文件。
截断文件比删除文件,重新创建并设置正确的权限和所有权更快,更容易。另外,如果文件是由进程打开的,则删除文件可能会导致使用该文件的程序出现故障。
本教程说明了如何在Linux系统中使用shell重定向和truncate命令将文件截断为零大小。
Shell重定向
截断文件最简单,最常用的方法是使用> Shell重定向操作符。
使用重定向截断文件的一般格式为:
: > filename让我们分解一下命令:
:冒号表示true,不产生输出。- 重定向操作符
>将先前命令的输出重定向到给定文件。 filename,您要截断的文件。
如果文件存在,它将被截断为零。否则,将创建文件。
除了:以外,还可以使用另一个不产生任何输出的命令。
以下是使用 cat 命令输出/dev/null设备内容的示例,该设备仅返回文件结尾字符:
cat /dev/null > filename另一个可以使用的命令是 echo 。 -n选项告诉echo不要添加换行符:
echo -n > filename在大多数现代的Shell(例如Bash或Zsh)上,您可以在重定向符号之前省略命令,并使用:
> filename要能够截断文件,您需要对该文件具有写权限。通常,您将为此使用 sudo ,但是提升的root特权不适用于重定向。这是一个例子:
sudo : > /var/log/syslogbash: /var/log/syslog: Permission denied有几种解决方案,可以使用sudo进行重定向。第一个选项可以使用sudo运行新的shell,并使用-c标志在该shell中执行命令:
sudo sh -c '> filename'另一个选择是将输出传递给tee命令,将tee特权提升为sudo,然后将空输出写入给定文件:
: | sudo tee filenametruncate命令
truncate是一个命令行实用程序,可让您将文件的大小缩小或扩展到给定的大小。
使用truncate命令将文件截断为零大小的一般语法如下:
truncate -s 0 filename-s 0选项将文件大小设置为零。
例如,要清空Nginx访问日志,您可以使用:
sudo truncate -s 0 /var/log/nginx/access.log清空所有日志文件
随着时间的流逝,您的磁盘驱动器可能会堆满很多大型日志文件,这些日志文件会占用大量磁盘空间。
以下命令将清空/var/log目录下以“ .log”结尾的文件:
sudo truncate -s 0 /var/log/**/*.log 一个更好的选择是使用 logrotate 工具压缩和删除日志文件。
结论
要在Linux中截断文件,请使用重定向操作符>,后跟文件名。
如果您有任何疑问或意见,请在下面发表评论。
