Ответ 1
Вы можете просто запустить ldconfig
. Большинство дистрибутивов передают это как статический двоичный файл.
На нашем сервере символьная ссылка на libc.so.6
была удалена. Теперь ни один из двоичных файлов в системе не работает. Чтобы исправить это, я попытался:
/bin/ln -s /lib/libc-2.11.3.so /lib/libc.so.6
который, как и ожидалось, дает мне:
/bin/ln: error while loading shared libraries: libc.so.6:
cannot open shared object file: No such file or directory
Я также пробовал:
/lib/ld-linux-x86-64.so.2 --inhibit-rpath /lib/libc.so.6 \
--library-path /lib/libc-2.11.3.so \
/bin/ln -s /lib/libc-2.11.3.so /lib/libc.so.6
с тем же результатом. Дальнейшие неудачные попытки включают cp, mv, cat.
Я подключен через ssh, и я считаю, что после закрытия этого сеанса я не смогу открыть еще одну сессию. Есть ли способ исправить эту систему (возможно, с помощью bash встроенных модулей)?
[ edit] Я сделал:
while read line; do echo $line; done < /lib/libc-2.11.3.so > libc.so.6
чтобы скопировать файл и попытался с помощью:
/lib/ld-linux-x86-64.so.2 --inhibit-rpath libc.so.6 --library-path . \
/bin/ln -s /lib/libc-2.11.3.so /lib/libc.so.6
и получил:
/bin/ln: error while loading shared libraries: ./libc.so.6: ELF file OS ABI invalid
Вы можете просто запустить ldconfig
. Большинство дистрибутивов передают это как статический двоичный файл.
Это помогло в моем случае (фактическая версия зависит от вашей библиотеки):
ldconfig -l -v /lib/libc-2.13.so
Try:
LD_PRELOAD=/lib/libc-2.17.so ln -s /lib/libc-2.17.so /lib/libc.so.6
Примечание. Фактическая версия зависит от вашей библиотеки.
Загрузитесь с помощью live cd, такого как Knoppix или что-то еще, и исправьте недостающее звено после установки диска с "сломанной" системой из работающей живой системы.
Примечание: для 64 бит:
LD_PRELOAD=libc-2.13.so ln -s libc-2.13.so libc.so.6
Это сработало отлично для меня
Если вы не в этом каталоге, конечно, это будет что-то вроде: LD_PRELOAD=/lib/x86_64-linux-gnu/libc-2.13.so ln -s /lib/x86_64-linux-gnu/libc-2.13.so /lib/x86_64-linux-gnu/libc.so.6
Если вы уже делали команду ls и знаете, что такое версия libc,
ldconfig -l -v /lib64/libc-2.x.so
где x
работает ваша версия. Обратите внимание, что это может быть lib64 или lib в зависимости от вашей версии.
Я просто сделал это, и это сработало.
Короче говоря, никогда не удаляйте ссылку. Плохая идея.
Большое спасибо за ответ ниже. Это работало хорошо с root ID. Мы отсоединяем libc.so.6
для связи с более libc.so.6
версией, но внезапно после отсоединения libc.so.6 сервер перестает отвечать на запросы. ln -s
не работала. Другие пользователи не смогли подключиться к серверу ssh. Но когда мы побежали ниже команды, это сработало. (с версией libc на сервере) сервер начал работать нормально.
Ниже приведена правильная команда и спасение жизни тоже....
LD_PRELOAD=/lib/libc-2.17.so ln -s /lib/libc-2.17.so /lib/libc.so.6
Примечание: фактическая версия зависит от вашей библиотеки
Если вы используете Ubuntu, ldconfig не будет работать. Просто беги:
/sbin/ldconfig.real