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