find . -type f 我们的一个用户在我们的一台服务器上发出了一条命令,在 中查看时该命令当前正在运行ps aux

我如何知道这个命令是从哪个目录发出的。

该过程是否具有类似当前工作目录的环境变量,我可以检索该变量来获取我想要的内容或类似的东西?

注意:上述命令是人为的,实际命令是其他内容。但是否可以找到发出该命令的目录

1

  • 1
    ls -l /proc/PID/cwdPID正确的 PID在哪里。不过,我认为find允许在运行期间更改其当前工作目录,只要结果符合规范;所以你得到的结果可能是也可能不是你想要的。因此这只是一个评论,而不是答案。


    – 


最佳答案
2

您可以使用专门为此目的设计的命令来报告进程的当前工作目录

  • 你可以使用以下ps aux命令轻松找到该进程的 PID ps aux | grep "find . -type f"(或者如果你已经有了它)
  • 将此 PID 与pwdx <PID>

您也可以一次性完成此操作:

pwdx $(ps aux | grep '[f]ind . -type f' | awk '{print $2}')

另一种方法(对于某些没有pwdx但确实有的系统很有用ls)可以是@Kamil Maciorowski 在评论中提到的:

ls -l /proc/<PID>/cwd

0

所指出的,
在进程运行时
可以使用或
pwdx <PID>
我个人更喜欢后者。
ls -l /proc/<PID>/cwd

如果该过程已经完成,这将没有任何意义,您可以尝试通过 journactl logs 查看您知道发出命令的时间间隔,例如,journalctl --since "2024-09-27 00:00:00" --until "2024-09-27 <time command stopped>"如果没有设置任何类型的日志审计方法,则无法保证找到该命令。

可能还有我不知道的其他方法,但我确实建议您实施一种方法来做到这一点。