Unter Ubuntu 17.04 installierte ich eine Software von einer Nicht-Repository-Distribution. Ich sollte den Inhalt des Software-Ordners bin nach / usr / bin verschieben (was schon ein zweifelhafter Rat war).
Es ist einer dieser Tage, also was ich stattdessen getan habe:
mv /bin/* /usr/bin
Also habe ich es vermasselt und versehentlich alle Dateien in bin nach / usr / bin verschoben und / bin war leer. Da ich annehme, dass / bin systemkritisch ist, habe ich zur schnellen Behebung den Inhalt von / usr / bin nach / bin kopiert.
Jetzt sind meine / bin- und / usr / bin-Inhalte identisch und beide enthalten die ursprünglich in / bin und / usr / bin getrennten Dateien.
- Ist mein Ubuntu jetzt kaputt? (Ich habe noch nicht versucht, den Computer neu zu starten. Im Moment scheint alles noch zu funktionieren.)
- Gibt es eine Möglichkeit zu wissen, welche Dateien in letzter Zeit nach / usr / bin verschoben / kopiert wurden, sodass ich mich nur manuell um die Situation kümmern kann? 2.1 Gibt es normalerweise überlappende Dateien in / bin und / usr / bin?
- Gibt es andere Möglichkeiten, um das, was ich getan habe, rückgängig zu machen?
Ich habe Timeshift nicht installiert, daher ist das Wiederherstellen von Backups keine Option, aber derzeit ist auf dem Computer nichts kritisch, sodass ich nur zugeben kann, dass die gesamte Linux-Partition falsch installiert wurde.
/bin
ist systemkritisch. Der Inhalt muss zum frühestmöglichen Zeitpunkt vorhanden sein. Sie möchten keine symbolische Verknüpfung zu einer Partition (/usr
hier) erstellen, die beim Booten möglicherweise nicht eingehängt wird./bin
standardmäßig kein separates Verzeichnis. Ubuntus Standardpartitionierung erstellt keine separaten/usr
Partitionen. Ich bin gespannt, wie viele Leute/usr
mit einer modernen Distribution tatsächlich eine Trennung vornehmen .Antworten:
Ja, dein Ubuntu ist kaputt
Sie haben etwas für die Paketverwaltung Wichtiges durcheinander gebracht .
Sichern Sie also in der Praxis Ihre wichtigen Daten (zumindest
/etc
und/home
), möglicherweise auch die Liste der installierten Pakete, z. B. die Ausgabe vondpkg -l
, und installieren Sie Ubuntu neu.(Ein Nicht-Anfänger könnte versuchen, es zu schaffen - wie in anderen Antworten -, aber dann hätte er keinen so großen und grundlegenden Fehler begangen.)
Das würde wahrscheinlich weniger Zeit in Anspruch nehmen. Wenn Sie Ihr aktuelles System mithilfe anderer Antworten erhalten, bleibt es in einem sehr chaotischen Zustand (der Ihnen in Zukunft Kopfschmerzen bereiten würde).
Da Sie Ihre Festplatte neu formatieren, ziehen Sie in Betracht,
/home
eine separate Partition einzurichten (damit bei zukünftigen Fehlern Ihre Daten nicht verloren gehen). Bevor Sie dies tun, drucken Sie auf Papier die Ausgabe vondf -h
unddf -hi
undfdisk -l
(sie geben Auskunft über den verwendeten und verfügbaren Speicherplatz). Seien Sie weise, um eine ausreichend große Systempartition (das Root-Dateisystem) zu haben; Wenn Sie es sich leisten können, sind 100 GB mehr als genug.(Terminologie: Unix hat Verzeichnisse, keine "Ordner").
Die ( bewegend zu
/usr/bin/
) ist sehr falsch. Entweder verbessern Sie Ihre $ PATH (vorzugsweise) oder höchstens Add Symlinks in/usr/bin/
und vorzugsweise bewegen (oder fügen Sie Symlinks) ausführbare Dateien/usr/local/bin/
.Der weise Ansatz ist es , nie ändern
/usr/bin/
,/bin
,/sbin
,/usr/sbin/
außerhalb der Paket - Management - Tool (zBdpkg
,apt-get
,aptitude
, etc ...). Lesen Sie die FHS .quelle
/bin
und/usr/bin
jetzt identisch sind, bin ich mir nicht sicher, warum die Paketverwaltung vermasselt werden würde. Gibt es wirklich einen Fall, wo/bin/foo
und/usr/bin/foo
werden beide durch ein Paket (e) bereitgestellt. Wenn nicht, gibt es nur ein paar zusätzliche Dateien./
Partition meines Hauptsystems ist 12 GB groß und ich habe nie Speicherplatzprobleme bekommen, obwohl ich sie für die Entwicklung (zum Lesen von Header-Dateien und vielen Tools) von Office und Design (zum Lesen schwerer Tools) unter KDE (zum Lesen der schlanksten) verwendet habe. Werfen Sie 4 GB mehr ein, wenn Sie nicht aufteilen/var
, blähen Sie sich um 25% auf, wenn Sie eine größere Marge als ich haben möchten, und mit 20 GB sind Sie mehr als gut.Unter Linux (und auf den meisten anderen Systemen, obwohl POSIX Ihnen diese Garantie nur dann bietet, wenn der Wechsel zwischen Dateisystemen stattgefunden hat) hätte dies die Uhrzeit aktualisiert, vorausgesetzt, keiner der anderen
/usr/bin
in den letzten 24 Stunden wurde berührt , sollten Sie in der Lage sein, sie zurück zu verschieben mit:Entfernen Sie das,
echo
wenn das richtig aussieht. Beachten Sie, dass Sie die Dateien mit demselben Namen in/bin
und nicht wiederherstellen können/usr/bin
(die ursprünglichen Dateien in/usr/bin
wären verloren gegangen).Eine mögliche Einschränkung: Wenn einige Dateien in beiden
/bin
und/usr/bin
fest verknüpft/usr/bin
wären, würden alle festen Verknüpfungen in verschoben/bin
.Nun können Sie sich vorstellen, dass es keine Rolle spielen sollte, ob sich die ausführbaren Dateien in statt befinden , da
/bin
und/usr/bin
in der Standardeinstellung$PATH
sind und mindestens vor dem Mounten/bin
verfügbar sind ./boot
/usr
/bin
/usr/bin
Aber das würde übersehen, dass viele Befehle die Pfade von ausführbaren Dateien hart codieren und erwarten, dass sie in einem bestimmten Fall vorliegen. Ein häufiger Fall ist sie-Pony. Alle Skripte mit:
wird nicht funktionieren, nachdem Sie tun
mv /usr/bin/env /bin/env
. In dieser Hinsicht ist es sicherer, die Befehle an beiden Orten zu haben, da diese Skripte nicht beschädigt werden.quelle
i
--sorry about that! Zu verschieben), auf GNU / Linux-Systemen wie Ubuntu, die man möglicherweise verwendet,find /usr/bin/. ! -name . -prune -ctime -1 -exec echo mv -it /bin {} +
da GNU Coreutilsmv
unterstützt-t
. Andere Betriebssysteme unterstützen dies im Allgemeinen nicht und funktionieren auch nicht in dermv
von BusyBox bereitgestellten Alternative .Ihre Installation sollte größtenteils in Ordnung sein. Es sollte keine unterschiedlichen Dateien mit demselben Namen in
/usr
und geben/usr/bin
(was Ihrem 2.1 entspricht), sodass alle Dateien in beiden enthalten sind/bin
und/usr/bin
nichts kaputt gehen (bis Sie Pakete aktualisieren). Das einzige Problem, das Sie jetzt haben könnten, sind defekte Symlinks, wenn Sie eine Binärdatei mit einem Symlink darauf überschrieben haben. Um dies zu beheben, suchen Sie nach defekten Symlinks:und installieren Sie alle Pakete neu, die den aufgelisteten Dateien entsprechen (wenn
/usr/bin/zsh
sie beispielsweise als fehlerhaft angezeigt werden,dpkg -S /bin/zsh /usr/bin/zsh
werden Sie darüber informiert, von welchem Paket die Datei stammt; installieren Sie sie mitapt --reinstall install zsh
).Sie können nach ctime anzeigen und sortieren, um Dateien anzuzeigen, die kürzlich geändert wurden (einschließlich der von Ihnen verschobenen Dateien):
Der beste Weg, um das, was Sie getan haben, rückgängig zu machen, ist, das
cruft
Paket zu verwenden und Dateien zu löschen, die darin gefunden wurden/bin
oder/usr/bin
nicht aus einem Paket stammen:es sei denn, die Dateien sind Symlinks zu Dateien in
/etc/alternatives
(in diesem Fall sollten Sie sie in Ruhe lassen).quelle
#! /bin/sh
oder ähnlich beginnen.sh
in beiden/bin
und/usr/bin
(alle Dateien sind jetzt dupliziert).cruft
ist für diesen Job nicht erforderlich, da der Paketmanager auch die installierten Dateien verfolgt. Siehe unix.stackexchange.com/questions/153260/… .comm -12 <(ls /bin) <(ls /usr/bin)
zeige ein paar Einträge auf einem Ubuntu-System, auf dem ich es getestet habe. Einige mit/bin/foo -> /usr/bin/foo
welchen Mittelnfoo
wären verloren gegangen.Es mag lehrreich sein, herauszufinden, warum Ihr System mehr oder weniger kaputt ist.
/bin
denen sie sich befinden sollten/usr/bin
, und umgekehrt.$PATH
)./bin
und/usr/bin
gibt, besteht darin, dass sich Ersteres möglicherweise auf einer Partition befindet, die zu einem früheren Zeitpunkt des Startvorgangs bereitgestellt wurde. In diesem Kontext (dh beim Booten des Systems) würde/bin/xxx
wahrscheinlich nicht nur auf Binärdateien mit einem vollständigen Pfad verwiesen, sondern das Verzeichnis/usr/bin
ist zu diesem Zeitpunkt möglicherweise nicht auf dem System verfügbar. (Wenn Siedf /bin
unddf /usr/bin
das gleiche oder ein anderes Dateisystem sehen, belassen die meisten Standardinstallationen heutzutage beide Verzeichnisse auf derselben Partition.)Sie können also zweifellos sehen, dass die Probleme 2 und 3 nicht auftreten , wenn Sie in beiden und dieselben Binärdateien haben , und der Schaden von 1 möglicherweise geringfügig ist. Bei 1 werden Pakete möglicherweise nicht ordnungsgemäß deinstalliert, wenn Sie versuchen, sie zu entfernen. und Upgrades können verstümmelt werden, wenn das Upgrade versucht, die Kopie an der "richtigen" Stelle zu aktualisieren, die Kopie jedoch an der "falschen" Stelle ignoriert. Wenn die oben genannten Abhilfemaßnahmen zu drastisch oder zu kompliziert erscheinen, können Sie möglicherweise das System in diesem Zustand belassen.
/bin
/usr/bin
Aber wenn dies ein wichtiges System ist, würde ich mich wirklich nicht darauf verlassen.
Eine allgemeine Regel (wieder Echo @ Basile-starynkevitch) ist nie zu Affen mit
/usr/bin
,/bin
und Freunde - sie ‚gehört‘ die Verteilung - und ein Paket , das so im Rahmen ihres normalen installieren schlägt zu tun ist ... nicht ein gutes Paket.Bearbeiten: In Bezug auf Punkt 3 wird im Kontext von systemd / Fedora und Freunden diskutiert, warum es sinnvoll ist, den gesamten Inhalt von an
/bin
zu verschieben/usr/bin
und den ersten mit dem zweiten zu verknüpfen. Dies ist keine Empfehlung, dass Sie dies selbst tun - diese Seite ist an die Personen gerichtet, die Verteilungen vornehmen -, aber sie enthält eine Geschichte darüber, warum diese Unterscheidung besteht (und implizit, warum sie jetzt nur noch eine staubige Tradition ist).quelle