Loading... <div class="tip share">请注意,本文编写于 1712 天前,最后修改于 941 天前,其中某些信息可能已经过时。</div> ##### Summary 这篇博客对置空文件和删除文件这两个操作的一个总结,记录一下 ##### 实验 * 测试环境:Ubuntu Server 18.04.5 LTS * 步骤 1. 通过 `echo` 创建一个文件 `test.txt` ,并向其中写入内容 ```bash echo "123" > test.txt ```  2. 使用 `tail` 占用 `test.txt` 文件句柄 ```bash tail -f test.txt ```  此时通过 `lsof` 查看文件句柄占用情况, 可以发现`tail` 是正在占用 `test.txt` 文件句柄的 ```bash lsof test.txt ```  3. 置空文件,通过 `lsof` 观察文件 `test.txt` 状况变化 ```bash > test.txt lsof test.txt ```    置空文件会清空文件 `test.txt` 内容,在 `lsof` 中并不会将文件句柄状态更改为 `deleted` ,发生变更的只是 `SIZE` 大小变为0. 4. 删除文件,通过 `lsof` 观察文件状况变化 为了便于对比,现在通过 `echo` 向文件 `test.txt` 追加原内容,恢复原文件状态,然后执行删除操作 ```bash echo "123" >> test.txt rm -rf test.txt ```    文件 `test.txt` 删除后,并不能通过 `lsof filename` 方式进行查看文件句柄状态,只能通过 `lsof | grep deleted` 查看 ```bash lsof | grep deleted ```  可见,当文件被删除,同时进程在占用文件句柄,使用 `lsof`会发现文件句柄被更改为`deleted`。文件会从磁盘上消失,但是不会释放空间。(`SIZE` 大小依然为4) ##### 总结 1. `lsof | grep deleted` 如果出现有deleted的记录,证明有文件被删除。 2. 置空操作不会影响文件句柄状态,只是 `SIZE` 变为0。 3. 置空操作可以在有进程占用文件句柄状态下释放磁盘空间,删除操作只能等待进程释放句柄后才能释放磁盘空间 最后修改:2022 年 10 月 03 日 © 允许规范转载 赞 0 如果对你有帮助,可以请我喝杯奶茶哦