软件的运行和编译 一、软件相关概念 1.1 ABI ABI(Application Binary Interface): 应用程序二进制接口。每个操作系统 都会为运行在该系统下的应用程序提供应用程序二进制接口。ABI包含了应用程序 在这个系统下运行时必须遵守的编程约定。
Windows与Linux之间不兼容:
ELF(Executable and Linkable Format)Linux
PE(Portable Executable)Windows
1.2 API 应用程序接口(Application Programming Interface,API),又称为应用编程接口,就是软件系统不同组成部分衔接的约定。API可以在各种不同的操作系统上实现给应用程序提供完全相同的接口,而它们本身在这些系统上的实现却可能不同。以主流的操作系统Windows和Linux为例,API分为 Windows API 和 Linux API。在Windows上开发出来的软件无法在Linux上运行,在Linux上开发出的软件也无法在Windows上运行。为了解决不同操作系统之间软件移植的困难,POSIX标准开始诞生。
可移植操作系统接口(Portable Operating System Interface,缩写为POSIX )是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称。
1.3 C语言程序实现过程 C源程序 –> 预处理(Preprocessing) –> 编译(Compilation) –> 汇编(Assemble) –> 链接(Linking) –> 生成可执行文件
示例:GCC编译过程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [root@Rocky8-mini mnt] int main (){ printf ("Hello,world!\n" ); return 0; } [root@Rocky8-mini mnt] [root@Rocky8-mini mnt] [root@Rocky8-mini mnt] [root@Rocky8-mini mnt] [root@Rocky8-mini mnt] hgfs test test.c test.i test.o test.s [root@Rocky8-mini mnt] Hello,world! gcc test.c -o test
1.4 软件模块的静态和动态链接 链接的作用是将各个模块之间的相互引用的部分处理好,使得各个模块之间能够正确的衔接,分为静态链接和动态链接。
静态链接
将程序所对应的依赖包复制一份到包中
占用空间多,但程序迁移容易
程序升级困难,需要重新进行链接
动态链接
程序所依赖的库做动态的链接指向
占用空间少,升级方便
模块(库)文件
查看二进制程序所依赖的库文件
1 2 3 4 5 6 ldd /PATH/TO/BINARY_FILE [root@Rocky8-mini mnt] linux-vdso.so.1 (0x00007ffe593e4000) libc.so.6 => /lib64/libc.so.6 (0x00007fd84f383000) /lib64/ld-linux-x86-64.so.2 (0x00007fd84f951000)
管理查看本机装载的库文件
1 2 3 4 5 ldconfig /sbin/ldconfig –p
配置文件
1 2 /etc/ld.so.conf /etc/ld.so.conf.d/*.conf
缓存文件
软件包和包管理器 一、软件包基础知识 1.1 软件包介绍 最初开源软件只提供打包压缩后的源码文件,用户必须自己编译在Linux上运行的软件。当Debian诞生时,出现了dpkg的包管理工具,用来管理deb后缀的软件包文件。之后红帽开发出自己的rpm包管理工具。
示例:使用光盘自动挂载
1 2 3 4 5 6 [root@Rocky8-mini ~] [root@Rocky8-mini ~] [root@Rocky8-mini ~] [root@Rocky8-mini cd ] AppStream BaseOS EFI images isolinux LICENSE media.repo TRANS.TBL
1.2 软件包中的文件分类 二进制文件、库文件、配置文件、帮助文件
示例:利用cpio工具查看包文件列表
1 rpm2cpio 包文件 | cpio –itv 预览包内文件
1.3 软件包管理器 软件包管理器的功能:
将编译好的应用程序的组成文件打包成一个或多多个程序包文件,利用包管理器可以方便地实现程序包的安装、卸载、查询、升级和校验等管理操作。
主流的包管理器
Redhat:rpm文件,rpm包管理器
Debian:deb文件,dpkg包管理器
1.4 包命名 源代码打包文件命名:
1 2 name-VERSION.tar.gz|bz2|xz VERSION: major.minor.release
rpm包命名方式:
1 2 3 4 5 6 7 8 9 name-VERSION-release.arch.rpm VERSION: major.minor.release release: release.OS 常见的arch x86: i386,i486,i586,i686 x86_64: x64,x86_64,amd64 powerpc: ppc 与平台无关: noarch
1.5 分类和拆包 软件包为了管理和使用的便利,会将一个大的软件分类,放在不同的子包中。
包的分类
Application-VERSION-ARCH.rpm 主包
Application-devel-VERSION-ARCH.rpm 开发子包
Application-utils-VERSION-ARCH.rpm 其他子包
Application-libs-VERSION-ARCH.rpm 其他子包
1.6 包的依赖 软件包之间可能存在依赖关系,甚至循环依赖,即:A包依赖B包,B包依赖C包,C包依赖A包。安装软件包时,会因为缺少依赖的包,而导致安装包失败。
解决包之间依赖的管理工具:
yum:rpm包管理器的前端工具
dnf:Fedora 18+ 及 Centos 8
apt:deb包管理器的前端工具
zypper:suse上的rpm前端管理工具
1.7 程序包管理器相关文件 1、包文件组成(每个包独有)
包内的文件
元数据,如:包的名称,版本,依赖性,描述等
可能会有包安装或卸载时运行时的脚本
2、数据库(公共):/var/lib/rpm
程序包名称及版本
依赖关系
功能说明
包安装后生成的各文件路径及校验码信息
1.8 获取程序包的路径
系统发版的光盘或官方网站
第三方组织提供
软件项目官方站点
搜索引擎
自己制作
rpm 包管理器 RockyLinux 上使用rpm命令管理程序包
功能:
安装、卸载、升级、查询、校验、数据库维护
一、安装 格式:
1 rpm {-i|--install} [install-options] PACKAGE_FILE...
选项:
rpm包安装[install-options]
1 2 3 4 5 6 7 8 9 10 --test : 测试安装,不真正执行安装 --nodeps: 忽略依赖关系 --replacepkgs --nosignature: 不检查来源合法性 --nodigest: 不检查包完整性 --noscripts: 不执行程序包脚本 %pre: 安装前脚本 --nopre %post: 安装后脚本 --nopost %preun: 卸载前脚本 --nopreun %postun: 卸载后脚本 --nopostun
二、升级和降级 rpm包的升级和降级
1 2 3 4 5 6 7 rpm {-U|--upgrade} [install-options] PACKAGE_FILE ... rpm {-F|--freshen} [install-options] PACKAGE_FILE ... upgrage:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则“安装” freeshen:安装有旧版程序包,则“升级”;如果不存在旧版程序包,则不执行升级操作 --oldpackage:降级 --force:强制安装
注意:
(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此,对直接安装新版本内核 (2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本的提供的同一个配置文件并不会直接覆盖老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留
三、包查询 格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 rpm {-q|--query} [select-options] [query-options] [select-options] -a: 所有包 -f: 查看指定的文件由哪个程序包安装生成 -p rpmfile: 针对尚未安装的程序包文件做查询操作 [query-options] --changelog: 查询rpm包的changelog -c: 查询程序的配置文件 -d: 查询程序的文档 -i: information -l: 查看指定的程序包安装后生成的所有文件 --scripts: 程序包自带的脚本 --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供 --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖 --provides:列出指定程序包所提供的CAPABILITY -R:查询指定的程序包所依赖的CAPABILITY
四、包卸载 格式
1 rpm {-e|--erase} [--allmatchers] [--nodeps] [--noscripts] [--notriggers] [--test ] PACKAGE_NAME
注:当包卸载时,对应的配置文件不会删除,以FILENAME.rpmsave形式保留
五、包校验 在安装包时,系统会检查包的来源是否是合法的
检查包的完整性和签名
1 rpm -K|--checksig RPMFILE
在检查包的来源和完整性前,必须导入所需要公钥
1 2 3 4 [root@centos7 ~] [root@Rocky8-mini ~] rpm -qa "gpg-pubkey*"
示例
1 2 3 4 5 6 [root@Rocky8-mini ~] /misc/cd/AppStream/Packages/h/httpd-2.4.37-41.module+el8.5.0+695+1fa8055e.x86_64.rpm: digests signatures OK [root@Rocky8-mini ~] gpg-pubkey-2f86d6a1-5cf7cefb gpg-pubkey-6d745a60-60287f36
软件在安装时,会将包里的每个文件的元数据,如:大小,权限,所有者,时间等记录至rpm相关的数据库中,可以用来检查包中的文件是否和当初安装时有所变化。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 rpm {-V|--verify} [select-options] [verify-options] [root@Rocky8-mini ~] .......T. c /etc/issue S file Size differs M Mode differs (includes permissions and file type ) 5 digest (formerly MD5 sum ) differs D Device major/minor number mismatch L readLink(2) path mismatch U User ownership differs G Group ownership differs T mTime differs P capabilities differ . (点) 表示当前位置代表的字符含义一致 c 所在的位置表示文件类型 c 配置文件 d 文件数据文件 g 该文件不属于某个文件(少数情况) l 许可证文件(license file) r 自述文件(READ ME)
六、数据库维护 rpm包安装时生成的信息,都放在rpm数据库中
1 2 3 4 5 /var/lib/rpm rpm {--initdb|--rebuilddb} initdb: 初始化,如果事先不存在数据库,则新建之,否则,不执行任何操作 rebuilddb: 重建已安装的包头的数据库索引目录
yum 和 dnf RockyLinux 使用 yum, dnf 解决rpm包依赖关系
YUM,rpm的前端程序,解决软件包相关依赖性,Rocky8使用dnf代替了yum,不过保留了和yum的兼容性,配置通用
一、yum/dnf 工作原理 yum/dnf 是基于C/S模式
yum 服务器存放rpm包和包相关的元数据库
yum 客户端访问yum服务器进行安装或查询等
二、yum客户端配置 yum 客户端配置文件
1 2 /etc/yum.conf /etc/yum.repos.d/*.repo
repo 仓库主要配置文件解析
1 2 3 4 5 6 [repositoryID] name= baseurl=URL enabled={1|0} gpgcheck={1|0} gpgkey=URL
yum 服务器的baseurl形式
1 2 3 4 5 6 file:// 本地路径 http:// https:// ftp://
相关变量
1 2 3 4 $releasever : 当前OS的发行版的主版本号,如:8,7,6$arch : CPU架构,如:aarch64, i586, i686,x86_64等$basearch :系统基础平台;i386, x86_64
示例:RockyLinux8 配置国内源文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 [root@Rocky8-mini ~] [BaseOS] name=BaseOS baseurl=https://mirrors.ustc.edu.cn/rocky/$releasever /BaseOS/$basearch /os/ https://mirrors.163.com/rocky/$releasever /BaseOS/$basearch /os/ https://mirrors.aliyun.com/rockylinux/$releasever /BaseOS/$basearch /os/ gpgcheck=0 enabled=1 [AppStream] name=AppStream baseurl=https://mirrors.ustc.edu.cn/rocky/$releasever /AppStream/$basearch /os/ https://mirrors.163.com/rocky/$releasever /AppStream/$basearch /os/ https://mirrors.aliyun.com/rockylinux/$releasever /AppStream/$basearch /os/ gpgcheck=0 enabled=1 [epel] name=epel baseurl=https://mirrors.ustc.edu.cn/epel/$releasever /Everything/$basearch / https://mirrors.aliyun.com/epel/$releasever /Everything/$basearch / https://mirrors.cloud.tencent.com/epel/$releasever /Everything/$basearch / gpgcheck=1 gpgkey=https://mirrors.ustc.edu.cn/epel/RPM-GPG-KEY-EPEL-8 https://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-8 https://mirrors.cloud.tencent.com/epel/RPM-GPG-KEY-EPEL-8 enabled=1 [extras] name=extras baseurl=https://mirrors.ustc.edu.cn/rocky/$releasever /extras/$basearch /os/ gpgcheck=0 enabled=1
示例:CentOS7 配置国内源文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [root@centos7 ~] [Base] name=Base baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/ https://mirrors.aliyun.com/centos/7/os/x86_64/ gpgcheck=0 enabled=1 [epel] name=epel baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/ https://mirrors.aliyun.com/epel/7/x86_64/ gpgcheck=0 enabled=1 [extra] name=extra baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/ gpgcheck=0 enabled=1
示例:使用本地光盘源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 [root@Rocky8-mini ~] [Rocky8_Baseos] name=Baseos baseurl=file:///misc/cd/BaseOS gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial enabled=1 [Rocky8_Appstream] name=Appstream baseurl=file:///misc/cd/AppStream gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial enabled=1
关于仓库的管理命令
1 2 3 4 5 6 7 8 9 10 11 yum-config-manager 可以生成yum仓库的配置文件及启用或禁用仓库,来自于yum-utils包 yum-config-manager -add-repo URL或file yum-config-manager --disable "仓库名" yum-config-manager --enable "仓库名"
示例
1 2 3 4 5 6 7 8 9 [root@Rocky8-mini ~] yum-utils-4.0.21-3.el8.noarch [root@Rocky8-mini ~] Repository epel is listed more than once in the configuration Adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo [root@Rocky8-mini ~] docker-ce.repo
三、yum 命令 yum命令的用法:
1 yum [options] [command ] [package ...]
yum的命令行选项:
1 2 3 4 5 -y -q --nogpgcheck --enablerepo=repoid_glob --disablerepo=repoid_glob
3.1 显示仓库列表 1 yum repolist [all|enabled|disabled]
Example:
1 2 3 [root@Rocky8-mini ~] [root@Rocky8-mini ~] [root@Rocky8-mini ~]
3.2 显示程序包 1 2 3 yum list yum list [all | glob_exp1] [glob_exp2] [...] yum list {available|installed|updates} [glob_exp1] [...]
Example1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [root@Rocky8-mini ~] Repository epel is listed more than once in the configuration Last metadata expiration check: 0:38:33 ago on Sat 29 Oct 2022 09:32:14 PM EDT. Available Packages docker-ce.x86_64 3:20.10.21-3.el8 docker-ce-stable [root@Rocky8-mini ~] Repository epel is listed more than once in the configuration Last metadata expiration check: 0:39:32 ago on Sat 29 Oct 2022 09:32:14 PM EDT. Available Packages docker-ce.x86_64 3:19.03.13-3.el8 docker-ce-stable docker-ce.x86_64 3:19.03.14-3.el8 docker-ce-stable docker-ce.x86_64 3:19.03.15-3.el8 docker-ce-stable docker-ce.x86_64 3:20.10.0-3.el8 docker-ce-stable ··· [root@Rocky8-mini ~] Repository epel is listed more than once in the configuration Last metadata expiration check: 0:47:10 ago on Sat 29 Oct 2022 09:28:13 PM EDT. Error: No matching Packages to list
Example2:
1 2 3 4 [root@Rocky8-mini ~] Repository epel is listed more than once in the configuration 499
Example3:
1 2 3 4 [root@Rocky8-mini ~] Repository epel is listed more than once in the configuration 15908
Example4:
1 2 3 4 [root@Rocky8-mini ~] Repository epel is listed more than once in the configuration 26
3.3 安装程序包 1 2 3 4 5 yum install package1 ... yum reinstall package1 ... --downloadonly --downloadaddir=<path>,--destdir=<path>
3.3.1 安装epel源包 1 2 3 [root@Rocky8-mini ~] [root@Rocky8-mini ~]
1 2 [root@Rocky8-mini ~] [root@Rocky8-mini ~]
3.3.2 升级内核 实例:利用elrepo源在Centos7安装新版本内核
注:选择内核版本时,选择”kernel-lt”,长期技术支持版,安全稳定;“kernal-ml”为主线版,即测试版,不推荐使用。
1、进入elrepo源官网,找到对应版本的安装提示
2、按照提示安装该rpm包,之后会生成仓库配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 [root@centos7 ~] [root@centos7 ~] backup elrepo.repo yum.repo [root@centos7 yum.repos.d] [elrepo] name=ELRepo.org Community Enterprise Linux Repository - el7 baseurl=http://elrepo.org/linux/elrepo/el7/$basearch / http://mirrors.coreix.net/elrepo/elrepo/el7/$basearch / http://mirror.rackspace.com/elrepo/elrepo/el7/$basearch / http://linux-mirrors.fnal.gov/linux/elrepo/elrepo/el7/$basearch / mirrorlist=http://mirrors.elrepo.org/mirrors-elrepo.el7 enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org protect=0 [elrepo-testing] name=ELRepo.org Community Enterprise Linux Testing Repository - el7 baseurl=http://elrepo.org/linux/testing/el7/$basearch / http://mirrors.coreix.net/elrepo/testing/el7/$basearch / http://mirror.rackspace.com/elrepo/testing/el7/$basearch / http://linux-mirrors.fnal.gov/linux/elrepo/testing/el7/$basearch / mirrorlist=http://mirrors.elrepo.org/mirrors-elrepo-testing.el7 enabled=0 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org protect=0 [elrepo-kernel] name=ELRepo.org Community Enterprise Linux Kernel Repository - el7 baseurl=http://elrepo.org/linux/kernel/el7/$basearch / http://mirrors.coreix.net/elrepo/kernel/el7/$basearch / http://mirror.rackspace.com/elrepo/kernel/el7/$basearch / http://linux-mirrors.fnal.gov/linux/elrepo/kernel/el7/$basearch / mirrorlist=http://mirrors.elrepo.org/mirrors-elrepo-kernel.el7 enabled=0 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org protect=0 [elrepo-extras] name=ELRepo.org Community Enterprise Linux Extras Repository - el7 baseurl=http://elrepo.org/linux/extras/el7/$basearch / http://mirrors.coreix.net/elrepo/extras/el7/$basearch / http://mirror.rackspace.com/elrepo/extras/el7/$basearch / http://linux-mirrors.fnal.gov/linux/elrepo/extras/el7/$basearch / mirrorlist=http://mirrors.elrepo.org/mirrors-elrepo-extras.el7 enabled=0 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org protect=0 [root@centos7 yum.repos.d] Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * elrepo-kernel: mirrors.tuna.tsinghua.edu.cn Available Packages kernel-lt.x86_64 5.4.221-1.el7.elrepo elrepo-kernel kernel-lt-devel.x86_64 5.4.221-1.el7.elrepo elrepo-kernel kernel-lt-doc.noarch 5.4.221-1.el7.elrepo elrepo-kernel kernel-lt-headers.x86_64 5.4.221-1.el7.elrepo elrepo-kernel kernel-lt-tools.x86_64 5.4.221-1.el7.elrepo elrepo-kernel kernel-lt-tools-libs.x86_64 5.4.221-1.el7.elrepo elrepo-kernel kernel-lt-tools-libs-devel.x86_64 5.4.221-1.el7.elrepo elrepo-kernel kernel-ml.x86_64 6.0.6-1.el7.elrepo elrepo-kernel kernel-ml-devel.x86_64 6.0.6-1.el7.elrepo elrepo-kernel kernel-ml-doc.noarch 6.0.6-1.el7.elrepo elrepo-kernel kernel-ml-headers.x86_64 6.0.6-1.el7.elrepo elrepo-kernel kernel-ml-tools.x86_64 6.0.6-1.el7.elrepo elrepo-kernel kernel-ml-tools-libs.x86_64 6.0.6-1.el7.elrepo elrepo-kernel kernel-ml-tools-libs-devel.x86_64 6.0.6-1.el7.elrepo elrepo-kernel perf.x86_64 5.4.221-1.el7.elrepo elrepo-kernel python-perf.x86_64
3、安装新版本内核
1 2 3 4 5 6 7 [root@centos7 yum.repos.d] [root@centos7 yum.repos.d] 3.10.0-1160.el7.x86_64 [root@centos7 ~] 3.10.0-1160.el7.x86_64 5.4.221-1.el7.elrepo.x86_64
4、重启系统,选择新版本内核启动
1 2 3 [root@centos7 ~] 5.4.221-1.el7.elrepo.x86_64
3.3.3 只下载相关的依赖包,而不安装 1 2 3 4 5 6 7 [root@Rocky8-mini ~] [root@Rocky8-mini ~] centos-logos-httpd-85.8-2.el8.noarch.rpm httpd-tools-2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64.rpm httpd-2.4.37-43.module_el8.5.0+1022+b541f3b1.x86_64.rpm mailcap-2.1.48-3.el8.noarch.rpm httpd-filesystem-2.4.37-43.module_el8.5.0+1022+b541f3b1.noarch.rpm mod_http2-1.15.7-3.module_el8.4.0+778+c970deab.x86_64.rpm
3.4 卸载程序包
3.5 升级和降级 检查可用升级
升级和降级
1 2 3 yum upgrade|update [package1] [...] yum upgrade-minimal yum downgrade package1 [package2] [...]
3.6 查询 查询程序包information
查看指定的特性(可以是某文件)是由那个程序包提供的:
1 2 3 yum provides | whatprovides feature1 [feature2] [...] 注:文件要写全路径,不能只是文件名,否则有可能查询不到
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 [root@Rocky8-mini ~] ls : cannot access '/etc/vsftpd/vsftpd.conf' : No such file or directory[root@Rocky8-mini ~] Repository epel is listed more than once in the configuration Last metadata expiration check: 1:02:37 ago on Sun 30 Oct 2022 01:02:07 AM EDT. vsftpd-3.0.3-34.el8.x86_64 : Very Secure Ftp Daemon Repo : AppStream Matched from: Filename : /etc/vsftpd/vsftpd.conf [root@Rocky8-mini ~] Repository epel is listed more than once in the configuration Last metadata expiration check: 1:02:43 ago on Sun 30 Oct 2022 01:02:07 AM EDT. Error: No Matches found [root@Rocky8-mini ~]
以指定的关键字搜索程序包名及summary信息
1 yum search string1 [string2] [...]
查看指定包所依赖的CAPABILITIES
1 yum deplist package1 [package2] [...]
3.7 仓库缓存 清除目录/var/cache/dnf | yum/ 中的缓存
1 yum clean [packages | metadata | expire-cache | rpmdb | plugins | all]
构建缓存
3.8 查看yum事务历史 yum 执行安装卸载命令会记录到相关日志中
1 2 3 4 5 6 7版本 /var/log/yum.log 8版本 /var/log/dnf.rpm.log /var/log/dnf.log
日志命令
1 yum history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync |stats]
Example:
1 2 3 4 5 6 7 8 9 10 11 12 [root@Rocky8-mini dnf] Repository epel is listed more than once in the configuration ID | Command line | Date and time | Action(s) | Altered ----------------------------------------------------------------------------------------------- 33 | -y install yum-utils | 2022-10-29 21:28 | Install | 1 32 | -y install cowsay | 2022-10-29 07:00 | Install | 42 31 | -y install autofs | 2022-10-29 03:36 | Install | 1 ...... [root@Rocky8-mini dnf] [root@Rocky8-mini dnf] [root@Rocky8-mini dnf]
3.9 安装及升级本地程序包 1 2 yum localinstall|install rpmfile1 [rpmfile2] [...] yum localupdate|update rpmfile1 [rpmfile2] [...]
3.10 查看包的安全警报 1 yum updateinfo --summary|--list|--info
3.11 包组管理的相关命令 1 2 3 4 5 yum grouplist [hidden] [groupwildcard] [...] yum groupinstall group1 [group2] [...] yum groupupdate group1 [group2] [...] yum groupremove group1 [group2] [...] yum groupinfo group1 [...]
3.12 DNF 介绍 DNF 是新一代的rpm软件包管理器。他首先出现在 Fedora 18 这个发行版中。DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等多方面的内容。
配置文件:
仓库文件:
日志:
1 2 /var/log/dnf.rpm.log /var/log/dnf.log
dnf 用法和yum一致
1 2 3 4 5 6 7 8 9 10 11 12 dnf [options] <command > [<arguments>...] dnf --version dnf repolist dnf reposync dnf install httpd dnf remove httpd dnf clean all dnf makecache dnf list installed dnf list available dnf search nano dnf history undo 1
3.13 实现私有yum仓库 实验目的:
配置Server端使用光盘中的镜像挂载到指定位置,网络epel源使用中科大镜像源下载到本地。使Server端成为本地YUM服务器,配置Client端的仓库地址为Server端。
1、配置epel源,之后下载到本地;BaseOS和AppStream源使用本地光盘进行挂载
1 2 3 4 5 6 7 [root@Rocky8-server ~] [epel] name=epel baseurl=https://mirrors.ustc.edu.cn/epel/8/Everything/x86_64/ gpgcheck=1 gpgkey=https://mirrors.ustc.edu.cn/epel/RPM-GPG-KEY-EPEL-8 enabled=1
2、server 端安装httpd服务,使其作为一台服务器,为客户端提供服务
1 2 3 4 5 [root@Rocky8-server ~] [root@Rocky8-server ~] [root@Rocky8-server ~]
3、配置本地光盘挂载到指定的位置
1 2 3 4 [root@Rocky8-server 8] [root@Rocky8-server 8] /dev/sr0 /var/www/html/Rocky/8/cdrom iso9660 defaults 0 0
4、下载配置完成的epel源到本地
1 2 3 4 5 6 7 8 9 [root@Rocky8-server 8] [root@Rocky8-server epel] [root@Rocky8-server ~]
5、配置客户端的仓库源,指向本地服务器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [root@Rocky8-client ~] [BaseOS] name=BaseOS baseurl=http://192.168.119.138/Rocky/8/cdrom/BaseOS/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial enabled=1 [AppStream] name=AppStream baseurl=http://192.168.119.138/Rocky/8/cdrom/AppStream/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial enabled=1 [epel] name=epel baseurl=http://192.168.119.138/Rocky/8/epel/ gpgcheck=1 gpgkey=http://192.168.119.138/Rocky/8/epel/RPM-GPG-KEY-EPEL-8 enabled=1
6、验证
1 2 3 4 5 6 [root@Rocky8-client yum.repos.d] repo id repo name status AppStream AppStream enabled BaseOS BaseOS enabled epel epel enabled [root@Rocky8-client yum.repos.d]
程序包编译 一、C语言源代码编译安装过程 编译过程一般需要三步骤:
./configure
通过选项传递参数,可以指定安装路径、启用特性等;执行时会参考用户指定的某些特性,以及Makefile.in文件生成Makefile
检查依赖到的外部环境,如依赖到的软件包
make 根据Makefile文件,会检测到依赖的环境,进行构建应用程序
make install 复制文件到相应路径
注:安装前可通过查看README,INSTALL获取帮助
1.1 编译安装准备 安装相关依赖包
开发工具:make,gcc
开发环境:开发库(glibc 标准库),头文件,可安装开发包组 Development Tools
软件相关依赖包
基于最小化安装的系统建议安装下面相关包
1 2 yum -y install gcc make autoconf gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree tmux lsof tcpdump wget net-tools iotop bc bzip2 zip unzip nfs-utils man-pages
1.2 编译安装 第一步:运行configure脚本,生成Makefile文件
其选项主要功能:
获取支持使用的选项./configure --help
选项分类:
安装路径设定
–prefix=/PATH 指定默认安装位置,默认为/usr/local/
sysconfdir=/PATH 配置文件安装位置
软件特性和相关指定
Optional Features:可选特性
–disable-FEATURE
–enable-FEATURE
Optional Packages:可选包
–with-PACKAGE 依赖包
–without-PACKAGE 禁用依赖关系
注:通常被编译操作依赖的程序包,需要安装此程序包的“开发”组件,其包名一般类似于name-devel-VERSION
第二步:make
第三步:make install
1.3 安装后配置 1、二进制程序导入至PATH环境变量中,长久保存写入到 /etc/profile.d/NAME.sh 文件中
1 export PATH=/PATH/TO/BIN:$PATH
2、创建相关用户及文件
一些开源软件编译完成后,需要创建相关的用户及文件
3、导入帮助守则
编辑 /etc/man.conf | man_db.conf 文件,添加一个 MANPATH
1.4 编译安装实例 1.4.1 编译安装最新版的 tree 实例:Rocky8 编译安装tree2.0.4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 [root@Rocky8-mini ~] [root@Rocky8-mini ~] tree-2.0.4.tgz [root@Rocky8-mini ~] [root@Rocky8-mini ~] [root@Rocky8-mini tree-2.0.4] [root@Rocky8-mini tree-2.0.4] [root@Rocky8-mini tree-2.0.4] PREFIX=/apps/tree [root@Rocky8-mini tree-2.0.4] [root@Rocky8-mini tree-2.0.4] [root@Rocky8-mini ~] [root@Rocky8-mini ~] [root@Rocky8-mini ~] tree v2.0.4 (c) 1996 - 2022 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, Kyosuke Tokoro [root@Rocky8-mini ~] MANDATORY_MANPATH /apps/tree/man
Ubuntu 软件管理 Debian 软件包通常为预编译的二进制格式的扩展名为“.deb”,类似rpm文件,不需要编译。包文件包括特定功能或软件所需的文件、元数据和指令
dpkg:类似于rpm,是基于Debian系统的包管理器
apt:类似于yum,软件管理工具
一、APT 工作原理 在服务器上先复制所有DEB包,然后用APT的分析工具 genbasedir 根据每个DEB 包的包头(Header)信息对所有的DEB包进行分析,并将该分析结果记录在文件夹base内的一个DEB 索引清单文件中,一旦APT 服务器内的DEB有所变动,要使用 genbasedir 产生新的DEB索引清单。客户端在进行安装或升级时先要查询DEB索引清单,从而获知所有具有依赖关系的软件包,并一同下载到客户端以便安装。当客户端需要安装、升级或删除某个软件包时,客户端计算机取得DEB索引清单压缩文件后,会将其解压置放于 /var/cache/apt/,而客户端使用 apt-get install 或 apt-get upgrade 命令的时候,就会将这个文件夹内的数据和客户端计算机内的DEB数据库比对,知道哪些DEB已安装、未安装或是可以升级的。
二、dpkg 包管理器 dpkg 常见用法
1 2 3 4 5 6 7 8 9 10 dpkg -i package.deb 安装包 -r package 删除包,不会自动卸载依赖于它的包,不建议 -P package 删除包,包括配置文件 -l 列出当前已经安装的包 -l package 显示该包的简要说明 -s package 列出该包的状态,包括详细信息 -L package 列出包中所包含的文件 -S <pattern> 搜索包含pattern的包 -c package.deb 列出deb包的内容 --unpack package.deb 解开deb包的内容
三、apt
apt命令
被取代的命令
功能
apt install
apt-get install
安装软件包
apt remove
apt-get remove
移除软件包
apt purge
apt-get purge
移除软件包及配置文件
apt update
apt-get update
刷新存储库索引
apt upgrade
apt-get upgrade
升级所有可升级的软件包
apt autoremove
apt-get autoremove
自动删除不需要的包
apt full-upgrade
apt-get dist-upgrade
在升级软件包时自动处理依赖关系
apt search
apt-cache search
搜索应用程序
apt show
apt-cache show
显示安装包的详细信息
apt list
空
列出包含条件的包(已安装的,可升级的等)
apt edit-sources
空
编辑镜像源列表
APT包索引配置文件
1 2 /etc/apt/sources.list /etc/apt/sources.list.d/
apt 命令操作的日志文件
示例:
1 2 3 4 5 6 7 apt install nginx=1.14.0-0ubuntu1.6 apt-file search 'string' apt-file search -x '正则表达式' apt-file search -F /path/file
四、软件管理案例 4.1 查看文件来自于哪个包 示例:查找存在的文件来自于哪个包
1 2 3 4 root@ubuntu18-server:~ coreutils: /bin/ls klibc-utils: /usr/lib/klibc/bin/ls
示例:查找不存在的文件属于哪个包
1 2 3 4 root@ubuntu18-server:~ root@ubuntu18-server:~ root@ubuntu18-server:~ root@ubuntu18-server:~
4.2 查看包相关信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 root@ubuntu18-server:~ Total package names: 96367 (1,927 k) Total package structures: 96607 (4,251 k) Normal packages: 78791 Pure virtual packages: 1556 Single virtual packages: 5306 Mixed virtual packages: 458 Missing: 10496 Total distinct versions: 91272 (7,302 k) Total distinct descriptions: 171178 (4,108 k) Total dependencies: 562504/129460 (13.3 M) Total ver/file relations: 50846 (1,220 k) Total Desc/File relations: 40106 (963 k) Total Provides mappings: 42265 (1,014 k) Total globbed strings: 213289 (5,204 k) Total slack space: 31.1 k Total space accounted for : 39.7 M Total buckets in PkgHashTable: 50503 Unused: 7546 Used: 42957 Utilization: 85.0583% Average entries: 2.24892 Longest: 59 Shortest: 1 Total buckets in GrpHashTable: 50503 Unused: 7546 Used: 42957 Utilization: 85.0583% Average entries: 2.24334 Longest: 12 Shortest: 1 root@ubuntu18-server:~ root@ubuntu18-server:~
4.3 查看仓库中的指定软件的所有版本 1 2 3 4 5 root@ubuntu18-server:~ nginx | 1.14.0-0ubuntu1.10 | https://mirrors.aliyun.com/ubuntu bionic-updates/main amd64 Packages nginx | 1.14.0-0ubuntu1.10 | https://mirrors.aliyun.com/ubuntu bionic-security/main amd64 Packages nginx | 1.14.0-0ubuntu1 | https://mirrors.aliyun.com/ubuntu bionic/main amd64 Packages
4.4 查看文件的依赖 1 2 3 4 5 6 7 apt depends PACKAGE apt-cache depends PACKAGE apt rdepends PACKAGE apt-cache rdepends PACKAGE