1.包管理器

debiandeb文件, dpkg包管理器

redhatrpm文件, rpm包管理器

 

包之间可能存在依赖关系,甚至循环依赖。解决依赖包管理工具:

yumrpm包管理器的前端工具

 

管理程序包的方式:

使用包管理器: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  能力

wKioL1mWzjTgd59pAABJSy1NfQ4939.png

如图,新安装一个包,查询-V没有值,我们修改一下其中的文件之后,s,5,T都发生了改变。

 

公钥加密:

·对称加密:加密、解密使用同一密钥

·非对称加密:密钥是成对儿的。

public key: 公钥,公开所有人

secret key: 私钥, 不能公开

公钥加密的只有私钥能解,私钥加密的只有公钥能解

验证过程:

  rpm --import GPG-KEY....  导入公钥

   -qa "gpg-pubkey*"   显示所有已导入的公钥

   -K rpm  验证某rpm签名是否合法

 -e gpg-pubkey....  删除公钥

 

6)将rpm转化成cpiorpm2cpio

当你安装了一个包之后,其中的某一个配置文件丢了,如何不全部覆盖而只恢复丢失的哪一个文件呢?

如图,我们新安装了一个叫aide的包。

软件包管理——Linux基本命令(13)_第1张图片

查看一下其中的文件

软件包管理——Linux基本命令(13)_第2张图片

我们将/etc/logrotate.d/aide文件删除

wKiom1mWzjjg5zlUAAAVR_opGuM411.png

如果我们选择重装的话,所有文件都会被覆盖,但是我们不想其他文件被覆盖,只想找回丢失的文件。

那我们首先要找到提供这个文件的包,(就当做我们刚才不是新安装的,不知道包名),即使这个文件已经不存在了,但是仍然能够查到属于哪个包。

wKioL1mWzjWTXN3AAAATfzSgpac075.png

然后我们在光盘当中把这个包拷出来,拷到任意目录都可以。我们将它拷到/var/tmp/beifen文件夹下wKiom1mWzjnwzT5VAAA6_IJ85v8488.png

拷完之后进入那个目录找到拷贝的包。

现在我们就要介绍一个命令rpm2cpio可以将rpm包转化成cpio,然后就可以使用cpio -id进行解压了。wKioL1mWzjbwWQ7OAAAkgcWQhRM318.png

解压之后看到三个文件夹,然后我们去里面寻找刚才被删除的那个叫aide文件

软件包管理——Linux基本命令(13)_第3张图片

就在etc/logrotate.d下,然后我们将它拷贝到真正的包文件夹下就可以了。软件包管理——Linux基本命令(13)_第4张图片

我们可以回去看一下,这个文件就被拷贝回来了。

 


3.yum命令

YUM: Yellowdog Update Modifierrpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包。

1)配置仓库

yum repository(仓库): yum repo,存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录repodata下)。在使用yum之前需要配置yum仓库。

·yum客户端配置文件:

/etc/yum.conf:为所有仓库提供公共配置

