确定运行perl可执行文件的来源

时间:2012-02-13 18:36:24

标签: perl

从服务器管理员的角度来看,我对此更感兴趣,而不是开发人员。

作为一个真实世界的例子,假设我在ps aux中有一行显示:

usercom  1696  0.1  0.2  34104  4556 ?        Ss   07:33   0:20 ./mail

这是perl脚本本身并不明显,但我可以通过执行“lsof -p 1696”来确定它(除了其他内容之外):

COMMAND  PID     USER   FD   TYPE     DEVICE    SIZE       NODE NAME

perl    1693 usercom  txt    REG       0,49   17326   99846241 /home/virtfs/usercom/usr/local/bin/perl

所以这告诉我这是一个在这个用户的perl解释器中运行的脚本(在openvz中)。

如果我查看此脚本的cwd,则会生成一个不包含“mail”可执行文件的目录。

问题有哪些技术可用于确定当前正在执行的perl代码的“来源”(从服务器管理员的角度来看)。我开始接受绝对没有办法绝对确定运行perl脚本的“源”,因为$ 0非常容易操作。另外,可以将代码管道输入perl或eval。尽管如此,有没有人知道跟踪perl脚本根目录的任何好方法?

1 个答案:

答案 0 :(得分:0)

在'lsof'的输出中查找'cwd'(当前工作目录)行。

localhost proc # ps ax | grep test
 4751 pts/18   S+     0:00 sh test.sh

localhost proc # lsof +p 4751
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
sh      4751 user  cwd    DIR    8,3    12288  4964356 /home/user
<CLIP>
localhost proc #    

只是为了验证我移动了脚本并再次尝试了。

user@localhost ~ $ mv test.sh bin/
user@localhost ~ $ cd bin
user@localhost ~/bin $ sh test.sh

localhost proc # ps ax | grep test
 4848 pts/18   S+     0:00 sh test.sh

localhost proc # lsof +p 4848
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
sh      4848 user  cwd    DIR    8,3     4096  4965757 /home/user/bin
<CLIP>
localhost proc # 

如果您不想依赖'lsof',可以查看'/ proc / $ pid /'目录并查看'cwd'符号链接的位置:

localhost 4848 # ls -l
total 0
<CLIP>
lrwxrwxrwx 1 user user 0 Feb 13 18:51 cwd -> /home/user/bin
<CLIP>
localhost 4848 # 

希望有帮助...

编辑:使用更改'$ 0'

的Perl脚本对此进行测试
user@localhost ~/bin $ ./test.pl 

localhost 4848 # ps ax | grep test
 5004 pts/17   S+     0:00 grep --colour=auto test

localhost 4848 # ps ax | grep bogus
 5002 pts/18   S+     0:00 bogus.pl
 5006 pts/17   R+     0:00 grep --colour=auto bogus

localhost 5002 # lsof +p 5002
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
test.pl 5002 user  cwd    DIR    8,3     4096  4965757 /home/user/bin
<CLIP>
localhost 5002 # 


localhost ~ # cd /proc/5002/
localhost 5002 # ls -l
total 0
<CLIP>
lrwxrwxrwx 1 user user 0 Feb 13 19:12 cwd -> /home/user/bin
<CLIP>

文件'/ proc / $ pid / status'包含原始脚本名称:

localhost 5002 # cat status
Name:   test.pl
<CLIP>
localhost 5002 #