软件包管理——Linux基本命令(13)

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/

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

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

时间: 2024-10-29 19:10:00

软件包管理——Linux基本命令(13)的相关文章

磁盘管理——Linux基本命令(14)

1.设备文件 (1)磁盘存储术语 head:磁头 track:磁道 cylinder: 柱面 secotr: 扇区,512bytes (2)寻址方式 ·CHS(cylinder,head,secotr)称为硬盘的三围 采用24bit位寻址 其中前10位表示cylinder,中间8位表示head,后面6位表示sector. 最大寻址空间8GB 因为一个硬盘的磁头数/盘面数为256(2^8),一个盘面上有1024(2^10)个磁道,每个磁道有64(2^6)个扇区,每个扇区512字节 256*1024

Linux软件包管理{rpm|yum|源码包}2015082901

CentOS软件包管理 Linux程序安装有三种方式: 1.  二进制包安装 a.RPM b.YUM 2.  源码包安装 (1)二进制包管理: RPM CentOS上的二进制包为rpm格式,并且rpm软件包管理程序也叫做rpm(RPM is Package Manager) RPM包管理方式的优点是:安装简单方便,因为软件已经编译完成打包完毕,安装只是个验证环境和解压的过程.此外通过RPM方式安装的软件,RPM工具都会记录软件的安装信息至数据库中(/var/lib/rpm),这样方便了软件日后的

【one day one linux】linux下的软件包管理工具

Linux 下的软件包管理工具 linux下的软件安装可以通过两种方式,一种是直接使用自带的软件包管理工具安装,另外一种通过编译源码安装. 1.软件包的种类 Red Hat和Fedora:redhat最早发行的个人版本的Linux,自从Red Hat 9.0版本发布后,RedHat 公司就不再开发桌面版的 Linux发行套件,Red Hat Linux停止了开发,而将全部力量集中在服务器版的开发上,也就是 Red Hat Enterprise Linux 版.2004年4月30日,Red Hat

RedHat系列软件管理(第二版) --二进制软件包管理

RedHat系列软件管理 --二进制软件包管理 Linux学习思想-Linux相对与Windows来非常透明,因此,无论是系统,还是软件,都会有本身自带,或者是Man给提供的非常详细的说明/帮助文档,只要我们利用好这些文档,只要英文足够好,不需要任何教科书,任何教学视频,你都可以学好Linux! RPM包管理 Linux软件包命名形式 sudo-1.7.2p1-5.el5.i386.rpm #其中包括软件名(sudo),版本号(1.7.2pl),发行号(5.el5),和硬件平台(i386) 卸载

Linux 入门学习之rpm软件包管理

Linux入门之软件包管理 在linux有很多类的软件包管理机制,但是在redhat.centos这类版本的系统中,都会使用一种相同的机制,就是rpm软件包管理机制,当然,还有其它版本的linux使用的不同机制: debian:使.deb文件,dpkg包管理器 redhat:使用.rpm文件,rpm包管理器 软件包在使用中又分类两种(源码包和二进制包): 源码包:一般是提供了一些源码模块和编译脚步组合起来的压缩文件,命令格式如: name-version.tar.{gz|bz2|xz} 等,这里

Linux学习之CentOS(二十三)--Linux软件管理之源代码以及RPM软件包管理

在Linux系统下,对于软件包的管理有多种机制,有源代码方式.RPM软件包管理方式以及YUM软件管理方式,本篇随笔将详细讲解CentOS下源代码形式安装软件以及RPM软件包管理机制 一.源代码形式 首 先我们先来看一下源代码的方式.我们知道,在开源的环境下,大多数的开源软件都是以源代码的形式来发布,通常将源代码打包成tar.gz的归档压缩文件发 布到网上供我们下载使用.但是我们下载下来的源代码方式我们还不能够直接使用,不像在windows系统上直接下载下来可执行的二进制文件,我们需要将下 载好的

linux基础学习-第十一天(脚本循环、软件包管理)

2016-08-16 授课内容: shell脚本基础:循环,for,while,until(未讲完) 软件包管理(未讲完): 软件运行环境 软件包基础 Rpm包管理 循环执行 将某代码段重复运行多次 重复运行多少次: 循环次数事先已知 循环次数事先未知 有进入条件和退出条件 循环控制语句:  break:[提结束循环,循环将不再执行]指前面的循环退出,退出后还继续执行后面的命令,而exit则是退出整个脚本 continue:[提结束本轮循环,而进入下一轮循环]当碰到continue语句时,con

大数据学习之_01_Linux学习_02_组管理和权限管理+定时任务调度+linux磁盘分区、挂载+linux的网络配置+进程管理(重点)+软件包管理+大厂面试题+感悟分享+资料附录

10 组管理和权限管理10.1 Linux组的基本介绍10.2 文件/目录的所有者10.3 文件/目录的所在组10.4 权限的基本介绍10.5 rwx权限详解10.6 修改权限指令-chmod10.7 修改文件所有者-chown10.8 修改文件所在组-chgrp10.9 最佳实践-警察和土匪游戏11 定时任务调度11.1 crond任务调度12 linux磁盘分区.挂载12.1 分区的基本知识12.2 Linux分区12.3 挂载的经典案例12.4 查询系统整体磁盘使用情况12.5 查询指定目

linux文本处理sed、软件包管理、磁盘存储和文件系统

linux文本处理sed.软件包管理.磁盘存储和文件系统 1.取基名和文件名 [[email protected] scripts38]#echo /etc/sysconfig/network-scripts/ |sed -r '[email protected](^/.*/)([^/]+)/[email protected]\[email protected]' /etc/sysconfig/ [[email protected] scripts38]#echo /etc/sysconfig/