浅谈Ubuntu中的软件包

这篇具有很好参考价值的文章主要介绍了浅谈Ubuntu中的软件包。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 前言

还记得大学第一次接触Ubuntu和Linux的时候,觉得用apt安装想要的软件非常方便。但是有时候出现了问题,各种报错,自己又不懂原理,就会非常抓狂。现在稍微理解一点了,故以较为容易理解的方式记录在这里,方便他人。

2. 软件包与包管理器dpkg

Linux里的软件就是一些可执行文件。就像是你自己写个main.c,里面printf("hello world");,然后用gcc编译出来的可执行文件一样。
但是实际上的一个软件不会这么简单,除了可执行文件本体以外,还会有一些库、配置文件、图标资源、文档等。把这些东西打一个包,就是所谓的软件包,例如:

  • 在Debian系的Linux发行版(如Ubuntu、Raspbian、Armbian)中,软件包后缀名是.deb
  • 在RedHat系的Linux发行版(如CentOS、Fedora)中,软件包后缀名是.rpm
  • ...

要安装一个下载好的.deb软件包,可以使用dpkg工具。例如:

sudo dpkg -i   xxxxxx.deb

所谓的安装过程,其实就是根据.deb包里的记述,把这些可执行文件、文档、图标、快捷方式等文件放到它们该在的位置
如何知道一个软件包到底安装了哪些文件,这些文件安装在哪些目录下?可以使用dpkg -L命令,例如:

dpkg -L gcc

要删除一个.deb包,可以使用dpkg -r <package_name>
dpkg的更多使用方式,本文就不多介绍了,可自行搜索。

3. 包管理器apt与包的依赖关系

在Ubuntu中,更多时候我们是使用apt来管理软件包。那么aptdpkg有什么关系和区别?
简单来说,dpkg是一个离线的本地包管理器,在安装软件包时,它只管把文件解压出来并拷贝到对应的目录下;在卸载软件包时,它只管把之前安装的文件从对应的位置删除。也就是说,如果两个软件包内的文件有重复的目录名称,使用dpkg先后安装这两个软件包时,也会直接覆盖,dpkg不会管那么多。
apt是一个“在线”的包管理器,apt的底层其实就是dpkg,但是apt不需要自己提前下好.deb包,它可以从apt源网站直接自动下载.deb包并进行安装。
但是apt的作用不止于此。这要从Unix系统的设计风格讲起,通常,一些软件包不会包含这个软件执行所需要的全部文件,而是尽量去使用其他.deb包提供的.so动态链接库等资源。这样就形成了一个包对另一个包的依赖关系。这样,Unix系统就可以形成全局的一个依赖树,最好是所有库都只保存一份,从而满足了早期Unix程序员大佬们的“洁癖”。
你可以用dpkg -I /path/to/deb来查看一个deb包的依赖信息。

所以,当你用apt安装一个软件时,apt会检查你的电脑上是否有这个包的依赖包,如果缺少的话,apt会帮你把这个包的依赖包也安装好。当你要卸载包时,apt会帮你把当初装的,现在用不到的那些依赖包们也同时卸载掉。

具体来说:

  • sudo apt install <package> 可以安装一个包及其依赖项
  • sudo apt remove <package> 可以卸载一个包,以及用不到的依赖项

再列举一个场景,你从网上下载了一个deb包,使用sudo opkg -i进行安装,但是发现这个deb包有一些依赖项在你的电脑上是缺少的。这时你可以尝试使用sudo apt install --fix-broken来自动安装这个deb包的依赖项。

4. 软件源

Ubuntu官方会维护一个软件包的仓库,apt其实就是从这个仓库下载软件包。你可以使用apt update来把本地的软件包列表与软件源进行同步,然后使用apt upgrade来把本地所有软件更新到最新。在安装想要的软件包之前也执行apt update是一个好习惯。
官方软件源的地址记录在/etc/etc/apt/sources.list中。
如果你觉得访问官方源的速度太慢,也可以选择国内的镜像源,例如阿里、清华、中科大等单位提供的镜像源。
此外,如果官方的软件源没有收录你想要的软件,也可以添加PPA(Personal Package Archives)源,这样你就可以从这些第三方仓库中下载到你想要的软件了。

5. 解决依赖问题

随着Linux的发展,现在各种各样的软件实在是太多了,而且新旧版本不一定兼容。举一个常见的抓狂场景:你想使用A和B两个软件,A和B软件包都依赖C软件包,但是一个依赖1.0版本的C,一个依赖2.0版本的C,互相不兼容,然后apt源下载到的还是1.5版本。
为了解决这个问题,你有好几个选择:

  • 如果A和B都依赖的库文件名不同(例如文件名携带版本号的情况),你可以去Ubuntu源站分别下载到这两个版本的C软件包,然后都用dpkg安装一下即可;
  • 如果A和B都依赖同一路径下的同名但不同版本的库,就麻烦了。A和B你只能留一个,另一个就得拉取源码编译,编译的时候手动指定一个另外的路径来链接对应版本的依赖包;

6.其他软件安装方式

为什么我们比较少见到Windows上出现依赖的问题?因为软件公司们在发布软件安装包的时候,把所有依赖都打包在一起了,从而确保他们的软件能在用户的电脑上能直接运行。从商业上看这种行为确实是合理的,至于浪费了用户的硬盘空间就无所谓了,反正现在2T的SSD也就五六百块钱了。
在Linux上也有这种软件,那就是AppImage,它们打包了所有的依赖库,可以直接运行。牺牲了空间,保证了稳定性。
不过AppImage需要自己从命令行执行,如果是GUI软件的话,每次都要打开命令行运行比较麻烦。为了解决这个问题,可以安装AppImageLauncher.

