之前在《如何让程序真正地后台运行》一文中提到了程序后台运行的写法,但是里面的示例程序在某些场景下是会有问题的,这里先不说什么问题,我们先看看这个磁盘满的问题是怎么产生的,通过这篇文章你将会学习到大量linux命令的实操使用。
找到导致磁盘满的程序
当发现磁盘占用比较多的时候,可以通过下面的命令,查看各个挂载路径的占用情况:
$ df -h
udev 3.9G 0 3.9G 0% /dev
tmpfs 784M 2.0M 782M 1% /run
/dev/sda11 19G 6.5G 12G 37% /
tmpfs 3.9G 91M 3.8G 3% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda12 9.4G 37M 8.8G 1% /tmp
/dev/sda14 6.4G 168M 5.9G 3% /boot
/dev/sda10 57G 2.0G 52G 4% /home
/dev/sda1 256M 33M 224M 13% /boot/efi
tmpfs 784M 16K 784M 1% /run/user/121
tmpfs 784M 44K 784M 1% /run/user/1000
当然我这里并没有哪个挂载路径的磁盘占用率比较高,这里假设home占用比较高,然后可以通过:
$ cd /home
$ du -h --max-depth=1
1.9G ./shouwang
16K ./lost+found
1.9G .
这样可以逐层知道哪些目录有了不该有的大文件。
当然你也可以使用find直接找出大文件,比如查找当前目录下大于800M的文件:
$ find . -type f -size +800M
find的用法可以参考《find命令高级用法》。
如果找到了该文件,并且确认是无用文件,那么就可以删除了。
但是如果仍然有程序打开了该文件,那么即便你删除了文件,其占用的磁盘空间也并不会释放,因为仍然它的"文件引用"不是0,文件并不会被删除。
在《rm删除文件空间就释放了吗?》一文中,有更加详细的解释。
所以你需要看一下,是否还有程序打开该文件,举个例子:
$ lsof config.json
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NA