应用程序存放位置:
 二进制程序:
  /bin    /sbin
  /usr/bin   /usr/sbin
  /usr/local/bin   /usr/local/sbin
 库文件(就是功能模块):
  /lib     /usr/lib
  
  /etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
 头文件:
  /usr/include
 配置文件:
  /etc
  /etc/httpd/
 帮助文件:
  /usr/share/man
       /etc/man.config
  /usr/share/doc

软件管理功能:
 安装
 卸载
 升级
 查询
 校验
RedHat
 Redhat package Manager:RPM(标准的软件管理格式)

rpm格式的软件包的命名:
 name-version-release.arch.rpm
 子rpm包name-subname
 version:
  major(主版本号)
  minor(次版本号)
  release(发行号),bug的修正
 release:rpm包的制作者制作的次数
 arch:硬件架构,平台
   i386、i486、i586、i686,x86_64
   noarch(与平台无关)
一个软件包为了管理上的方便,在制作成rpm包时,可以分为多个功能相对独立rpm包
 name-version:主包
 name-subname-version:子包
 name-devel-version:库文件,头文件

二进制程序:有格式,特定于某硬件平台(编译器自身会在软件编译时对软件在特定平台上的运行进行优化)

依赖关系:
 需要自动判断依赖关系,又能自动解决依赖关系软件包管理工具:
    前端管理工具的出现: yum:yellowdog update modifier(阿黄升级管理器)

linux上软件包的安装途径:
 1、rpm包
  rpm命令
  yum命令
 2、源码包
  编译安装
 3、编译好的二进制压缩包,解压后配置使用
  Mysql
  NongoDB
rpm命令:
 安装
    rpm -i PACKAGE1 PACKAGE2 …
 升级
    rpm -U|-F PACKAGE1 PK2 …
 卸载
    rpm -e PK_name PK2_name
 查询
    rpm -q
 检验
    rpm -V PK_name

rpm包中包含的内容:
 要安装的文件
 要执行的脚本
     pre  安装前要执行的脚本
     post  安装后要做收尾工作执行的脚本
     preun  卸载之前执行的脚本
     postun  卸载完成后执行的脚本


安装:(包与包间的所依赖的东西叫capacity(能力))
 rpm -i
     -v   显示安装的详细信息,v越多,信息越详细
     -h   显示安装进度
     --test  安装前的测试,不做安装
     --nodeps  忽略依赖关系
     --replacepkgs  由于一个已安装的软件包的某些文件被删除时,重装一个软件包,替换
     --force 强行安装,无视冲突
卸载:
 rpm -e PKG_name
     --nodeps

升级:old-->new;new-->old(降级)
 rpm
  -F:old-->new,无old,则不new;
  -U:old-->new,无old,则安装new;
  -v
  -h
  注意:内核不应该升级安装,内核允许多版本并存,所以,可直接安装多个不同版本内核
  --oldpackage   降级

查询:
 rpm -q PKG_NAME
 rpm -qa

 rpm -qi PKG_NAME  查询已安装软件包的信息

单向加密:
 rpm 包:单向加密:提取数据特征码
  1、如果原数据一样,结果一定会一样
  2、雪崩效应:原数据有一点点不同,结果大不同
 rpm包的验证签名:
    用官方的公钥解密这段加密的特征码,得到可靠的官方提供的特征码;
    自己再使用同样的方法提取的特征码,并比较和解密出来的特征码是否一致;
 
 rpm -ql PKG_NAME  用于列出此rpm包安装完成后在系统上生成了哪些文件
 rpm -qf FILE(路径)  用户查询某文件是由哪个rpm安装包生成的
 rpm -qc PKG_NAME    查询rpm包生成的配置文件
 rpm -qd PKG_NAME    查询此rpm包生成的文档
 rpm -q --scripts PKG_NAME 查询rpm包内置的脚本
 rpm -qpl PKG   查询还没有安装的rpm包在安装后会创建哪些文件
 rpm -qpi PKG   查询还没有安装的rpm包的详细信息

