2012-09-03 12 views
15

Na naszym serwerze symboliczny link do libc.so.6 został usunięty. Teraz żaden z plików binarnych w systemie nie działa. Aby rozwiązać ten problem, próbowałem:Jak odzyskać po usunięciu dowiązania symbolicznego libc.so.6?

/bin/ln -s /lib/libc-2.11.3.so /lib/libc.so.6 

które, zgodnie z oczekiwaniami, daje mi:

Próbowałem również:

/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 

z takim samym skutkiem. Dalsze nieudane próby obejmują cp, mv, cat.

Jestem podłączony przez ssh i uważam, że nie będę mógł otworzyć kolejnej sesji po zamknięciu tego. Czy istnieje sposób naprawienia tego systemu (prawdopodobnie przy użyciu wbudowanych bash)?

[edit] Zrobiłem:

while read line; do echo $line; done < /lib/libc-2.11.3.so > libc.so.6 

skopiować plik i próbował z:

/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 

i otrzymała:

/bin/ln: error while loading shared libraries: ./libc.so.6: ELF file OS ABI invalid 
+2

Możesz użyć statycznego pliku binarnego, np.statycznie połączoną powłokę "sash" (którą instalowałbyś wcześniej), która zawiera wbudowaną komendę 'cp' -inne –

+0

Twoje' echo' potrzebuje '-nE' lub doda nowe linie do wyjścia, którego nie masz chce i może interpretować ucieczki – Hasturkun

+0

kopiowanie plików z read/echo nie czyni go wykonalnym ... –

Odpowiedz

27

Można po prostu uruchomić ldconfig. Większość dystrybucji wysyła to jako statyczny plik binarny.

+2

Z wyjątkiem Ubuntu. Tak więc to nie działa – Matt

+0

działa dobrze z Debianem 7, dzięki! –

+2

ale co, jeśli potrzebujesz sudo do tego, co nie działa ... –

4

Boot za pomocą live CD jak Knoppiksa lub cokolwiek innego i napraw brakujące łącze po zamontowaniu dysku z "uszkodzonym" systemem działający system live.

+1

dziękuję, ale w tej chwili szukam sposobu, aby to naprawić przez moją otwartą sesję ssh :( – perreal

+0

Może masz statycznie połączony plik binarny perl, python, lua, ...? – wollud1969

+5

Ach! Co powiesz na LD_PRELOAD: env LD_PRELOAD =/lib/libc.so.6 ln -s ... – wollud1969

9

Pomogło to w moim przypadku (faktyczna wersja zależy od biblioteki):

ldconfig -l -v /lib/libc-2.13.so 
+0

To dało mi 'ldconfig: Can not lstat /lib/libc-2.13.so: Brak takiego pliku lub katalogu', znalazłem plik o nazwie 'libc-2.17.so' ale to daje mnie ten sam błąd, więc myślę, że błąd odnosi się do 'lstat' brakuje? – pzkpfw

8

Spróbuj:

LD_PRELOAD=/lib/libc-2.17.so ln -s /lib/libc-2.17.so /lib/libc.so.6 

Uwaga: Aktualna wersja zależy od biblioteki.

+1

permisson denied –

3

Uwaga, do 64 bitów:

LD_PRELOAD=libc-2.13.so ln -s libc-2.13.so libc.so.6

Ten pracował dla mnie świetnie

Jeśli nie jesteś w tym katalogu oczywiście będzie to coś jak:
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

2

Jeśli wcześniej wykonałeś polecenie ls i wiesz, jaka jest wersja libc,

ldconfig -l -v /lib64/libc-2.x.so 

gdzie x jest twoja wersja działa. Zauważ, że może to być lib64 lub lib w zależności od twojej wersji.

Po prostu to zrobiłem i zadziałało.

Krótko mówiąc, nigdy nie usuwaj linku. Kiepski pomysł.

+0

to działa dla mnie, thx !! –

Powiązane problemy