Linux 安装软件分为俩种方式:

  1. 安装包(类似Windows 的安装包,可直接安装,yum可以直接获取对应的软件版本进行安装)
  2. 源码包(自行编译安装,一般软件未提供安装包或想使用最新软件版本)

源码包的优点:
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
  1. Debian 及其衍生版,如 UbuntuLinux Mint Raspbian,它们的包格式是 .debAPT 这款先进的包管理工具提供了大多数常见的操作命令:搜索存储库、安装软件包及其依赖项,并管理升级。在本地系统中,我们还可以使用 dpkg 程序来安装单个的 deb 文件,APT 命令作为底层 dpkg 的前端,有时也会直接调用它。 debian 衍生版大多数都包含了 apt 命令,它提供了一个简洁统一的接口,可用于通常由 apt-get apt-cache 命令处理的常见操作。
  2. CentOSFedora 和其它 Red Hat 家族成员使用 RPM 文件。在 CentOS 中,通过 yum 来与单独的包文件和存储库进行交互。
  3. 在最近的 Fedora 版本中,yum 已经被 dnf 取代,dnf 是它的一个现代化的分支,它保留了大部分 yum 的接口。
  4. 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 仓库配置

  1. rhel-debuginfo.repo
  2. [rhel-debuginfo]
  3. name=Red Hat Enterprise Linux 5Client - i386 - Debug
  4. baseurl=ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Client/en/os/i386/Debuginfo/
  5. enabled=0
  6. gpgcheck=1
  7. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
  8. APT 中的软件源定义来自于/etc/apt/sources.list
  9. # See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
  10. # newer versions of the distribution.
  11. deb http://cn.archive.ubuntu.com/ubuntu/ hardy main restricted
  12. 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 中源码安装方式介绍

  1. 解压软件包
  2. 编译源码包 (./profix=/path 指定安装路径)
  3. 生成二进制安装程序
  4. 运行二进制服务程序安装包
  5. 清理垃圾文件

准备工作


  1. 编译工具:包含gcc , g++ , make , autoconfig 等等。在CentOS系列中,可以通过 yum -y groupinstall “Development Tools” 来安装。在 Ubuntu 中,可以从终端中执行 sudo apt-get install build-essential 指令来安装基本的编译工具。
  2. 除了安装基本的编译工具之外,为了顺利编译源代码,我们也要把该程序所需要的依赖安装好。包含系统提供的库函数, 以及第三方软件的依赖包。

源码安装步骤


  1. 配置,建立makefile文件:这是编译源代码的第一步,通过 ./configure 命令完成。执行此步以便为编译源代码作准备。常用的选项有 —prefix=PREFIX,用以指定程序的安装位置。更多的选项可通过 —help 查询。也有某些程序无需执行此步。
  2. 编译:一旦配置通过,可即刻使用 make 指令根据makefile的定义,调用 gcc 来执行源代码的编译过程。视软件的具体情况而定,编译所需的时间也各有差异,我们所要做的就是耐心等候和静观其变。此步虽然仅下简单的指令,但有时候所遇到的问题却十分复杂。较常碰到的情形是程序编译到中途却无法圆满结束。此时,需要根据出错提示分析以便找到应对之策。需要执行 make clean , 然后再重新执行 make 指令。
  3. 安装:如果编译没有问题,那么执行 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)。
image.jpeg

静态库
在链接阶段,会将汇编生成的目标文件.o与引用到的库一起链接打包到可执行文件中。因此对应的链接方式称为静态链接。

  • 静态库对函数库的链接是放在编译时期完成的。
  • 程序在运行时与函数库再无瓜葛,移植方便。
  • 浪费空间和资源,因为所有相关的目标文件与牵涉到的函数库被链接合成一个可执行文件。

image.jpeg
Linux静态库命名规范,必须是”lib[your_library_name].a”:lib为前缀,中间是静态库名,扩展名为.a。

动态库
动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入。不同的应用程序如果调用相同的库,那么在内存里只需要有一份该共享库的实例,规避了空间浪费问题。动态库在程序运行是才被载入,也解决了静态库对程序的更新、部署和发布页会带来麻烦。用户只需要更新动态库即可,增量更新。

  1. ![image.jpeg](https://cdn.nlark.com/yuque/0/2020/jpeg/157775/1587471431436-b842469a-0252-4394-bb17-117e2a3e0160.jpeg#crop=0&crop=0&crop=1&crop=1&height=411&id=GdU9Y&name=image.jpeg&originHeight=411&originWidth=482&originalType=binary&ratio=1&rotation=0&showTitle=false&size=110823&status=done&style=none&title=&width=482)
  • 动态库把对一些库函数的链接载入推迟到程序运行的时期。
  • 可以实现进程之间的资源共享。(因此动态库也称为共享库)
  • 将一些程序升级变得简单。
  • 甚至可以真正做到链接载入完全由程序员在程序代码中控制(显示调用)。

Linux动态库命名规范,必须是”lib[your_library_name].so”:lib为前缀,中间是动态库名,扩展名为.so。