In7*_*n78 1 ls disk-usage files
我正在尝试找到一种方法来减少使用日志文件的大小。
所以对于一个文件我尝试了这个:
$ yes > yeslog
Run Code Online (Sandbox Code Playgroud)
因此数据被连续写入yeslog。
ls -alh yeslog在我用和检查尺寸后,du -h yeslog他们报告了相同的尺寸。
然后我这样做,然后我再次使用和truncate -s 0K yeslog检查尺寸。但现在,显示的是缩小的尺寸,而显示的是和以前一样的尺寸。lsduduls
为什么会发生这种情况? truncate 真的发挥了作用吗?
这是Linux 如何管理文件偏移量的变体。和ls都是du正确的,它们测量的是不同的东西。
当您运行时truncate,它会将文件减少到 0 字节。然而yes,立即在之前写入的偏移量处再次写入;所有丢失的数据都被零替换,并且完全丢失的块被稀疏地替换。结果,文件的表观大小不断增加,但每次运行时,它在磁盘上消耗的实际磁盘空间都会回到 0 truncate,并且在yes写入时再次增加,稀疏块为 \xe2\x80\ x99t 算了。
ls默认情况下显示文件的表观大小,而du显示消耗的磁盘空间,因此将显示比第一个丢失整个块之后ls更大的值。您可以使用标志来显示分配的大小。dutruncatels-s
如果您要求 shell追加到yeslog( yes >> yeslog),则文件将以\xe2\x80\x99s 截断后打开O_APPEND并yes从文件开头写入,而不是继续在与之前相同的偏移处写入。
| 归档时间: |
|
| 查看次数: |
1444 次 |
| 最近记录: |