• LIUNX中程序包管理


    LIUNX中程序包管理

    此内容仅为笔记,这一两天给会重新整理补充上操作示例。

     

    一、基础

    1、程序描述:

        第一种描述: 程序+数据

        第二种描述: 算法+数据结构

     

    2、程序的组成部分:

    ​     1、二进制程序

    ​     2、配置文件,可以被查看其内容的文件

    ​     3、库文件,库文件不能独立执行,只能被调用执行

    ​     4、帮助文件,可以被查看其内容的文件。

     

      解压rpm软件包

        rpm2cpio 包文件 | cpio -id

     

    3、程序包管理器描述:

      最早的包管理器应用于Debian上,dpkg为第一个包管理工具。

    ​   程序的组成文件打包 成一个或者有限几个文件

    ​       安装

    ​       卸载

    ​       查询

           升级

           校验

     

        1> 包组成(每个包都有)

          包内的文件

          元数据,如:包的名称 版本 依赖性 描述等

          可能会有包安装或卸载时运行的脚本

     

        2> 数据库(公共) /var/lib/rpm  自动更新

          程序包名称及版本

          依赖关系

          功能说明

          包安装后生成的各文件路径及校验码信息

     

     

    4、各个发行版本的程序包管理器和前端管理工具

        发行版     包管理器   包前端管理工具

    ​     Debian:   deb     apt-get/apt

    ​     ubuntu:      deb     apt-get/apt

     

    ​     RedHat:    rpm     yum/dnf

    ​     centos:    rpm      yum/dnf

     

     

    5、程序编译方式:

    ​   动态编译:编译时不会把库文件编译进程序,编译好的程序不能独立运行,需要调运库文件,体积小。

    ​   静态编译:编译时会把需要用到的库文件都编译进程序,编译后程序没有库也可以独立运行,体积大。

     

    6、命令存放路径:

        普通命令:/bin     /usr/bin   /usr/local/bin

        管理命令:/sbin      /usr/sbin      /usr/local/sbin

        库文件:   /lib       /lib64      /usr/lib   /usr/lib64   /usr/local/lib   /usr/local/lib64

     

    7、命令行展开

        命令行展开优先级

        1、把命令行分成单个命令词

        2、展开别名

        3、展开大括号的声明{}

        4、展开波浪线声明~

        5、命令替换$()或··

        6、再次把命令行分成命令词

        7、展开文件通配符

        8、准备I/O重定向

        9、运行命令

     

    8、ABI 二进制编程接口

        windows:   PE

        LINUX:   ELF

     

        虚拟化技术

          LINUX:    WINE

          windows:      Cygwin

     

     

    9、LINUX中源文件生成执行文件的过程

        预处理:gcc -E hello.c -o hello.i 对hello.c文件进行预处理,生成hello.i文件

        编译:gcc -S hello.i  -o hello.s 对预处理文件hello.i进行编译,生成汇编文件hello.s

        汇编:gcc -C hello.s -o hello.o 对汇编文件hello.s进行编译,生成目标文件hello.o

        链接:hello.o -o hello 对目标文件hello.o文件进行链接,生成可执行文件

          gcc hello.c -o hello2 一步到位,直接生成执行文件

            选项:

              -c 源文件 把源文件编译成目标文件

              -o 新名称 目标文件1  目标文件2 把多个目标文件链接成可执行文件,并以新名称命名

              -O 此选项主要用于优化编译

              -l 库文件名 指定编译时需要的库文件,此库文件名不用写开头字母lib和结尾字母so

              -L 库文件路径 路径为目录,指定库文件在什么位置搜索。省略的话默认在/lib  /lib64 /usr/lib /usrlib64等位置搜索

              -I 头文件 指定编译时需要用到的头文件

     

    10、软件包名

        软件名-软件版本号-编译版本号-适用平台-后缀

              适用平台

                noarch 无论任何机型都行

                i386 只要是x86平台的架构都支持

                i686 32位平台

                x86_64 64位平台

     

        示例: 查看目录内各个平台架构的数量

          ls *.rpm | rev | cut -d . -f2 |rev | sort | uniq -c

    练习题:在出现进度条出现的时候按esc键,进入光盘,然后进入救援模式 进行恢复 被删除的基础库文件/lib64/libc.so.6

     

    11、杂项

    ldconfig命令

      此命令会更具/etc/ldconfig配置文件中记载目录中的库文件加载入缓存中,以提高调用程序的执行速度

      -p 显示已经加载到内存中的库文件

     

    autofs工具可以自动挂在/misc/cd目录下

        yum -y install autofs

        systemctl enable --now autofs

     

     

     

    二、软件包和包管理器

    rpm命

      此命令主要是通过数据库记录的方式来管理软件的安装、卸载、升级、查询、校验等等。

      rpm软件的数据包保存在/var/lib/rpm目录中,如果此目录中的数据损坏可以通过rpm --rebuilddb重建数据库

       

      选项:

        -i --install 安装

        -v 显示详细进度

        -h 显示百分比,一个#表示2%

        -q 查询

    -qa 列出所有已安装的包的,依赖于/var/lib/rpm内的数据库

    rpm -qa "*http*" 最好加上双引号,怕出问题。可以直接模糊搜索

     

    -qi 查询某个已安装过的安装包的信息

    -qpi 查询指定未安装的安装包的信息

     

    -ql 查询指定已安装的安装包的安装文件列表

    -qpl 查询指定未安装的安装包的要安装文件列表

     

    -qf 查询某个命令或文件来自于哪个安装包。很有用

    -q --whatprovides /PATH/TO/COMMAND 查询某个命令由哪个安装包所提供

    -q --whatrequires 查询指定的安装包被哪个包所依赖

     

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

    -qd 查询指定安装包的帮助文档

    -q --changelog 查询指定安装包的变更历史

    -q --scripts 查询指定安装包的脚本

    -q --provides 查询指定安装包的提供了哪些依赖性

    安装脚本分为:

    安装前 preinstall

    安装后 postinstall

    卸载前 preuninstalll

    卸载后 postuninstalll

     

    -U 或 --Update 升级或安装软件包

    -F 或 --Freshen 只升级,如果没有不安装

     

    -e --erase 卸载,如果卸载的时候别的包,依赖于要下载的包,就卸载不了

     

    --root= 指定根目录

    --nodeps 忽略依赖性,强行安装卸载

    --force 强制安装

    --replacepkgs 重装 和 force差不多,多用于重新安装老版本软件

     

     

    包校验

    --import 导入密钥

    -K  或 --checksig 检查签名

     

    -V 查询文件是否有修改

    -Va 检查所有安装包,看看哪些包被修改过

    S file size differs 文件大小是否被改变

    M modediffers 文件的类型或文件属性是否被改变

    5 MD5

    D device major/minor number设备的主次代码号是否被修改

    L readlink path 软连接指向路径是否被修改

    U user ownership 属主是否被修改

    G group ownership 属组是否被修改

    T mtime differ 文件的mtime是否被修改

    P

     

    c 配置文件  config file

    d 文件   documentation

    g 鬼文件,通常时该文件不被某个软件所包含,较少发生  ghost file

    l 授权文件  license file

    r 自述文件  read me

     

     

     

    yum命令

    同一台电脑上,只能运行一个yum。yum的日志文件是/var/log/yum.log   centos8:/var/log/dnf.log

    命令的选项优先级高于配置文件

    -y 不询问,自动安装

    -q 或--quiet 静默安装

     

    install 安装

    reinsatll 重新安装

    remove 卸载

    update 升级

    history 安装历史

    history info # 具体查看安装的几个文件

    history undo # 卸载指定第几次操作

    history redo # 重新安装指定的第几次操作

    list 列表

    repolist 仓库列表

    search 搜索

    deplist 查询依赖关系

    info 查看软件信息

    repolist [all] 显示yum源列表

     

    --enablerepo=* 临时启用指定某个源

    --disablerepo=* 临时禁用指定某个源

     

    --showduplicates 显示重复的源

    --noplugins 禁用所有插件

    clean all 清理缓存

    provides /PATH/TO/COMMAND 查询某个命令是由哪个安装包提供

     

     

    --nogpgcheck 禁止检查gpgcheck,即使配置文件中指定了需要检查,命令行的优先级高于配置文件

     

    包组

    安装卸载包组在引用包组名的时候需要加上引号

    groupinstall 安装包组

    groupupdate 包组升级

    grouplist 查询包组列表

    groupremove 包组卸载

    groupinfo 查询包组的信息

     

     

    yum的repo配置文件中的变量

        $releasever 当前OS的发行版的主版本号  如 6 7 8

        $arch 平台 如:i386  x86_64

        $basearch 基础平台 如:1386 ppc arm

     

     

     

    createrepo命令

        createrepo [options] <directory>

            --basedir path 用户一定输出repodata的位置。常用于指向软件包的父目录

    dpkg包管理器

    -i 安装

    dpkg -i package.deb

    -r 不完全卸载

    dpkg -r  package.deb

    -l 已安装包的列表

    dpkg -l

    -L PACKAGE 列出软件包所包含的文件,相当于rpm -ql

    -S FILE 查询某个文件属于哪个包,相当于rpm -qf

    -a 配置所偶没有配置的软件包

    -c

     apt命令

      包前端管理工具,类似yum命令。debian系统的软件包前端管理工具。之前的叫apt-get

    apt install

    apt remove

    apt purge

    apt update

    apt upgrade

    apt search

    apt show

    三、仓库

     

    仓库一般由包文件、包文件元数据组成。客户端会先下载元数据下载到本地缓存中。

    然后校验元数据,看看元数据是否下载有无问题。

    根据元数据内信息再到仓库中下载对应的各种包文件和依赖包文件。

    最后安装。

     

    企业中可以单独新建一个软件仓库服务器。通过网络服务(http https ftp)共享给局域网内计算机远程安装。

     

    本地计算机需要配置仓库客户端

    centos 8中由两个软件仓库 Base仓库和AppStream仓库

     

    repodata 元数据存放目录

    Packages 软件包存放目录

     

    关于仓库路径就是repodata所在的父目录的绝对路径就是仓库路径

    仓库配置文件必须放在yum.repo.d目录下。后缀必须是.repo

     

      仓库元数据存放路径/var/cache/yum

     

    yum.conf(centos7)配置文件{

    cachedir=/var/cache/yum/$basearch/$releasever

    keepcache=0

    debuglevel=2

    logfile=/var/log/yum.log

    exactarch=1

    obsoletes=1

    gpgcheck=1

    plugins=1

    installonly_limit=5

    bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum

    distroverpkg=centos-release

        }

     

    dnf.conf(centso8)配置文件{

    gpgcheck=1 是否安装前检测签名

    installonly_limit=3 并发安装

    clean_requirements_on_remove=True 安装后清空软件

    best=True 如果多个仓库中某个软件由多个版本,默认指定安装最新版本

         }

     

     

    repo配置仓库{}

    [] 中括号内的是仓库ID,必须项

    name=Base 仓库名

    mirrorlist= 仓库路径,

    baseurl= 仓库路径,建议使用国内

     

    gpgcheck=1 校验包签名

    enabled=1 是否启用仓库,如果不写,默认是启用的

    gpgkey= 签名保存路径

     

     

     

     

    创建私有仓库

    yum -y install httpd

    systemctl enable --now httpd

    mkdir /var/www/html/centos/8

    mount /dev/sr0 /var/www/html/centos/8

     

    用于同步仓库中的软件和元数据

      dnf reposync --repoid=REPOID --download-metadata -p /path centos8

      reposync --repoid=REPOID --download-metadata -p /path centos7

     

      creatrepo /var/www/heml/epel/ 手工创建元数据

        --basedir 指定repodata存放位置

     

    四、源码编译安装

    ./configure 最终目的是生成Makefile文件

      1、通过选型传递参数,指定安装路径、启用特性等,执行时会参考用户的指定的选项以及模板文件Makefile.in 生成Makefile

      2、检查依赖到的外部环境,如依赖的软件包

    选项:

      --prefix=PATH/TO/SOMEDIR 指定总安装目录

      --sysconfdir=DIR 指定配置文件安装目录

     

    备注:

      autoconf命令,用来生成configure脚本。部分软件没有configure脚本,需要事先自己手工生成,然后再去执行./configure等后续编译安装步骤,也可能已经实现提供号了Makefile文件

      automake命令,用于生成Makfiel.in模板文件

     make

    根据上一步生成的Makefile文件,检测依赖环境,进行构建应用程序

    执行make命令之前一定要进入到解压目录,只有在解压目录才能执行成功make

    make命令

    选项:

    -j # 如果软件较大,可以指定多个CPU同时工作

    备注:

    make命令这一步也会检查环境依赖配置,一般情况下是很顺利,如果这一步检测依赖环境报错,

    可能说明上一步configure配置处的Makefile文件有问题,需要删掉整个文件夹,重新来。要不会出现莫名其妙的问题。

     

    make install

    复制文件到相应路径

    make install 命令会自动创建目录。不用手工创建

     

    可以通过README  INSTALL文件获取安装帮助

     

    开法工具:make gcc

    开发环境:开发库(gblic:标准库) 头文件

     

    系统通过修改/etc/man_db.conf文件指定新软件帮助文件的路径。以后就能直接使用man帮助了

     

    五、备注

    生产环境一般是最小安装,推荐安装软件明细。

    gcc

    make

    gcc-c++

    glibc  glibc-devel

    pcre pcre-devel 与正则表达式相关的包

    openssl openssl-devel 与openssl加密相关的包

    systemd-devel

    zlib-devel 与压缩相关的包

    vim

    lrzsz 传输文件工具,xshell给主机传送文件需要依赖此包,它提供了rz命令

    tree

    tmux screen 窗口工具。在断开链接后不会终止

    lsof

    tcpdump 抓包工具

    wget 下载工具

    net-tools 网络工具

    iotop io的检测工具

    bc bzip2 zip unzip

    nfs-utils

    man-pages

     

     

     

     

  • 相关阅读:
    cocos2dx 历史版本下载问题
    C++ 类之间的互相调用
    什么内网和外网
    c++网络编程2:TCP连接概念及编程
    Texturepack、physicsEditor、spriteilluminator的安装包下载
    逃离地心——齿轮旋转
    Cocos2d-x v3.0物理系统 利用PhysicsEditor创建多边形
    c#发送Http请求方法汇总
    代码大全知识点
    .Net技术方向
  • 原文地址:https://www.cnblogs.com/fengciaimei/p/12688973.html
Copyright © 2020-2023  润新知