黑白格子

  • 首页
  • 所有文章
  • 文章分类
  • 关于页面
  • 友链

  • 搜索
随笔 脚本 Shell MAC IE SSL iptables 网络 k8s docker ubuntu web 镜像 Nginx Linux Windows cloud-init

linux下 debug 工具 strace 应用之【查找命令依赖库文件】

发表于 2020-06-19 | 分类于 Linux | 3 | 阅读次数 216

Strace 是linux系统中一个用来跟踪系统调用的简易工具,它最简单的用途就是跟踪一个程序整个生命周期里所有的系统调用,并把调用参数和返回值以文本的方式输出

当然它还可以做更多的事情:

  • strace 可以过筛选出特定的系统调用。
  • strace 可以记录系统调用的次数,时间,成功和失败的次数。
  • strace 可以跟踪发给进程的信号。
  • strace 可以通过pid附加到任何正在运行的进程上

问题背景:

centos下执行rpm命令时提示缺失 libplds4.so 的库文件,这导致系统命令执行失败
root@BJ-CentOS7 ~ # rpm -aq | grep ssh
rpm: error while loading shared libraries: libplds4.so: cannot open shared object file: No such file or directory

image.png

分析解决:

1. 在系统中通过 find 命令查找 libplds4.so 文件,发现文件实际是存在的,但是执行命令怎么还是报错没有这个文件呢?
root@BJ-CentOS7 ~ # find / -name libplds4.so
/usr/lib64/libplds4.so   (这里)
2. 通过 strace 命令追踪 rpm 命令执行过程,发现这里调用的文件绝对路径是 /lib64/libplds4.so ,原因是 /lib64 目录是 /usr/lib64 软链过来的,find 命令默认不查找软链目录,而系统命令调用系统库文件实际绝对路径是软链后的路径,核查发现只是软链后的 /lib64 目录下 libplds4.so 文件丢失了,这里从别的系统导入或从 /usr/lib64 目录下cp、ln一个对应文件到 /lib64 目录解决问题

查看 /lib64 目录是 /usr/lib64 的链接目录(文件权限第一位为 l 代表该文件/目录是链接文件/目录)
image.png
使用 strace 命令追踪系统命令执行调用的系统文件路径(参数 -e open 用于观察目前进程正引用哪些文件)

root@BJ-CentOS7 ~ # strace -e open rpm -qa | grep ssh
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/librpm.so.3", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/librpmio.so.3", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libselinux.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libcap.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libacl.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libdb-5.3.so", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libbz2.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libelf.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/liblzma.so.5", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/liblua-5.1.so", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libnss3.so", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libpopt.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libz.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libdl.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libpcre.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libattr.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libnssutil3.so", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libplc4.so", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/libplds4.so", O_RDONLY|O_CLOEXEC) = 3         libplds4.so文件的绝对路径获取到了
open("/lib64/libnspr4.so", O_RDONLY|O_CLOEXEC) = 3
open("/lib64/librt.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/proc/filesystems", O_RDONLY)     = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/usr/lib/rpm/rpmpopt-4.11.3", O_RDONLY) = 3
... ...
  • 本文作者: 黑白格子
  • 本文链接: https://www.clhuang.cn/?p=56
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0 许可协议。转载请注明出处!
# 随笔 # 脚本 # Shell # MAC # IE # SSL # iptables # 网络 # k8s # docker # ubuntu # web # 镜像 # Nginx # Linux # Windows # cloud-init
Windows 2008 突破windows远程桌面会话主机120天试用期限制
wget 批量下载文件
黑白格子

黑白格子

54 日志
11 分类
17 标签
Creative Commons
0%
© 2021 黑白格子
主题 - NexT.Mist
网站已稳定运行:
陕ICP备16020191号