在 Linux 系统中,通过 rm 命令删除一个文件,实际上是在相应的目录结构中 unlink 这个文件。如果这个文件仍然被打开着,这个文件仍然可以被这个进程所使用,并将继续占用磁盘空间。等这个程序关闭该文件后,对应文件的空间才会被释放。
=== TEST STEPS ===
1. Create a 1GB file.
[root@rhel674 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 6.5G 3.3G 3.0G 53% / tmpfs 499M 0 499M 0% /dev/shm /dev/sda1 477M 36M 416M 8% /boot /dev/sdb 30G 17G 12G 58% /pool [root@rhel674 ~]# dd if=/dev/zero of=/largefile bs=10M count=100 100+0 records in 100+0 records out 1048576000 bytes (1.0 GB) copied, 30.2106 s, 34.7 MB/s [root@rhel674 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 6.5G 4.2G 2.0G 69% / tmpfs 499M 0 499M 0% /dev/shm /dev/sda1 477M 36M 416M 8% /boot /dev/sdb 30G 17G 12G 58% /pool
2. In another terminal, open this file.
[root@rhel674 ~]# python Python 2.6.6 (r266:84292, May 22 2015, 08:34:51) [GCC 4.4.7 20120313 (Red Hat 4.4.7-15)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> >>> f = open('/largefile', 'r+'); >>> print f>>> [root@rhel674 ~]# lsof | grep largefile python 22423 root 3u REG 253,0 1048576000 23936 /largefile
3. Delete this file. And we can see the file is still being open.
[root@rhel674 ~]# rm -rf /largefile [root@rhel674 ~]# [root@rhel674 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 6.5G 4.2G 2.0G 69% / <<<==== Still ocupying 1 GB space. tmpfs 499M 0 499M 0% /dev/shm /dev/sda1 477M 36M 416M 8% /boot /dev/sdb 30G 17G 12G 58% /pool [root@rhel674 ~]# lsof | grep largefile python 22423 root 3u REG 253,0 1048576000 23936 /largefile (deleted)
4. Close this file.
>>> f.close() >>> [root@rhel674 ~]# lsof | grep largefile [root@rhel674 ~]# [root@rhel674 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 6.5G 3.3G 3.0G 53% / <<<<===== 1 GB released. tmpfs 499M 0 499M 0% /dev/shm /dev/sda1 477M 36M 416M 8% /boot /dev/sdb 30G 17G 12G 58% /pool