0x01 软件包分类
源码包
开放的源程序,程序就是源码。
- 优点:
- 开源,可以直接看大佬的源码直接学习,自己有能力也可以修改
- 可以自由的选择所需的功能
- 软件是编译安装,所以更加适合自己的系统,更加稳定,效率也更高
- 卸载方便
- 缺点:
- 安装步骤较多,尤其是安装较大的软件集合时(如LAMP环境搭建),容易拼写错误
- 编译时间过长,安装比二进制安装较长
- 因为是编译安装,安装过程一旦报错新手就很难解决
- 优点:
二进制包
Windows的EXE和Linux的rpm就是二进制包。
二进制包还要细分为
- DPKG包:dpkg主要再debian和ubuntu
- RPM包 : 主要用于 Fedora ,Centos,SuSE等
优点:
- 包管理系统简单,指通过几个命令就可以实现包的安装,升级,查询,和卸载
- 安装速度比源码安装快很多
缺点:
- 经过编译,不再可以看到源代码
- 功能选择不如源码包灵活
- 依赖性: 有时候我们安装A包时需要先安装B和C环境包同时B又需要D和E环境包。
- RPM依赖包有时候 没有
*.os.2
环境,而且这个包本机没有得手动安装。这个可以再http://www.rpmfind.net/找到相对应的包环境
- RPM依赖包有时候 没有
补充(yum并不是软件包,只是一种在线安装工具。不属于安装包)
0x02 rpm 安装
0x021 rpm包命名规则
openssl-devel-1.0.2k-16.el7_6.1.x86_64.rpm
- 软件包名 : openssl-devel
- 版本 : 1.0.2k
- 发布次数 : 16
- 软件发行商: e17 是 适合再RHEL 7.x/CentOS 7.x 使用
- 适合硬件环境 : x86_64 注意如果这里是noarch则是全平台通用
- 扩展名: rpm
操作包命和全名:
只有安装的时候才使用包全名而且需要绝对路径
如果操作的是已经安装的软件包,使用包命即可,系统产生的RPM包数据库在(/var/lib/rpm)
0x022 rpm包手工命令安装
0x0221 RPM包默认安装路径
路径 | 类型 |
---|---|
/etc/ | 配置文件安装目录 |
/usr/bin | 可执行的命令安装目录 |
/usr/lib | 程序所使用的函数库保存位置 |
/usr/share/doc/ | 基本的软件使用手册保存位置 |
/usr/share/man | 帮助文件保存位置 |
0x0222 安装命令
rpm -ivh 包全名
#注意 一是包全名。 如果跟包全名的命令要注意路径
-i : install 安装
-v : verbose 显示详细信息
-h : hash 显示安装进度
-U :upgrade升级安装,系统中没有就会安装,系统中有低版本就会升级
-F : freshen升级安装,只有有低版本才会升级
-e : 卸载
##查询
-q 包命 : 查询软件是否安装
-qa : 查询系统中所有rpm包
-qi : 查询安装的软件信息
-qip : 查询没有安装的软件包 package(p)
-ql : 查询已经安装的软件包中的文件列表和完整的安装目录 list(l)
-qlp : 查询未安装的软件包和打算安装的目录
-qf 系统文件名 : 查询系统属于哪个文件包(file)
-V 已安装的包命 : 校验本机已经安装的软件包
-Vf 系统文件名 : 校验某个系统文件是否被修改 #这个会显示修改参数
- –prefix 指定安装路径。为安装软件指定安装路径,而不是使用默认安装路径。注意:如果指定了安装路径,软件没有安装到系统中的默认路径的画,系统会找不到这些安装软件,需要进行手工配置才能被识别。所以我们使用rpm安装都会使用默认路径。RPM卸载的时候如果不是默认路径RPM卸载会找不到文件路径
- –nodeps 不检测依赖性安装。软件时会检测依赖性,确定所需的环境软件是否安装。如果没有安装就会报错。如果不管依赖性可以使用这个选项。注意:大部分软件没有环境包是跑不起来的,所以不建议使用
- –replacefiles 替换文件安装。。如果安装软件包,可是包中的部分文件已存在,那么正常安装时候,会报错,“某个文件已经存在”从而导致无法安装这个指令可以忽略报错,而覆盖安装
- –replacepkgs 替换安装包,如果软件已经安装过了,可以重新再装一次
- –force 强制安装,不管有没有安装软件包,都需要重新安装。就是–replacefiles和–replacepkgs的综合
- –test 测试安装。不会实际安装,只是检测一下依赖性
0x0223 RPM安装Apache
安装HTTPD就是apache
- 启动:
- service httpd restart
- /etc/rc.d/init.d/httpd start/restart/stop //标准是这个
- 网页位置
- /var/www/html
- 配置文件
- /etc/httpd/conf/httpd.conf
0x0224 RPM校验
[root@localhost Packages]# rpm -V 已安装的包名
#选项:
# -V 校验指定RPM包中的文件(verify)
[root@localhost Packages]# vim /etc/httpd/conf/httpd.conf ---> 对包的配置文件进行修改
[root@localhost Packages]# rpm -V httpd ---> 对修改后的包再次进行校验(无变化,无提示)
S.5....T. c /etc/httpd/conf/httpd.conf
最后一行有提示代表着有修改
提示代码 | 代码信息 |
---|---|
S | 文件大小改变 |
M | 文件的类型或文件的权限是否改变(rwx是否改变) |
5 | 文件的MD5是否改变 (可以堪称内容是否改变 |
D | 装置的主/次代码已经改变 |
L | Link路径已被改变 |
U | 文件的所属人已被改变 |
G | 文件的所属群组已被改变 |
T | 文件的创建时间已被改变 |
最后一个小写字母含义
提示代码 | 含义 |
---|---|
c | 配置文件(config file) |
d | 普通文件(documentation) |
g | “鬼文件”(ghost file) |
l | 授权文件(license file) |
r | 描述文件(read file) |
0x0225 数字证书
数字证书的特点:
- 首先必须找到原厂的公钥文件,然后进行安装
- 再安装RPM包是,回去提取RPM包中的证书信息,然后和本机安装的原厂证书进行严重
- 如果通过验证,运行安装,不通过验证,不允许安装并警告。
数字证书位置:
- 光盘里
- 系统的
/etc/pki/rpm-gpg/
里
rpm --import xxxx证书
rpm导入证书
0x0226 RPM 包文件提取
如果配置文件被删除 但还有RPM包可以从包里面提取
rpm2cpio 包全名 | cpio -idv 文件的绝对路径
#这里一定要加文件的绝对路径不然会直接解压到默认安装目录,甚至覆盖已经安装的文件
0x023 rpm在线安装(yum安装)
yum源配置文件保存在/etc/yum.repos.d/目录中,文件的扩展名一定是”.repo”也就是说yum源配置文件只要扩展名是”.repo”就会生效
系统中没有Yum包仅仅只是rpm包的在线安装
因为常常有5个yum,这里只写Base网络容器,其他容器类似
- [base]: 容器名称,一定要放在[]中
- name: 容器说明,可以随便写
- mirrorlist: 镜像站点,这个可以注释掉
- baseurl: 我们的yum源服务器的地址。默认是Centos官方的yum源服务器,是可以使用的。如果觉得慢,可以改成你喜欢的yum源地址 #注意 如果不用的一定要注释掉不然会报错
- enabled: 此容器是否生效,如过不写或者写成
enabled=1
则表示此容器生效,写成enabled=0
不生效 - gpgcheck: 如果为1则表示RPM的数字证书生效: 如果为0则表示RPM的数字证书不生效。
- gpgkey: 数字证书的公钥文件保存位置。不用修改
0x024 yum命令
查询
- 查询yum源服务器上所有可安装的软件包列表
# yum list #查询所有可用软件包列表 Installed Package #已经安装的软件包 GeoIP.x86_64 1.5.0-14.el7 @base NetworkManager.x86_64 1:1.18.0-5.el7_7.1 @updates NetworkManager-libnm.x86_64 1:1.18.0-5.el7_7.1 @updates NetworkManager-team.x86_64 1:1.18.0-5.el7_7.1 @updates NetworkManager-tui.x86_64 1:1.18.0-5.el7_7.1 @updates NetworkManager-wifi.x86_64 1:1.18.0-5.el7_7.1 @updates acl.x86_64 2.2.51-14.el7 @anaconda aic94xx-firmware.noarch 30-6.el7 @anaconda alsa-firmware.noarch 1.0.28-2.el7 @anaconda alsa-lib.x86_64 1.1.8-1.el7 @base alsa-tools-firmware.x86_64 1.1.0-1.el7 @anaconda Available Package #还可以安装的软件包 389-ds-base.x86_64 1.3.9.1-10.el7 base 389-ds-base-devel.x86_64 1.3.9.1-10.el7 base 389-ds-base-libs.x86_64 1.3.9.1-10.el7 base 389-ds-base-snmp.x86_64 1.3.9.1-10.el7 base #包命 #版本 #所在位置(yum源)
搜索yum源服务器上所有和关键字相关的软件包
# yum search 关键字 #只要是相关的都可以找到 # yum search 命令/文件 #这样可用找到命令所在的包
安装
#yum -y install 包名 #会自动安装依赖环境 # install : 安装 # -y : 只要有疑问就yes
升级
# yum -y update 包命 #不写包命会把所有包升级建议只在第一次装机升级,安装服务后别升级,如果是安全服务器有问题,单独升级某个包。
卸载
除非缺点卸载的软件的依赖包不会对系统产生影响,否则不要执行yum的卸载,因为也有可能很多软件在使用这个依赖包,导致系统崩溃
# yum remove 包名
查看可以安装的软件安装包组
# yum grouplist 列出所有可用的软件组列表
查询软件组内包含的软件
# yum gourpinfo 软件组名 例如: yum groupinfo "Web Server"
0x03 源码包安装
0x031 注意事项
选择那种软件包
- 源码包 : 如果服务是给大量客户端提供的,建议使用源码包,源码包效率更高(LAMP)
- RPM包 : 如果程序是给少量用户访问,或者本地使用的,建议RPM包,因为管理RPM包方便
源码包从哪里来
- RPM包是光盘中包含的。
- 源码包是官网提供的,需要手工下载。
是否可用在系统中使用RPM在线安装Apache后,又安装源码包的Apache
可以,因为两个安装方法的Apache,安装位置不一样
RPM包: 默认安装目录 /etc/httpd/conf/httpd.conf #默认配置文件 /var/www/html/ #默认网站位置 /var/log/httpd/ #默认日志位置 启动方法 service httpd restart 源码包: 必须制定安装位置(这个是习惯安装的位置) /usr/local/apache2/conf/httpd.conf /usr/local/apache2/htdocs/ /usr/local/apache2/logs/ /usr/local/apache2/bin/apachectl start
生产服务器上,是否同时安装两种Apache?
不会,因为系统中只有一个80端口,所以只能启动一个,装多个是浪费资源,建议源码包安装Apache.
0x32 安装过程
下载解压进入目录掠过
安装包内
./configure 编译前准备
这一步主要有三个作用:
- 在安装前检测系统环境是否符合安装要求
- 定义需要的功能选项。”./configure”支持的功能选项较多,可以执行
./configure --help
命令查询支持的功能。一般都会通过./configure --prefix=安装路径
来指定安装路径 - 把系统环境的检测结果和定义好的功能选项写入Makefile文件,后续的编译和安装需要依赖这个文件内容
需要注意的是:
configure
不是系统命令,而是源码包软件自带的一个脚本程序,所以必须采用./configure
方式执行make 编译
make会调用gcc编译器,并读取Makefile文件中的信息进行系统软件编译。编译的目的就是把源码程序转变为能被Linux识别的可执行文件,这些可执行文件保存在当前目录下。编译过程较为耗时间,需要有足够的耐心。
make clean: 清空编译内容(非必须步骤)
在
make or ./configure
编译中报错一定要执行make clean命令,他会清空Makefile文件或编译产生的”.o”头文件make install 编译安装
这才是真正的安装过程,一般会写清楚程序的安装位置,如果忘记指定安装目录,则可以把这个命令的执行过程保存下来,以备使用。
0x33 删除
源码包没有删除命令,如果需要删除,直接安装目录即可。
0x04 打补丁
0x041 补丁的生成
diff 选项 old new #比较old和new文件的不同 Old和new要写绝对路径
选项:
-a 将任何文档当作文本文档处理
-b 忽略空格造成的不同
-B 忽略空白行造成的不同
-I 忽略大小写造成的不同
-N 当比较两个目录是,如果某一个文件只有一边又,则另一个目录将视为空文件
-r 比较目录时,递归比较子目录
-U 使用同一输出格式
# patch -pn < 补丁文件 #安装补丁文件进行更新
选项
-pn n为数字,代表按照补丁文件中的路径,指定更新文件的位置
“-pn”不好理解,按照厂商手册去操作即可。