在某些情况下,您可能希望将现有文件截断,即减少或者缩小文件的大小。清空文件比删除文件后重新创建文件并设置正确的权限和所有权。更快,更容易。
还有一点就是,如果要删除的文件已经被其它进程打开,如果你此时删除文件可能会导致使用该文件的进程没有响应。但你可以尝试清空文件内容。
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
命令。
-
Linux
+关注
关注
87文章
11032浏览量
207294 -
文件
+关注
关注
1文章
541浏览量
24472 -
命令
+关注
关注
5文章
638浏览量
21876 -
Shell
+关注
关注
1文章
358浏览量
23047
发布评论请先 登录
相关推荐
如何清空数组内容?
在Linux下如何清空或删除大文件和大量文件
Linux基础教程之如何在linux不解压tar.gz文件查看的文件大小资料概述
LINUX系统教程之如何在Linux系统下进行编程
怎样恢复回收站已清空文件
如何在Linux中查看隐藏文件
如何在Linux上使用Pigz来更快地压缩文件
![如<b class='flag-5'>何在</b><b class='flag-5'>Linux</b>上使用Pigz来更快地压缩<b class='flag-5'>文件</b>](https://file1.elecfans.com/web2/M00/82/B8/wKgZomRd-3eAaI-2AACLovAhIxs410.jpg)
评论