linux cpu占用率如何看
266
2022-11-07
程序包管理(一)
ABI
ABI即 Application Binary Interface #Windows与Linux不兼容 ELF(Executable and Linkable Format) PE(Portable Executable) #库级别的虚拟化: Linux: WINE Windows: Cygwin
API
API即Application Programming Interface,API可以在各种不同的操作系统上实现给应用程序提供完全 相同的接口,而它们本身在这些系统上的实现却可能迥异,主流的操作系统有两种,一种是Windows系 统,另一种是Linux系统。由于操作系统的不同,API又分为Windows API和Linux API。在Windows平 台开发出来的软件在Linux上无法运行,在Linux上开发的软件在Windows上又无法运行,这就导致了软 件移植困难,POSIX 标准的出现就是为了解决这个问题 POSIX:Portable Operating System Interface 可移植操作系统接口,定义了操作系统应该为应用程序 提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称。 Linux和windows都要实现基本的posix标准,程序就在源代码级别可移植了
# 1 ABI接口 不同的系统的ABI接口不一样,接口标准,Windows的ABI接口和linux的就不一样,接口就相当于电源的插座,就比如香港的插座的插口就不一样了, posix国际标准,windows的调用的库和linux的库都可以使用,C语言和linux是天生一对。很多的软件都是C写的, API即应用程序的开发接口,程序员写的代码要调用别人的库 deb 是Ubuntu的安装包 rpm( 红帽的)是centos的安装包 x8646: 64位 i686: 32位 noarch:无位数 windows : Program File 32位 Program File(X86) 64位 二进制的可以直接使用,如果是源代码就要自己编译安装,编译安装的过程 API接口 应用编程接口 ABI应用程序的二进制接口,基于二进制程序,windows有windows ABI接口,linux有linux的ABI接口,网上下载的软件有自己的安装版本 相同的API可以跨操作系统,只有相同的ABI才能真正的运行程序 主要遵循posix规范 api兼容,那么源代码可以在系统平台上进行编译 系统调用 库调用 apm 程序包管理器,作用是管理linux的二进制程序的组合包 apm 程序包之间很有可能就有依赖关系, yum dnf 升级版程序包管理 源代码编译安装,而不用程序包管理器, 程序源代码-->预处理--->编译---->汇编 Linux常见软件包分为两种, 源代码包(Source Code)是没有经过编译的包,需要经过GCC、C++编译 器环境编译才能运行 二进制包(Binary Code)二进制包无需编译,可以直接安装使用。 Windows有自己的ABI接口,linux 有自己的ABI接口 [root@localhost ~]# file /bin/ls /bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=bed150f5bac8514e69b3b98eb6fd3e75d6b277c8, stripped, too many notes (256) ls 命令就是基于ELF格式 例如:windows的可执行文件放在linux下无法运行,因为ABI的标准不一样,导致不兼容。用虚拟化的技术就可以, 程序员整合别人的库,但是我们是直接用的别人的,比如说一些加密技术都要数学,程序员调用第三方的库文件 linux内核
C**语言程序的实现过程**
#预处理(Pre-Processing) 1)将所有的#define删除,并且展开所有的宏定义 2)处理所有的条件预编译指令,比如#if #ifdef #elif #else #endif等 3)处理#include 预编译指令,将被包含的文件插入到该预编译指令的位置。 4)删除所有注释 “//”和”/* */”. 5)添加行号和文件标识,以便编译时产生调试用的行号及编译错误警告行号。 6)保留所有的#pragma编译器指令,因为编译器需要使用它们 #编译 (Compiling) 编译过程就是把预处理完的文件进行一系列的词法分析,语法分析,语义分析及优化后,最后生成 相应的汇编代码 #汇编 (Assembling) 汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令。汇编 相对于编译过程比较简单,根据汇编指令和机器指令的对照表一一翻译即可 #链接 (Linking) 通过调用链接器ld来链接程序运行需要的一大堆目标文件,以及所依赖的其它库文件,最后生成可 执行文件
查看linux的内核文件有多少行
[root@centos8 linux-5.11.13]#find -name ".c" |xargs cat |wc -l 20413035 [root@centos8 linux-5.11.13]#echo 20413035/100/365 |bc 559 (五百多年看完linux内核文件) [root03:09 PMcentos8 /data/linux-5.4.120]#cat `find -name "*.c" ` |wc -l 18959556 方法一 cat `find -name "*.c"` |wc -l 方法二 find -name "*.c" |xargs cat |wc -l 方法三 for file in `find -name "*.c"`;do line=`cat $file |wc -l`;let sum+=line;done;echo $sum 或者: for file in `find -name "*.c"`;do line=`cat $file |wc -l`; sum+$line;done;echo $sum
统计rpm的架构类型及相应的包数量
[root@centos8 Packages]#pwd /misc/cd/BaseOS/Packages [root@centos8 Packages]#ls *.rpm | grep -Eo '[^.]+\.rpm$'| grep -Eo '^[^.]+'|sort |uniq -c 389i686 211noarch 1061 x86_64 [root@centos8 Packages]#ls *.rpm |rev|cut -d. -f2|rev |sort |uniq -c 389i686 211noarch 1061 x86_64 [root@centos8 Packages]#ls *.rpm | grep -Eo '[^.]+\.rpm$'|cut -d. -f1|sort |uniq -c 389i686 211noarch 1061 x86_64
分类和拆包
软件包为了管理和使用的便利,会将一个大的软件分类,放在不同的子包中。
包的分类
Application-VERSION-ARCH.rpm: 主包
Application-devel-VERSION-ARCH.rpm 开发子包
Application-utils-VERSION-ARHC.rpm 其它子包
Application-libs-VERSION-ARHC.rpm 其它子包
包的依赖
软件包之间可能存在依赖关系,甚至循环依赖,即:A包依赖B包,B包依赖C包,C包依赖A包
安装软件包时,会因为缺少依赖的包,而导致安装包失败。
解决依赖包管理工具:
yum:rpm包管理器的前端工具dnf:Fedora 18+ rpm包管理器前端管理工具,CentOS 8 版代替 yumapt:deb包管理器前端工具zypper:suse上的rpm前端管理工具
程序包管理器相关文件
1.包文件组成 (每个包独有)
包内的文件
元数据,如:包的名称,版本,依赖性,描述等
可能会有包安装或卸载时运行的脚本
数据库(公共):/var/lib/rpm 程序包名称及版本 依赖关系 功能说明 包安装后生成的各文件路径及校验码信息
获取程序包的途径
软件包需要事先将源码进行编译后打包形成,获取包的途径如下:
2.1.7.1 系统发版的光盘或官方网站
CentOS镜像:
Ubuntu 镜像:
查看一个可执行文件所依赖的库
[root03:19 PMcentos8 /data/linux-5.4.120]#ldd /bin/cat linux-vdso.so.1 (0x00007fff511aa000) libc.so.6 => /lib64/libc.so.6 (0x00007f4f9f89d000) /lib64/ld-linux-x86-64.so.2 (0x00007f4f9fe68000) [root03:19 PMcentos8 /data/linux-5.4.120]#ldd /bin/ls linux-vdso.so.1 (0x00007fffc7bf2000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007ff3cc04c000) libcap.so.2 => /lib64/libcap.so.2 (0x00007ff3cbe46000) libc.so.6 => /lib64/libc.so.6 (0x00007ff3cba84000) libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007ff3cb800000) libdl.so.2 => /lib64/libdl.so.2 (0x00007ff3cb5fc000) /lib64/ld-linux-x86-64.so.2 (0x00007ff3cc49a000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff3cb3dc000) [root03:19 PMcentos8 /data/linux-5.4.120]#
故障:移动库文件
/lib64/libc.so.6 /data
root03:26 PMcentos8 /data/linux-5.4.120]#ldd /bin/ls linux-vdso.so.1 (0x00007ffd6adce000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f805f154000) libcap.so.2 => /lib64/libcap.so.2 (0x00007f805ef4e000) libc.so.6 => /lib64/libc.so.6 (0x00007f805eb8c000) libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007f805e908000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f805e704000) /lib64/ld-linux-x86-64.so.2 (0x00007f805f5a2000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f805e4e4000) [root03:26 PMcentos8 /data/linux-5.4.120]#mv /lib64/libc.so.6 /data [root03:27 PMcentos8 /data/linux-5.4.120]#ls ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory [root03:27 PMcentos8 /data/linux-5.4.120]#
问题:删除库 /lib64/libc.so.6 以后怎么解决
程序包管理器
主流的程序包管理器
redhat:rpm文件, rpm 包管理器,rpm:Redhat Package Manager,RPM Package Manager debian:deb文件, dpkg 包管理器
rpm2cpio 命令
[root06:07 PMcentos8 /misc/cd/BaseOS/Packages]#cp bash-4.4.19-10.el8.x86_64.rpm /data/ [root06:07 PMcentos8 /misc/cd/BaseOS/Packages]#cd /data [root06:07 PMcentos8 /data]#ls bash-4.4.19-10.el8.x86_64.rpm 将rpm文件转化为 cpio格式,然后解开里面的文件 -v 显示过程 -t 预览 [root06:08 PMcentos8 /data]#rpm2cpio bash-4.4.19-10.el8.x86_64.rpm |cpio -id 13573 blocks [root06:09 PMcentos8 /data]#ls bash-4.4.19-10.el8.x86_64.rpm etc usr
常见的arch:
x86: i386, i486, i586, i686 x86_64: x64, x86_64, amd64 powerpc: ppc 跟平台无关:noarch
bash-3.2-32.el5_9.1.i386.rpm bash-4.2.46-19.el7.x86_64.rpm bash-4.4.19-7.el8.x86_64.rpm bash-4.4.19-7.el8.aarch64.rpm bash-4.4.19-7.el8.ppc64le.rpm bc_1.07.1-2_amd64.deb bc_1.07.1-2_s390x.deb
查找rpm包支持的架构
[root@localhost dev]# lsblk [root@localhost dev]# mount /dev/sr0 /mnt mount: /mnt: WARNING: device write-protected, mounted read-only. [root@localhost dev]# cd /mnt [root@localhost mnt]# ls AppStream BaseOS EFI images isolinux media.repo TRANS.TBL [root@localhost mnt]# du -sh * 6.1G AppStream 1014M BaseOS 9.5M EFI 613M images 72M isolinux 512 media.repo 1.0K TRANS.TBL libmicro yum-utils-4.0.12-3.el8.noarch.rpm libmnl-1.0.4-6.el8.i686.rpm zip-3.0-23.el8.x86_64.rpm libmnl-1.0.4-6.el8.x86_64.rpm zlib-1.2.11-13.el8.i686.rpm libmodman-2.0.1-17.el8.i686.rpm zlib-1.2.11-13.el8.x86_64.rpm libmodman-2.0.1-17.el8.x86_64.rpm zlib-devel-1.2.11-13.el8.i686.rpm libmodulemd1-1.8.16-0.2.8.2.1.i686.rpm zlib-devel-1.2.11-13.el8.x86_64.rpm libmodulemd1-1.8.16-0.2.8.2.1.x86_64.rpm zsh-5.5.1-6.el8_1.2.x86_64.rpm libmodulemd-2.8.2-1.el8.i686.rpm 从后往前操作: [root@localhost mnt]# find -name "*.rpm" |sed -En 's#.*\.([^.]+)\.rpm#\1#p'|sort |uniq -c 1288 i686 2168 noarch 3544 x86_64 [root@localhost Packages]# pwd /mnt/BaseOS/Packages 或者锚点词尾加$: [root@localhost Packages]# find -name "*.rpm" |sed -En 's#.*\.([^.]+)\.rpm$#\1#p'|sort |uniq -c 393 i686 215 noarch 1066 x86_64 .*表示任意内容 方法二: 挂载光盘 mount /dev/sr0 /mnt [root@localhost Packages]# pwd /mnt/BaseOS/Packages [root@localhost Packages]# ls *.rpm |rev |cut -d. -f2 |rev |sort |uniq -c 393 i686 215 noarch 1066 x86_64 方法三: [root@localhost Packages]# ls *.rpm |grep -Eo [^.]+\.rpm$|cut -d. -f1 |sort |uniq -c 393 i686 215 noarch 1066 x86_64 以rpm结尾是因为 [root@localhost Packages]# ls *.rpm |grep python3-rpm python3-rpm-4.14.2-37.el8.x86_64.rpm
解决依赖包管理工具:
yum:rpm包管理器的前端工具 dnf:Fedora 18+ rpm包管理器前端管理工具,CentOS 8 版代替 yum apt:deb包管理器前端工具 zypper:suse上的rpm前端管理工具
程序包管理器相关文件
1. 包文件组成 (每个包独有) 包内的文件 元数据,如:包的名称,版本,依赖性,描述等 可能会有包安装或卸载时运行的脚本 2. 数据库(公共):/var/lib/rpm 程序包名称及版本 依赖关系 功能说明 包安装后生成的各文件路径及校验码信息
/var/lib/rpm 主要文件
通过这个数据库是可以查询到文件属性的,不要移动,动了啥也做不了 #公共数据库,记载各个RPM包安装完了的公共数据库 #rpm包安装完成以后,各种文件的的信息会存在这个库里面 ,安装的软件都会查找这个库,这个库删除以后将无法安装软件包 [root@centos8 Packages]#ls /var/lib/rpm Basenames __db.002 Enhancename Installtid Packages Requirename Suggestname Triggername Conflictname __db.003 Filetriggername Name Providename Sha1header Supplementname __db.001 Dirnames Group Obsoletename Recommendname Sigmd5 Transfiletriggername https://mirrors.aliyun.com/ #包的版本:主版本号 次版本号 最小的版本号 rpm包安装时生成的信息,都放在rpm数据库中 可以重建数据库 rpm {--initdb|--rebuilddb} initdb: 初始化,如果事先不存在数据库,则新建之,否则,不执行任何操作 rebuilddb:重建已安装的包头的数据库索引目录 [root05:29 PMcentos7 /var/lib/rpm]#pwd /var/lib/rpm [root05:29 PMcentos7 /var/lib/rpm]#ll total 55840 -rw-r--r--. 1 root root 1409024 Jun 5 12:55 Basenames -rw-r--r--. 1 root root 8192 Jun 2 09:38 Conflictname -rw-r--r--. 1 root root 270336 Jun 5 17:10 __db.001 -rw-r--r--. 1 root root 81920 Jun 5 17:10 __db.002 -rw-r--r--. 1 root root 1318912 Jun 5 17:10 __db.003 -rw-r--r--. 1 root root 446464 Jun 5 12:55 Dirnames -rw-r--r--. 1 root root 8192 Jun 5 12:55 Group -rw-r--r--. 1 root root 12288 Jun 5 12:55 Installtid -rw-r--r--. 1 root root 24576 Jun 5 12:55 Name -rw-r--r--. 1 root root 16384 Jun 2 09:38 Obsoletename -rw-r--r--. 1 root root 51511296 Jun 5 12:55 Packages -rw-r--r--. 1 root root 1978368 Jun 5 12:55 Providename -rw-r--r--. 1 root root 143360 Jun 5 12:55 Requirename -rw-r--r--. 1 root root 40960 Jun 5 12:55 Sha1header -rw-r--r--. 1 root root 24576 Jun 5 12:55 Sigmd5 -rw-r--r--. 1 root root 8192 Jun 2 09:38 Triggername
获取程序包的途径
CentOS镜像:
Ubuntu 镜像:
389 i686
211 noarch
1061 x86_64
第三方组织提供
Fedora-EPEL:Extra Packages for Enterprise Linux
Rpmforge:官网:RHEL推荐,包很全,即将关闭
Community Enterprise Linux Repository:软件项目官方站点
2.1.7.4 搜索引擎
自己制作
将源码文件,利用工具,如:rpmbuild,fpm等工具制作成rpm包文件注意:第三方包建议要检查其合法性,来源合法性,程序包的完整性
包管理器**rpm**
安装
rpm {-i|--install} [install-options] PACKAGE_FILE…
-v: verbose -vv: -h: 以#显示程序包管理执行进度 rpm -ivh PACKAGE_FILE ... --test: 测试安装,但不真正执行安装,即dry run模式 --nodeps:忽略依赖关系 --replacepkgs | replacefiles --nosignature: 不检查来源合法性 --nodigest:不检查包完整性 --noscripts:不执行程序包脚本 %pre: 安装前脚本 --nopre %post: 安装后脚本 --nopost %preun: 卸载前脚本 --nopreun %postun: 卸载后脚本 --nopostun
升级和降级
rpm {-U|--upgrade} [install-options] PACKAGE_FILE... rpm {-F|--freshen} [install-options] PACKAGE_FILE...
upgrade:安装有旧版程序包,则“升级”,如果不存在旧版程序包,则“安装”
freshen:安装有旧版程序包,则“升级”, 如果不存在旧版程序包,则不执行升级操作
--oldpackage:降级
--force: 强制安装
rpm -Uvh PACKAGE_FILE ... rpm -Fvh PACKAGE_FILE ..
升级注意项:
(1) 不要对内核做升级操作;Linux支持多内核版本并存,因此直接安装新版本内核
(2) 如果原程序包的配置文件安装后曾被修改,升级时,新版本提供的同一个配置文件不会直接覆盖老
版本的配置文件,而把新版本文件重命名(FILENAME.rpmnew)后保留
包查询
rpm {-q|--query} [select-options] [query-options] [select-options] -a:所有包 rpm -qa |grep " 或者 rpm -qa "*httpd*" -f:查看指定的文件由哪个程序包安装生成 -p rpmfile:针对尚未安装的程序包文件做查询操作 [query-options] --changelog:查询rpm包的changelog -c:查询程序的配置文件 -d:查询程序的文档 -i:information -l:查看指定的程序包安装后生成的所有文件 --scripts:程序包自带的脚本 #和CAPABILITY相关 --whatprovides CAPABILITY:查询指定的CAPABILITY由哪个包所提供 --whatrequires CAPABILITY:查询指定的CAPABILITY被哪个包所依赖 --provides:列出指定程序包所提供的CAPABILITY -R:查询指定的程序包所依赖的CAPABILITY -qa -q PACKAGE -qi PACKAGE -qc PACKAGE -ql PACKAGE -qd PACKAGE -q --scripts PACKAGE -qf FILE -qpi PACKAGE_FILE rpm -qpi #文件的路径名,查询安装前的信息 -qpl PACKAGE_FILE, ... #安装将生成哪些文件
包卸载
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME ...
注意:当包卸载时,对应的配置文件不会删除, 以FILENAME.rpmsave形式保留
范例:强行删除rpm包,并恢复
[root@centos7 ~]#rpm -e rpm --nodeps #重启进入rescue模式 #mkdir /mnt/cdrom #mount /dev/sr0 /mnt/cdrom #rpm -ivh /mnt/cdrom/Packages/rpm-4.11.3-40.el7.x86_64.rpm --root=/mnt/sysimage #reboot
rpm 命令(redhat package manager)
[13:54:21root@localhost ~]#rpm -q yum
yum-3.4.3-132.el7.centos.0.1.noarch
[13:54:30root@localhost ~]#rpm -qc yum
/etc/logrotate.d/yum
/etc/yum.conf #为所有仓库提供公共配置
#(主配置文件包含/etc/yum.repos.d/*repo 结尾的文件,切割为多个,便于管理)
/etc/yum/version-groups.conf
RPM 包的命名格式
name-VERSION-arch.rpm
-ivh 安装
--nodeps 忽略依赖
--replacepkgs 重新安装程序包
-q 查询
-qa 查询所有安装的程序包
-qf 查询某个文件由那个程序包安装生成
-ql 查看包里面的安装文件列表
-qi 查询某个程序包的安装信息,此包必须是已经安装的
-qd 查询某个程序包的帮助文档
-qc 查询某个程序包的配置文件
-q --scripts 查询脚本
-q --changlog 查询更新日志
-q --provides
-q --requires
-e 卸载程序包
--nodeps 忽略依赖
——Uvh 升级或安装程序包
-Fvh 只能升级
--oldpackage 降级
-qR 离开了哪些文件我玩不了
[root@centos7 yum.repos.d]# rpm -qR tree
-V 校验哪里发生变化了
[root@centos8 cd]#rpm -V tree
.......T. /usr/bin/tree 时间发生变化
[root@centos8 cd]#ll /usr/bin/tree
-rwxr-xr-x 1 root root 83544 Apr 12 21:24 /usr/bin/tree
[root@centos8 cd]#chgrp bin $_
[root@centos8 cd]#ll /usr/bin/tree
-rwxr-xr-x 1 root bin 83544 Apr 12 21:24 /usr/bin/tree
[root@centos8 cd]#rpm -V tree 属组发生变化
......GT. /usr/bin/tree
[root@centos8 Packages]#rpm -q --whatrequires /bin/bash
哪些包的安装需要 /bin/bash 这个包
[root@centos8 Packages]#rpm -qR tree (tree这个文件依赖哪些)
libc.so.6()(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsXz) <= 5.2-1
rtld(GNU_HASH)
--scripts
安装httpd这个包时候所执行的脚本
[root@centos8 data]#rpm -q --scripts httpd
#安装vsftpd
[root@centos8 cd]#find -name "vsf*"
./AppStream/Packages/vsftpd-3.0.3-31.el8.x86_64.rpm
[root@centos8 cd]#rpm -ivh AppStream/Packages/vsftpd-3.0.3-31.el8.x86_64.rpm
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:vsftpd-3.0.3-31.el8 ################################# [100%]
[root@centos8 cd]#rpm -q vsftpd
vsftpd-3.0.3-31.el8.x86_64
#卸载
[root@centos8 cd]#rpm -e vsftpd
[root@centos8 cd]#rpm -q vsftpd
package vsftpd is not installed
#查看安装这个包以后的信息
[root@centos8 cd]#rpm -qi vsftpd
Name : vsftpd
Version : 3.0.3
Release : 31.el8
Architecture: x86_64
Install Date: Mon 12 Apr 2021 09:00:14 PM CST
Group : System Environment/Daemons
Size : 351645
License : GPLv2 with exceptions
Signature : RSA/SHA256, Sun 26 Apr 2020 11:08:52 AM CST, Key ID 05b555b38483c65d
Source RPM : vsftpd-3.0.3-31.el8.src.rpm
Build Date : Fri 24 Apr 2020 11:01:34 AM CST
Build Host : x86-02.mbox.centos.org
Relocations : (not relocatable)
Packager : CentOS Buildsys
rpm2cpio
#挂载光盘以后预览yum-utils-4.0.12-3.el8.noarch.rpm这个包的所有文件 -tv :预览 [root@centos8 Packages]#pwd /msic/cd/BaseOS/Packages [root@centos8 Packages]#rpm2cpio yum-utils-4.0.12-3.el8.noarch.rpm |cpio -tv lrwxrwxrwx 1 root root 22 Apr 25 2020 ./usr/bin/debuginfo-install -> /usr/libexec/dnf-utils lrwxrwxrwx 1 root root 22 Apr 25 2020 ./usr/bin/find-repos-of-install -> /usr/libexec/dnf-utils lrwxrwxrwx 1 root root 22 Apr 25 2020 ./usr/bin/needs-restarting -> /usr/libexec/dnf-utils lrwxrwxrwx 1 root root 22 Apr 25 2020 ./usr/bin/package-cleanup -> /usr/libexec/dnf-utils lrwxrwxrwx 1 root root 22 Apr 25 2020 ./usr/bin/repo-graph -> /usr/libexec/dnf-utils #rpm2cpio yum-utils-4.0.12-3.el8.noarch.rpm |cpio -idv 解开这个包到当前文件
包的校验
[root@centos8 ~]#ll /etc/pki/rpm-gpg/
total 8
-rw-r--r--. 1 root root 1683 Jun 3 2020 RPM-GPG-KEY-centosofficial
-rw-r--r--. 1 root root 1687 Jun 3 2020 RPM-GPG-KEY-centostesting
[root@localhost Packages]# ll /etc/pki/rpm-gpg/
total 20
-rw-r--r--. 1 root root 1690 Dec 9 2015 RPM-GPG-KEY-CentOS-7
-rw-r--r--. 1 root root 1004 Dec 9 2015 RPM-GPG-KEY-CentOS-Debug-7
-rw-r--r--. 1 root root 1690 Dec 9 2015 RPM-GPG-KEY-CentOS-Testing-7
-rw-r--r-- 1 root root 1722 May 21 2014 RPM-GPG-KEY-elrepo.org
-rw-r--r-- 1 root root 1662 Sep 5 01:37 RPM-GPG-KEY-EPEL-7
[root@localhost Packages]#
[root@centos8 ~]#cat /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.22 (GNU/Linux)
mQINBFzMWxkBEADHrskpBgN9OphmhRkc7P/YrsAGSvvl7kfu+e9KAaU6f5MeAVyn
rIoM43syyGkgFyWgjZM8/rur7EMPY2yt+2q/1ZfLVCRn9856JqTIq0XRpDUe4nKQ
8BlA7wDVZoSDxUZkSuTIyExbDf0cpw89Tcf62Mxmi8jh74vRlPy1PgjWL5494b3X
5fxDidH4bqPZyxTBqPrUFuo+EfUVEqiGF94Ppq6ZUvrBGOVo1V1+Ifm9CGEK597c
aevcGc1RFlgxIgN84UpuDjPR9/zSndwJ7XsXYvZ6HXcKGagRKsfYDWGPkA5cOL/e
f+yObOnC43yPUvpggQ4KaNJ6+SMTZOKikM8yciyBwLqwrjo8FlJgkv8Vfag/2UR7
JINbyqHHoLUhQ2m6HXSwK4YjtwidF9EUkaBZWrrskYR3IRZLXlWqeOi/+ezYOW0m
vufrkcvsh+TKlVVnuwmEPjJ8mwUSpsLdfPJo1DHsd8FS03SCKPaXFdD7ePfEjiYk
nHpQaKE01aWVSLUiygn7F7rYemGqV9Vt7tBw5pz0vqSC72a5E3zFzIIuHx6aANry
Gat3aqU3qtBXOrA/dPkX9cWE+UR5wo/A2UdKJZLlGhM2WRJ3ltmGT48V9CeS6N9Y
m4CKdzvg7EWjlTlFrd/8WJ2KoqOE9leDPeXRPncubJfJ6LLIHyG09h9kKQARAQAB
tDpDZW50T1MgKENlbnRPUyBPZmZpY2lhbCBTaWduaW5nIEtleSkgPHNlY3VyaXR5
#导入公钥:
[root@centos8 ~]#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
#查看公钥的信息
[root@centos8 ~]#rpm -qa "gpg-pubkey"
gpg-pubkey-8483c65d-5ccc5b19 (这一窜可以用 -e卸载 rpm -e gpg-pubkey-8483c65d-5ccc5b19)
[root@centos8 ~]#rpm -qi gpg-pubkey-8483c65d-5ccc5b19
Name : gpg-pubkey
Version : 8483c65d
Release : 5ccc5b19
Architecture: (none)
Install Date: Tue 23 Mar 2021 02:18:08 AM CST
Group : Public Keys
Size : 0
License : pubkey
Signature : (none)
Source RPM : (none)
Build Date : Fri 03 May 2019 11:15:37 PM CST
Build Host : localhost
Relocations : (not relocatable)
Packager : CentOS (CentOS Official Signing Key)
issue 这个包是由 别的包提供的,所以修改issue那么 就可在 -V 查找
yum和dnf
yum 的基本命令: Yum可以在线安装,而rpm需要下载后才可以安装,yum和rpm安装的都是.rpm的二进制程序包 Yum安装是单线程,不可以并行处理,但是rpm却可以 #centos8 [root@centos8 yum.repos.d]#yum repolist -v [root@centos8 yum.repos.d]#yum list 列出仓库里所有的包 [root@centos8 yum.repos.d]#yum list "cow*" 模模糊糊匹配要找的包
包卸载不干净处理情况
安装一个httpd以后在日志里面找信息 [root@centos7 yum.repos.d]# cat /var/log/yum.log [root@centos7 yum.repos.d]# yum remove httpd centos7虽然卸载了httpd,但是依赖包却没有卸载 centos8 就可以卸载以后依赖关系的也卸载 #卸载包:centos7 卸载不干净,用一下的方法解决问题 remove [root@centos7 ~]# yum remove httpd [root@centos7 ~]# yum history 查看历史 [root@centos7 ~]# yum history info 18 查看编号为18的做了什么 [root@centos7 ~]# yum history undo 18 撤销 [root@centos7 ~]# yum history redo 18 重做
-q 静默模式 能够安装 nginx 说明yum源没有问题 移除包:-y remove [root@wanghua backup]# yum -y remove nginx 更新安装包 -y update yum check-update 检查更新 查看程序包安装信息 yum info 相当于 rpm -qi yum provides 相当于rpm -qf [root@wanghua backup]# yum provides gcc 模糊搜索:yum serach 程序包组 [root@wanghua backup]# yum groups list [root@wanghua backup]# yum groups info "开发工具"
源代码程序:基于程序调用或库调用,使用高级语言,以文本的形式写出来,源代码程序都是兼容的API,在任何操作系统上进行编译 二进制程序:已编译完成,可以直接运行在操作系统之上的二进制程序语音的程序,一般不能跨操作系统
yum主配置文件yum.conf
yum的命令行选项 --nogpgcheck 禁止进行gpg check 优先级高于文本配置文件里写的 -q 静默模式 yum 的repo 配置文件可用的变量 $releasever 当前OS发布的主版本号,可执行yum whatprovides 'system-release(releasever)' centos-release或yum version查看 $arch 平台 $basearch 基础平台 $YUM0-$YUM9 $infra 其值可查看文件/etc/yum/vars/infra,此参数目前尚未使用。 CentOS 7,$releasever值为7,$basearch值为x86_64,$infra值为stock,替换后extras mirrorlist的值为: http://mirrorlist.centos.org/release=7&arch=x86_64&repo=extras&infra=stock http://mirrors.wanghua.com/centos/$releasever/$basearch/os Yum配置文件/etc/yum.conf,可使用man yum.conf查看各配置项的意义。 # 定义全局配置选项 [main] # yum缓存目录 cachedir=/var/cache/yum/$basearch/$releasever # 1或0,安装成功后是否保存header和package keepcache=0 # debug message输出级别,0 - 10 debuglevel=2 logfile=/var/log/yum.log exactarch=1 obsoletes=1 # 1或0,是否执行gpg签名检查 gpgcheck=1 # 1或0,是否启用yum plugins plugins=1 installonly_limit=5 bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum # 指定一个包,Yum据此判断发行版本来设置配置文件中的$releasever,可执行yum whatprovides 'system-release(releasever)' centos-release或yum version查看 distroverpkg=centos-release 查看YUM的主配置文件 [root@localhost ~]# less /etc/yum.conf 内容: [main] //这个主配置文件用中括号定义的,每一个中括号中,定义了一个配置段,配置段只对某些地方代码有效,而main配置段,就叫主配置段。 cachedir=/var/cache/yum/$basearch/$releasever keepcache=0 //使用过的文件是否保存在缓存 debuglevel=2 //调试级别 logfile=/var/log/yum.log //用到的安装日志文件。 exactarch=1 //安装程序包时,是否进行精确平台匹配 obsoletes=1 gpgcheck=1 //安装包时,是否检查包的完整性跟合法性 plugins=1 //是否支持插件机制 installonly_limit=5 //同时安装几个程序包 bugtracker_url= //bug错误的追踪地址 distroverpkg=centos-release
仓库路径
yum history 撤销反撤销
yum history info
epel
[root01:34 AMcentos7 /etc/yum.repos.d]#yum list |grep epel epel-release.noarch 、 7-11 extras yum install epel-release -y
相关变量
yum的repo配置文件中可用的变量: $releasever: 当前OS的发行版的主版本号,如:8,7,6 $arch: CPU架构,如:aarch64, i586, i686,x86_64等 $basearch:系统基础平台;i386, x86_64 $contentdir:表示目录,比如:centos-8,centos-7 $YUM0-$YUM9:自定义变量
[root@centos8 ~]#yum repolist --disabled 查看禁用的仓库 [root@centos7 yum.repos.d]# yum repolist all 查看所有的源 [root@centos7 yum.repos.d]# yum repolist 禁用的源不看 #临时启用被禁用的仓库安装sl命令 [root@centos8 ~]#yum install --enablerepo sl [root@centos8 ~]#yum list --disablerepo=e* 不显示epel仓库里面的 #只显示extras仓库的包 [root@centos8 yum.repos.d]#yum list --disablerepo=* --enablerepo=extras |wc -l Repository epel is listed more than once in the configuration Repository AppStream is listed more than once in the configuration Repository extras is listed more than once in the configuration 755
临时的开启或禁用仓库,不修改文件
#以 ep开头的仓库虽然被禁用,但是在命令中开启 以A开头的仓库虽然被开启,在命令中禁用 [root@centos8 ~]#yum --enablerepo=ep* --disablerepo=A* repolist Last metadata expiration check: 0:01:18 ago on Sun 29 Dec 2019 12:13:27 AM CST. repo id repo name status BaseOS BaseOS 1,657 epel EPEL 3,733
yum-config-manager 启用和关闭yum源,修改文件
yum-utils提供该命令 yum install yum-utils -y [root@centos8 ~]#yum-config-manager --disable extras 关闭该源 [root@centos8 ~]#yum repolist BaseOS 3.8 MB/s | 3.9 kB 00:00 AppStream 4.2 MB/s | 4.3 kB 00:00 repo id repo name status AppStream AppStream 4,755 BaseOS BaseOS 1,659 [root@centos8 ~]#yum-config-manager --enable extras 启用该源 [root@centos8 ~]#yum repolist BaseOS 3.8 MB/s | 3.9 kB 00:00 AppStream 4.2 MB/s | 4.3 kB 00:00 extras 12 kB/s | 1.5 kB 00:00 repo id repo name status AppStream AppStream 4,755 BaseOS BaseOS 1,659 extras extras
显示程序包
yum list yum list [all | glob_exp1] [glob_exp2] [...] yum list {available|installed|updates} [glob_exp1] [...] [root@centos8 data]#dnf list mariadb-server Last metadata expiration check: 0:05:03 ago on Sun 08 Dec 2019 04:11:17 PM CST. Available Packages mariadb-server.x86_64 3:10.3.11-2.module_el8.0.0+35+6f2527ed AppStream [root@centos8 data]#dnf list mariadb-server --showduplicates Last metadata expiration check: 0:05:11 ago on Sun 08 Dec 2019 04:11:17 PM CST. Available Packages mariadb-server.x86_64 3:10.3.11-2.module_el8.0.0+35+6f2527ed AppStream [root@centos8 data]#dnf list mariadb-server --disablerepo=AppStream Last metadata expiration check: 0:05:23 ago on Sun 08 Dec 2019 04:11:17 PM CST. Available Packages MariaDB-server.x86_64 10.4.10-1.el8 mariadb2 [root@centos8 data]#dnf list mariadb-server --showduplicates --disablerepo=AppStream 显示多个版本的仓库 Last metadata expiration check: 0:05:41 ago on Sun 08 Dec 2019 04:11:17 PM CST. Available Packages MariaDB-server.x86_64 10.3.17-1.el8 mariadb MariaDB-server.x86_64 10.3.18-1.el8 mariadb MariaDB-server.x86_64 10.3.20-1.el8 mariadb MariaDB-server.x86_64 10.4.7-1.el8 mariadb2 MariaDB-server.x86_64 10.4.8-1.el8 mariadb2 MariaDB-server.x86_64 10.4.10-1.el8 mariadb2 [root@centos8 ~]#yum --disablerepo="A*" --disablerepo="B*" --disablerepo="e*" list available
利用elrepo源在CentOS 7 安装新版内核
https://elrepo.org/tiki/HomePage #下载包https://elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm #安装该包 [root@centos7 ~]# yum install elrepo-release-7.el7.elrepo.noarch.rpm -y #查看包里面生成了什么东西 [root@centos7 ~]# rpm -ql elrepo-release /etc/pki/elrepo /etc/pki/elrepo/SECURE-BOOT-KEY-elrepo.org.der /etc/pki/rpm-gpg /etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org /etc/yum.repos.d /etc/yum.repos.d/elrepo.repo 生成了elrepo.repo文件 #只查看elrepo的包 [root@centos7 yum.repos.d]# yum list --disablerepo=* --enablerepo=elrepo #启用kernel [root@centos7 yum.repos.d]# yum --disablerepo="*" --enablerepo="elrepo-kernel" list available Loaded plugins: fastestmirror Repository base is listed more than once in the configuration Repository updates is listed more than once in the configuration Repository extras is listed more than once in the configuration Repository centosplus is listed more than once in the configuration Repository contrib is listed more than once in the configuration Repository base is listed more than once in the configuration Loading mirror speeds from cached hostfile * elrepo-kernel: mirror-hk.koddos.net Available Packages kernel-lt.x86_64 5.4.111-1.el7.elrepo elrepo-kernel kernel-lt-devel.x86_64 5.4.111-1.el7.elrepo elrepo-kernel kernel-lt-doc.noarch 5.4.111-1.el7.elrepo elrepo-kernel kernel-lt-headers.x86_64 5.4.111-1.el7.elrepo elrepo-kernel kernel-lt-tools.x86_64 5.4.111-1.el7.elrepo elrepo-kernel kernel-lt-tools-libs.x86_64 5.4.111-1.el7.elrepo elrepo-kernel kernel-lt-tools-libs-devel.x86_64 5.4.111-1.el7.elrepo elrepo-kernel kernel-ml-devel.x86_64 5.11.13-1.el7.elrepo elrepo-kernel kernel-ml-doc.noarch 5.11.13-1.el7.elrepo elrepo-kernel kernel-ml-headers.x86_64 5.11.13-1.el7.elrepo elrepo-kernel kernel-ml-tools.x86_64 5.11.13-1.el7.elrepo elrepo-kernel #安装 kernel-ml 内核 [root@centos7 yum.repos.d]# yum --disablerepo="*" --enablerepo="elrepo-kernel" install kernel-ml #查看内核安装目录: [root@centos7 yum.repos.d]# rpm -ql kernel-ml |less #看到内核了: [root@centos7 yum.repos.d]# ls /boot/ config-3.10.0-327.el7.x86_64 initrd-plymouth.img config-5.11.13-1.el7.elrepo.x86_64 symvers-3.10.0-327.el7.x86_64.gz grub symvers-5.11.13-1.el7.elrepo.x86_64.gz grub2 System.map-3.10.0-327.el7.x86_64 initramfs-0-rescue-73130982d56a42eebae4cd3fd350eade.img System.map-5.11.13-1.el7.elrepo.x86_64 initramfs-3.10.0-327.el7.x86_64.img vmlinuz-0-rescue-73130982d56a42eebae4cd3fd350eade initramfs-3.10.0-327.el7.x86_64kdump.img vmlinuz-3.10.0-327.el7.x86_64 initramfs-5.11.13-1.el7.elrepo.x86_64.img vmlinuz-5.11.13-1.el7.elrepo.x86_64 initramfs-5.11.13-1.el7.elrepo.x86_64kdump.img
缓存清理
[root@centos7 yum.repos.d]# ls /var/cache/yum yum makecache 构建缓存 yum clean all 清空缓存 [root@centos7 yum.repos.d]# du -sh /var/cache/yum/x86_64/ yum makecache 缓存的更新
模糊的搜索
模糊搜索:yum serach
显示程序包的依赖关系
yum deplist
日志 文件:
#CentOS 7以前版本日志 /var/log/yum.log #CentOS 8 版本日志 /var/log/dnf.rpm.log /var/log/dnf.log
日志命令
yum history [info|list|packages-list|packages-info|summary|addoninfo|redo|undo|rollback|new|sync|stats] [root@centos8 ~]#dnf history [root@centos8 ~]#dnf history info 22 [root@centos8 ~]#dnf history undo 22 -y [root@centos8 ~]#dnf history redo 22 -y
救援模式安装rpm包
[root09:48 AMcentos7 ~]#rpm -e rpm --nodeps 忽略依赖关系 卸载
查看包组
[root@centos8 cd]#ll `which yum` lrwxrwxrwx. 1 root root 5 Apr 25 2020 /usr/bin/yum -> dnf-3 前端软件包管理器(Yellow Updater Modified, YUM)适用于CentOS、Fedora、RedHat及SUSE中的 Shell命令行,主要用于管理RPM包,于RPM工具使 用范围类似,YUM工具能够从指定的服务器自动下 载RPM包并且安装,还可以自动处理依赖性关系。 #工作逻辑 yum基于C/S结构,yum 安装要仓库 https://mirrors.huaweicloud.com/centos/7/os/x86_64/ https://mirrors.aliyun.com/centos/7/os/x86_64/ 这样具有通用性 https://mirrors.huaweicloud.com/centos/$releasever/os/$baserach/ [root@centos7 yum.repos.d]# yum groups list Server with GUI 图像界面安装包组 yum --disablerepo=EPEl --disablerepo=extras group install " Server with GUI" 禁用EPEl extras 以后安装 图像
包组管理
程序包组 [root@wanghua backup]# yum groups list [root@wanghua backup]# yum groups info "开发工具" yum group list [16:11:34root@localhost yum.repos.d]#yum grouplist 例如: [16:14:22root@localhost yum.repos.d]#yum groupinstall "Development Tools" groupinstall 安装包组 groupupdate grouplist groupremove groupinfo yum groupinstall "Server with GUI" centos8安装图形界面 yum groupinstall "GNOME Desktop" centos7 安装图形界面
卸载虚拟网卡
centos8 私有仓库的搭建
1 服务端:执行脚本,生成仓库
[root12:06 PMcentos8 ~]#cat 7.sh
#!/bin/bash
#
#*******************************************************************************
#Author: wangyu
#Data: 2021-06-06-02:13:04
#FileName: 6.sh
#Description: 6.sh
#Copyright (C): 2021 All rights reserved
#*******************************************************************************
#Fontcolor#red(31):green(32):yellow(33):blue(34):purple(35):cyan(36):white(37)
#Backcolor#red(41):green(42):yellow(43):blue(44):purple(45):cyan(46):white(47)
#*******************************************************************************
#
mkdir -p /etc/yum.repos.d/backups
mv /etc/yum.repos.d/* /etc/yum.repos.d/backups &>/dev/null
cat > /etc/yum.repos.d/tests.repo < 程序包编译 程序包编译安装:
源代码-->预处理-->编译-->汇编-->链接-->执行
多文件:文件中的代码之间,很可能存在跨文件依赖关系
虽然有很多开源软件将软件打成包,供人们使用,但并不是所有源代码都打成包,如果想使用开源软
件,可能需要自已下载源码,进行编译安装。另外即使提供了包,但是生产中需要用于软件的某些特
性,仍然需要自行编译安装。但是利用源代码编译安装是比较繁琐的,庆幸的是有相关的项目管理工具
可以大大减少编译过程的复杂度 第一步:运行 configure 脚本,生成Makefile 文件
第二步:make
第三步:make install 生产实践:基于最小化安装的系统建议安装下面相关包 yum 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 或
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~