Поиск пакетов в различных состояниях через aptitude

Поиск пакетов в различных состояниях через aptitude

Я ищу пакеты, в которых есть следующие ситуации:

  1. Удалено, но не очищено
  2. Установлен, но не настроен

Я пробовал такие вещи, как

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-querywith 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.

Связанный контент