linux软件包管理,rpm和yum

linux软件包管理有rpm和yum,两者要结合使用(rpm用来检测软件,yum用来安装,升级,卸载)

RPM 软件包的一个例子:

sudo-1.7.2pl-5.el5.i386.rpm

其中包括软件名(sudo),版本号(1.7.2pl),发行号(5.el5),和硬件平台(i386)。

(1)卸载

$rpm -e sudo

注意:如果其它软件包有依赖关系,卸载时会产生提示信息,可使用–nodeps 强行卸

载。

$ rpm -e –nodeps 软件名忽略依赖关系

(2)安装

$rpm -ivh sudo-1.7.2pl-5.el5.i386.rpm

挂载光盘:

1.创建挂载点mkdir /mnt/cdrom

2.挂载mount 设备挂载点

$ mount /dev/cdrom /mnt/cdrom

$ cd /mnt/cdrom

–excludedocs 不安装帮助文档

rpm -ivh –excludedocs 软件包

–prefix=PATH 将软件安装到PATH 指定的路径下。(90%不能该路径,取决于作者)

rpm -ivh –prefix=路径软件包

–test 只对安装进行测试,并不实际安装。

–replacepkgs (软件包已被安装)

rpm -ivh –replacepkgs 软件包覆盖安装,进行之前备份配置文件

–replacefiles 忽略错误信息(一个文件已在安装其他软件包时安装,发生文件

冲突时用)

–nodeps 强行安装(未安装依赖包时)

RPM 源包:/mnt/cdrom/CentOS/

(3)查询:

rpm -q 软件名rpm -qa | grep 软件名

$ rpm -q sudo

$ rpm -q vim 无结果

$ rpm -qa | grep vim

-a 查询所有已安装的软件包

-f 查询文件所属软件包

$ rpm -qf /bin/ls

$ rpm -qf /etc/inittab

$ rpm -qf /etc/services

$ mv /etc/services /backup

$ rpm -qf /etc/services

无法复制移动时用光盘修复模式操作。

-p 查询软件包

-i 显示软件包信息

$ rpm -qi samba (samba 为安装过的软件)

$ rpm -qip rpm 包(查询未安装的软件包信息时使用)

-l 显示软件包中的文件列表

$ rpm -ql samba | more (samba 为安装过的软件)

$ rpm -qlp rpm 包(查询未安装的软件包信息时使用)

-d 显示被标注为文档的文件列表(查看软件帮助文档)

$ rpm -qd samba | more (samba 为安装过的软件)

$ rpm -qdp rpm 包(查询未安装的软件包信息时使用)

-c 显示被标注为配置文件的文件列表

$ rpm -qc samba | more (samba 为安装过的软件)

$ rpm -qcp rpm 包(查询未安装的软件包信息时使用)

(4)升级

$ rpm -Uvh sudo-.18.0pl-5.el5.i386.rpm

~/.vimrc 的注释符号不是#,而是”.

$ rpm -qa | grep vim

$ rpm -qd vim-common (列出很多.gz 文件,但是看这些文件没多大意义)

$ rpm -ql vim-common | grep example (多用此方式查找帮助信息)

(5)校验

rpm -V 软件名称

$ rpm-V sudo 无输出结果表示文件未被修改过

missing 文件被删除

5 文件的md5 校验值(文件被修改过后会显示)

S 文件大小

M 文件权限

T 文件的创建时间时间,文件别修改过,文件的时间也会改变

L 链接文件

D 设备文件

U 文件的用户

G 文件的权限

$ chmod 777 /usr/sbin/visudo

$ rpm -V sudo

.M…… /usr/sbin/visudo

软件安装后无法使用或有异常,可以使用rpm -V 校验,获得反馈信息

$ rm /etc/pam.d/sudo

rm:是否删除一般文件“/etc/pam.d/sudo”? y

$rpm -V sudo

missing c /etc/pam.d/sudo

.M…… /usr/sbin/visudo

$ chgrp sys /usr/bin/sudo

$rpm -V sudo

missing c /etc/pam.d/sudo

.M….G. /usr/bin/sudo

.M….G. /usr/bin/sudoedit

.M…… /usr/sbin/visudo

$ md5sum /etc/inittab

92a39a223f68e67e9e6c412443851aeb /etc/inittab

$ rpm -qf /etc/inittab

initscripts-8.45.30-2.el5.centos

$ echo “#welcome#” >> /etc/inittab

$ rpm -V initscripts

S.5….T c /etc/inittab

(6)软件报文件提取

解压所有文件到当前目录

$ mkdir /mnt/cdrom

$ mount /dev/cdrom /mnt/cdrom

mount: block device /dev/cdrom is write-protected, mounting read-only

$ rpm2cpio /mnt/cdrom/CentOS/sudo-1.7.2p1-5.el5.i386.rpm | cpio -idv

./etc/pam.d/sudo cpio -i(导入)d(保持目录)v

948 blocks

解压指定文件到当前目录

$ mkdir /mnt/cdrom

$ mount /dev/cdrom /mnt/cdrom

mount: block device /dev/cdrom is write-protected, mounting read-only

$ rpm2cpio /mnt/cdrom/CentOS/sudo-1.7.2p1-5.el5.i386.rpm | cpio

-idv ./etc/pam.d/sudo

./etc/pam.d/sudo cpio -i(导入)d(保持目录)v

948 blocks

$ ls ./etc/pam.d

sudo

$ cp ./etc/pam.d/sudo /etc/pam.d

或者到根目录下操作

$cd /

$rm /etc/pam.d/sudo

rm:是否删除一般文件“/etc/pam.d/sudo”? y

$ rpm2cpio /mnt/cdrom/CentOS/sudo-1.7.2p1-5.el5.i386.rpm | cpio

-idv ./etc/pam.d/sudo

./etc/pam.d/sudo

948 blocks

如果/etc/inittab 文件删除,如何恢复

$ rm /etc/inittab

rm:是否删除一般文件“/etc/inittab”? y

$ reboot

Broadcast message from root (pts/0) (Wed Feb 23 04:21:54 2011):

The system is going down for reboot NOW!

进入光盘修复模式

$rpm -qf /etc/inittab 找不到文件

$rpm -qf /mnt/sysimage/etc/inittab 找不到文件

$chroot /mnt/sysimage

$ rpm -qf /etc/inittab/inittab

initscripts-8.45.30-2.e15.centos

$mount /dev/cdrom /mnt/cdrom (错误操作)

$mount -t iso9660 /dev/cdrom /mnt/cdrom (错误操作)

$ ls /dev/hd<TAB><TAB>可列出多个硬盘,hdc 为光盘,hdd 为第三个硬盘

$mount /dev/hdc /mnt/cdrom

$ pwd

/

$rpm2cpio /mnt/cdrom/CentOS/initscripts-8.45.30.-2.e15.centos.i386.rpm |

cpio -idv ./etc/inittab

$ exit 退出chroot

$ exit 退出光盘修复模式

[root@helen ~]# ls -l /dev/ | grep “^l”

lrwxrwxrwx 1 root root 3 03-13 09:38 cdrom -> hdc

lrwxrwxrwx 1 root root 13 03-13 09:38 fd -> /proc/self/fd

lrwxrwxrwx 1 root root 3 03-13 09:38 floppy -> fd0

lrwxrwxrwx 1 root root 15 03-13 09:38 stdin -> /proc/self/fd/0

lrwxrwxrwx 1 root root 15 03-13 09:38 stdout -> /proc/self/fd/1