7.1 应用程序

源代码 —— 编译 —— 链接 —— 运行

  • 应用程序:具有执行权限的就是。与CPU架构密不可分
  • 编译:生成二进制文件(可执行文件),匹配底层架构
  • 链接:

    • 库:静态库和动态库 .so (shared object)

      • 静态链接过程:把库文件集成到应用程序中
      • 动态链接过程:库文件与应用程序分开,做链接,运行时调用

程序 = 数据 + 指令 应用程序运行时,申请CPU和内存资源

应用程序中包含的内容:

  • 二进制文件(可执行程序)(/bin、/ sbin、/usr/bin、/usr/ sbin)
  • 库(/usr/lib)
  • 配置文件(/etc)
  • 帮助文件(/usr/share/)

7.2 内存地址空间

  • text:存放指令
  • data+bss:data存放数据,bss: block system of symbol 存放初始化为0的变量
  • 堆:heap存放运行中临时文件
  • 栈:存放应用程序的变量和函数等

7.3 软件安装——RPM

Redhat ,SUSE:RPM

Debian ,Ubuntu:dpt

前端工具:yum apt-get (自行解决依赖关系)

后端工具:RPM dpt (不能自行解决依赖关系)

7.3.1 RPM的优点
  • RPM软件包中包含了编译过的程序与配置文件,用户不需要重新编译
  • RPM在安装之前,首先会检查硬盘容量,操作系统版本等,避免被错误安装
  • RPM使用RPM数据库管理(/var/lib/rpm),数据中记录应用程序的参数,便于升级,卸载,查询等
  • RPM本身会提供应用程序版本信息,相关属性,软件名称,用途等。便于用户了解软件

7.3.2 RPM包的组成

RPM命名:

  • 包:组成部分

    • 主包:yum-3.4.3-150.e17.centos.noarch.rpm
    • 子包:yum-langpacks-0.4.2-7.e17.noarch.rpm
  • 包名格式:

    • name-version-release.arch.rpm (noarch代表任何架构都可以使用)
  • 其中的version:

    • 主版本号:功能重大改进则改进主版本号
    • 次版本号:某个子功能发生重大变化
    • 发行号:修正了部分bug,调整了一点功能

RPM的功能:安装、查询、卸载、升级、校验、数据库重建、验证数据包

两种类型的包:

  • RPM包:经过源代码编译后的软件包
  • .tar.gz:源码包,没有经过编译

RPM的命令:

  1. 安装rpm -ivh name.rpm
  • -i :安装
  • -h :打印50个#号显示进度条
  • -v :显示更详细的信息
  • —nodeps:忽略依赖关系,可能导致软件包安装不完整
  • —replacepkgs :重新安装,替换原有安装;
  • —force:强行安装,可以实现重装或降级;
  1. 查询RPM -q PACKAGE_NAME: 查询指定的包是否已经安装
  • -qa :查询已经安装的所有包
  • -qi PACKAGE_NAME:查询指定包的说明信息;
  • -ql PACKAGE_NAME:询指定包安装后生成的文件列表;
  • -qc PACEAGE_NEME:查询指定包安装的配置文件;
  • -qd PACKAGE_NAME:查询指定包安装的帮助文件;
  • -qf /path/to/somefile:查询指定的文件是由哪个rpm包安装生成的;
  • -q —scripts PACKAGE_NAME:查询指定包中包含的脚本

    • 脚本:包含软件包安装前(preinstall),安装后(postinstall),卸载前(preuninstall),卸载后(postuninstall)执行的脚本
  1. 未安装前查询

如果某rpm包尚未安装,我们需查询其说明信息、安装以后会生成的文件:

  • rpm -qpi /path/to/package_name 查看未安装软件包信息
  • rpm -qpl /path/to/package_name 查看未安装软件包 安装的列表
  1. 升级
  • -Uvh /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级;否则,则安装;
  • -Fvh / PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级;否则,退出;
  • -Uvh — oldpackage PACKAGE_NAME:降级
  1. 卸载
  • rpm -e PACKAGE_NAME [— nodeps:忽略依赖关系]
  1. 校验:验证软件包列表或配置文件的完整性
  • rpm -V PACKAGE_NAME

应用程序配置文件完整性破坏后的代码

5 MD5校验和

S 文件大小

L 符号连接

T 修改时间

D 设备

U 用户

G 组

M 模式(包括许可和文件类型)

  1. 重建数据库
  • rpm — rebuilddb :重建数据库,一定会重新建立
  • rpm — initdb :初始化数据库,没有才建立,有就不用建立
  1. 检查来源合法性,及软件包完整性
  • ls /etc/pki/rpm-gpg/

    • RPM-GPG-KEY-redhat-release
  • rpm -K /path/to/package_file

    • dsa ,gpg:验证来源合法性,也即验证签名;可以使用 — nosignature,忽略此项
    • sha1,md5:验证软件包完整性;可以使用 —nodigest ,忽略此项
  • rpm —import /etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-7

7.4 软件安装——YUM

YUM 解决依赖关系,RPM进行安装卸载

yum采用C/S架构,依靠yum 仓库(web,ftp,file)

  • yum配置文件:/etc/yum.conf
  • yum仓库:/etc/yum.repos.d/

7.4.1 yum功能:
  1. install:安装软件包
  2. update:升级软件包
  3. check-update:检查软件包的升级信息
  4. upgrade:更新软件包
  5. remove :卸载软件包
  6. list:显示所有已经安装和未安装的软件包
  7. info:查看软件包信息
  8. clean:清除软件包一些信息和网络源缓存
  9. search:查看指定软件包相关的软件包
  10. deplist:查询软件包依赖关系列表
  11. repolist:查看可用的yum
  12. repoinfo:查看可用yum源的信息

