Skip to content

Linux常见的软件包封装类型

文件类型保存目录
RPM软件包扩展名为“.rpm”
DEB软件包扩展名为“.deb“
源代码软件包一般为“。tar.gz”、“.tar.bz2”等格式的压缩包包含程序的原始代码
绿色免安装的软件软件包的扩展名不一、以TarBall格式的居多 在压缩包内提供已经编译好的

主流发行版命令格式对比

发行版家族包管理工具安装卸载更新查询其他特性
RHEL系 (RHEL/CentOS)rpmrpm -ivh pkg.rpmrpm -e pkgrpm -Uvh pkg.rpmrpm -q[ail] pkg需手动处理依赖
yumyum install pkgyum remove pkgyum update pkgyum list/info pkg自动解决依赖
dnfdnf install pkgdnf remove pkgdnf upgrade pkgdnf list pkgyum的下一代替代品
Debian系 (Ubuntu/Debian)dpkgdpkg -i pkg.debdpkg -r pkg-`dpkg -lgrep pkg`
aptapt install pkgapt remove pkgapt upgrade pkgapt list pkg最常用的高级工具
Arch系pacmanpacman -S pkgpacman -R pkgpacman -Syupacman -Qs pkg滚动更新设计
通用工具snapsnap install pkgsnap remove pkgsnap refresh pkgsnap list跨发行版容器化包
flatpakflatpak install pkgflatpak uninstall pkgflatpak updateflatpak list沙盒化应用

RPM 包

RPM 软件包 一般命名格式

mermaid
graph TD
    A[bash-4.1.2-15.el6_4.x86_64.rpm] --> A1[软件名称]
    A1 -->|bash| A
    A --> A2[版本号]
    A2 -->|4.1.2| A
    A --> A3[发布次数]
    A3 -->|15.el6_4| A
    A --> A4[硬件平台]
    A4 -->|x86_64| A
    A --> A5[扩展名]
    A5 -->|.rpm| A

rpm包网站

https://rpmfind.net/

openEuler(国产欧拉):https://easysoftware.openeuler.org/zh/rpm

典型应用程序目录结构

文件类型保存目录
普通执行程序文件/usr/bin
服务器执行程序文件和管理程序文件/usr/sbin
应用程序配置文件/etc
日志文件/var/log
应用程序文档文件/usr/share/doc
应用程序手册页文件/usr/share/man

yum仓库

CentOS 8+/RHEL 8+ 中,yumdnf 的符号链接,用法基本一致。

配置文件yum.conf

ini
[main]
# RPM包和元数据缓存目录,支持变量如$basearch(架构)、$releasever(系统版本)
cachedir=/var/cache/yum/$basearch/$releasever
# 设为1时保留下载的RPM包(适用于重复安装场景)。0关闭、1开启
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=3

# 排除特定包(支持通配符)
exclude=kernel* php-*

# 网络与代理设置
proxy=http://proxy.example.com:8080
proxy_username=user
proxy_password=pass
timeout=30
retries=3

# 带宽限制(KB/s)
throttle=100000

# 插件参数(需插件已安装)
pluginconfpath=/etc/yum/pluginconf.d

.repo文件中各字段的含义

  • [repositoryID]:这是仓库的唯一标识符,在整个/etc/yum.repos.d/目录中应该是唯一的。
  • name=Some name for this repository:源的名称,通常用于yum的输出。
  • baseurl=url://path/to/repository/:这是YUM用来查找软件包的基础URL。可以有多个baseurl,以支持多个服务器。
  • enabled=1:这个选项告诉YUM是否启用或禁用此仓库。如果设置为1,则启用该仓库。如果设置为0,则禁用该仓库。
  • gpgcheck=1:这个选项告诉YUM是否检查包来自正确的来源。如果设置为1,则启用GPG签名检查。如果设置为0,则禁用GPG签名检查。
  • gpgkey=URL:这是GPG密钥文件的位置,通常是.pub后缀的文件。

yum 优先级

YUM 源的优先级可以通过 yum-plugin-priorities 插件来设置。如果多个仓库提供相同的软件包,YUM 会优先选择优先级较高的仓库。

安装插件

bash
yum install yum-plugin-priorities

