1.包管理器
debian:deb文件, dpkg包管理器
redhat:rpm文件, rpm包管理器
包之间可能存在依赖关系,甚至循环依赖。解决依赖包管理工具:
yum:rpm包管理器的前端工具
管理程序包的方式:
使用包管理器:rpm
使用前端工具:yum, dnf
2.rpm包管理
CentOS系统上使用rpm命令管理程序包:
安装、卸载、升级、查询、校验、数据库维护
(1)安装
rmp
-i --instal 静默安装(默认)
-v 显示详细信息
-vv 显示更详细信息
-h 显示进度
(-ivh 包名 是最常用的安装组合)
--test 测试安装,但不真正执行安装,即dry run模式
--nodeps 忽略依赖关系
--replacepkgs 已安装过的包重装。
--replacefiles 其他已安装的RPM包的文件,与即将装的RPM中的文件冲突时,则覆盖文件并安装。
--nosignature: 不检查来源合法性
--nodigest:不检查包完整性
--noscripts:不执行程序包脚本
%pre: 安装前脚本; --nopre
%post: 安装后脚本; --nopost
%preun: 卸载前脚本; --nopreun
%postun: 卸载后脚本; --nopostun
(2)升级
-Uvh 当有旧的版本的包时,则卸载旧包再装新包,如没有旧包,直接装新包。
-Fvh 当有旧的包时,卸载旧包装新包,无旧包时,nothing
--oldpackage 降级 已有新包,装旧包。
--force 强制安装。--replacepkgs --replacefiles --oldpackage
(3)查询
-q 软件包名 查询已安装过的软件包名。
-qa 列出所有的已安装过的rpm包
-qa "name*"
-qa |grep name
-qf 查询一个文件来自于哪一个rpm包 (已安装的rpm)
-q --changelog 版本更新日志
-qc 查询软件包的配置文件(不是所有包都有配置文件)
-qd 查询软件包的帮助文档
-qi 查询软件包的详细信息
-ql 查询软件包所安装到系统当中的所有文件路径
-q --scripts 查询软件包自带的脚本
-q --provides 查询自身的功能
-qR 查询实现自身的功能需要什么能力
-qp[licd] rpm包 查看未安装的rpm包的各项信息(-p 可以查询未安装的各种信息)
(4)卸载
-e 软件名(卸载时指定软件名有两种方式,要不就只写包名字,要加后面的就要加全包括版本号修正号平台什么的。可以用-qa查出来全部的名字)
--nodeps 忽略依赖性。强制卸载
(5)校验
rpm -V|--verify 查询软件包安装之后的文件是否发生了改变
S 文件大小
M 文件权限
5 文件摘要信息(通常是MD5值)
D 设备文件的主/次设备号
L 软连接变化
U 属主
G 属组
T 文件的mTime时间
P 能力
如图,新安装一个包,查询-V没有值,我们修改一下其中的文件之后,s,5,T都发生了改变。
公钥加密:
·对称加密:加密、解密使用同一密钥
·非对称加密:密钥是成对儿的。
public key: 公钥,公开所有人
secret key: 私钥, 不能公开
公钥加密的只有私钥能解,私钥加密的只有公钥能解
验证过程:
rpm --import GPG-KEY.... 导入公钥
-qa "gpg-pubkey*" 显示所有已导入的公钥
-K rpm包 验证某rpm签名是否合法
-e gpg-pubkey.... 删除公钥
(6)将rpm转化成cpio(rpm2cpio)
当你安装了一个包之后,其中的某一个配置文件丢了,如何不全部覆盖而只恢复丢失的哪一个文件呢?
如图,我们新安装了一个叫aide的包。
查看一下其中的文件
我们将/etc/logrotate.d/aide文件删除
如果我们选择重装的话,所有文件都会被覆盖,但是我们不想其他文件被覆盖,只想找回丢失的文件。
那我们首先要找到提供这个文件的包,(就当做我们刚才不是新安装的,不知道包名),即使这个文件已经不存在了,但是仍然能够查到属于哪个包。
然后我们在光盘当中把这个包拷出来,拷到任意目录都可以。我们将它拷到/var/tmp/beifen文件夹下
拷完之后进入那个目录找到拷贝的包。
现在我们就要介绍一个命令rpm2cpio可以将rpm包转化成cpio,然后就可以使用cpio -id进行解压了。
解压之后看到三个文件夹,然后我们去里面寻找刚才被删除的那个叫aide文件
就在etc/logrotate.d下,然后我们将它拷贝到真正的包文件夹下就可以了。
我们可以回去看一下,这个文件就被拷贝回来了。
3.yum命令
YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包。
(1)配置仓库
yum repository(仓库): yum repo,存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下)。在使用yum之前需要配置yum仓库。
·yum客户端配置文件:
/etc/yum.conf:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo:为仓库的指向提供配置
·仓库指向的定义内容:[repoid]
name=
baseurl=ftp://
http://
file://
(可以写多个路径)
我们可以不要已经有的仓库,自己新建一个仓库
(如果不写name描述,则把id当成name)
查看我们写好的仓库
写的时候id尽量都写base,name可以随意写
也可以写文件路径,因为必须写绝对路径,所以会再写一个/,一共三个/。
·仓库指向的其他定义:
enabled={1|0} 仓库是否开启,1为开启,0为关闭。不写的话默认为1。
repolist 查看当前开启的仓库
(repolist all可以列出所有的仓库,包括禁用的)
gpgcheck={1|0} 是否检查公钥。1为检查,0为不检查。不写的话默认为1。
gpgkey=URL 导入公钥
enablegroups={1|0} 设置组
failovermethod={roundrobin|priority} 一个仓库可以同时写多个路径
roundrobin:意为随机挑选,默认值
priority:按顺序访问
cost= 默认为1000
·启用禁用仓库
yum-config-manager --disable “仓库名" 禁用仓库
yum-config-manager --enable “仓库名” 启用仓库
·yum的repo配置文件中可用的变量:
$releasever: 当前OS的发行版的主版本号
$arch: 平台,i386,i486,i586,x86_64等
$basearch:基础平台;i386,x86_64
$YUM0-$YUM9:自定义变量
实例:
http://server/centos/$releasever/$basearch/
http://server/centos/7/x86_64
http://server/centos/6/i384
(2)yum命令用法
yum命令的用法:
yum [options][command] [package ...]
显示仓库列表:
yum repolist [all|enabled|disabled] (列出所有的|启用的|禁用的)
显示程序包:
yum list 列出所有的包
yum list {all|available|installed|updates} [glob_exp1] [...] (所有的|有效的|已安装的|可升级的)
(3)安装升级卸载
安装程序包:
yum install package1 [package2] [...] (可以同时指定多个)
--nogpgcheck 当次安装时不检测gpgkey
-y 自动回答"yes"
yum reinstall package1 [package2] [...] (重新安装)
update package 升级
downgrade package 降级
check-updates 检查可用升级
remove|erase package 卸载
(4)其他
·查看程序包information:
yum info [...]
查看指定的特性(可以是某文件)是由哪个程序包所提供:
yum provides |whatprovides feature1 [feature2] [...]
(whatprovides "文件名" 支持通配符)
·清理本地缓存:
清除/var/cache/yum/$basearch/$releasever缓存
进入/var/cache/yum/文件夹下输入yum clean all 清除所有缓存
makecache 构建缓存
search 关键字 以指定的关键字搜索程序包名及简要信息
deplist 包名 查看指定包所依赖的capabilities
history 查看yum事务历史
info[number] 查看具体的哪一条
undo[number] 撤销、还原某一条(比如第3条是安装了5个包,你undo 3就可以卸载那5个包)
redo [number] 重做某一条(比如你使用undo将那5个包卸载了,可以使用redo3重新安装那5个包)
localinstall [install] rpm包 安装时指定为rpm包,安装过程中所依赖的包用yum的repo来装
(5)包组管理
group
grouplist 列出所有包组
groupinfo"包组名" 查看包组信息
groupinstall "包组名" 安装包组
groupremove"包组名" 只删除包组中的包,不删除依赖包(可以用yum history undo 操作数字来删除包含依赖包)
groupupdate 更新包组中的包
(6)yum的命令行选项
--nogpgcheck:禁止进行gpgcheck
-y: 自动回答为“yes”
-q:静默模式
(PS:-q -y 不能写成-qy)
--disablerepo=repoidglob(仓库号) 临时禁用此处指定的repo
--enablerepo=repoidglob 临时启用此处指定的repo
--noplugins:禁用所有插件
(7)创建yum仓库
createrepo/app/magedudvd 在/app/magedudvd/下创建 repodata 从而将指定目录创建为repo仓库。
4.程序包编译
源代码-->预处理-->编译-->汇编-->链接-->执行
(1)编译源码
用C语言写一个脚本叫hello.c:
使用gcc -o hello hello.c 将C语言转化成二进制文件
然后就可以运行啦
(2)安装源码包:
一、下载httpd最新版本的源码包,解压
网址可以在rpm -qi中找
使用rz导入Linux虚拟机中。
解压使用tar xvf
进入解压后的文件夹
源码都在server文件夹下
二、安装包组Development tools
三、查看INSTALL、README这类帮助文档
四、
安装路径设定:
--prefix=/PATH: 指定默认安装位置,默认为/usr/local/
--sysconfdir=/PATH:配置文件安装位置
./configure --prefix=/app/apache24 --sysconfdir=/etc/apache24 --enable-rewrite 将安装位置设置为/app/apache24,配置文件安装位置设置为/etc/apache24
它可能会报很多错误,它报出什么错误,我们就安装什么
使用可以search查找名称,查的时候都要在后面加上-devel
使用yum安装(不用加什么平台,它会自己选择平台)
装完之后再次执行
发现又有缺少的APR-util,于是我们再搜索(同样要加入-devel)
搜索出来再安装
重复上述步骤,报错缺什么就搜索什么就安装什么,直到安装成功。
成功之后发现多了一个Makefile文件
五、
make 编译
(必须有Mikefile文件才能使用make命令)
会发现多了很多叫.o的二进制文件
直到此时,上述所有步骤非root用户也可以执行。
从下面开始,只有root才可以执行。
输入make install命令进行安装
执行过之后,发现/app下生成了apache24文件夹,/etc下也生成了apache24文件夹
六、启动服务
查看防火墙
iptables-vnL
查看网络监听情况
netstat-ntl
发现没有80端口,需要启动服务
启动服务/app/apache24/bin/apachectl start
查看到已启动
此时就有80端口了
查询当前地址,并在浏览器中访问
我们发现能ping通,但是无法访问。说明防火墙把80端口阻挡了。所以我们要关闭防火墙。
关闭防火墙
·CentOS7
systemctl is-active firewalld.service 查看当前是否开启
systemctl stop firewalld.service 关闭防火墙(只在当前生效)
systemctl is-enabled firewalld.service 查看系统下次启动时是否会开启
systemctl disable firewalld.service 关闭系统启动时开启功能(下次系统启动时就不会自动开启防火墙了)
·CentOS6
service iptables stop 关闭防火墙(只在当前生效)
chkconfig iptables off 关闭系统启动时开启功能(下次系统启动时就不会自动开启防火墙了)
(所以如果是6的话,就输入以下两条命令关闭httpd的防火墙
service httpd stop
chkconfig httpd off)
发现当前防火墙确实是开启的
关闭后再查询,可以看到确实关闭了。
但是这种方式,一旦重启它又会自动激活,
发现是enabled,说明下次启动时仍然会自动开启。
于是我们使用disable命令,然后再查询,可以看到,为disabled,说明下次启动时也不会自动开启了。
这样防火墙就算完全关闭成功了。
此时我们发现可以刷新出来了,但是又有一个问题
它的路径跟我们设置好的/app/apache24不一样
这个index.html就是网站的文件
它的内容应该是It works!
所以可以得出结论,现在运行的不是刚才装上的那个apache。
我们使用-qa可以发现,我们已经有一个用rpm安装的httpd(使用rpm安装启动方式是systemctl或者service),因此我们需要先把它停掉,使用systemctl stop关闭
停掉之后刷新网页
发现确实没有显示了。
然后我们将之前那个httpd卸载掉
此时就再也无法启动那个httpd了。
很好,那么现在就剩下我们刚才用源码安装的httpd了。
还记得之前读INSTALL文件时,它告诉你,启动的文件在PREFIX/bin/apachectl 中,其中的PREFIX就是我们定义的/app/apache24
现在我们输入启动命令
在输入启动命令之前之后分别查看一下端口
发现有80端口了!
此时,再去刷新一下网页
成功显示了。开启成功了!
同理,想关闭的话,将start改成stop即可。
七、设置PATH及man路径
如果想正常使用man,需要修改文件
编辑/etc/man_db.conf文件
加上MANDATORY_MANPATH /app/apache24/man这句话
就可以正常使用man了。
还有一点,我们想使用apache的时候,每次都要敲很长的一串路径,很不够方便,我们想改成直接可以敲apache就可以使用的。于是我们将路径加到PATH中:
exportPATH=$PATH:/app/apache24/bin/
这样就可以不输入路径直接使用了。
到此为止,我们所有的安装和配置就全部完成啦。