Kể từ Fedora 26, các repoquery
tiểu ban hỗ trợ của Dnf có một tùy chọn mới để liệt kê tất cả các gói do người dùng cài đặt:
$ dnf repoquery --qf '%{name}' --userinstalled \
| grep -v -- '-debuginfo$' \
| grep -v '^\(kernel-modules\|kernel\|kernel-core\|kernel-devel\)$' > pkgs_a.lst
Ngược lại với các phương thức khác, nó cũng liệt kê tất cả các gói debuginfo. Grep bổ sung trong ví dụ trên lọc chúng ra.
Để cài đặt danh sách trên máy chủ B:
$ < pkgs_a.lst xargs dnf -y install
API DNf
Với các phiên bản Dnf gần đây (ví dụ: Fedora> = 23), cơ sở dữ liệu gói có thể được truy vấn đối với tên gói được cài đặt của người dùng thông qua API API của Pythonf:
$ 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
Theo mặc định, dnf install
hủy bỏ nếu một hoặc nhiều gói không còn khả dụng nữa. Ngoài ra, dnf có thể bị buộc phải cài đặt tất cả những cái còn lại:
# dnf install --setopt=strict=0 $(cat pkgs_a.lst) # on host_b
PS: Đặt mã ở trên và nhiều hơn nữa vào user-installed.py
đó cũng hỗ trợ các bản phân phối khác.
lịch sử người dùng đã cài đặt
Trên Fedora 23 trở lên, Dnf cung cấp
# dnf history userinstalled
lệnh liệt kê tất cả các gói người dùng cài đặt. Kể từ 2016-11, tính hữu dụng của nó bị hạn chế do không có cách nào để kiểm soát đầu ra của nó và nó in các gói đủ điều kiện (nghĩa là bao gồm thông tin phiên bản).
hạn chế cài đặt của người dùng
Lưu ý rằng việc đánh dấu các gói khi người dùng cài đặt có một số hạn chế đối với một số phiên bản Fedora, đối với các hệ thống thời kỳ 23 của Fedora (từ khoảng 2015-11), các vấn đề sau có liên quan):
Tái chế
Trên các hệ thống Fedora cũ hơn, nơi có Dnf, API Dnf và dnf history userinstalled
không có sẵn, người ta có thể sử dụng tính năng repoquery thay vào đó, ví dụ:
$ 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
Điều kiện awk thứ hai được sử dụng để loại trừ các gói được cài đặt bởi trình cài đặt. Id người dùng của trình cài đặt rõ ràng được lưu trữ là 4294967295 - ngoài ra, bạn có thể viết một cái gì đó như ($3 == 0 || $3 == your-user-id)
.
Lưu ý rằng lệnh này hoạt động trên Fedora cho đến khi phát hành 21 - nhưng ví dụ: không phải trên phiên bản 23, vì lệnh repoquery
đã được thay thế bằng dnf repoquery
. Và dnf repoquery
không hiểu %{yumdb_info.reason}
thẻ.
repoquery ...
: "Lý do 'truy vấn yumdb không hợp lệ' để cài đặt pkg: HandBrake-cli-0.9.5-1.fc14.x86_64"