在工作但被删除的情况下,如何读取sh文件?


20

在一次采访中,他们问了我这个问题。

已有一个sh文件正在运行,但是自开始执行以来已被删除。

他们要我找到进程并阅读文件。

我设法找到了过程

ps -ef | grep test.sh

并尝试通过使用它来阅读

cat /proc/PID/cmdline test.sh

但它说

no such file or directory

我不知道下一步该怎么做,所以我不得不跳过这一步。

也许这是一个简单的问题,但这对我来说确实是一个好问题,我真的很想知道答案。你们可以帮忙吗?

Answers:


24
tail -c +0 -f /proc/{pid}/fd/{fd} > /tmp/file

其中{pid}是您的进程的ID,/tmp/file并将包含其内容。如果要保留它,请使用其他位置和名称。

  • {pid}是进程的ID。
  • {fd}是文件描述符。lsof应该显示fd。lsof也可能会在该行上显示“已删除”,因此您也可以grep这样做。lsof -nP +L1将列出所有链接少于1个的文件,删除的文件将包含0。添加a | grep {pid}可以仅搜索您的PID。
  • 甜点:lsof -p 22664 | sed -E '$!d;s/.*\s([0-9]+)[a-z]\s.*/\1/'刚得到FD。
  • 从评论:您可以使用lesscatcp太。我长大了tail:)

“我在尾巴上长大!” 对于任何需要使用* x进行操作的人来说都是宝贵的见解。
斯里
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.