web-dev-qa-db-ja.com

lnを使用せずにシンボリックリンクを作成する方法

クリティカルシンボリックリンクを削除しました-libc.so.6。指しているファイルは持っていますが、lnwgetなどの基本的なコマンドは、リンクが見つからないため機能しなくなります。ただし、echoまたは他のBashビルトインは機能します。

このシンボリックリンクを再作成する方法を探しています。

31
Sebas

ldconfigを使用すると、シンボリックリンクが再作成されます。

# rm /lib/libc.so.6 
rm: remove symbolic link `/lib/libc.so.6'? y
# ls -l /lib/libc*
ls: error while loading shared libraries: libc.so.6: cannot open shared object file:
# ldconfig 
# ls -l /lib/libc*
[skip]
lrwxrwxrwx. 1 root root      12 May 11 07:59 /lib/libc.so.6 -> libc-2.12.so

ご覧のとおり、テストしました。

58
natxo asenjo

CentOS 6には通常、静的にリンクされたUnixツールのセットである busybox/sbinにインストールされています。次のように実行できます。

/sbin/busybox ln -s libc-2.12.so /lib/libc.so.6
44
Mark Plotnick

LD_PRELOADを設定して、関連するライブラリをプリロードします。私はそれをlibpthreadで試しましたが、うまくいくようです:

root@spirit:~# mv /lib/x86_64-linux-gnu/libpthread.so.0 /lib/x86_64-linux-gnu/libpthread.so.0-bak
root@spirit:~# chattr
chattr: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory
root@spirit:~# LD_PRELOAD=/lib/x86_64-linux-gnu/libpthread.so.0-bak chattr
Usage: chattr [-RVf] [-+=AaCcDdeijsSu] [-v version] files...
23

slnはまさにその目的を果たします。重要なシンボリックリンクを壊したために通常のlnを使用できない場合にシンボリックリンクを修正します。 manページを引用するには:

説明

  The  sln  program creates symbolic links.  Unlike the ln(1) program, it
  is statically linked.  This means that if for some reason  the  dynamic
  linker  is  not  working,  sln  can  be  used to make symbolic links to
  dynamic libraries.
21
aru

LD_LIBRARY_PATH変数は、実際のディレクトリを含みますlibc.so.6は:

 export LD_LIBRARY_PATH="/dir/for/libc.so.6/:$LD_LIBRARY_PATH"

また、ldconfigを実行してリンクを再作成します。これでコマンドが機能するようになり、lnコマンドを使用してシステムを修正できるようになります。

別の方法は、LiveCDを介して起動し、そこにファイルをリンクすることです。

8
phoops