检验:
 rpm -V PKG-NAME 检查某rpm包安装生成的文件有没有被非法改变过;
 rpm -k PKG 检查签名

检验签名:
 rpm --import 密钥文件(/etc/pki/rpm-gpg)
 rpm -k PKG
     --nodigest:不检验单向加密的相关内容(sha1,md5)
     --nosignature:不检验签名(gpg,dsa)
rpm数据库:(var/lib/rpm)
 rpm --initdb   重新初始化丢失的库
            --rebuilddb 重建,无论事前是否存在


yum: 自动解决依赖关系
 repository:仓库,这里存放的就是yum源数据

 获取数据的方法:
   1、yum仓库在本地某目录    file:///
   2、yum仓库在远程服务器
        ftp://
 http://
yum仓库包括的内容:
 rpm包
 repodata/   只有包含此目录为其子目录的那个路径才可以用作yum源
    repomd.xml 此文件保存时间戳
    primary.xml.gz 当前yum仓库内每一个rpm包的名字及其彼此间的依赖关系,此外还包含每一个rpm包能够安装生成的文件
    filelists.xml.gz 所有rpm包包含的安装生成的文件的文件列表
    other.xml.gz 额外信息,主要包含的是rpm包的changellog(改变日志)
yum命令,有许多子命令
     /etc/yum.conf
     /etc/yum.repos.d/*.repo
     /etc/yum/pluginconf.d/
yum的配置文件 分为两段
全局配置

分段配置
[repo]
name=primary yum repository
baseurl=file:///var/yumrepo/server(本地)  ftp://192.168.0.254/pub/server(远程服务器上)  ftp://username:[email protected]/pub/server(有用户名和密码的服务器)
enabled=1    是否启用这个yum源
gpgcheck=1   是否检测rpm包的签名
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

yum的命令:
 repolist   列出来已安装的包
 list {installed|available|updates|all}
 clean {all|packages|metadata}
  清除cache(元数据,rpm包)
 grouplist
 groupinfo "groupname"
 info PKG_NAME 显示指定包的信息
 search KEYWORD   查找指定关键字的包
 whatprovides FILE  查找某文件是由哪个包安装生成的
 provides FILE 查找某文件是由哪个包安装生成的
 install PKG_NAME
 remove PKG_NAME
 update
 groupinstall 组名
 groupremove 组名
 reinstall
 check-update检测哪些能升级的包
 localinstall
自己创建yum源:
1、yum install createrepo   先安装createrepo命令
2、把rpm包放在一个目录 /var/myum
3、createrepo /var/myum   运行这个命令后/var/myum下会产生repodata目录
4、vi /etc/yum.repos.d/local.repo


软件包源码编译安装:
source code---> binary

编译安装需要的开发环境(包组)
Development Tools
Development Libraries
X Software Development  图形相关

./configure
 --help
 
 --prefix=/usr/local/apache 指定安装路径
  /usr/local/apache/bin  二进制文件路径
  /usr/local/apache/lib  库文件
  默认系统只从/lib   /usr/lib这两个目录查找库文件,所以为了让系统能找到/usr/local/apache/lib目录上的库文件,就这样操作
     *导出库文件路径:/etc/ld.so.conf
  1、新建文件/etc/ld.so.conf.d/*.conf,并将当前软件的库文件所在的目录添加至新建的文件
  2、运行命令ldconfig [-v],使其生效
     *头文件:/usr/include
  /usr/local/apache/include
  # ln -s /usr/local/apache/include /usr/include/apache
     手册文件:/etc/man.config :MANPATH /usr/share/man
  /usr/local/apache/man
  man -M /usr/local/apache/man httpd 指定位置查找httpd的手册
 --sysconfdir= 指定配置文件的安装路径
make
make install