我创建了这个脚本,它侦听硬编码管道上接收到的字符,并尝试eval
这些字符。我将我的脚本称为loop_executor.sh
这就是它包含的全部内容:
!/bin/bash
while :
do
x=`cat /tmp/console_test`;
echo "received $x"
eval $x
done;
我双击执行我的脚本。
我想看看这个进程打开了哪些文件:
> $ pgrep loop_executor.sh
1234
> $ ll /proc/1234/fd
dr-x------ 2 userX domain^users 0 Oct 20 17:57 ./
dr-xr-xr-x 9 userX domain^users 0 Oct 20 17:57 ../
lr-x------ 1 userX domain^users 64 Oct 20 17:57 0 -> /dev/null
l-wx------ 1 userX domain^users 64 Oct 20 17:57 1 -> /dev/null
l-wx------ 1 userX domain^users 64 Oct 20 17:57 2 -> /home/local/groupX/userX/.xsession-errors
lr-x------ 1 userX domain^users 64 Oct 20 17:58 255 -> /home/local/groupX/userX/Desktop/loop_executor.sh*
lr-x------ 1 userX domain^users 64 Oct 20 17:57 3 -> pipe:[225812]
FD 3 指向“管道”。好吧,我知道它使用什么文件,因为我是在脚本中硬编码该文件的人,但我想从另一个来源获取此信息(如果可能)(因为我的脚本只是一个 POC,它可以是一个其代码不对我开放的进程)。
我的理解是,它pipe:[225812]
并不指向我的文件的索引节点。
ll -i /tmp/console_test
16519395 prw-r--r-- 1 userX domain^users 0 Oct 20 18:14 /tmp/console_test|
所以我的问题是:如果进程可以打开管道(我的系统上的文件),我可以确定这些管道“对应”哪些文件吗?
如果重要的话,我正在使用 ubuntu 12.04。
[编辑]
找到cat
从我的管道中读取的进程。它与其父进程具有相同的打开管道,因此这里没有太大区别 - >我仍然不知道只是通过查看pipe:[225812]
什么文件 - 如果有的话 - 那是。
答案1
您的脚本尚未/tmp/console_test
打开,但cat
进程已打开。您的脚本正在从连接到进程的管道中读取数据cat
;这就是你在问题中看到的。
搜索该cat
进程并检查该进程。
你可能想要这样的东西:
while read x; do
echo "received $x"
eval "$x"
done < /tmp/console_test
请注意参数周围添加的引号eval