ln を使用せずにシンボリック リンクを作成するにはどうすればよいでしょうか?

ln を使用せずにシンボリック リンクを作成するにはどうすればよいでしょうか?

重要なシンボリック リンク - を削除しましたlibc.so.6。リンク先のファイルはありますが、リンクがないため、lnや などの基本コマンドは機能しません。ただし、やその他の Bash 組み込みコマンドは機能します。wgetecho

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

答え1

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

ご覧のとおり、テストしたところです。

答え2

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

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

答え3

関連するライブラリをプリロードするには、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...

答え4

LD_LIBRARY_PATH変数を設定して、実際のディレクトリを含めることができますlibc.so.6

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

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

別の方法としては、LiveCD 経由で起動し、そこにファイルをリンクする方法があります。

関連情報