在 .repo 文件中设置优先级

bash
[repo_name] priorities=10

NOTE

优先级数值越小,优先级越高。priority 数值范围是 1 到 99。

构建本地yum仓库

1、创建挂载路径

bash
mkdir /media/cdrom

2、挂载光盘

bash
mount /dev/sr0 /media/cdrom

3、备份旧的yum源文件

bash
cd /etc/yum.repos.d && mkdir bak
mv *.repo bak

4、创建本地yum 源文件

bash
[local]
name=media
baseurl=file:///media/cdrom
gpgcheck=0
enabled=1

5、清理旧的缓存

bash
dnf -y clean all

6、创建新的缓存

bash
dnf makecache

7、验证

bash
dnf repolist

yum 安装、卸载、升级 RPM 包软件

命令不加关键字加入关键词、软件包、软件包组
yum list显示所有可用包单个的可安装包
yum info显示所有可用包的信息单个具体的信息
yum search\模糊查找所有的相关信息
yum provides\精确查找
yum install\安装具体软件包
yum history查看当前yum操作历史\
yum history undo加入序号卸载序号里安装的软件\
yum history redo加入序号重新执行序号里的操作\
yum update所有软件升级具体软件升级

deb文件安装

deb包是Debian,Ubuntu等Linux发行版的软件安装包,扩展名为.deb,是类似于rpm的软件包,Debian,Ubuntu系统不推荐使用deb软件包,因为要解决软件包依赖问题,安装也比较麻烦。

在Ubuntu中安装 .deb 文件,你可以使用 dpkg 命令或者apt命令。

软件包网站

https://pkgs.org/

dpkg命令常见参数

bash
dpkg -i --install xxx.deb 安装deb软件包
dpkg -r --remove xxx.deb 删除软件包
dpkg -r -P --purge xxx.deb 连同配置文件一起删除
dpkg -I -info xxx.deb 查看软件包信息
dpkg -L xxx.deb 查看文件拷贝详情
dpkg -l 查看系统中已安装软件包信息
dpkg-reconfigure xxx 重新配置软件包

apt源

apt 是Ubuntu系统下的一个命令行工具,用于处理包。这个命令可以自动下载和安装软件包及其依赖项。它是Advanced Packaging Tool (APT)的一部分,APT是处理包的高级工具,可以处理复杂的包关系,如依赖关系等。

apt命令的常见参数

bash
install:安装软件包
remove:删除软件包
upgrade:升级所有已安装的软件包
update:更新源列表
dist-upgrade:升级系统
autoremove:自动删除不再需要的包
purge:删除软件包及其配置文件
clean:清理下载的包文件
autoclean:清理旧版本的下载包文件
apt命令替代命令功能描述
apt updateapt-get update更新存储库索引
apt upgradeapt-get upgrade升级所有可升级的软件包
apt installapt-get install安装软件包
apt removeapt-get remove移除软件包但保留配置文件
apt purgeapt-get purge移除软件包也删除配置文件
apt autoremoveapt-get autoremove自动删除没用的依赖包
apt full-upgradeapt-get dist-upgrade在升级软件包时自动处理依赖关系
apt searchapt-cache search搜索**搜索应用程序
apt showapt-cache show显示指定安装包基本信息
apt listN/A列出包含条件的包(已安装,可升级等)
apt edit-sourcesN/A编辑源列表

仓库源文件

  • 档案类型 (Archive type) 条目的第一个词 deb 或是 deb-src 表明了所获取的软件包档案类型。

    • deb:**档案类型为二进制预编译软件包,一般我们所用的档案类型。 **
    • deb-src:档案类型为用于编译二进制软件包的源代码。
  • 仓库地址 (Repository URL):条目的第二个词则是软件包所在仓库的地址。我们可以更换仓库地址为其他地理位置更靠近自己的镜像来提高下载速度。

软件包分类

Debian

  • main:包含符合 DFSG 指导原则的自由软件包,而且这些软件包不依赖不符合该指导原则的软件包。这些软件包被视为 Debian 发型版的一部分。
  • contrib:包含符合 DFSG 指导原则的自由软件包,不过这些软件包依赖不在 main 分类中的软件包。
  • non-free:包含不符合 DFSG 指导原则的非自由软件包。

