软件包管理
程序包管理
- debian: deb文件,dpkg包管理器
- redhat: rpm文件,rpm管理器
包命名
源码名
- name-VERSION.tar.gz|bz2|xz
- VERSION:major.minor.release
rpm包命名方式
- name-VERSION-release.arch.rpm
例: bash-4.2.46-19.el7.x86_64.rpm
- VERSION: major.minor.release
- release: release.OS
- 常见的arch
- x86: i386, i486, i586, i686
- x86_64: x64, x86_64, amd64
- powerpc: ppc
- 跟平台无关: noarch
依赖包管理工具
- yum: rpm包管理器前端工具
- apt-get: deb包管理器前端工具
- zypper: suse上的rpm前端工具
- dnf: Fedora 18+ rpm包管理器前端工具
查看包依赖关系相关命令
查看二进制程序所依赖的库文件
- ldd /PATH/TO/BINARY_FILE
管理及查看本机装载的库文件
- ldconfig 加载库文件
- /sbin/ldconfig -p: 显示本机已经缓存的所有可用库文件名及文件路径
映射关系
- 配置文件: /etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
- 缓存文件: /etc/ld.so.cache
rpm包管理
rpm包安装
- rpm -ivh PACKAGE_FILE …
rpm包升级
- rpm {-U|–upgrade} [install-options] PACKAGE_FILE…
- rpm {-F|–freshen} [install-options] PACKAGE_FILE…
upgrade:安装有旧版程序包,则“升级”,如果不存在旧版程序包,则“安装”
freshen:安装有旧版程序包,则“升级”,如果不存在旧版程序包,则不执行升级操作
- rpm -Uvh PACKAGE_FILE …
- rpm -Fvh PACKAGE_FILE …
- –oldpackage:降级
- –force: 强制安装
rpm包查询
- -q 查询,包名
- -a all
- -f 查询某文件是出于什么包
- -p 查询,文件名,列出相关文件列表
- -c 只看配置文件
- -d 指定文档
- -i 详细说明
- -l 查询文件
rpm2cpio 包文件|cpio –itv 预览包内文件
rpm2cpio 包文件|cpio –id “*.conf” 释放包内文件
[root@centos7 rpm]#rpm -q vsftpd
package vsftpd is not installed
[root@centos7 rpm]#rpm -qf /etc/passwd
setup-2.8.71-9.el7.noarch
[root@centos7 Packages]#rpm2cpio tree-1.6.0-10.el7.x86_64.rpm | cpio -itv
-rwxr-xr-x 1 root root 62768 Jun 10 2014 ./usr/bin/tree
drwxr-xr-x 2 root root 0 Jun 10 2014 ./usr/share/doc/tree-1.6.0
-rw-r--r-- 1 root root 18009 Aug 13 2004 ./usr/share/doc/tree-1.6.0/LICENSE
-rw-r--r-- 1 root root 4628 Jun 24 2011 ./usr/share/doc/tree-1.6.0/README
-rw-r--r-- 1 root root 4100 Jun 24 2011 ./usr/share/man/man1/tree.1.gz
177 blocks
包卸载
- -e 卸载,跟包名,不必写文件名
- –allmatches 卸载所有版本
包验证
- -V 查找包里的文件的变化
- -K 检查包的完整性和签名,需要先导入公钥
- –import 导入公钥
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
rpm数据库
rpm数据库,安装完后的rpm包信息都记录在这里
- 数据库路径 /var/bin/rpm
- rpm {–initdb | --rebuilddb}
initdb:初始化,只新建
rebuilddb:重建已安装的数据库索引目录
重建系统没有什么意义,因为只是把数据库的文件重建起来,但是数据文件不在了
其他
若卸载RPM这个工具,恢复需要进入光盘救援模式,然后挂载cdrom
rpm -ivh /mnt/cdrom/Packages/rpm-… --root=/mnt/sysimage/
实验
若是删除了相应包的目录,需要rpm2cio中找出误删除的东西,恢复到相应目录即可,但是需要注意恢复后的权限问题
- rpm2cpio /path |cpio -vt 查看
- rpm2cpio /path |cpio -idv ./usr/bin/tree 过去相应文件
[root@centos7 ~]#rm /bin/tree
rm: remove regular file ‘/bin/tree’? y
[root@centos7 ~]#tree
bash: tree: command not found...
[root@centos7 ~]#rpm2cpio /misc/cd/Packages/tree-1.6.0-10.el7.x86_64.rpm |cpio -vt
-rwxr-xr-x 1 root root 62768 Jun 10 2014 ./usr/bin/tree
drwxr-xr-x 2 root root 0 Jun 10 2014 ./usr/share/doc/tree-1.6.0
-rw-r--r-- 1 root root 18009 Aug 13 2004 ./usr/share/doc/tree-1.6.0/LICENSE
-rw-r--r-- 1 root root 4628 Jun 24 2011 ./usr/share/doc/tree-1.6.0/README
-rw-r--r-- 1 root root 4100 Jun 24 2011 ./usr/share/man/man1/tree.1.gz
177 blocks
[root@centos7 ~]#rpm2cpio /misc/cd/Packages/tree-1.6.0-10.el7.x86_64.rpm |cpio -vt
-rwxr-xr-x 1 root root 62768 Jun 10 2014 ./usr/bin/tree
drwxr-xr-x 2 root root 0 Jun 10 2014 ./usr/share/doc/tree-1.6.0
-rw-r--r-- 1 root root 18009 Aug 13 2004 ./usr/share/doc/tree-1.6.0/LICENSE
-rw-r--r-- 1 root root 4628 Jun 24 2011 ./usr/share/doc/tree-1.6.0/README
-rw-r--r-- 1 root root 4100 Jun 24 2011 ./usr/share/man/man1/tree.1.gz
177 blocks
[root@centos7 ~]#rpm2cpio /misc/cd/Packages/tree-1.6.0-10.el7.x86_64.rpm |cpio -idv ./usr/bin/tree
./usr/bin/tree
177 blocks
[root@centos7 ~]#ls
anaconda-ks.cfg bin Desktop Documents Downloads fswap Music Pictures Public src Templates usr Videos
[root@centos7 ~]#cd usr
[root@centos7 usr]#ls
bin
[root@centos7 usr]#cd bin
[root@centos7 bin]#ls
tree
[root@centos7 bin]#cp tree /bin/
[root@centos7 bin]#tree
.
└── tree
0 directories, 1 file
[root@centos7 bin]#
作业,卸载内核kernel包并修复