本章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  安装

    输出: 环境变量,头文件 ,库 ,配置文件及帮助文件