我所在的实验室拥有一个共享的科学计算环境。我的系统管理员刚刚告诉实验室里的每个人,我正在使用的一个节点即将崩溃,因为/tmp
它已满。我一直在试图了解我的使用方式/tmp
,但感到很困惑。我注意到,运行lsof +D /tmp
显示了很多打开的文件,根据输出的 NAME 列中的条目,这些文件似乎不在/tmp
或其任何子目录中(并且未在 的输出中列出ls /tmp
),但却包含在命令输出中。例如,以下是输出的一部分:
(base) lsof -u cigoe +d /tmp 2>/dev/null
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
bash 81648 cigoe cwd DIR 253,2 4096 34238020 /home/scratch/cigoe/2022/proposal
bash 81648 cigoe rtd DIR 253,0 4096 128 / bash 81648 cigoe txt REG 253,0 1150648 3646 /usr/bin/bash
bash 81648 cigoe mem REG 253,0 2586930 3602 /usr/lib/locale/en_US.utf8/LC_COLLATE
bash 81648 cigoe mem REG 253,0 9253600 201909537 /var/lib/sss/mc/passwd
bash 81648 cigoe mem REG 253,0 46320 67889113 /usr/lib64/libnss_sss.so.2
...
我无法很好地理解这些打开的文件是如何与 关联的/tmp
,但它们似乎占用了大量空间(就 SIZE/OFF 列中的条目总数而言,太多了,无法实际容纳在设备上,所以我不确定那里发生了什么)。如果相关的话,我们的实验室使用 ZFS。我希望有人能帮助我回答以下问题:
输出的 NAME 列中的大多数条目lsof +D /tmp
不以 开头/tmp
。为什么会这样?
答案1
你给了 lsof 两个列表选项,-u cigoe
和+d /tmp
。来自man lsof
:
Normally list options that are specifically stated are ORed - i.e., specifying the -i option without an address and the -ufoo option pro‐ duces a listing of all network files OR files belonging to processes owned by user ``foo''.
所以它返回用户打开的所有文件cigoe
也所有打开的文件/tmp
。它继续说
The -a option may be used to AND the selections. For example, specify‐ ing -a, -U, and -ufoo produces a listing of only UNIX socket files that belong to processes owned by user ``foo''.
因此,要列出用户打开的所有文件cigoe
以及(顶层)/tmp
lsof -u cigoe -a +d /tmp 2>/dev/null