Всякий раз, когда я печатаю sudo apt-get remove
и затем нажимаю Tabклавишу для автозаполнения, я получаю следующее сообщение:
grep-status: /var/lib/dpkg/status:15945: expected a colon
.
Я не вижу ничего особенно странного в строке 15945 в файле состояния. Это точечный символ в поле описания пакета моно библиотеки, и вставка двоеточия не помогла. Удаление строки, содержащей точку, тоже не сработало. Перезапись файла со статусом old привела к тому же самому сообщению.
Есть ли способ восстановить файл состояния?
status
файл: это основной источник информации, и хотя большая его часть избыточна, но не вся. Однако возможно восстановить файл вручную. Поместите кусок файла вокруг проблемной строки, скажем, 20–40 строк, включая как минимум однуPackage:
строку до и после строки 15945.apt-get
,dpkg
и друзья все еще работают правильно, а что erroring из является автозаполнение?Ответы:
Я наконец исправил свою систему этого. Восстановление резервной копии файла состояния не работало, так как у меня была проблема так долго, это во всех моих резервных копиях.
Исправление включает в себя поиск фактических разрывов форматирования и исправление их вручную. Это не так сложно, как кажется.
http://thepcspy.com/read/fixing-dpkg-status-corruption/
источник
missing package name
и я узнал, что по какой-то странной причине мне лучше не тратить свое время на выяснение, у меня была линия,Packaga: landscape-common
которая была исправлена ортографически, и проблема была решена. Дело в том, что я никогда не трогал этот файл, как и никто другой. Как компьютер может испортить орфографическую ошибку?.
к этой пустой строке].Вы должны быть в состоянии работать с предыдущим известным файлом состояния и обновлять его оттуда. Каждый раз, когда вы выполняете установку или обновление, файл состояния сохраняется в резервную копию gzip в / var / backups . Выполнение команды ls -l dpkg * в каталоге показывает:
Также есть резервная копия файла, созданного в каталоге / var / lib / dpkg / с именем status-old. Выполнение статуса ls -l * в каталоге показывает:
Итак, чтобы восстановиться после повреждения, вы должны сделать следующее:
1. Сделайте резервную копию поврежденного файла состояния :
2. Скопируйте недавний файл статуса dpkg на место из любого из приведенных выше источников:
или
или
3. Затем запустите apt-get update:
Это должно сделать это.
источник
sudo apt update && sudo apt dist-upgrade
должно исправить большинство проблем, которыеstatus
может вызвать старый файл. Если ваша система имеет больший беспорядок,sudo aptitude dist-upgrade
вместо этогоsudo apt ...
иногда могут предложить лучшие способы исправить поломку.Я смог решить эту проблему, удалив пакеты, у которых были поврежденные записи в файле состояния.
Принятое решение через pcregrep не сработало (pcregrep ничего не нашел).
источник
Попробуйте "dpkg -P" для оскорбительного пакета. Это очистит его от локального хранилища, удалив все следы. В моей системе это было исправлением для удаленных (но еще не очищенных) пакетов, которые вызывали эту ошибку.
источник
В этом случае я бы сделал резервную копию поврежденного
/var/lib/dpkg/status
файла, а затем исправил его вручную (по строкам 1888 и 9550), используя информацию изисточник
Это ошибка (должна быть исправлена): ошибка панели запуска 613018
Вверх по течению: Debian Bug 590885
Это должен быть обходной путь (резервная копия, строка с исправлением):
источник
Сын...
Хорошо, фактическая ошибка была в строке 15266, несмотря на то, что о ней сообщалось примерно на 700 строк ниже. Проблемная запись в файле состояния была вызвана установкой, которую я установил, чтобы заставить мой принтер Lexmark работать давно. Запись была для пакета
lexmark-inkjet-08-driver
. Поле описания не было.
в месте разрыва строки. Это вызвало ошибку разбора.Чтобы найти это, я прибег к методу устранения неполадок с дробовиком и начал пробовать что-то случайное. Одна из моих глупых попыток заключалась в том, чтобы
grep-status -P e
понять, что буква e была самой распространенной в алфавите. Глупо, я знаю, но последняя запись состояния, напечатанная до того, как она жаловалась на отсутствующее двоеточие, была для пакета lexmark, и я заметил отсутствие.
персонажа после нескольких минут просмотра экрана.Если возможно, я хотел бы получить другой ответ, который мог бы описать лучший метод для поиска такого рода проблем в случае, если кто-то столкнется с подобной проблемой в будущем. Спасибо.
источник
grep-status -r -P ^
должен всегда соответствовать любому пакету, поэтому он должен анализировать весь файл и прерывать работу, если он не может его проанализировать.Потому что мой статус-старый был слишком проблематично даже с
apt-get update
,Это сработало очень хорошо для меня:
(как корень)
КРЕДИТ: http://alvinalexander.com/blog/post/linux-unix/how-remove-non-printable-ascii-characters-file-unix
Если вам интересно, что изменилось или где будет ущерб: (возможно долго)
источник