1.软件管理机制
使用Tarball安装软件会带来一个很麻烦的问题,编译安装软件非常复杂,而且管理软件非常的不方便,由此人们想到了一种更方便的软件管理机制:由软件提供者在与使用者相同的环境下编译好软件,直接提供二进制码,使用者下载后就可以直接安装,而利用在线管理机制(yum或者apt)可以直接下载安装该软件所需要的其他库和软件。这样安装过程就变得简单,而且软件管理机制包含一个软件的资料库,方便卸载,更新等操作。
现在有两种主流的软件管理机制,分别是redhat的RPM(yum)和Debian的DPKG(apt)
RPM包是在特定环境下编译好的安装文件,环境差异可能导致无法安装,另外还有SRPM这个东西,里面有源码,需要自己编译成RPM文件,然后再安装,它也可以享受RPM文件管理的待遇
2.RPM
RPM安装程序时,会先去读取文件内记载的设定参数内容,然后将该资料用来比对 Linux 系统的环境,以找出是否有属性相依的软体尚未安装的问题(利用yum可自动解决软件的依赖问题)。
若环境检查合格了,那么 RPM 档案就开始被安装到你的 Linux 系统上。安装完毕后,该软体相关的资讯就会被写入 /var/lib/rpm/ 目录下的资料库档案中了,这个目录下的文件很重要,rpm管理软件就是靠里面的信息。
那RPM安装的文件会在哪里呢,一般来说会在下面的文件夹下:
/etc 一些设定档放置的目录,例如 /etc/crontab
/usr/bin 一些可执行档案
/usr/lib 一些程式使用的动态函式库
/usr/share/doc 一些基本的软体使用手册与说明档
/usr/share/man 一些 man page 档案
RPM 安装 (install):
- [root@www ~]# rpm -ivh package_name
- 选项与参数:
- -i :install 的意思
- -v :察看更细部的安装资讯画面
- -h :以安装资讯列显示安装进度
还有一些参数:
RPM 升级与更新 (upgrade/freshen)
-Uvh 后面接的软体即使没有安装过,则系统将予以直接安装; 若后面接的软体有安装过旧版,则系统自动更新至新版;
-Fvh 如果后面接的软体并未安装到你的 Linux 系统上,则该软体不会被安装;亦即只有已安装至你 Linux 系统内的软体会被‘升级’!
不过在yum存在的情况下用处似乎不大啊,呵呵
RPM 查询 (query)
RPM 在查询的时候,其实查询的地方是在 /var/lib/rpm/ 这个目录下的资料库档案啦!另外, RPM 也可以查询未安装的 RPM 档案内的资讯
- [root@www ~]# rpm -qa <==已安装软体
- [root@www ~]# rpm -q[licdR] 已安装的软体名称 <==已安装软体
- [root@www ~]# rpm -qf 存在于系统上面的某个档名 <==已安装软体
- [root@www ~]# rpm -qp[licdR] 未安装的某个档案名称 <==查阅RPM档案
- 选项与参数:
- 查询已安装软体的资讯:
- -q :仅查询,后面接的软体名称是否有安装;
- -qa :列出所有的,已经安装在本机 Linux 系统上面的所有软体名称;
- -qi :列出该软体的详细资讯 (information),包含开发商、版本与说明等;
- -ql :列出该软体所有的档案与目录所在完整档名 (list);
- -qc :列出该软体的所有设定档 (找出在 /etc/ 底下的档名而已)
- -qd :列出该软体的所有说明档 (找出与 man 有关的档案而已)
- -qR :列出与该软体有关的相依软体所含的档案 (Required 的意思)
- -qf :由后面接的档案名称,找出该档案属于哪一个已安装的软体;
- 查询某个 RPM 档案内含有的资讯:
- -qp[icdlR]:注意 -qp 后面接的所有参数以上面的说明一致。但用途仅在于找出
- 某个 RPM 档案内的资讯,而非已安装的软体资讯!注意!
RPM 验证与数字签名 (Verify/signature)
验证 (Verify) 的功能主要在于提供系统管理员一个有用的管理机制!作用的方式是‘使用 /var/lib/rpm 底下的资料库内容来比对目前 Linux 系统的环境下的所有软体档案 ’也就是说,当你有资料不小心遗失, 或者是因为你误杀了某个软体的档案,或者是不小心不知道修改到某一个软体的档案内容, 就用这个简单的方法来验证一下原本的档案系统吧!好让你�t解这一阵子到底是修改到哪些档案资料了!
- [root@www ~]# rpm -Va
- [root@www ~]# rpm -V 已安装的软体名称
- [root@www ~]# rpm -Vp 某个 RPM 档案的档名
- [root@www ~]# rpm -Vf 在系统上面的某个档案
- 选项与参数:
- -V :后面加的是软体名称,若该软体所含的档案被更动过,才会列出来;
- -Va :列出目前系统上面所有可能被更动过的档案;
- -Vp :后面加的是档案名称,列出该软体内可能被更动过的档案;
- -Vf :列出某个档案是否被更动过~
改动的选项:
数字签名就是公钥私钥的问题。
RPM 卸载与重建资料库 (erase/rebuilddb)
卸载软件时注意依赖关系的问题,如果软件A依赖B,不要直接卸载B。
格式:rpm -e 软件名
由于 RPM 档案常常会安装/移除/升级等,某些动作或许可能会导致 RPM 资料库 /var/lib/rpm/ 内的档案破损。果真如此的话,那你该如何是好?别担心,我们可以使用 --rebuilddb 这个选项来重建一下资料库喔! 作法如下:
rpm --rebuilddb
3.yum
CentOS 先将释出的软体放置到YUM服务器内,然后分析这些软体的相依属性问题,将软体内的记录资讯写下来 (header)。 然后再将这些资讯分析后记录成软体相关性的清单列表。这些列表资料与软体所在的位置可以称呼为容器 (repository)。 当用户端有软体安装的需求时,用户端主机会主动的向网路上面的 yum 伺服器的容器网址下载清单列表, 然后透过清单列表的资料与本机 RPM 资料库已存在的软体资料相比较,就能够一口气安装所有需要的具有相依属性的软体了。
当用户端有升级、安装的需求时, yum 会向容器要求清单的更新,等到清单更新到本机的 /var/cache/yum 里面后, 等一下更新时就会用这个本机清单与本机的 RPM 资料库进行比较,这样就知道该下载什么软体。接下来 yum 会跑到容器伺服器 (yum server) 下载所需要的软体,然后再透过 RPM 的机制开始安装软体
yum 查询功能
- [root@www ~]# yum [option] [查询工作项目] [相关参数]
- 选项与参数:
- [option]:主要的选项,包括有:
- -y :当 yum 要等待使用者输入时,这个选项可以自动提供 yes 的回应;
- --installroot=/some/path :将该软体安装在 /some/path 而不使用预设路径
- [查询工作项目] [相关参数]:这方面的参数有:
- search :搜寻某个软体名称或者是描述 (description) 的重要关键字;
- list :列出目前 yum 所管理的所有的软体名称与版本,有点类似 rpm -qa;
- info :同上,不过有点类似 rpm -qai 的执行结果;
- provides:从档案去搜寻软体!类似 rpm -qf 的功能!
安装/升级功能:
- [root@www ~]# yum [option] [查询工作项目] [相关参数]
- 选项与参数:
- install :后面接要安装的软体!
- update :后面接要升级的软体,若要整个系统都升级,就直接 update 即可
卸载功能:
yum remove 软件
yum的配置文件(默认在/etc/yum.repos.d/中)
- [root@www ~]# vi /etc/yum.repos.d/CentOS-Base.repo
- [base]
- name=CentOS-$releasever - Base
- mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
- #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
- gpgcheck=1
- gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-5
上面的资料需要注意的是:
yum repolist all命令可以查看使用的容器状态
有时候修改yum的配置文件会造成本机的清单与 yum 伺服器的清单不同步的问题,此时需要清除掉本机上面的旧资料。
- [root@www ~]# yum clean [packages|headers|all]
- 选项与参数:
- packages:将已下载的软体档案删除
- headers :将下载的软体档头删除
- all :将所有容器资料都删除!
yum 的软件群组功能:
安装大型的软件集合,比如KDE,非常方便
- [root@www ~]# yum [群组功能] [软体群组]
- 选项与参数:
- grouplist :列出所有可使用的‘套件组’,例如 Development Tools 之类的;
- groupinfo :后面接 group_name,则可�t解该 group 内含的所有套件名;
- groupinstall:这个好用!可以安装一整组的套件群组,相当的不错用!
- groupremove :移除某个套件群组;
全系统自动升级:
- [root@www ~]# vim /etc/crontab
- ....(前面省略并保留设定值)....
- 0 3 * * * root /usr/bin/yum -y update
-y选项自动输入yes