在寻找修补 OpenSSL 后需要重新启动的服务的检测方法时,我偶然发现了这两个命令的返回之间的差异:
[root@host ~]# cat /proc/1/maps 7f751546c000-7f7515478000 r-xp 00000000 fd:01 5170 /lib64/libnss_files-2.12.so (已删除) 7f751567a000-7f7515804000 r-xp 00000000 fd:01 360 /lib64/libc-2.12.so(已删除) 7f7515a09000-7f7515a0e000 读写 00000000 00:00 0 7f7515a0e000-7f7515a24000 r-xp 00000000 fd:01 14847 /lib64/libgcc_s-4.4.7-20120601.so.1 7f7515c24000-7f7515c2b000 r-xp 00000000 fd:01 5173 /lib64/librt-2.12.so(已删除) ... [root@主机~]# lsof -p 1 命令 PID 用户 FD 类型 设备大小/关闭 节点名称 初始化 1 根 cwd DIR 253,1 4096 2 / 初始化 1 根 rtd DIR 253,1 4096 2 / 初始化 1 根 txt REG 253,1 150352 534 /sbin/init 初始化 1 根 DEL REG 253,1 5170 /lib64/libnss_files-2.12.so init 1 root DEL REG 253,1 360 /lib64/libc-2.12.so init 1 根内存 REG 253,1 90880 14847 /lib64/libgcc_s-4.4.7-20120601.so.1 初始化 1 根 DEL REG 253,1 5173 /lib64/librt-2.12.so ...
为什么第一个说已被删除,而另一个却没有?
我还想补充一点,上次系统重新启动比这些文件的上次修改时间更近,这往往让我认为它们自上次启动以来尚未被删除......
答案1
lsof
列表打开文件,以及映射(2)可以在文件描述符关闭甚至unlink
-ed (它使用 i 节点)后访问数据,但/proc/$PID/maps
尝试显示有关它们的一些信息。