我是Linux Shell的新手,并且在某项任务中遇到了困难: 我们应该使用ssh连接到linux机器。然后我们应该发出ls命令并使用ps和pstree来查看我们在机器中创建的进程以使ls命令工作。然后我们需要找出这些过程的RUID和EUID。并解释在途中访问了哪些文件以及原因。
我知道网上有很多关于shell命令的文档,所以当然我尝试先使用google解决问题。我发现了如何使用ps -ef列出所有进程,以及如何获取特定进程的RUID或EUID。 但是,我怎样才能看到帮助我实现ls命令的进程?如果我首先执行ls然后执行ps,则ls进程已经完成,并且唯一的活动进程是ps和ssh进程... 我也不知道作业中的文件是什么意思。
答案 0 :(得分:2)
您必须确保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
使用相同的构造(左侧为exercice,请参阅man strace
,{{1 }}})序列中的每个进程(man lsof
,sshd
,bash
),也可能是本地ls
命令。
答案 1 :(得分:1)
我怀疑设置作业的人并没有真正考虑到这一点或试一试。
ls
在任何没有停留在20世纪80年代时间扭曲的机器上快速完成 ,那么你应该如何放慢速度呢?使用调试器?这是一项先进的技术。
此外,我将让您了解启动哪些进程以使ls
命令正常工作...... ls
。 那是。再说一遍,除非这是我从未听说过的20世纪80年代的一些奇怪的回归。
向投案人员投诉。