Linux清空文件内容的5种方法

系列 - Delete File and Directory

在本文的示例中, 使用名为access.log的文件来作为示例样本。

清空或者让一个文件成为空白的最简单方式, 是通过shell重定向null (不存在的事物) 到该文件:

1
> access.log

:符号, 它是shell的一个内置命令, 等同于true命令, 它可被用来作为一个no-op (即不进行任何操作) 。

下面将:或者true内置命令的输出重定向到文件中:

1
: > access.log

1
true > access.log

在Linux 中, null设备基本上被用来丢弃某个进程不再需要的输出流, 或者作为某个输入流的空白文件, 这些通常可以利用重定向机制来达到。所以/dev/null设备文件是一个特殊的文件, 它将清空送到它这里来的所有输入, 而它的输出则可被视为一个空文件。

  • 所以, 可以使用cat命令显示/dev/null的内容然后重定向输出到某个文件, 以此来清空该文件:

    1
    
    cat /dev/null > access.log
    
  • 使用cp命令复制/dev/null的内容到某个文件来清空该文件:

    1
    
    cp /dev/null access.log
    
  • 使用dd命令, if代表输入文件, of代表输出文件:

    1
    
    dd if=/dev/null of=access.log
    

使用echo命令将空字符串的内容重定向到文件中:

1
echo "" > access.log

1
echo > access.log
注意

空字符串并不等同于null:

  • 字符串表明它是一个具体的事物, 只不过它的内容可能是空的。
  • null则意味着某个事物并不存在。

基于这个原因, 将echo命令的输出作为输入重定向到文件后, 使用cat命令来查看该文件的内容时, 可以看到一个空白行 (即一个空字符串) 。

要将null做为输出输入到文件中, 可以使用-n选项, 这个选项将告诉echo不再像上面的那个命令那样输出结尾的那个新行:

1
echo -n "" > access.log

truncate可以将一个文件缩小或者扩展到某个给定的大小。可以利用它和-s参数来特别指定文件的大小。要清空文件的内容, 则在下面的命令中将文件的大小设定为0:

1
truncate -s 0 access.log