7.4.2 yum源( /etc/yum.repos.d/ ):
//每个仓库分别是一个文件,文件名以.repo结尾
[name]         //id
name =         //引用变量
baseurl =      //yum仓库 
enabled =      //是否启用该yum仓库
gpgcheck =     //是否进行完整性和校验和检测
gpgkey =       //完整性和校验和检测文件

yum仓库:

  • $releasever:发行版本
  • $basearch:CPU架构集
  • $arch:CPU架构

yum元数据目录:repodata

  • primary.xml.gz :所有RPM列表;依赖关系;软件包安装列表
  • filelist.xml.gz :包含所有RPM 包的所有列表
  • other.xml.gz :包含软件包其他信息,比如更改记录
  • repomd.xml:包含primary/filelist/other时间戳和校验和
  • comp.xml:包含软件包组的列表

创建元数据目录

  • 先使用网络源安装createrepo

    • yum -y install createrepo
  • 在本地源(包含所有安装包的路径)下,创建元数据目录

    • createrepo /opt/repo # 这个目录下提前放置了需要放到源中的安装包
  • 直接通过修改repo源,使用本地源即可

7.4.3 创建自己的yum源

两台机器

  • yum源:192.168.10.10
  • ftp方式:

    • mount /dev/cdrom /media

  • yum -y install vsftpd

  • systemctl start vsftpd

  • systemctl enable vsftpd

  • cp -rf /media/ /var/ftp #(这个目录是Linux默认共享的ftp目录)

  • httpd方式:

    • mount /dev/ cdrom/media

  • yum -y install httpd

  • systemctl start httpd

  • systemctl enable httpd

  • cp -rf /media/ /var/www/html #(这个目录是Linux下默认共享的http目录)

  • yum客户端(个人电脑):192.168.10.20
  • ftp: vim ftp.repo
[ftp]
name=file_repo
baseurl=ftp://192.168.10.10/media
enable=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-7
  • httpd: vim httpd.repo
[httpd]
name=httpd_repo
baseurl=http://192.168.10.10/media
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
  • 本地源: vim file.repo
[httpd]
name=httpd_repo
baseurl=file:///media      #光盘挂载的目录
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

注意:在创建本地源时,可能会因为没有元数据目录(repodata)而导致失败,所以要创建元数据目,创建方法看上面 7.2 yum源 —> 创建元数据目录

7.4.4 使用epel源

https://mirrors.tuna.tsinghua.edu.cn/help/epel/

7.5软件安装——编译安装

7.5.1 安装开发工具组

包括gcc、g++等

  • yum -y groupinstall “Development Tools”

7.5.2 编译链接工具
  1. automake ——> makefile.in(半成品) —(通过configure)—> makefile
  2. autoconf :生成脚本文件:configure,参照makefile.in 生成makefile
  3. make:不是编译工具,而是项目管理工具,按照makefile文件中的定义,去定义软件中功能向后顺序
  4. makeinstall:安装
#执行编译安装步骤
1. 获取源代码并解压
    # tar xf  xxx.tar.gz
    # tar xf  xxx.tar.bz2
2. 执行configure脚本 (在源码目录中运行)  ./configure --...
    功能:1.检查应用程序所需要的编译环境 2.生成Makefile 3.定制功能
    选项:--help:进行查看脚本帮助信息
    --prefix=path:定义应用程序安装路径
    --sbin-path=PATH :定义应用程序的二进制程序
    --conf-path=PATH :定义应用程序配置文件路径
    --enable--xxx:开启某项功能(如应用程序支持该功能,但默认不安装)
    --with--xxx:开启某项功能(如应用程序支持该功能,但默认不安装)
    --without--xxx:关闭某项功能(如应用程序支持该功能,默认安装,但是我不需要)
    --user=USER:指定应用程序执行的用户
    --group=GROUP:执行应用程序执行的组

    解决configure错误信息
    1. 用without关闭这项功能(不建议使用)
    2. 安装所需的环境,安装所需环境的开发包

3. 执行make :定义Makefile按照哪种顺序去编译源程序
    -j N:多线程编译(速度快)

4. make install :安装应用程序

//编译安装完成后工作:
1:添加应用程序的二进制程序到系统路径:系统查找$PATH
    1.1:为二进制程序做链接文件
        # 1n -s /usr/ local/tengine/sbin/*  /usr/sbin
        # ln -s /usr/local/tengine/sbin  /usr/sbin/tengine
    1.2:修改/etc/profile文件
    1.3:在/etc/profile.d/目录中建立name.sh的文件
2:添加应用程序的库文件到系统库文件路径:库文件:/usr/lib  /usr/1ib64
    2.1:为库文件做链接文件
        # ln -s /usr/local/APP_NAME/lib/*  /use/lib
        # ln -s /usr/local/APP_NAME/lib   /usr/lib/APP_NAME
    2.2:在 /etc/ld.so.conf.d/ 目录下建立APP_NAME.conf,把应用程序的库文件位置添加进去
        # ldconfig
          -v :显示加载库文件的过程
3:添加应用程序的头文件到系统头文件路径:系统头文件:  /usr/include
    3.1:为头文件做链接文件
        # ln -s /usr/local/APP_NAME/include/*   /usr/include
        # ln -s /usr/local/APP_NAME/include   /usr/include/APP_NAME
4:添加应用程序的帮助信息
    4.1:  man -M PATH bin_name   :-M 指定帮助信息的位置
    4.2:  man配置文件:系统默认帮助:/usr/share/man/
        centos6:: /etc/man.config   添加:MANPATH [HELP_PATH]
        centos7:: /etc/man_db.conf  添加:MANPATH_MAP [HELP_PATH]