由于 rpm 工具不能解決軟件包之間的依賴問題,因此開發出來更好用的工具,CentOS 8 之前是使用 yum 工具,8 開始使用 dnf 工具。
DNF 是 YUM 的下一個主要版本,是基于 RPM 的 Linux 發行版的包管理器。它大致保持了與 YUM 的 CLI(命令行接口) 兼容性,并為擴展和插件定義了嚴格的 API。
CentOS 8 開始使用 dnf,這是 rpm 的前端程序(利用 python實現),可以解決軟件包之間的依賴關系。
命令的基本格式:
dnf [options] <command> [<args>...]dnf 是基于 C/S 模式的。
dnf 實現的過程:先在 dnf 服務器中創建倉庫(Repository),把 rpm 包存放其中,通過命令提取包的元數據,生成數據庫(放置在特定目錄 repodata 下),當 dnf 客戶端進行訪問時,先下載此元數據數據庫文件,然后在其中查詢所需的包及依賴包,最后從服務器中下載相應的包進行各種操作。
dnf 服務器的倉庫配置可以是多種形式:
注意:dnf 倉庫 url 必須指向服務器中的 repodata 所在的目錄。
客戶端上的配置文件有:
/etc/dnf.conf # 對所有倉庫配置 /etc/dnf.repos.d/*repo # 對單個倉庫配置幫助參考:man 5 dnf.conf 。
在配置dnf倉庫可以使用的變量:
$releasever # 當前OS的發行版的主版本號,例如,6,7,8 $arch # cpu架構,例如,aarch6,i586,i686,x86_64等 $basearch # 系統基層平臺:i386,x86_64 $contentdir # 表示目錄,例如,centos-8 $YUM0-$YUM9 # 自定義變量示例:在 CentOS 8.5.111 系統上,自己創建國內的鏡像阿里云的倉庫(可以從網上下載),基本需要如下:
cat /etc/yum.repos.d/CentOS-vault-8.5.2111.repo[base] name=CentOS-8.5.2111 - Base - mirrors.aliyun.com baseurl=http://mirrors.aliyun.com/centos-vault/8.5.2111/BaseoS/$basearch/os/ gpgcheck=0 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official如果想要完成以上步驟,可以在家目錄中寫一個腳步,自動完成以上步驟:
vim dnf_config_repo.sh# vim 中編寫以下代碼 #!/bin/bashcd /etc/yum.repos.d/[ -d backup ] || mkdir /etc/yum.repos.d/backup[-f *.repo ] || mv *.repo backup/cat > CentOS-Base-8.5.2111.repo <<EOF [BaseOS] name=CentOS 8.5.2111 base - mirrors.aliyun.com # 注意變量前面必須使用斜桿轉義 baseurl=http://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/\$basearch/os/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial EOF# chmod +x dnf_config_repo.sh如果想要安裝 EPEL 中的包,按照以下步驟:
dnf list | grep epel epel-next-release.noarch 8-11.el8 extras epel-release.noarch 8-11.el8 st | grep epeldnf -y install epel-releaserpm -ql epel-release /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 /etc/yum.repos.d/epel-modular.repo /etc/yum.repos.d/epel-playground.repo /etc/yum.repos.d/epel-testing-modular.repo /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel.repo /usr/lib/systemd/system-preset/90-epel.preset /usr/share/doc/epel-release /usr/share/doc/epel-release/README-epel-8-packaging.md /usr/share/licenses/epel-release /usr/share/licenses/epel-release/GPL但是,安裝時生成的 epel 倉庫網址可能不在國內,需要修改成國內的鏡像。
# 在epel源中安裝一個小火車 dnf -y install slsl# 有司機的火車 sl -a在CentOS 8 上應該至少要有 BaseOS、AppStream、extras 及 epel 倉庫。
倉庫的元數據緩存目錄
/var/cache/yum/x86_64/每個配置好的倉庫下載的數據都是緩存在這里。
可以使用以下命令清理緩存,但是如果已經先刪除了倉庫的配置文件,緩存是不會被清理的:
dnf clean all當然可以把存放緩存的目錄內容全部刪除。下載使用時會自動下載相應的元數據。也可以使用命令來下載緩存。
dnf make cache安裝的日志位置在:/var/log/dnf.log 中。而在 CentOS 8 以下但是在 /var/log/yum.log 中。
安裝操作系統時的日志在:/var/log/anaconda/ 中。
假設系統中的 rpm 命令通過以下方法被刪除了:
rpm -e rpm --nodeps想要恢復,除了重裝系統外,一個方法是設法重新安裝 rpm??梢灾貑⑾到y進入光盤啟動的救援模式,在這里進行安裝軟件,但是要指定選項:
mkdir /mnt/cdrom mount -r /dev/sr0 /mnt/cdromrpm -ivh /mnt/cdrom/Packages/rpm-4...... --root=/mnt/sysimage/# 切換 chroot /mnt/sysimagerpm -q rpmrebootEPEL 的 dnf 源:
阿里云 https://mirrors.aliyun.com/epel
Linux 新版本的內核網址,從而可以安裝新版內核:
https://www.elrepo.org/# 這個命令在以上網址上就有的 dnf install https://www.elrepo.org/elrepo-release-...在同一個主版本的前提下,可以安裝其他內核版本,但是不同的主版本之間的版本,由于有依賴問題不能直接安裝內核。
如果一個操作系統安裝時間比較早,可以使用以下命令來查詢安裝時間:
rpm -qi keneldnsmasq 命令,主要用于配置dns
配置好 dnf 倉庫后,可以執行:
dnf clean all dnf makecachednf repolist # 可以看到配置的倉庫id及包的數量等dnf list # 會列出所有可用的包,其中最后一列,有多種字符串的值,# 代表不同的含義,其中帶有 '@xxx' 代表已經安裝如果以上操作沒有出現錯誤,就可以使用以下命令進行安裝:
dnf -y install httpd# 可以使用以下方法,查詢是否已經安裝 rpm -q httpd此時就能順利地安裝軟件,并且自動解決包之間的依賴問題。
也可以使用以下命令,刪除已經安裝的軟件,并且在 CentOS 8 上,能夠自動刪除那些沒有被依賴的包。但是CentOS 7上并不會自動刪除那些依賴的包。
dnf -y removd httpd我們可以查看dnf操作的日志:
tail /var/log/dnf.log可以通過以下命令查看dnf操作歷史:
dnf historydnf history info N # 查看第 N 個歷史記錄dnf history undo N # 可以撤銷第 N 個歷史記錄dnf history redo N # 可以重新操作第 N 個歷史記錄dnf 倉庫的配置文件及啟用或禁用倉庫,來自于 yum-utils 包。其功能:管理 main 和存儲庫DNF配置選項,切換啟用或禁用的存儲庫,并添加新的存儲庫。
dnf -y install yum-utils# 格式:section 可以是 main 或 一個倉庫。如果沒有指定,則會選擇 main 節和 # 使用任何 --setopt 選項上的每個倉庫iddnf config-manager [options] \<section>...# 示例:增加一個倉庫 dnf config-manager --add-repo http://example.com/some/additional.repo# 啟用指定的倉庫,并持久化 dnf config-manager --set-enabled <repoid># 禁用指定的倉庫 dnf config-manager --set-disabled <repoid1> <repoid2> # 或者 dnf config-manager --set-disabled <repoid1>,<repoid2>下面以http提供倉庫為例,這種方法只能提供光盤的資源:
# 安裝 httpd 包 dnf install httpd -y systemctl enable httpd --now# cd /var/www/html mkdir /centos/8 -pv# 這里先用光盤的資源 mount -r /dev/sr0 /var/www/html/centos/8# 如果防火墻設置關閉,這是在瀏覽器中可以訪問到這些資源了 http://xx.xx.xx.xx/centos/8對于其他網上的資源需要下載所有 dnf 倉庫所需的相關包和元數據
# CentOS 8 dnf 工具集成 dnf reposync --help # 查看幫助 dnf reposync --repoid=REPOID --downloadmetadata -p /path# CentOS 7 及以前版本,reposync 來自于 yum-utils 包 reposync --repoid=REPOID --downloadmetadata -p /path示例:下載阿里云中的 extras 倉庫
mkdir /var/www/html/extras# 這樣就能夠同步到網上的資源,包括元數據 dnf reposync --repoid=extras --downloadmetadata -p /var/www/html/extras如果只有下載了部分需要的rpm包,這時需要使用以下命令生成元數據 repodata
dnf install createrepo -ycreaterepo [options] <directory>以下部分主要來自于CentOS 8 dnf 幫助。
–advisory=<advisory>, --advisories=<advisory> | 包括對應于咨詢的ID(例如,FEDORA-2201-123)的包。應用于安裝、倉庫查詢、升級信息和升級命令。 |
–allowerasing | 允許刪除已經安裝的包以解決依賴問題。 |
–assumeno | 對所有問題自動回答 no。 |
-b, --best | 嘗試事務中最佳可用的包。特別是在 dnf upgrade 升級期間(默認跳過由于依賴性原因而不能安裝包的升級),該選項強制 dnf 只考慮最新的包。當運行到依賴關系中斷的包時,dnf 會失敗,并給出為何最新的版本不能安裝的原因。 |
–bugfix | 包括修復問題的包。 |
–bz=<bugzilla>, --bzs=<bugzilla> | 包括修復 Bugzilla ID (例如,123123) 的包。 |
-C, --cacheonly | 完全從系統的緩存中運行,不升級緩存,且即使已經過期也使用它。 |
–color=<color> | 控制在終端輸出中使用那種顏色。有效值是:always, never 和 auto (默認)。 |
–comment=<comment> | 增加注釋到事務歷史中。 |
-c <config file>, --config=<config file> | 配置文件的位置。 |
–cve=<cves>, --cves=<cves> | 包括修復CVE(常見漏洞和風險)ID的程序包(http://cve.mitre.org/about/), 例如, CVE-2201-0123。 |
–disableexcludes=[all|main|<repoid>], --disableexcludekgs=[all|main|<repoid>] | 禁用配置文件排除。取以下三種選項之一: all,禁用所有配置文件排除; main,禁用在 [main] 節中定義排除的; repoid,禁用指定倉庫定義的排除。 |
–disable, --set-disabled | 禁用指定的倉庫(自動保存)。此選項需與 config-manager 命令(dnf-plugins-core)一起使用。 |
–disableplugin=<plugin names> | 禁用根據名稱或通配符指定的列出的插件。 |
–disablerepo=<repoid> | 禁用根據 id 或通配符指定的倉庫。此選項與 --repo 互斥。 |
–downloaddir=<path>, --destdir=<path> | 重定向下載的包至指定的目錄。此選項必須與以下一起使用,–downloadonly 命令行選項,download 命令 (dnf-plugins-core) 或 system-upgrade 命令 (dnf-plugins-extras)。 |
–downloadonly | 僅下載解析的包集,而不執行任何 rpm 事務(安裝,升級,刪除)。 |
–enable, --set-enabled | 啟用指定的倉庫(自動保存)。 |
–enableplugin=<plugin names> | 啟用根據名稱或通配符指定的列出的插件。 |
–enablerepo=<repoid> | 啟用根據id或通配符指定的另外的倉庫。 |
–enhancement | 包括增強相關的包。 |
-x <package-file-spec, --exclude=<package-file-spec> | 排除有 <package-file-spec> 指定的包。 |
–forcearch=<arch> | 強制使用架構。 |
–installroot=<path> | 指定相對于所有將安裝的包的另外的安裝根目錄。就像操作 chroot <root> dnf 一樣,除了使用 --installroot 允許 dnf 在切換跟之前進行操作。需要絕對路徑。 |
–newpackage | 包括與新包相關的包。 |
–noautoremove | 禁用刪除不再使用的依賴包。 |
–nobest | 設置 best 選項為 false,因此事務不會僅限制為最佳的候選。 |
–nodocs | 不要安裝文檔。 |
–nogpgcheck | 如果 rpm 策略允許,則跳過包的GPG簽名檢查。 |
–noplugins | 禁用而所有插件。 |
–obsoletes | 該選項對安裝或升級有效,它啟用了dnf 的過時處理邏輯。 |
-q, --quiet | 結合非交互式命令,僅顯示相關內容。壓制有關當前狀態或 dnf 操作的信息通知。 |
-R <minutes>, --randomwait=<minutes> | 命令等待最多時間。 |
–refresh | 在執行命令之前,把元數據設置為過期。 |
–releasever=<release> | 配置 dnf,好像發行版是 <release>。這將影響到緩存路徑、配置文件和鏡像列表 URLs 中的值。 |
–repofrompath <repo>, <path/url> | 指定一個倉庫加入本次查詢的倉庫集中。該選項可以使用多次。 |
–repo=<repoid>, --repoid=<repoid> | 僅啟用通過 id 或通配符指定的倉庫。 |
–rpmverbosity=<name> | rpm 調試腳本片段輸出級別。為腳本片段設置調試級別至 <name>。 |
–sec-severity=<severity>, --secseverity= | 包括提供修復一個指定嚴重性問題的包。 |
–security | 包括提供修復一個嚴重性問題的包。 |
–setopt=<option>=<value> | 從該配置文件覆蓋配置選項。想要覆蓋倉庫的配置選項,使用 repoid.option 以設置 <option>。 |
–skip-broken | 通過事務中刪除引起問題的包來解決依賴問題。 |
–showduplicates | 顯示倉庫中重復的包。 |
-v, --verbose | 詳細操作,顯示調試信息。 |
-y, --assumeyes | 對于所有提問,自動回答 yes。 |
允許用戶定義和管理別名列表(以<name=value> 格式),然后利用別名來當成 dnf 命令使用,以簡寫較長的命令序列。
想要使用別名(name=value),name 必須出現在作為第一個"命令"的位置(例如,第一個參數不是選項)。然后被其值 value 替代,且結果序列再次進行搜索別名。當第一個發現的命令不是任何別名的名稱時,別名處理停止。
為了防止出現遞歸,像 shell 別名一樣,在命令前面使用 \,這樣別名處理將會停止。
所有的別名都定義在 /etc/dnf/aliases.d/ 目錄下得 [aliases] 節中的配置文件,并有 alias 命令創建的別名寫入 USER.conf 文件內。如果發生沖突,則 USER.conf 有更高的權限,且其他的配置文件安裝字母順序排列。
命令格式:
創建新的別名:
dnf alias [options] add \<name=value>...# 例如,創建一個別名 dnf alias add in=installdnf alias add rm=removednf alias add upgrade="\upgrade --skip-broken --disableexcludes=all --obsoletes"dnf alias add FORCE="--skip-broken --disableexcludes=all"列出最終結果的別名列表。[<name>…] 參數進一步限制至只匹配它的結果。
dnf alias [options] [list] [\<name>...]# 例如,查詢所有的別名 dnf alias list Alias in='install' Alias rm='remove' Alias FORCE='--skip-broken --disableexcludes=all' Alias upgrade='upgrade --skip-broken --disableexcludes=all --obsoletes'dnf alias list [root@centos8 aliases.d]# dnf alias list rm Alias rm='remove'刪除別名:
dnf alias [options] delete \<name>...從系統中刪除所有最初由用戶安裝包時作為依賴包安裝的,且不被任何這樣的包需要的"葉子"包。
在 installonlypkgs 列出的包不會自動通過以下命令刪除。
dnf [options] Autoremove \<spec>...這是 Remove Command 帶 clean_rerequirements_on_Remove(刪除時清除依賴包)設置為True 的別名。它將從系統中刪除指定的包以及任何依賴于指定包的包。每個<spec>可以是一個<package spec>,它直接指定一個包,或者是一個@<group spec>(它指定一個包含它的(環境)組)。它還刪除了不再需要的任何依賴項。
檢測當地包數據庫和產生有關它找到的任何問題信息。
非交互式檢查指定包的更新是否可用。如果未提供,則檢查系統是否有可用的更新。當有可用更新時,DNF退出代碼將為100,并且將打印更新列表,如果沒有,則為0,如果發生錯誤,則為1。如果指定了–changelogs選項,還將打印要更新的包的changelog增量。
執行為存儲庫保留的臨時文件的清理。這包括從禁用或刪除的存儲庫以及不同發行版本中留下的任何此類數據。
dnf clean dbcache # 刪除由倉庫元數據產生的緩存文件dnf clean expire-cache # 標記已經過期的倉庫元數據dnf clean metadata # 刪除倉庫元數據dnf clean packages # 刪除系統中任何緩存的包dnf clean all # 刪除所有以上的內容別名:dsync
dnf distro-sync [\<package-spec>...]根據需要升級、降級或保留選定的已安裝軟件包,以匹配任何已啟用存儲庫中可用的最新版本。如果未提供包,則考慮所有已安裝的包。
別名:dg
dnf [options] downgrade \<package-spec>...如果可能,將指定的軟件包降級到所有已知較低版本中最高的可安裝軟件包。如果給定的版本低于已安裝包的版本,則會降級到目標版本。
別名:grp
組是包的虛擬集合。DNF跟蹤用戶選擇(“標記”)安裝的組,并可以通過簡單的命令操作包含的包。
顯示多少已經安裝和可用的組的概況。如果指定組名,則僅顯示為匹配的組信息。summary 是默認的組子命令。
dnf [options] group [summary] \<group-spec># 最小化安裝,還沒有安裝組 dnf group Last metadata expiration check: 16:10:43 ago on Thu 17 Nov 2022 03:58:44 PM CST. Available Groups: 14顯示指定的包列表。如果使用 -v 選項,顯示倉庫中那些包已安裝或可用。
dnf [options] group info \<group-spec># 示例 dnf -v group info development Loaded plugins: builddep, changelog, config-manager, copr, debug, debuginfo-install, download,generate_completion_cache, groups-manager, needs-restarting, playground, repoclosure,repodiff, repograph, repomanage, reposync DNF version: 4.7.0 cachedir: /var/cache/dnf User-Agent: constructed: 'libdnf (CentOS Linux 8; generic; Linux.x86_64)' repo: using cache for: base base: using metadata from Fri 31 Dec 2021 02:06:31 PM CST. repo: using cache for: extras extras: using metadata from Fri 10 Dec 2021 08:56:25 PM CST. repo: using cache for: AppStream AppStream: using metadata from Fri 31 Dec 2021 02:06:52 PM CST. repo: using cache for: epel epel: using metadata from Thu 17 Nov 2022 11:18:55 AM CST. repo: using cache for: epel-modular epel-modular: using metadata from Tue 13 Sep 2022 09:46:46 AM CST. Last metadata expiration check: 16:20:38 ago on Thu 17 Nov 2022 03:58:44 PM CST.Group: Development ToolsGroup-Id: developmentDescription: A basic development environment. ......標記指定的組已安裝,且安裝其包含的包。如果指定了 --with-optional,則也會包括組中可選的包。
dnf [options] group install [--with-optional] \<group-spec>...# 示例安裝開發組 dnf grp install development編輯指定組為被刪除,且從系統中刪除該組中的這些包,即不屬于其他已安裝組的,也不是用戶明確安裝的包。
dnf [options] group remove \<group->升級組中的包和組本身。后者由在安裝的分發者增加的包和從組中刪除的包組成,只要不是用戶明確安裝。
dnf [options] group upgrade \<group-spec>...可以在沒有物理操作包的情況下,標記組已安裝或刪除。
dnf [options] group mark install \<group-spec>...dnf [options] group mark remove \<group-spec>...顯示所有命令的幫助文本。如果指定命令名稱,則只顯示特定命令的幫助信息。
dnf help [\<command>]別名:hist
history 歷史命令允許用戶查看在過去的事務中發生過什么,及根據這些信息進行操作(假設 history_record 配置選項以設置)。
默認的歷史記錄動作是在一個表中列出指定事務的信息。每個 <spec> 可以是直接指定的 <transaction-spec>,或者是指定事務范圍的 <transaction-spec>…<transaction-spec>,或者是通過指定一個包來確定操作的事務 <package-spec>。如果沒有指定事務,則列出所有已知的事務。
–reverse:表示歷史列表以逆序方式打印。
dnf history [list] [--reverse] [\<spec>...]# 示例,列出所有已知的事務 dnf history描述指定的事務。
dnf history info [\<spec>...]重新操作指定的事務。
dnf history redo \<transaction-spec>\|\<package-file-spec>回放由 history store 命令保存在 <filename> 中的事務。該回放將執行與原始事務對包所進行的相同的操作,且如果在安裝其版本的包時出現任何不同,將返回一個錯誤。
dnf history replay [--ignore-installed] [--ignore-extras][--skip-unavailable] \<filename>撤銷指定事務之后的所有事務執行。
dnf rollback \<transaction-spec>\|\<package-file-spec>保存由 <transaction-spec> 指定的事務。-o <output-file> 用于把序列化的事務保存至 <output-file>。默認保存在 transaction.json。
dnf history store [--output \<output-file>] \<transaction-spec>執行與指定事務中所有執行的操作相反的操作。
dnf history undo \<transaction-spec>\|\<package-file-spec>顯示所有安裝時只有包,非通過 dnf 安裝的包,及不作為依賴而安裝的包。這也可以使用 dnf repoquery --userinstalled 得到結果,并且后者更強大。
dnf history userinstalled列出已安裝的和可用的包的信息和概況。
dnf [options] info [\<package-file-spec>...]別名:in
確保在系統上安裝指定的包和它們的依賴包。
dnf [options] install \<spec>...安裝示例:
# 安裝 tito 包(tito 是包名) dnf install tito# 從 指定路徑安裝本地 rpm 文件 dnf install ~/Downloads/tito-0.6.2-1.fc22.noarch.rpm# 安裝指定版本的包。如果該包已經安裝,則它會自動嘗試降級或升級至指定的版本 dnf install tito-0.5.6-1.fc22# 安裝最新可獲取的包版本。 dnf --best install tito# dnf 會自動識別出 vim 不是一個包名,但是會尋找和安裝提供 vim 及其所有依賴的包。注意:包名匹配優先于包提供匹配。 dnf install vim# 直接從URL安裝包 dnf install https://kojipkgs.fedoraproject.org//pack‐ages/tito/0.6.0/1.fc22/noarch/tito-0.6.0-1.fc22.noarch.rpm# 安裝所有模塊 'docker' 中的所有默認配置文件和rpm包。并相應地啟用模塊流。 dnf install '@docker'# 安裝 'Wedb Server' 環境組。 dnf install '@Web Server'# 安裝支持 /usr/bin/rpmsign 文件的包 dnf install /usr/bin/rpmsign# 安裝 tito 包,無需弱依賴的包。弱依賴的對于包的核心功能是不需要的,但是它們能增強原始包(例如, # 擴展的文檔,插件,額外的功能等) dnf -y install tito --setopt=install_weak_deps=False# 安裝所有屬于"FEDORA-2018-b7b99fe852"建議的包 dnf install --advisory=FEDORA-2018-b7b99fe852 \*別名:ls
根據包與系統的關系打印包的列表。如果包已經存在于 RPMDB,則顯示為 installed,如果包存在于 dnf 知道的倉庫,則顯示為 available。根據指定的條件,當然可以限制顯示的包。
# 列出在本地 RPMDB,倉庫中或兩者中所有包。 dnf [options] list [--all] [\<package-file-spec>...]# 列出已安裝的包 dnf [options] list --installed [\<package-file-spec>...]# 列出可用的包 dnf [options] list --available [\<package-file-spec>...]# 列出額外的,即系統上已安裝的,但是在任何已知倉庫沒有的包 dnf [options] list --extras [\<package-file-spec>...]# 列出已安裝在系統上,但在已知的倉庫標記為過時的包 dnf [options] list --obsoletes [\<package-file-spec>...]# 列出最近加入到倉庫中的包 dnf [options] list --recent [\<package-file-spec>...]# 列出已安裝可升級的包 dnf [options] list --upgrades [\<package-file-spec>...]# 列出會被 dnf Autoremove 命令刪除的包 dnf [options] list --Autoremove別名:mc
下載并緩存啟用的倉庫的元數據。如果本地元數據沒有過期或者元數據時間戳沒有變化,則盡可能避免下載。
dnf [options] makecache與普通的 makecache 類似,但是知道 dnf 更關注電腦資源,這意味著如果使用電池動力則不會做任何事,且如果離上次成功 makecache 運行時間太短,將馬上終止操作。
dnf [options] makecache --timer標記指定的包為用戶安裝的。如果有些包是作為依賴包安裝的,并希望保留在系統中,這時就非常有用。
dnf mark install <package-spec>...標記指定的包不是用戶安裝的。
dnf mark remove <package-spec>...標記指定的包為組安裝的。如果一個包是作為依賴包或用戶安裝的,并希望得到保護,例如刪除組時,作為組成員來處理。
dnf mark group <package-spec>...別名:prov,whatprovides
找到提供指定的 <provide-spec> 的包。當知道文件名且想找出那個包(不論是否已安裝)支持改文件時有用。按以下位置逐步查找 <provide-spec>:
使用任何可用的包支持的包匹配 <provide-spec> :
$ dnf provides /usr/bin/gzip gzip-1.9-9.fc29.x86_64 : The GNU data compression program Matched from: Filename : /usr/bin/gzip然后,搜索所有可用的包支持所有文件:
$ dnf provides "gzip(x86-64)" gzip-1.9-9.fc29.x86_64 : The GNU data compression program Matched from: Provide : gzip(x86-64) = 1.9-9.fc29DNF 假設 <provide-spec> 是一個系統命令,在其前面加上 /usr/bin/,/usr/sbin/ 前綴(一次一個),然后再次進行文件支持搜索。由于傳統原因(沒有進行 UrsMove 操作的包),也會在其前面加上 /bin,/sbin 前綴再進行搜索:
$ dnf provides zless gzip-1.9-9.fc29.x86_64 : The GNU data compression program Matched from: Filename : /usr/bin/zless如果上一步也失敗了,則 DNF 返回 “Error: No Matches found”。
別名:rei
安裝指定的包,如果一些包要么未能安裝或不可用(例如,沒有倉庫可以下載到相同的 rpm),則失敗。
dnf [options] Reinstall <package-spec>...別名:rm
從系統中刪除指定的包及其依賴的不被使用的包。
dnf [options] remove <package-spec>...# 示例:刪除 acpi 和 tito 包 dnf remove acpi tito # 刪除任何存儲庫中不存在的包,但不要刪除tito和acpi包(如果它們依賴于某些已刪除的包,則仍可能被刪除)。刪除重復包的舊版本。為了確保系統的完整性,它將重新安裝最新的軟件包。在某些情況下,命令無法解決沖突。在這種情況下,帶有 remove --duplicates 的 dnf-shell子命令和 upgrade 的 dnf shell命令可能會有所幫助。
dnf [options] remove --duplicates只刪除安裝的舊包,只保留最新的版本及正在運行的內核版本。
dnf [options] remove --oldinstallonly類似 dnf repolist -v 的提供更多細節信息的 repolist 命令的別名。
根據確切的命令,列出啟用、禁用或所有已知的倉庫。默認列出所有啟用的倉庫。使用 -v 選項時,提供更詳細的信息。
dnf [options] repolist [--enabled|--disabled|--all]在可用的 DNF 存儲庫中搜索選定的軟件包,并顯示有關這些軟件包的請求信息。它相當于對遠程存儲庫執行 rpm -q。
dnf [options] repoquery [<select-options>] [<query-options>] [<package-file-spec]提供 --queryformat 倉庫查詢選項所識別的標記列表。
dnf [options] repoquery --querytags與<package-file-spec> 一起控制輸出中的那些包會顯示。如果指定了 <package-file-spec>,則限制為匹配指定條件的包集。如果沒有指定 <package-file-spec> ,則考慮所有的包。
<package-file-spec>
以NEVRA格式(name[-[epoch:]version[-release]][.arch])指定包,是包的支持或者文件支持。
-a, --all
查詢所有包(與 rpmquery 兼容,也是 repoquery ‘*’ 或不帶次數的 repoquery 的簡寫)。
arch <arch>[,<arch>…], --archlist <arch>[,…]
限制結果集僅為所選架構的包(默認是所有架構)。在某些情況下,結果收到正在運行的系統的基層架構的影響,因此,如果運行 repoquery 查詢與你的系統不兼容時,請使用 --forcearch=<arch> 選項以改變基層架構。
–duplicates
限制結果集為已安裝的重復的包(例如,具有相同名稱和架構的多個版本)。只安裝的包排除該集合外。
–available
限制結果集至只有可用的包(默認的設置)。
–extras
限制結果集為在任何可用的倉庫中都不存在的包。
–installed
限制結果集至已經安裝的包。配置文件中的 exclude 選項可能會影響結果,但是如果命令行上使用了選項 --disableexcludes,那么,能確保列出所有已安裝的包。
installonly
限制結果集至已安裝的只安裝包(installonly)。
–recent
限制結果集至最近編輯過得包。
repo <repoid>
限制結果集僅由 <repoid> 指定的倉庫中的包??梢远啻问褂靡堰_到累計效果。
–upgrade
限制結果集至能提供升級一些已安裝的包的包。
–userinstalled
限制結果集至由用戶安裝的包。
–whatdepends <capability>[,<capability>…]
限制結果集至需要、增強、推薦、建議或實現的任何 <capability> 的包。
– whatconflicts <capability>[,<capability>…]
限制結果集至與任何 <capability> 相沖突的包。
–whatenhances <capability>[,<capability>…]
限制結果集至增強任何 <capability> 的包。
–whatobsolete <capability>[,<capability>…]
限制結果集至那些使任何 <capability> 過時的包。
–whatprovides <capability>[,<capability>…]
限制結果集至那些支持任何 <capability> 的包。
–whatrequires <capability>[,<capability>…]
限制結果集至那些需要任何 <capability> 的包。
–whatsuggests <capability>[,<capability>…]
限制結果集至那些建議任何 <capability> 的包。
–whatsupplements <capability>[,<capability>]
限制結果集至那些補充任何 <capability> 的包。
–alldeps
此選項只與 --whatrequires 或 --whatdepends 一起使用。此外,它會將所有需要此包功能的包加到結果集中(默認使用)。
–exactdeps
此選項只與 --whatrequires 或 --whatdepends 一起使用。限制結果集至那些需要由 --whatrequires 指定的 <capability> 的包。
–srpm
在相應的 rpm 源上操作。
設置顯示每個包的那些信息。
以下選項是互斥的,最多可以指定一個。如果沒有給出查詢選項,則匹配的包以標準的 NEVRA 表示法顯示。
以下表述中的 capabilities 中文含義是能力,應該是指 包的名稱 或文件等。
-i, --info
顯示有關包的詳細信息。
-l, --list
顯示該包中文件列表。
-s, --source
顯示包源 rpm 名稱。
–changelogs
打印包的改變日志。
–conflicts
顯示與該包相沖突的 capabilities。類似于 --qf “%{conflicts}”
–depends
顯示該包所依賴的、增強的、推薦的、建議的 或實現的 capabilities。
–enhances
顯示該包增強的 capabilities。類似于 --qf “%{enhances}”。
–location
顯示該包將會從那個位置下載。
–obsoletes
顯示該包使那些 capabilities 過時。類似于 --qf “%{obsoletes}”
–provides
顯示該表支持的 capabilities。類似于 --qf “%{recommends}”。
–recommends
限制該包推薦的包。類似于 --qf “%{recommends}”。
–requires
顯示該包所依賴的 capabilities。類似于 --qfqf “%{requires}”。
–requires-pre
顯示該包所依賴的運行 %pre 腳本的 capabilities。類似于 --qfqf “%{requires-pre}”。
–suggests
顯示該包建議的 capabilities。類似于 --qfqf “%{suggests}”。
–supplements
顯示該包補充的 capabilities。類似于 --qfqfqf “%{supplements}”。
–tree
使用以下補充選項指定的 capabilities 顯示包的遞歸樹:–whatre‐quires, --requires, --conflicts, --enhances, --suggests, --provides, --supplements, --recommends.
–deplist
生成所有直接依賴項的列表,以及哪些包為給定的包提供這些依賴項。結果只顯示最新的提供程序(可以使用–verbose更改)。
–nvr
顯示發現的以 name-version-release (名稱-版本-發行)格式的包。與 --qf “%{name}-%{version}-%{release}”。
–vevra
顯示發現的以 epoch:name-version-release.architecture 格式的包。
–qf <format>, --queryformat <format>
自定義顯示格式。<format> 是為每個匹配的包輸出的字符串。里面出現的每個 %{<tag>} 都會替換為該包對應的屬性。被識別的標簽列表能通過運行 dnf repoquery --querytags 來顯示。
–recursive
遞歸查詢包。必須與 --whatrequires <REQ> (可選 --alldeps,但不能與 --exactdeps 一起) 或者與 --requires <REQ> --resolve 一起使用。
–resolve
解析原始包的 capabilities 。
顯示所有匹配 light* 的可用NEVRA格式的包:
dnf repoquery 'light*'顯示所有匹配 light* 及 noarch 架構的可用的NEVRA格式的包(只接收 “<name>.<arch>” 格式的參數)。
dnf repoquery-na 'light*.noarch'顯示所有 lighttpd 包的依賴:
dnf repoquery --repuires lighttpd顯示提供python包所需要的包:
dnf repoquery --repuires python --resolve顯示 lighttpd 包的源 rpm:
dnf repoquery --source lighttpd顯示擁有給定文件的包名:
dnf repoquery --file /etc/lighttpd/lighttpd.conf顯示所有 lighttpd bk 的名稱、架構和包含的倉庫:
dnf repoquery --queryformat '%{name}.%{arch} : %{reponame}' lighttpd顯示所有支持 “webserver” 的可用包:
dnf repoquery --whatprovides webserver顯示所有支持 “webserver” 但只適合 “i686” 的可用的包:
dnf repoquery --whatprovides webserver --arch i686顯示重復的包:
dnf repoquery --duplicates顯示需要用于構建的 <provide> 的源包:
dnf repoquery --disablerepo="*" --enablerepo="*-source" --arch=src --whatrequires \<provide>該命令允許用戶在名為 <repoid> 的倉庫中所有包之上允許命令。但是,任何依賴性解決方案考慮所有啟用的倉庫中的包。<package-file-spec> 和 <package-spec> 的指定進一步限制候選項僅為至少匹配它們之一的那些包。
info 子命令列出有關該包相關倉庫的依賴的包的描述和概況。list 子命令僅打印那些包的列表。
具體內容省略。
別名:se
在包元數據中搜索關鍵字。關鍵字匹配為不區分大小寫的子字符串,支持通配符。默認情況下,列出與所有請求的鍵(AND操作)匹配的包。在包名稱和摘要中搜索關鍵字。如果使用“–all”選項,則列出至少與其中一個鍵匹配的包(OR操作)。此外,在包描述和URL中搜索關鍵字。結果從最相關的結果到最不相關的結果進行排序。
dnf [options] search [--all] \<keywords>...別名:sh
具體內容省略。
別名:up
升級每個包至可用的和可解析的最新版。
dnf [options] upgrade升級每個指定的包至最新可用的版本。如果需要也升級依賴包。如果指定了版本,則升級到那些版本。
dnf [options] upgrade \<package-spec>...dnf module update 命令的別名。
dnf [optios] upgrade @\<spec>...別名:up-min
升級每個包至提供 bug修復、安全問題的增強或修復的最新的版本。
dnf [options] upgrade-minimal升級每個指定的包至提供 bug修復、安全問題的增強或修復的最新的版本。如果有必要也升級依賴包。
dnf [options] upgrade-minimal \<package-spec>...許多命令獲取 <package-spec> 參數來選擇包供操作。該參數以匹配包的NEVRA、支持包和文件支持包。
<package-file-spec> 與 <package-spec> 相似,除了支持包不會執行。因此,<package-file-spec> 只匹配NEVRA和文件支持包。
<package-name-spec> 只匹配NEVRA。
Globs 通配符
包指定支持與 shell 所匹配的通配符模式一樣。
NEVRA 匹配
在匹配NEVRA時,支持部分匹配。dnf 試圖與以下NEVRA格式列表(以優先級降序排列)匹配指定的內容:
注意:這個 name 通??梢园?‘-’ (例如,package-with-dashes)。
顯式指定 NEVRA 匹配
一些命令(Autoremove、install、remove 和 repoquery)也有帶后綴 -n、-na和 -nevra 的別名,這樣允許顯式指定如何解析參數:
在命令描述中的 <provide-spec> 意味著該命令在提供指定的 spec 的包上操作。這可以是顯式提供的,也可以是隱式提供的(例如,包名)或者文件的提供的。該選擇是大小寫敏感的和支持通配符。
<group-spec> 允許用戶選擇在(環境)組上進行特定的操作。這是以大小寫敏感的字符串(支持通配符字符)與組id、規范名稱和如果可能,名稱轉換成當前的 LC_MESSAGES進行匹配。
包過濾選項會從可用的包集中過濾掉包,使它們對 dnf 命令不可見。它們不能用在事務中??梢允褂?Exclude 過濾或 Modular 過濾選項來過濾包。
排除過濾
排除過濾是用戶或 dnf 插件使用的一種機制,以修改可用包的集合。排除過濾可以通過在配置文件中的 includepkgs 或 excludepkgs 來修改。命令行上的 --disableexcludes 選項用于覆蓋配置文件中的排除。另外,用戶配置的排除、插件可以擴展排除包集。想要從 dnf 插件的排除,您可以使用 --disableplugin 命令行選項。
要禁用所有排除,例如安裝命令,可以使用以下命令行選項組合:
dnf --disableexcludes=all --disableplugin="*" install bash模塊過濾
對于模塊過濾如何操作,請參考模塊文檔。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
(資料圖)隨著社會越來越發達,大家都選擇在網絡上汲取相關知識內容,比如微信小秘是個軟件嗎,為了更好的解答大家的問題,小編也是翻閱整理了相應內容,下面就一起來看一下吧!微信小秘現改名為微小秘,是由微秘書工作室自主研發的微信營銷軟件,且是一款高效的移動互聯網營銷工具?;诎沧肯到y的微信群發軟件,其精準、真實、在線互動的模式在國內處于領先位置。擁有完善的銷售管理體系和配套的售后服務網絡,剛上市就受到廣大...
國內成品油價現年內最大降幅是多少?油價年內最大降幅油價會可能回歸6元時代!2019年1月14日24: 00,中國油價經歷新年第一次調整。此次上漲后,中國油價一路上漲,其中11次調整,8次上漲,2次下跌,1次擱淺。我相信很多車主看到加油站估值表上的數字一步步變大,都是欲哭無淚的。油價將開啟新一輪調整窗口,根據目前的信息,今年迎來的油價將會最大程度的下調!有機構預測這次汽柴油價格下調410元/噸,汽油...
根據國家網貸的規定,捷信是屬于高利貸,對于超過國家規定的貸款利率部分是需要退還給用戶的,那么捷信退利息是在哪里退?捷信辦理退息是需要通過關注“聚投訴”微信公眾號,按照公眾號的提示進行操作并提交好有關貸款的證明資料之后,就會有捷信官方工作人員聯系用戶辦理退息手續。需要注意的是,捷信退息退還的只是超出國家規定范圍內的利息。捷信怎么退利息流程【1】首先借款人要準備借款證明、利息證...