(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 listngữ 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ừ fedoratrê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 installedvà 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 @fedoratrong 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, @@commandlinetrong dnf listdanh 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 infotrê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ư đó @Systemlà 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 @commandlinevà @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 @commandlinesử 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ừ @@Systemvà các cài đặt ngoài băng sẽ thực sự hiển thị From repo: @commandline( @@commandlinetrong ngữ cảnh danh sách). dnf infotrê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 remirepo), 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 @commandlinenhư 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 infocho thấy rằng họ không còn có bất kỳ repo nguồn. Ví dụ, sitecopylà một gói Fedora đã bị loại bỏ. Tôi đã cài đặt nó từ fedorahoặc updatesrepo 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 installedsẽ 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 listchạ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
--showduplicatessẽ 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.)
dnfvô 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õ.