lsof +D /tmp 输出的 NAME 列中的大多数条目不以 /tmp 开头。为什么会这样?

lsof +D /tmp 输出的 NAME 列中的大多数条目不以 /tmp 开头。为什么会这样?

我所在的实验室拥有一个共享的科学计算环境。我的系统管理员刚刚告诉实验室里的每个人,我正在使用的一个节点即将崩溃,因为/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

相关内容