使用环境
Ubuntu-focal-live-server
1.首先是sources.list
观察在 /etc/apt/sources.list
当中的软件包来源:(图为list的部分内容)
-
详细了解 sources.list 的格式信息,输入命令:
man sources.list
-
其中
http://cn.archive.ubuntu.com/ubuntu
是中国ubuntu的官方默认源。这个也是我们更换国内第三方源主要修改的地方(虽然十分不推荐)。 -
focal 是 Ubuntu 20.04 的官方版本代号
-
focal--backports
中的backports是软件包代号,比如:-
backports
官方安全审查小组 不会 提供任何
安全审查和安全性承诺保障
向旧版本系统提供较新且兼容旧版系统和所有依赖关系的软件
-
partner
非Ubuntu系统的必要组件,是Canonical公司及其合作伙伴向Ubuntu用户提供的附加软件:通常是闭源和商业版权软件
-
-
main 、universe、restricted、multiverse等关键词也是软件包类型代号:
Main - Canonical官方支持的免费和开源软件
Universe - (开源)社区维护的免费和开源软件
Restricted - 私有设备驱动
Multiverse - 有版权限制的私有软件
免费 | 非免费 | |
---|---|---|
官方支持 | main | restricted |
社区或第三方支持 | universe | multiverse |
在不同版本中,对应的sources.list会有变化,因此更改第三方源的时候一定要找到对应版本的sources.list文件更改。
2.使用apt来管理吧
-
安装包前(或者每天一遍):
apt update #更新安装包的来源,后面有详细内容进行解释
-
安装软件包:
apt install #默认总是安装最新版 #同时这个命令也会对已有安装包进行检测看是否有更新并进行更新 apt install <package>=<version> #安装特定版本,可选安装版本通过apt policy查看
-
删除已安装包:
apt remove #删除已安装软件包但不删除配置文件 apt purge #删除已安装软件包和配置文件 apt clean #删除/var/cache/apt/archives/和/var/cache/apt/archives/partial/目录下除了lock文件之外的所有已下载(软件包)文件 apt autoclean #和apt-get clean类似,但更“智能”,主要是为了清除无用缓存保留可能还有用的缓存用的 apt autoremove #删除所有用于满足其他软件依赖关系而自动安装但现在已经没有软件依赖的软件包
-
查找软件包名:
apt-cache search 关键词1 | grep 关键词2 #以关键词1=ssh,关键词2=server为例。 #命令会先search带有ssh关键词(不论是包名还是包描述)的包,再grep进一步筛选其中有server(不论是包名还是包描述)的包 apt install 开头关键串 <两次敲击tab> #这种方法不推荐,其原理是用系统自带的自动补全来搜索。问题在于这个方法搜索出的包只有开头为关键词的包,比如apt install ssh 两次tab之后搜索项只有ssh***,而不会有openssh-server这种搜索结果。 www.Google.com #非常万能,虽然不是apt命令:p
-
确认软件包版本、来源:
apt-cache policy 包名 apt policy 包名 #获得的结果完全相同
-
软件安装信息:
apt-cache depends <package> #查看软件包依赖哪些独立安装包 dpkg -L <package> #查看指定软件包(名)在系统上创建了哪些目录和文件 #由于apt-get在安装一款软件包时会自动安装相关依赖的软件包 #所以,通常还需要查看这些被自动依赖安装的软件包又在系统上创建了哪些目录和文件
3.加深理解apt一点
-
apt VS apt-get VS aptitude:
- apt-get 是三者中诞生最早的,基本上现有发行版本都有apt-get(apt没有的情况下就用apt-get)
- apt 诞生稍晚一些,相比于apt-get更简单易用,改进了一些apt-get的设计缺陷。
- aptitude 对apt-get进行封装的一个更友好、更易用(主要体现在自动解决软件依赖bug上)包管理工具,可以用它来解决一下因为乱搞sources.list导致的依赖关系出错问题(但是也不万能)。它更多的是在GUI中使用,当然它也有CLI接口。但是在CLI你为什么不用apt呢
(还少敲几个键)。
-
update:
update过程是访问一个构造好的URL,该URL使用内置的字符串(sources.list)“拼接”规则构造成.
例如:
http://cn.archive.ubuntu.com/ubuntu/dists/focal/multiverse/binary-amd64/
-
其中 binary-amd64 是根据当前系统是64位而“换算”得来的,如果是32位系统该位置字符串会被替换为 binary-i386
-
当前发行版版本代号后面有不止一个软件包类型代号时,有几个软件包类型代号就对应会构造出几个实际的软件列表下载地址
将这个链接复制到浏览器里面我们会看见:
其中
Packages.gz
就是update命令访问链接过后下载更新到本地机器里的各个软件包的实际下载地址。后面使用apt安装时就会依照这个Packages.gz提供的信息来下载软件包。这个操作进一步佐证了我们要优先观察sources.list的重要性。同时,如果我们安装软件包的时候没有提前进行update操作,就有可能因为Packages.gz的年代过于久远而导致软件包实际下载地址失效(或者根本就没有收录)而出现无法下载的情况。 -
-
update VS upgrade VS dist-upgrade:
- update 使用/etc/apt/sources.list中定义的镜像源地址更新可用软件包列表,更新本地的可用软件包信息数据库文件,并不会“安装”或“更新”任何软件
- upgrade 根据本地的可用软件包信息数据库文件内容更新安装当前系统中所有已安装软件的版本
- dist-upgrade 在upgrade的基础上可以解决部分软件升级时需要卸载其他软件的自动依赖关系推导和解决问题,通常内核版本升级都需要通过该命令来实现