Chcę przywrócić plik z /etc/
powrotem do pierwotnie zainstalowanej postaci. Plik był edytowany od momentu jego zainstalowania. Jak mogę przywrócić ten plik konfiguracyjny? Apt jest wystarczająco inteligentny, aby nie zastępować edytowanych plików konfiguracyjnych, więc jak mam to powiedzieć, że chcę to zrobić?
Na wszelki wypadek powiedzmy, że chcę przywrócić plik /etc/foo.conf
z pakietu foo
.
configuration
apt
Ryan C. Thompson
źródło
źródło
foo
, co jeślibar
zależy od,foo
a nie chcę usunąćbar
?Odpowiedzi:
Odpowiedź udzielona przez Ryana Thomsona zmierza w dobrym kierunku. Nadal nie byłby w stanie wykonać zadania (powód szczegółowy podano poniżej).
Prawidłowym (i najłatwiejszym) sposobem jest użycie opcji
-o
z,apt
aby przekazać opcję dpkg i zmusićdpkg
do pytania, czy chcesz zachować zmodyfikowane pliki konfiguracyjne, czy oryginalne. Polecenie będzie takie -To zada ci pytanie takie jak
Musisz nacisnąć klawisz Y lub I, aby zainstalować oryginalny plik konfiguracyjny opiekuna pakietu. Możesz nawet nacisnąć D, aby zobaczyć, jakie zmiany lub uruchomić powłokę główną z opcją Z, aby to naprawić.
Uwaga: po zamianie znajdziesz zmodyfikowany plik jako
at /etc/foo/foo.conf.dpkg-old
Dlaczego inne opcje nie działają?
Ponieważ inne opcje w dpkg nie działają dobrze. Dostępne są opcje dotyczące plików konfiguracyjnych pakietu
--force-confmiss
--force-confnew
--force-confold
--force-confdef
--force-confmiss
nie będzie działać, gdy wersja pakietu się nie zmieni. Ze strony podręcznika--force-confmiss
współpracuje z brakującymi plikami Conffiles. On również zawiedzie, gdy wersja się nie zmieni. Cytując stronę podręcznika--force-confold
zachowa zmodyfikowaną wersję tylko w przypadku zmiany wersji . W przypadku tego samego pakietu również się nie powiedzie. Cytując stronę podręcznika--force-confdef
również się nie powiedzie, ponieważ domyślną akcją jest zachowanie starszego pliku (wskazany w komunikacie pokazanym za pomocą--force-confask
. Ma linię,(Y/I/N/O/D/Z) [default=N]
co oznacza, że zachowanie jest domyślne. Patrz wyżej). A jeśli--force-confnew
jest określony, ale wersja się nie zmienia, to też nie będzie działać. Cytując stronę podręcznikaDziała tylko
--force-confask
, ponieważ wyraźnie zadaje ci pytanie, nawet jeśli wersja jest taka sama. Cytując stronę podręcznikaMam nadzieję, że to pomoże.
źródło
--force-confnew
? Próbowałemapt-get […] -y
, ale to nie zadziałało. (Jeśli nie jest to możliwe, edytuj odpowiedź, aby to powiedzieć.)--force-confnew
bez pytania? Myślę, że to domyślny przypadek, co oznacza, że zachowa twoje zmiany.--force-confask
sprawia, żeapt
zawsze zadajesz pytanie, w przeciwnym razie użyłbyś innych opcji, jeśli znasz już odpowiedź.-o Dpkg::Options::=--force-confnew
bezskutecznie (jak przewidywała twoja odpowiedź) i nie czytałem komunikatu o błędzie, kiedy próbowałem-o Dpkg::Options::="--force-confask --force-confnew"
. Jednakapt-get --reinstall -o Dpkg::Options::=--force-confask -o Dpkg::Options::=--force-confnew install $package
poprawnie zastąpił pliki konfiguracyjne zmiany pliku$package
. Dzięki!Jeśli szkoda została już wyrządzona, oto sposób na odzyskanie oficjalnej wersji pliku konfiguracyjnego z linii poleceń. Najpierw pobierz plik pakietu (albo
apt-get --download-only
jak poniżej, albo ze strony pakietu na packages.ubuntu.com ), a następnie wypakuj jego zawartość w tymczasowej lokalizacji. Następnie możesz skopiować plik do/etc
. Upewnij się, że przestrzegasz oryginalnych uprawnień (większość plików/etc
jest własnością root i trybu 644 (tj. Do odczytu słów i do zapisu root), ale każdy wyjątek istnieje z ważnego powodu).Pamiętaj, że nie dotyczy to plików konfiguracyjnych, które nie pochodzą z pakietu, takiego jak
/etc/fstab
lub/etc/passwd
. Jeśli je zgubisz, jesteś sam. (Większość i tak jest bardzo zależna od systemu.)W przyszłości polecam korzystanie z etckeeper . Zainstaluj pakiet i uruchom
sudo etckeeper init
. To ustawia kontrolę wersji dla wszystkich plików w/etc
. Nie musisz nic robić, aby zarządzać etckeeper; musisz z nim współdziałać tylko wtedy, gdy chcesz wykonać operację kontroli wersji, na przykład odnosząc się do starszych plików. Pliki są automatycznie zatwierdzane przed i po każdym uruchomieniu apt i każdej nocy (można to skonfigurować).Domyślnie w Ubuntu etckeeper używa Bazaar . Zmień ustawienie
/etc/etckeeper/etckeeper.conf
przed uruchomieniem,etckeeper init
jeśli wolisz Darcs, Git lub Mercury.Z Bazaar, aby powrócić
/etc/foo.conf
do ostatniej zatwierdzonej wersji:Jeśli chcesz cofnąć się w czasie, użyj,
sudo bzr log foo.conf
aby wyświetlić historię pliku, asudo bzr revert -r 42 foo.conf
jeśli ustaliłeś, żerevno: 42
jest to wersja, do której chcesz przywrócić.źródło
Możesz pobrać pakiet ręcznie ze strony packages.ubuntu.com , rozpakować plik i zastąpić go swoją wersją.
Lub możesz:
Drugi jest o wiele bardziej brutalny. Może również wyczyścić inną konfigurację, jeśli używa więcej niż jednego pliku. Pierwszy to więcej kliknięć i wysiłku, ale wydaje się znacznie bezpieczniejszy.
Po drugie, możesz być w stanie po prostu usunąć plik i --reinstall może go zastąpić. Jeśli tak, byłoby to bezpieczniejsze.
źródło
apt-get --reinstall purge package
nie skrzywdzi osób na utrzymaniu.W zależności od pakietu możesz znaleźć domyślny plik konfiguracyjny w
/usr/share/doc/foo/examples
.źródło
Użyj Synaptic (poprawianie Ubuntu jest jeszcze wygodniejsze, ale synaptic jest prostszy) i wybierz „całkowicie usuń pakiet”. Spowoduje to usunięcie wszystkich plików konfiguracyjnych (możesz wykonać kopię zapasową tych plików!).
Następnie zainstaluj ponownie. Jesteś skończony.
Dzięki Ubuntu Tweak zyskujesz jeszcze więcej opcji czyszczenia, ponownego uruchamiania i tworzenia kopii zapasowych konfiguracji. Może chcesz na to spojrzeć. Jest w centrum oprogramowania.
ps: Synaptic korzysta również z opcji „oczyść” (jak wspomniano powyżej Oli) ... - tylko z GUI dla wygodniejszej obsługi.
źródło
W końcu znalazłem odpowiedź, którą niejasno pamiętałem sprzed lat:
Argument „confnew” zmusza dpkg do zastąpienia zmodyfikowanych plików konfiguracyjnych plikami dostarczonymi przez pakiet, a „confmiss” robi to samo z usuniętymi plikami konfiguracyjnymi.
Zgodnie z tym czatem możesz także użyć tych opcji poprzez apt-get w następujący sposób:
dzięki czemu nie musisz samodzielnie znajdować pliku deb.
Oczywiście te opcje są niebezpieczne i mogą zniszczyć ważne pliki konfiguracji systemu, jeśli zostaną niewłaściwie użyte.
źródło
--force-confnew
polega na tym, że instaluje nowe pliki konfiguracyjne tylko w przypadku zmiany wersji. Jeśli instalujesz ponownie tę samą wersję, nie zainstaluje nowego pliku konfiguracyjnego, ponieważ przetestowałem go jawnie--force-confmiss
zainstaluje nowy plik konfiguracyjny tylko wtedy, gdy wersja zostanie zmieniona i brakuje konfiguracji. Jak opisano na stronie podręcznika użytkownikaconfmiss: 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.