
Я ищу пакеты, в которых есть следующие ситуации:
- Удалено, но не очищено
- Установлен, но не настроен
Я пробовал такие вещи, как
aptitude search '~id'
и
aptitude search "~iuA"
но ни то, ни другое не сработало.
Есть идеи?
Обновление - одна из команд не работает -
[$] dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | grep ^i[^i]
zsh: no matches found: ^i[^i]
есть идеи, виноват ли это zsh или что-то еще?
решение1
Для ваших aptitude
попыток важно отметить, что ~
это не означает «ищите следующие флаги в статусе пакета». ~i
— это сокращение от ~installed
, а затемгинтерпретируется как буквальноег, то есть пакеты, названия которых содержат буквуг. Я просмотрел документацию aptitude
( /usr/share/doc/aptitude/html/en/index.html
в моей системе) в поисках шаблона поиска, который удовлетворил бы ваш вопрос, но не уверен, что это возможно. ~action
может помочь вам на полпути, но я не уверен, что это поможет получить статус.
Альтернативой использованию aptitude
является использование dpkg-query
with grep
.
dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | grep ^r
Будет выполнен поиск пакетов, которые находятся вудаленныйсостояние, но не очищено.
dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | grep ^i[^i]
Будет выполнен поиск пакетов, отмеченных какустановлен, но не установлены полностью. Если вы не хотите включать пакеты, ожидающие триггеров, вы можете использовать ^i[ncHUF]
вместо этого.
Чтобы получить только второй столбец вывода (имя пакета), можно использовать sed
:
dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | sed -n 's/^r.R\?\s*//p'
чтобы найти удаленные пакеты, и
dpkg-query -Wf '${db:Status-Abbrev} ${Package}\n' | sed -n 's/^i[^i]R\?\s*//p'
для поиска пакетов, которые необходимо установить, но которые не установлены полностью.
Если немного подробнее, то «статус» пакетов Debian состоит из двух частей:
Theдействиепредназначено для выполнения в пакет. Это может бытьустановитьпакет, чтобыудалятьпакет, чтобыдержатьпакет илиудалятьпакет.
Theстатус пакета, который описывает фактическое состояние пакета в вашей системе.
Приведенный выше dpkg-query
вызов перечисляет действие и статус пакета, по одному символу каждое, после имени пакета в начале каждой строки.
Чтобы найти пакеты, которые удалены, но не очищены, мы просто ищем пакеты с действием «удалить»: grep ^r
. Чтобы найти пакеты, которые установлены или предназначены для установки, но еще не настроены, мы ищем пакеты, чьидействиеявляетсяустановить, но чей статус является чем-то иным, чемустановлен: grep ^i[^i]
.
решение2
Удалено, но не очищено ~c
( ?config-files
).
Установлено, но не настроено не отслеживается apt, только dpkg. У пакета есть два состояния: фактическое и желаемое. Apt заботится только о желаемом состоянии. Желаемое состояние пакета, который установлен, но не настроен, установлено.
ВидетьОтвет Дилана Фрезедля запросов dpkg.