我是 Linux Shell 的新手,有点卡在任务中:
我们应该使用 ssh 连接到 linux 机器。然后我们应该发出 ls 命令并使用 ps 和 pstree 来查看我们在机器中创建了哪些进程来使 ls 命令起作用。然后我们需要找出这些进程的RUID和EUID。并解释在途中访问了哪些文件以及原因。
我知道网上有很多关于 shell 命令的文档,所以我当然先尝试使用 google 解决问题。我发现了如何使用 ps -ef 列出所有进程,以及如何获取特定进程的 RUID 或 EUID。
但是如何才能看到帮我实现ls命令的进程呢?如果我先执行 ls 然后执行 ps,则 ls 进程已经完成并且唯一事件的进程是 ps 和 ssh 进程...
我也不知道作业中的文件是什么意思。
您必须确保 ls
至少需要一些时间。您可以尝试 ls -R
(递归)包含一些数据的目录。一旦找到合适的目录(使用 /
作为最后的手段,但它可能非常长)启动 ls
和 ps
通过 ssh
,ls
发送到后台:
$ ssh host "ls -R >>/dev/null & pstree -u user" | grep ls
sshd---bash-+-ls
您会看到创建了一个 sshd
进程,以及一个 bash
进程,最后是一个 ls
进程。
寻找EUID和RUID;使用以下构造:
$ ssh host "ls -R >> /dev/null & ps -o ruid,euid -p \$!"
RUID EUID
501 501
注意 $!
返回最后一个命令的 pid(这里是 ls
),它需要用 \
转义,因为我们这样做不希望它在本地计算机上解析,而是在远程计算机上解析。
要查找打开了哪些文件,您可以使用 strace
或 lsof
而不是 ps
的相同构造(留作练习,请参阅man strace
, man lsof
) 序列中的每个进程 (sshd
, bash
, ls
),也许还有本地 ssh
命令。