lsof命令简介
lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
1. 因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。
2. lsof命令并非系统自带命令,如果找不到该命令,以Cent OS为例,执行以下命令进行安装:
yum install lsof
Linux磁盘空间
有时会出现这样的情况,磁盘空间显示已经被占满,但是在查看磁盘的具体文件占用情况时,发现磁盘仍然有很大的空余空间。重启系统后,剩余的磁盘空间才会显示出来。
1. 执行df命令查看磁盘使用情况,发现磁盘已经满了。
-bash-4.2$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 30G 30G 0 100% /
devtmpfs devtmpfs 489M 0 489M 0% /dev
tmpfs tmpfs 497M 0 497M 0% /dev/shm
tmpfs tmpfs 497M 50M 447M 11% /run
tmpfs tmpfs 497M 0 497M 0% /sys/fs/cgroup
2. 执行du命令查看各个目录的磁盘占用情况,把各个目录文件的大小相加,发现并没有占满磁盘,有10多G空间莫名失踪。
-bash-4.2$ du -h --max-depth=1 /home
146M /home/dancen
16M /home/logs
11G /home/serverdog
11G /home
3. 为何会出现这样的情况呢?
这是因为磁盘上的某些文件已经被删除,但是一些进程仍然持有这些文件,因此其原来占用的磁盘空间并没有被释放。
执行lsof命令显示哪些进行占用了被删除的文件。将有问题的进程重启,磁盘空间就会得到释放。
[root@dancen /]# lsof | grep delete
mysqld 2470 mysql 4u REG 253,1 0 523577 /var/tmp/ibfTeQFn (deleted)
mysqld 2470 mysql 5u REG 253,1 0 523579 /var/tmp/ibaHcIdW (deleted)
mysqld 2470 mysql 6u REG 253,1 0 523581 /var/tmp/ibLjiALu (deleted)
mysqld 2470 mysql 7u REG 253,1 0 523585 /var/tmp/ibCFnzTB (deleted)
mysqld 2470 mysql 11u REG 253,1 0 523587 /var/tmp/ibCjuqva (deleted)