Назад | Перейти на главную страницу

Сортируемый список всех пакетов (dpkg)

Я хочу сбросить все установленные пакеты в системе, которая использует dpkg.

До сих пор я использую dpkg -l.

Но у него есть один недостаток: сортировка результата не имеет смысла.

Глава:

root@aptguettler:~# LANG=C dpkg-query -l| sort | head
+++-===========================================================-=================================================-============-================================================================================
Desired=Unknown/Install/Remove/Purge/Hold
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
ii  a11y-profile-manager-indicator                              0.1.10-0ubuntu3                                   amd64        Accessibility Profile Manager - Unity desktop indicator

Хвостик:

root@aptguettler:~# LANG=C dpkg-query -l| sort | tail
rc  texlive-publishers-doc                                      2015.20160320-1                                   all          TeX Live: Documentation files for texlive-publishers
rc  texlive-science                                             2015.20160320-1                                   all          TeX Live: Natural and computer sciences
rc  texlive-science-doc                                         2015.20160320-1                                   all          TeX Live: Documentation files for texlive-science
rc  tpconfig                                                    3.1.3-15                                          amd64        touchpad device configuration utility
rc  ttf-indic-fonts-core                                        1:0.5.14ubuntu1                                   all          Core collection of free fonts for languages of India
rc  ttf-punjabi-fonts                                           1:0.5.14ubuntu1                                   all          Free TrueType fonts for the Punjabi language
rc  unity-lens-friends                                          0.1.3+14.04.20140317-0ubuntu1                     amd64        Friends scope for unity
rc  webaccounts-extension-common                                0.5-0ubuntu2.14.04.1                              amd64        Ubuntu Online Accounts browser extension - common files
rc  xfonts-mathml                                               6ubuntu1                                          all          Type1 Symbol font for MathML
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend

Я храню историю этого вывода через etckeeper (Связанный вопрос с ответом записать вывод hwinfo с помощью etckeeper).

Вот что я хотел бы улучшить:

В системах на основе rpm rpm -qa делает именно то, что мне нужно.

Пытаться

dpkg --get-selections | grep -v deinstall

Если вам нужна точная версия пакетов на выходе, вы можете сделать:

dpkg -l | grep '^ii' | awk '{print $2 "\t" $3}'

Это выводит только столбцы 2 и 3. В нем также перечислены только установленные пакеты, не удаленные и другие.

Изменить: Другой вариант - dpkg-query:

dpkg-query --show --showformat='${Package} ${Version}  ${Architecture} ${db:Status-Abbrev} \n'

Где --showformat (или -f) определяет, какие столбцы вы хотите отображать, в данном случае имя пакета, версию и архитектуру и краткий статус (например, «ii» и «rc») в конце, «\ n» это разрыв строки.

Кстати, «ii» определяет установленные пакеты, «rc» - это неустановленные пакеты, поэтому я использовал grep и awk для фильтрации неустановленных пакетов.

Если вам нравится, вы можете добавить ширину столбцов следующим образом:

dpkg-query --show --showformat='${Package;-50} ${Version;-40}  ${Architecture;-5} ${db:Status-Abbrev} \n'

Отрицательная ширина столбца означает, что ориентация слева, положительная - справа.

Однако будьте осторожны, так как имя пакета будет сокращено, если ширина меньше количества символов в имени пакета.

Я не совсем уверен, для чего вам нужен список. Если вы просто хотите иметь хорошо читаемый список, нет ничего плохого в awk или других командах, если вы хотите иметь «резервную копию» своего программного обеспечения для установки на другую машину, dpkg --get-selections (без труб) - это то, что вам нужно, см. https://wiki.debian.org/ListInstalledPackages