应用程序:
程序:Architecture
C语言:源代码——》(编译)二进制格式
脚本:解释器(二进制程序)
源代码——》编译——》链接——》运行
程序:
库:
静态
动态
静态连接(直接把需要的库文件打包进程序)
动态连接(将载入内存的库文件直接调用)
共享库
.so后缀(shared object)
配置文件
程序的组成部分:
1、二进制程序(二进制文件运行需要依赖于库,这里的库指的是共享库和程序自身提供的库)
库一般存放在/lib,/usr/lib路径,应用程序的库及系统底层glibc库都存放在/usr/lib路径
2、库
3、配置文件
4、帮助文件
系统目录
/boot:内核,initrd(initramfs),建议单独分区
/etc:配置文件
/usr
/var: 外围的文件系统,存放日志信息,和运行过程、临时文件等的区域,可以单独分区
/dev:设备文件,不能单独分区,2.6内核版本以后:udev提供动态配置外设的功能
/lib:库文件
/tmp:可以单独分区,至少400M空间
/bin:二进制程序
/sbin:二进制程序
/proc:伪文件系统,不能单独分区,是内核管理时使用的,默认为空的
/sys:伪文件系统,不能单独分区,是内核管理时使用的,默认为空的
/mnt
/media
/home:建议单独分区
/root:不能单独分区
/misc:杂项
/opt:早期很多三方软件,都存放在该目录
/srv
/usr/share/man:帮助文件
/etc ,/bin, /sbin, /lib, /usr/share/man,默认操作系统启动会用到的程序,这些目录不能挂载额外的分区,必须在根文件系统的分区上
另外的路径用于安装程序的路径:
一、/usr
bin
sbin
lib
以上的配置文件也存放在etc目录下,帮助文件也放在/usr/share/man目录下
操作系统核心功能,都在以上目录下,usr目录可以单独分区,可以类似像windows系统上,安装软件可以安装到其他盘,但重启系统程序可能无法正常启动,但在linux下,可以将所有的程序安装在usr目录下,重新格式化安装/etc,/bin,/sbin目录即可,安装的程序还可继续使用
二、/usr/local
bin
sbin
lib
etc
man
以上可以理解为一个独立体系,通常为安装的第三方软件,建议独立分区
/proc/cpuinfo 包含了CPU各种支持的指令集
软件包管理器:
1、打包成一个文件:二进制程序,库文件,配置文件,帮助文件
2、生成数据库,追踪所安装的每一个文件
软件包管理器的核心功能:
1、制作软件包
2、安装,卸载、升级、查询、校验
readhat,suse,debian
readhat,suse:rpm
readhat package manager
rpm is package manager
debian:dpt
依赖关系,解决方法:
前端工具:yum(Yellowdog update modifier),apt-get
后端工具:rpm,dpt
rpm命令
rpm:
数据库/var/lib/rpm
rpmbuild:
安装,查询,升级,检验,数据库的重建,验证数据包等工作:
RPM包的命名:
软件包名称:
组成部分:
主包:
bind-9.7.1-e151.i586.rpm
子包
bind-libs-9.7.1-e15.1.i586.rpm
bind-utils-9.7.1-e15.1.i586.rpm
包名格式:
name-version-release.arch.rpm
bind-major.minor.release-release(RPM作者编译的版本号).arch(平台).rpm
主版本号:重大改变会改变
次版本号:某个子功能发生重大 变化会改变
发行号:修改了部分bug,调整了一点功能会改变
bind-9.7.1.tar.gz 原代码
rpm包:
二进制格式:安装直接可以运行
rpm包作者下载源程序,进行编译配置完成后,制作成rpm包
源码格式:需进行编译,在平台上编译能更好的发挥性能
i686:32位平台
x64、x84是64位平台
noarch:什么平台都可以安装,bind-9.7.1-1.noarch.rpm
ppc:powper PC平台安装使用的,bind-9.7.1-ppc.rpm
rpm安装:
rpm -i /PATH/PACKAGE_FILE
-h 显示进度,以#号显示进度,每个#表示2%
-v 显示详细信息,-vv -vvvv
rpm - ivh /path/to/package_file
--nodeps:忽略依赖关系
--replacepkgs:重新安装,替换原有的安装
--oldpackage:降级
--force:强行安装,可以实现重装或降级
--test测试可不可以安装
rpm查询
rpm -q /path/package_file:查询指定的包是否已安装
-qa :查询已安装的所有的包
-qi PACKAGE_NAME:查询指定包的说明信息
-ql PACKAGE_NAME:查询指定包安装后生成的文件列表
-qf /path/to/somefile:查询指定的文件是由哪个rpm包安装生成的
-qc package_name:查询指定包安装的配置文件
-qd package_name:查询指定包安装的帮助文件
-q --scripts package_name:查询指定包中包含的脚本
如果某rpm包尚末安装,我们需要查询其说明信息,安装以后会生成的文件
rpm -qpi /path/to/package_name(p是指定软件包的路径)
rpm -qpl 等用法
rpm升级
rpm -Uvh /path/to/newpackage_name:如果装有老版本的,则升级:否则安装
rpm -Fvh /path/to/newpackage_name:如果装有老版本的,则升级,否则退出不安装
rpm降级
rpm -ivh --oldpackage /path/to/oldpackage_name
rpm -Uvh --oldpackage /path/to/oldpackage_name
rpm卸载
rpm -e package_name(不能与其他软件包有依赖,如果有依赖是不允许卸载)
--nodeps
校验
rpm -V package_name
[root@localhost Packages]# rm -rf /usr/share/zsh/5.0.2/functions/zrecompile [root@localhost Packages]# vim /usr/share/zsh/5.0.2/functions/zfgcp [root@localhost Packages]# rpm -V zsh S.5....T. /usr/share/zsh/5.0.2/functions/zfgcp missing /usr/share/zsh/5.0.2/functions/zrecompile
s.5....T.含义:
S:文件大小
M:权限
5:MD5值
D:主,次设备号
L:路径不匹配
U:属主
G:属组
T:修改时间
检验来源合法性,及软件包完整性
加密类型:
对称:加密解密使用同一个密钥
公钥:一对儿密钥,公钥,私钥,公钥隐含于私钥中,可以提取出来,并公开出去
单向:
/etc/pki/rpm-gpg/RPM-GPG-KEY-readhat-release 公钥的存放的位置,校验需将文件导入RPM包,如下:
rpm -K /papt/pachage_file,检验合法性。
dsa,gpg:验证来源合法性,也即验证签名,可以使用--nosignature,略过此项
sha1,md5:验证软件包完整性,可以使用--nodigest,略过此项
[root@localhost Packages]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #导入密钥 [root@localhost Packages]# rpm -K zsh-5.0.2-7.el7.x86_64.rpm zsh-5.0.2-7.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
重建数据库
/var/lib/rpm
rpm
--rebuilddb:重建数据库,一定会重新建立数据库
--initdb:初始化数据库,没有才建立,有就不用建立
yum repository
文件服务:
ftp
web
file
client:
配置文件
yum仓库
HTML:HyperText Mark Language
XML:eXtended Mark Language
XML,JSON:半结构化的数据,用于不同平台数据共享的手段
yum仓库中的元数据文件:
primary.xml.gz:
包含了当前仓库中包含了哪些RPM软件包列表
依赖关系
每个RPM安装生成的文件列表
filelists.xml.gz
当前仓库中所有RPM包的所有文件列表
other.xml.gz
额外信息,RPM包的修改日志
repomd.xml
记录的是上面三个文件的时间戳和校验和
comps*.xml
RPM包分组信息
配置文件:/etc/yum.conf
如何为yum定义repo文件
[Repo_Nmae]:标识ID
name=:Description
baseurl=:
ftp://
http://
file:///
enabled={1|0}
gpgcheck={1|0}
gpgkey=path
yum命令
yum [options] [command] [package...]
-y:自动回答为yes
--nogpgcheck
list :列表
可以使用格式:yum list all bash*(支持glob)
all
available:可用的,仓库中有但尚未安装的
installed:已经安装的
updates:可用的升级
clean: [ packages | metadata | expire-cache | rpmdb | plugins | all ],清理缓存
repolist: [all|enabled|disabled]:显示repo列表,默认显示enabled
install :安装
yum install PACKAGE_NAME
update:升级
update_to:升级为指定版本
remove|erase:卸载
info package_name:等于rpm -qi 查询指定包的说明信息
provides|whatprovides:查看文件是由哪个安装包生成的,等于rpm -qf
groupinfo
grouplist:显示所有组
groupinstall:安装组
yum groupinstall "development tools" "development libraries"
group
search STRING1:以字符串查询软件包名称
reinstall:重装
localinstall:安装本地软件包
yum localinstall --nogpgcheck PACKAGE_NAME
如何创建yum仓库步骤:
createrepo:创建元数据
createrepo /path/to/soft
yum clean all
yum repolist
如果需要定义为主的,需要将使用RPM包分组信息文件重建,如下:
createrepo -g /root/comps-rhel5-vt.xml /yum/vt
定制:手动编译安装
编译环境,开发环境
开发库,开发工具
C,C++,perl,java,python
c,c++编译工具:
gcc:GUN c complier,c
g++:
make:项目管理工具
makefile:定义了make(GCC,G++)按何种次序去编译这些源程序文件中的源程序
编译安装的三步骤
前提:准备开发环境(编译环境)
安装RHLE5“development tools" "development Libraries"
安装RHLE6 "development tools" "compatibility libraries"(兼容库)
#tar
#./configure
--help :获取使用
--prefix=/path/to/somewhere:指定安装路径
--sysconfdir=/path/to/conffile_path:指定配置文件安装路径
功能:1、让用户选定编译特性;2、检查编译环境
#make
#make install
示例安装tengine服务:
下装source文件,安装好开发或编译环境
./configure --prefix=/usr/local/tengine --conf-path=/etc/
make
make install
vim /etc/profile--> PATH=$PATH:/usr/local/tengine/sbin(将nginx命令加入环境,可直接使用)
source /etc/profile,加载环境变量
如果安装到非默认路径下,需注意
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,需修改
到/etc/man.config,增加MANPATH路径。或 man -M /path/to/man_dir Command(重启失效)
#!/bin/bash # POSTFIX=`echo $1 |awk -F. '{print $2}'` if [ "$POSTFIX" != "repo" ];then echo -e "\033[31mcreaterepo Usage: FILENAME.repo\033[0m" exit 7 fi cd /etc/yum.repos.d/ if [ -e $1 ];then echo "$1 existed" exit 9 else touch $1 &> /dev/null echo "$1 touch sucessful" fi read -p "Enter your repo_id: " REPO_ID until [ $REPO_ID == 'quit' ];do echo "[$REPO_ID]" >> $1 read -p "Enter your repository name: " REPO_NAME echo "name=$REPO_NAME">> $1 read -p "Enter your repository url: " REPO_URL echo "baseurl=$REPO_URL">>$1 read -p "Enter your enabled value: " REPO_ENABLE echo "enabled=$REPO_ENABLE">>$1 read -p "Enter your gpgcheck value: " REPO_GPGCHECK echo "gpgcheck=$REPO_GPGCHECK" >> $1 read -p "Enter your gpgfile path: " REPO_GPGFILE echo "gpgkey=$REPO_GPGFILE">>$1 read -p "Enter your repo_id agin: " REPO_ID done
netstat 命令
-r:显示路由表
-n:以数字方式显示
-t:建立的TCP连接
-u:显示UDP连接
-l:显示监听状态的连接
-p:显示监听指定的套接字的进程的进程号及进程名