Ubuntu 20X 版软件管理
Redhat系列与Debian系列的区别
Redhat系列 | Debian系列 | 说明 |
---|---|---|
yum clean all;yum makecache | apt update | 刷新存储库索引 |
yum list | apt list | 列出包含条件的包(已安装,可升级等) |
yum provides | apt-file search | 查看文件来自于哪个包 |
yum install | apt install | 在线安装软件包 |
yum reinstall | apt reinstall | 重新安装软件包 |
yum remove | apt remove | 移除软件包 |
yum search | apt search | 搜索安装包 |
yum info | apt show | 查看某个安装包的详细信息 |
yum upgrade | apt upgrade | 通过安装/升级包的方式升级系统 |
yum autoremove | apt autoremove | 自动删除不需要的包 |
无 | apt full-upgrade | 通过删除/安装/升级包进行系统升级 |
无 | apt edit-sources | 编辑源列表 |
无 | apt satisfy | 满足依赖字符串 |
yum updateinfo | 无 | 查看包的安全警报 |
yum upgrade-minimal | 无 | 最小化升级 |
yum repolist | 无 | 显示仓库列表 |
yum repoinfo | 无 | 显示仓库详细信息 |
yum alias | 无 | 列出或创建命令别名 |
yum history | 无 | 显示执行命令的历史记录 |
yum check-update | 无 | 检查可用升级 |
rpm -qa | dpkg -l | 列出当前已安装的包 |
rpm –qi | dpkg -s | 列出该包的状态,包括详细信息 |
rpm –ql | dpkg -L | 列出该包中所包含的文件 |
rpm –qf |
dpkg -S |
搜索包含pattern的包 |
rpm –qpl package | dpkg -c package.deb | 列出 deb 包的内容 |
Ubuntu 软件管理
Debian软件包通常为预编译的二进制格式的扩展名".deb",类似rpm文件,因此安装快速,无需编译软件。包文件包括特定功能或软件所必需的文件、元数据和指令
-
dpkg:package manager for Debian,类似于rpm,dpkg是基于Debian的系统的包管理器。可以安装,删除和构建软件包,但无法自动下载和安装软件包或其依赖项
-
apt:Advanced Packaging Tool,功能强大的软件管理工具,甚至可升级整个Ubuntu的系统,基于客户/服务器架构,类似于yum
1. APT工作原理
在服务器上先复制所有 DEB 包,然后用 APT 的分析工具 genbasedir 根据每个 DEB 包的包头(Header) 信息对所有的 DEB 包进行分析,并将该分析结果记录在文件夹 base 内的一个 DEB 索引清单文件中,一旦 APT 服务器内的 DEB 有所变动,要使用 genbasedir 产生新的 DEB 索引清单。客户端在进行安装或升级 时先要查询 DEB 索引清单,从而获知所有具有依赖关系的软件包,并一同下载到客户端以便安装。当客 户端需要安装、升级或删除某个软件包时,客户端计算机取得 DEB 索引清单压缩文件后,会将其解压置放于 /var/cache/apt/,而客户端使用 apt-get install 或 apt-get upgrade 命令的时候,就会将这个文件夹 内的数据和客户端计算机内的 DEB 数据库比对,知道哪些 DEB 已安装、未安装或是可以升级的
2. dpkg 包管理器
帮助参看:man dpkg
dpkg 常见用法
# 安装包
dpkg -i package.deb
#删除包,不建议,不自动卸载依赖于它的包
dpkg -r package
# 删除包(包括配置文件)
dpkg -P package
# 列出当前已安装的包,类似rpm -qa
dpkg -l
# 显示该包的简要说明
dpkg -l package
# 列出该包的状态,包括详细信息,类似rpm –qi
dpkg -s package
# 列出该包中所包含的文件,类似rpm –ql
dpkg -L package
# 搜索包含pattern的包,类似rpm –qf
dpkg -S <pattern>
# 配置包,-a 使用,配置所有没有配置的软件包
dpkg --configure package
# 列出 deb 包的内容,类似rpm –qpl
dpkg -c package.deb
# 解开 deb 包的内容
dpkg --unpack package.deb
示例
# 列出系统上安装的所有软件包
root@ubuntu20:~# dpkg -l
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version >
+++-==========================================-================================>
ii accountsservice 0.6.55-0ubuntu13.2 >
ii acl 2.2.53-8 >
ii acpi-support 0.143 >
...省略部分...
# 列出软件包安装的文件
root@ubuntu20:~# dpkg -L bash
/.
/bin
/bin/bash
/etc
/etc/bash.bashrc
/etc/skel
/etc/skel/.bash_logout
/etc/skel/.bashrc
/etc/skel/.profile
...省略部分...
# 查看 /bin/bash 来自于哪个软件包
root@ubuntu20:~# dpkg -S /bin/bash
bash: /bin/bash
root@ubuntu20:~#
# 安装本地的 .deb 文件
dpkg -i /mnt/cdrom/pool/main/z/zip/zip_3.0-11build1_amd64.deb
# 卸载软件包
dpkg -r zip
注意:一般建议不要使用dpkg卸载软件包。因为删除包时,其它依赖它的包不会卸载,并且可能无法再正常运行
3. apt
Debian 使用 apt 工具集来管理包系统,apt-get 是其中一个常用的命令行工具,另外一款较为流行的命 令行与 GUI 兼顾的工具是 aptitude ,之前最常用的 Linux 包管理命令都被分散在了 apt-get、apt- cache 和 apt-config 这三条命令中
在 2014 年 apt 命令发布第一个稳定版,Ubuntu 16.04 引入新特性之一便是 apt 命令,apt 命令解决了 命令过于分散的问题,它包括 apt-get 命令出现以来使用最广泛的功能选项,以及 apt-cache 和 apt- config 命令中很少用到的功能。在使用 apt 命令时,用户不必再由 apt-get 转到 apt-cache 或 apt- config,提供管理软件包所需的必要选项
apt 相当于 apt-get、apt-cache 和 apt-config 中最常用命令选项的集合
apt 具有更精减但足够的命令选项,而且参数选项的组织方式更为有效。此外,启用的几个特性也非常 有帮助。例如:可以在使用 apt 命令安装或删除程序时看到进度条,apt 还会在更新存储库数据库时提示 用户可升级的软件包个数
apt 与 apt-get 有一些类似的命令选项,但它并不能完全向下兼容 apt-get 命令,也即可用 apt 替换部分 apt-get 系列命令,但不是全部
3.1 apt 命令用法
Usage: apt [options] command
查看帮助:apt help
root@ubuntu20:~# apt help
apt 2.1.10ubuntu0.1 (amd64)
Usage: apt [options] command
apt is a commandline package manager and provides commands for
searching and managing as well as querying information about packages.
It provides the same functionality as the specialized APT tools,
like apt-get and apt-cache, but enables options more suitable for
interactive use by default.
Most used commands:
list - list packages based on package names
search - search in package descriptions
show - show package details
install - install packages
reinstall - reinstall packages
remove - remove packages
autoremove - Remove automatically all unused packages
update - update list of available packages
upgrade - upgrade the system by installing/upgrading packages
full-upgrade - upgrade the system by removing/installing/upgrading packages
edit-sources - edit the source information file
satisfy - satisfy dependency strings
See apt(8) for more information about the available commands.
Configuration options and syntax is detailed in apt.conf(5).
Information about how to configure sources can be found in sources.list(5).
Package and version choices can be expressed via apt_preferences(5).
Security details are available in apt-secure(8).
This APT has Super Cow Powers.
root@ubuntu20:~#
3.2 apt 与 apt-get 命令对比
apt 命令 | 被取代的命令 | 命令的功能 |
---|---|---|
apt install | apt-get install | 安装软件包 |
apt remove | apt-get remove | 移除软件包 |
apt purge | apt-get purge | 移除软件包及配置文件 |
apt update | apt-get update | 刷新存储库索引 |
apt upgrade | apt-get upgrade | 升级所有可升级的软件包 |
apt autoremove | apt-get autoremove | 自动删除不需要的包 |
apt full-upgrade | apt-get dist-upgrade | 在升级软件包时自动处理依赖关系 |
apt search | apt-get search | 搜索应用程序 |
apt show | apt-get show | 显示安装细节 |
3.3 apt 特有的命令
命令 | 解释 |
---|---|
apt list | 列出包含条件的包(已安装,可升级等) |
apt edit-source | 编辑源列表 |
3.4 APT包索引配置文件
/etc/apt/sources.list
/etc/apt/sources.list.d
可以修改上面文件为国内的安装源,提高速度
示例:修改阿里云的APT源为清华源
root@ubuntu2004:~# sed -i 's/mirrors.aliyun.com/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.list
3.5 apt命令操作(如安装和删除软件包)日志文件
/var/log/dpkg.log
4 示例
# 安装包
apt install tree zip
# 安装图形桌面
apt install ubuntu-desktop
# 在线安装软件包
apt install apache2
# 安装软件包的时候指定安装具体的版本
apt install nginx=1.14.0-0ubuntu1.6
# 删除包
apt remove tree zip
# 说明:apt remove中添加--purge选项会删除包配置文件,谨慎使用
# 更新包索引,相当于 yum clean all;yum makecache
# 更新本地软件包列表索引,修改了apt仓库后必须执行
apt update
# 升级包:要升级系统,请首先更新软件包索引,再升级
# 升级所有已安装且可升级到新版本的软件包
apt upgrade
# apt列出仓库软件包,等于yum list
apt list
# 搜索安装包
apt search nginx
# 查看某个安装包的详细信息
apt show apache2
# 卸载单个软件包但是保留配置文件
apt remove apache2
# 删除安装包并解决依赖关系
apt autoremove apache2
# 卸载单个软件包删除配置文件
apt purge apache2
# 升级整个系统,必要时可以移除旧软件包。
apt full-upgrade
# 编辑source源文件
apt edit-sources
# 查看仓库中软件包有哪些版本可以安装
apt-cache madison nginx
# 查看文件来自于哪个包,类似 redhat 中的 yum provides <filename>
apt-file search 'string' # 默认是包含此字符串的文件
apt-file search -x '正则表达式'
apt-file search -F /path/file
5 软件管理案例
查看文件来自于哪个包
# dpkg -S filename :在当前安装的包里查找文件
root@ubuntu20:~# dpkg -S /bin/ls
coreutils: /bin/ls
root@ubuntu20:~#
查找不存在的文件存在于哪个包
root@ubuntu20:~# apt -y install apt-file
Reading package lists... Done
Building dependency tree
Reading state information... Done
apt-file is already the newest version (3.2.2).
0 upgraded, 0 newly installed, 0 to remove and 190 not upgraded.
root@ubuntu20:~# apt update
root@ubuntu20:~# apt-file search -x '/sl$'
root@ubuntu20:~# apt-file search -F /usr/games/sl
sl: /usr/games/sl
root@ubuntu20:~#
查看包相关信息
# 显示系统安装包的统计信息,可以统计已经安装包的数量,大小,占用空间等
# apt-cache stats
root@ubuntu20:~# apt-cache stats
Total package names: 102637 (2,874 k)
Total package structures: 98556 (4,336 k)
Normal packages: 65579
Pure virtual packages: 1681
Single virtual packages: 17817
Mixed virtual packages: 1908
Missing: 11571
... 省略部分 ...
root@ubuntu20:~#
# 显示xxx包的信息,可以看到某个包的源、版本等信息
# apt-cache show xxx # 更详细
# apt show xxx
root@ubuntu20:~# apt show keepalived
Package: keepalived
Version: 1:2.0.19-2.1
Priority: optional
Section: admin
Origin: Ubuntu
Maintainer: Ubuntu Developers
... 省略部分 ...
root@ubuntu20:~#
root@ubuntu20:~# apt-cache show keepalived
Package: keepalived
Architecture: amd64
Version: 1:2.0.19-2.1
Priority: optional
Section: admin
Origin: Ubuntu
... 省略部分 ...
root@ubuntu20:~#
查看仓库中的指定软件的所有版本
root@ubuntu20:~# apt-cache madison docker-ce
# 安装指定版本
root@ubuntu20:~# apt -y install docker-ce=5:19.03.13~3-0~ubuntu-bionic
查看文件的依赖
# 查询软件xxx依赖哪些包
# apt depends xxx
# apt-cache depends xxx
root@ubuntu20:~# apt depends keepalived
keepalived
PreDepends: init-system-helpers (>= 1.54~)
Depends: iproute2
iproute2:i386
Depends: libc6 (>= 2.28)
Depends: libglib2.0-0 (>= 2.26.0)
Depends: libmnl0 (>= 1.0.3-4~)
Depends: libnftnl11 (>= 1.1.2)
Depends: libnl-3-200 (>= 3.2.27)
Depends: libnl-genl-3-200 (>= 3.2.7)
Depends: libpcre2-8-0 (>= 10.22)
Depends: libsnmp35 (>= 5.8+dfsg)
Depends: libssl1.1 (>= 1.1.0)
Recommends: ipvsadm
root@ubuntu20:~#
# 查询软件xxx被哪些包依赖
# apt rdepends xxx
# apt-cache rdepends xxx
root@ubuntu20:~# apt rdepends bash
6 ubuntu 初始化建议安装的常用包
root@ubuntu20:~# apt purge ufw lxd lxd-client lxcfs liblxc-common
root@ubuntu20:~# apt install iproute2 ntpdate tcpdump telnet traceroute nfs-kernel-server \
nfs-common lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev gcc openssh-server iotop unzip zip