Za każdym razem, gdy piszę, sudo apt-get remove
a następnie wciskam Tabklawisz autouzupełniania, pojawia się następujący komunikat:
grep-status: /var/lib/dpkg/status:15945: expected a colon
.
W pliku statusu nie widzę nic szczególnie dziwnego w linii 15945. Jest to kropka w polu opisu pakietu biblioteki mono, a wstawienie dwukropka nie pomogło. Usunięcie linii zawierającej kropkę również nie działało. Nadpisanie pliku starym statusem spowodowało wyświetlenie tego samego komunikatu.
Czy istnieje jakiś sposób na odbudowanie pliku statusu?
status
plik: jest to podstawowe źródło informacji i chociaż wiele z nich jest zbędnych, nie wszystkie z nich są. Jednak prawdopodobnie możliwe jest ręczne naprawienie pliku. Opublikuj fragment pliku wokół problematycznej linii, powiedzmy 20–40 linii, w tym co najmniej jednąPackage:
linię przed i po linii 15945.apt-get
,dpkg
i przyjaciele nadal działać poprawnie, a co erroring out jest autouzupełnianie?Odpowiedzi:
W końcu naprawiłem swój system tego. Przywracanie kopii zapasowej pliku stanu nie działało, ponieważ miałem problem od tak dawna, jest on we wszystkich moich kopiach zapasowych.
Poprawka obejmuje grepowanie dla faktycznych przerw formatowania i naprawianie ich ręcznie. To nie jest tak trudne, jak się wydaje.
http://thepcspy.com/read/fixing-dpkg-status-corruption/
źródło
missing package name
i dowiedziałem się, że z jakiegoś dziwnego powodu lepiej nie marnować czasu na dowiadywanie się, miałem linię,Packaga: landscape-common
która została naprawiona ortograficznie i bam, problem rozwiązany. Chodzi o to, że nigdy nie dotknąłem tego pliku ani nikogo innego. Jak komputer może zepsuć się błędem w pisowni?.
do tej pustej linii].Powinieneś być w stanie pracować z poprzednim znanym plikiem dobrego stanu i aktualizować stamtąd. Za każdym razem, gdy wykonujesz instalację lub aktualizację, plik statusu jest zapisywany w kopii zapasowej gzip w folderze / var / backups . Wykonanie polecenia ls -l dpkg * w katalogu pokazuje:
Istnieje również kopia zapasowa pliku utworzonego w katalogu / var / lib / dpkg / o nazwie status-old. Wykonanie statusu ls -l * w katalogu pokazuje:
Tak więc, aby wyjść z korupcji, powinieneś być w stanie wykonać następujące czynności:
1. Wykonaj kopię zapasową uszkodzonego pliku statusu :
2. Skopiuj najnowszy plik statusu dpkg na jedno z powyższych źródeł:
zarówno
lub
3. Następnie uruchom aktualizację apt-get:
Że należy to zrobić.
źródło
sudo apt update && sudo apt dist-upgrade
powinno rozwiązać większość problemów, które starystatus
plik może spowodować. Jeśli twój system ma większy bałagan,sudo aptitude dist-upgrade
zamiastsudo apt ...
czasami sugerować lepsze sposoby naprawienia awarii.Byłem w stanie rozwiązać ten problem, usuwając pakiety, które miały uszkodzone wpisy w pliku statusu.
Akceptowane rozwiązanie przez pcregrep nie działało (pcregrep niczego nie znalazł).
źródło
Wypróbuj „dpkg -P” dla pakietu naruszającego prawo. To usunie go z lokalnego repozytorium, usuwając wszystkie ślady. W moim systemie była to poprawka dla usuniętych (ale jeszcze nie wyczyszczonych) pakietów, które spowodowały ten błąd.
źródło
W takim przypadku utworzę kopię zapasową uszkodzonego
/var/lib/dpkg/status
pliku, a następnie poprawię go ręcznie (wokół linii 1888 i 9550), korzystając z informacji zźródło
To był błąd (który powinien zostać naprawiony): Launchpad Bug 613018
W górę: Debian Bug 590885
Powinno to być obejście problemu (kopia zapasowa, ciąg wersji „fix”):
źródło
Syn...
OK, rzeczywisty błąd był na linii 15266, pomimo że zgłoszono około 700 linii dalej. Problematyczny wpis w pliku stanu został spowodowany przez deb, który zainstalowałem, aby moja drukarka Lexmark działała dawno temu. Wpis dotyczył paczki
lexmark-inkjet-08-driver
. Pole Opis nie miało znaku.
zastępującego linię. Spowodowało to błąd analizy.Aby to znaleźć, skorzystałem z metody rozwiązywania problemów ze strzelbą i zacząłem próbować rzeczy dość losowo. Jedną z moich głupich prób było
grep-status -P e
ustalenie, że e jest najczęstszą literą w alfabecie. Głupi, wiem, ale ostatni rekord statusu wydrukowany zanim narzekał na brakujący dwukropek dotyczył pakietu Lexmark i zauważyłem brak.
znaku po kilku minutach wpatrywania się w ekran.Jeśli to możliwe, chciałbym uzyskać inną odpowiedź, która mogłaby opisać lepszą metodę znalezienia tego rodzaju problemu na wypadek, gdyby ktoś napotkał podobny problem w przyszłości. Dzięki.
źródło
grep-status -r -P ^
powinien zawsze pasować do dowolnego pakietu, więc powinien przeanalizować cały plik i przerwać, jeśli nie może go przeanalizować.Ponieważ mój stary status był zbyt problematyczny nawet z
apt-get update
,Działa to dla mnie całkiem dobrze:
(jako root)
KREDYT: http://alvinalexander.com/blog/post/linux-unix/how-remove-non-printable-ascii-characters-file-unix
Jeśli jesteś ciekaw, co się zmieniło lub gdzie byłyby obrażenia: (być może długie)
źródło