Ich möchte eine Datei in /etc/
der ursprünglich installierten Form wiederherstellen. Ich habe die Datei seit der Installation bearbeitet. Wie kann ich diese Konfigurationsdatei wiederherstellen? Apt ist klug genug , um bearbeitete Konfigurationsdateien nicht zu überschreiben. Wie kann ich also sagen, dass ich das möchte ?
Nehmen wir als Argument an, ich möchte die Datei /etc/foo.conf
aus dem Paket zurücksetzen foo
.
configuration
apt
Ryan C. Thompson
quelle
quelle
foo
, was passiert , wennbar
hängt davon ab ,foo
und ich will nicht entfernenbar
?Antworten:
Die Antwort von Ryan Thomson war auf dem richtigen Weg. Trotzdem wäre es nicht in der Lage, die Arbeit zu erledigen (der detaillierte Grund ist unten angegeben).
Die korrekte (und einfachste) Weg , dies zu tun , wird unter Verwendung von
-o
mitapt
dpkg Option passieren und zwingendpkg
Sie zu fragen , ob Sie die geänderten Konfigurationsdateien oder die ursprünglichen beibehalten möchten. Der Befehl wird so sein -Dies würde Ihnen eine Frage stellen wie
Sie müssen entweder Y oder I drücken , um die ursprüngliche Konfigurationsdatei des Paketverwalters zu installieren. Sie können sogar D drücken, um die Änderungen zu sehen, oder eine Root-Shell mit der Option Z starten, um sich selbst zu reparieren.
Hinweis: Nach dem Ersetzen finden Sie Ihre geänderte Datei als
at /etc/foo/foo.conf.dpkg-old
Warum würden andere Optionen nicht funktionieren?
Weil die anderen Optionen in dpkg nicht gut funktionieren. Die Optionen, die sich mit den Konfigurationsdateien eines Pakets befassen, sind:
--force-confmiss
--force-confnew
--force-confold
--force-confdef
--force-confmiss
würde nicht funktionieren, wenn sich die Paketversion nicht ändert. Aus der Manpage--force-confmiss
funktioniert mit fehlenden Conffiles. Es wird auch fehlschlagen, wenn die Version nicht geändert wurde. Zitierende Manpage--force-confold
behält die geänderte Version nur bei, wenn die Version geändert wird . Für dasselbe Paket wird es auch fehlschlagen. Zitierende Manpage--force-confdef
scheitert auch , weil die Standard - Aktion ist ältere Datei zu behalten (angezeigt von der Meldung angezeigt mit--force-confask
. Es Linie hat ,(Y/I/N/O/D/Z) [default=N]
das Haltemittel Standard. Siehe oben). Und wenn--force-confnew
angegeben, aber die Version nicht geändert wird, funktioniert das auch nicht. Zitierende ManpageNur
--force-confask
funktioniert, weil es Ihnen die Frage explizit stellt, auch wenn die Version identisch ist. Zitierende ManpageHoffe das wird helfen.
quelle
--force-confnew
? Ich habe es versuchtapt-get […] -y
, aber das hat nicht funktioniert. (Wenn es nicht möglich ist, ändern Sie bitte auch die Antwort, um dies zu sagen.)--force-confnew
ohne zu fragen zu benutzen ? Ich denke, das ist der Standardfall, was bedeutet, dass Ihre Änderungen beibehalten werden.--force-confask
stelltapt
immer die Frage, ansonsten würden Sie andere Optionen verwenden, wenn Sie die Antwort bereits kennen.-o Dpkg::Options::=--force-confnew
erfolglos versucht (wie von Ihrer Antwort vorhergesagt) und die Fehlermeldung nicht gelesen, als ich es versuchte-o Dpkg::Options::="--force-confask --force-confnew"
. Dieapt-get --reinstall -o Dpkg::Options::=--force-confask -o Dpkg::Options::=--force-confnew install $package
Änderungskonfigurationsdateien von wurden jedoch korrekt überschrieben$package
. Vielen Dank!Wenn der Schaden bereits angerichtet wurde, können Sie über die Befehlszeile die offizielle Version der Konfigurationsdatei wiederherstellen. Laden Sie zuerst die Paketdatei herunter (entweder mit
apt-get --download-only
der unten angegebenen Version oder von der Paketseite unter packages.ubuntu.com ) und extrahieren Sie dann den Inhalt an einem temporären Speicherort. Sie können die Datei dann in kopieren/etc
. Stellen Sie sicher, dass Sie die ursprünglichen Berechtigungen einhalten (die meisten Dateien in/etc
besitzen root und mode 644 (dh wortlesbar und root-schreibbar), aber jede Ausnahme gibt es aus einem wichtigen Grund).Beachten Sie, dass dies nicht für Konfigurationsdateien gilt, die nicht aus einem Paket stammen, z. B.
/etc/fstab
oder/etc/passwd
. Wenn Sie diese verlieren, sind Sie auf sich allein gestellt. (Die meisten sind sowieso sehr systemabhängig.)Für die Zukunft empfehle ich die Verwendung von etckeeper . Installieren Sie das Paket und führen Sie es aus
sudo etckeeper init
. Hiermit wird die Versionskontrolle für alle Dateien in eingerichtet/etc
. Sie müssen nichts weiter tun, um etckeeper zu verwalten. Sie müssen nur dann damit interagieren, wenn Sie eine Versionskontrolle durchführen möchten, z. B. indem Sie auf ältere Dateien verweisen. Dateien werden automatisch vor und nach jedem Lauf von apt und jede Nacht festgeschrieben (dies ist konfigurierbar).Standardmäßig verwendet etckeeper unter Ubuntu Bazaar . Ändern Sie die Einstellung
/etc/etckeeper/etckeeper.conf
vor dem Ausführen,etckeeper init
wenn Sie Darcs, Git oder Mercury bevorzugen.Mit Bazaar können Sie zur
/etc/foo.conf
letzten festgeschriebenen Version zurückkehren:Wenn Sie in der Zeit zurückgehen möchten, zeigen Sie
sudo bzr log foo.conf
mit den Verlauf der Datei an, undsudo bzr revert -r 42 foo.conf
wenn Sie festgelegt haben, dass diesrevno: 42
die Version ist, zu der Sie zurückkehren möchten.quelle
Sie können das Paket manuell von packages.ubuntu.com herunterladen , die Datei extrahieren und Ihre Version durch diese ersetzen.
Oder Sie könnten:
Die zweite fühlt sich viel brutaler an. Möglicherweise werden auch andere Konfigurationen gelöscht, wenn mehr als eine Datei verwendet wird. Das erste ist mehr Klicken und Anstrengung, aber es scheint viel sicherer.
Zum zweiten können Sie die Datei möglicherweise einfach löschen und --reinstall ersetzt sie möglicherweise. Wenn ja, wäre das sicherer.
quelle
apt-get --reinstall purge package
wird nicht die Angehörigen verletzen.Je nach Paket finden Sie möglicherweise eine Standardkonfigurationsdatei in
/usr/share/doc/foo/examples
.quelle
Verwenden Sie Synaptic (Ubuntu Tweak ist noch praktischer, aber Synaptic ist einfacher) und wählen Sie "Paket vollständig entfernen". Dadurch werden alle Konfigurationsdateien gelöscht (möglicherweise möchten Sie diese Dateien sichern!).
Dann neu installieren. Sie sind fertig.
Mit Ubuntu Tweak erhalten Sie noch mehr Optionen für Bereinigungs-, Rerolling- und Konfigurations-Backups. Vielleicht möchten Sie es mal sehen. Es ist im Softwarecenter.
ps: Synaptic verwendet auch die Option "Löschen" (wie oben von Oli erwähnt ...) - nur mit einer grafischen Benutzeroberfläche für eine komfortablere Handhabung.
quelle
Endlich fand ich die Antwort, an die ich mich vor Jahren vage erinnerte:
Das Argument "confnew" zwingt dpkg, geänderte Konfigurationsdateien durch die vom Paket bereitgestellten zu ersetzen, und das Argument "confmiss" gilt ebenfalls für gelöschte Konfigurationsdateien.
Laut diesem Chatlog können Sie diese Optionen auch über apt-get auf folgende Weise verwenden:
Das erspart Ihnen, die deb-Datei selbst zu finden.
Offensichtlich sind diese Optionen gefährlich und können bei Missbrauch wichtige Systemkonfigurationsdateien in die Luft jagen.
quelle
--force-confnew
ist, dass neue Konfigurationsdateien nur installiert werden, wenn die Version geändert wird. Wenn Sie dieselbe Version erneut installieren, wird die neue Konfigurationsdatei nicht installiert, da ich sie explizit getestet habe--force-confmiss
installiert nur dann eine neue Konfigurationsdatei, wenn die Version geändert wurde und die Konfiguration fehlt. Wie in der Manpageconfmiss: If a conffile is missing and the version in the package did change, always install the missing conffile without prompting. This is dangerous, since it means not preserving a change (removing) made to the file.