首页 > 系统相关 >大年学习linux(第六节---软件安装)

大年学习linux(第六节---软件安装)

时间:2024-02-21 09:11:07浏览次数:33  
标签:-- 安装 linux --- yum 软件包 软件 第六节 rpm

六、软件安装

rpm
RPM软件包的管理工具

补充说明
rpm命令 是RPM软件包的管理工具。rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM套件管理方式的出现,让Linux易于安装,升级,间接提升了Linux的适用度。

初始化rpm数据库
通过rpm命令查询一下rpm包是否安装了,也是要通过rpm数据库来完成的;所以我们要经常用下面的两个命令来初始化rpm数据库;

rpm --initdb
rpm --rebuilddb

语法
rpm(选项)(参数)
选项
-a:查询所有套件;
-b<完成阶段><套件档>+或-t <完成阶段><套件档>+:设置包装套件的完成阶段,并指定套件档的文件名称;
-c:只列出组态配置文件,本参数需配合"-l"参数使用;
-d:只列出文本文件,本参数需配合"-l"参数使用;
-e<套件档>或--erase<套件档>:删除指定的套件;
-f<文件>+:查询拥有指定文件的套件;
-h或--hash:套件安装时列出标记;
-i:显示套件的相关信息;
-i<套件档>或--install<套件档>:安装指定的套件档;
-l:显示套件的文件列表;
-p<套件档>+:查询指定的RPM套件档;
-q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户;
-R:显示套件的关联性信息;
-s:显示文件状态,本参数需配合"-l"参数使用;
-U<套件档>或--upgrade<套件档>:升级指定的套件档;
-v:显示指令执行过程;
-vv:详细显示指令执行过程,便于排错。
参数
软件包:指定要操纵的rpm软件包。

实例

1.查询已经安装的软件

语法:rpm -q 软件名
rpm -q gaim

rpm -qa
rpm -qa |more

rpm -qa |grep install

2.查询一个已经安装的文件属于哪个软件包
语法:rpm -qf 文件名 注意:文件名所在的绝对路径要指出举例

rpm -qf /usr/lib/grub

3.查询已安装软件包都安装到何处
语法:rpm -ql 软件名 或 rpm rpmquery -ql 软件名
rpm -ql lynx
rpmquery -ql lynx

4.查询一个已安装软件包的信息
语法:rpm -qi 软件名
rpm -qi lynx

5.查看一下已安装软件的配置文件
语法:rpm -qc 软件名
rpm -qc lynx

6.查看一下已经安装软件的文档安装位置
语法:rpm -qd 软件名
rpm -qd lynx

7.查看一下已安装软件所依赖的软件包及文件

语法:rpm -qR 软件名
rpm -qR rpm-python

