我正在使用 Ubuntu 18.04 LTS,我在我的系统上做了一些奇怪的事情。
在crontab -e
中,我有这样的一行:
@reboot sleep 11 && sshpass -p '123456' ssh -D *:7070 socksclient@localhost
这样 ssh 客户端程序会在系统启动时自动运行,在端口 7070 上充当 SOCK5 服务器。
但是坏事发生了。我的根分区正在慢慢耗尽空间,我可以看到这种泄漏df
,大约每秒 100 字节。
经过一番调查,lsof | grep deleted
发现它是ssh
或sshpass
抓取[已删除文件系统路径的文件句柄(附件图像中的/tmp/#16)] 并将内容连续附加到它,因此它偷偷地占用了我的磁盘空间。
顺便说一句:如果我sshpass -p '123456' ssh -D *:7070 socksclient@localhost
从 Linux 控制台手动运行,这些(delete)
条目将不会出现。
那些泄漏的磁盘空间不能用du
, 并且只能通过杀死 ssh 或 sshpass 进程来释放。
所以我的问题是:我希望我的 ssh 客户端在系统启动时运行,但要消除磁盘空间泄漏。如何做到这一点?
如果有人能告诉我,我将不胜感激:
- 文件的当前大小是
deleted
多少? - 我如何知道 /tmp/#16 文件中附加了哪些内容(文本)?也许一些类似于Windows 上的进程监视器的程序?
希望这有帮助。
获取持有“已删除”文件/fd 的进程的 PID 和 FD 并使用 stat/cat/peekfd 等。即使处于已删除状态(在活动进程下),它也必须仍在运行原因文件。