六、软件安装

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(第六节---软件安装)的更多相关文章

  1. python3.4学习笔记(十六) windows下面安装easy_install和pip教程

    python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...

  2. 风炫安全WEB安全学习第二十六节课 XSS常见绕过防御技巧

    风炫安全WEB安全学习第二十六节课 XSS常见绕过防御技巧 XSS绕过-过滤-编码 核心思想 后台过滤了特殊字符,比如说

  3. 风炫安全Web安全学习第十六节课 高权限sql注入getshell

    风炫安全Web安全学习第十六节课 高权限sql注入getshell sql高权限getshell 前提条件: 需要知道目标网站绝对路径 目录具有写的权限 需要当前数据库用户开启了secure_file ...

  4. Linux相关命令及软件安装教程

    @font-face { font-family: "Times New Roman" } @font-face { font-family: "宋体" } @ ...

  5. Linux ssh登录和软件安装详解

    阿哲Style   Linux第一天 ssh登录和软件安装详解 Linux学习第一天 操作环境: Ubuntu 16.04 Win10系统,使用putty_V0.63 本身学习Linux就是想在服务器 ...

  6. Linux学习-->linux系统在移动硬盘的安装

    由于自己看了一些文章和linux的好奇,想来一窥Linux的奥秘,因此自己准备学习使用Linux系统,这里记录下自己的安装过程,方便以后自己重装系统时进行查阅. 参考的书籍是鸟哥的<Linux私 ...

  7. Linux(一) 软件安装

    前言:在Linux中安装软件时,我们经常要考虑到这样几个个问题: (1).怎样安装软件;       (2).软件安装在什么地方;       (3).如何卸载删除不要的软件...... 下面,我们就 ...

  8. linux笔记:linux软件包管理,软件安装位置

    linux软件包简介 软件包分类:1.源码包(用C语言等编写的源代码,没有进行编译):脚本安装包(对源码包进行了安装优化的源码包)优点:开源,可修改可以自由选择所需的功能编译安装,更适合自己的系统,稳 ...

  9. Linux中的各种软件安装

    Linux下的软件形式 Linux上的软件有几种常见的方式 二进制发布包 软件包已经针对具体平台完成了编译和打包,解压后即可以使用,最多去改改配置文件,也是Linux上最通用和常见的软件包发布形式 例 ...

  10. Linux系统 centOS 更换软件安装源

    阿里云Linux安装软件镜像源阿里云是最近新出的一个镜像源.得益与阿里云的高速发展,这么大的需求,肯定会推出自己的镜像源.阿里云Linux安装镜像源地址:http://mirrors.aliyun.c ...

随机推荐

  1. 2.2 实验:UPX脱壳--《恶意代码分析实战》

    Lab01-02.exe 实验内容: 1.将文件上传到http://www.VirusTotal.com 进行分析并查看报告.文件匹配到了已有的反病毒软件特征吗? 2.是否有这个文件被加壳或混淆的任何 ...

  2. Nodepad++格式化XML和JSON字符串

    (一)格式化XML 1.安装XML Tools 在notepad++中点击菜单栏[插件]-[插件管理]. 在插件管理界面选择[XML Tools],点击[安装]. 2.打开XML文件 在notepad ...

  3. Resharper 和 Rider 的奇淫技巧,你知道多少?

    Resharper 和 Rider 的奇淫技巧,你知道多少? .NET 开发中最令人印象深刻的生产力工具之一是ReSharper.每次发布时,我都对它的功能感到震惊.不要误会我的意思,我喜欢 Visu ...

  4. 【JS】强化Promise理解,从零手写属于自己的Promise.all与Promise.race

    壹 ❀ 引 在一个思路搞定三道Promise并发编程题,手摸手教你实现一个Promise限制器一文中,我们在文章结尾留了一个疑问,关于第三题的实现能否解决当每次调用时间都不相等的情况(比如第二次调用要 ...

  5. 解决maven打包compliation failure程序包不存在

    1.问题说明 spring boot项目,在cmd中使用mvn clean package打包报错如下: 说这个程序包不存在,而实际上在eclipse中查看是能找到的. 2.问题原因 后来看了一下这个 ...

  6. Spring Boot整合JWT实现接口访问认证

    最近项目组需要对外开发相关API接口,需要对外系统进行授权认证.实现流程是先给第三方系统分配appId和appSecret,第三方系统调用我getToken接口获取token,然后将token填入Au ...

  7. logback中使用MDC自定义日志输出格式

    logback-MDC 相当于自定义日志格式输出 写在过滤器中 示例: try { Context context = createContext(request, response); proces ...

  8. Redis动态配制,限内存,免重启

    p.p1 { margin: 0; font: 14px Menlo; color: rgba(0, 255, 255, 1); background-color: rgba(0, 0, 0, 0.8 ...

  9. 【Azure 存储服务】多设备并发往 Azure Storage Blob 的 Container 存数据是否可以

    问题描述 多设备并发往 Azure Storage Blob 的 Container 存数据是否可以? 问题解答 可以! Azure Storage 是支持的并发存储数据的,Blob 可以使用乐观并发 ...

  10. 【Azure 环境】ADAL(Azure Active Directory Authentication Library )迁移到MSAL(Microsoft Authentication Library)相关问题

    问题一:根据微软官方网站对ADAL(包含ADAL.js, ADAL.NET, ADAL4J)的声明 https://docs.microsoft.com/zh-cn/azure/active-dire ...