RPM 命令#
我们可以直接使用rpm命令,对软件包进行一些操作。
安装#
Copy
rpm –ivh <package_name>
rpm –Uvh <package_name> # 没有安装过,则安装
rpm –Fvh <package_name> # 没有安装过,则忽略
-nodeps 忽略依赖问题,一般仅用于测试
-i install;
-v 详细信息;
-h 以安装信息栏显示安装进度;
--test 可以测试是否有属性依赖问题
卸载#
Copy
rpm –e <package_name> # 有其它包依赖此RPM包时,卸载会报错
升级#
升级时使用-ivh会提示文件冲突
rpm –Uvh <package_name> 没有安装过,则安装
rpm –Fvh <package_name> 没有安装过,则忽略
查找#
rpm -q[licdR] 已安装的软件名
rpm -qp[licdR] 未安装的文件名称,注意,这里查看的前提是你本地有一个这个未安装的软件包
rpm -qf 存在于系统的某个文件名
参数:
查询已安装软件的信息:
-q 判断软件是否已安装 rpm -q mock,如果安装了,那么会列出该包的全名
-qa 列出所有的已安装在本机上的软件名称
-qi 列出软件的详细信息,开发商、版本等
-ql 列出该软件的所有文件与目录
-qc 列出该软件的所有配文件(找出在 /etc 下面的目录名而已)
-qR 列出与该软件有关的依赖软件及文件,注意了,这里不只是列出了依赖的软件
-qf 找出与后面接的文件所属哪个软件,注意文件名要「绝对路径」,例如rpm -qf /bin/rz
非已安装软件:
-qp[icdlR] 用途差不多,但是并非已安装的软件信息,比如本地有个软件 filename.x86_64.rpm,可以 rpm -qpR ./filename.x86_64.rpm。
验证#
对已安装的包进行文件校验:
Copy
rpm –V <package_name>
rpm -Vp <rpm_file>
rpm -Va
导入key:
rpm --import <RPM_KEY>
在包安装之前进行签名校验:
Copy
rpm -K <rpm_>file
重建数据库#
RPM 数据库存储在 /var/lib/rpm 内,如果文件损坏,可以重建:
Copy
rpm –rebuilddb 解决系统RPM数据库的异常
YUM 命令#
yum 其实是透明的调用 rpm,相当于在 rpm 基础上封装的更易使用的“前端”。
它主要设计来解决软件包之间的依赖性,并可从多个资源库(我们称之为“源”,典型的由 /etc/yum.repos.d/ 目录下的每个 .repo 文件定义)。
源制作#
createrepo


一般的 CentOS 系的 ISO 镜像中,都带有安装时使用的rpm包。可以将这部分文件mount到本地,创建本地源,以减少软件安装时的上网下载。
例如,你在一个有 RPM 包的文件夹下,就可以执行 createrepo . 命令,然后你的 REPO 配置一个本地源也是 OK 的。
安装#
Copy
yum install <package_name>[-<version_info>] -y
yum localinstall <rpm_file> 本地安装
yum groupinstall <group_name> 组安装
升级#
Copy
yum update [package_name]
降级#
Copy
yum downgrade <package_name>-<version_info>
卸载#
Copy
yum remove/erase <package_name>
谨慎使用: 此命令会卸载掉所有依赖此包的RPM包
查找#
Copy
yum search <pkg_name> # 搜索相关软件
yum list # 列出目前 yum 管理的所有软件 注意,这里包含了未安装的软件
yum list 以及相关的一些命令则能够为你提供有关软件包、软件包集和软件仓库的信息。所有的 yum list 命令都能够使用 glob 表达式作为参数,对输出结果进行过滤。在 glob 表达式中,你可以使用 * 代表任何数量个字符,使用 ? 代表任何一个字符。
Copy
yum list <glob_expr> [more_glob_exprs] 列出所有符合 glob 表达式的软件包
yum list all 列出所有已安装的和可用的软件包
yum list installed 列出所有已经安装在系统中的软件包。输出结果的最右边一列是取得该软件包的软件仓库。标识为 installed 的软件包则说明它是做为系统基本组件而预安装的。
yum list available 列出所有启用的软件仓库中可用的软件包
yum list --showduplicates |grep nginx |sort 这样就会显示启用的 YUM 源中 nginx 的所有版本,而不是最新版本
yum grouplist 列出所有软件包组
yum repolist [-v] 列出所有启用的软件仓库的 ID,名称 及其包含的软件包的数量
本地缓存相关#
Copy
yum clean all 清除本地缓存
yum makecache 只做本地缓存
yum history
查看 Yum 事务完整的历史记录。
Copy

info 命令查看涉及指定软件包的事务详情

