Od wydania Fedory 26 podkomenda Dnf repoquery
obsługuje nową opcję wyświetlania wszystkich pakietów zainstalowanych przez użytkownika:
$ dnf repoquery --qf '%{name}' --userinstalled \
| grep -v -- '-debuginfo$' \
| grep -v '^\(kernel-modules\|kernel\|kernel-core\|kernel-devel\)$' > pkgs_a.lst
W przeciwieństwie do innych metod wyświetla również wszystkie pakiety debuginfo. Dodatkowy grep w powyższym przykładzie je odfiltrowuje.
Aby zainstalować listę na hoście B:
$ < pkgs_a.lst xargs dnf -y install
Dnf API
W najnowszych wersjach Dnf (np. Fedora> = 23) do bazy danych pakietów można zapytać o nazwy pakietów instalowanych przez użytkownika za pomocą interfejsu API Dnf Python:
$ python3 -c 'import dnf; b = dnf.Base(); b.fill_sack(); \
l = sorted(set(x.name for x in b.iter_userinstalled() \
if not x.name.endswith("-debuginfo") \
and x.name not in \
["kernel-modules", "kernel", "kernel-core", "kernel-devel"] )); \
print("\n".join(l)) ' > pkgs_a.lst
# dnf install $(cat pkgs_a.lst) # on host_b
Domyślnie dnf install
przerywa, jeśli jeden lub więcej pakietów nie jest już dostępnych. Alternatywnie, dnf może zostać zmuszony do zainstalowania wszystkich pozostałych:
# dnf install --setopt=strict=0 $(cat pkgs_a.lst) # on host_b
PS: Umieść powyższy kod i inne elementy, user-installed.py
które obsługują również inne dystrybucje.
historia zainstalowana przez użytkownika
W Fedorze 23 i nowszych Dnf zapewnia
# dnf history userinstalled
polecenie, które wyświetla listę wszystkich pakietów zainstalowanych przez użytkownika. Począwszy od 2016-11 roku, jego użyteczność jest ograniczona, ponieważ nie ma możliwości kontrolowania jego wyników i drukuje pakiety w pełni kwalifikowane (tj. Zawierające informacje o wersji).
Ograniczenia zainstalowane przez użytkownika
Zauważ, że oznaczanie pakietów jako instalowanych przez użytkownika ma pewne ograniczenia w niektórych wersjach Fedory, w przypadku systemów z 23-go okresu (od około 2015-11) istotne są następujące problemy):
Repoquery
W starszych systemach Fedory, w których Dnf, API Dnf i dnf history userinstalled
nie są dostępne, zamiast tego można użyć repozytorium , np .:
$ repoquery --installed \
--qf '%{n} | %{yumdb_info.reason} | %{yumdb_info.installed_by}' --all \
| awk -F'|' ' $2 ~ /user/ && ($3 != 4294967295) { print $1 }' \
| sort -u > pkgs_a.lst
Drugi warunek awk służy do wykluczenia pakietów, które zostały zainstalowane przez instalatora. Identyfikator użytkownika instalatora był najwyraźniej zapisany jako 4294967295 - alternatywnie możesz napisać coś takiego ($3 == 0 || $3 == your-user-id)
.
Zauważ, że to polecenie działa w Fedorze do wersji 21 - ale np. Nie w wersji 23, ponieważ to polecenie repoquery
zostało zastąpione dnf repoquery
. I dnf repoquery
nie rozumie %{yumdb_info.reason}
tagu.
repoquery ...
: „Nieprawidłowy„ powód ”yumdb querytag dla zainstalowanego pkg: HandBrake-cli-0.9.5-1.fc14.x86_64”