Ubuntu 相关汇总
Ubuntu 相关汇总
◇ 服务器相关
今天试用了阿里云 ECS,简单记录一下使用过程,供日后参考。
操作系统选择的是 Ubuntu 22.04 Uefi 版。
创建实例后,使用 Finalshell 进行连接。
Finalshell 官网地址:https://www.hostbuf.com/t/988.html
▷ 更新软件和数据
连接后,可以先更新一下数据,当前是 root 用户模式:
1 |
|
更新过程中会出现:
这里选择了系统默认选项:No。
kexec 是一个工具,允许在不完全重启计算机的情况下加载新内核,可以提高系统升级的效率。
如果只是执行 apt upgrade
并且希望立即应用系统更新,而无需完全重启系统,可以选择 kexec。这样可以节省重启所需的时间,它仅加载新内核,而不重新引导整个系统。
如果更偏向传统的完全系统引导过程,或者担心 kexec 可能会引起系统稳定性问题,可以选择不执行 kexec,让系统通过完整的系统引导加载程序过程进行重启。这样,可以确保系统更新后的稳定性。
然后更新过程中又出现:
这里依旧采取了默认选项,直接回车。
“Daemons using outdated libraries" 表明某些系统服务 (daemons) 仍在使用旧版本的共享库 (libraries)。
需要重新启动这些服务以确保它们使用最新的库。
更新完成后继续输入命令:
1 |
|
▷ 创建并切换用户
一直使用 root 用户有风险也不推荐,所以需要创建一个新用户:
1 |
|
如果是桌面端:
Ubuntu Desktop 的默认 root 密码是随机的,即每次开机都有一个新的 root 密码。
我们可以在终端输入命令 sudo passwd
,然后输入当前用户的密码,enter
,终端会提示我们输入新的密码并确认,此时的密码就是 root 新密码。
修改成功后,输入命令 su root
,再输入新的密码即可切换 root 用户。
▷ 终端 SSH 连接
之后我们也可以直接在自己本地电脑的终端连接云服务器:
1 |
|
⚠ 输入命令后会出现提示:
1 |
|
需要输入 yes
而不是直接回车,因为它默认并不是 yes
。否则会连接失败,显示:
1 |
|
▷ 修改 SSH 配置
打开配置文件:
1 |
|
修改配置文件,记得防火墙放行相应端口:
1 |
|
重启 SSH 服务,使变更生效:
1 |
|
其他设备登录:
1 |
|
▷ 取消密码登录权限
进一步安全设置,只使用公私钥登录。
本地生成密钥:
1 |
|
服务器在家目录下,创建一个 .ssh
文件夹:
1 |
|
上传公钥:
1 |
|
服务器修改公钥权限:
1 |
|
打开 SSH 配置文件:
1 |
|
禁止密码登录:
1 |
|
重启 SSH 服务,使变更生效:
1 |
|
▷ 修改主机名
主机名保存在 /etc/hostname
,直接打开修改即可 (需要 root 权限)。
◇ Docker 相关
▷ 安装
之前已经在 Windows 中体验过了 (参见:链接)。使用 Docker 要比直接安装程序干净一些,管理起来也更方便。现在在 Ubuntu 里安装一下:
- 准备工作
在安装之前,需要先卸载冲突的软件包:
1 |
|
上面的命令使用了一个 for
循环来一一卸载这些软件包,如果它们存在的话。
下面介绍 Docker 的 2 种安装方法,官方建议使用第一种方法:
- 安装方法一:使用 APT 软件源安装
首次安装 Docker Engine 之前,需要设置 Docker 资源库。之后便可以从版本库中安装和更新 Docker。
* 添加 Docker 官方的 GPG 密钥
首先,安装必要工具:
1 |
|
然后,创建一个目录 /etc/apt/keyrings
,并设置该目录的权限,以便后续步骤可以将 Docker 的 GPG 密钥存储在这个目录中,安全地验证 Docker 软件包的签名:
1 |
|
一些参数解释:
-
install
: 用于安装文件或目录。本次它被用于创建目录。 -
-m 0755
: 这是 install 命令的一个选项,用于设置创建的目录的权限。0755
是一个八进制权限掩码,它指定了目录的权限:- 第一个数字 0 表示没有任何特殊权限。
- 第二个数字 7 表示所有者 (owner) 有读、写和执行权限 (4+2+1)。
- 第三个数字 5 表示所属组 (group) 有读和执行权限 (4+0+1)。
- 第四的数字 5 表示其他用户也有读和执行权限 (4+0+1)。
这是一个典型的设置用于存储密钥文件的目录。
-
-d
: 也是 install 命令的选项,表示要创建一个目录。
之后,从 Docker 官方网站下载 GPG 密钥,解码并转换为二进制格式,将其保存在 /etc/apt/keyrings/docker.gpg
文件中。这个密钥文件将用于后续的软件包验证,以确保下载的 Docker 软件包没有被篡改或损坏:
1 |
|
该命令分为 2 个部分:
-
|
前的部分表示使用 curl 工具来从指定的 URL 下载数据。curl 是一个命令行工具,用于在 Linux 系统上进行网络数据传输。-f
表示如果 HTTP 请求失败 (返回码大于等于 400),就不显示 HTTP 错误页面,而是直接退出。-s
表示在静默模式下执行,不显示进度信息。-S
表示即使在静默模式下,仍然显示错误消息。这个选项通常与-s
一起使用,以便在需要时显示错误信息。-L
表示遵循任何重定向,以确保能够下载正确的数据。
从上面的解释可以看出,这个命令表示:安静地 (不显示进度),但如果发生错误就显示错误信息,从给定的 URL 下载数据,如果遇到重定向就自动跟随重定向。
如果 HTTP 请求失败,则不下载数据并立即退出。如果 URL 不存在或者其他任何原因导致 HTTP 请求失败,那么 curl 将退出,不会有任何数据传递给 shell,因此 shell 也不会执行任何操作。
这就避免了执行可能下载一半的脚本。这对于从网络上下载并执行脚本的操作来说是非常重要的安全措施。
-
|
是管道操作符,用于将前一个命令的输出传递给后一个命令。 -
|
后的部分使用 sudo 权限来执行 gpg 命令。gpg 是 GNU Privacy Guard,用于处理加密和数字签名等操作。--dearmor
: 是 gpg 命令的选项,告诉 GPG 将 ASCII 封装的密钥转换为二进制格式。-o
也是 gpg 命令的选项,它指定将解码后的 GPG 密钥保存到指定的文件路径/etc/apt/keyrings/docker.gpg
中。
最后,将文件的权限更改为允许所有用户都能读取,确保后续操作可以访问该密钥文件,在软件包验证过程中使用它:
1 |
|
chmod
: 用于修改文件或目录的权限。
a+r
: 是 chmod 命令的参数,指定了要修改的权限。a
代表所有用户,+r
表示增加读权限。
* 将 Docker 的仓库信息添加到 APT 源
创建一个包含 Docker 官方 APT 源信息的文本字符串,并将它写入指定文件,以便系统后续可以从该源下载和安装 Docker 软件包,同时使用正确的签名密钥进行验证:
1 |
|
echo
用于创建一个文本字符串,并将它发送到标准输出。文本内容如下:
1 |
|
其中:
-
deb
是 APT 源的声明,表示它是一个二进制软件包源。 -
[···]
方括号中的内容是 APT 源的元数据信息,由 2 部分组成:-
arch="$(dpkg --print-architecture)"
是一个内联命令,用于获取当前系统的架构 (amd64、i386 等)。 -
signed-by=/etc/apt/keyrings/docker.gpg
指定了使用前面创建的密钥文件中的 GPG 密钥进行签名验证。
-
-
https://download.docker.com/linux/ubuntu
是Docker 官方 APT 源的 URL。 -
"$(. /etc/os-release && echo "$VERSION_CODENAME")"
是一个内联命令,用于获取当前系统的 Ubuntu 版本代号:-
.
是一个在 Shell 脚本中常见的操作符,用于在当前 Shell 环境中执行指定的脚本文件。 -
/etc/os-release
是一个文件,通常包含有关操作系统的信息,包括版本信息、发行名称等。 -
&&
是逻辑 AND 操作符,它用于执行命令 1,如果命令 1 成功执行,即返回退出代码为 0,则继续执行命令 2。 -
echo "$VERSION_CODENAME"
是 Shell 中的 echo 命令,用于将环境变量 VERSION_CODENAME 的值输出到标准输出,里面通常包含了当前 Ubuntu 系统的版本代号,例如"Focal"或"Bionic"。
-
-
stable
指定 Docker 的发行版本为稳定版本。
|
为管道操作符,用于将前一个命令的输出传递给后一个命令。
tee
是一个命令,用于将标准输入的内容写入指定的文件,即 /etc/apt/sources.list.d/docker.list
,它是一个 APT 源的配置文件。
> /dev/null
: 表示将标准输出重定向到 /dev/null
,这样就不会在终端上显示输出。
最后生成的 /etc/apt/sources.list.d/docker.list
文件内容如下:
1 |
|
完成后需要更新一下,获取最新信息:
1 |
|
* 安装 Docker 最新版
1 |
|
- 安装方法二:使用脚本安装
官方不建议在生产环境中使用便捷脚本,但它对创建符合需求的配置脚本很有用。
在本地运行从互联网下载的脚本之前,请务必对其进行检查。安装前,请先熟悉脚本的潜在风险和限制。
1 |
|
如果使用便捷脚本安装了 Docker,应该直接使用软件包管理器升级 Docker。而不应该重新运行脚本。
如果试图重新安装主机上已经存在的软件源,重新运行脚本可能会导致问题。
▷ 测试
⚠ 一般情况下,Docker 守护进程会自动启动。
在基于 RPM 的发行版 (如 CentOS、Fedora、RHEL 或 SLES) 上,可能需要使用相应的 systemctl
或 service
命令手动启动它。
如果需要手动启用,可以执行以下命令:
1 |
|
本次安装过程中,无需手动启用。
(非 root 用户默认情况下无法运行 Docker 命令,推荐 添加用户至 Docker 用户组)
我们可以通过运行 hello-world 镜像来验证是否安装成功:
1 |
|
此命令将下载测试镜像并在容器中运行。容器运行后,它会打印一条确认信息并退出。
▷ 添加用户至 Docker 用户组
在某些 Linux 发行版上,系统会在使用软件包管理器安装 Docker Engine 时自动创建该组。在这种情况下,无需手动创建该组。
本次安装过程中,无需手动创建。
1 |
|
退出并重新登录,以便重新评估当前用户的组员资格。
或者直接运行以下命令激活对组的更改:
1 |
|
如果在将用户添加到 Docker 组之前,最初使用 sudo 运行 Docker CLI 命令,可能会出现以下错误:
1 |
|
这个错误说明 ~/.docker/
目录的权限设置不正确,原因是之前使用了 sudo 命令。
要解决这个问题,要么删除 ~/.docker/
目录 (它会自动重建,但任何自定义设置都会丢失),要么使用以下命令更改其所有权和权限:
1 |
|
chown
用于设置文件或目录的所有者或权限。
"$USER":"$USER"
表示将文件的所有者和组都设置为当前用户。
-R
表示递归更改目录中的所有文件和子目录的所有者。
g+rwx
用来设置权限,g
为组权限,r
为读取权限,w
为写入权限,x
为执行权限。
本次安装过程中,没有遇到此问题。
▷ 注册和启动服务
许多现代 Linux 发行版都使用 systemd
来管理系统启动时启动哪些服务。在 Debian 和 Ubuntu 上,Docker 服务默认在启动时启动。
要在其它 Linux 发行版启动时自动启动 docker 和 containerd,可以运行以下命令:
1 |
|
本次安装过程中,无需手动设置。
▷ 其它配置
Linux 中 Docker 镜像、容器等文件的默认保存路径在 /var/lib/docker/
中。一般来说无需更改。
▷ 更新方法
更新方法同 “方法一” 安装步骤,使用 APT 进行安装升级。
如果使用便捷脚本安装了 Docker,同样应该使用软件包管理器升级 Docker。重新运行便捷脚本没有任何好处。如果试图重新安装主机上已经存在的软件源,重新运行脚本可能会导致问题。
▷ 卸载方法
卸载 Docker Engine、CLI、containerd 和 Docker Compose 软件包:
1 |
|
purge
表示卸载软件包并删除其配置文件。
但是主机上的镜像、容器、卷或自定义配置文件不会自动删除。
要删除所有镜像、容器和卷,可以执行以下操作:
1 |
|
同时需要手动删除任何已编辑的配置文件。
◇ 命令相关
▷ APT 包管理器相关
1 |
|
▷ 系统版本相关
1 |
|
▷ 其它
其它 Linux 通用命令参见:链接
◇ 参考内容
- Ubuntu 22.04 升级教程:从 Ubuntu 20.04 升级到 Ubuntu 22.04 方法. https://www.bandwagonhost.net/12638.html
- 【新手指南】阿里云轻量应用云服务器从购买到使用 |开源周末 Open Source Weekend. https://youtu.be/W5ljAuqxTP8
- Install Docker Engine on Ubuntu. https://docs.docker.com/engine/install/ubuntu/
- Linux post-installation steps for Docker Engine. https://docs.docker.com/engine/install/linux-postinstall/
- SSH connection problem with “Host key verification failed…” error. https://askubuntu.com/questions/45679/ssh-connection-problem-with-host-key-verification-failed-error
- 如何清除 APT 缓存来回收宝贵的磁盘空间. https://linux.cn/article-12787-1.html
- 举例子说明ubuntu中remove,autoremove,purge区别. https://www.cnblogs.com/gdut-gordon/p/12054960.html
- ubuntu默认root密码. https://developer.aliyun.com/article/518069
- 保护好你的小鸡!保姆级服务器安全教程!. https://blog.laoda.de/archives/how-to-secure-a-linux-server/