(Tuyên bố miễn trừ trách nhiệm: Tôi không thể cung cấp nguồn cho bất kỳ vấn đề nào trong số này, vì tôi chưa bao giờ thấy bất kỳ tài liệu nào thực sự thảo luận về những điều này. thử nghiệm và lỗi, và đồng bằng phỏng đoán cũ. Ngoài ra, cảnh báo công bằng, đó là overexpository đến mức là waaaay quá lâu.)
DNF thêm một @ để biểu thị repo một cài đặt gói đã được cài đặt từ , trong dnf list
ngữ cảnh. Như bạn đã lưu ý:
Tôi đã cài đặt một số gói trên hệ thống của mình từ repo @System, @fedora (tuy nhiên cũng có fedora không có @) và những thứ như dòng lệnh @@.
Nhưng trong thực tế, bạn sẽ không bao giờ nhìn thấy bất kỳ gói đến từ fedora
trên cài đặt danh sách, như mỗi gói có cho thấy một số @ -repo như nguồn của nó. (Bạn có thể xác minh rằng bằng cách chạy sudo dnf list installed
và kiểm tra; không có repos nào được liệt kê mà không có ít nhất một dấu @.) Khi bạn xem thông tin của gói dnf info
, trường " From repo:
" sẽ hiển thị tên repo mà không có @
. (Vì vậy, " From repo: fedora
" là hoàn toàn có thể, và tương đương với @fedora
trong danh sách đã cài đặt.)
Nhưng một số repos được đặt tên với một @
dấu hiệu ở phía trước. Như JohnKoch đã phát hiện ra trong các nguồn hawkey, "@commandline" được định nghĩa là "tên repo" cho "repo dòng lệnh". Vì vậy, @@commandline
trong dnf list
danh sách chỉ đơn giản chỉ ra một gói đã cài đặt From repo: @commandline
, một repo gây nhầm lẫn được đặt tên bắt đầu bằng @ -sign của chính nó.
dnf info
trên bất kỳ gói cài đặt nào cũng sẽ hiển thị Repository: @System
, đó là @
repo ảo có tên khác . Có vẻ như đó @System
là repo ảo chứa tập hợp các gói hiện được cài đặt và repo nguồn@commandline
ảo từ một gói đến, khi nó không đến từ bất kỳ repo nào.
Ý nghĩa của @commandline
và @System
, và mối quan hệ của họ với nhau, dường như đã thay đổi kể từ lần đầu tiên tôi viết câu trả lời này. Theo một số cách, nó phù hợp hơn và giải quyết một số phản đối trước đây của tôi về cách @commandline
sử dụng. Tôi không còn thấy bất kỳ gói cài đặt nào được liệt kê là từ @@System
và các cài đặt ngoài băng sẽ thực sự hiển thị From repo: @commandline
( @@commandline
trong ngữ cảnh danh sách). dnf info
trên gói cài đặt ngoài băng tần thường hiển thị nội dung như sau:
$ dnf info remi-release
Installed Packages
Name : remi-release
---✀---
Repository : @System
From repo : @commandline
Nếu tôi làm một dnf reinstall remi-release
(vì gói nằm trong remi
repo), nó sẽ thay đổi thành:
$ dnf info remi-release
Installed Packages
Name : remi-release
---✀---
Repository : @System
From repo : remi
Một điều khác về repos nguồn: Các repos được liệt kê trong From repo:
trường luôn là các repos tồn tại trong bối cảnh repo hiện tại . Nói cách khác, nguồn cài đặt của gói không chỉ là một chuỗi chứa tên repo; các gói đã cài đặt được liên kết với danh tính của repo cung cấp khi nó tồn tại (hoặc tồn tại) trong hệ thống.
Vì hầu hết các repos đều là phiên bản phân phối, chúng được xác định lại với mỗi bản phát hành Fedora mới. (Ví dụ: " fedora
" repo trở thành tập hợp các gói tạo nên bản phát hành mới, một bản repo hoàn toàn khác với " fedora
" tồn tại trong bản phát hành trước.) Vì vậy, bất cứ khi nào nâng cấp hệ thống được thực hiện, rất nhiều danh tính repo cũ bị vô hiệu
DNF (hoặc hawkey) được sử dụng để loại bỏ các gói được cài đặt từ các repos không còn tồn tại @commandline
như là repo nguồn của chúng. Tôi nói "đã từng", vì đó là (rất may) không còn được thực hiện. Các gói đã cài đặt đến từ một repo không còn tồn tại sẽ không còn hiển thị nguồn của chúng là @@commandline
/ From repo: @commandline
. Trong thực tế, dnf info
cho thấy rằng họ không còn có bất kỳ repo nguồn. Ví dụ, sitecopy
là một gói Fedora đã bị loại bỏ. Tôi đã cài đặt nó từ fedora
hoặc updates
repo 7 hoặc 8 bản phát hành trước đây và vẫn cài đặt nó:
$ dnf info sitecopy
Installed Packages
Name : sitecopy
Version : 0.16.6
Release : 14.fc22
Architecture : x86_64
Size : 373 k
Source : sitecopy-0.16.6-14.fc22.src.rpm
Repository : @System
Không có " From repo:
" được liệt kê.
Điều này có nghĩa khó hiểu có nghĩa là dnf list installed
sẽ hiển thị gói đó (và những người khác thích nó) với @System
(một @
) được liệt kê bên cạnh nó. Vì vậy, theo một nghĩa nào đó, chúng ta vừa trao đổi một mâu thuẫn cho một cái khác, vì cột đó không còn luôn là repo nguồn với tiền dự phòng @
. Tuy nhiên, tôi thích tình trạng hiện tại.
Chú thích
- "... gói được hiển thị ..."
(Đôi khi được hiển thị. "Gói có sẵn" sẽ không nhất thiết phải hiển thị trên mỗi lần dnf list
chạy: Nếu phiên bản đã cài đặt của gói là phiên bản khả dụng tốt nhất, thì nó được liệt kê trong "Gói đã cài đặt" do đó, sẽ rất dư thừa khi liệt kê nó trong "Gói có sẵn". Sử dụng
--showduplicates
sẽ buộc phần "Gói có sẵn" bao gồm tất cả các phiên bản đã biết, bất kể phiên bản, cho dù đã cài đặt hay có thể tải xuống.)
dnf
vô cùng im lặng về điều này. Giả sử '@' biểu thị một gói đã cài đặt, có phải '@@' có nghĩa là nó được cài đặt thủ công từ nguồn không repo, có lẽ? Tôi thực sự muốn ai đó sẽ làm rõ.