因此,我正在使用 KDE 运行新安装的 Debian 9.1,一些工具显示这些文件已被删除,但仍在使用中:
- memfd:pulseaudio(pulsaudi)
- memfd:xshmfence(Xorg)
- /tmp/ibAbCdEf(mysqld)
- [上面还有 4 个/tmp/]
请注意,这是全新安装,到目前为止我还没有下载任何软件包,只进行了一些小配置。为什么这些被删除但仍在使用?我可以完全删除它们吗?这会破坏任何东西吗——其他人也有这些吗?如果它们可以或应该被删除:如何删除?
答案1
对已删除的文件名使用文件句柄是一种合法的文件访问方法;这有助于确保没有其他东西可以(轻松)访问该文件或以其他方式与该文件交互,该文件现在仅由文件句柄打开。然而,如果不了解生成这些临时文件的代码,就无法将此用例与 oops-deleted-but-open bug 区分开来。换句话说,已删除但打开的文件可能是完全合法的。
珀尔文件::临时文件例如,模块取消临时文件的链接默认情况下如果仅请求文件句柄(而不是文件名):
$ perl -MFile::Temp=tempfile -e 'my$fh=tempfile("qqqqXXXXXXXXXX");sleep 999' &
[1] 67001
$ lsof | grep qqqq
perl5.24 67001 jdoe 3u REG 1,2 0 65834304 /Users/jdoe/qqqq4mnuKXT3fS
$ file /Users/jdoe/qqqq4mnuKXT3fS
/Users/jdoe/qqqq4mnuKXT3fS: cannot open `/Users/jdoe/qqqq4mnuKXT3fS' (No such file or directory)
$ fg
perl -MFile::Temp=tempfi
^C
$
现在,请求文件名后,文件不会自动取消链接:
$ perl -MFile::Temp=tempfile -e 'my($fh,$name)=tempfile("qqqqXXXXXXXXXX");sleep 999' &
[1] 67012
$ lsof | grep qqqq
perl5.24 67012 jdoe 3u REG 1,2 0 65834307 /Users/jdoe/qqqqEvy9FFVnLQ
$ file /Users/jdoe/qqqqEvy9FFVnLQ
/Users/jdoe/qqqqEvy9FFVnLQ: empty
$