一、软件包管理
1、应用程序:
程序,Architecture
C语言:源代码-->(编译)二进制格式
脚本:解释器(二进制程序)
源代码--> 编译-->链接-->运行
程序:
库: 静态 动态
静态链接 动态链接
2、程序组成部分:
二进制程序
库
配置文件
帮助文件
/boot :存放内核,initrd(initramfs)
/etc :存放配置文件
/usr
/var:是外围的文件系统,存放日志等文件,建议单独分区
/dev :设备目录,不能单独分区;
/lib :存放库文件
/tmp
/bin :存放二进制文件
/sbin:存放二进制文件
/proc
/sys
/mnt
/media
/home
/root ;不能单独分区
/misc
/opt
/srv
/etc , /bin ,/sbin, /lib, /usr/share/man:存放帮助文件
系统启动就需要用到以前的程序,这些目录不能挂载额外的分区,必须在根文件系统的分区上。
/usr/ bin sbin lib 操作系统核心功能,可以单独分区
系统启动顺序: POST-->BIOS(HD)-->(MBR)bootloader(文件系统结构)-->内核
3、程序: 指令+ 数据
指令:芯片
CPU:普通指令,特权指令
指令集
C语言:
Powerpc :二进制格式
4、软件包管理器:
打包成一文件:二进制程序,库文件,配置文件,帮助文件
生成数据库,追踪所安装的每一个文件
软件包管理器的核心功能:
(1)制作软件包;(2)安装、卸载、升级、查询、校验;
前段工具:yum ,apt-get
后端工具:RPM ,dpt
二、rpm命令:
rpm:管理命令
数据库 /var/lib/rpm
rpmbuild:建立rpm
安装、查询、卸载、升级、校验、数据库的重建等工作:
1、rpm命名
包:组成部分
主包:
bind-version 例如:bind-9.7.1-1.i586.el5.rpm
子包:
例如:bind-libs-9.7.1-1.i586.el5.rpm 例如:bind-utils-9.7.1-1.i586.el5.rpm
包名格式:
name-version-release.arch.rpm
bind-major.minor.release-release.arch.rpm
主版本号:重大改进
此版本号:某个子功能发生重大变化
发行号:修正了部分bug,调整了一点功能
2、rpm包
二进制格式
rpm包作者下载源程序,编译配置完成后,制作成rpm包
bind-9.7.1-1.x86_64
rpm:
rpm -i /PATH/TO/PACKAGE_FILE
-h : 以#显示进度,每个#表示2%
-v:显示详细过程
-vv:更详细的过程
rpm -ivh /PATH/TO/PACKAGE_FILE
--nodeps: 忽略依赖关系
--replacepkgs:重新安装,替换原有安装
--force:强制安装,可以实现重装或降级
3、rpm查询
rpm -q PACKAGE_NAME:查询指定的包是否已经安装
rpm -qa :查询已经安装的所有包
rpm -qi PACKAGE_NAME:查询指定包的说明信息;
rpm -ql PACKAGE_NAME: 查询指定包安装后生成的文件列表
rpm -qc PACKAGE_NAME:查询指定包安装的配置文件
rpm -qd PACKAGE_NAME:查询指定包安装的帮助文件;
rpm -q --scripts PACKAGE_NAME:查询指定包中包含的脚本
rpm -qf /path/to/somefile:查询指定的文件夹是由那个rpm包安装生成的;
如果某rpm包尚未安装,我们需查询其说明信息,安装以后会生成的文件:
rpm -qpi /PATH/TO/PACKAGE_FILE
rpm -qpl
4、rpm升级
rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级;否则进行安装
rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级;否则就退出
--oldpackage:降级
5、卸载
rpm -e PACKAGE_NAME
--nodeps
6、校验
rpm -V PACKAGE_NAME
7、检验来源合法性,及软件完整性:
加密类型:
对称:加密解密使用同一个密钥
公钥:一对密钥,公钥,私钥;公钥隐含于私钥中,可以提取出来,并公开出去;
rpm -k /PATH/TO/PACKAGE_FILE
dsa,gpg:验证来源合法性,也既验证签名;可以使用--nosignature,略过此项
sha1,md5:验证软件包完整性;可以使用 --nodigest,略过此项
8、重建数据库
rpm
--rebuilddb: 重建数据库,一定会重新建立;
--initdb:初始化数据库,没有才建立,有就不用建立;
三、yum
yum仓库中的元数据文件:
primary.xml.gz
所有RPM包的列表:
依赖关系:
每个RPM安装生成的文件列表:
filelists.xml.gz
当前仓库中所有RPM包的所有文件列表:
other.xml.gz
额外信息,RPM
1、定义yum
如何为yum定义repo文件
[Repo_ID]
name=Description
baseurl=
ftp://
http://
file:///
enabled={1|0}
gpgcheck={1|0}
gpgkey=
yum [options][command][package ...]
list:列表
all:
available:可用的,仓库中有但尚未安装的
installed:已经安装的
updates:可用的升级
clean:清理缓存
[packages | headers | metadata | dbcache | all ]
repolist:显示repo列表及其简要信息
all ; enable:默认 ; disable ;
install :安装
yum install PACKAGE_NAME
-y :自动回答为yes
--nogpgcheck
update:升级
update_to :升级为指定版本
remove | erase: 卸载
info:
provides | whatprovides:查看指定的文件或特性是有那个包安装生成的;
2、编译安装的三步骤:
前提:准备开发环境(编译环境)
安装“Development Tools”和 “Development Libraries”
#tar
#cd
# ./configure
--help
--prefix=/path/to/somewhere
--sysconfdir=/PATH/TO/CONFFILE_PATH
功能:1.让用户选定编译特性; 2、检查编译环境;
#make
#make install
(1)修改PATH环境变量,以能够识别此程序的二进制文件路径;
修改/etc/profile文件
在/etc/profile.d/目录建立一个以.sh为名称后缀的文件,在里面定义 export PATH=$PATH:/path/to/somewhere
(2)默认情况下,系统搜索库文件的路径/lib ,/usr/lib ; 需要增添额外搜寻路径;
在/etc/ld.so.conf.d/ 中创建已.conf为后缀名的文件,而后把要增添的路径直接写至此文件中国;
# ldconfig 通知系统重新搜寻库文件
-v :显示重新搜寻库的过程
(3) 头文件: 输出给系统
默认: /usr/include
增添头文件搜寻路径,使用链接进行:
/usr/local/tengin/include/ /usr/include/
两种方式:
ln -s /usr/local/tengine/include/* /usr/include/ 或
ln -s /usr/local/tengine/include /usr/include/tengine
(4) man文件路径:安装在 --prefix 指定的目录下的man目录: /usr/share/man
1.man -M /PATH/TO/MAN_DIR COMMAND
2. 在 /etc/man.config 中添加一条MANPATH
3、netstat命令:
-r:显示路由表
-n:以数字方式显示
-t:建立的tcp连接
-u:显示udp连接
-l:显示监听状态的连接
-p:显示监听指定套接字的进程的进程号与进程名
四、练习
写一个脚本,完成以下功能:
说明:此脚本能于同一个repo文件中创建多个yum源的指向;
1、接受一个文件名做为参数,此文件存放至/etc/yum.repos.d目录中,且文件名以.repo为后缀;要求,此文件不能事先存,否则,报错;
2、在脚本中,提醒用户输入repo id;如果为quit,则退出脚本;否则,继续完成下面的步骤;
3、repo name 以及baseurl的路径,而后以repo文件的格式将其保存至指定的文件中;
4、enabled 默认为1 ,而gpgcheck默认设定为0;
5、此脚本会循环执行多次,除非用户为repo id指定为quit;
五、while
while ,until for
break :提前退出循环
continue:提前结束本轮循环,而进入下一轮循环;
六、练习题
写一个脚本:
1、判断一个指定的bash脚本是否有语法错误;如果有错误,则提醒用户键入Q或者q无视错误并退出,其他任何键可以通过vim打开这个指定的脚本;
2、如果用户通过vim打开编辑后保存退出时仍然有错误,则重复第1步中的内容;否则,就正常关闭退出