本人对ubuntu的了解不是很多,而且仅限于日常使用,目前没有时间和精力系统学习linux相关知识,只能通过日常使用来逐步了解linux发行版-ubuntu的相关知识,也就是采取随学随用、随用随学的策略。因此,本系列《ubuntu常用知识》并不会按照由浅入深,由简至繁的策略进行,类似于随笔而已。将来是否出全系列也说不准,至少现在是不需要的。内容上也不仅限于linux,可能还会涉及库的安装,软件的安装等。本系列的每篇文章的长度按照一天所学的知识延展,因此并没有固定的长度,篇幅多长完全由心情决定,hahahahaha!!!废话不多说,Let's do it!
一、apt install sth
这是ubuntu中最常用的安装命令。实际上我最常用的命令是apt-get install,两者实际上并没有实质区别。apt-get是老版的命令,apt是新版的命令,apt还包含了apt-get cache等等,用起来更方便。因为apt刚刚出来,所以允许有apt-get和apt共存,以后apt-get就要淘汰了。实际上apt install的安装方式会导致软件相关文件显得杂乱无章,详见这篇博文apt install 到底做了什么。不过不可否认的是通过apt install安装是方便的。
什么是APT?
传统的Linux安装软件过程是繁琐的,需要通过源代码的方式进行安装,并需要解决依赖问题,这对萌新来说简直就是灾难。还好RedHat公司为降低安装软件的难度,在自己的发行版中推出了著名的软件包管理工具RPM(Redhat Packet Manager),虽然RPM是由Redhat公司开发的,但其最初的理念是开放式的,其他的发行版比如OpenLinux、S.u.S.E.以及Turbo Linux都有采用,算是公认的行业标准了。
然而,虽然RPM提供的系软件管理功能使得软件安装和删除高度的自动化,简化了Linux环境下软件安装和管理的难度。但是RPM为保持系统一致性而具有的软件包依赖性问题需要管理员手工解决。管理员在安装和卸载程序时就可能非常烦琐。例如:在某个软件A时会发现该软件依赖于另外一个软件B,从而需要下载B,又发现B依赖与C,这样出现多次依赖嵌套问题。管理员不得不一一下载,然后再安装。
值得庆幸的是,Debian发布的软件管理系统发明的APT(高级软件包工具,Advanced Package Tool)在系统软件安装维护方面更加方便易用。APT能够在发现软件包依赖性的同时自动下载相应的软件包并加以安装。APT使得管理员能毫无故障地执行系统软件的升级。许多时候,当用户的软件安装对其他方法产生不良影响时,apt的一个改进能够让所有事情都保持正确。APT使得零停机时间升级成为现实。
简单来说,APT就是Debian发布的高级软件包管理工具,当我们想安装某个软件时,只需要apt install sth
就可以安装了,此背后的逻辑我们完全不需要了解。实际上,APT根据这一指令找到数据库中相应软件进行安装。本着刨根问题的原则,我们有必要该数据库在哪里。
APT源
这一小节主要讲解源的问题,主要参考详见该博文: Ubuntu的软件源格式详解。下面是对博文的总结。
ubuntu的软件源格式为(以阿里云为例):
deb http://mirrors.aliyun.com/ubu... trusty main restricted universe multiverse
deb-srchttp://mirrors.aliyun.com/ubu... trusty main restricted universe multiverse
整个源结构可分为四部分:
注意第三部分严格来说不是版本号,它应该是Ubuntu系统发布之后,在此基础上进行的安全性更新的分类。
第四部分是根据软件自由度而区分的,详情看下面的软件和更新截图。
为节约篇幅,我就不详解区别了。如有问题,自行百度即可。
我们看一下中科大的软件源镜像站,如下图所示。
这里主要介绍两个文件夹:dists和pool,其他原博文作者觉得需要了解的意义不大。
dists/:
本目录包含“发行版”(distributions),此处是获得 Ubuntu 发布版本(releases)和已发布版本(pre-releases)的软件包的正规途径。有些旧软件包及 Contens-*.gz Packages.gz 等文件仍在其中。存在于dists目录下的物理目录名,例如trusty-updates和trusty-security,就是“附加的仓库”。当某个Ubuntu发行版处于维护阶段。将包的必要升级和安全更新放在附加的仓库里。其附加仓库通常有“版本代号-updates”、“版本代号-security”、“版本代号-proposed”等等。dists目录包含的全是Ubuntu发行版目录及其附加仓库目录(如:trusty、trusty-update、trusty-security、trusty-backports就是Ubuntu trusty发行版目录及其附加仓库目录)。
pool/:
所有 Ubuntu 发布版及已发布版的软件包的物理地址。软件包均放进一个巨大的“池子(pool)”,按照源码包名称分类存放。为了方便管理,pool目录下按属性再分类(main、restricted、 universe和multiverse),分类下面再按源码包名称的首字母归档。这些目录包含的文件有:运行于各种系统架构的二进制软件包,生成这些二进制软件包的源码包。,如下图所示为属于tmux的二进制软件包以及源码包目录:
当了解这些知识后,编写一条可用的源就轻而易举了。存放源的文件为sources.list,编写过程如下:
- 首先确定我们想要哪种源,是阿里的还是清华的,or其他的?这里我以阿里为例。
按照源的四部分开始编写:
- 第一部分,确定软件包格式,如果只获得deb二进制软件包,则使用deb,如果还要获得生成它的源码则使用deb-src,但通常情况下,我们只需要deb就可以了。
- 第二部分,确定源的地址,这里我使用阿里云软件源
http://mirrors.aliyun.com/ubuntu/
- 第三部分,确定发行版版本代号,如trusty。事实上,如果我们进入dists/目录下可发现除了trusty还有其他的版本,比如bionic,xenial等,不过我们一般使用的是trusty。除了主要仓库外,还要包括其他四个附加仓库才算完整。
- 第四部分,确定软件包的分类目录,一般情况下我们也包含所有的目录,因为除了常用软件,我们可能还需要设备驱动等其他软件。
综上,完整的软件源文件sources.list为:
deb http://mirrors.aliyun.com/ubuntu/ trusty main universe restricted multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main universe restricted multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main universe restricted multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main universe restricted multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main universe restricted multiverse
为了能使该文件起作用,需要将其放在/etc/apt/目录中,并执行sudo apt update
命令更新软件列表。
PPA源
上述添加的源实际上是官方的镜像源,目的是提升下载软件速度,本质上还是官方源。然而,还有许多软件并不在官方源中,那我们如何获取这些软件呢?这个时候就需要PPA源了。所谓 PPA 源,就是指 “Personal Package Archives” ,也就是个人软件包集。这其实是一个网站,即launchpad.net。Launchpad 是 Ubuntu 母公司 Canonical 有限公司所架设的网站,是一个提供维护、支援或联络 Ubuntu 开发者的平台。由于不是所有的软件都能进入 Ubuntu 的官方的软件库,launchpad.net 提供了 PPA,允许开发者建立自己的软件仓库,自由的上传软件。供用户安装和查看更新。
我们可通过下列方式添加/删除PPA源:
添加PPA源:sudo add-apt-repository ppa:user/ppa-name
删除PPA源:sudo add-apt-repository --remove ppa:user/ppa-name
比如我们想安装wireshark,我们可以写如下命令:
sudo add-apt-repository ppa:wireshark-dev/stable
sudo apt-get update
当我们添加完 PPA 源之后,系统就会在 /etc/apt/sources.list.d/ 文件夹里创建了1个文件,但一般两个文件。
我们进入wireshark-dev-ubuntu-stable-focal.list文件中查看一下内容:
发现源的结构与官方源的结构是相同的。ubuntu为了安全性的考虑才会建立用于储存官方源的文件sources.list以及非官方源的文件sources.list.d/