zoukankan      html  css  js  c++  java
  • Linux软件包

    软件包管理

    1. 一个操作系统没有软件做支持能实现的功能非常少,Linux中的大多软件主要是给服务器来用的,不管是稳定性还是多样性还是安全性都不比Windows差甚至更好。windows的所有安装包都不能在Linux中使用,好处是Windows中大量的病毒和木马都对Linux无用,坏处是所有的软件包都必须针对Linux再做单独的开发。

    2. Linux能够识别的软件包主要有两大类:源码包和二进制包

      • 源码包:把源代码直接开放给你的包,绝大多数都是C语言写的,需要手工安装且安装的时候比较慢而且容易报错。
      • 脚本安装包:绝大多数都是源码包进行再开发之后的源码包,不需要手工安装,安装过程与Windows类似但是这种包不多,适合初学者。
      • 二进制包(系统默认包):经过编译之后的包含0和1的机器语言包,不能看到源代码,Windows大多数是exe的二进制安装包,Linux下也有二进制包,只不过编译格式不一样。二进制包是厂商在发行的时候用源码包编译好的,好处是用户安装速度相比源码包更快且安装过程报错几率大大减小,坏处是不能看到源码。
      • RPM包:Redhat系列用的二进制软件包就是RPM包
      • DPKG包:Debian系列用的二进制包,两种包除了管理系统不同,其余的基本一样,命令、配置文件保存位置、内核等基本一致。
    3. 源码包优点:

      • 开源,如果有足够的能力,可以修改源代码
      • 可以自由选择所需的功能
      • 软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高
      • 卸载方便(可以通过直接删除安装目录的方式来卸载)

      源码包缺点:

      • 安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误
      • 编译过程时间较长,安装比二进制安装时间长
      • 因为是编译安装,安装过程中一旦报错新手很难解决
    4. 二进制包优点:

      • 包管理系统简单,只通过几个命令就可以实现包的安装、升级、査询和卸载
      • 安装速度比源码包安装快的多(跟Windows下安装软件速度差不多)

      二进制包缺点:

      • 经过编译,不再可以看到源代矼
      • 功能选择不如源码包灵活
      • 依赖性(软件包a的安装依赖软件包b,所以在安装a的时候要先安装b,卸载的时候也要先卸载a)

    rpm命令管理

    1. RPM包命名规则

      包全名httpd-2.2.15-15.el6.centos.1.i686.rpm

      httpd 软件包名

      2.2.15 软件版本

      15 软件发布的次数

      el6. centos 适合的 Linux平台(不写表示任何Linux版本都可以安装)

      i686 适合的硬件平台i386/i486/i586/i686都可以在我们的普通计算机上安装,x64则只能在64位的CPU上安装,noarch指任何硬件平台都可以安装)

      rpm rpm包扩展名

      (Linux中没有文件扩展名这个概念,也就是说,文件名和扩展名可以随意命名,比如可以叫a.exe,Linux只是认为它是一个普通文件。但是所有的rpm包的扩展名必须写成.rpm,方便管理员查看

    2. RPM包依赖性:

      • 树形依赖:a->b->c。装软件包a要先装b,装软件包b要先装c。卸载的时候要先卸载a再卸载b最后卸载c。

      • 环形依赖:a->b->c->a。软件包a、b、c用一条命令同时装即可解决。

      • 模块依赖:当想要安装mysql-connector-odbc这个包的时候发现缺少依赖libodbcinst.so.2这个包,但是并没有这个依赖包,这是一个库依赖,.so.number结尾的都是库依赖,库依赖不是单独独立的一个包,它是某一个软件包中的一个软件,所以我们要安装的是这个软件所在的包。image-20200424162916818

        问题是我们怎么知道这个软件属于哪个包,解决方案是前往模块依赖查询网站:www.rpmfind.net,搜索之后就会找到我们要安装的依赖包。

        image-20200424170123663

    安装升级与卸载

    1. 包全名与包名

      • 包全名:操作的包是没有安装的软件包时,使用包全名。而且要注意路径
      • 包名:操作已经安装的软件包时,使用包名。是搜索/var/lib/rpm/中的数据库
    2. RPM安装:

      #rpm -ivh 包全名
      

      选项: -i(install) 安装

      ​ -v(verbose) 显示详细信息

      ​ -h(hash) 显示进度

      ​ --nodeps 不检测依赖性(实际不使用)

    3. RPM包升级:

      #rpm -Uvh 包全名
      

      选项: -U(upgrade) 升级

    4. 卸载:

      #rpm -e 包名
      

      选项: -e(erase) 卸载

      ​ --nodeps 不检查依赖性

    查询

    1. 查询是否安装

      #rpm -q 包名
      

      #查询是否安装

      选项: -q(query) 查询


      #rpm -qa
      

      #查询所有已安装的RPM包

      选项: -a(all) 所有


      #rpm -qa | grep 包名
      

      #查询所有与包相关的RPM包

    2. 查询软件包详细信息

      #rpm -qi 包名
      #rpm -qip 包全名
      

      选项: -i(information) 查询软件信息

      ​ -p(package) 查询未安装包信息

    3. 查询包中文件安装位置

      #rpm -ql 包名
      #rpm -qlp 包全名
      

      选项: -l(list) 列表

      ​ -p(package) 查询未安装包信息(该包的计划安装位置)

    4. 查询系统文件属于哪个RPM包

      #rpm -qf 系统文件名
      

      选项: -f(file) 查询系统文件属于哪个软件包

    5. 查询软件包的依赖性

      #rpm -qR 包名
      #rpm -qRp 包全名
      

      选项: -R(requires) 查询软件包的依赖性

      ​ -p(package) 查询未安装包信息

    校验和文件提取

    1. RPM包校验:判断系统文件是否被人更改

      #rpm -V 已安装的包名
      

      #没有任何提示信息证明包没有做过修改

      选项: -V(verify) 校验制定RPM包中的文件

      执行结果示例S.5....T. c /etc/httpd/conf/httpd.conf,S.5....T.表示验证内容信息,c表示配置文件。

      验证内容中的8个信息的具体内容如下:(命令执行结果为8个字符,.表示相应类型没有修改)

      • S 文件大小是否改变
      • M 文件的类型或文件的权限(rwx)是否被改变
      • 5 文件MD5校验和是否改变(可以看成文件内容是否改变)
      • D 设备的中,从代码是否改变
      • L 文件路径是否改变
      • U 文件的属主(所有者)是否改变
      • G 文件的属组是否改变
      • T 文件的修改时间是否改变

      文件类型

      • c 配置文件(config file)
      • d 普通文档(documentation)
      • g “鬼”文件(ghost file),很少见,就是该文件不应该被这个RPM包包含
      • l 授权文件(license file)
      • r 描述文件(read me)
    2. RPM包中文件提取:提取RPM包中指定文件(误操作删除系统文件后修复)

      #rpm2cpio 包全名 | cpio -idv .文件绝对路径	  
      //“.”代表把指定文件提取到当前目录下
      

      rpm2cpio将rpm包转换为cpio格式的命令

      cpio是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件

      #cpio 选项<[文件|设备]
      

      选项: -i copy-in模式,还原

      ​ -d 还原时自动新建目录

      ​ -v 显示还原过程

      举个栗子:假设做了误操作把系统中的ls命令删掉了,执行下列命令。不知道ls命令属于哪个包可以到网上查找,这里我们查找到是coreutils-8.4-19.el6.i686.rpm这个包。

      rpm2cpio /Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls

      #提取RPM包中ls命令到当前目录的/bin/ls下

      cp /root/bin/ls /bin/

      #把ls命令复制回/bin/目录,修复文件丢失

    yum在线管理

    1. yum就是为了解决依赖性问题而产生的。yum不是必须要联网,可以用本地光盘来作为yum源。yum的问题在于像Redhat这样的公司认为yum是一种售后服务,需要付费才可以使用,CentOS作为社区版Linux可以免费使用,但是在服务器上如果使用的是Redhat系列则需要付费使用。
    2. yum在线管理的意思就是yum和rpm命令管理的都是RPM包,并不存在yum包。rpm命令管理是手动操作而yum是自动管理。

    网络yum源

    ​ CentOS只要能联网,就可以直接利用CentOS官方网站的yum源进行下载安装和升级。只是CentOS的官方网站在国外,连起来有时候可能比较慢,这时候我们可以换成国内一些公开的免费的yum源地址。

    ​ 网络yum源保存在/etc下的yum.repos.d目录当中,在这个目录中后缀名是.repo的都是合法的yum源,默认是CentOS-Baseyum源生效。

    #vi /etc/yum.repos.d/CentOS-Base.repo
    

    image-20200424202739197

    • [base] 容器名称,一定要放在[]中
    • name 容器说明,可以自己随便写
    • mirrorlist 镜像站点,这个可以注释掉
    • baseurl 我们的yum源服务器的地址。默认是CentOS官方的yum源服务器,是可以使用的,如果你觉得慢可以改成你喜欢的yum源地址
    • enabled 此容器是否生效,如果不写或写成enable=1都是生效,写成enable=0就是不生效
    • gpgcheck 如果是1是指RPM的数字证书生效,如果是0则不生效
    • gpgkey 数字证书的公钥文件保存位置。不用修改

    yum命令

    1. 查询

      #yum list
      

      #查询所有可用软件包列表

      #yum search 关键字
      

      #搜索服务器上所有和关键字相关的包

    2. 安装

      #yum -y install 包名
      

      选项:install 安装

      ​ -y 自动回答yes

    3. 升级

      #yum -y update 包名
      

      #update后如果不加包名则会升级所有的软件包包括Linux内核

      选项:update 升级

      ​ -y 自动回答yes

    4. 卸载

      #yum -y remove 包名
      

      #remove会卸载掉该包所依赖的所有包,有可能会造成系统出现一定问题。

      选项:remove 卸载

      ​ -y 自动回答yes

      Linux使用原则:安装的时候最小化安装,不安装多余软件;用什么软件装什么软件,尽量不卸载。

    5. YUM软件组管理命令

      #yum grouplist
      

      #列出所有可用的软件组列表

      #yum groupinstall 软件组名
      

      #安装指定软件组,组名可以由grouplist查询出来,如果组名有空格,则用“软件组名”这样的格式。

      #yum groupremove 软件组名
      

      #卸载指定软件组

    源码包管理

    1. 区别:

      • 安装前:概念上的区别(前面已讲)
      • 安装后:安装位置不同
    2. RPM包安装位置(安装在默认位置)

      RPM包默认安装路径
      /etc/ 配置文件安装目录
      /usr/bin/ 可执行的命令安装目录
      /usr/lib/ 程序所使用的函数库保存位置
      /usr/share/doc/ 基本的软件使用手册保存位置
      usr/share/man/ 帮助文件保存位置
    3. 源码包安装位置:安装在指定位置中,一般是/usr/local/软件名

    4. 安装位置不同的影响:

      • RPM包安装的服务可以使用系统服务管理命令(service)来管理(RPM包安装的服务的执行文件全都会安装在/etc/rc.d/init.d下),例如RPM包安
        装的apache的启动方法是:
        • #/etc/rc.d/init.d/httpd start
        • #service httpd start(Redhat专有)
      • 源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中。所
        以只能用绝对路径进行服务的管理,如:
        • /usr/local/apache2/bin/apachectl start

    源码包安装

    1. 安装准备
      • 安装C语言编译器(gcc)
      • 下载源码包
    2. 注意事项
      • 源代码保存位置:/usr/local/src/
      • 软件安装位置:/usr/local/
      • 如何确定安装过程报错:
        • 安装过程停止
        • 出现error、warning或no的提示
    3. 源码包安装过程
      • 下载源码包;
      • 解压缩下载的源码包;
      • 进入解压缩目录(查看INSTALL安装说明README使用说明);
      • 安装说明中会有安装步骤,不熟悉安装过程的可以参考;
      • ./configure 软件配置与检查;
        • 定义需要的功能选项。
        • 检测系统环境是否符合安装要求。
        • 把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编辑。
      • #make编译;
      • 至此上述操作如果失败的话不需要删除任何文件,执行#make clean清空编译产生的临时文件即可;
      • #make install安装。
    4. 源码包卸载:不需要卸载命令,直接删除安装目录即可。不会遗留任何垃圾文件。

    脚本安装包

    • 脚本安装包并不是独立的软件包类型,常见安装的是源码包。
    • 是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装。
    • 非常类似于Windows下软件的安装方式。
    • Linux中常见的脚本安装包主要是一些硬件驱动,硬件驱动在Linux中安装比较困难,厂商为了推广自己的硬件,针对Linux做了很多的安装脚本。
  • 相关阅读:
    学习算法必备数学
    Use NDepend to Measure How SOLID Your Code Is
    使用Docker 快速体验TDengine
    ASP.NET Core 修改开源协议为MIT,.NET全平台 MIT协议开源了
    DNS泛域名解析应用(nip.io/sslip.io)
    对象池在 .NET (Core)中的应用[3]: 扩展篇
    对象池在 .NET (Core)中的应用[2]: 设计篇
    对象池在 .NET (Core)中的应用[1]: 编程篇
    项目组织结构的3种类型:职能型、项目型和矩阵型
    [LeetCode] 1208. Get Equal Substrings Within Budget 尽可能使字符串相等
  • 原文地址:https://www.cnblogs.com/yangyu-IoT/p/12770505.html
Copyright © 2011-2022 走看看