一、基本概念
程序:指令+数据
指令:芯片(cpu)
cpu:普通指令、特权指令
指令集
配置文件就是一个文件的配置信息,说白了就是就是一些变量。
格式:dir =/path/to/somewhere 【就是把等号后面的值加载进程序当中去了,因此程序就是用这个数据去进行了】
程序的组成部分:
1、二进制程序:二进制程序要依赖于库
2、库:这里的库既包括共享库还包括这个程序自身提空的库,就是把程序的某些功能直接输出给其他程序员二次开发的时候直接调用的接口
3、配置文件:
4、帮助文件:
二、系统文件
/boot:系统启动相关的文件,如内核、initrd,以及grub(bootloader)
/dev:设备文件:
设备文件:
块设备:随机访问
字符设备:现行访问,接字符为单位(电脑屏)
设备号:主设备号(major)和次设备号(minor)
/etc:配置文件
/home:用户的家目录,每一个用户的家目录通常默认为/home/USERNAME
/root:管理员的家目录
/lib:库文件
静态库 .a
动态库, .dll,.so(shared object)
/lib/modules:内核模块文件
/media:挂载点目录,移动设备
/mnt:挂载点目录,额外的临时文件系统
/opt:可选目录,第三方程序的安装目录
/proc:伪文件系统,内核映射文件
/sys:伪文件系统,跟硬件设备相关的属性映射文件
/tmp:临时文件 /var/tmp 也是临时文件
/var:可变化的文件
/bin:(二进制)可执行文件,用户命令
/sbin:管理命令
/etc, /bin, /sbin /lib
系统启动就需要用到的程序,这些目录不能挂载额外的分区,必须在跟文件系统的分区上
/usr:shared ,read-only只读文件
/usr/bin/
/usr/sbin
/usr/lib
操作系统核心功能,可以单独分区
/usr/local:
/usr/local/bin
/usr/local/sbin
/usr/local/lib
第三方软件,独立分区
/sys和/proc
不能单独分区,默认为空;
/dev:设备(核心功能)不能单独分区;
udev
内核识别问价是靠驱动程序的。
/root :管理员不能单独分区。
/var:应该单独分区
/boot: 内核,initrd(initramfs)
启动操作系统首先要启动内核。
POST --> BIOS(HD)-->(MBR)bootloader(文件系统结构,ext2、ext3、ext4)-->内核
首先完成自检,自检完成后,根据BIOS中的配置去找启动次序的启动条,下来BIOS就要去加载MBR,通过MBR来识别操作系统在哪个分区上进行,在MBR当中,加载MBR要靠MBR中的bootloader来实现引导,这个bootloader会去加载内核的,而对bootloader而言它所看到的硬盘里面是什么?对bottloader而言它能看到你的磁盘分区,有四个主分区或这是三主一逻辑。这里的bootloader要必须能够识别文件系统结构。
三、软件包管理器:
1、打包成一个文件:二进制程序,库文件配置文件,帮助文件
2、生成数据库,跟踪所安装的每一个文件
四、软件包管理器的核心功能:
1、制作软件包;
2、安装、卸载、升级、查询、校验;
Redhat,SUSE,Debian【软件包不能混用】
Redhat,SUSE:RPM
Redhat Package Manager(改名之前RPM全称)
PRM is Package Manager(改名之后RPM全称)
Debian:dpt
五、依赖关系:
软件包管理器很简单但是存在一个问题是它们之间存在之一个依赖关系让人头疼,像我们安装一个x文件,它依赖于y的库,这就是没有y,x就运行不起来,但如果说y又依赖于z呢,这倒还可以接受,如果z后面还有很多呢,按一个x我们要按一串,很浪费时间。更有意思的是如果是个循环我们改怎么办?就像x依赖y,y又依赖z,而z又依赖在y,这下我们就蒙了,哪个也按不上去,如果是这我们可以一下子安装两个,它会自动识别的。为了能够自行解决这些问题,后来就有人开发了一个管理工具,能够将这些依赖关系自行解决的。
前端工具:yum ,apt-get (能够自动解决依赖关系)【yum是RPM的前端工具,apt-get是dpt的前端工具】
后端工具:RPM,dpt
yum : Yellowdog Update Modifier
六、rpm命名:
包:组成部分
主包:
例如:bind -9.7.1-1.e15.i586.rpm
子包:
bind -libs-9.7.1-1.e15.i586.rpm
bind -utils-9.7.1-1.e15.i586.rpm
包名格式:
name-version-release.arcdh.rpm(名称+版本号+发行号+平台架构+后缀名)
bind-major.minor.release-release.arch.rpm(前一个release是软件的开发者提供的发行号,后一个是rpm包的制作者提供的发行号)
主版本号:重大改进
次版本号:某个字功能发生重大变化
发行号:修正了部分bug,调整了一点功能
rpm包(默认的都是二进制格式)
二进制格式:装上去直接运行
uname -a查看版本
rpm命令:
rpm:管理软件包
有个数据库/var/lib/rpm
rpmbuild:
七、rpm的安装、查询、卸载、升级、校验、数据库的重建、验证数据包等工作
1、安装:
rpm -i /PATH/TO/PACKAGE_FILE
-h:以#显示进度:每个#表示2%
-v:显示详细过程
-vv:显示更详细过程
rpm -ivh /PATH/TO/PACKAGE_FILE
--nodeps:忽略依赖关系:
--replacepkgs:重新安装,替换原有安装
--force:强行安装,可以实现重装或降级;
--text:测试一下,不安装
例如:我们去ftp上下载一个软件包,然后安装。
步骤 1、用lftp后面跟着你的ftp服务器的地址(如:lftp 172.16.0.1)用-ls查看
下面进行下载,我们查看一下准备下载哪个包,我们就可以下了。如我们下载 zsh-4.2.6-6.el5.i386.rpm,就用get zsh-4.2.6-6.el5.i386.rpm 下载到本地,再去本地查看一下(橘×××的方框中就是我们下载的软件包)如图:
3、然后我们就该去安装这个软件包了rpm –ivh zsh-4.2.6-6.el5.i386.rpm(途中我那里用了一个--force是因为我已经安装过,这里再强制安装一遍。大家也可用—replacepkgs重新安装一遍。重要的是给大家演示安装的同时也能演示一下强制安装和重新安装)。
这里我们在找一个有依赖关系的包给大家演示一下,实际步骤都是一样的,就是安装的时候还需要安装别的软件包,这样就可麻烦了。图中方框显示的失败的依赖关系,下面将的就是还需要什么。万一遇到依赖关系怎么办呢,这时候我们就用—nodeps忽略依赖关系,不过要注意,如果有依赖关系,你忽略了,就是你把软件装上去了也不能使用。
2、查询
rpm -q PVCKAGE_NAME(名字)查询指定的包是否已安装
rpm -qa :查询已经安装的所有包
rpm -qi PACKAGE_NAME:查询指定包的说明信息:
rpm -ql PACKNGE_NAME:查询指定包安装后生成的文件列表
rpm -qc PACKNGE-NAME:查询指定包安装的配置文件;
rpm -qd PACKAGE_NAME :查询指定包安装的帮助文件
rpm -q --scripts PACKAGE_NAME :查询指定包中包含的脚本
rpm -qf /path/to/somefile(文件):查询指定的文件是由哪个rpm包安装生成的;
例如:我们来查询包含z的所有安装的包不能用(红色方框中的命令),我们要演示-qa来显示所有安装 的软件包,那就太多了,我们就来查询以z开头的所有安装的软件包。
我们用-qi来查询软件包的详细信息:
如果我们想看看/etc/inittab是由哪个软件包生成的,用-qf。
如果我们想查询软件包的配置文件怎么办?那我们就-qc。那我们查看zsh的配置文件为例
如果我们想查询指定包中的脚本,就用 –q –scripts 来查询。如:
如果某rpm包尚未安装,我们需要查询其说明信息、安装以后会生成的文件;我们要用 rpm -qpi /PATH/TO/PACKAGE_FILE 来查看。如果我们想看会生成那些文件就把-qpi换成-qpl。
3、升级
rpm -Uvh /PATH/TO/NEW_PACKAGE-FILE如果装有老版本的,则升级,否则安装
RPM -Fvh /PATH/TO/NEW_PACKAGE-FILE如果装有老版本的,则升级,否则退出
--oldpackage:降级
如果我们想把nano这个软件包升级一下,我们要用这几个步骤
1、我们要查看一下这个软件包是否安装,rpm –q nano
2、我们要进入ftp服务器中查找最新版本lftp(后面跟着服务器地址)
3、我们进入/pub/errata里面就可以看到了。(和第一步的图中对比,可以得出下面图中方框中就是新版本了)
4、我们下载到本地后,开始升级。
如果我们的新版本的跟其他软件不兼容我们就要还是用老版本的,那我们就用—oldpackage来降级。还用nano为例。
4、卸载 (如果某个软件包被其他软件包依赖,则提示不让卸载)
rpm -e PACKAGE_NAME
--nodeps:强制卸载
如果我们卸载zsh就用-e。看图什么也没有这就卸载成功了,没有信心才是最好的回复,这就成功了。
5、校验
rpm –V PACKAGE_NAME (检查文件是否被非法改变过)
例如:我们先做些改动在校验,这样看的比较清楚,我们先把zsh中的/usr/share/zsh/4.2.6/functions/zfuput给删除,然后在/usr/share/zsh/4.2.6/functions/zkbd中添加一句。图中为校验结果,这下是不是看的更为清楚了。
我们发现改变的时候有八位,这八位都是什么?有什么作用?
6、重建数据库
/var/lib/rpm 数据库的路径
rpm
--rebuilddb:重建数据库【无论有没有,一定会重新建立】
--initdb:初始化数据库【没有才建立,有就不建立】
7、检验来源合法性,及软件包完整性;
加密类型:
对称:加密解密使用同一个秘钥
公钥:一对儿密钥,公钥,私钥:公钥隐含于私钥中,可以提取出来,并公开去;
单向
/etc/pki/rpm-gpg/ 在它当中有一个文件RPM-GPG-KEY-redhat-release,就是用来检验的。
rpm-K /PAPT/TO/padkage-file
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release:导入密钥文件
如果我们想要检验zsh-4.2.6-6.el5.i386.rpm,先导入密钥文件再来检验。如图:
其中dsa,gpg:验证来源合法性,也及验证签名;可以使用--nosignature,略过此项
shal,md5:验证软件包完整性;可以使用--nodigest,略过此项