Ich habe das Verzeichnis versehentlich /usr
in umbenannt /usr_bak
.
Ich möchte es wieder ändern, also füge ich den Pfad /usr_bak/bin
an $PATH
, damit das System den Befehl finden kann sudo
.
Aber jetzt sudo mv /usr_bak /usr
gibt mir den Fehler:
sudo: error while loading shared libraries: libsudo_util.so.0: cannot open shared object file: No such file or directory
Gibt es eine Möglichkeit das benennen , /usr_bak
wie /usr
neben der Neuinstallation des Systems?
sudo
überhaupt zur Bibliotheksbühne gekommen ist, sie ist normalerweise in/usr/bin/
und hätte mit einem nicht gefundenen Fehler fehlschlagen sollen. Haben Sie auch ein Root-Passwort festgelegt?not found
vor , so hängten ich den neuen Pfad/usr_bak/bin
zu$PATH
und jetzt bekomme ich den Fehler in meinem Beitrag hier .../usr
von Ubuntu 16.04 kopieren kann , um das/usr
von Ubuntu 17.10 zu überschreiben ...Antworten:
Da Sie ein Passwort für root festgelegt haben, verwenden Sie
su
undbusybox
, standardmäßig in Ubuntu installiert. Allesu
benötigten Bibliotheken befinden sich in/lib
. Busybox ist eine Sammlung von Dienstprogrammen, die statisch verknüpft sind, sodass fehlende Bibliotheken kein Problem darstellen sollten. Machen:(Während Busybox selbst auch ein
su
Applet hat, ist die/bin/busybox
Binärdatei nicht setuid und funktioniert daher nur, wenn sie als root ausgeführt wird.)Wenn Sie kein root-Passwort haben, können
Sie möglicherweise die Gilles-Lösung hier verwenden(Gilles sagt, dass dies mit setuid-Binärdateien wie sudo nicht funktioniert), starten Sie das GRUB-Menü neu und bearbeiten Sie es, um esLD_LIBRARY_PATH
, oderinit=/bin/busybox
als Kernel-Parameter zu booten und zu verschieben den Ordner zurück.quelle
/lib
.LD_LIBRARY_PATH
würde nicht helfen, sudo auszuführen, dasudo
setuid ist. Wenn sich die Bibliotheken nicht am richtigen Ort befinden, funktioniert sudo erst, wenn root es repariert./sbin
für genau diese Art von Szenario: „Ich mache etwas Aktivität , wo Laufzeitbibliotheken um jongliert werden aber müssen noch Dateien manipulieren. " Grundsätzlich der gleiche Ansatz, bevor Busybox erfunden wurde. (Die Anzahl der auf diese Weise verfügbaren Befehle war sehr begrenzt, da diese statisch verknüpften Binärdateien Speicherplatz verschlingen.)/lib
, müssten Sie wahrscheinlich neuinit=/bin/busybox
Zusätzlich zu Murus Antwort :
Sie hätten einen Notfall-Boot-USB-Stick verwenden können, um Ihr System zu reparieren. Wenn es sich bei Ihrem System beispielsweise um Debian oder Ubuntu handelt, starten Sie den Installations-USB-Stick im Rettungsmodus und führen Sie die entsprechenden Schritte
mount
undmv
und ausumount
.im allgemeinen auch eine statische Schale mit mehreren eingebauten Befehlen installiert (vor allem mit einigen zu können , leichter , solche Fehler reparieren, ich
cp
,rm
,mv
-ähnlichen builtins) wiesash
(es ist verpackt in Debian & Ubuntu und auch als Flügel-3.8. tar.gz in Quellform) und booten mitinit=/bin/sash
an Grub übergeben.PS:
sash
ist leicht fehlerhaft und nicht vollständig Posix-konform, aber dennoch sehr nützlich.quelle
apt-get install sash
. Sie können aber auch sash-3.8.tar.gz herunterladen und kompilieren.Ich denke, der sicherste Weg ist, einen Neustart mit einem über USB, CD oder DVD gebooteten Betriebssystem (Debian, Ubuntu, Suse usw.) durchzuführen. Hängen Sie dann das Laufwerk mit den Problemen ein und benennen Sie es um.
Sicherer, als in ein Minenfeld zu booten, in dem / usr oder / lib fehlen.
quelle
Ich lief in ein ähnliches Problem , wo ich umbenannt ,
/usr/bin
um/usr/bin_bkp
für einigen Test und dann war ich (wie der Befehl die nicht das fand umbenennen nicht in der Lagesudo
im Standardverzeichnis , das ist/usr/bin
) und dann ging ich in das/usr/bin_bkp
Verzeichnis manuell (Dateimanager ) und die meisten Funktionen (einschließlich des Umbenennens) beim Klicken mit der rechten Maustaste sind deaktiviert.Dann habe ich den folgenden Befehl ausprobiert und das Problem behoben
Ich habe das Sudo aus dem aktuellen Pfad aufgerufen und es hat funktioniert, jetzt ist alles wieder normal.
OS: Xubuntu 14.04
quelle
Ich kann das momentan nicht ausprobieren (und bin mir nicht sicher, ob ich das möchte), aber es scheint, als müsste es funktionieren, um sich ein neues "/ usr" als harten Link (kein weicher Link) zu Ihrem " zu erstellen. / usr_bak, dann lösche "/ usr_bak"
Durch die von "ln" ( ohne "-s" -Argument) im Dateisystem erstellte feste Verknüpfung sollten sowohl das Verzeichnis "usr" als auch das Verzeichnis "usr_bak" gleichermaßen gültige Verknüpfungen zu den betreffenden Verzeichnissen aufweisen. "rm" entfernt nur den einen Link, den Sie entfernen möchten, nicht beide. Da es immer noch einen gültigen Link zu den Inhalten gibt, sollten sie über den verbleibenden Link unter "/ usr" erreichbar bleiben.
quelle
.
und..
, daher gibt die Anzahl der Links in einem Verzeichnis die Anzahl der Unterverzeichnisse der ersten Ebene an). Funktioniert auchrm
nicht für Verzeichnisse, die Sie verwenden müsstenrmdir
. (ln
undrm
arbeite an Symlinks zu Verzeichnissen, aber wir sprechen über ein tatsächliches Verzeichnis). Auch das löst das Problem nicht, weil esroot
genau so erfordertmv
, wegen der Berechtigungen auf/
. Wenn Sie dies ausführen könnten, könnten Siemv
stattdessen wie eine normale Person ausgeführt werden.ln(1)
on Debian sagt dies für die Option-d
/-F
/--directory
: " Erlaube dem Superuser, zu versuchen, Verzeichnisse fest zu verknüpfen (Hinweis: Wird wahrscheinlich aufgrund von Systemeinschränkungen fehlschlagen, auch für den Superuser)" . Sie können es also versuchen, aber Ihr Dateisystem lässt Sie wahrscheinlich nicht zu.