基本概念
1.程序:可执行的二进制文件,由指令和数据组成
2.链接库:二进制文件,不可执行(无执行入口),可被程序调用。
3.脚本:可执行文本文件,执行时由解释器转义成CPU可以执行的机器码。
4.编译:高级编程语言编写的代码,经过编译过程转译成CPU可识别的机器码(0、1)
5.编译过程:
1)检查程序语法
2)把程序代码转换成机器码
3)程序代码中若有使用其他链接库的机器码,则将其链接。
4)产生OS的相关信息;
5)存储为可执行文件
6.链接:将存储在链接库中的机器码存储到程序中
1)静态链接:执行期间,将机器码复制到执行文件中。
优点:可独立使用;缺点:执行时需较多的内存空间、文件变大。
2)动态链接:只存储需要链接库的名称、版本及函数的符号等信息。执行时,根据链接信息,加载所需的链接库及机器码。
优点:体积小、占用内存小;缺点:无法独立使用,当程序移动到另一主机时,需保证另一主机有相同的链接库。
备注:linux基本使用动态链接库。
7.查询链接库:ldd
#ldd /bin/ls #当程序采用动态链接时,查询程序执行时,需用到哪些链接库。
linux-gate.so.1 => (0x003b3000)
librt.so.1 => /lib/librt.so.1 (0x00518000)
显示格式:链接库名称 => 链接库的文件名(链接库加载到到内存的地址)
8.软件的依赖性
即软件执行时需要用到其他的组件(可能是程序、链接库或普通文件)
9.常用软件包类型
rpm包:.rpm格式,可使用rpm工具直接安装
源码包:gzip与bzip2压缩包,需使用源码编译安装
RPM软件包管理
RPM是RedHat Package Manager的缩写,也即使红帽软件包工具。提供一种可升级、具有强大查询功能、
支持安全验证的通用型linux软件包管理工具。
包格式:PACKAGE-VERSION-RELEASE.TYPE.rpm
ftp下载: lftp serverip
get:下载单个
mget:下载多个
bye
1.安装RPM包
rpm -i [-v] [-h] FILES...
-v:显示信息信息
-h:显示进度
--nodeps:忽略依赖关系
--force:强行安装
--oldpackage:降级安装
--replacepkgs:重新安装,替换原有安装
--replacefiles:替换文件
--test 检查软件包是否能够安装
FILES:RPM文件的名称,支持URL形式:
ftp://HOSTNAME/PATH/FILE #FILE可使用通配
http://HOSTNAME/PATH/FILE #FILE不支持通配
2.升级与更新RPM包
1.升级:升级时,会自动删除旧版本,再安装新版本
#rpm -U [-v] [-h] FILES...
2.更新:新版本覆盖旧版本上的文件。 (如果装有老版本,则升级。否则,退出)
#rpm -F [-v] [-h] FILES...
#rpm -Uvh --oldpackage nono-1.3.12-1.1.i386.rpm #降级安装
3.卸载软件包
#rpm -e PACKAGES...
3.查询软件包
rpm -q 包名 #查看指定软件包是否已经安装
rpm -qa #查看系统中已安装的所有软件
rpm -qi 包名 #查询已安装软件包的详细信息
rpm -ql 包名 #查找已安装软件的安装路径与文件列表
rpm -qc 包名 #查询已安装软件的配置文件
rpm -qf 包名 #查询指定文件为哪个软件所安装
rpm -qpi 包名 # 查询尚未安装的软件包的说明信息
rpm -qpl 包名 #查看尚未安装的软件包如果安装后会产生哪些文件
3.安全验证
rpm -V PACKAGES... #检查软件包从安装到现在,是否有被异动过。
返回值及含义:
5 MD5hash值已经改变
S 文件大小已经改变
M 文件模板已经改变,包括:权限、类型等
D 设备文件的主/次设备号改变
L 链接文件的源已经改变
U 文件拥有者已改变
G 文件拥有组已改变
T 文件最后修改时间已改变
rpm -V --all 查询所有软件包的状态
YUM
yum是改进版的RPM软件管理器,YUM可以很好的解决RPM所面临的软件包依赖关系,在安装、更新或删除软件时,
YUM会自动帮你解决依赖关系。使用YUM安装软件时至少需要一个YUM源(用于存放RPM软件包的目录),用户可以
通过HTTP、FTP或本地目录的方式访问YUM源。
1.创建YUM源
如果是合法RHEL用户,且已成功在RHN上登陆了你的RHEL系统,则不用建立自己的YUM下载源,因为RHEL会自动为你安装
一个名为yum-rhn-plugin的软件包,通过这个软件包,yum会自动使用RHN作为默认下载源。
建立YUM下载源步骤:
1.将所有RPM文件放入同一目录中;
2.在此目录建立YUM下载源数据:使用createrepo工具(事先安装此工具包)
createrepo [option] DIR
-u URL:指定基础URL位置
-o URL 指定输出的YUM下载源文件的路径名称(默认为当前目录)
-x PACKAGE:不包含package软件包
-g GROUPFILE:用来定义软件包群组的xml文件
3.通过HTTP或FTP方式分析这个目录:目的让其他主机可以访问到(略)
2.设置YUM
1.yum工具的配置文件:/etc/yum.conf
参数 :
cachedir:YUM缓存的目录
keepchche:yum成功执行安装动作后,是否要保存旧的软件包头信息与软件包文件,1保存,0不保存(默认为1)
debuglevel:日志级别,级别越高,产生的日志越高,范围0~10,默认为2
logfile:指定YUM的日志文件路径名称
plogins :是否启用所有的插件,默认为0,代表不启用
proxy:指定读取YUM下载源时使用的代理服务器的URL
2.yum下载源配置文件:/etc/yum.repos.d目录下,以.repo为后缀的文件,可以指定多个
作用:指定使用哪个YUM下载源
文件格式:
[Repo_ID] 唯一标识符
NAME=VALUE...
NAME是参数名,VALUE是参数值,常见NAME有:
name :定义YUM下载源的完整名称
baseurl:指定YUM下载源的URL地址
baseurl=ftp://路径
bashurl=http://路径
baseurl=file://路径
mirrorlist :定义通过哪一个URL来取得所有影像站点的清单
enabled:是否启用这个YUM下载源,1启用,0不启用。
gpgcheck:安装这个YUM下载源的软件前是否要检查RPM软件包的数字签名,0检查,1不检查。
gpgkey:RPM软件包数字签名的密钥
gpgkey=file:///pki/rpm-gpg/RPM-GPG-KEY-redhat-releasse
常见变量:
$releasever 代表系统发行版本号
$arch 代表CPU架构
$basearch 代表系统架构
$YUM0-9 代表shell对应的0-9个同名变量替换。
3.YUM命令
用法:yum [选项] [指令] [软件包]
选项: -y 非交互式安装
指令:
install package1 package2 [...] 使用YUM源安装软件包
update package1 package2 [...] 使用YUM源升级软件包
check-update 检查YUM源中所有可用的升级
remove | erase package1 [package2] [...] 卸载软件包
list [...] 列出系统中已经安装的以及yum源中所有可用的软件包
info [...] 查看软件包信息
clean all 清空所有的缓存信息
groupinstall group1 [group2] [...] 使用yum源安装组包
grouplist 列出系统中已经安装的以及yum源中所有可用的组包
groupremove group1 [group2] [...] 卸载组包
search string1 [string2] [...] 根据关键字查找软件
localinstall rpmfile [rpmfile2] [...] 通过本地rpm文件安装软件
history 查看历史记录
实例:
#yum clean all 清空YUM缓存
#yum install dialog
#yum -y expect #非交互式安装
#yum update #检查所有的软件并更新
#yum remove dialog
#yum list #已安装的软件显示@
#yum grouplist
#yum groupinstall "Chinese Support" 安装中文组包
#yum search web #查看Web相关软件
#yum history
源码编译安装软件
1.软件源码不能直接在计算机中运行,需要经过编译转换成计算机可识别的机器语言后,才能执行安装。
使用安装者可根据自己的需要定制自己的软件。
2.rpm包或其他二进制包是已经编译好的软件包,所以可直接安装
源码安装软件的具体步骤:
1)准备开发环境(编译环境)
RHEL5 :安装“Development Tools" 和 “Development Libraries”
RHEL6:安装“Development Tools”和“Compatibility Libraries”
2)编译前设置 ./configure
作用:1.让用户选定编译设置;2、检查编译环境
./configure
--help
--prefix=/path/to/somewhere #软件安装路径,不指定默认安装在/usr/local
--sysconfigdir=DIR 指定配置文件存放路径,不指定默认存放在./conf/etc目录
--datadir=DIR 指定数据目录,用来存放只读的数据文件
--libdir=DIR 指定链路库目录
--includedir=DIR 指定提供C/C++语言的引入文件所在目录
--infodir=DIR info文件目录
--mandir=DIR man文件的目录
--bindir=DIR 指定执行文件目录
--sbindir=DIR 指定系统执行文件目录
--libexecdir=DIR 指定可执行文件的目录
3)编译:make 将源代码编译成计算机可识别的机器语言
4)安装 make install
make命令:
格式:make [-f MAKEFILE] [OPTIONS] [TRAGET]
默认使用当前路径的Makefile文件,也可用手工指定, -f MAKEFILE选项。
Mekefile文件:
作用:定义一个或多个TARGET,每个TARGET定义要执行的工作内容。
Makefile文件格式:
TARGET:DEPENENCE_TARGETS...
ACTIONS.. #ACTION表示要执行的工作
若未指定TRAGET,则默认使用MAKEFILE文件的第一个target
执行configure后,会产生makefile文件,由configure命令产生的makefile会提供以下几个常见Target:
all:编译所有程序与链接库、产生所有info与man文件
clean:清除上次编译的记录
distclean:清除所有,包括Makefile,执行此命令后,必须重新设置编译参数
install:安装所有程序、链接库、引入文件等
uninstall:卸载安装所有程序、链接库、引入文件等。
注意事项:
1.PATH变量添加软件的执行路径,这样执行程序时,无需要写完整路径名。
解决方法:/etc/profile.d/目录下新建一个.sh的文件,里面定义export PATH=$PATH:/程序执行路径
2.安装软件时,自定义安装路径后,软件依赖的库文件会被安装到“指定路径下”的modules/lib目录,这样其他软件无法共享此库文件
解决方法:在/etc/ld.so.conf.d/中创建扩展名为.conf文件,把库文件路径增加到里面,然后执行ldconfig命令通知系统重新搜索库文件
3.头文件
任何一个支持二次开发的源程序,都会向外提供调用库,其包含了头文件。头文件默认存放路径:/usr/include,所需要创建软件的头文件
链接到/usr/include目录下。
eg: ls -s /usr/local/tengine/include/ /usr/include/tengine #把软件tengine头文件目录,链接至/usr/include/的tengine(给目录创建链接)
4.man文件路径,默认安装在安装目录下的man目录,man不在标准路径下,解决方法:
方法1:#man -M 程序main目录 COMMAND
方法2:在/etc/man.config中新增一条man文件的路径。(程序的man文件路径)