Когда я хочу вывести список установленных пакетов, я обычно делаю это одним из двух способов.
Старомодный способ использует rpm -qa | grep <whatever I look for>
, и это все.
Но в последнее время я хотел более подробное отображение своих пакетов, и впредь я использовал dnf list --installed <whatever I look for>
.
Однако, глядя на результат, есть пара вещей, которые я не понимаю.
Рассмотрим этот пример:
# dnf list --installed zsh
Last metadata expiration check: 0:13:25 ago on Mon Jul 11 05:48:04 2016.
Installed Packages
zsh.x86_64 5.2-5.fc24 @@commandline
(пробелы в реальной распечатке шире)
Итак, результирующими записями являются: «пакет», «версия», «репо».
В моем примере это:
- пакет: zsh.x86_64
- версия: 5.2-5.fc24
- репо: @@ командная строка
Пока что итоговая таблица понятна, но я запутался, что означают два «@@» перед именем репо.
Кроме того, «командная строка» предполагает, что пакет был установлен из командной строки (загрузка RPM, а затем выполнение dnf install whatever.rpm
в командной строке и т. Д.). Однако я уверен, что установил zsh
через dnf install zsh
.
Но это не все.
Я несколько пакетов на моей системе , установленной с репо @System
, @fedora
(впрочем , есть и fedora
без @
) и тому подобное @@commandline
.
Так, что это @
или @@
точно означает перед названием репо?
И почему у меня установлено так много известных пакетов, @@commandline
хотя я более чем уверен, что установил их из репозиториев?
источник
dnf
невероятно молчит об этом. Предположим, «@» обозначает установленный пакет, означает ли «@@», что он установлен вручную из источника без репо, возможно? Я бы очень хотел, чтобы кто-то разъяснил.(Отказ от ответственности: я не могу предоставить источники ни для чего из этого, потому что я никогда не видел никакой документации, которая на самом деле обсуждает эти вещи. Информация, которой я должен следовать, - это просто то, что мне удалось выяснить с помощью осмотра, экспериментов с «черным ящиком», случайных действий. Метод проб и ошибок и простые старые догадки. Кроме того, справедливое предупреждение, это слишком многозначительно до такой степени, что слишком долго.)
DNF добавляет @ для обозначения репо установлен пакет был установлен с , в
dnf list
контексте. Как вы заметили:Но на самом деле вы никогда не увидите ни одного пакета, входящего
fedora
в установленный список, так как каждый пакет показывает некоторый @ -repo в качестве источника. (Вы можете проверить это, запустивsudo dnf list installed
и проверив ; в списке нет репозиториев без хотя бы одного знака @.) Когда вы просматриваете информацию о пакете с помощьюdnf info
, вFrom repo:
поле « » будет отображаться имя репо без@
. (Так что "From repo: fedora
" абсолютно возможно, и эквивалентно@fedora
в установленном списке.)Но некоторые репо названы со
@
знаком на передней панели. Как обнаружил ДжонКоч в источниках «Ястреба», «@commandline» определяется как «имя репо» для «репо командной строки». Таким образом,@@commandline
вdnf list
листинге просто указывается установленный пакетFrom repo: @commandline
, репо, которому до степени смешения было присвоено имя, начинающееся со своего @ -знака.dnf info
на любом установленном пакете покажетRepository: @System
, какой@
виртуальный репозиторий называется другим . Похоже, что@System
это виртуальное репо, содержащее набор установленных в данный момент пакетов, и@commandline
виртуальное репо-источник, откуда поступил пакет, когда он не поступил из какого-либо репо.Смысл
@commandline
и@System
, и их отношения друг к другу, похоже, изменились с тех пор, как я впервые написал этот ответ. В некотором смысле он более последовательный и рассматривает некоторые из моих предыдущих возражений о том, как@commandline
это используется. Я больше не вижу каких - либо установленных пакетов , перечисленных как из@@System
, и вне зоны Установок действительно теперь показываютFrom repo: @commandline
(@@commandline
в контексте списка).dnf info
на внешнем установленном пакете обычно отображается что-то вроде следующего:Если я сделаю
dnf reinstall remi-release
(потому что пакет находится вremi
репо), он изменится на:Еще одна вещь об исходных репо: репо, перечисленные в
From repo:
поле, всегда являются репо, которые существуют в текущем контексте репо . Другими словами, источник установки пакета - это не просто строка, содержащая имя репозитория; Установленные пакеты связаны с идентификацией репо-провайдера, поскольку он существует (или существовал) в системе.Поскольку большинство репозиториев имеют дистрибутивную версию, они переопределяются с каждым новым выпуском Fedora. (Как, например, «
fedora
» репо становится набором пакетов, составляющих новый выпуск, полностью отличным от «fedora
» репозитория, существовавшим в предыдущем выпуске.) Таким образом, всякий раз, когда выполняется обновление системы, множество старых идентификаторов репо получить недействительным.DNF (или hawkey) используется для отправки пакетов, установленных из репозиториев, которые больше не существуют, в
@commandline
качестве их репо-источника. Я говорю "привык", потому что это (к счастью) больше не сделано. Установленные пакеты из репо, который больше не существует, больше не будут показывать свой источник как@@commandline
/From repo: @commandline
. На самом деле,dnf info
показывает , что они больше не имеют какой - либо источник репо. Например,sitecopy
был пакет Fedora, который с тех пор был удален. Я установил его изfedora
илиupdates
репо 7 или 8 выпусков назад, и все еще установил:Там нет "
From repo:
" в списке.Это означает, что этот пакет (и другие подобные)
dnf list installed
покажет (один ) рядом с ним. Таким образом, в некотором смысле мы просто обменяли одно несоответствие на другое, так как этот столбец больше не всегда является исходным репо с добавленным. Тем не менее, я предпочитаю текущее положение дел.@System
@
@
Сноски
(иногда показывается. «Доступные пакеты» не обязательно будут отображаться при каждом
dnf list
запуске: если установленная версия пакета является лучшей доступной версией, она указана в разделе «Установленные пакеты»). поэтому было бы излишним также указывать его в разделе «Доступные пакеты». Использование--showduplicates
приведет к созданию раздела «Доступные пакеты», который включает все известные экземпляры, независимо от версии, установленной или загружаемой.)источник