【Linux命令行与Shell脚本编程】第九章 Linux安装软件

本文详细介绍了Linux系统中如何通过命令行进行软件包管理,包括基于Debian的系统使用apt进行安装、升级、卸载和管理软件,以及基于RedHat的系统中使用dnf进行相应操作。此外,还讨论了使用容器技术如snap和flatpak安装应用,以及传统的从源代码编译安装软件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux命令行与Shell脚本编程

第九章 安装软件



九,安装软件

9.1 软件包管理基础

软件包管理系统使用数据库来记录:
    ·Linux系统中已安装的软件包。
    ·每个软件包安装了哪些文件。
    ·每个已安装的软件包的版本。

软件包存储在称为仓库(repository)的服务器上,可以利用本地Linux系统中的软件包管理器通过 Internet访问,在其中搜索新的软件包,或是更新系统中已安装的软件包。
软件包通常存在依赖关系,被依赖的包必须提前安装。软件包管理器会 检测 依赖关系 并安装 额外的软件包。


Linux中广泛使用的两种主要的软件包管理系统基础工具是dpkg和rpm。
    基于 Debian的发行版( Ubuntu和Linux Mint)使用的是dpkg命令。
        dpkg会直接和Linux系统中的软件包管理系统交互,用于安装、管理和删除软件包。
    基于Red Hat的发行版( Fedora、CentOS和 openSUSE)使用的是rpm命令。
        rpm命令可以安装、管理和删除软件包。

9.2 基于 Debian 的系统

dpkg命令是基于Debian的软件包管理器的核心,用于在Linux系统中安装、更新、删除 DEB 包文件。

dpkg命令 假定 已经将DEB包文件下载到本地Linux系统或是以URL的形式提供。
所以从 Linux发行版仓库中安装软件包需要使用 APT(advanced package tool)工具集。
    ·apt-cache
    ·apt-get
    ·apt
9.2.1 使用apt管理软件包
apt list命令会显示仓库中所有可用的软件包,加入--installed选项,就可以限制仅输出那些已安装在系统中的软件包:
    $ apt --installed list
        acl/focal,now 2.2.53-6 amd64 [installed,automatic]
apt show 显示软件包详细信息
    $ apt show package_name
与特定软件包相关的所有文件。需要使用dpkg命令:
    dpkg -L package_name
    $ dpkg -L acl
        /.
        /bin
        /bin/chacl
        /bin/getfacl
        ...
找出特定的文件属于哪个软件包
    dpkg --search absolute_file_name
    
    $ dpkg --search /bin/getfacl
        acl: /bin/getfacl
9.2.2 使用apt安装软件包
查找特定的软件包,时使用apt命令与search命令
    apt search package_name
search 自带通配符效果;
search命令显示 在名称或描述中 包含搜索关键字的 软件包;只想搜索软件包名称,可以加入--name-only选项:
    $ apt --names-only search zsh
        Sorting... Done
        Full Text Search... Done
        fizsh/focal,focal 1.0.9-1 all
          Friendly Interactive ZSHell
        ...
使用apt安装: apt会自动解析必要的依赖关系,根据需要安装额外的库和软件包
    apt install package_name
    $ sudo apt install zsh
9.2.3 使用apt升级软件
upgrade命令可以使用仓库中的任何新版本安全地升级系统中所有的软件包:
    apt upgrade
upgrade会将所有已安装的软件包升级为仓库中可用的最新版本,有利于系统的稳定性
upgrade命令在升级过程中不会删除任何软件包。如果必须删除某个软件包才能完成升级,可以使用以下命令:
    apt full-upgrade
9.2.4 使用apt卸载软件包
apt的remove命令可以删除软件包,同时保留数据和配置文件。
要将软件包以及相关的数据和配置文件全部删除,需要使用 purge选项:
    $ sudo apt purge zsh

软件包存在依赖,不能自动删除,可以使用 autoremove 命令将其删除:
    $ sudo apt autoremove
9.2.5 apt仓库
仓库位置保存在文件/etc/apt/sources.list中。

为软件包管理系统加入一些额外的软件仓库,需要修改文件。
    $ cat /etc/apt/sources.list
        main restricted
        deb http://us.archive.ubuntu.com/ubuntu/ focal main restricted

格式: 
    deb (or deb-src) address  distribution_name  package_type_list

    deb 或 deb-src  软件包的类型。
        deb表明是一个已编译程序的仓库源,
        deb-src表明是一个源代码的仓库源。
    address 软件仓库的网址。
    distribution_name 该软件仓库的发行版的版本名称。
    package_type_list 表明仓库里面有什么类型的软件包,可能不止一个单词

9.3 基于Red Hat的系统

