菜鸟学Linux 第029篇笔记 软件管理,rpm命令
应用程序:
程序:底层Architecture密切相关
C语言: 源代码-->(编译)二进制格式
脚 本: 解释器(二进制程序)
源代码-->编译-->链接-->运行
程序:
库
静态
动态
静态链接
动态链接
程序:指令+数据
Linux 共享库 .so (shared object)
程序配置文件:
程序组成部分:
二进制程序
库(包含程序自己私有的库)会将其自己的库文件放入到/lib /usr/lib
配置文件
帮助文件
linux 一级目录
/boot
/etc
/usr
/var
/lib
/tmp
/bin
/sbin
/proc
/sys
/mnt
/media
/home
/root
/misc
/opt
/srv
安装软件所涉及的目录:
1.系统启动就需要用到的程序,不能挂载到额外的分区,必须在根上(帮助文档目录除外)
/etc, 程序配置文件
/bin, 程序二进制文件
/sbin, 程序二进制文件
/lib, 库文件
/usr/share/man(帮助文件) 全局共享只读目录
2.提供系统核心功能,可以单独分区(不推荐)
/usr/
bin
sbin
lib
3. 安装第三方软件,单独分区(推荐)
/usr/local
bin
sbin
lib
etc
man
/opt 早期第三方软件安装到此目录
其它目录
以下两个目录称为伪文件系统,不能单独分区,默认为空(启动后才会有)
/proc 给用户提供调用接口
/sys 硬件调用接口
/dev 设备文件 不可单独分区!!
udev 能够利用内核所提供的硬件信息,动态创建设备文件,
并给设备文件取一个让用户容易认识的名字
/home 家目录,建议单独 但作为服务器来讲用到不多
/root 管理员家目录 可以单独分区但不建议
/var 外围文件系统日志文件等等 建议单独分区
/boot 内核,initrd(initramfs) 建议单独分区
POST-->BIOS(HD)-->(MBR)bootloader(文件系统结构,ext2,ext3...)-->内核
/boot 一个分区 根lvm
程序:指令+数据
指令:芯片
CPU:普通指令,特权指令
指令集
编译 程序指令-->汇编指令-->所对应的芯片指令(intel,Amd,Powerpc...)
软件包管理器
1.打包成一文件:二进制程序,库文件,配置文件,帮助文件
2.生成数据库 追踪所安装的每一个文件
功能
1.制作软件包;
2.安装,卸载,升级,查询,校验;
Redhat,SUSE : RPM
Redhat Package Manager
RPM is Package Manager
Debian: dpt
依赖关系:
当用rpm安装软件时,有可能会遇到安装A软件需要先安装B软件
而安装B软件需要安装C软件, 此种关系称为依赖关系;
后端工具,rpm dpt 安装软件时,需要自己来解决安装软件时的依赖关系
需要手动安装该软件所依赖的其它软件
前端工具,yum apt-get 可以自动帮用户解决安装软件时的依赖关系
即自动安装所需要安装的其它软件
前端工具:yum apt-get
后端工具:RPM, dpt
yum: yellowdog Update Modifier
rpm命令
rpm:
数据库:/var/lib/rpm
rpmbuild:
安装、查询、卸载、升级、校验、数据库重建、验证数据包等工作
rpm命名:
包:组成部分
主包:
bind-9.7.1-1.i589.e15.rpm
子包:
bind-lib-9.7.1-1.8586.e15.rpm
包名格式
name-version-release-.arch.rpm
bind-major.minor.release-release.arch.rpm
主版本号:重大改进
次版本号:某个子功能发生重要变化
发行号:修正部分bug,调整一点功能
rpm包:
二进制格式
源代码格式
查看当前系统内核版本
uname ( print system information)
-a, --all
print all information, in the following order, except omit -p
and -i if unknown:
rpm command:
1.安装
rpm {-i|--install} [install-options] PACKAGE_FILE ...
rpm -ivh /path/name.rpm
--nodeps
Don’t do a dependency check before installing or upgrading
a package. 忽略依赖关系,但是软件安装后可能会无法运行
--force 强行安装,可以实现重装或降级
--test Do not install the package, simply check for and report
potential conflicts.
2.查询
rpm -q PACKAGE_NAME 不能跟路径 查询指定的包是否已经安装 query
rpm -qa 查询已经安装的所有包 all
rpm -qi PACKAGE_NAME 查询指定包的说明信息 information
rpm -ql PACKAGE_NAME 查询指定包安装生成的文件列表list directory
rpm -qc PACKAGE_NAME 查询指定的安装包的配置文件config
rpm -qf /path/to/somefile 查询指定的文件是由哪个rpm包安装生成的;
-qd PACKAGE_NAME 查询软件包的帮助文件 docfiles
-q --scripts PACKAGE_NAME 查询软件包中包含的脚本
如果某rpm包尚未安装,我们需要查询其说明信息,安装以后会生成的文件
rpm -qpi /path/to/package.rpm
3.升级
rpm -Uvh /path/to/new_package_file.rpm 如果装有老版本的,则升级,否则安装
rpm -Fvh /path/to/new_package_file.rpm 如果装有老版本的,则升级,否则退出
--oldpackage 降级
4.卸载
rpm -e PACKAGE_NAME 卸载rpm包 erase
-nodeps 卸载但不删除所依赖的rpm包
5.校验
rpm -V PACKAGE_NAME 验证rpm软件包
6.重建rpm数据库
rpm
--rebuilddb: 重建数据库,一定会重新建立;
initdb: 初始华数据库,没有才建立,有就不用建立;
Use --initdb to create a new database if one doesn’t already
exist (existing database is not overwritten),
use --rebuilddb to rebuild the database indices from the installed
package headers.
7.检验来源合法性,及软件包完整性
加密类型
对称:加密解密使用同一个密钥
非对称:一对密钥,公钥,私钥;公钥隐含于私钥中,可以提取出来,并公开出去
单向:MD5
/etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release 存放验证信息 public key
如果没有导入验证信息rpm不可对软件包做数据认证
导入验证信息
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
rpm {-K|--checksig} [--nosignature] [--nodigest] /path/to/package.rpm
用来验证安装包的完整性和合法性
dsa, gpg: 验证软件包来源合法性,即验证签名 --nodigest 忽略此项
shal, md5: 验证软件包完整性:可以使用 --nosignature 忽略此项