3

Linux 清空文件内容

 1 year ago
source link: https://www.myfreax.com/linux-clear-file-content/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Linux 清空文件内容

清空文件比删除文件后重新创建文件并设置正确的权限和所有权。更快,更容易

Updated At 23 Nov 2022 3 min read
By myfreax
Linux 清空文件内容

Linux 清空文件内容

在某些情况下,您可能希望将现有文件截断,即减少或者缩小文件的大小。清空文件比删除文件后重新创建文件并设置正确的权限和所有权。更快,更容易。

还有一点就是,如果要删除的文件已经被其它进程打开,如果你此时删除文件可能会导致使用该文件的进程没有响应。但你可以尝试清空文件内容。

本教程说明如何在Linux 清空文件内容。

truncate 命令清空文件

随着时间的流逝,您的磁盘驱动器可能会堆满很多大型日志文件,这些日志文件会占用大量磁盘空间。

此时,你可以运行命令sudo truncate -s 0 /var/log/**/*.log清空清空/var/log目录以.log结尾的文件。

另一个更好的选择是使用logrotate工具压缩和删除日志文件。

sudo truncate -s 0 /var/log/**/*.log 

Shell 重定向清空文件

清空文件最简单,最常用的方法是使用Shell重定向操作符>。使用重定向清空文件的命令是: > filename

:返回零字节的空字符串,也可以理解为不产生任何输出。重定向操作符>将命令:的输出重定向到指定文件。

filename是您要清空的文件。如果文件存在,它将被清空为零的大小,即空文件,否则创建零字节的文件。

现在大多数Shell程序,例如Bash或Zsh,都可以在重定向符号之前省略命令,因此你可以将: > filename写成> filename

: > filename
> filename

除了:命令,你还可以使用另一个不产生任何输出的命令cat /dev/null/dev/null是空设备文件。

然后使用重定向操作符> 重定向到你要清空的文件,例如命令cat /dev/null > filename会清空文件filename

此外还可以使用echo命令和-n选项。-n选项表示不输出尾随的换行符。例如命令echo -n > filename

cat /dev/null > filename
echo -n > filename

Sudo与Shell 重定向清空文件

要能够清空文件,您需要对文件具有写权限。通常您可能会因为权限问题而使用 sudo命令

但是使用sudo提升权限不适用于重定向操作符>,例如命令sudo : > /var/log/syslog

你的终端将会打印错误消息bash: /var/log/syslog: Permission denied。

sudo : > /var/log/syslog
bash: /var/log/syslog: Permission denied

遇到此问题时可以有几种解决方案。第一种是使用sudo和sh命令启动子shell运行命令。

另一种解决方案是将命令的标准输出通过管道传递给tee命令,然后使用sudo将提升权限运行tee命令晴空文件。例如命令: | sudo tee filename

sh命令的-c选项允许用户指定要运行的命令,命令将会shell的子进程运行。命令sudo sh -c '> filename'创建shell子进程运行> filename命令。

sudo sh -c '> filename'
: | sudo tee filename

要在Linux 清空文件,请使用重定向操作符>,后跟文件名或者使用truncate命令。如果您有任何疑问或意见,请在下面发表评论。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK