【问题标题】:Cannot run any commands because I moved the libc.so file无法运行任何命令,因为我移动了 libc.so 文件
【发布时间】:2016-10-05 23:44:04
【问题描述】:

我有一个动态链接器,它是/lib64/libc.so.6

我愚蠢地将其重命名为/lib64/libc.so.6.old,现在没有任何命令起作用。

我无法通过 lsmv 将其重命名。

我可以运行ldconfig,但它说权限被拒绝,我不能运行sudosu - 我到底该怎么做才能解决这个问题?我正在运行 Oracle Linux redhat 6.7

【问题讨论】:

  • 你用谷歌搜索过这个吗?其他人也做过类似的事情并修复它。并在 StackOverflow 上发布了答案。例如,stackoverflow.com/questions/17387297/…
  • 也许 /sbin/ 或 /usr/sbin 中有可用的程序?也许有一个网络挂载可用于调用静态链接的二进制文件?或者只是一个静态链接的外壳?

标签: linux unix dynamic-linking


【解决方案1】:
 LD_PRELOAD=/lib64/libc.so.6.old mv /lib64/libc.so.6.old /lib64/libc.so.6

【讨论】:

    【解决方案2】:

    从恢复/安装 iso 开始,然后重命名文件。

    如果您无法重新启动或无法物理访问机器,您可以尝试安装 BusyBox https://busybox.net/FAQ.html#getting_started 的编译版本并使用其 su 和 mv 命令。由于 BusyBox 是静态链接的,它应该可以在没有 libc.so 的情况下工作。

    【讨论】:

    • 我如何在无法进入机器的情况下安装一些东西?
    • 在这种情况下“只是”复制二进制文件(如果没有 libc,这可能会非常困难。)但是 recovery-iso 绝对是更简单的方法。
    【解决方案3】:

    进入单用户模式,使用 rw 挂载文件系统,因为您知道重命名文件的位置 move /lib64/libc.so.6.old /lib64/libc.so.6

    【讨论】:

    • 如果 libc.so 已被移动,为什么 mv 应该在单用户模式下工作?
    【解决方案4】:

    我还建议使用@wildplasser 已经提到的安装点 的解决方法。

    如果您在损坏的主机上安装了目录,则可以使大多数命令行工具重新工作。如果您很幸运拥有一个,那么您只需将 libc-x.yz.so(您可以从 Internet 上的另一台主机获取)上传到共享中,将其重命名为 libc.so.6 并添加挂载目录到 LD_LIBRARY_PATH。

    如果 x.yz 版本与您不小心移动的版本相同,则 ls、cp 等命令将在您设置 LD_LIBRARY_PATH 的控制台中再次运行。您不应从该控制台注销,因为您将无法再次登录

    !请注意,setuid 命令行工具不起作用(请参阅https://askubuntu.com/a/1029363/832810)。不幸的是,“sudo”就是其中之一,这就是为什么你不能轻易地收回你长期受苦的 .so(除非你有一个 root# 控制台)。但是,它使您可以在进行硬恢复之前保存所有数据并完成所有操作。

    如果您设法完成上述技巧并且您有足够的时间,您可以尝试按照https://askubuntu.com/a/1030475/832810 的建议构建“sudo”的静态链接版本(甚至可能在另一台主机上构建并通过 NFS 复制)和使用 .so 将其移回。

    【讨论】:

      猜你喜欢
      • 2019-04-15
      • 2021-01-05
      • 1970-01-01
      • 2021-06-06
      • 1970-01-01
      • 2022-10-25
      • 1970-01-01
      • 2020-11-06
      • 2015-07-31
      相关资源
      最近更新 更多