应用程序:
C语言:源代码--》(编译) 二进制格式
脚本:解释器(二进制程序)
源代码--》编译-》链接-》运行
程序:
库
静态
动态
静态链接
动态链接
共享库
配置文件:
dir=/path/to/somewhere
程序组成部分:
二进制程序
库(/user/lib等)
配置文件
帮助文件
/etc,/bin,/sbin,/lib
系统启动就需要用到的程序,这些目录不能挂载额外的分区,必须在根文件系统的分区上
/usr/
bin
sbin
lib
操作系统核心功能,可以单独分区
/usr/local
bin
sbin
lib
etc
man
第三方软件
/opt
/proc
/sys
不能单独分区,默认为空
/dev:设备,不能单独分区
/root:不能单独分区
/var:建议单独分区
/boot:内核,initrd(initramfs)
软件包管理器的核心功能:
1、制作软件包
2、安装、卸载、升级、查询、校验
Redhat,suse:RPM
Redhat Package Manager
Debian:dpt
依赖关系:
安装软件包x,x--》(依赖)库Y-》依赖Z
前端工具:yum,apt-get
后端工具:RPM,dpt
yum:Yellowdog Update Modifier
rpm命令:
rpm:
数据库:/var/lib/rpm
rpmbuild:软件包制作
安装、查询、卸载、升级、校验、数据库的重建、验证数据包等工作:
rpm命名:
包:组成部分
主包:
bind-9.7.1-1.e15.i586.rpm
子包:
bind-libs-9.7.1-1.e15.i586.rpm
包名格式:
name-version-release.arch.rpm
主版本号:重大改进
次版本号:某个子宫内发生重大变化
发行号:修正了部分bug,调整了一点功能
bind-9.7.1.tar.gz
rpm包:
二进制格式
源码格式
rpm:
1、安装:
rpm -i /path/to/package_file
-h:以#显示进度:每个#显示2%
-v:显示详细过程
-vv:显示更详细过程
rpm -ivh /path/to/package_file
--nodeps:忽略依赖关系
--replaycepkgs:重新安装,替换原有的安装
--force:强行安装,可以实现重装或降级
2、查询
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
3、升级
rpm -Uvh /path/to/new_package_file:如果装有老版本的,则升级,否则,则安装
rpm -Fvh /path/to/new_package_file 如果有装有老版本的,升级,否则,退出
--oldpackage:降级
4、卸载
rpm -e package_name
--nodeps
5、校验:检查包是否被非法改变过
rpm -V package_name
6、重建数据库
rpm
--rebuilddb: 重建数据库,一定会重新建立;
--initdb:初始化数据库,没有才建立,有就不用建立;
7、检验来源合法性,及软件包完整性;
加密类型:
对称:加密解密使用同一个密钥
公钥:一对儿密钥,公钥,私钥;公钥隐含于私钥中,可以提取出来,并公开出去;
单向:
# ls /etc/pki/rpm-gpg/
RPM-GPG-KEY-redhat-release
rpm -K /PAPT/TO/PACKAGE_FILE
dsa, gpg: 验正来源合法性,也即验正签名;可以使用--nosignature,略过此项
sha1, md5: 验正软件包完整性;可以使用--nodigest,略过此项
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release: 导入密钥文件
rpm-->yum
yum仓库中的元数据文件:
primary.xml.gz:
所有RPM包的列表
依赖关系
每个RPM安装生成的文件列表
filelists.xml.gz
当前仓库中所有RPM包的所有文件列表
other.xml.gz:
额外信息。RPM包的修改日志
repom.xml
记录的是上面三个文件的时间戳和校验和
comps*.xml:rpm包信息
ftp://172.16.0.1/pub/{Server,VT,Cluster,ClusterStorage}
如何为yum定义repo文件
[Repo_ID]
name=Description
baseurl=
ftp://
http://
file:///
enabled={1|0}
gpgcheck={1|0}
gpgkey=
yum [options] [command] [package ...]
-y: 自动回答为yes
--nogpgcheck
list: 列表
支持glob
all
available:可用的,仓库中有但尚未安装的
installed: 已经安装的
updates: 可用的升级
clean: 清理缓存
[ packages | headers | metadata | dbcache | all ]
repolist: 显示repo列表及其简要信息
all
enabled: 默认
disabled
install :安装
yum install package_name
update: 升级
update_to: 升级为指定版本
remove|erase:卸载
info:
provides| whatprovides: 查看指定的文件或特性是由哪个包安装生成的;
groupinfo
grouplist
groupinstall
groupremove
groupupdate
/media/cdrom/{Server,VT,Cluster,ClusterStorage}
如何创建yum仓库:
createrepo
http://172.16.0.1/yum/{Server,VT}
练习:
1、将系统安装光盘挂载至/media/yum目录,用其实现yum仓库;
2、配置使用http://172.16.0.1/yum/{Server,VT,Cluster,ClusterStorage}为可用yum仓库;
写一个脚本,完成以下功能:
说明:此脚本能于同一个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;
RPM安装:
二进制格式:
源程序-》编辑-》二进制格式
有些特性是编译选定的,如果编译未选定此特性,将无法使用
rpm包的版本会楼后语源码,甚至落后很多
漏洞为修复等,会造成安全隐患
定制:手动编译安装
编译环境:开发环境
开发库,开发工具
LINUX:C语言开发
GNU:大多数GNU软件C开发
C,C++:
gcc:GNU C Complier,编译C程序
g++:C++程序编译
make:项目管理工具
makefile:定义了make(调用gcc,g++)按何种次序去编译这些源程序文件中的源程序
automake-->makefile.in-->makefile
autoconf-->configure
make install
编译安装的三步骤:
#tar
#cd
1 ./configure
--help 获取帮助信息
--prefix=/path/to/somewhere
--sysconfdir=/path/to/config_path
功能:1、让用户选定编译特性;2、检查编译环境;
2 make
3 make install
# tar xf tengine-1.4.2.tar.gz
# cd tegnine-1.4.2
# ./configure --prefix=/usr/local/tengine --conf-path=/etc/tengine/tengine.conf
# make
# make install
# /usr/local/tengine/sbin/nginx
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/tengine/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
netstat
-r:显示路由表
-n:以数字方式显示
-t:建立的tcp连接
-u:显示udp连接
-l:显示坚挺状态的连接
-p: 显示监听指定的套接字的进程的进程号及进程名