/etc/yum.repos.d/*.repo:为仓库的指向提供配置

wKiom1mWzjqRIhV9AAAnBaa2dFc844.png

·仓库指向的定义内容:[repoid]

             name=

             baseurl=ftp://

                  http://

                  file://

                 (可以写多个路径)

我们可以不要已经有的仓库,自己新建一个仓库

wKioL1mWzjjBgcTfAAAq0NTITFQ589.png

(如果不写name描述,则把id当成name

wKioL1mWzjmCbtbOAAEA-GgEDWs384.png     查看我们写好的仓库wKiom1mWzjyCSFLdAAC69APUyIA096.png

      写的时候id尽量都写basename可以随意写

wKioL1mWzjrjCzqJAAAwlaVLKCU618.png

也可以写文件路径,因为必须写绝对路径,所以会再写一个/,一共三个/

 

·仓库指向的其他定义:

enabled={1|0}  仓库是否开启,1为开启,0为关闭。不写的话默认为1

软件包管理——Linux基本命令(13)_第5张图片

repolist 查看当前开启的仓库

软件包管理——Linux基本命令(13)_第6张图片

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 “仓库名” 启用仓库

 

·yumrepo配置文件中可用的变量:

$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

 

2yum命令用法

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] [...]

软件包管理——Linux基本命令(13)_第7张图片

whatprovides "文件名" 支持通配符)

 

·清理本地缓存:

清除/var/cache/yum/$basearch/$releasever缓存

进入/var/cache/yum/文件夹下输入yum clean all 清除所有缓存

软件包管理——Linux基本命令(13)_第8张图片


makecache 构建缓存软件包管理——Linux基本命令(13)_第9张图片


search 关键字  以指定的关键字搜索程序包名及简要信息

deplist 包名  查看指定包所依赖的capabilities

history 查看yum事务历史

  info[number] 查看具体的哪一条

  undo[number] 撤销、还原某一条(比如第3条是安装了5个包,你undo 3就可以卸载那5个包)

  redo [number] 重做某一条(比如你使用undo将那5个包卸载了,可以使用redo3重新安装那5个包)软件包管理——Linux基本命令(13)_第10张图片

软件包管理——Linux基本命令(13)_第11张图片


localinstall [install] rpm  安装时指定为rpm包,安装过程中所依赖的包用yumrepo来装

 

5)包组管理

group

    grouplist 列出所有包组

    groupinfo"包组名"  查看包组信息

    groupinstall "包组名安装包组

    groupremove"包组名只删除包组中的包,不删除依赖包(可以用yum history undo 操作数字来删除包含依赖包)

    groupupdate 更新包组中的包

 

6yum的命令行选项

--nogpgcheck:禁止进行gpgcheck

-y: 自动回答为“yes

wKioL1mWz9LAZJr_AAAlp8tjrWE678.png

-q:静默模式

wKioL1mWz9PRoOb0AAAth4rVGnA429.png

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

软件包管理——Linux基本命令(13)_第12张图片

使用gcc -o hello hello.c C语言转化成二进制文件

软件包管理——Linux基本命令(13)_第13张图片

然后就可以运行啦

wKiom1mW03Cj33HcAAAc8SVg6Ks160.png

2)安装源码包:

一、下载httpd最新版本的源码包,解压

  网址可以在rpm -qi中找软件包管理——Linux基本命令(13)_第14张图片

使用rz导入Linux虚拟机中。

解压使用tar xvfwKiom1mW1N-RQN0fAACi6rZaXCo384.png

进入解压后的文件夹软件包管理——Linux基本命令(13)_第15张图片

源码都在server文件夹下

 

二、安装包组Development toolswKiom1mW1ODzxNt5AAA03l0jCzc414.png


三、查看INSTALLREADME这类帮助文档软件包管理——Linux基本命令(13)_第16张图片

软件包管理——Linux基本命令(13)_第17张图片


四、

安装路径设定:

--prefix=/PATH: 指定默认安装位置,默认为/usr/local/

--sysconfdir=/PATH:配置文件安装位置

 

./configure --prefix=/app/apache24 --sysconfdir=/etc/apache24 --enable-rewrite 将安装位置设置为/app/apache24,配置文件安装位置设置为/etc/apache24软件包管理——Linux基本命令(13)_第18张图片

它可能会报很多错误,它报出什么错误,我们就安装什么

使用可以search查找名称,查的时候都要在后面加上-devel软件包管理——Linux基本命令(13)_第19张图片

使用yum安装(不用加什么平台,它会自己选择平台)软件包管理——Linux基本命令(13)_第20张图片

装完之后再次执行软件包管理——Linux基本命令(13)_第21张图片

发现又有缺少的APR-util,于是我们再搜索(同样要加入-devel软件包管理——Linux基本命令(13)_第22张图片

搜索出来再安装wKiom1mW1OaRF4bhAAAry9mVdl4845.png

重复上述步骤,报错缺什么就搜索什么就安装什么,直到安装成功。

成功之后发现多了一个Makefile文件wKioL1mW1OSix6w2AADXbXMVJcQ581.png


五、

make 编译

(必须有Mikefile文件才能使用make命令)

软件包管理——Linux基本命令(13)_第23张图片

会发现多了很多叫.o的二进制文件

直到此时,上述所有步骤非root用户也可以执行。

从下面开始,只有root才可以执行。

 

输入make install命令进行安装

执行过之后,发现/app下生成了apache24文件夹,/etc下也生成了apache24文件夹

软件包管理——Linux基本命令(13)_第24张图片


六、启动服务

查看防火墙

  iptables-vnL

查看网络监听情况

  netstat-ntl 

软件包管理——Linux基本命令(13)_第25张图片

发现没有80端口,需要启动服务

wKiom1mW12qi_PlcAABSrQHKOf0437.png

启动服务/app/apache24/bin/apachectl start软件包管理——Linux基本命令(13)_第26张图片

查看到已启动软件包管理——Linux基本命令(13)_第27张图片

此时就有80端口了

软件包管理——Linux基本命令(13)_第28张图片

查询当前地址,并在浏览器中访问软件包管理——Linux基本命令(13)_第29张图片

我们发现能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                      软件包管理——Linux基本命令(13)_第30张图片

发现当前防火墙确实是开启的软件包管理——Linux基本命令(13)_第31张图片

关闭后再查询,可以看到确实关闭了。

但是这种方式,一旦重启它又会自动激活,

wKiom1mW12_zZ8K_AAA-1C3cpS0034.png

发现是enabled,说明下次启动时仍然会自动开启。

于是我们使用disable命令,然后再查询,可以看到,为disabled,说明下次启动时也不会自动开启了。wKioL1mW122Q04z6AADvNaAgUag164.png

这样防火墙就算完全关闭成功了。


软件包管理——Linux基本命令(13)_第32张图片

此时我们发现可以刷新出来了,但是又有一个问题

软件包管理——Linux基本命令(13)_第33张图片

它的路径跟我们设置好的/app/apache24不一样软件包管理——Linux基本命令(13)_第34张图片

这个index.html就是网站的文件

wKiom1mW13TCy48jAABGaS86uk0780.png

它的内容应该是It works!

所以可以得出结论,现在运行的不是刚才装上的那个apache

我们使用-qa可以发现,我们已经有一个用rpm安装的httpd(使用rpm安装启动方式是systemctl或者service),因此我们需要先把它停掉,使用systemctl stop关闭

软件包管理——Linux基本命令(13)_第35张图片

停掉之后刷新网页软件包管理——Linux基本命令(13)_第36张图片

发现确实没有显示了。

然后我们将之前那个httpd卸载掉

软件包管理——Linux基本命令(13)_第37张图片

此时就再也无法启动那个httpd了。

很好,那么现在就剩下我们刚才用源码安装的httpd了。


软件包管理——Linux基本命令(13)_第38张图片

还记得之前读INSTALL文件时,它告诉你,启动的文件在PREFIX/bin/apachectl 中,其中的PREFIX就是我们定义的/app/apache24

现在我们输入启动命令

wKiom1mW13ayo1FcAABBDhwIssw581.png

在输入启动命令之前之后分别查看一下端口

软件包管理——Linux基本命令(13)_第39张图片

发现有80端口了!

此时,再去刷新一下网页软件包管理——Linux基本命令(13)_第40张图片

成功显示了。开启成功了!


wKiom1mW2Xzh-4j7AABAERqs4kg924.png

同理,想关闭的话,将start改成stop即可。

 

七、设置PATHman路径

 

如果想正常使用man,需要修改文件

编辑/etc/man_db.conf文件

wKioL1mW2XmQ-3FRAAAjt1eQKoY955.png

软件包管理——Linux基本命令(13)_第41张图片

加上MANDATORY_MANPATH    /app/apache24/man这句话

就可以正常使用man了。

wKioL1mW2XuTRpbYAAAeH-vKelw781.png

软件包管理——Linux基本命令(13)_第42张图片


还有一点,我们想使用apache的时候,每次都要敲很长的一串路径,很不够方便,我们想改成直接可以敲apache就可以使用的。于是我们将路径加到PATH中:

   exportPATH=$PATH:/app/apache24/bin/

wKiom1mW2YDhD-19AAB1EFZfY3I633.png

这样就可以不输入路径直接使用了。

到此为止,我们所有的安装和配置就全部完成啦。