yum history info httpd
其他#
使用yum info <package_name> [more_names]命令可查看一个或多个软件包的信息 (此处同样可以应用 glob 表达式)。
yum provides  这个命令左右和 rpm -qf 挺类似,有用的一个命令,例如 yum provides /usr/bin/mock
依赖包下载研究#
利用 downloadonly 下载#
这种方式可能需要先安装 downloadonly 插键才行,不过我发现,我没安装就有了。
Copy
yum install --downloadonly --downloaddir=/tmp/yums/ nginx
如果主机上已经安装了 nginx,那么这个命令貌似并不会把 nginx 等相关依赖包下载下来。只有当主机上没有安装 nginx 包时,这个下载才会 OK。
利用这个命令,你可以一次下载多个包的依赖包的:
Copy
yum install --downloadonly --downloaddir=/root/mypackages/ httpd-2.2.6-40.el7 vsftpd
利用 yumdownloader 工具#
它可以一次性下载任何 RPM 软件包及其所有依赖包。如果主机上没有这个命令,则需要安装:
Copy
yum install -y yum-utils
下载包的依赖包,并指定存放的目录(如果不指定,就默认下载到当前目录):
Copy
yumdownloader --resolve --destdir=/tmp/yums/ nginx# OR
yumdownloader --resolve --destdir /tmp/yums/ nginx
我发现这个命令和上面 downloadonly 一样的现象,当 nginx 包已经安装在主机上了,它就不会去下载它的依赖包,但是和上面有所区别的是,它还是会把 nginx 这个包下载下来的。
其他#
Copy
repoquery --requires --resolve
Copy

rpmrepater會向用戶顯示已安裝包的列表,你可以使用上/下箭頭來滾動屏幕# 可以在指定包上使用"r"鍵來顯示其依賴關係,循環在指定包上按下"r"鍵可以展示出餘下的信息。# "L"標誌的意思是說這個包是一片“孤葉”,意思說說沒有任何包依賴它。# "o"標誌是說這個包是整個依賴鏈的中間部分。# 按下"b"鍵會顯示其他依賴於該包的其他包。

yum install rpmreaper
rpmreaper

如何查看与rpm包相关的文件和其他信息

下面所有的例子都假设使用软件包mysql-3.23.54a-11

1、我的系统中安装了那些rpm软件包。

rpm -qa 讲列出所有安装过的包
如果要查找所有安装过的包含某个字符串sql的软件包

rpm -qa | grep sql
2、如何获得某个软件包的文件全名。

rpm -q mysql
可以获得系统中安装的mysql软件包全名,从中可以获得当前软件包的版本等信息。这个例子中可以得到信息mysql-3.23.54a-11

3、一个rpm包中的文件安装到那里去了?

rpm -ql 包名
注意这里的是不包括.rpm后缀的软件包的名称,也就是说只能用mysql或者mysql-3.23.54a-11而不是mysql-3.23.54a-11.rpm。如果只是想知道可执行程序放到那里去了,也可以用which,比如:

which mysql
4、一个rpm包中包含那些文件。

一个没有安装过的软件包,使用rpm -qlp **** .rpm
一个已经安装过的软件包,还可以使用rpm -ql **** .rpm
5、如何获取关于一个软件包的版本,用途等相关信息?

一个没有安装过的软件包,使用rpm -qip **** .rpm
一个已经安装过的软件包,还可以使用rpm -qi **** .rpm
6、某个程序是哪个软件包安装的,或者哪个软件包包含这个程序。

