我尝试过ls -l /proc/17301504
没有 exe 为我提供命令的完整路径。有没有办法像在 Linux 中一样在 Aix 5 及更高版本中获取命令的完整路径?
有一个.out,/proc/17301504/object
其中与命令具有相同的校验和,但没有给出完整路径。
答案1
文件/proc
系统本质上不可在操作系统之间移植。有些 Unices 根本不存在。
AIX 上的文件系统/proc
记录如下:https://www.ibm.com/support/knowledgecenter/en/ssw_aix_61/com.ibm.aix.files/proc.htm
关于子目录a.out
中的文件object
,它说:
[...] 该名称
a.out
还作为与正在运行的进程的文本关联的可执行文件的同义词出现在目录中。该
object
目录使控制进程可以访问目标文件和任何共享库(以及符号表),而无需进程首先获取这些文件的特定路径名。
这意味着访问a.out
该结构中的文件或多或少与您想要执行的操作相反。它允许用户程序在不知道进程的完整路径的情况下访问进程的可执行文件。
AIX 上还有/proc
包含可执行文件的基本名称的结构,但同样,这不是您感兴趣的内容。
由于进程可以设置自己的第零个命令行参数(在 中显示的进程名称ps
),因此使用ps
也不是找到正在运行的可执行文件的绝对路径的可靠解决方案,即使它是使用完整路径执行的。
你什么可以do 是通过其 inode 来查找可执行文件。
当前接受的问题答案中描述了如何执行此操作的示例“如何在 AIX 5 或更高版本上通过 PID 识别可执行路径”。
最好问问自己为什么需要通过查询来获取此信息跑步过程,因为通过研究脚本或程序通常可以清楚地了解它正在调用哪些外部实用程序。
答案2
istat
使用以下命令获取索引节点和主/次编号/proc/<pid>/object/a.out
:
$ istat a.out
Inode 4694 on device 10/5 File
Protection: r-xr-xr-- Set UID
Owner: 0(root) Group: 0(system)
Link count: 1 Length 82411 bytes
Last updated: Fri May 4 13:58:53 PDT 2018
Last modified: Wed Nov 29 10:40:56 PST 2017
Last accessed: Wed Sep 5 14:51:07 PDT 2018
从主/次编号获取文件系统名称
$ ls -l /dev/* | grep 10, | grep ' 5 '
brw-rw---- 1 root system 10, 5 Jul 03 2017 /dev/hd2
crw-rw---- 1 root system 10, 5 Jul 03 2017 /dev/rhd2
$ df /dev/hd2
Filesystem 512-blocks Free %Used Iused %Iused Mounted on
/dev/hd2 10944512 2220824 80% 41861 4% /usr
从inode中获取文件名
$ find /usr -inum 4694 -exec /bin/ls -l {} \;
-r-sr-xr-- 1 root system 82411 Nov 29 2017 /usr/sbin/inetd