很多人刚接触Linux时,碰到文件内容太多想清空,第一反应可能是直接删掉文件再新建一个。其实没必要那么麻烦,Linux系统里有好几个命令都可以快速清空文件内容,而且操作起来非常简单。我平时在服务器上维护日志文件、清理缓存数据时,经常用到这些命令,下面就说说我觉得最实用、最常见的几种方法。

用重定向符号直接清空

linux命令清空文件内容_linux常用命令清空_linux清空命令行快捷键

这是我最常用的一种方式,简单到几乎不需要记。只需要一个大于号和一个空格,然后跟上文件名就行。比如你有一个叫做 access.log 的日志文件,想清空它,直接在终端输入 > access.log 就可以了。这个命令的原理是把一个空的内容重定向到文件里,覆盖原来的内容。要注意的是,这个符号后面不能跟别的命令,否则就不是清空的意思了。我刚开始用Linux的时候,有时候不小心把输出定向搞错了,文件反而被覆盖成了别的内容,所以用这个方法时一定要确认文件名写对了。这个方法对普通用户文件都有效,但如果文件被其他进程占用,或者你没有写权限,那就没办法了。

使用 true 命令加重定向

linux清空命令行快捷键_linux命令清空文件内容_linux常用命令清空

有时候你可能会在脚本里看到这种写法:: > filename 或者 true > filename。这两个命令的原理是一样的,冒号和true都表示一个空操作,执行后什么都不做,但它们的退出状态是成功的。把它们和重定向结合使用,就能生成一个空文件内容。我在写自动化脚本时特别喜欢用这个,因为它看起来更规范linux命令清空文件内容,不容易被误解成别的操作。比如有个临时文件 temp.txt,想清空它,一行命令 : > temp.txt 就搞定了。这个方法也适用于文件不存在的情况,它会自动创建一个空文件,而不是报错。

使用 echo 命令清空

linux常用命令清空_linux清空命令行快捷键_linux命令清空文件内容

echo 命令大家应该都很熟悉,用来输出文本的。但你可能不知道,它也可以用来清空文件。只要执行 echo "" > filename 或者 echo > filename,就能把空字符串写入文件马哥linux,覆盖掉原有内容。不过要注意,这种情况下文件里其实会多一个换行符,因为echo默认会在输出末尾加换行。如果你想完全不留任何字符,包括换行符,那最好用上面说的重定向方法。我在处理一些严格要求格式的配置文件时,会特意避免用echo,因为那个多余的换行有时候会引发奇怪的问题。但如果是日常清理日志,用echo完全没问题。

使用 truncate 命令缩小文件

truncate 是一个专门用来调整文件大小的命令,清空文件只是它的一个小用途。执行 truncate -s 0 filename,就能把文件大小设置为0字节,相当于清空了所有内容。这个命令的优点是比较安全,它不会改变文件的权限、所有者、时间戳等属性,只是把内容清掉。而且truncate还能用来截断文件到指定大小,不只是清空。我在管理大型日志文件时经常用它,比如想保留最近100MB的日志,可以用 truncate -s 100M access.log 把文件从尾部截断到100MB。如果想完全清空,就指定大小为0。要注意的是,truncate在某些旧版本的Linux上可能没安装linux命令清空文件内容,需要手动安装coreutils工具包。

使用 dd 命令覆盖文件

linux命令清空文件内容_linux常用命令清空_linux清空命令行快捷键

dd 命令在Linux里是个强大的工具,虽然它最出名的是用来备份和转换数据,但清空文件也能做。命令是 dd if=/dev/null of=filename。这里 if 表示输入文件,我们指定为 /dev/null,这是一个特殊的设备文件,读取它只会得到空内容。of 是输出文件,就是你想清空的目标文件。这个命令会从 /dev/null 读取0字节写入目标文件,结果就是文件被清空。我一般不会为了清空文件专门用dd,因为它看起来有点大材小用,而且参数比较多,容易写错。但如果你已经习惯使用dd,或者需要在脚本里和其他dd操作一起写,那也可以。

用 cat 命令和 /dev/null 配合

linux命令清空文件内容_linux清空命令行快捷键_linux常用命令清空

cat 命令配合 /dev/null 也是常见做法:cat /dev/null > filename。这个命令的意思是把 /dev/null 的内容显示出来,然后重定向到文件里。因为 /dev/null 本身是空的,所以文件也就被清空了。这个方法在很多Linux运维教程里都有提到,算是比较经典的做法。我自己在清理一些重要的应用日志时,会用这个命令,因为它写得很明确red hat linux,一看就知道是在做什么。而且cat命令几乎所有Linux系统都自带,不用担心没有安装的问题。

清空文件内容的方法远不止这些,但上面这几种对于日常使用已经完全够用了。选择哪种方法,主要看你自己的习惯和具体场景。如果你只是在终端临时清空一个文件,用重定向符号最快;如果你写脚本,用冒号或者true更规范;如果你需要保留文件属性,truncate最合适。记得在使用任何清空命令之前,一定要确认文件名没错,免得清错了重要文件。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复