作为一名Linux系统管理员,掌握应用程序的安装与管理是最基础的技能之一。不同于Windows系统的.exe安装包,Linux系统有着自己独特的软件包管理机制。在实际工作中,我们经常会遇到各种格式的软件包,每种格式都有其特点和适用场景。
Linux系统中常见的软件包格式主要有以下几种:
| 全称 | 后缀 | 特点 | 适用场景 |
|---|---|---|---|
| RPM包 | .rpm | Red Hat系列发行版的包管理规范,依赖关系需要手动解决 | Red Hat、CentOS、openEuler等 |
| DEB包 | .deb | Debian系列的包管理格式,依赖管理更智能 | Debian、Ubuntu等 |
| 源码包 | .tar.gz、.tar.bz2 | 将源码文件打包压缩,需解压后编译安装 | 需要自定义编译选项的场景 |
| 绿色免安装包 | 无固定后缀 | 压缩包内提供已编译好的可执行文件,解压即可使用 | 便携式应用、无需安装的软件 |
提示:在实际工作中,RPM和DEB是最常见的两种二进制包格式,它们分别对应不同的Linux发行版家族。源码包则提供了最大的灵活性,但安装过程较为复杂。
RPM(Red Hat Package Manager)是Red Hat系列Linux发行版的包管理格式。掌握rpm命令的使用是每个Linux系统管理员的必备技能。
查看系统中所有已安装的RPM包:
bash复制rpm -qa
这个命令会列出系统中所有已安装的RPM包,输出类似于:
code复制openEuler-latest-release-1.0-1.oe2403sp1.x86_64
tzdata-2024a-3.oe2403sp1.noarch
ncurses-base-6.4-8.oe2403sp1.noarch
...
如果只想查询某个特定的包是否安装:
bash复制rpm -q 包名
例如查询openEuler-latest-release包:
bash复制rpm -q openEuler-latest-release
查看已安装包的详细信息:
bash复制rpm -qi 包名
这个命令会显示包的名称、版本、发行号、安装日期、大小、许可证、打包者、摘要和描述等信息。
查看未安装的RPM包文件的信息:
bash复制rpm -qip 包文件.rpm
安装RPM包的基本命令:
bash复制rpm -ivh 包文件.rpm
参数说明:
卸载RPM包:
bash复制rpm -e 包名
当RPM数据库出现问题时,可以尝试重建:
bash复制rpm --rebuilddb
初始化RPM数据库:
bash复制rpm --initdb
注意事项:使用rpm命令安装软件时,最大的痛点就是依赖关系处理。如果A包依赖B包,而B包又依赖C包,手动解决这些依赖关系会非常麻烦。这就是为什么在实际工作中,我们更推荐使用dnf/yum这样的高级包管理工具。
dnf(Dandified YUM)是RPM系Linux发行版的新一代高级包管理器,在RHEL 8/CentOS 8/openEuler等系统中,yum实际上是dnf的软链接,两者命令兼容。
安装指定软件包(如gcc):
bash复制dnf -y install gcc
这个命令会自动解析并安装gcc及其所有依赖包。输出会显示下载的包列表、大小、下载进度和安装进度。
卸载指定软件包:
bash复制dnf remove -y 包名
如果要同时删除不再需要的依赖包:
bash复制dnf autoremove -y 包名
搜索软件包:
bash复制dnf search 关键词
查看软件包信息:
bash复制dnf info 包名
更新所有已安装的软件包:
bash复制dnf update -y
清理缓存:
bash复制dnf clean all
实操心得:在实际工作中,建议定期运行
dnf update -y保持系统更新,但生产环境更新前最好先在测试环境验证。更新后可以使用dnf autoremove清理不再需要的依赖包。
在企业环境中,有时需要在没有互联网连接的情况下安装软件,这时可以使用光盘或配置本地仓库作为软件源。
在Linux系统中,光盘通常对应/dev/sr0设备,/dev/cdrom是其符号链接:
bash复制ls -l /dev/cdrom
输出示例:
code复制lrwxrwxrwx. 1 root root 3 Jan 20 11:06 /dev/cdrom -> sr0
创建一个目录作为光盘的挂载点:
bash复制mkdir -p /mnt/cdrom
将光盘挂载到指定目录:
bash复制mount /dev/cdrom /mnt/cdrom/
挂载成功后,可以进入挂载目录查看光盘内容:
bash复制cd /mnt/cdrom && ls
对于物理光盘,可以使用eject命令弹出:
bash复制eject /dev/cdrom
如果经常需要使用光盘安装软件,可以将其配置为本地仓库:
bash复制vi /etc/yum.repos.d/local.repo
code复制[local]
name=Local Repository
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0
bash复制dnf clean all
dnf makecache
现在就可以使用dnf命令从本地仓库安装软件了。
注意事项:使用本地仓库时,软件版本可能较旧。对于安全更新等,还是建议配置网络仓库。
虽然二进制包安装方便,但有时我们需要从源码编译安装软件,特别是当:
源码安装通常包括以下步骤:
假设我们要安装Apache HTTP服务器,首先下载源码包:
bash复制wget http://archive.apache.org/dist/httpd/httpd-2.4.25.tar.gz
解压源码包:
bash复制tar zxf httpd-2.4.25.tar.gz
cd httpd-2.4.25
运行configure脚本检查系统环境并配置编译选项:
bash复制./configure --prefix=/usr/local/apache
这里--prefix指定了安装目录。其他常用选项包括:
--enable-feature:启用特定功能--disable-feature:禁用特定功能--with-package:指定依赖包路径如果配置过程中报错,通常是缺少依赖库。根据错误提示安装相应的开发包(通常是包名加-devel后缀)。
例如,如果报错"APR not found",需要安装apr和apr-util开发包:
bash复制dnf -y install apr-devel apr-util-devel
其他常见依赖:
配置成功后,开始编译:
bash复制make
编译完成后,安装到指定目录:
bash复制make install
检查安装目录:
bash复制ls /usr/local/apache
启动Apache:
bash复制/usr/local/apache/bin/apachectl start
优点:
缺点:
实操建议:除非有特殊需求,否则建议优先使用发行版提供的二进制包。如果必须源码安装,建议在测试环境验证后再部署到生产环境。
问题:安装软件时遇到依赖错误
解决方案:
--nodeps跳过依赖检查(不推荐)问题:安装软件时提示与已安装软件冲突
解决方案:
--replacepkgs替换已安装的包--force强制安装(慎用)错误1:configure: error: C compiler cannot create executables
解决方案:安装gcc编译器
bash复制dnf -y install gcc
错误2:make: *** No targets specified and no makefile found. Stop.
解决方案:确保先运行了./configure且没有报错
错误3:error while loading shared libraries
解决方案:确保库路径正确,或安装缺少的共享库
bash复制./configure CFLAGS="-O2 -march=native"
根据多年Linux系统管理经验,总结以下最佳实践:
对于初学者,建议从dnf/yum等高级包管理工具开始,熟悉后再学习rpm命令和源码编译。随着经验积累,你会逐渐掌握在不同场景下选择最合适的软件管理方式。