Truncate/Delete 通过输出重定向“>”生成的日志文件内容
Truncate/Delete the log file contents which are generated via output redirection ">"
问题是,下面列出的所有命令都会使文件大小为 0(零),但会持续一段时间。
生成新日志后,日志文件大小为 = 旧文件大小(截断前)+ 新日志消息大小.
这意味着截断 不会释放文件占用的磁盘 space。
文件大小应该是截断命令之后出现的新日志消息的大小。
在问这个问题之前,我尝试了以下选项。
- $ > sysout.log
- $ : > sysout.log
- $ cat /dev/null > sysout.log
- $ cp /dev/null sysout.log
- $ dd if=/dev/null of=sysout.log
- $ echo "" > sysout.log
- $ echo -n "" > sysout.log
- $ truncate -s 0 sysout.log
首先,我检查了文件大小(包含 10 行 日志消息)
[root@mylaptop ~]# ls -lh sysout.log
-rw-r--r-- 1 root root 6.0K Dec 2 11:30 sysout.log
然后 运行 截断 命令
[root@mylaptop ~]# truncate -s0 sysout.log
[root@mylaptop ~]# ls -lh sysout.log
-rw-r--r-- 1 root root 0 Dec 2 11:31 sysout.log
几秒钟后 2 行 日志消息打印到文件中。但是文件大小是
[root@mylaptop ~]# ls -lh sysout.log
-rw-r--r-- 1 root root 6.3K Dec 2 11:31 sysout.log
如您所见,它增加了文件大小。
如何释放磁盘space?或者还有其他方法吗?
对于以写入模式打开文件(使用“>”或其他方式)的长 运行 进程,该进程会跟踪下一次写入的偏移量。即使文件大小被截断为 0,下一次写入也会从最后一个位置恢复。根据描述,最有可能的是长 运行 进程继续以旧偏移量记录(有效地在文件开头留下大量零字节数据。
- 通过检查文件进行验证 - 初始内容是否消失了?
解决方法很简单,不用write
模式登录,改用append
模式登录。
# Start with a clean file
rm -f sysout.log
# Force Append mode.
java - jar my_app.jar >> sysout.log 2>>&1 &
...
truncate ...
# New data should be written to the START of the file, based on truncated size.
注意所有的写入过程,连接都应该使用append
模式。
问题是,下面列出的所有命令都会使文件大小为 0(零),但会持续一段时间。
生成新日志后,日志文件大小为 = 旧文件大小(截断前)+ 新日志消息大小.
这意味着截断 不会释放文件占用的磁盘 space。
文件大小应该是截断命令之后出现的新日志消息的大小。
在问这个问题之前,我尝试了以下选项。
- $ > sysout.log
- $ : > sysout.log
- $ cat /dev/null > sysout.log
- $ cp /dev/null sysout.log
- $ dd if=/dev/null of=sysout.log
- $ echo "" > sysout.log
- $ echo -n "" > sysout.log
- $ truncate -s 0 sysout.log
首先,我检查了文件大小(包含 10 行 日志消息)
[root@mylaptop ~]# ls -lh sysout.log
-rw-r--r-- 1 root root 6.0K Dec 2 11:30 sysout.log
然后 运行 截断 命令
[root@mylaptop ~]# truncate -s0 sysout.log
[root@mylaptop ~]# ls -lh sysout.log
-rw-r--r-- 1 root root 0 Dec 2 11:31 sysout.log
几秒钟后 2 行 日志消息打印到文件中。但是文件大小是
[root@mylaptop ~]# ls -lh sysout.log
-rw-r--r-- 1 root root 6.3K Dec 2 11:31 sysout.log
如您所见,它增加了文件大小。
如何释放磁盘space?或者还有其他方法吗?
对于以写入模式打开文件(使用“>”或其他方式)的长 运行 进程,该进程会跟踪下一次写入的偏移量。即使文件大小被截断为 0,下一次写入也会从最后一个位置恢复。根据描述,最有可能的是长 运行 进程继续以旧偏移量记录(有效地在文件开头留下大量零字节数据。
- 通过检查文件进行验证 - 初始内容是否消失了?
解决方法很简单,不用write
模式登录,改用append
模式登录。
# Start with a clean file
rm -f sysout.log
# Force Append mode.
java - jar my_app.jar >> sysout.log 2>>&1 &
...
truncate ...
# New data should be written to the START of the file, based on truncated size.
注意所有的写入过程,连接都应该使用append
模式。