菜鸟学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 忽略此项