`ls` 导致特定目录的分段错误

Tua*_*-Vu 6 linux redhat ls segmentation-fault

我用作$HOME/.local前缀来安装一些没有root访问权限的应用程序。里面有一个目录$HOME/.local我不能执行ls命令:

[tuananh@server lib]$ ls
Segmentation fault
[tuananh@server lib]$ cd ..
[tuananh@server .local]$ ls lib
audit                    libform.a         
libncurses.a             libopenblas.so.0
...
[tuananh@server .local]$ 
Run Code Online (Sandbox Code Playgroud)

这可能是什么原因?uname -a对于我的服务器:

Linux server 2.6.32-358.2.1.el6.x86_64 #1 SMP Tue Mar 12 14:18:09 CDT 2013 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

编辑: 的输出LD_TRACE_LOADED_OBJECTS=1 ls。我发现了一些从这个目录加载的库。那么现在我应该怎么做才能找到导致问题的那个?

linux-vdso.so.1 =>  (0x00007fff831b8000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003d94800000)
librt.so.1 (0x00007fdcde5a3000)
libcap.so.2 => /lib64/libcap.so.2 (0x0000003d95c00000)
libacl.so.1 => /lib64/libacl.so.1 (0x0000003d97c00000)
libc.so.6 (0x00007fdcde1f5000)
libdl.so.2 (0x00007fdcddff1000)
/lib64/ld-linux-x86-64.so.2 (0x0000003d92c00000)
libpthread.so.0 (0x00007fdcdddd3000)
libattr.so.1 => /lib64/libattr.so.1 (0x0000003d96800000)
Run Code Online (Sandbox Code Playgroud)

Flo*_*aie 9

很可能您在其中安装了一些库,当您在其中执行命令时,这些库会被加载而不是系统库,并且它与系统中的命令二进制不兼容。这可能与 glibc 左右有关。

您可以通过运行LD_TRACE_LOADED_OBJECTS=1 ls并检查输出以查看它是否包含当前目录中的任何文件来确认这一点。

  • 您可以为 libs 和 coreutils 安装调试包并使用 gdb。没有把握。可能有一些更简单的方法,但如果是我,我会创建一个 bash 循环,一个一个地获取库并查看问题何时解决。请注意,可能有多个,因此您可能需要通过库递归循环多次才能准确查看。 (2认同)