Linux软件安装管理之1——rpm命令管理
二、 rpm命令管理RPM包命名规则RPM包的来源RPM包在系统镜像文件ISO中————Linux系统光盘中包含了所有的RPM包使用虚拟机设置-> CD/DVD(IDE)->设备状态:已连接打钩。(相当于给光驱加电源)连接-&a
Linux软件包管理
- rpm命令管理 https://blog.csdn.net/jiduochou963/article/details/86619233
- yum在线命令 https://blog.csdn.net/jiduochou963/article/details/86653645
- 源码包管理 https://blog.csdn.net/jiduochou963/article/details/86653703
- 脚本安装包 https://blog.csdn.net/jiduochou963/article/details/86655625
软件包管理简介
软件包分类
源码包
- 源码包优点
- 开源,只要有能力,可以修改源代码
- 可以自由选择所需的功能
- 软件是编译安装,所以更加适合自己的系统,更加稳定效率也更高
- 卸载方便
- 源码包缺点
- 安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
- 编译过程时间较长,安装比二进制安装时间长
- 因为是编译安装,安装过程中一旦报错新手很难解决
- 脚本安装包——所谓的脚本安装包,就是把复杂的软件包安装过程写成了程序脚本,初学者可以执行脚本实现一键安装。但实际安装的还是源码包和二进制包(下面将会介绍)
- 优点:安装简单、快捷;
- 缺点:完全丧失了自定义性。
二进制包(RPM包、系统默认包)
- 二进制包的优点
- 包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载
- 安装速度比源码安装快的多
- 二进制包缺点
- 经过编译,不再可以看到源代码
- 功能选择不如源码包灵活
- 依赖性(下面将会介绍)
- RPM包安装命令分两种安装方法:rpm手工命令安装+yum在线安装
报告环境
[root@localhost /]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
一、 rpm命令管理
RPM包命名规则
RPM包的来源
- RPM包在系统镜像文件ISO中————Linux系统光盘中包含了所有的RPM包
- 使用
- 虚拟机设置-> CD/DVD(IDE)->设备状态:已连接打钩。(相当于给光驱加电源)
- 连接->使用ISO镜像文件(M)->浏览:选择系统镜像文件
- 给光盘创建一个挂载点
[root@localhost cdrom]# mkdir /mnt/cdrom
[root@localhost cdrom]# mount /dev/sr0 /mnt/cdrom/
mount: 在 /dev/sr0 上找不到媒体
[root@localhost cdrom]# mount /dev/sr0 /mnt/cdrom/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost cdrom]# ls -al /mnt/cdrom/
总用量 1643
drwxr-xr-x. 8 root root 2048 5月 4 2018 .
drwxr-xr-x. 3 root root 19 1月 23 20:50 ..
-rw-rw-r--. 1 root root 14 5月 2 2018 CentOS_BuildTag
-rw-r--r--. 1 root root 29 5月 4 2018 .discinfo
drwxr-xr-x. 3 root root 2048 5月 4 2018 EFI
-rw-rw-r--. 1 root root 227 8月 30 2017 EULA
-rw-rw-r--. 1 root root 18009 12月 10 2015 GPL
drwxr-xr-x. 3 root root 2048 5月 4 2018 images
drwxr-xr-x. 2 root root 2048 5月 4 2018 isolinux
drwxr-xr-x. 2 root root 2048 5月 4 2018 LiveOS
drwxrwxr-x. 2 root root 1640448 5月 3 2018 Packages
drwxrwxr-x. 2 root root 4096 5月 7 2018 repodata
-rw-rw-r--. 1 root root 1690 12月 10 2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r--. 1 root root 1690 12月 10 2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r--. 1 root root 2883 5月 7 2018 TRANS.TBL
-rw-r--r--. 1 root root 354 5月 4 2018 .treeinfo
[root@localhost cdrom]# cd /mnt/cdrom/Packages/
[root@localhost Packages]# ls # 这将会列出所有的PRM包,这里省略
...
如果出现/dev/sr0 上找不到媒体
,解决办法是在虚拟机底部的状态栏内,找到CD/DVD图标(一个光盘图标),此时一般显示为灰色,鼠标点一下,即可启动CD/DVD,此时CD/DVD即可加载到虚拟机系统内.
所以RPM包在哪呢? RPM包在/mnt/cdrom/Packages
目录下:
[root@localhost Packages]# pwd
/mnt/cdrom/Packages
[root@localhost Packages]#
[root@localhost Packages]# cd /
[root@localhost /]# umount /mnt/cdrom/
RPM包命名原则
如:httpd-2.2.15-15.el6.centos.1.i686.rpm
- httpd 软件包名
- 2.2.15 软件版本
- 15 软件发布的次数
- el6.centos 适合的Linux平台(el6是Redhat的企业版)
- i686 适合的硬件平台
- rpm rpm包的扩展名
包名称-版本-发布次数.适合的Linux平台.适合的硬件平台.包的扩展名
RPM包依赖性:
- 树形依赖:a->b->c 解决方法:从后往前安装
- 环形依赖:a->b->c->a 解决方法:所有包放在一条命令中安装即可
- 模块依赖:库文件依赖,库也叫模块,就是linux当中的函数,它有一个典型的特征,就是以
.so.数字
结尾,它依赖的其实是一个文件,而不是软件包。该文件藏身在某一个软件包当中,我们只要将该文件所在的软件包安装上,该文件也就安装了。- 如:
那我怎么知道这个文件在哪个包里面呢?[root@localhost Packages]# rpm -ivh mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm 警告:mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY 错误:依赖检测失败: libodbc.so.2()(64bit) 被 mysql-connector-odbc-5.2.5-7.el7.x86_64 需要 libodbcinst.so.2()(64bit) 被 mysql-connector-odbc-5.2.5-7.el7.x86_64 需要 [root@localhost Packages]# # 提示说要安装libodbc.so.2()(64bit),凡是以`.so.数字`结尾的依赖称库文件依赖(库也称模块,库就是linux中的函数,这里的函数就是一个文件,使用称库文件)。 # 安装时找不到如libodbc.so.2()这种依赖,为啥呢?因为mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm 依赖的是一个文件而不是Packages目录下的这些PRM软件包, # 即被依赖的库文件是藏身在众多PRM软件包中的一个文件,只要把这个文件所在PRM软件包装上,自然就有了被依赖的这个文件。
三个方法:- 根据文件猜在哪个包中,额 可行性不大
- 查询http://www.rpmfind.net,输入库文件名称查询到对应的rpm包,然后安装即可。(详下)
- yum在线安装(下面将会介绍):Redhat或CentOS等Linux系统在远程搭建一个服务器放置所有用到的软件,只要Linux能正常访问这台远程服务器,那么执行一条yum命令,在服务器上会自动匹配依赖性(不管是树形依赖、环形依赖、库依赖etc),自动下载所有依赖的包,一条命令装好包括依赖包在内的需要安装的所有软件包。在不联网情况下,镜像光盘可以作为本地yum(下面将会介绍)。CentOS的yum是免费的。yum安装的包是二进制包。
安装命令
包全名与包名
如mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm
就是包全名(完整的包名),而mysql-connector-odbc
是包名。
- 包全名:操作的包是还没有安装的软件包时,必须使用包全名,而且要注意路径。(主要是安装和升级的时候)
- 包名:操作已经安装的软件包时,使用包名,原因是会搜索
/var/lib/rpm/
中的数据库。(主要是卸载和查询的时候)
RPM安装
rpm -ivh 包全名
- 选项
-i
(install) 安装-v
(verbose) 显示详细信息-h
(hash) 显示进度--nodeps
不检测依赖性(实际生产环境——服务器上是不允许使用,必须解决依赖性)
实践——安装Apache
先装主包,再安装附加包(附加包依赖主包)
[root@localhost Packages]# rpm -ivh httpd-
httpd-2.4.6-80.el7.centos.x86_64.rpm httpd-manual-2.4.6-80.el7.centos.noarch.rpm
httpd-devel-2.4.6-80.el7.centos.x86_64.rpm httpd-tools-2.4.6-80.el7.centos.x86_64.rpm
[root@localhost Packages]# rpm -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm
警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
错误:依赖检测失败:
/etc/mime.types 被 httpd-2.4.6-80.el7.centos.x86_64 需要
httpd-tools = 2.4.6-80.el7.centos 被 httpd-2.4.6-80.el7.centos.x86_64 需要
libapr-1.so.0()(64bit) 被 httpd-2.4.6-80.el7.centos.x86_64 需要
libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-80.el7.centos.x86_64 需要
[root@localhost Packages]# rpm -ivh httpd-
httpd-2.4.6-80.el7.centos.x86_64.rpm httpd-manual-2.4.6-80.el7.centos.noarch.rpm
httpd-devel-2.4.6-80.el7.centos.x86_64.rpm httpd-tools-2.4.6-80.el7.centos.x86_64.rpm
[root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-80.el7.centos.x86_64.rpm
警告:httpd-tools-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
错误:依赖检测失败:
libapr-1.so.0()(64bit) 被 httpd-tools-2.4.6-80.el7.centos.x86_64 需要
libaprutil-1.so.0()(64bit) 被 httpd-tools-2.4.6-80.el7.centos.x86_64 需要
[root@localhost Packages]# rpm -ivh ^C
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh apr-1.4.8-3.el7_4.1.x86_64.rpm
警告:apr-1.4.8-3.el7_4.1.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:apr-1.4.8-3.el7_4.1 ################################# [100%]
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm
警告:apr-util-1.5.2-6.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:apr-util-1.5.2-6.el7 ################################# [100%]
[root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-80.el7.centos.x86_64.rpm
警告:httpd-tools-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:httpd-tools-2.4.6-80.el7.centos ################################# [100%]
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh apr-1.4.8-3.el7_4.1.x86_64.rpm
警告:apr-1.4.8-3.el7_4.1.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
软件包 apr-1.4.8-3.el7_4.1.x86_64 已经安装
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm
警告:apr-util-1.5.2-6.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
软件包 apr-util-1.5.2-6.el7.x86_64 已经安装
[root@localhost Packages]# rpm -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm
警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
错误:依赖检测失败:
/etc/mime.types 被 httpd-2.4.6-80.el7.centos.x86_64 需要
[root@localhost Packages]# rpm -ivh /etc/mime.types
错误:打开 /etc/mime.types 失败: 没有那个文件或目录
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh mailcap-2.1.41-2.el7.noarch.rpm
警告:mailcap-2.1.41-2.el7.noarch.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:mailcap-2.1.41-2.el7 ################################# [100%]
[root@localhost Packages]# rpm -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm
警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:httpd-2.4.6-80.el7.centos ################################# [100%]
[root@localhost Packages]#
[root@localhost Packages]#
[root@localhost Packages]# rpm -ivh httpd-
httpd-2.4.6-80.el7.centos.x86_64.rpm httpd-manual-2.4.6-80.el7.centos.noarch.rpm
httpd-devel-2.4.6-80.el7.centos.x86_64.rpm httpd-tools-2.4.6-80.el7.centos.x86_64.rpm
[root@localhost Packages]# rpm -ivh httpd-manual-2.4.6-80.el7.centos.noarch.rpm
警告:httpd-manual-2.4.6-80.el7.centos.noarch.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:httpd-manual-2.4.6-80.el7.centos ################################# [100%]
[root@localhost Packages]# rpm -ivh httpd-devel-2.4.6-80.el7.centos.x86_64.rpm
警告:httpd-devel-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
错误:依赖检测失败:
apr-devel 被 httpd-devel-2.4.6-80.el7.centos.x86_64 需要
apr-util-devel 被 httpd-devel-2.4.6-80.el7.centos.x86_64 需要
[root@localhost Packages]# rpm -ivh apr-devel-1.4.8-3.el7_4.1.
错误:打开 apr-devel-1.4.8-3.el7_4.1. 失败: 没有那个文件或目录
[root@localhost Packages]# rpm -ivh apr-devel-1.4.8-3.el7_4.1.
apr-devel-1.4.8-3.el7_4.1.i686.rpm apr-devel-1.4.8-3.el7_4.1.x86_64.rpm
[root@localhost Packages]# rpm -ivh apr-devel-1.4.8-3.el7_4.1.x86_64.rpm
警告:apr-devel-1.4.8-3.el7_4.1.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:apr-devel-1.4.8-3.el7_4.1 ################################# [100%]
[root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.
apr-util-devel-1.5.2-6.el7.i686.rpm apr-util-devel-1.5.2-6.el7.x86_64.rpm
[root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm
警告:apr-util-devel-1.5.2-6.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
错误:依赖检测失败:
expat-devel(x86-64) 被 apr-util-devel-1.5.2-6.el7.x86_64 需要
libdb-devel(x86-64) 被 apr-util-devel-1.5.2-6.el7.x86_64 需要
openldap-devel(x86-64) 被 apr-util-devel-1.5.2-6.el7.x86_64 需要
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh expat-devel-2.1.0-10.el7_3.x86_64.rpm
警告:expat-devel-2.1.0-10.el7_3.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:expat-devel-2.1.0-10.el7_3 ################################# [100%]
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh lib
Display all 2016 possibilities? (y or n)
[root@localhost Packages]# rpm -ivh libdb-devel-5.3.21-24.el7.x86_64.rpm
警告:libdb-devel-5.3.21-24.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:libdb-devel-5.3.21-24.el7 ################################# [100%]
[root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm
警告:apr-util-devel-1.5.2-6.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
错误:依赖检测失败:
openldap-devel(x86-64) 被 apr-util-devel-1.5.2-6.el7.x86_64 需要
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh openldap-devel-2.4.44-13.el7.x86_64.rpm
警告:openldap-devel-2.4.44-13.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
错误:依赖检测失败:
cyrus-sasl-devel(x86-64) 被 openldap-devel-2.4.44-13.el7.x86_64 需要
[root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm
警告:apr-util-devel-1.5.2-6.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
错误:依赖检测失败:
openldap-devel(x86-64) 被 apr-util-devel-1.5.2-6.el7.x86_64 需要
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh openldap-devel-2.4.44-20.el7.x86_64.rpm
错误:打开 openldap-devel-2.4.44-20.el7.x86_64.rpm 失败: 没有那个文件或目录
[root@localhost Packages]# rpm -ivh openldap-devel-2.4.44-13.el7.x86_64.rpm
警告:openldap-devel-2.4.44-13.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
错误:依赖检测失败:
cyrus-sasl-devel(x86-64) 被 openldap-devel-2.4.44-13.el7.x86_64 需要
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -ivh cyrus-sasl-devel-2.1.26-23.el7.x86_64.rpm
警告:cyrus-sasl-devel-2.1.26-23.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:cyrus-sasl-devel-2.1.26-23.el7 ################################# [100%]
[root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm
警告:apr-util-devel-1.5.2-6.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
错误:依赖检测失败:
openldap-devel(x86-64) 被 apr-util-devel-1.5.2-6.el7.x86_64 需要
[root@localhost Packages]# rpm -ivh openldap-devel-2.4.44-13.el7.x86_64.rpm
警告:openldap-devel-2.4.44-13.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:openldap-devel-2.4.44-13.el7 ################################# [100%]
[root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm
警告:apr-util-devel-1.5.2-6.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:apr-util-devel-1.5.2-6.el7 ################################# [100%]
[root@localhost Packages]# rpm -ivh apr-util-devel-1.5.2-6.el7.x86_64.rpm
警告:apr-util-devel-1.5.2-6.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
软件包 apr-util-devel-1.5.2-6.el7.x86_64 已经安装
[root@localhost Packages]# rpm -ivh httpd-
httpd-2.4.6-80.el7.centos.x86_64.rpm httpd-manual-2.4.6-80.el7.centos.noarch.rpm
httpd-devel-2.4.6-80.el7.centos.x86_64.rpm httpd-tools-2.4.6-80.el7.centos.x86_64.rpm
[root@localhost Packages]# rpm -ivh httpd-manual-2.4.6-80.el7.centos.noarch.rpm
警告:httpd-manual-2.4.6-80.el7.centos.noarch.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
软件包 httpd-manual-2.4.6-80.el7.centos.noarch 已经安装
[root@localhost Packages]# rpm -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm
警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
软件包 httpd-2.4.6-80.el7.centos.x86_64 已经安装
[root@localhost Packages]# rpm -ivh httpd-devel-2.4.6-80.el7.centos.x86_64.rpm
警告:httpd-devel-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:httpd-devel-2.4.6-80.el7.centos ################################# [100%]
[root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-80.el7.centos.x86_64.rpm
警告:httpd-tools-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
软件包 httpd-tools-2.4.6-80.el7.centos.x86_64 已经安装
[root@localhost Packages]#
检查:
[root@localhost Packages]# rmp -ivh httpd-
httpd-2.4.6-80.el7.centos.x86_64.rpm httpd-manual-2.4.6-80.el7.centos.noarch.rpm
httpd-devel-2.4.6-80.el7.centos.x86_64.rpm httpd-tools-2.4.6-80.el7.centos.x86_64.rpm
[root@localhost Packages]# rmp -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm
bash: rmp: 未找到命令...
相似命令是: 'rpm'
[root@localhost Packages]# rmp -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm
bash: rmp: 未找到命令...
相似命令是: 'rpm'
[root@localhost Packages]# rmp -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm
bash: rmp: 未找到命令...
相似命令是: 'rpm'
[root@localhost Packages]# rpm -ivh httpd-2.4.6-80.el7.centos.x86_64.rpm
警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
软件包 httpd-2.4.6-80.el7.centos.x86_64 已经安装
[root@localhost Packages]# rpm -ivh httpd-manual-2.4.6-80.el7.centos.noarch.rpm
警告:httpd-manual-2.4.6-80.el7.centos.noarch.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
软件包 httpd-manual-2.4.6-80.el7.centos.noarch 已经安装
[root@localhost Packages]# rpm -ivh httpd-devel-2.4.6-80.el7.centos.x86_64.rpm
警告:httpd-devel-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
软件包 httpd-devel-2.4.6-80.el7.centos.x86_64 已经安装
[root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-80.el7.centos.x86_64.rpm
警告:httpd-tools-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
软件包 httpd-tools-2.4.6-80.el7.centos.x86_64 已经安装
[root@localhost Packages]#
累趴…
升级与卸载
RPM包升级
-rpm -Uvh 包全名
- 选项
-U
(upgrade)升级- 若果没安装,则升级即安装
[root@localhost ~]# cd /mnt/cdrom/Packages/ [root@localhost Packages]# rpm -Uvh httpd-2.4.6-80.el7.centos.x86_64.rpm 警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY 准备中... ################################# [100%] 软件包 httpd-2.4.6-80.el7.centos.x86_64 已经安装 [root@localhost Packages]#
卸载
rpm -e 包名
- 选项:
-e
(erase) 卸载--nodeps
不检查依赖性(同样,实际生产环境————服务器上是不允许使用,必须解决依赖性)
- 因为会查找数据库(位置
/var/lib/rpm/
),使用不用使用包全名,而且在任何位置都可以执行卸载命令(不用注意路径, 而安装命令一定要进入/mnt/cdrom/Packages/
)
例子:
Last login: Wed Jan 23 17:59:27 2019 from 192.168.249.1
[root@localhost ~]# cd /mnt/cdrom/Packages/
[root@localhost Packages]# rpm -Uvh httpd-2.4.6-80.el7.centos.x86_64.rpm
警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
软件包 httpd-2.4.6-80.el7.centos.x86_64 已经安装
[root@localhost Packages]# ls /var/lib/rpm/
Basenames __db.001 __db.003 Group Name Packages Requirename Sigmd5
Conflictname __db.002 Dirnames Installtid Obsoletename Providename Sha1header Triggername
[root@localhost Packages]# ^C
[root@localhost Packages]# rpm -e httpd
错误:依赖检测失败:
httpd = 2.4.6-80.el7.centos 被 (已安裝) httpd-manual-2.4.6-80.el7.centos.noarch 需要
httpd = 2.4.6-80.el7.centos 被 (已安裝) httpd-devel-2.4.6-80.el7.centos.x86_64 需要
[root@localhost Packages]#
使用--nodeps
————这里只是演示
[root@localhost Packages]# rpm -e httpd --nodeps
[root@localhost Packages]# rpm -Uvh httpd-2.4.6-80.el7.centos.x86_64.rpm
警告:httpd-2.4.6-80.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:httpd-2.4.6-80.el7.centos ################################# [100%]
[root@localhost Packages]#
RPM包查询
查询是否安装
rpm -q 包名
# 查询包是否安装-q
(query) 查询
rpm -qa
# 查询所有已经安装的RPM包-a
(all) 所有
[root@localhost Packages]# rpm -q httpd
httpd-2.4.6-80.el7.centos.x86_64
[root@localhost Packages]# rpm -q onefine
未安装软件包 onefine
[root@localhost Packages]# rpm -qa # 列出所有安装的包,省略
...
利用管道符————一旦使用grep
,后面的就是正则表达式————推荐使用
[root@localhost Packages]# rpm -qa | grep httpd
httpd-manual-2.4.6-80.el7.centos.noarch
httpd-2.4.6-80.el7.centos.x86_64
httpd-tools-2.4.6-80.el7.centos.x86_64
httpd-devel-2.4.6-80.el7.centos.x86_64
[root@localhost Packages]#
查询软件包详细信息
rpm -qi 包名
- 选项:
-i
(information) 查询软件信息-p
(package) 查询未安装包信息
查询已安装包的信息:
[root@localhost Packages]# rpm -qi httpd
Name : httpd
Version : 2.4.6
Release : 80.el7.centos
Architecture: x86_64
Install Date: 2019年01月24日 星期四 00时13分06秒
Group : System Environment/Daemons
Size : 9817285
License : ASL 2.0
Signature : RSA/SHA256, 2018年04月25日 星期三 19时04分41秒, Key ID 24c6a8a7f4a80eb5
Source RPM : httpd-2.4.6-80.el7.centos.src.rpm
Build Date : 2018年04月21日 星期六 02时12分22秒
Build Host : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://httpd.apache.org/
Summary : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.
[root@localhost Packages]#
查询未安装包的信息(存在但没安装的包,此时跟包全名并且要注意位置————切换目录)
[root@localhost Packages]# pwd
/mnt/cdrom/Packages
[root@localhost Packages]# rpm -qip mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm
警告:mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
Name : mysql-connector-odbc
Version : 5.2.5
Release : 7.el7
Architecture: x86_64
Install Date: (not installed)
Group : System Environment/Libraries
Size : 428611
License : GPLv2 with exceptions
Signature : RSA/SHA256, 2018年04月25日 星期三 19时28分41秒, Key ID 24c6a8a7f4a80eb5
Source RPM : mysql-connector-odbc-5.2.5-7.el7.src.rpm
Build Date : 2018年04月11日 星期三 09时41分42秒
Build Host : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://dev.mysql.com/downloads/connector/odbc/
Summary : ODBC driver for MySQL
Description :
An ODBC (rev 3) driver for MySQL, for use with unixODBC.
[root@localhost Packages]#
查询包中文件的安装位置
rpm -ql 包名
- 选项
-l
(list) 列表-p
(package) 查询未安装包信息
[root@localhost Packages]# rpm -ql httpd
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d
...省略好多
RPM包默认安装位置
RPM包默认(习惯、推荐、常规)安装路径 | |
---|---|
/etc/ | 配置文件安装目录 |
/usr/bin/ | 可执行的命令安装目录 |
/usr/lib/ | 程序所使用的函数库保存位置 |
/usr/share/doc/ | 基本的软件使用手册保存位置 |
/usr/share/man/ | 帮助文件保存位置 |
这是包安装的推荐位置,但是实际上不一定,这取决与写包的作者的安排。正是因为这样,所以才有RPM包的卸载命令。下面的实践就更好理解了。
查询未安装包的默认安装(还没装,但安装之后会在的位置)位置(存在但没安装的包,此时跟包全名并且要注意位置————切换目录)
[root@localhost Packages]# pwd
/mnt/cdrom/Packages
[root@localhost Packages]# rpm -qlp mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm
警告:mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
/usr/lib64/libmyodbc5.so
/usr/lib64/libmyodbc5w.so
/usr/share/doc/mysql-connector-odbc-5.2.5
/usr/share/doc/mysql-connector-odbc-5.2.5/COPYING
/usr/share/doc/mysql-connector-odbc-5.2.5/ChangeLog
/usr/share/doc/mysql-connector-odbc-5.2.5/README
/usr/share/doc/mysql-connector-odbc-5.2.5/README.debug
[root@localhost Packages]#
查询系统文件属于哪个RPM包
rpm -qf 系统文件名
- 选项:
-f
(file) 查询系统文件属于哪个安装包
[root@localhost Packages]# rpm -qf /etc/httpd/conf.d
httpd-2.4.6-80.el7.centos.x86_64
[root@localhost Packages]#
来捣乱:
[root@localhost Packages]# rpm -qf onefine
错误:文件 /mnt/cdrom/Packages/onefine:没有那个文件或目录
[root@localhost Packages]# touch abc
touch: 无法创建"abc": 只读文件系统
[root@localhost Packages]# touch /home/onefine/hahaha
[root@localhost Packages]# ls -al /home/onefine/
总用量 12
drwx------. 3 onefine onefine 92 1月 24 01:24 .
drwxr-xr-x. 3 root root 21 1月 23 17:45 ..
-rw-r--r--. 1 onefine onefine 18 4月 11 2018 .bash_logout
-rw-r--r--. 1 onefine onefine 193 4月 11 2018 .bash_profile
-rw-r--r--. 1 onefine onefine 231 4月 11 2018 .bashrc
-rw-r--r--. 1 root root 0 1月 24 01:24 hahaha
drwxr-xr-x. 4 onefine onefine 39 1月 23 17:33 .mozilla
[root@localhost Packages]# rpm -qf /home/onefine/hahaha
文件 /home/onefine/hahaha 不属于任何软件包
[root@localhost Packages]# rm /home/onefine/hahaha
rm:是否删除普通空文件 "/home/onefine/hahaha"?y
[root@localhost Packages]# ls -al /home/onefine/
总用量 12
drwx------. 3 onefine onefine 78 1月 24 01:26 .
drwxr-xr-x. 3 root root 21 1月 23 17:45 ..
-rw-r--r--. 1 onefine onefine 18 4月 11 2018 .bash_logout
-rw-r--r--. 1 onefine onefine 193 4月 11 2018 .bash_profile
-rw-r--r--. 1 onefine onefine 231 4月 11 2018 .bashrc
drwxr-xr-x. 4 onefine onefine 39 1月 23 17:33 .mozilla
[root@localhost Packages]#
所以,这个文件必须是由RPM包安装的,才能方向追踪所属的包————'系统文件名’的意思。
再来:已知未安装包将来的位置。。查这个不存在的文件会怎么样?以上面的MySQL为例
[root@localhost Packages]# rpm -qf /usr/lib64/libmyodbc5w.so
错误:文件 /usr/lib64/libmyodbc5w.so:没有那个文件或目录
[root@localhost Packages]#
[root@localhost Packages]# rpm -qf #/usr/lib64/libmyodbc5w.so
错误:文件 /usr/lib64/libmyodbc5w.so:没有那个文件或目录
[root@localhost Packages]# rpm -qfp /usr/lib64/libmyodbc5w.so # 当然了,这是错误的
rpm:每次仅能执行一种类型的查询/检验
[root@localhost Packages]#
查询软件包的依赖性
rpm -qR 包名
- 选项:
-R
(requires) 查询软件包的依赖性-p
(package) 查询未安装包的信息
[root@localhost Packages]# rpm -qR httpd
/etc/mime.types
system-logos >= 7.92.1-1
httpd-tools = 2.4.6-80.el7.centos
/usr/sbin/useradd
/usr/sbin/groupadd
systemd-units
systemd-units
systemd-units
/bin/sh
/bin/sh
/bin/sh
/bin/sh
/bin/sh
/bin/sh
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(FileCaps) <= 4.6.1-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
/bin/sh
libapr-1.so.0()(64bit)
libaprutil-1.so.0()(64bit)
libcrypt.so.1()(64bit)
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libdb-5.3.so()(64bit)
libdl.so.2()(64bit)
libexpat.so.1()(64bit)
liblua-5.1.so()(64bit)
libm.so.6()(64bit)
libpcre.so.1()(64bit)
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
libselinux.so.1()(64bit)
libsystemd-daemon.so.0()(64bit)
libsystemd-daemon.so.0(LIBSYSTEMD_DAEMON_31)(64bit)
libz.so.1()(64bit)
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1
[root@localhost Packages]#
列出所有所有所有……如果要查看包的依赖去安装包,这个意义不大,还不如直接安装,安装提示安装缺失的依赖。
[root@localhost Packages]# pwd
/mnt/cdrom/Packages
[root@localhost Packages]# rpm -qR mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm
未安装软件包 mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm
[root@localhost Packages]# rpm -qRp mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm
警告:mysql-connector-odbc-5.2.5-7.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
/sbin/ldconfig
/sbin/ldconfig
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libdl.so.2()(64bit)
libdl.so.2(GLIBC_2.2.5)(64bit)
libm.so.6()(64bit)
libmysqlclient.so.18()(64bit)
libmysqlclient.so.18(libmysqlclient_18)(64bit)
libodbc.so.2()(64bit)
libodbcinst.so.2()(64bit)
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
rpmlib(PayloadIsXz) <= 5.2-1
[root@localhost Packages]#
RPM包校验
RPM包校验
rpm -V 已安装的包名
- 选项:
-V
(verify) 校验指定RPM包中的文件
[root@localhost ~]# rpm -V httpd
[root@localhost ~]# pwd
/root
[root@localhost ~]# rpm -ql httpd | more
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d
/etc/httpd/conf.modules.d/00-base.conf
/etc/httpd/conf.modules.d/00-dav.conf
/etc/httpd/conf.modules.d/00-lua.conf
/etc/httpd/conf.modules.d/00-mpm.conf
/etc/httpd/conf.modules.d/00-proxy.conf
/etc/httpd/conf.modules.d/00-systemd.conf
/etc/httpd/conf.modules.d/01-cgi.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/httpd/logs
/etc/httpd/modules
/etc/httpd/run
/etc/logrotate.d/httpd
/etc/sysconfig/htcacheclean
/etc/sysconfig/httpd
/run/httpd
/run/httpd/htcacheclean
/usr/lib/systemd/system/htcacheclean.service
/usr/lib/systemd/system/httpd.service
/usr/lib/tmpfiles.d/httpd.conf
/usr/lib64/httpd
/usr/lib64/httpd/modules
/usr/lib64/httpd/modules/mod_access_compat.so
/usr/lib64/httpd/modules/mod_actions.so
/usr/lib64/httpd/modules/mod_alias.so
/usr/lib64/httpd/modules/mod_allowmethods.so
/usr/lib64/httpd/modules/mod_asis.so
/usr/lib64/httpd/modules/mod_auth_basic.so
/usr/lib64/httpd/modules/mod_auth_digest.so
/usr/lib64/httpd/modules/mod_authn_anon.so
/usr/lib64/httpd/modules/mod_authn_core.so
/usr/lib64/httpd/modules/mod_authn_dbd.so
/usr/lib64/httpd/modules/mod_authn_dbm.so
/usr/lib64/httpd/modules/mod_authn_file.so
/usr/lib64/httpd/modules/mod_authn_socache.so
/usr/lib64/httpd/modules/mod_authz_core.so
/usr/lib64/httpd/modules/mod_authz_dbd.so
/usr/lib64/httpd/modules/mod_authz_dbm.so
/usr/lib64/httpd/modules/mod_authz_groupfile.so
--More-- # 后面的省略
...
# ...修改/etc/httpd/conf/httpd.conf文件
[root@localhost ~]# vi /etc/httpd/conf/httpd.conf
# ...添加下面一句话
# 你被改了你知道不
# ...省略其他
# ...保存退出后
[root@localhost ~]# rpm -V httpd
S.5....T. c /etc/httpd/conf/httpd.conf
# ...修改回来
[root@localhost ~]# vi /etc/httpd/conf/httpd.conf
# ...修改回来之后
[root@localhost ~]# rpm -V httpd
.......T. c /etc/httpd/conf/httpd.conf
[root@localhost ~]#
验证内容中的8个信息的具体内容(依次)如下:
S
文件大小是否改变M
文件的类型或文件的权限(rwx)是否被改变5
文件的MD5校验和是否改变(可以看成文件内容是否改变)D
设备的主从代码是否改变L
文件的路径是否改变U
文件的属主(所有者)是否改变G
文件的属组是否改变T
文件的修改时间是否改变
文件类型
c
(config file) 配置文件d
(documentation) 普通文件g
(ghost file) "鬼"文件,很少见,就是该文件不应该被这个RPM所包含L
(license file) 授权文件r
(read me) 描述文件
RPM包中文件提取
rpm2cpio 包全名 | cpio -idv .文件绝对路径
rpm2cpio
将rpm包转换为cpio格式的命令- 2谐音to,就是将rpm格式的包转换成cpio格式的包
cpio
是一个标准工具,它用于创建软件归档文件和从档案文件中提取文件cpio
并不知道我们所要提取的文件的位置在哪,
cpio
命令的完整格式:cpio 选项 <[文件|设备]
- 选项:
-i
copy-in模式,还原-d
还原时自动新建目录-v
显示还原过程
- 选项:
[root@localhost ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
[root@localhost ~]# ls -al /tmp/
总用量 936
drwxrwxrwt. 16 root root 4096 1月 24 10:32 .
dr-xr-xr-x. 17 root root 224 1月 23 17:45 ..
-rw-r--r--. 1 root root 1149 1月 23 17:49 anaconda.log
drwx------. 2 root root 20 1月 23 17:55 .esd-0
drwx------. 2 root root 25 1月 23 17:57 firefox_root
drwxrwxrwt. 2 root root 6 1月 23 17:35 .font-unix
drwxr-xr-x. 2 root root 18 1月 23 17:35 hsperfdata_root
drwxrwxrwt. 2 root root 42 1月 23 17:55 .ICE-unix
-rw-r--r--. 1 root root 415 1月 23 17:49 ifcfg.log
-rwx------. 1 root root 836 1月 23 17:46 ks-script-L9LDqY
-rw-r--r--. 1 root root 0 1月 23 17:49 packaging.log
-rw-r--r--. 1 root root 0 1月 23 17:49 program.log
-rw-r--r--. 1 root root 0 1月 23 17:49 sensitive-info.log
drwx------. 2 root root 24 1月 23 17:55 ssh-2uFxXSQ6gkGr
-rw-r--r--. 1 root root 0 1月 23 17:49 storage.log
drwx------. 3 root root 17 1月 23 17:54 systemd-private-7e3b8f68675b40e9897b290377d43299-colord.service-aG1lXN
drwx------. 3 root root 17 1月 23 17:54 systemd-private-7e3b8f68675b40e9897b290377d43299-cups.service-3UD9lx
drwx------. 3 root root 17 1月 23 17:54 systemd-private-7e3b8f68675b40e9897b290377d43299-rtkit-daemon.service-nv9Cuu
drwxrwxrwt. 2 root root 6 1月 23 17:35 .Test-unix
drwx------. 2 root root 6 1月 23 17:55 tracker-extract-files.0
drwx------. 2 root root 6 1月 23 17:49 vmware-root
-r--r--r--. 1 root root 11 1月 23 17:54 .X0-lock
drwxrwxrwt. 2 root root 16 1月 23 17:54 .X11-unix
drwxrwxrwt. 2 root root 6 1月 23 17:35 .XIM-unix
-rw-------. 1 root root 0 1月 23 17:32 yum.log
-rw-------. 1 root root 466361 1月 23 17:57 yum_save_tx.2019-01-23.17-57.TSYLg6.yumtx
-rw-------. 1 root root 469566 1月 24 09:45 yum_save_tx.2019-01-24.09-45.UL5IOq.yumtx
[root@localhost ~]# mv /bin/ls /tmp/
[root@localhost ~]# ls -al /tmp/
-bash: /usr/bin/ls: 没有那个文件或目录
[root@localhost ~]# ls
-bash: /usr/bin/ls: 没有那个文件或目录
[root@localhost ~]#
这时,假如是误操作导致ls
找不到,可以找到另一台Linux,把缺失的命令文件找出来复制,但要保证版本号和缺失的一致。额,要是mv
也丢了呢?这时可以通过RPM包中提取文件的方法:
我们知道所有的文件RPM包安装得到的,所有的系统文件,重要文件等都在RPM包当中。此时可以把丢失文件所在的RPM包打开,从里面提取出所需要的RPM命令,这就是所谓RPM包文件提取。当然了,从新安装缺失文件所在RPM包也可以解决问题。
[root@localhost ~]# rpm -qf /bin/ls
coreutils-8.22-21.el7.x86_64
[root@localhost ~]# ls
-bash: /usr/bin/ls: 没有那个文件或目录
# 还原ls
[root@localhost ~]# mv /tmp/ls /bin/
[root@localhost ~]# ls -al /bin/ls
-rwxr-xr-x. 1 root root 117672 4月 11 2018 /bin/ls
# 实验从这里开始
# 查询ls命令属于哪个软件包
[root@localhost ~]# rpm -qf /bin/ls
coreutils-8.22-21.el7.x86_64
# 移走ls,造成ls命令误删除假象
[root@localhost ~]# mv /bin/ls /tmp/
# 提取RPM包中ls命令到当前目录的/bin/ls下
[root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.22-21.el7.x86_64.rpm | cpio -idv ./bin/ls
28594 块
[root@localhost ~]# pwd
/root
[root@localhost ~]# cp /root/bin/ls /bin/
cp: 无法获取"/root/bin/ls" 的文件状态(stat): 没有那个文件或目录
[root@localhost ~]# ls
-bash: /usr/bin/ls: 没有那个文件或目录
[root@localhost ~]# cp /root/
anaconda-ks.cfg .bashrc .dbus/ .local/ 模板/ 下载/
.bash_history .cache/ .esd_auth .mozilla/ 视频/ 音乐/
.bash_logout .config/ .ICEauthority .tcshrc 图片/ 桌面/
.bash_profile .cshrc initial-setup-ks.cfg 公共/ 文档/
[root@localhost ~]# dir
anaconda-ks.cfg initial-setup-ks.cfg 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@localhost ~]# find / -name 'ls'
/tmp/ls
[root@localhost ~]#
好郁闷呐,找了半天最终还是找出来了:
# 提取RPM包中ls命令到当前目录的/usr/bin/ls下
# rpm2cpio是说把RPM包/mnt/cdrom/Packages/coreutils-8.22-21.el7.x86_64.rpm的数据转换为cpio格式的。
# cpio -idv ./usr/bin/ls 是说cpio知道了要从/mnt/cdrom/Packages/coreutils-8.22-21.el7.x86_64.rpm中提取数据——/usr/bin/ls,`.`表示从把/usr/bin/ls这个文件提取到当前所在目录下
# 参数`-d`表示自动新建目录,所以提取的文件ls会保存在当前目录下的/usr/bin/目录下
# 管道符的作用是将第一个命令的结果作为第二个命令的操作对象
[root@localhost ~]# rpm2cpio /mnt/cdrom/Packages/coreutils-8.22-21.el7.x86_64.rpm | cpio -idv ./usr/bin/ls
./usr/bin/ls
28594 块
[root@localhost ~]# dir
anaconda-ks.cfg initial-setup-ks.cfg usr 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@localhost ~]# dir ./usr/bin/
ls
# 把ls命令复制回/bin/目录,修复文件丢失
[root@localhost ~]# cp ./usr/bin/ls /bin/
[root@localhost ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg usr 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@localhost ~]# rm -rf ./usr
[root@localhost ~]# ls
anaconda-ks.cfg initial-setup-ks.cfg 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@localhost ~]#
注:./usr
是当前目录下的usr文件夹,是相对路径。/usr
是根目录下的usr文件夹,是绝对路径。.
千万不能省略,代表缺失文件要保存在命令执行时所在的当前目录的位置。
但这是什么原因呢?查看一下ls命令所在RPM包的默认安装位置:
[root@localhost /]# pwd
/
[root@localhost /]# rpm -ql coreutils
/etc/DIR_COLORS
/etc/DIR_COLORS.256color
/etc/DIR_COLORS.lightbgcolor
/etc/profile.d/colorls.csh
/etc/profile.d/colorls.sh
/usr/bin/[
...
/usr/bin/ls # 前后被省略
...
[root@localhost /]#
恍然大悟。。。
更多推荐
所有评论(0)