本博客内容来自《Linux命令行与shell脚本编程大全》第九章
目录
1、包管理基础
2、基于Debian的系统
用aptitude管理软件包
用aptitude安装软件包
用aptitude更新软件
用aptitude卸载软件
aptitude仓库
3、基于Red Hat的系统
yum命令
列出已安装包
安装软件
更新软件
卸载软件
处理损坏的包依赖
软件仓库
4、从源码安装
包管理系统PMS利用数据库来记录:
Linux系统上已安装软件包
每个包安装了什么文件
每个已经安装软件包的版本
软件包存储在服务器上,可以利用本地Linux系统上的PMS工具通过互联网访问。这些服务器称为仓库。
Linux中广泛使用的两种PMS基础工具是dpkg和rpm。
基于Debian的发行版(如Ubuntu和Linux mint)使用dpkg
基于Red Hat的发行版使用rpm命令
dpkg命令是基于Debian系PMS工具的核心,包含在这个PMS中的其他工具有:
apt-get
apt-cache
aptitude
aptitude工具本质上是apt工具和dpkg的前端。dpkg是软件包管理系统工具,aptitude是完整的软件包管理系统。
查看已安装软件包,只需要输入aptitude回车即可。如果只想查看某个软件:
aptitude show package_name
aptitude show mysql-client
查看所有跟某个特定软件包相关的所有文件列表:
dpkg -L package_name
可以查找某个特定文件属于哪个软件包:使用绝对文件路径
dpkg --search absolute_file_name
搜索软件
aptitude search package_name
安装软件
aptitude install package_name
更新系统上所有软件包:
aptitude safe-upgrade
只想删除软件包而不删除数据和配置文件,使用remove
aptitude remove package_name
删除软件包和相关数据与配置:
aptitude purge package_name
默认仓库位置为/etc/apt/sources.list
cat /etc/apt/souces.list
里面以下面的结构来指定仓库源:
deb (or deb-src) address distribution_name package_type_list
deb或deb-src的值表明软件包的类型,deb说明已编译,deb-src说明是源代码的源。address是软件仓库的web地址,distribution_name是发行版本的名称,package_type_list表明仓库里面有什么类型的包。
[root@izwz9194nuv8g0cwqfqsh3z ~]# yum list installed
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Installed Packages
GeoIP.x86_64 1.5.0-13.el7 @base
NetworkManager.x86_64 1:1.12.0-8.el7_6 @updates......
查看某个包详细信息:
[root@izwz9194nuv8g0cwqfqsh3z ~]# yum list xterm
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Available Packages
xterm.x86_64 295-3.el7 base
查看该包是否安装:
[root@izwz9194nuv8g0cwqfqsh3z ~]# yum list installed xterm
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Error: No matching Packages to list
查看某个特定文件属于哪个软件包:
[root@izwz9194nuv8g0cwqfqsh3z etc]# yum provides /etc/yum.conf
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
yum-3.4.3-161.el7.centos.noarch : RPM package installer/updater/manager
Repo : base
Matched from:
Filename : /etc/yum.confyum-3.4.3-161.el7.centos.noarch : RPM package installer/updater/manager
Repo : @base
Matched from:
Filename : /etc/yum.conf
yum install package_name
也可以手动下载rpm安装文件并用yum安装,即本地安装:
yum localinstall package_name.rpm
列出所有已安装包的可用更新:
[root@izwz9194nuv8g0cwqfqsh3z etc]# yum list updates
更新软件包:
yum update package_name
更新所有:
yum update
只删除软件包,保留其他文件:
yum remove package_name
删除软件与其他所有文件:
yum erase package_name
在安装多个软件包时,某个包的软件依赖关系可能被另一个包的安装覆盖掉,这就是损坏的包依赖关系。
先尝试用以下命令:
yum clean all
然后用yum命令的update选项。
如果上述不行,再尝试:
yum deplist package_name
该命令显示了所有包的库依赖关系以及什么软件可以提供这些库依赖关系,缺啥补啥即可。以docker为例:
[root@izwz9194nuv8g0cwqfqsh3z etc]# yum deplist docker
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
package: docker.x86_64 2:1.13.1-91.git07f3374.el7.centos
dependency: /bin/sh
provider: bash.x86_64 4.2.46-31.el7
dependency: docker-client = 2:1.13.1-91.git07f3374.el7.centos
provider: docker-client.x86_64 2:1.13.1-91.git07f3374.el7.centos
dependency: docker-common = 2:1.13.1-91.git07f3374.el7.centos
provider: docker-common.x86_64 2:1.13.1-91.git07f3374.el7.centos
dependency: libassuan.so.0()(64bit)
provider: libassuan.x86_64 2.1.0-3.el7
dependency: libaudit.so.1()(64bit)
provider: audit-libs.x86_64 2.8.4-4.el7
dependency: libc.so.6(GLIBC_2.17)(64bit)
provider: glibc.x86_64 2.17-260.el7_6.3
dependency: libcrypto.so.10()(64bit)
provider: openssl-libs.x86_64 1:1.0.2k-16.el7
dependency: libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit)
provider: openssl-libs.x86_64 1:1.0.2k-16.el7
dependency: libcrypto.so.10(libcrypto.so.10)(64bit)
provider: openssl-libs.x86_64 1:1.0.2k-16.el7
dependency: libdevmapper.so.1.02()(64bit)
provider: device-mapper-libs.x86_64 7:1.02.149-10.el7_6.3
dependency: libdevmapper.so.1.02(Base)(64bit)
provider: device-mapper-libs.x86_64 7:1.02.149-10.el7_6.3
dependency: libdevmapper.so.1.02(DM_1_02_97)(64bit)
provider: device-mapper-libs.x86_64 7:1.02.149-10.el7_6.3
dependency: libdl.so.2()(64bit)
provider: glibc.x86_64 2.17-260.el7_6.3
dependency: libgpg-error.so.0()(64bit)
provider: libgpg-error.x86_64 1.12-3.el7
dependency: libgpgme.so.11()(64bit)
provider: gpgme.x86_64 1.3.2-5.el7
dependency: libgpgme.so.11(GPGME_1.0)(64bit)
provider: gpgme.x86_64 1.3.2-5.el7
dependency: libgpgme.so.11(GPGME_1.1)(64bit)
provider: gpgme.x86_64 1.3.2-5.el7
dependency: libpthread.so.0()(64bit)
provider: glibc.x86_64 2.17-260.el7_6.3
dependency: libpthread.so.0(GLIBC_2.2.5)(64bit)
provider: glibc.x86_64 2.17-260.el7_6.3
dependency: libpthread.so.0(GLIBC_2.3.2)(64bit)
provider: glibc.x86_64 2.17-260.el7_6.3
dependency: libseccomp.so.2()(64bit)
provider: libseccomp.x86_64 2.3.1-3.el7
dependency: libsystemd.so.0()(64bit)
provider: systemd-libs.x86_64 219-62.el7_6.5
dependency: libsystemd.so.0(LIBSYSTEMD_209)(64bit)
provider: systemd-libs.x86_64 219-62.el7_6.5
dependency: rtld(GNU_HASH)
provider: glibc.x86_64 2.17-260.el7_6.3
provider: glibc.i686 2.17-260.el7_6.3
dependency: subscription-manager-rhsm-certificates
provider: subscription-manager-rhsm-certificates.x86_64 1.21.10-3.el7.centos
dependency: systemd
provider: systemd.x86_64 219-62.el7_6.5
如果还未解决问题,尝试:
yum update --skip-broken
忽略依赖关系损坏的那个包。
要想知道你现在正在从哪些仓库中获取软件,输入如下命令:
[root@izwz9194nuv8g0cwqfqsh3z etc]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
base/7/x86_64 CentOS-7 10,019
dockerrepo Docker Repository 110
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86_64 12,907
extras/7/x86_64 CentOS-7 371
updates/7/x86_64 CentOS-7 1,098
repolist: 24,505
如果仓库中没有需要的软件,可以编辑配置文件,这些文件位于/etc/yum.repos.d目录:
[root@izwz9194nuv8g0cwqfqsh3z etc]# cd /etc/yum.repos.d
[root@izwz9194nuv8g0cwqfqsh3z yum.repos.d]# ll
total 40
-rw-r--r-- 1 root root 675 Feb 20 14:16 CentOS-Base.repo
-rw-r--r-- 1 root root 1309 Nov 23 21:16 CentOS-CR.repo
-rw-r--r-- 1 root root 649 Nov 23 21:16 CentOS-Debuginfo.repo
-rw-r--r-- 1 root root 314 Nov 23 21:16 CentOS-fasttrack.repo
-rw-r--r-- 1 root root 630 Nov 23 21:16 CentOS-Media.repo
-rw-r--r-- 1 root root 1331 Nov 23 21:16 CentOS-Sources.repo
-rw-r--r-- 1 root root 5701 Nov 23 21:16 CentOS-Vault.repo
-rw-r--r-- 1 root root 155 Feb 24 10:25 docker.repo
-rw-r--r-- 1 root root 230 Feb 20 14:16 epel.repo
[root@izwz9194nuv8g0cwqfqsh3z yum.repos.d]# cat docker.repo
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
第一步:下载.tar.gz源码压缩包
第二步:解压缩
tar -zxvf ***.tar.gz
现在文件以及在***目录中,进入该目录
第三步:参考README文件,按照指示步骤完成安装。
第四步:使用make命令构建各种二进制文件,该命令会编译源码,然后链接器会为这个包创建最终的可执行文件
第五步:make install命令安装即可。