16.RPM包简说并利用rpm -qf 找回系统命令
简要概括
centos的软件包分为源码包和二进制包(RPM包,系统默认包)
源码包的优点是开源,可以修改源代码,可以自由选择所需的功能。源码包的软件是编译安装,所以更加适合自己的系统,更加稳定效率也更高。重点是卸载非常方便,直接删除该软件的安装目录即可。
相对来说,二进制包的安装与卸载都较为麻烦,因为软件包的依赖性。而且功能选择不如源码包灵活。
RPM包依赖性——1.树形依赖:a->b->c
2.环形依赖:a->b->c->a
3.模块依赖:模块依赖查询网站:www.rpmfind.net
rpm包用法
-i --install
-v print verbose information
-h --hash print 50 hash marks
-U --upgrade 升级软件包
rpm -ivh+包全名 安装
rpm -Uvh+包全名 升级
-e --erase 删除软件包
rpm -e+包名 卸载
-q --query -qa --all 查询所有已安装软件包
rpm -q+包名 查询是否安装
-qc --configfiles 查询软件包的配置文件
-qd docfiles 查询软件包帮助
-qf --file 查询某个文件属于哪个软件包
-qi --info 查询软件包详细信息
--scripts 查询安装软件包后执行哪些脚本
-R --requires 查询软件的依赖
rpm -qR+包名 查询软件包的依赖性
-p可查询为安装包的信息
用ls命令做测试,尝试命如果令丢失利用安装包进行找回。

首先通过找到ls的安装包

mv /bin/ls /tmp //将/bin/ls移动到/tmp下,假装ls命令丢失
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4.46.el6.i686.rpm | cpio -idv ./bin/ls //找到ls的安装包并提取/bin/ls

啊哦,失败,并且找不到ls命令了==
于是重新安装coreutils软件包,还好找回来了==

但是,刚刚为什么会失败呢,分析错误,原来是刚刚命令执行的目录不对,./bin表示在当前目录下创建bin/ls,但是当前目录是Packages,Packages是刚刚挂载的只读文件系统,不可创建目录。

重新执行刚刚的步骤,在root的家目录下执行命令,成功

用dir命令查看,可以看到确实在root的家目录下新建了bin

将/root/bin/ls复制到/bin下,成为真正的/bin/ls
