一、软件包管理

    1、应用程序:

        程序,Architecture 

    C语言:源代码-->(编译)二进制格式

    脚本:解释器(二进制程序)

    源代码--> 编译-->链接-->运行

        程序:

            库:  静态  动态

                   静态链接   动态链接

    2、程序组成部分:

        二进制程序

        库

        配置文件

        帮助文件


        /boot :存放内核,initrd(initramfs)

        /etc  :存放配置文件

        /usr 

        /var:是外围的文件系统,存放日志等文件,建议单独分区

        /dev :设备目录,不能单独分区;

        /lib :存放库文件

        /tmp

        /bin :存放二进制文件

        /sbin:存放二进制文件

        /proc

        /sys

        /mnt

        /media

        /home

        /root ;不能单独分区

        /misc

        /opt 

        /srv


/etc , /bin ,/sbin, /lib, /usr/share/man:存放帮助文件

        系统启动就需要用到以前的程序,这些目录不能挂载额外的分区,必须在根文件系统的分区上。

  /usr/      bin   sbin   lib      操作系统核心功能,可以单独分区      


    系统启动顺序:  POST-->BIOS(HD)-->(MBR)bootloader(文件系统结构)-->内核

    3、程序: 指令+ 数据

        指令:芯片

                CPU:普通指令,特权指令

                  指令集

        C语言:

            Powerpc :二进制格式

    4、软件包管理器:

            打包成一文件:二进制程序,库文件,配置文件,帮助文件

            生成数据库,追踪所安装的每一个文件

            软件包管理器的核心功能:

                (1)制作软件包;(2)安装、卸载、升级、查询、校验;

         前段工具:yum ,apt-get

         后端工具:RPM  ,dpt

二、rpm命令:

        rpm:管理命令

            数据库 /var/lib/rpm

        rpmbuild:建立rpm

    安装、查询、卸载、升级、校验、数据库的重建等工作:

    1、rpm命名

        包:组成部分

            主包:

                bind-version  例如:bind-9.7.1-1.i586.el5.rpm

            子包:

                例如:bind-libs-9.7.1-1.i586.el5.rpm   例如:bind-utils-9.7.1-1.i586.el5.rpm

        包名格式:

                name-version-release.arch.rpm

                bind-major.minor.release-release.arch.rpm

        主版本号:重大改进

        此版本号:某个子功能发生重大变化

        发行号:修正了部分bug,调整了一点功能

    2、rpm包

            二进制格式

                    rpm包作者下载源程序,编译配置完成后,制作成rpm包

                    bind-9.7.1-1.x86_64

    rpm:

        rpm -i  /PATH/TO/PACKAGE_FILE

                -h : 以#显示进度,每个#表示2%

                -v:显示详细过程

                -vv:更详细的过程

        rpm -ivh /PATH/TO/PACKAGE_FILE

                --nodeps: 忽略依赖关系

                --replacepkgs:重新安装,替换原有安装

                --force:强制安装,可以实现重装或降级

    3、rpm查询

                rpm -q PACKAGE_NAME:查询指定的包是否已经安装

                rpm -qa :查询已经安装的所有包

                rpm -qi PACKAGE_NAME:查询指定包的说明信息;

                rpm -ql PACKAGE_NAME: 查询指定包安装后生成的文件列表

                rpm -qc PACKAGE_NAME:查询指定包安装的配置文件

                rpm -qd PACKAGE_NAME:查询指定包安装的帮助文件;

                rpm -q --scripts PACKAGE_NAME:查询指定包中包含的脚本

                rpm -qf /path/to/somefile:查询指定的文件夹是由那个rpm包安装生成的;


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

                   rpm -qpi /PATH/TO/PACKAGE_FILE

                   rpm -qpl 

    4、rpm升级

            rpm -Uvh /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级;否则进行安装

            rpm -Fvh /PATH/TO/NEW_PACKAGE_FILE:如果装有老版本的,则升级;否则就退出

                    --oldpackage:降级

    5、卸载

            rpm -e PACKAGE_NAME

                   --nodeps

    6、校验

            rpm -V PACKAGE_NAME

    7、检验来源合法性,及软件完整性:

            加密类型:

                对称:加密解密使用同一个密钥

                公钥:一对密钥,公钥,私钥;公钥隐含于私钥中,可以提取出来,并公开出去;

            rpm -k /PATH/TO/PACKAGE_FILE

                 dsa,gpg:验证来源合法性,也既验证签名;可以使用--nosignature,略过此项

                  sha1,md5:验证软件包完整性;可以使用 --nodigest,略过此项

    8、重建数据库

        rpm        

                --rebuilddb: 重建数据库,一定会重新建立;

                --initdb:初始化数据库,没有才建立,有就不用建立;

