本章Blog相关Linux知识点
程序:预编译,编译(源代码——>cpu指令),汇编,连接
API:application programing interface 应用程序接口;兼容,意味开发库接口兼容,因此源代码可跨平台
ABI:application binary interface 应用二进制接口;兼容,编译后的程序可跨平台
库:可执行的程序,本身不能作为程序执行入口,但可以被调用;编译好的二进制格式
头文件(/usr/include):
# which cat 查看一个可执行程序的具体路径,即外部命令位置
# ldd /bin/cat 查看可执行程序依赖的共享库
# man -M /usr/locla/nginx/man nginx 调用安装路径man 帮助文件,查看命令功能
两台操作系统相同的平台,在A主机上编译的程序,手动迁移到B主机,无法保证其正常运行,需要保证程序依赖的库在B主机上存在 。
软件包的组成部分:
二进制程序:默认安装目录/bin , /sbin ,/usr/bin ,/usr/sbin ,/usr/local/bin ,/usr/local/sbin
库文件: 默认安装目录/lib ,/usr/lib ,/lib64 , /usr/lib64
头文件:默认安装目录 /usr/include
配置文件:使用纯文本文件保存配置信息 ,默认安装目录为/etc
帮助文件:默认安装目录为/usr/share/man ,配置文件/etc/man.conf 包含man 文件 ,info文件 ,readme 等 文件
# man command 到某路径下查找与命令相同的通常以.gz结尾的压缩文件的文件名.
例: 编译安装的mysql 程序,包括
二进制程序文件:/usr/local/mysql-5.5.54/bin
库文件:/usr/local/mysql-5.5.54/lib
头文件:/usr/local/mysql-5.5.54/include
配置文件:/usr/local/mysql-5.5.54/support_files/*.cnf
帮助文件:/usr/local/mysql-5.5.54/man , /usr/local/mysql-5.5.54/README
例: 编译安装的httpd 程序,包括
二进制程序文件:/usr/local/httpd-2.2.34/bin
头文件:/usr/local/httpd-2.2.34/include
配置文件:/usr/local/httpd-2.2.34/conf/
帮助文件:/usr/local/httpd-2.2.34/man , /usr/local/mysql-5.5.54/README
应用程序管理器:
debian:.deb使用dpkg应用程序管理软件
Redhat:.rpm 使用RPM(RPM is package manager)应用程序管理器
包管理器的基本功能:打包,安装,查询 ,升级,卸载,校验,数据库管理
应用程序的安装:
包管理rpm 安装
使用源码编译安装
通用二进制格式安装
使用前端管理器工具(yum)安装
程序包格式:
源程序包格式:name-major.minor.release.tar.{gz|bz2|xz} 例:mysql-5.5.54.tar.gz
rpm 包格式:name-version-release.arch.rpm 例:MySQL-client-5.5.54-1.el6.x86_64.rpm ,通常release中包含版本发行号及适用的os版本
源码包格式:源码包拥有10个功能,大多数用户只用其中的6个功能,余下的4个分别为:大包,核心主包,支包,分包。
验证来源合法性:
源码包:通过MD5 或SH1 码校验
RPM包:通过发行商提供的可信。包括验证包完整性——校验码(MD5 或SH1),验证来源合法——公钥(RSA)。
获取RPM途径:
发行商提供的光盘或站点服务器
http://mirrors.163.com ,http://mirrors.sohu.com , http://mirrors.aliyutn.com
http://rpmfind.net
http://rpm.pbone.net
rpm包管理及命令使用
rpm包管理:
1、校验包来源合法及软件包完整性
导入公钥:
#rpm --import /mnt/RPM-GPG-KEY-CENTOS-6 导入公钥
验证来源合法性:
源码包:通过MD5 或SH1 码校验
RPM包:通过发行商提供的可信。包括验证包完整性——校验码(MD5 或SH1),验证来源合法——公钥(RSA)。
# rpm [ -K | --checksig ] rpm_name.rpm 检查包来源合法及软件包完整性
--nosignature :不检查来源合法性
--nodigest:不检查包完整性
例:# rpm -K rpm -K zsh-4.3.10-7.el6.x86_64.rpm --nodigest
2、rpm包安装
如存在依赖关系,需先解决依赖关系 ;若忽略依赖关系 ,--nodeps
#rpm {-i|--install} [install-options] PACKAGE_FILE ...
-v :显示详细信息
-h :以#的个数表示安装进度
-ivh :一般三者组合使用
--test :仅测试,不执行安装
--nodeps :忽略依赖关系
--replacepkgs :重新安装
例:# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm 安装zsh包
例:# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm 重新安装zsh包
3、rpm包卸载
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
例 :# rpm -e zsh-4.3.10-7.el6.x86_64 --nodeps 忽略依赖关系,卸载zsh 包
4、rpm包查询
# rpm {-q|--query} [select-options] [query-options]
query-options
[--changelog] [-c,--configfiles] [-d,--docfiles] [--dump]
[--filesbypkg] [-i,--info] [--last] [-l,--list]
[--provides] [--qf,--queryformat QUERYFMT]
[-R,--requires] [--obsoletes] [--scripts] [-s,--state]
[--triggers,--triggerscripts
-qa:查询所有安装的包 例:# rpm -qa apr* 或 # rpm -qa |grep “^apr”
-qc:查询安装包生成的配置文件
-qd:查询安装包生成的帮助信息 例# rpm -qd apr
-qi:查询安装包的描述信息
-ql:查询安装在当前生成的列表信息
-qf:查询某文件是由那个安装包生成的 例 # rpm -qf /etc/passwd
-q --scripts :查询包相关脚本
-p :查询尚未安装的rpm包信息,可以 -i ,-l,-c等选项组合使用 例:# rpm -qpc zsh-4.3.10-7.el6.x86_64.rpm
5、rpm包升级
# rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
--nodeps :忽略依赖关系
--force :强制安装
6、校验安装后的rpm包
# rpm {-V|--verify} [select-options] [verify-options]
状态值及含义:
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
例: [root@study Packages]# rpm -V apr 校验安装后的rpm包
S.5....T. /usr/lib64/libapr-1.so.0.3.9
7、rpm包数据库初始化及重建
# rpm {--initdb|--rebuilddb}
--initdb 重建初始化,如果事先不存在,则重建一个管理库
--rebuilddb 重建管理库,若存在,则覆盖
注:这两个参数是极为有用,有时rpm 系统出了问题,不能安装和查询,大多是这里出了问题;
yum repo管理及相关命令
程序包管理器的前段工具:yum(yellowdog update modifier)
1、依赖关系
yum自动解决依赖关系
2、文件服务器(共享rpm包):通过yum所支持的文件共享机制将各个rpm包通过文件服务共享
repository:仓库
需要的各rpm包
依赖关系、程序包安装后所能够生成的列表等元数据文件
3、yum客户端
配置文件,指定各可用的yum仓库
缓存元数据,yum回到各可用的yum仓库获取元数据,并缓存到本地
分析元数据(包的依赖关系),根据具体操作请求完成元数据分析,包括检查依赖关系、文件列表等信息
执行具体操作
4、客户端配置文件指定对应服务器的访问方式
ftp服务器: ftp://server/path_to_repo
http服务器:http://server/path_to_repo
NFS服务器:nfs://server/path_to_repo
file服务器: file:///server/path_to_repo
5、配置yum仓库,要使用yum管理应用程序,首先为其配置可用的yum仓库。
配置文件:/etc/yum.conf ,/etc/yum.repos.d/*.conf
配置文件格式:由两段组成,类似于Windows的ini配置文件
[main] 主配置段
[repo] 仓库配置段
配置repo:
[repo_id]
name=string 定义仓库名称
baseurl=仓库访问路径。系统中repodata文件目录,即仓库目录
enabled={1|0} 1代表仓库启用,0代表仓库关闭
gpgcheck={1|0} 1代表校验,0代表不校验
gpgkey=公钥路径(可以是本地,也可以是服务器端路径)
cost=定义此仓库开销,默认为1000 ,值越小越优先使用
6、yum配置文件中可用的四个宏
$releasever :程序的脚本。对yum而言指的是redhat-release版本,只替换为主版本号。如redhat6.5 ,则 $releasever 表示为6
$basearch:系统基本架构 ,如i686 ,i586等的基本架构为i386
$arch:系统架构
$YUM0-9 :在系统定义的环境变量,可以在yum中使用
例:配置yum仓库
# vi /etc/yum.repos.d/Base.conf
[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
enabled=1
7、yum相关命令
# yum [options] [command] [package ...]
包管理
* help [command]
* install package1 [package2] [...] -y 安装指定的程序包
* update | upgrade [package1] [package2] [...] 升级指定的程序包
* downgrade package1 [package2] [...] 降级安装的程序包
* check-update 检查可升级的包 例# yum check-update apr
* remove | erase package1 [package2] [...] 删除yum包,被依赖的包会一同删除
* repolist [all|enabled|disabled] :列出所有可用的yum仓库
* reinstall package1 [package2] [...] 重新安装指定的包
* list [...] 显示rpm列表 例 # yum list
* info [...] 显示rpm包信息 例 # yum info apr 等同于 #rpm -qi apr
* clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] 清除缓存
* provides | whatprovides /path/to/somefile 查询某文件是由那个包安装生成
* version [ all | installed | available | group-* | nogroups* | grou-plist | groupinfo ]
* history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
包组管理:
* groupinstall group1 [group2] [...] 安装包组
* groupupdate group1 [group2] [...] 升级包组
* grouplist [hidden] [groupwildcard] [...] 列出所有的包组
* groupremove group1 [group2] [...] 卸载包组
* groupinfo group1 [...] 列出包组信息,注意组名有空格
三个与开发有关的组:
Server Platform Development 服务器开发组
Development tools 基本开发环境组
Desktop Platfrom Development 有图形程序时,需安装此组
安装本地包:
# yum install /path/to/package_file --nogpgcheck 手动禁止检查来源及合法性
8、yum repository 文件
# yum install createrepo -y 安装createrepo 功能
# createrepo /path/to/somefile 为某路径创建repodata 目录
ftp mirror 下载包
repodata ,自动生成
repomd.xml :为repodata中的其他文件提供元数据信息
实验1:把本地光盘作为yum源
步骤:
1、禁用其他yum源,设置enable=0;清理缓存 # yum clean all
2、创建本地yum源
# vi /etc/yum.repos.d/local.repo
[local_base]
name=Centos-$releasever-$basearch
baseurl=file:///mnt/ 光盘挂载到/mnt/ 目录
gpgcheck=1
enabled=1
gpgkey=file://mnt/RPM-GPG-KEY-CentOS-6
3、查看确认该yum源是否生效
# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.ustc.edu.cn
* extras: mirror.bit.edu.cn
* updates: mirror.bit.edu.cn
repo id repo name status
local_base Centos-6-x86_64 6,518
实验2:把2张光盘复制到本地作为yum源
1、禁用其他yum源,设置enable=0;清理缓存 # yum clean all
2、分别插入2张Centos6.6光盘,并制作本地iso光盘镜像:
# dd if=/dev/sr0 of=/media/Centos-6.6(1).iso
# dd if=/dev/sr0 of=/media/Centos-6.6(2).iso
3、挂载本地iso文件:
# mount -o loop /media/Centos-6.6(1).iso /usr/local/yum/dvd1
# mount -o loop /media/Centos-6.6(2).iso /usr/local/yum/dvd2
4、配置开机自动挂载 # vi /etc/fstab 添加如下两行
/media/Centos6.6(1).iso /usr/local/yum/dvd1 iso9660 defaults,loop 0 0
/media/Centos6.6(2).iso /usr/local/yum/dvd1 iso9660 defaults,loop 0 0
5、验证是否实现开机自动挂载
#mount -a
6、使用createrepo命令创建软件源目录
# createrepo /usr/local/yum/ ,将会在 /usr/local/yum目录下生成repodata的子目录。
7、调整软件源配置文件/etc/yum.repos.d/CentOS-Media.repo
# vi /etc/yum.repos.d/CentOS-Media.repo
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///usr/local/yum/ 调整该文件,指向repodata目录
gpgcheck=1
enabled=1 启用该软件源
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[c6-epel]
name=CentOS-$releasever - Epel
baseurl=http://mirrors.sohu.com/fedora-epel/$releasever/$basearch/
enabled=1
gpgchek=1
gpgkey=http://mirrors.sohu.com/fedora-epel/RPM-GPG-KEY-EPEL-6
8、验证该本地源生效
[root@study media]# yum repolist enabled
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
c6-epel CentOS-6 - Epel 12,455
c6-media CentOS-6 - Media 4,184
repolist: 16,639
[root@study media]# yum install mysql-libs 可正常使用本地yum源
Loaded plugins: fastestmirror
Setting up Install Process
Loading mirror speeds from cached hostfile
* c6-media:
Resolving Dependencies
--> Running transaction check
---> Package mysql-libs.x86_64 0:5.1.73-3.el6_5 will be installed
--> Finished Dependency Resolution
源码包管理及编译安装
程序包管理之编译安装:源码:c ,c++;perl源码 ;python源码
应用程序: https://sourceforge.net https://github.com
1、源程序组成:
项目工程:把代码分散于多个源代码文件
GNU/make :项目编译工具
autoconf :configure 脚本
检查编译环境是否满足需求,并定义当前程序比哪一时启用那个特性或功能,以及安装路径的定义等
结果:会根据Makefile.in 文件生成makefile文件
automake:生成Makefile.in文件
用于结合configure脚本生成Makefile.in 文件
makefile 文件是make命令的配置文件
2、编译安装步骤:
源代码解压: #tar -xf package-version.tar.{gz|bz2|xz}
注意:展开后的目录名通常为package-version
切换至解压目录 # cd package-version
执行./configure 脚本 # ./configure
编译 # make && make install
3、configure脚本的通用功能
指定安装路径 : --prefix=/path_to_somefile
配置文件路径 : --sysdir=/path_to_somefile
指定启用特性: --enable-feature ,例 --enable-fpm ;指定禁用特性 : --disable-feature ,例--disable-socket
指定依赖的功能、程序或文件: --with-function 启用功能 ;--without-function 禁用功能
不同的程序,其configure脚本功能不同,获取帮助方式 # ./configure --help
实验:编译安装nginx
1、下载并解压源码包:
# wget http://mirrors.sohu.com/nginx/nginx-1.10.3.tar.gz
# tar -xf nginx-1.10.3.tar.gz
2、切换至解压目录
# cd nginx-1.10.3
3、执行./configure 脚本
# ./configure --prefix=/usr/local/nginx-1.10.3
4、执行编译安装
# make && make install
5、二进制程序设置环境变量
# vi /etc/profile.d/nginx.sh
export PATH=$PATH:/usr/local/nginx-1.10.3/sbin
:wq
# source /etc/profile.d/nginx.sh 重读环境变量
6、库文件输出
# vi /etc/ld.so.conf.d/nginx.conf
/usr/local/nginx-1.10.3/lib
:wq
#ldconfig 让系统重新生成库文件路径缓存
7、头文件输出给系统
# ln -sv /usr/local/nginx-1.10.3/include /usr/include/nginx
8、配置文件
# cp /usr/local/nginx-1.10.3/conf/nginx.conf /etc/nginx.conf
9、帮助文件
# vi /etc/man.conf
MANPATH_MAP /usr/local/nginx-1.10.3/bin /usr/local/nginx-1.10.3/man
本章知识点汇总
程序包管理器:rpm ,deb(dpkg)
rpm - RPM Package Manager
导入公钥:# rpm --import
验证:# rpm -K | --checksig
安装: # rpm -ivh ,--replacepkgs ,--nodeps
升级: # rpm -Uvh | -Fvh --force ,--nodeps
卸载: # rpm -e | --erase ,--nodeps
查询: # rpm -qa | -qc | -qd | -ql | -qi | -qf | -qpl | -q --scripts
校验: # rpm -V
重建数据库: # rpm --rebuilddb | --initdb
yum : C/S 架构
yum repository : 文件服务器 (rpm包 + 元数据)
文件服务器格式: ftp:// ,http:// , nfs:// , file:///
生成元数据: # createrepo
yum client:
依赖配置文件:/etc/yum.conf , /etc/yum.repos.d/*.repo
配置yum repo :
[repo_id]
name=
baseurl=
gpgcheck=
enabled=
gpgkey=
cost=
yum 管理命令
安装: # yum install | reinstall
卸载: # yum remove | erase
查询升级包:# yum check-update
升级: # yum update | upgrade
降级: # yum downgrade
查询: # yum info
列出yum repo : # yum repolist
清除缓存: # yum clean
重读缓存: # yum makecache
列出包组:#yum grouplist
安装包组: # yum groupinstall
显示包组信息: # yum groupinfo
删除包组: # yum groupremove
源码包管理安装:
下载源码包,解压并切换进入该解压目录
./configure 检查编译环境,定义特性及功能
make && make install 安装
输出: 环境变量,头文件 ,库 ,配置文件及帮助文件