sudo add-apt-repository ppa:appimagelauncher-team/stable
sudo apt update
sudo apt install appimagelauncher

然后从GNOME桌面Applications菜单中找到appimagelauncher,设置好自己存放AppImage的目录。这些AppImage就会出现在GNOME桌面系统的Applications菜单中了。
类似的思路,也可以使用Docker容器。不精确地讲,容器就像虚拟机,把所有的依赖都准备好,然后把镜像分享给别人,从而确保程序能够运行。当然容器和虚拟机完全不是一个东西,本文不多介绍了。文章来源地址https://www.toymoban.com/news/detail-436821.html

到了这里,关于浅谈Ubuntu中的软件包的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ubuntu18.04编译Caffe软件包

    正真的头文件位置处于/usr/include/hdf5/serial 目录下 进入项目根目录执行替换头文件 建立软连接 修改相关环境变量在文件 Makefile.config https://zhuanlan.zhihu.com/p/372521613 download 3.4.0 解压 编译

    2024年02月11日
    浏览(52)
  • 关于Ubuntu22.04无法定位软件包

    声明:本文章目的是为了记录个人学习 https://blog.csdn.net/LvzJason/article/details/122649941 有以下三个原因: 当前镜像源中的软件版本较低 当前镜像源中不存在我们需要安装的软件 镜像源连接超时 从以上可以看出来这个问题几乎都是和镜像源有关,也就是说我们的软件安装和镜像

    2024年02月06日
    浏览(64)
  • 解决Ubuntu“无法定位软件包 xxx”的问题

    配置Ubuntu系统时发现有些东西无法安装,可能是软件源出了问题,需要重新配置。          目录 1、 安装vim(可跳过) 2、备份软件源配置 3、配置软件源 4、重新获取软件源列表 虽然Ubuntu有自带的编辑器 vi,但是正常模式下,无法使用方向键移动光标,所以如果没有安抓经

    2024年02月12日
    浏览(46)
  • ubuntu 出现“E: 无法定位软件包问题”解决方法

    后续补充: 一定要注意镜像源版本的问题! 有的文章提供的镜像源的版本是focal,你的系统版本可能不一样,是jammy, 直接复制别人的镜像源,版本对不上就会一直报错。 可通过 lsb_release -a 查看版本,看codename就可以知道自己的镜像源版本。  首先确保网络连接了,之后参

    2024年02月05日
    浏览(53)
  • 如何列出 Ubuntu 和 Debian 上已安装的软件包

    当你安装了 Ubuntu 并想好好用一用。但在将来某个时候,你肯定会遇到忘记曾经安装了那些软件包。 这个是完全正常。没有人要求你把系统里所有已安装的软件包都记住。但是问题是,如何才能知道已经安装了哪些软件包?如何查看安装过的软件包呢? 如果你经常用 apt 命令

    2024年02月07日
    浏览(58)
  • ubuntu 有 1 个软件包没有被完全安装或卸载

    下面是我安装 sqlite3 出现的问题: 根据以上提供的信息,看起来系统试图安装 sqlite3,但遇到了一些问题。问题可能是软件包没有完全安装成功。可以尝试以下几个步骤来解决这个问题: 1.重新运行安装命令:有时候,网络连接或其他因素可能导致软件包下载不完整或解压缩

    2024年02月14日
    浏览(52)
  • 如何验证 ubuntu 系统中是否已经安装过某个软件包?

    在 Ubuntu 上,可以使用 dpkg 命令来验证某个软件包是否已经安装。 打开终端。 输入以下命令: 例如,如果要验证 vim 是否已安装,可以输入: 按下 Enter 键运行命令。 如果软件包已安装,你将看到关于该软件包的详细信息,包括版本号等,这里以查询 vim 为例,截图如下:

    2024年02月11日
    浏览(58)
  • 如何把openwrt的ipk软件包安装到ubuntu上

    前提:都是arm64的架构的软件包。 下载openwrt的ipk软件包 1. 从https://pkgs.org/ 查找下载软件包: 本文以swconfig软件包为例,下载swconfig和相关的依赖软件包: swconfig_12_aarch64_cortex-a72.ipk libuci20130104_2021-10-22-f84f49f0-6_aarch64_cortex-a72.ipk libubox20220515_2022-05-15-d2223ef9-1_aarch64_cortex-a72.ipk l

    2024年01月25日
    浏览(49)
  • 在ubuntu中安装filezilla及解决 Ubuntu E:无法定位软件包问题

    本文是自己在在ubuntu中安装filezilla遇到问题整理而成的笔记,记录下来,以便日后查找。本文主要是由以下博文整理而成,感谢各位博主: (1)windows主机和ubuntu互传文件的4种方法; (2)解决 Ubuntu E:无法定位软件包问题; (3)Linux当中解决apt-get install E: 无法定位软件包问

    2024年02月05日
    浏览(42)
  • Linux中的软件包管理器yum

    目录 1.什么是软件包 2.关于 rzsz 3.查看软件包 4.如何安装软件 5.如何卸载软件 1.什么是软件包 ●  在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序. ●  但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解

    2024年01月23日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包