rpm -qf which 程序名 #返回软件包的全名
rpm -qif which 程序名 #返回软件包的有关信息
rpm -qlf which 程序名 #返回软件包的文件列表
注意,这里不是引号,而是,就是键盘左上角的那个键。也可以使用rpm -qilf`,同时输出软件包信息和文件列表。

7、某个文件是哪个软件包安装的,或者哪个软件包包含这个文件。

注意,前一个问题中的方法,只适用与可执行的程序,而下面的方法,不仅可以用于可执行程序,也可以用于普通的任何文件。前提是知道这个文件名。首先获得这个程序的完整路径,可以用whereis或者which,然后使用rpm -qf例如:

whereis ftptop
ftptop: /usr/bin/ftptop /usr/share/man/man1/ftptop.1.gz

rpm -qf /usr/bin/ftptop
proftpd-1.2.8-1

rpm -qf /usr/share/doc/proftpd-1.2.8/rfc/rfc0959.txt
proftpd-1.2.8-1
更多实例
库依赖: http://rpmfind.net/

源码包 -> 编译 -> 二进制包(rpm 包 / 系统默认包)

rpm 命名规则: 软件(软件名, 软件版本) + 系统(os 版本, os 位数) rpm 校验: SM5DLUGT -> size modified(类型/权限) md5 device L(文件路径) user group time(modified time)

yum: 解决 rpm 依赖的问题

rpm

mysql57-community-release-el6-8.noarch.rpm # 一个 rpm 包的例子
/var/lib/rpm/ # 包全名 -> 包名 的数据库

rpm -Uivh --dodeps xxx # upgrade install verbose hash
rpm -qilpfa|grep xxx # query info list(rpm包安装后的文件位置) package(rpm 包) file(文件属于哪个rpm文件) all
rpm -e # erase
rpm -V # verify
rpm2cpio | cpio -idv

rpm 默认安装位置

/etc/ 配置文件
/usr/bin/ 可执行文件
/urs/lib/ 程序使用的函数库
/usr/share/doc/ 使用手册
/usr/share/man/ manual

yum
基于RPM的软件包管理器

补充说明
yum命令 是在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更新与管理RPM软件包,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载、安装。

yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

语法
yum(选项)(参数)
选项
-h:显示帮助信息;
-y:对所有的提问都回答“yes”;
-c:指定配置文件;
-q:安静模式;
-v:详细模式;
-d:设置调试等级(0-10);
-e:设置错误等级(0-10);
-R:设置yum处理一个命令的最大等待时间;
-C:完全从缓存中运行,而不去下载或者更新任何头文件。
参数
install:安装rpm软件包;
update:更新rpm软件包;
check-update:检查是否有可用的更新rpm软件包;
remove:删除指定的rpm软件包;
list:显示软件包的信息;
search:检查软件包的信息;
info:显示指定的rpm软件包的描述信息和概要信息;
clean:清理yum过期的缓存;
shell:进入yum的shell提示符;
resolvedep:显示rpm软件包的依赖关系;
localinstall:安装本地的rpm软件包;
localupdate:显示本地rpm软件包进行更新;
deplist:显示rpm软件包的所有依赖关系。
实例
部分常用的命令包括:

自动搜索最快镜像插件:yum install yum-fastestmirror
安装yum图形窗口插件:yum install yumex
查看可能批量安装的列表:yum grouplist
安装

yum install #全部安装
yum install package1 #安装指定的安装包package1
yum groupinsall group1 #安装程序组group1
更新和升级

yum update #全部更新
yum update package1 #更新指定程序包package1
yum check-update #检查可更新的程序
yum upgrade package1 #升级指定程序包package1
yum groupupdate group1 #升级程序组group1
查找和显示

检查 MySQL 是否已安装

yum list installed | grep mysql
yum list installed mysql*

yum info package1 #显示安装包信息package1
yum list #显示所有已经安装和可以安装的程序包
yum list package1 #显示指定程序包安装情况package1
yum groupinfo group1 #显示程序组group1信息yum search string 根据关键字string查找安装包
删除程序

yum remove | erase package1 #删除程序包package1
yum groupremove group1 #删除程序组group1
yum deplist package1 #查看程序package1依赖情况
清除缓存

yum clean packages #清除缓存目录下的软件包
yum clean headers #清除缓存目录下的 headers
yum clean oldheaders #清除缓存目录下旧的 headers
更多实例

yum

/etc/yum.repos.d/ yum 源配置文件
vi /etc/yum.repos.d/nginx.repo # 举个栗子: nginx yum源
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1

yum mirror

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
wget https://mirror.tuna.tsinghua.edu.cn/help/centos/
yum makecache

添加中文语言支持

LANG=C # 原始语言
LANG=zh_CN.utf8 # 切换到中文
yum groupinstall "Chinese Support" # 添加中文语言支持

标签:--,安装,linux,---,yum,软件包,软件,第六节,rpm
From: https://www.cnblogs.com/nwq1101/p/18024439

相关文章

  • [转帖]一次搞定 Unicode、字节序、UTF-*
    茫茫人海中与你相遇相信未来的你不会很差作者:Tomson                                      来源:https://segmentfault.com/a/1190000038171151什么是字符集顾名思义,字符集就是字符的......
  • 分布式系统-无状态
    分布式系统的一个难点,便是它保存的数据,要保证是无状态的。要做到这一点,有三个思路。一是每个系统节点,分别保存一份完整的数据;二是每个系统节点,分别保存一部分数据,也就是将数据切片;三是思路一和思路二结合使用。每个系统节点保存一份完整的数据,好处在于保证了整个分布式系统的高......
  • linux 中 awk的特殊内置变量
     001、ARGC:命令行参数数组ARGV中元素的个数(c:count;v:variable)[root@PC1test1]#lsa.txtb.txt[root@PC1test1]#awk'{printARGC}'a.txt##ARGC:表示命令行参数数组ARGV中元素的个数222[root@PC1test1]#awk'{printlength(ARGV)}'a.txt......
  • 《Linux内核完全注释》(2)
    3内核编程语言和环境首先介绍了as86和GNUas汇编程序的语法和使用方法,对GNUC中的内联汇编、语句表达式、寄存器变量和内联函数等C语言扩展内容进行介绍,同时描述了C和汇编函数之间的相互调用机制。3.1as86汇编器是一个可以产生16位代码的汇编器,与之配套的是ld86链接器。其是B......
  • 深度学习-卷积神经网络基础2-43
    目录1.池化层2.CNN的一般架构3.经典的LeNet4代码5代码21.池化层为什么要有池化层?目标就是降采样subsample,shrink,减少计算负荷,内存使用,参数数量(也可防止过拟合)正如卷积神经网络一样,在池化层中的每个神经元被连接到上面一层输出的神经元,只对应一小块感受野的区域。我们必......
  • Linux下使用docker部署vue项目
    通过nginx镜像部署关于前端vue项目部署:使用npm打包创建nginx容器dockerrun-d--nameadmin_portal-p9091:80nginx将dist目录下的所有文件拷贝到容器的/usr/share/nginx/html目录下,这个是html文件的默认读取路径dockercp./admin_portal:/usr/share/nginx/html/......
  • [设计模式]创建型模式-简单工厂模式
    简介简单工厂模式又称为静态工厂模式,属于创建型模式,但不属于GOF23设计模式。由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。简单工厂适用场景:工厂类负责创建的对象比较少;客户端只需要知道传入工厂......
  • SciTech-Mathmatics-LinearAlgebra-特征值和特征向量
    1基本定义将\(n\)阶方阵\(M\)分解出如下式的非零n维向量\(v\)作为特征向量和\(\lambda\)作为特征向量;$\largeMv=\lambdav,\v\neq0$上式不仅可以分解出,甚至还可以分解出多个特征向量与特征值;实例:对物体施加作用力F产生运动,运动可以分解到3D空间......
  • linux下部署MySQL服务
    linux下部署MySQL服务1、安装sudo-s调整为root下用户角色运行以下命令安装MySQL,输入Y继续sudoaptinstallmysql-server2、启动systemctlstartmysqld设置MySQL开机自启动(可选)systemctlenablemysqld3、检查运行状态systemctlstatusmysqld4、配置MySQL用户......
  • andorid开发--记账本(六)
    完成了记录支出页面的逻辑编写此时项目结构adapter适配器包RecordPagerAdapter.javapackagecom.example.myapplication.adapter;importandroidx.annotation.NonNull;importandroidx.annotation.Nullable;importandroidx.fragment.app.Fragment;importandroidx.fra......