Ubuntu

  • main: 官方支持的 自由软件。
  • restricted:官方支持的非完全自由的软件。
  • universe:社区维护的自由软件。
  • multiverse:非自由软件

在Ubuntu中更换APT源可以通过编辑 /etc/apt/sources.list 文件来实现。

apt 国内源

  1. 清华大学开源软件镜像站
  2. 阿里云镜像站
  3. 中国科学技术大学 Mirror
  4. 网易开源镜像站
  5. 华为云开源镜像站
  6. 腾讯软件源

更换国内源

bash
# 备份原配置文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
# 编辑源文件
vi /etc/apt/sources.list
# 替换为新的镜像源(以阿里云为例)
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
# 更新软件包 缓存
sudo apt update

选择镜像源的建议

  • 南方用户:优先选择 腾讯云华为云
  • 北方用户:优先选择 清华大学中科大
  • 教育网用户清华大学中科大 有专线优化,速度更快。

源代码安装

"源代码编译安装"是指从一个软件的源代码(原始的、可读的程序代码)开始,通过编译(将源代码转换成计算机可执行的二进制代码)和安装(将编译好的程序放置到合适的位置,设置好环境变量等)的过程,最终在计算机上安装并运行该软件

使用源代码的优点

  • 获得最新的软件版本,及时修复 bug

  • 根据用户需要,灵活制定软件功能

应用场合举例

  • 安装较新版本的应用程序时
  • 当前安装的程序无法满足需要时
  • 需要为应用程序添加新的功能时

完整性校验

计算 MD5 校验和,并与官方提供的值相比较,判断是否一致。若不一致,可能 源码包破损或被人植入程序,需谨慎。

bash
md5sum file.txt > checksum.md5		# 生成校验文件
md5sum -c checksum.md5				# 验证文件 输出:file.txt: OK
mermaid
graph TD
    A[下载源代码安装包文件] --> B[步骤1:tar解包]
    B -->|用途:解压并释放源代码包到指定的目录| C[步骤2:./configure 配置]
    C -->|用途:设置安装目录、安装模块等选项| D[步骤3:make 编译]
    D -->|用途:生成可执行的二进制文件| E[步骤4:make install 安装]
    E -->|用途:复制二进制文件到系统,配置应用环境| F[测试及应用、维护软件]

案例编译安装httpd

openEuler编译安装httpd

bash
# 安装依赖
dnf install -y gcc gcc-c++ make zlib-devel pcre-devel expat-devel libtool openssl-devel
# 获取源码包
wget https://archive.apache.org/dist/httpd/httpd-2.4.54.tar.gz
wget https://dlcdn.apache.org//apr/apr-1.7.5.tar.gz
wget https://dlcdn.apache.org//apr/apr-util-1.6.3.tar.gz
# 解压源码到指定路径
tar xf httpd-2.4.54.tar.gz -C /usr/src/
tar xf apr-1.7.4.tar.gz -C /usr/src/httpd-2.4.54/srclib/
tar xf apr-util-1.6.3.tar.gz -C /usr/src/httpd-2.4.54/srclib/

mv /usr/src/httpd-2.4.54/srclib/apr-1.7.4/ /usr/src/httpd-2.4.54/srclib/apr
mv /usr/src/httpd-2.4.54/srclib/apr-util-1.6.3/ /usr/src/httpd-2.4.54/srclib/apr/util

#预配置
./configure --prefix=/usr/local/apache
# 编译
make
# 安装
make install
# 编译安装后,修改配置文件
1>备份后,修改配置文件
cd /usr/local/apache/conf/
cp httpd.conf httpd-$(date +%F).conf
2>修改文件
vi /usr/local/apache/conf/httpd.conf
……
#ServerName www.example.com:80
ServerName www.example.com:80
# 启动 Apache
/usr/local/apache/bin/apachectl start

# 进程检测
ps aux | grep "httpd"

# 注:关闭防火墙:systemctl stop firewalld
#   永久关闭: systemctl disable firewalld
# 注: ./configure –help”可查看帮助 ,典型的配置选项: --prefix=软件安装目录

ubuntu下安装httpd