三、yum

        yum仓库中的元数据文件:

        primary.xml.gz

            所有RPM包的列表:

            依赖关系:

            每个RPM安装生成的文件列表:

        filelists.xml.gz

              当前仓库中所有RPM包的所有文件列表:

        other.xml.gz

               额外信息,RPM

    1、定义yum

        如何为yum定义repo文件

        [Repo_ID]

        name=Description

        baseurl=

            ftp://

            http://

            file:///

        enabled={1|0}

        gpgcheck={1|0}

        gpgkey=

    

    yum [options][command][package ...]

        list:列表  

            all:

            available:可用的,仓库中有但尚未安装的

            installed:已经安装的

            updates:可用的升级

        clean:清理缓存

            [packages | headers | metadata | dbcache | all ]

        repolist:显示repo列表及其简要信息

                all     ; enable:默认 ;    disable ;

        install :安装

            yum install PACKAGE_NAME

                -y :自动回答为yes

                --nogpgcheck 

        update:升级

        update_to :升级为指定版本

        remove | erase: 卸载

        info:

        provides | whatprovides:查看指定的文件或特性是有那个包安装生成的;

    2、编译安装的三步骤:

        前提:准备开发环境(编译环境)

        安装“Development Tools”和 “Development Libraries”

        #tar

        #cd

        # ./configure

                --help

                --prefix=/path/to/somewhere

                --sysconfdir=/PATH/TO/CONFFILE_PATH

                功能:1.让用户选定编译特性; 2、检查编译环境;

        #make

        #make install


        (1)修改PATH环境变量,以能够识别此程序的二进制文件路径;

                    修改/etc/profile文件

                    在/etc/profile.d/目录建立一个以.sh为名称后缀的文件,在里面定义 export PATH=$PATH:/path/to/somewhere

        (2)默认情况下,系统搜索库文件的路径/lib ,/usr/lib ; 需要增添额外搜寻路径;     

                 在/etc/ld.so.conf.d/  中创建已.conf为后缀名的文件,而后把要增添的路径直接写至此文件中国;

                 # ldconfig 通知系统重新搜寻库文件

                    -v :显示重新搜寻库的过程

        (3) 头文件: 输出给系统

                    默认: /usr/include

                    增添头文件搜寻路径,使用链接进行:

                        /usr/local/tengin/include/     /usr/include/

                        两种方式:

                        ln -s /usr/local/tengine/include/*  /usr/include/  或

                        ln -s /usr/local/tengine/include  /usr/include/tengine 

        (4) man文件路径:安装在 --prefix 指定的目录下的man目录: /usr/share/man

                        1.man -M  /PATH/TO/MAN_DIR COMMAND

                        2. 在 /etc/man.config 中添加一条MANPATH

    3、netstat命令:

            -r:显示路由表

            -n:以数字方式显示

            -t:建立的tcp连接

            -u:显示udp连接

            -l:显示监听状态的连接

            -p:显示监听指定套接字的进程的进程号与进程名

四、练习

    写一个脚本,完成以下功能:

        说明:此脚本能于同一个repo文件中创建多个yum源的指向;

        1、接受一个文件名做为参数,此文件存放至/etc/yum.repos.d目录中,且文件名以.repo为后缀;要求,此文件不能事先存,否则,报错;

        2、在脚本中,提醒用户输入repo id;如果为quit,则退出脚本;否则,继续完成下面的步骤;

        3、repo name 以及baseurl的路径,而后以repo文件的格式将其保存至指定的文件中;

        4、enabled 默认为1 ,而gpgcheck默认设定为0;

        5、此脚本会循环执行多次,除非用户为repo id指定为quit;

        Linux初级运维(十四)——Linux软件管理_第1张图片

 

五、while

        while ,until  for

        break :提前退出循环

        continue:提前结束本轮循环,而进入下一轮循环;

        Linux初级运维(十四)——Linux软件管理_第2张图片

六、练习题

       写一个脚本:

    1、判断一个指定的bash脚本是否有语法错误;如果有错误,则提醒用户键入Q或者q无视错误并退出,其他任何键可以通过vim打开这个指定的脚本;

    2、如果用户通过vim打开编辑后保存退出时仍然有错误,则重复第1步中的内容;否则,就正常关闭退出

        Linux初级运维(十四)——Linux软件管理_第3张图片