Package manager (APT, YUM, DNF)
Table of Contents
1. APT 系列
apt stands for Advanced Package Tool.
apt-get 的源配置文件为:/etc/apt/sources.list
1.1. apt-get
更新本机数据库缓存,更改 sources.list 后要做这个操作:
apt-get update
安装软件包,如果有其他依赖则自动安装相应的依赖软件包。package_name 可以是多个软件包:
apt-get install package_name
卸载软件包,但保留配置文件:
apt-get remove package_name
卸载软件包,把它依赖的不再需要的软件包也卸载。如果 autoremove 后不加 package_name,则把自动安装的不再需要的所有软件包都卸载:
apt-get autoremove package_name
卸载软件包,同时删除配置文件:
apt-get purge package_name
清理所有的缓存文件,这会清理所有/var/cache/apt/archives/和/var/cache/apt/archives/partial/中没有被锁定的文件:
apt-get clean
仅仅清理旧的缓存文件,这会清理旧版本的/var/cache/apt/archives/和/var/cache/apt/archives/partial/中的文件:
apt-get autoclean
下载软件包 package_name 的源码:
apt-get source package_name
仅下载软件包 package_name,不会安装它:
apt-get download package_name
检查所有包的信赖关系:
apt-get check
移除那些标记 broken 的软件包:
apt-get --fix-broken install/remove
--fix-broken 也可省略为 -f。-f 参数后接 install 或 remove 作用一样(后面不要带软件包名),都会移除那些标记 broken 的软件包(软件包通过 dpkg -i 方式安装时,就算依赖没有满足也可能会安装,但这些软件包会标记为 broken)。
1.2. apt-cache
显示指定软件包的信息,包括版本号,包依赖关系等:
apt-cache show package_name
搜索软件包,可以按关键字(可以用正则表达式)查找软件包,通常用于查询的关键字会使用软件包的名字或软件包的一部分:
apt-cache search package_name
显示软件包的依赖关系信息:
apt-cache showpkg package_name
显示当前系统所使用的数据源的统计信息,用户可以使用该命令查看数据源的相关统计信息:
apt-cache stats
显示软件包的安装状态和版本信息:
apt-cache policy package_name
显示指定软件包所依赖的软件包:
apt-cache depends package_name
查询指定软件包的反向依赖关系,即那些其他的软件包需要依赖你所指定的软件包作为安装和运行的必须条件:
apt-cache rdepends package_name
显示缓存中的每个软件包的简要描述信息:
apt-cache dump
1.3. apt-file
apt-file 可用于查找某个文件属于存在于哪些软件包中。这个命令不是系统自带的,需要自己安装,安装后需要对 apt-file 进行更新:
$ sudo apt-get install apt-file $ sudo apt-file update
1.3.1. 实例:搜索头文件所在软件包
在编译安装某程序时,常常会提示找不到某个头文件,比如找不到 X11/Intrinsic.h 文件。
可以用 apt-file 搜索缺失的文件,例如:
$ apt-file search Intrinsic.h
这样就可以找到答案了
libxt-dev: /usr/include/X11/Intrinsic.h
最后把安装 libxt-dev 就可以了。
注意:如果找不到搜索的文件,要试试先更新一下 sudo apt-file update。
1.4. dpkg
dpkg stands for Debian GNU/Linux Package Manager
dpkg 基本用法:
安装软件 package_file.deb:
dpkg -i package_file.deb
卸载 deb 软件,不删除其配置文件:
dpkg -r package_name
卸载 deb 软件,同时删除其配置文件:
dpkg -P package_name
列出软件包(必须已安装)包含哪些文件:
dpkg -L package_name
注:可以通过命令 dpkg --contents package_file.deb(--contents 可省写为 -c)查看一个软件包在安装后将会产生哪些文件到系统中。
列出所有已经安装的软件包:
dpkg -l
列出以 gcc 开头的软件包状态:
dpkg -l gcc*
查看某个文件属于哪个软件包:
dpkg -S file
如下面命令可以查看/usr/share/doc/gcc-3.4-base/FAQ.gz 属于哪个软件包:
$ dpkg -S /usr/share/doc/gcc-3.4-base/FAQ.gz gcc-3.4: /usr/share/doc/gcc-3.4-base/FAQ.gz
注:这个命令非常有用,如果不知道系统中的某个工具来自哪个软件包,就可以通过它来查询。
显示软件包的详细状态信息:
dpkg -s package_name
通过软件包查询相关信息(当然前提是手头有 deb 文件):
dpkg -I package_file.deb # 或者 dpkg --info package_file.deb
注:安装软件时指定的是 deb 的文件名,而卸载时指定的是“软件名”。
删除 rc 状态的包
rc 状态的包,即已经卸载了却保留了配置文件的包。
如果想要完整删除所有 rc 状态的包,一个一个删还是很麻烦的,可以使用以下命令进行清理:
dpkg -l | grep ^rc | cut -d' ' -f3 | sudo xargs dpkg --purge
摘自:http://blog.csdn.net/chrisniu1984/article/details/6619755
卸载(并删除其配置文件)以 libobasis3.4-开头的所有软件包:
dpkg -l libobasis3.4-*| grep ^ii | cut -d' ' -f3 | sudo xargs dpkg --purge
查看匹配的包:
dpkg --get-selections package-name-pattern
如:dpkg --get-selections gimp*
会找到以 gimp 开头的软件包。
1.4.1. dpkg-deb
手里有个 deb 文件,想知道安装后会在系统里增加哪些文件:
dpkg-deb -c file.deb
1.5. Tips
1.5.1. 设置代理
在/etc/apt/下建一个 apt.conf 的文件,并在文件中输入:
Acquire::http::proxy "http://yourproxy:yourport/";
注意:最后面必须用“;”结束。
1.5.2. 增加源(apt-add-repository)
最好不要手动编辑 /etc/apt/sources.list,如果要增加源时,可以使用 apt-add-repository 命令。如:
$ sudo apt-add-repository 'deb http://repos.codelite.org/ubuntu/ trusty universe'
2. yum VS. apt
参考:
中文版:http://blog.csdn.net/panblack/article/details/7172648
英文版:https://help.ubuntu.com/community/SwitchingToUbuntu/FromLinux/RedHatEnterpriseLinuxAndFedora
2.1. 添加、删除、更新软件包
添加、删除、更新软件包相关命令如表 1 所示。
任务 | redhat | debian |
---|---|---|
刷新软件包列表 | Yum 每次运行自动刷新 | apt-get update |
从软件包仓库安装软件 | yum install package_name | apt-get install package_name |
从文件安装软件包 | yum install package.rpm rpm -i package.rpm | dpkg --install package.deb |
删除软件包 | yum remove package_name | apt-get remove package_name |
删除软件包及其依赖 | yum autoremove package_name | apt-get autoremove package_name |
检查软件包是否有升级 | yum check-update | apt-get -s upgrade apt-get -s dist-upgrade |
升级软件包 | yum update rpm -Uvh [args] | apt-get dist-upgrade |
升级整个系统 | yum upgrade | apt-get dist-upgrade |
2.2. 软件包信息
软件包信息相关命令如表 2 所示。
任务 | redhat | debian |
---|---|---|
搜索软件包 | yum search package_name | apt-cache search package_name |
显示库中存在的软件包 | yum list available | apt-cache dumpavail |
显示已安装的软件包 | yum list installed 或者 rpm -qa | dpkg --list |
显示某软件包信息 | yum info package_name | apt-cache show package_name |
显示已安装的某软件包信息 | rpm -qi package_name | dpkg --status package_name |
显示已安装的某软件包的文件 | rpm -ql package_name | dpkg --listfiles package_name |
显示已安装的某软件包的文档文件 | rpm -qd package_name | - |
显示已安装的某软件包的配置文件 | rpm -qc package_name | - |
显示指定软件包的依赖项 | rpm -qR package_name | apt-cache depends |
显示哪些软件包依赖指定的包(反向依赖关系) | rpm -q --whatrequires [args] | apt-cache rdepends |
2.3. 软件包文件信息
软件包文件信息相关命令如表 3 所示。
任务 | redhat | debian |
---|---|---|
获得某软件包文件信息 | rpm -qpi package.rpm | dpkg --info package.deb |
显示包中的文件 | rpm -qpl package.rpm | dpkg --contents package.deb |
显示包中的文档文件 | rpm -qpd package.rpm | - |
显示包中的配置文件 | rpm -qpc package.rpm | - |
解压缩包中的文件 | rpm2cpio package.rpm | cpio -vid | dpkg-deb --extract package.deb dir-to-extract-to |
查找指定文件是哪个包安装的 | rpm -qf filename | dpkg --search filename |
查找提供某文件的包 | yum provides filename | yum whatprovides filename | apt-file search filename |
2.3.1. 查询未安装软件包所提供的所有文件
在 Redhat 中,可以使用 dnf repoquery -l package_name
查询 package_name(可以是还未安装到系统中的软件包)所提供的所有文件,如:
$ sudo dnf repoquery -l openssl-devel
参考:https://stackoverflow.com/questions/104055/how-to-list-the-contents-of-a-package-using-yum
2.3.2. 使用 whatprovides 查找文件所在软件包
使用 yum whatprovides
可以查找某文件(如 libpng.so)所在软件包,需要说明的是使用它时需要指定路径。
$ yum whatprovides libpng.so # 没有指定路径,这个命令什么都找不到!
正确的用法是指定完整路径,或者使用通配符,如:
$ yum whatprovides /usr/lib64/libpng.so # 使用完整路径 2:libpng-devel-1.5.13-7.el7_2.x86_64 : Development tools for programs to manipulate PNG image format files Repo : @base/7Server Matched from: Filename : /usr/lib64/libpng.so $ yum whatprovides '*libpng.so*' # 记不住完整路径,就使用通配符 2:libpng-devel-1.5.13-7.el7_2.x86_64 : Development tools for programs to manipulate PNG image format files Repo : @base/7Server Matched from: Filename : /usr/lib64/libpng.so
2.4. 其他命令
其他的包管理命令如表 4 所示。
任务 | redhat | debian |
---|---|---|
显示软件包缓存统计信息 | - | apt-cache stats |
验证所有已安装的软件包 | rpm -Va | debsums |
移除本地缓存目录中的软件包 | yum clean packages | apt-get clean |
仅移除本地缓存目录中已过时的软件包 | - | apt-get autoclean |
移除本地缓存目录中的头文件(强制下次使用时重新下载) | yum clean headers | apt-file purge |
软件库位置定义 | /etc/yum.conf | /etc/apt/sources.list |
2.5. yum repository 管理
执行 yum-config-manager --add-repo repository_url
可以增加一个 repository,如:
$ yum-config-manager --add-repo http://www.example.com/example.repo Loaded plugins: product-id, refresh-packagekit, subscription-manager adding repo from: http://www.example.com/example.repo grabbing file http://www.example.com/example.repo to /etc/yum.repos.d/example.repo example.repo | 413 B 00:00 repo saved to /etc/yum.repos.d/example.repo
注:也可以通过下载 example.repo
文件,保存到目录 /etc/yum.repos.d/
中的方式来增加 repository。
执行 yum repolist all
可列出所有本地安装的 repository(包含启用和禁用的),如:
$ yum repolist all Not root, Subscription Management repositories not updated repo id repo name status codeready-builder-for-rhel-8-rhui-debug-rpms Red Hat CodeReady Linux Builder for R disabled codeready-builder-for-rhel-8-rhui-rpms Red Hat CodeReady Linux Builder for R disabled codeready-builder-for-rhel-8-rhui-source-rpms Red Hat CodeReady Linux Builder for R disabled docker-ce-nightly Docker CE Nightly - x86_64 disabled docker-ce-nightly-debuginfo Docker CE Nightly - Debuginfo x86_64 disabled docker-ce-nightly-source Docker CE Nightly - Sources disabled docker-ce-stable Docker CE Stable - x86_64 enabled docker-ce-stable-debuginfo Docker CE Stable - Debuginfo x86_64 disabled docker-ce-stable-source Docker CE Stable - Sources disabled docker-ce-test Docker CE Test - x86_64 disabled docker-ce-test-debuginfo Docker CE Test - Debuginfo x86_64 disabled docker-ce-test-source Docker CE Test - Sources disabled rhel-8-appstream-rhui-debug-rpms Red Hat Enterprise Linux 8 for x86_64 disabled rhel-8-appstream-rhui-rpms Red Hat Enterprise Linux 8 for x86_64 enabled rhel-8-appstream-rhui-source-rpms Red Hat Enterprise Linux 8 for x86_64 disabled rhel-8-baseos-rhui-debug-rpms Red Hat Enterprise Linux 8 for x86_64 disabled rhel-8-baseos-rhui-rpms Red Hat Enterprise Linux 8 for x86_64 enabled rhel-8-baseos-rhui-source-rpms Red Hat Enterprise Linux 8 for x86_64 disabled rhel-8-supplementary-rhui-debug-rpms Red Hat Enterprise Linux 8 - Suppleme disabled rhel-8-supplementary-rhui-rpms Red Hat Enterprise Linux 8 - Suppleme disabled rhel-8-supplementary-rhui-source-rpms Red Hat Enterprise Linux 8 - Suppleme disabled rhui-client-config-server-8-ha Red Hat Update Infrastructure 3 Clien enabled rhui-rhel-8-for-x86_64-highavailability-debug-rhui-rpms Red Hat Enterprise Linux 8 for x86_64 disabled rhui-rhel-8-for-x86_64-highavailability-rhui-rpms Red Hat Enterprise Linux 8 for x86_64 enabled rhui-rhel-8-for-x86_64-highavailability-source-rhui-rpms Red Hat Enterprise Linux 8 for x86_64 disabled
启用和禁用 repository 的命令如下(其中需要的 repository_id 可以通过 yum repolist all
找到):
$ yum-config-manager --enable repository_id # 启用 repository $ yum-config-manager --disable repository_id # 禁用 repository
3. dnf(下一代 yum)
DNF 作为下一代 yum,内置在 RHEL 8、CentOS 8 和 Fedora 中,它保留了大部分 yum 的接口,和 yum 的使用区别不大。在 RHEL 8 中 yum 命令其实只是 dnf-3 命令的一个软连接。
如果服务器用于开发环境,需要安装编译源码所需要的一些工具(如 make,gcc 等):
$ dnf group install "Development Tools"