Linux 发展史:https://upload.wikimedia.org/wikipedia/commons/1/1b/Linux_Distribution_Timeline.svg
一、Unix 分支
在 windows 系统下安装软件很简单,下载软件包后双击 .exe 文件,点击下一步即可。
然而,在 Uinux 平台安装软件就有点复杂了,从 Unix 诞生开始,逐步发展出了几十几百的大大小小的分支,不同的 Uinux 发行版系列都有所差异。
这里我总结了一下 Unix 平台下比较有名的几个分支:
不同分支的包管理工具
1、Debian 分支
Debian Linux 发行版系列中的软件包管理工具是 APT(Advanced Package Tool),通过 apt-get 或 apt 命令来操作。
所有基于 Debian 的发行版系统都使用这个包管理工具。比如,我们常用的 Ubuntu 系统就是使用 APT 来管理软件包。
2、Red Hat 分支
Red Hat 发行版系列中的软件包管理工具是 RPM,通过 rpm 命令来操作。
RPM 是 Red Hat PackageManager 的缩写,原本是 Red Hat 开发的软件包管理程序,在 Fedora 、Redhat、Mandriva、SuSE、YellowDog 等主流发行版本及在这些版本基础上二次开发出来的发行版使用。
由于 RPM 遵循 GPL 规则,且功能强大方便,因而广受欢迎,逐渐受到其他发行版的采用,应用很广泛。
3、CentOS
CentOS 系统中使用的软件包管理工具是 YUM(Yellow dog Updater Modified),同时还适用于 Fedora、RedHat 中。
YUM 在 RPM 的基础上增加了自动更新和包管理,包括依赖关系管理。能够从指定的服务器自动下载安装 RPM 包,并且自动处理依赖性关系,一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
二、APT 管理工具
APT(Advanced Package Tool) 应用管理工具使用 apt-get 命令操作软件包。
- 最初于 1998 年发布,用于检索应用程序并将其加载到 Debian Linux 系统。
- 成名的原因之一在于其出色的 解决软件依赖关系 的能力。
- 其通常使用
.deb-formatted
文件,但经过修改后可以使用 apt-rpm 处理红帽的 Package Manager(RPM)文件。
1、更新软件库
使用 apt-get
命令的第一步就是引入必需的软件库。
Debian 的软件库也就是所有 Debian 软件包的集合,它们存在互联网上的一些公共站点上,在 /etc/apt/sources.list
配置文件中添加地址列表,apt-get 就能搜索到我们想要的软件。
sources.list 格式如下:
deb [web或ftp地址] [发行版名字] [main/contrib/non-free]
其中,deb 包可以把一个应用的文件包在一起,大体就如同Windows上的安装文件。
在修改 /etc/apt/sources.list
或 /etc/apt/preferences
之后要更新软件库:
apt-get update
此外,最好定期运行这个命令,以确保你的软件包列表是最新的。
2、常用命令
常用命令 | 命令格式 | 说明 |
---|---|---|
安装软件包 | apt-get install packagename |
|
卸载软件包 | apt-get remove packagename |
卸载一个已安装的软件包(保留配置文件) |
- | apt-get –purge remove packagename |
卸载一个已安装的软件包(删除配置文件) |
删除备份软件 | apt-get autoclean apt |
apt-get 默认会把已装或已卸的软件都备份在硬盘上, 使用 autoclean 命令来删除备份文件 |
更新所有已安装的软件包 | apt-get upgrade |
|
将系统升级到新版本 | apt-get dist-upgrade |
三、RPM 管理工具
RPM(Red Hat PackageManager)包管理工具。
rpm 包里面包含可执行的二进制程序(经过 GCC 编译),及程序运行时所需要的文件,和 Windows 软件包中的 .exe
文件类似。
(有时除了自身所带的附加文件保证其正常以外,还需要其它特定版本文件,这就是软件包的依赖关系)
1、rpm 包格式
上图所示:
- abrt:包名
- 2.1.11:版本信息
- 48.el7.centos:发布版本号
- x86_64:运行平台
- 有些 rpm 包没有写具体平台而是 noarch:说明没有平台限制。
2、rpm 常用命令
常用选项:
rpm 常用选项 | 说明 |
---|---|
-a | 查询所有已安装rpm包 |
-e | 删除指定rpm包 |
-f | 查询指定rpm包 |
-i | 显示指定rpm包的详细信息 |
-h | 显示安装rpm包列出标记 |
-v | 显示指令的执行过程,即可视化过程 |
-U | 升级指定rpm包 |
-q | 使用询问模式 |
-l | 显示指定rpm包的文件列表 |
常用命令:
rpm 常用功能 | 命令 | 示例 | 说明 |
---|---|---|---|
安装 rpm 包 | rpm -ivh [rpm包名] |
注意包名一定要写全到 .rpm ,不能简写。 |
|
查看指定软件的 rpm 包名 | rpm -q [软件名] |
$ rpm -q jenkins jenkins-2.121.1-1.1.noarch |
|
查看所有软件包名 | rpm -qa |
列出所有已安装的 rpm 包名 | |
查看 rpm 包的具体信息 | rpm -qi [软件名] |
rpm -qi jenkins |
列出 jenkins rpm 包的具体信息 |
查看软件的安装文件 | rpm -ql [软件名] |
rpm -ql jenkins |
列出 jenkins 所有的安装目录文件 |
升级 rpm 包 | rpm -Uvh [rpm包名] |
注意包名一定要写全到 .rpm ,不能简写。 |
|
卸载 rpm 包 | rpm -e [软件名] |
rpm -e jenkins |
其中,是常用的就是安装 rpm -ivh
和查看安装列表 rpm -ql
。
查看某个命令属于哪个rpm包安装的:
rpm -qf [命令绝对路径]
$ rpm -qf /usr/bin/vim
vim-enhanced-7.4.160-5.el7.x86_64
当某个命令忘记了绝对路径,又不想分 2 步来查询。
那么可以后面跟 `which`:
$ rpm -qf `which cd` --这里写入的命令不能是带有alias的
bash-4.2.46-31.el7.x86_64
依赖问题:
当执行 rpm -ivh
安装 rpm 包时,会发现有些软件需要很多依赖包,必须手动安装依赖包后才能正常安装。
包括 rpm -e
也是一样的,所以很多时候并不用 rpm
来安装软件,更多的是使用 yum
。
四、YUM 管理工具
YUM 最常用于 CentOS 系统中,它在 rpm 的基础上解决了包依赖的问题,能够自动处理依赖关系,一次性安装所有依赖的软件包,无须繁琐地一次次下载、安装。
另外,使用 yum 安装软件时,只用写入软件名即可,而 rpm 安装时,是需要写入包全名的。
1、rpm 和 yum 对比
2、yum 常用命令
查看仓库中所有可用的 rpm 包:
yum list
# 一般配合 grep 使用
yum list |grep python|less
如下所示:
$ yum list|grep python|less
abrt-addon-python.x86_64 2.1.11-52.el7.centos @centos7.6-181101-update
abrt-python.x86_64 2.1.11-52.el7.centos @centos7.6-181101-update
python.x86_64 2.7.5-76.el7 @centos7.6-181101-update
python-IPy.noarch 0.75-6.el7 @os
python-backports.x86_64 1.0-8.el7 installed
第一列是包名,第二列是版本号,第三列是配置文件 /etc/yum.repos.d/
中配置的仓库名。
常用命令 | 命令格式 | 说明 |
---|---|---|
查看仓库中指定的 rpm 包 | yum list | grep python |
在仓库中查找出包名中包含 python 的 rpm 包 |
yum 安装 rpm 包 | yum -y install 「包名简称」 |
-y 表示安装时不再询问是否安装 |
yum 卸载 rpm 包 | yum remove「包名简称」 |
卸载时不要加 -y 选项, 可以看到将要卸载哪些依赖包, 避免卸载掉有用的软件 |
yum 更新 rpm 包 | yum update 「包名简称」 |
在刚安装完软件时进行更新 |
yum 更新所有 rpm 包 | yum update |
不加包名,直接升级所有包和升级系统 |
查询软件的安装包 | yum provides jenkins |
查看 jenkins 是由哪个 rpm 包安装的 |
清理缓存 | yum clean all |
|
下载rpm包不安装 | yum install [包名] -y --downloadonly |
仅下载不安装, 默认存放在 /var/cache/yum/x86_64/7/xxx/packets ,xxx为仓库源,如base、epel等 |
下载rpm包不安装, 并指定存放路径 |
yum install [包名] -y --downloadonly --downloaddir=/usr/local/src |
|
如果是已安装的rpm包 | yum reinstall -y [包名] --downloadonly |
3、配置文件
yum 仓库的配置文件路径:/etc/yum.repos.d/CentOS-Base.repo
$ less CentOS-Base.repo
[os] # 仓库名,可配置多个不同的名称
name=Qcloud centos os - $basearch
baseurl=http://mirrors.tencentyun.com/centos1/$releasever/os/$basearch/ # 仓库地址
enabled=1 # 是否可用,1可用,0不可用;
gpgcheck=1 # 是否检测,0不检测,1检测
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[updates]
name=Qcloud centos updates - $basearch
baseurl=http://mirrors.tencentyun.com/centos1/$releasever/updates/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
......
yum 下载的文件默认保存路径是: /var/cache/yum
修改 yum 配置文件 /etc/yum.conf
可自定义保存路径:
vi /etc/yum.conf
-----------------
cachedir=/var/cache/yum # 存放目录,可以自定义
keepcache=1 # 1为保存已经下载的rpm包,0为不保存,默认不保存
metadata_expire=1800 # 过期时间
4、修改 yum 源
有时候我们使用 yum 安装时网速非常慢,甚至有些软件找不到,那是因为默认的 yum 源是使用国外的仓库的,一般我们都要更换成国内的 yum 源仓库。
# 在操作之前,一定要先备份之前的 yum 源:
mv CentOS-Base.repo CentOS-Base.repo_bak
# 下载一份新的国内的 CentOS-Base.repo 文件代替:
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
或者
curl -O http://mirrors.163.com/.help/CentOS7-Base-163.repo
# 替换成功后,安装一个 rpm 包测试一下:
yum install -y zsh
# 除了 CentOS-Base.repo 这个标准的 rpm 源外,我们还可以安装 yum 扩展源 epel:
yum install -y epel-release
五、源码安装
前面介绍的都是使用包管理工具来安装,如果以上工具都不能使用的情况下,可以选择源码安装方式。
源码包指的一般是 tar 包格式的,需要通过编译器把源码编译成可执行的文件,安装比较复杂。
1、Binaries和Source包
一般开放原代码软件都会有两个版本发布:
Source Distribution 和 Binary Distribution ,二者有啥区别?
- Source 是源代码版,用于查看源码,若用来安装的话,需要自己编译成可执行软件。
- Binaries 是可执行版,是已经编译好的版本,通过包管理器或直接下载解压就可以使用。
2、源码包安装步骤
./configure---->make---->make install
2.1 获取源码
- 下载软件源码包,一般存放在 /usr/local/src
- 解压源码包。
2.2 查看INSTALL与README文件
- 解压后查看INSTALL与README文件,这两个文件中详细介绍了本软件的安装方法和注意事项。
2.3 执行configure,生成Makefile文件
- 执行
./configure
命令,生成 Makefile 文件。 ./configure --prefix=/usr/local/xxx
,常用 prefix 参数指定软件安装目录,当执行make install
命令时,会将软件安装在此路径中。
2.4 执行make,从 Makefile 中读取指令,编译源码成二进制文件
make clean & make
make clean
命令用来清除上一次编译生成的目标文件。这个步骤可有可无,但为了确保编译的成功,还是加上为好。防止由于软件中含有残留的目标文件导致编译失败。
2.5 执行 make install,将软件安装到指定目录
make install
- 此时二进制文件会被安装到先前 configure prefix 参数设置的路径中去。