基于Red Hat的系统有以下几种前端工具。
    ·yum:用于Red Hat、CentOS和Fedora。
    ·zypper:用于openSUSE。
    ·dnf:yum的升级版,有一些新增的特性。
9.3.1 列出已安装的软件包
已安装的软件包
    dnf list installed
    输出的信息可能会在屏幕上一闪而过,所以最好是将已安装软件的列表重定向到一个文件中,然后使用more命令或less命令(或GUI编辑器)来仔细查看:
     dnf list installed > installed_software
找出文件系统中的某个文件是由哪个软件包安装的
    dnf provides file_name
9.3.2 使用dnf安装软件
安装软件包
    dnf install package_nam
9.3.3 使用dnf升级软件
查看已安装软件包的所有可用更新
    dnf list upgrades
升级所有软件包
    dnf upgrade
升级指定软件包
    dnf upgrade package_name
upgrade-minimal 命会将软件包升级至最新的bug修复版或安全补丁版,而不是最新的最高版本
9.3.4 使用dnf卸载软件
dnf remove package_name
9.3.5 处理损坏的依赖关系
软件包的依赖关系可能会被另一个软件包搞乱。称为依赖关系损坏(broken dependency)。

    dnf clean all
    dnf upgrade
还解决不了问题,尝试:
    dnf repoquery --deplist package_name
    会显示指定软件包的所有依赖关系以及哪些软件包提供了这种依赖
yum工具的upgrade命令支持 --skip-broken 选项,可以跳过依赖关系损坏的软件包,同时仍尝试继续升级其他包。dnf工具则自动执行该操作。
9.3.6 RPM仓库
查看当前拉取软件的仓库
    dnf repolist
没有所需仓库就需要编辑 dnf仓库的定义:
    ·配置文件/etc/dnf/dnf.conf。
    ·/etc/yum.repos.d目录中的单独文件。

9.4 使用容器管理软件

云计算带来了应用程序打包方式的一种新范式:应用程序容器(application container)。
应用程序容器创建了一个环境,其中包含了应用程序运行所需的全部文件,包括运行时库文件。
9.4.1 使用snap容器
snap打包系统会将应用程序所需的所有文件集中到单个snap分发文件中
snapd应用程序运行在后台,你可以使用snap命令行工具查询snap数据库,显示已安装的snap包,以及安装、升级和删除snap包。

snap version命令检查snap是否正在运行:
    $ snap version
    snap    2.44.3+20.04
    snapd   2.44.3+20.04
    series  16
    ubuntu  20.04
    kernel  5.4.0-31-generic
使用snap list命令查看当前已安装的snap应用程序列表:
    $ snap list
snap find命令可以在snap仓库中搜索指定程序:
    $ snap find solitaire
    Name                    Version  Publisher    Notes  Summary
    solitaire               1.0      1bsyl        -      usual Solitaire card game,
snap info命令可以查看snap应用程序(简称为snap)的详细信息: 
    $ snap info solitaire
snap install命令可以安装新的snap:
    $ sudo snap install solitaire

安装snap的时候,snapd程序会将其作为驱动器挂载。可以使用mount命令查看新的snap挂载。

删除某个snap
    $ sudo snap remove solitaire
9.4.2 使用flatpak容器
Red Hat、CentOS和Fedora都倾向于使用flatpak.

使用flatpak list命令列出已安装的应用程序容器:
    $ flatpak list
    Name             Application ID                Version        Branch    Installation
    Platform         org.fedoraproject.Platform                   f32       system
flatpak search命令可以在flatpak仓库中搜索指定应用程序:
    $ flatpak search solitaire
    Name         Description      Application ID     Version      Branch       Remotes
    Aisleriot Solitaire        org.gnome.Aisleriot    stable      fedora
    GNOME Mahjongg             org.gnome.Mahjongg     3.32.0      stable       fedora
使用容器时,必须使用其Application ID值,而不是名称。

使用flatpak install命令安装应用程序:
    $ sudo flatpak install org.gnome.Aisleriot
使用flatpak uninstall命令删除应用程序容器:
    $ sudo flatpak uninstall org.gnome.Aisleriot

9.5 从源代码安装

软件包管理系统和应用程序容器出现前,只能以源代码形式分发软件,需要在系统中自行编译。源代码形式的软件包通常以 tarball 的形式发布。

下载完成之后,就可以使用tar命令解包了:
    $ tar -Jxvf sysstat-12.3.3.tar.xz

tarball 中所有文件都已经被解包到目录,进入该目录继续完成后续操作。
在目录的列表中, README文件或INSTALL文件 写明了软件安装所需的操作步骤。

用make命令来构建各种二进制文件。make命令会编译源代码,然后由链接器生成最终的可执行文件
    $ make
make命令结束后,可运行的程序就出现在目录中。将其安装在Linux系统的常用位置。使用 make命令的install选项    
    # make install

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值