Linux中清空或删除大文件内容的方法

目录

概述

在 Linux 终端下处理文件时,有时我们想直接清空或删除文件的内容但又不想使用任何Linux命令行编辑器去打开这些文件。那怎样才能达到这个目的呢?在这篇文章中,我们将介绍几种借助一些实用的命令来直接清空或删除大文件内容的方法。

注意: 由于在Linux系统中一切皆文件,我们需要时刻注意,确保将要清空的文件不是重要的用户文件或者系统文件。清空重要的系统文件或者配置文件可能会引发严重的应用失败或者系统错误。切记!!!

准备测试文件

我们将使用/home/yuki/yuki_test.log的文件来做测试。

[yuki@localhost ~]$ cd /home/yuki/
[yuki@localhost ~]$ touch /home/yuki/yuki_test.log
[yuki@localhost ~]$ ll
total 4
-rw-r--r--. 1 yuki root 31 Apr 28 14:29 /home/yuki/yuki_test.log
[yuki@localhost ~]$ echo JAVA_OPTS='-Xms2048m -Xmx12288m'  > /home/yuki/yuki_test.log
[yuki@localhost ~]$ cat /home/yuki/yuki_test.log 
JAVA_OPTS=-Xms2048m -Xmx12288m

方法+实例演练

方法1: 通过重定向到null来清空文件内容

清空最简单方式,就是通过 shell重定向 null (不存在的事物)到该文件,具体如下:

[yuki@localhost ~]$ du -sh /home/yuki/yuki_test.log 
4.0K    /home/yuki/yuki_test.log
[yuki@localhost ~]$ > /home/yuki/yuki_test.log 
[yuki@localhost ~]$ du -sh /home/yuki/yuki_test.log 
0       /home/yuki/yuki_test.log

方法2: 使用冒号":" 或 "true"命令重定向来清空文件

冒号":" 在linux命令行中它可以理解成是shell的一个内置命令,等同于"true"命令,它可被用来作为一个 no-op(即不进行任何操作)。
清空文件内容的方法是将 冒号":" 或 “true” 内置命令的输出重定向到文件中,具体如下:

[yuki@localhost ~]$ echo JAVA_OPTS='-Xms2048m -Xmx12288m'  > /home/yuki/yuki_test.log
[yuki@localhost ~]$ du -sh /home/yuki/yuki_test.log 
4.0K    /home/yuki/yuki_test.log
[yuki@localhost ~]$ : > /home/yuki/yuki_test.log 
[yuki@localhost ~]$ du -sh /home/yuki/yuki_test.log 
0       /home/yuki/yuki_test.log


[yuki@localhost ~]$ echo JAVA_OPTS='-Xms2048m -Xmx12288m'  > /home/yuki/yuki_test.log
[yuki@localhost ~]$ du -sh /home/yuki/yuki_test.log 
4.0K    /home/yuki/yuki_test.log
[yuki@localhost ~]$ true > /home/yuki/yuki_test.log 
[yuki@localhost ~]$ du -sh /home/yuki/yuki_test.log 
0       /home/yuki/yuki_test.log

方法3: 使用"echo -n "命令清空文件内容

可以使用echo命令将空字符串的内容重定向到文件中,具体如下:

[yuki@localhost ~]$ echo JAVA_OPTS='-Xms2048m -Xmx12288m'  > /home/yuki/yuki_test.log
[yuki@localhost ~]$ du -sh /home/yuki/yuki_test.log 
4.0K    /home/yuki/yuki_test.log
[yuki@localhost ~]$ echo "" > /home/yuki/yuki_test.log 
[yuki@localhost ~]$ du -sh /home/yuki/yuki_test.log 
4.0K    /home/yuki/yuki_test.log
[yuki@localhost ~]$ cat /home/yuki/yuki_test.log 

[yuki@localhost ~]$

注意:空字符串并不等同于null 。字符串表明它是一个具体的事物,只不过它的内容可能是空的,但null则意味着某个事物并不存在。
基于以上原因,当你将echo命令的输出作为输入重定向到文件后,使用cat命令来查看该文件的内容时,你将看到一个空白行(即一个空字符串,但文件大小并不会变成0)

在使用echo命令时,如果要将null做为输出输入到文件中,必须要使用echo命令的-n参数。

[yuki@localhost ~]$ echo JAVA_OPTS='-Xms2048m -Xmx12288m'  > /home/yuki/yuki_test.log
[yuki@localhost ~]$ cat /home/yuki/yuki_test.log 
JAVA_OPTS=-Xms2048m -Xmx12288m
[yuki@localhost ~]$ echo -n "" > /home/yuki/yuki_test.log 
[yuki@localhost ~]$ cat /home/yuki/yuki_test.log 
[yuki@localhost ~]$ du -sh /home/yuki/yuki_test.log 
0       /home/yuki/yuki_test.log

方法4: 使用truncate命令来清空文件内容

truncate 命令可被用来将一个文件缩小或者扩展到某个指定的大小。
-s 参数用来指定文件需要缩小或者扩展的大小。要清空文件的内容,-s 后面指定的文件大小就是0,具体方法如下:

[yuki@localhost ~]$ echo JAVA_OPTS='-Xms2048m -Xmx12288m'  > /home/yuki/yuki_test.log
[yuki@localhost ~]$ cat /home/yuki/yuki_test.log 
JAVA_OPTS=-Xms2048m -Xmx12288m
[yuki@localhost ~]$ du -sh /home/yuki/yuki_test.log 
4.0K    /home/yuki/yuki_test.log
[yuki@localhost ~]$ truncate -s 0 > /home/yuki/yuki_test.log 
truncate: missing file operand
Try 'truncate --help' for more information.
[yuki@localhost ~]$ truncate -s 0 /home/yuki/yuki_test.log 
[yuki@localhost ~]$ du -sh /home/yuki/yuki_test.log 
0       /home/yuki/yuki_test.log

方法5: 使用cat命令和/dev/null设备来清空文件内容

在Linux中,/dev/null设备基本上被用来丢弃某个进程不再需要的输出流,或者作为某个输入流的空白文件,这些通常可以利用重定向机制来达到,它会清空送到它这里来的所有输入,而它的输出也可以被视为一个空文件。
所以,使用 cat命令显示 /dev/null 的内容然后重定向输出到某个文件,以此来达到清空该文件的目的。

[yuki@localhost ~]$ echo JAVA_OPTS='-Xms2048m -Xmx12288m'  > /home/yuki/yuki_test.log
[yuki@localhost ~]$ cat /home/yuki/yuki_test.log 
JAVA_OPTS=-Xms2048m -Xmx12288m
[yuki@localhost ~]$ du -sh /home/yuki/yuki_test.log 
4.0K    /home/yuki/yuki_test.log
[yuki@localhost ~]$ cat /dev/null > /home/yuki/yuki_test.log 
[yuki@localhost ~]$ du -sh /home/yuki/yuki_test.log 
0       /home/yuki/yuki_test.log
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章