На сервере 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