目录
以下是讲如何在Linux字符界面下安装软件。
1、软件包管理简介
linux中的软件安装包分为:源码包和二进制包(RPM包,系统默认包)。
①、源码包
源码包的优点是:
- 开源,如果有足够的能力,可以修改源代码
- 可以自由选择所需的功能
- 软件是编译安装,所以更加适合自己的系统,更加稳定有效
- 卸载方便
源码包的缺点是:
- 安装过程步骤较多,尤其安装较大的软件集合时(如LAMP(linux+apache+mysql+php)环境搭建),容易出错
- 编译过程时间较长,安装比二进制安装时间长
- 因为是编译安装,安装过程中一旦报错新手很难解决,不适合linux的初学者
②、RPM包
红帽系的linux系统(如centos,fedora,suse等)一般用RPM,Debian系的linux系统(如ubuntu,B2D等)则是采用dpkg机制。
RPM包是一种二进制安装包:
- 优点:使用简单,只需要几个命令就可以实现包的安装、升级、查询、卸载;安装速度快;
- 缺点:不能看源代码;功能选择不如源代码灵活;依赖性;
③、脚本安装包
所谓的脚本安装包,就是把复杂的软件包安装过程写成了程序脚本,初学者可以执行程序脚本实现一键安装。但实际安装的还是源码包和二进制包
- 优点:安装简单,快捷
- 缺点:完全丧失了自定义性
2、rpm命令管理
①、RPM包的来源
RPM包在系统光盘中
②、RPM包的命名规则
httpd-2.4.6-67.el7.centos.x86_64.rpm
httpd 软件包名
2.4.6 软件版本
67 软件发行的次数
el7.centos 适合的linux平台
x86_64 适合的硬件平台
rpm rpm包扩展名
③、RPM包的依赖性
- 树形依赖:a->b->c
- 环形依赖:a->b->c->a
- 模块依赖:*.so.2等库函数文件等,会藏身于某个rpm软件包中,查询网站:www.rpmfind.net
④、包全名与包名
- 包全名:操作的是没有安装的软件包时,使用包全名。而且要注意路径
- 包名:操作已经安装的软件包时,使用包名,是搜索/var/lib/rpm/中的数据库,不用注意路径
⑤、RPM安装
rpm -ivh 包全名
选项:
-i(install): 安装
-v(verbose): 显示详细信息
-h(hash) : 显示安装进度
--nodeps : 不检测依赖性(不推荐使用,即使能安装成功,有属性依赖的软件也无法正常使用)
⑥、升级与卸载
升级命令为:
rpm -Uvh 包全名
选项:
-U(upgrade)升级
卸载命令为:(RPM包安装时会依据原作者的设置将文件安装到系统的各个目录中,如果手动去删除,简直要命,因此为了方便卸载,linux给出了卸载RPM包的卸载命令)
rpm -e 包名
选项:
-e(erase)卸载
--nodeps 不检测依赖性(真正的工作中同样不推荐使用)
⑦、RPM包的查询
yum方法是不支持RPM包的查询,因此学习RPM包的查询命令很有必要。
1):查询是否安装
rm -q 包名
#查询包是否安装(query是查询的意思)
rpm -qa
#查询所有已经安装的RPM包(all表示所有)
实例:
2)查询软件包详细信息
rpm -qi 包名
选项:
-i: 查询软件信息(information)
-p: 查询未安装包信息(package)
实例1:查询已安装的软件包的信息
实例2:查询未安装的软件包信息
3)查询包中文件的安装位置
rpm -ql 包名
选项:
-l: 列表(list)
-p: 查询未安装包信息(package)
实例:查看apache软件的文件的安装位置
4)查询系统文件属于哪个RPM包
rpm -qf 系统文件名
选项:
-f: 查询系统文件属于哪个软件安装包(file)
实例:查询/etc/httpd/conf/httpd.conf文件属于哪个安装包
5)查询软件包的依赖性
rpm -qR 包名
选项:
-R: 查询软件包的依赖性(requires)
-p: 查询未安装包信息(package)
⑧、RPM包校验
校验 (Verify) 的功能主要在于提供系统管理员一个有用的管理机制!作用的方式是『使用 /var/lib/rpm底下的数据库内容来比对目前 Linux 系统的环境下的所有软件文件 』也就是说,当你有数据不小心遗失, 或者是因为你误杀了某个软件的文件,或者是不小心不知道修改到某一个软件的文件内容, 就用这个简单的方法来验证一下原本的文件系统吧!好让你了解这一阵子到底是修改到哪些文件数据了!验证的方式很简单:
rpm -V 已安装的包名
选项:
-V: 校验指定的RPM包中的文件(verify)(会列出被修改过的该软件的文档名及路径)
rpm -Vp 某个RPM文件的文件名
rpm -Vf 在系统上面的某个文件
rpm -Va 列出系统上面所有可能被更改过的文件
例子:验证httpd服务的软件文档是否被修改过
首先,直接使用rpm -V httpd,发现没有任何结果:(这表明httpd的所有文件都未被更改过)然后vi /etc/httpd/conf/httpd.conf,在此文件的注释行加上一些内容(加上abc),
然后使用rpm -V httpd,结果为:
这表示,此文件被改动过了。其中具体的字母表示的意思如下:
字母 | 含义 |
S | 文件大小是否改变 |
M | 文件的类型或文件的权限(rwx)是否被改变 |
5 | 文件MD5校验和是否被改变(可以看成文件内容是否改变) |
D | 设备的主从代码是否改变 |
L | 文件路径是否改变 |
U | 文件的属主(所有者)是否改变 |
G | 文件的属组是否改变 |
T | 文件的修改时间是否改变 |
P | 功能已经被改变 |
因此从rpm -V httpd命令的结果来看,该文件的大小,内容,文件的修改时间都被改变了,没有被改变的属性会用"."来代替。而其中的"c"代表文件类型是配置文件。具体的文件类型有:
字母 | 含义 |
c | 配置文件(config file) |
d | 普通文件(documentation) |
g | “鬼”文件(ghost file),很少见,就是该文件不应该被这个RPM包包含 |
L | 授权文件(License file) |
r | 描述文件(read me) |
经过验证的功能,你就可以知道那个文件被更动过。那么如果该文件的变更是『预期中的』, 那么就没有什么大问题,但是如果该文件是『非预期的』,那么是否被入侵了呢?呵呵!得注意注意啰!一般来说,配置文件 (configure) 被更动过是很正常的,万一你的 binary program 被更动过呢? 那就得要特别特别小心啊!
⑨、RPM包文件提取
rmp2cpio 包全名 | cpio -idv .文件绝对路径
-rpm2cpio
#将rpm包转换为cpio格式的命令
-cpio
#是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件
cpio 选项 < [文件|设备]
选项:
-i: copy-in模式,还原
-d: 还原时自动创建目录
-v: 显示还原过程
实例:提取/bin/ls文件的方法
rpm -qf /bin/ls
#查询ls命令属于哪个软件包
mv /bin/ls /tmp/
#造成ls命令误删除假象
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-47.el6.x86_64.rpm | cpio -idv ./bin/ls
#提取RPM包中的ls命令道当前目录的/bin/ls下
cp /root/bin/ls /bin/
#把ls命令复制到/bin/目录,修复丢失的ls文件
经过以上命令后提取的ls问价结果如下:(这个技巧还是很重要的,尤其是在某些系统命令文件被误删除的情况下)