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

Как в Ubuntu Linux составить список пакетов, установленных из репозитория «вселенной»?

На сервере Ubuntu 10.04 LTS я хочу перечислить установленные пакеты и посмотреть, из какого репозитория они берутся.

Список установленных пакетов легко перечислить, но он не включает имя репозитория (например, «основной» или «юниверс»). И этой информации нет в /var/lib/dpkg/status, так dpkg-query тоже не показывает.

Я хочу получить список «неподдерживаемого» программного обеспечения, то есть программного обеспечения, которое поступает не из «основного» репозитория и для которого Ubuntu не гарантирует обновления безопасности.

Примечание: это сервер. На нем не установлены X, GNOME или KDE.

Ладно, разобрался, как это сделать:

aptitude search "~i" -F "%s# %p"

Что, конечно, можно легко найти с помощью grep, чтобы найти элементы из репозитория «вселенной»:

aptitude search "~i" -F "%s# %p" | grep universe

Я пробовал поиск в aptitude ~ i -F "% s #% p"

в ubuntu 12.04 и 14.04, но репозитории не отображались.

Итак, я написал этот небольшой сценарий:

# more origins.sh
#!/bin/bash
for i in $(dpkg -l |grep ^ii |awk -F' ' '{print $2}'); do
  apt-cache showpkg "$i"|head -3|grep -v '^Versions'|cut -d'(' -f2|cut -d')' -f1|sed -e 's/^Package: //;' | paste -d '\t' - -
done

затем

bash origins.sh|grep universe

Вы можете указать собственный формат для вывода команды dpkg (используя параметр -f). Попробуйте что-нибудь подобное, используя переменную Origin:

dpkg-query -f='${Package} ${Version}\t${Origin}\n' --get-selections

На этой странице есть дополнительная информация об аргументе форматирования: http://www.tin.org/bin/man.cgi?section=1&topic=dpkg-query

Строка формата по умолчанию - «$ {Package} \ t $ {Version} \ n». Фактически, все другие поля, найденные в файле состояния (т. Е. Определяемые пользователем поля), тоже могут быть запрошены. Они будут напечатаны как есть, однако для них не выполняется ни преобразование, ни проверка ошибок. Чтобы получить имя сопровождающего dpkg и установленную версию, вы можете запустить:

dpkg-query -W -f = '$ {Пакет} $ {Версия} \ t $ {Сопровождающий} \ n' dpkg

Это не совсем ответ, но его можно использовать для помощи. Коллега показал мне это на днях. Вы можете узнать, где находится пакет, с помощью этой команды:

apt-cache policy <package-name>

Например:

 apt-cache policy xterm  
 xterm:  
 Installed: 271-1ubuntu2.1    
 Candidate: 271-1ubuntu2.1  
 Version table:    *** 271-1ubuntu2.1 0  
         500 http://mirror.internode.on.net/pub/ubuntu/ubuntu/ precise-updates/main amd64 Packages  
         100 /var/lib/dpkg/status  
      271-1ubuntu2 0  
         500 http://mirror.internode.on.net/pub/ubuntu/ubuntu/ precise/main amd64 Packages