Linux 安装软件分为俩种方式:
- 安装包(类似Windows 的安装包,可直接安装,yum可以直接获取对应的软件版本进行安装)
- 源码包(自行编译安装,一般软件未提供安装包或想使用最新软件版本)
源码包的优点:
1)开源,如果有能力可以修改源代码
2)可以自由选择所需的功能
3)软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高
4)卸载方便
源码包的缺点:
1)安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
2)编译过程时间较长,安装比二进制安装时间长
3)因为是编译安装,安装过程中一旦报错新手解决
二进制包的优点:
1)包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载
2)安装速度比源码快得多、
二进制包的缺点:
1)经过编译,不可以再看到源码
2)功能选择不如源码包灵活
3)依赖性
Linux 中的包管理工具
apt、yum、dnf、pkg
大多数现代的类 Unix 操作系统都提供了一种中心化的机制用来搜索和安装软件。软件通常都是存放在存储库中,并通过包的形式进行分发。处理包的工作被称为包管理。包提供了操作系统的基本组件,以及共享的库、应用程序、服务和文档。包管理系统除了安装软件外,它还提供了工具来更新已经安装的包。包存储库有助于确保你的系统中使用的代码是经过审查的,并且软件的安装版本已经得到了开发人员和包维护人员的认可。
操作系统 | 格式 | 工具 |
---|---|---|
Debian | .deb | apt,apt-get,dpkg |
Ubuntu | .deb | apt,apt-get,dpkg |
CentOS | .rpm | yum |
Fedora | .rpm | dnf |
FreeBSD | Posts, .txz | make,pkg |
Debian 及其衍生版,如 Ubuntu、Linux Mint 和 Raspbian,它们的包格式是 .deb。APT 这款先进的包管理工具提供了大多数常见的操作命令:搜索存储库、安装软件包及其依赖项,并管理升级。在本地系统中,我们还可以使用 dpkg 程序来安装单个的 deb 文件,APT 命令作为底层 dpkg 的前端,有时也会直接调用它。 debian 衍生版大多数都包含了 apt 命令,它提供了一个简洁统一的接口,可用于通常由 apt-get和 apt-cache 命令处理的常见操作。
CentOS、Fedora 和其它 Red Hat 家族成员使用 RPM 文件。在 CentOS 中,通过 yum 来与单独的包文件和存储库进行交互。
在最近的 Fedora 版本中,yum 已经被 dnf 取代,dnf 是它的一个现代化的分支,它保留了大部分 yum 的接口。
FreeBSD 的二进制包系统由 pkg 命令管理。FreeBSD 还提供了 Ports 集合,这是一个存在于本地的目录结构和工具,它允许用户获取源码后使用 Makefile 直接从源码编译和安装包。
更新包列表
操作系统 | 命令 |
---|---|
Debian/Ubuntu | apt update |
CentOS | yum check-update |
Fedora | dnf check-update |
FreeBSD Packages | pkg update |
FreeBSD Ports | portsnap fetch update |
更新已安装包
操作系统 | 命令 | 说明 |
---|---|---|
Debian | apt-get upgrade | 只更新已安装包 |
apt-get dist-upgrade | 可能会增加或删除包以满足新的依赖关系 | |
CentOS | yum update | |
Fedora | dnf upgrade | |
FreeBSD Packages | pkg upgrade |
搜索软件包
操作系统 | 命令 | 说明 |
---|---|---|
Debian | apt-cache search search_string | |
apt search search_string | ||
CentOS | yum search search_string | |
yum search all search_string | 搜索所有字段,包括描述 | |
Fedora | dnf search search_string | |
dnf search all search_string | 搜索所有字段,包括描述 | |
FreeBSD Packages | pkg search search_string | 通过名字搜索 |
pkg -D search search_string | 通过描述搜索 |
查看软件包信息
操作系统 | 命令 | 说明 |
---|---|---|
Debian | apt-cache show package | |
apt show package | ||
dpkg -s package | ||
CentOS | yum info package | |
yum depinfo package | 列出包的依赖 | |
Fedora | dnf info package | |
dnf repoquery —requires package | 列出包的依赖 | |
FreeBSD Packages | pkg info package | 通过名字搜索 |
安装仓库软件包
操作系统 | 命令 | 说明 |
---|---|---|
Debian | apt-get install package | |
apt install package | 显示彩色进度条 | |
CentOS | yum install package | |
Fedora | sudo dnf install package | |
FreeBSD Packages | pkg install package |
安装本地软件包
操作系统 | 命令 | 说明 |
---|---|---|
Debian | dpkg -i package.deb | |
apt-get install -y gdebi && sudo gdebi package.deb | 安装 gdebi,然后使用 gdebi 安装 package.deb 并处理缺失的依赖 | |
CentOS | yum install package.rpm | |
Fedora | dnf install package.rpm | |
FreeBSD Packages | pkg add package.txz |
删除已安装软件包
操作系统 | 命令 | 说明 |
---|---|---|
Debian | apt-get remove package | |
apt-get autoremove | 删除不需要的包 | |
CentOS | yum remove package | |
Fedora | dnf erase package | |
FreeBSD Packages | pkg delete package | |
pkg autoremove | 删除不需要的包 |
YUM 仓库配置
rhel-debuginfo.repo
[rhel-debuginfo]
name=Red Hat Enterprise Linux 5Client - i386 - Debug
baseurl=ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Client/en/os/i386/Debuginfo/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
APT 中的软件源定义来自于/etc/apt/sources.list
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://cn.archive.ubuntu.com/ubuntu/ hardy main restricted
deb-src http://cn.archive.ubuntu.com/ubuntu/ hardy main restricted
yum update vs upgrade
yum update” updates all the presently installed packages to their latest versions that are available in the repositories and “yum upgrade” performs the same action as “yum update”, but once finished it also removes all of the obsolete packages from the system.
Linux 中源码安装方式介绍
- 解压软件包
- 编译源码包 (./profix=/path 指定安装路径)
- 生成二进制安装程序
- 运行二进制服务程序安装包
- 清理垃圾文件
准备工作
- 编译工具:包含gcc , g++ , make , autoconfig 等等。在CentOS系列中,可以通过 yum -y groupinstall “Development Tools” 来安装。在 Ubuntu 中,可以从终端中执行 sudo apt-get install build-essential 指令来安装基本的编译工具。
- 除了安装基本的编译工具之外,为了顺利编译源代码,我们也要把该程序所需要的依赖安装好。包含系统提供的库函数, 以及第三方软件的依赖包。
源码安装步骤
- 配置,建立makefile文件:这是编译源代码的第一步,通过 ./configure 命令完成。执行此步以便为编译源代码作准备。常用的选项有 —prefix=PREFIX,用以指定程序的安装位置。更多的选项可通过 —help 查询。也有某些程序无需执行此步。
- 编译:一旦配置通过,可即刻使用 make 指令根据makefile的定义,调用 gcc 来执行源代码的编译过程。视软件的具体情况而定,编译所需的时间也各有差异,我们所要做的就是耐心等候和静观其变。此步虽然仅下简单的指令,但有时候所遇到的问题却十分复杂。较常碰到的情形是程序编译到中途却无法圆满结束。此时,需要根据出错提示分析以便找到应对之策。需要执行 make clean , 然后再重新执行 make 指令。
- 安装:如果编译没有问题,那么执行 make install 就可以将程序安装到系统中了。
源码安装后管理
- 源码通常解压到 /usr/local/src 目录
- 安装时最好安装在 /usr/local 目录
- 将 软件的 man page 加入 man path 中, 编辑 /etc/man.config ,增加 MANPATH 项。
- 把软件的 bin 目录加入到 PATH 环境变量, 编辑 /etc/profile.d/xxxx.sh, 增加 export PATH=$PATH:/usr/local/xxx/bin
- 若是觉得所编译的软件不够适用想要删除,又如何做呢?我们只需转到编译源代码的目录,执行 sudo make uninstall 命令。
操作系统中库的知识
现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。
本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库有两种:静态库(.a、.lib)和动态库(.so、.dll)。
静态库
在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。
- 静态库对函数库的链接是放在编译时期完成的。
- 程序在运行时与函数库再无瓜葛,移植方便。
- 浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。
Linux静态库命名规范,必须是”lib[your_library_name].a”:lib为前缀,中间是静态库名,扩展名为.a。
动态库
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入。不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例,规避了空间浪费问题。动态库在程序运行是才被载入,也解决了静态库对程序的更新、部署和发布页会带来麻烦。用户只需要更新动态库即可,增量更新。

- 动态库把对一些库函数的链接载入推迟到程序运行的时期。
- 可以实现进程之间的资源共享。(因此动态库也称为共享库)
- 将一些程序升级变得简单。
- 甚至可以真正做到链接载入完全由程序员在程序代码中控制(显示调用)。
Linux动态库命名规范,必须是”lib[your_library_name].so”:lib为前缀,中间是动态库名,扩展名为.so。