Przypadkowo zmieniłem nazwę katalogu /usr
na /usr_bak
.
Chcę to zmienić z powrotem, więc dołączam ścieżkę, /usr_bak/bin
aby $PATH
system mógł znaleźć polecenie sudo
.
Ale teraz sudo mv /usr_bak /usr
daje mi błąd:
sudo: error while loading shared libraries: libsudo_util.so.0: cannot open shared object file: No such file or directory
Czy istnieje sposób, aby zmienić nazwę /usr_bak
jak /usr
oprócz ponownej instalacji systemu?
sudo
ogóle dostał się do etapu biblioteki, zwykle jest/usr/bin/
i powinien się nie udać z błędem braku polecenia. Ponadto, czy masz ustawione hasło roota?not found
więc dołączyłem nową ścieżkę/usr_bak/bin
do,$PATH
a teraz pojawia się błąd w moim poście tutaj .../usr
Ubuntu 16.04, aby zastąpić/usr
Ubuntu 17.10 ...Odpowiedzi:
Ponieważ ustawiłeś hasło dla roota, użyj
su
ibusybox
, domyślnie zainstalowany w Ubuntu. Wszystkiesu
wymagane biblioteki są w/lib
. Busybox to zbiór narzędzi, które są połączone statycznie, więc brak bibliotek nie powinien stanowić problemu. Zrobić:(Chociaż sam Busybox ma również
su
aplet,/bin/busybox
plik binarny nie jest setuid, więc nie działa, chyba że jest uruchamiany jako root).Jeśli nie masz hasła roota,
prawdopodobnie możesz użyć rozwiązania Gillesa tutaj, używając(LD_LIBRARY_PATH
lubGilles mówi, że to nie będzie działać z setuidowymi plikami binarnymi, takimi jak sudo), uruchom ponownie i edytuj menu GRUB, aby uruchomićinit=/bin/busybox
jako parametr jądra i przenieść folder z powrotem.źródło
/lib
.LD_LIBRARY_PATH
nie pomoże uruchomić sudo, ponieważsudo
jest setuid. Jeśli jego biblioteki nie są we właściwym miejscu, sudo nie będzie działać, dopóki root go nie naprawi./sbin
dla dokładnie tego rodzaju scenariusza: „Robię pewne czynności, w których biblioteki wykonawcze będą żonglowane, ale nadal trzeba manipulować plikami ”. Zasadniczo to samo podejście przed wynalezieniem Busybox. (Liczba poleceń dostępnych w ten sposób była bardzo ograniczona, ponieważ te statycznie połączone pliki binarne/lib
, prawdopodobnie będziesz musiał ponownie uruchomić komputerinit=/bin/busybox
Oprócz odpowiedzi muru :
mógłbyś użyć klucza USB rozruchu awaryjnego do naprawy systemu; na przykład, jeśli Twój system jest jakiś Debian lub Ubuntu, uruchom klucz USB instalacji w trybie ratunkowym, i wykonaj odpowiednie
mount
imv
iumount
.aby móc łatwiej naprawiać takich błędów, to na ogół również instalowanie statycznego powłokę z kilku wbudowanych poleceń (w szczególności niektóre
cp
,rm
,mv
-jak builtins), takie jaksash
(jest to pakowane w Debianie i Ubuntu, a także dostępne w skrzydle-3.8. tar.gz w formie źródłowej) i uruchom zinit=/bin/sash
przekazanym do Grub.PS:
sash
jest nieco wadliwy i nie do końca zgodny z Posix, ale nadal bardzo przydatny.źródło
apt-get install sash
. Ale możesz również pobrać sash-3.8.tar.gz i skompilować go.Myślę, że najbezpieczniejszym sposobem jest ponowne uruchomienie przy użyciu systemu operacyjnego uruchamianego z dysku USB, CD lub DVD (Debian, Ubuntu, Suse itp.). Następnie zamontuj dysk zawierający problemy i zmień nazwę.
Bezpieczniejsze niż uruchamianie na polu minowym przy braku / usr lub / lib.
źródło
Wpadłem na podobny problem, gdzie przemianowano
/usr/bin
do/usr/bin_bkp
jakiegoś testu, a potem nie był w stanie zmienić nazwę (jak komenda nie znaleźćsudo
w standardowym katalogu, który jest/usr/bin
), a następnie udałem się do/usr/bin_bkp
katalogu ręcznie (za pomocą menedżera plików ) i większość funkcji (w tym zmiana nazwy) prawym przyciskiem myszy jest wyłączona.Następnie wypróbowałem następujące polecenie i rozwiązało to problem
Przywołałem sudo z bieżącej ścieżki i zadziałało, teraz wszystko wróciło do normy.
System operacyjny: Xubuntu 14.04
źródło
Nie mogę teraz tego wypróbować (i nie jestem pewien, czy chciałbym), ale wydaje się, że powinno się stworzyć nowe „/ usr” jako twardy link (nie miękki link) do twojego „ / usr_bak, a następnie usuń „/ usr_bak”
Twardy link utworzony przez „ln” ( bez argumentu „-s”) w systemie plików powinien sprawić, że zarówno katalog usr, jak i usr_bak będą równie poprawne dla odnośnych katalogów. „rm” usuwa tylko jeden link, o który prosiłeś, aby go usunąć, a nie oba. Ponieważ nadal istnieje prawidłowy link do treści, powinny one pozostać dostępne poprzez pozostały link w „/ usr”.
źródło
.
i..
, więc liczba linków w katalogu informuje o liczbie katalogów pierwszego poziomu). Ponadtorm
nie działa na katalogach, musisz użyćrmdir
. (ln
irm
pracujemy nad dowiązaniami symbolicznymi do katalogów, ale mówimy o prawdziwym katalogu). To również nie rozwiązuje problemu, ponieważ wymagaroot
podobniemv
, ze względu na uprawnienia na/
. Jeśli potrafisz to uruchomić, możeszmv
zamiast tego biegać jak normalna osoba.ln(1)
na Debianie mówi to dla opcji-d
/-F
/--directory
: „zezwól superużytkownikowi na próbę twardego łączenia katalogów (uwaga: prawdopodobnie nie powiedzie się z powodu ograniczeń systemowych, nawet dla superużytkownika)” . Więc możesz spróbować, ale twój system plików prawdopodobnie nie pozwala.