bash
下载httpd-2.4.54,下载地址:https://archive.apache.org/dist/httpd/httpd-
2.4.54.tar.gz
下载apr-1.7.4,下载地址:https://dlcdn.apache.org//apr/apr-1.7.4.tar.gz
下载apr-util-1.6.3,下载地址:https://dlcdn.apache.org//apr/apr-util-1.6.3.tar.gz
# 下载安装包
wget https://archive.apache.org/dist/httpd/httpd-2.4.54.tar.gz
wget https://dlcdn.apache.org//apr/apr-1.7.4.tar.gz
wget https://dlcdn.apache.org//apr/apr-util-1.6.3.tar.gz

# 解压指定目录
tar xf httpd-2.4.54.tar.gz -C /usr/src/
apr-1.7.4.tar.gz和apr-util-1.6.3.tar.gz,分别上传至/usr/src/httpd-2.4.54/srclib/目录,依次执行以下命令
tar xf apr-1.7.4.tar.gz -C /usr/src/httpd-2.4.54/srclib/
tar xf apr-util-1.6.3.tar.gz -C /usr/src/httpd-2.4.54/srclib/
mv /usr/src/httpd-2.4.54/srclib/apr-1.7.4/ /usr/src/httpd-2.4.54/srclib/apr
mv /usr/src/httpd-2.4.54/srclib/apr-util-1.6.3/ /usr/src/httpd-2.4.54/srclib/aprutil

# 安装依赖
apt update -y
apt install build-essential libpcre3 libpcre3-dev libssl-dev -y
apt install libexpat1-dev -y
apt install libapr1-dev libaprutil1-dev -y


# 预配置
cd /usr/src/httpd-2.4.54
./configure --prefix=/usr/local/apache

# 编译
make

# 安装
make install

# 编译安装后,修改配置文件
1>备份后,修改配置文件
cd /usr/local/apache/conf/
cp httpd.conf httpd-$(date +%F).conf
2>修改文件
vi /usr/local/apache/conf/httpd.conf
……
#ServerName www.example.com:80
ServerName www.example.com:80
# 启动 Apache
/usr/local/apache/bin/apachectl start

# 进程检测
ps aux | grep "httpd"

# 注:关闭防火墙:systemctl stop firewalld
#    永久关闭: systemctl disable firewalld
# 注: ./configure –help”可查看帮助 ,典型的配置选项: --prefix=软件安装目录

Linux 可执行文件路径管理

在Linux系统中,可执行文件的路径管理是通过环境变量PATH来实现的

PATH环境变量

PATH是一个包含多个目录路径的环境变量,系统会在这些目录中查找可执行文件。当你在终端输入命令时,系统会按照PATH中列出的顺序搜索这些目录。

查看当前PATH

bash
echo $PATH
# 或
printenv PATH

输出通常类似于:

bash
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

修改PATH变量

临时修改(仅当前会话有效)

bash
export PATH=$PATH:/new/directory/path

永久修改

对当前用户:

编辑~/.bashrc~/.bash_profile~/.profile文件,添加:

bash
export PATH=$PATH:/new/directory/path

然后运行:

bash
source ~/.bashrc  # 或对应的文件

对所有用户:

编辑/etc/environment/etc/profile文件(需要root权限)

路径搜索顺序

系统会按照PATH中定义的顺序搜索可执行文件。例如:

bash
/usr/local/bin:/usr/bin:/bin

系统会先搜索/usr/local/bin,然后是/usr/bin,最后是/bin

查找命令所在位置

使用which命令:

bash
which ls

使用whereis命令(还会显示手册页位置)

bash
whereis ls

使用type命令(可以识别别名和函数):

bash
type ls

添加自定义路径的最佳实践

  1. 在用户主目录下创建~/bin目录存放个人脚本
  2. 将常用工具安装在/usr/local/bin
  3. 避免将当前目录.添加到PATH中,这有安全风险

特殊注意事项

  • 路径之间用冒号(:)分隔
  • 路径顺序很重要,系统使用第一个找到的可执行文件
  • 修改PATH后,新打开的终端会话才会生效(除非使用source
  • 某些GUI程序可能不会继承终端的PATH设置