标签 更新 下的文章

对于 Linux 管理员来说重要的任务之一是让系统保持最新状态,这可以使得你的系统更加稳健并且可以避免不想要的访问与攻击。

在 Linux 上安装软件包是小菜一碟,用相似的方法我们也可以更新安全补丁。

这是一个向你展示如何配置系统接收自动安全更新的简单教程。当你运行自动安全包更新而不经审查会给你带来一定风险,但是也有一些好处。

如果你不想错过安全补丁,且想要与最新的安全补丁保持同步,那你应该借助无人值守更新机制设置自动安全更新。

如果你不想要自动安全更新的话,你可以在 Debian/Ubuntu 系统上手动安装安全更新

我们有许多可以自动化更新的办法,然而我们将先采用官方的方法之后我们会介绍其它方法。

如何在 Debian/Ubuntu 上安装无人值守更新包

无人值守更新包默认应该已经装在你的系统上。但万一它没被安装,就用下面的命令来安装。

使用 APT-GET 命令APT 命令来安装 unattended-upgrades 软件包。

$ sudo apt-get install unattended-upgrades

下方两个文件可以使你自定义该机制:

/etc/apt/apt.conf.d/50unattended-upgrades
/etc/apt/apt.conf.d/20auto-upgrades

在 50unattended-upgrades 文件中做出必要修改

默认情况下只有安全更新需要的最必要的选项被启用。但并不限于此,你可以配置其中的许多选项以使得这个机制更加有用。

我修改了一下文件并仅加上被启用的行以方便阐述:

# vi /etc/apt/apt.conf.d/50unattended-upgrades

Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}";
        "${distro_id}:${distro_codename}-security";
        "${distro_id}ESM:${distro_codename}";
        };
Unattended-Upgrade::DevRelease "false";

有三个源被启用,细节如下:

  • ${distro_id}:${distro_codename}:这是必须的,因为安全更新可能会从非安全来源拉取依赖。
  • ${distro_id}:${distro_codename}-security:这用来从来源得到安全更新。
  • ${distro_id}ESM:${distro_codename}:这是用来从 ESM(扩展安全维护)获得安全更新。

启用邮件通知: 如果你想要在每次安全更新后收到邮件通知,那么就修改以下行段(取消其注释并加上你的 email 账号)。

从:

//Unattended-Upgrade::Mail "root";

修改为:

Unattended-Upgrade::Mail "[email protected]";

自动移除不用的依赖: 你可能需要在每次更新后运行 sudo apt autoremove 命令来从系统中移除不用的依赖。

我们可以通过修改以下行来自动化这项任务(取消注释并将 false 改成 true)。

从:

//Unattended-Upgrade::Remove-Unused-Dependencies "false";

修改为:

Unattended-Upgrade::Remove-Unused-Dependencies "true";

启用自动重启: 你可能需要在安全更新安装至内核后重启你的系统。你可以在以下行做出修改:

从:

//Unattended-Upgrade::Automatic-Reboot "false";

到:取消注释并将 false 改成 true以启用自动重启。

Unattended-Upgrade::Automatic-Reboot "true";

启用特定时段的自动重启: 如果自动重启已启用,且你想要在特定时段进行重启,那么做出以下修改。

从:

//Unattended-Upgrade::Automatic-Reboot-Time "02:00";

到:取消注释并将时间改成你需要的时间。我将重启设置在早上 5 点。

Unattended-Upgrade::Automatic-Reboot-Time "05:00";

如何启用自动化安全更新?

现在我们已经配置好了必须的选项,一旦配置好,打开以下文件并确认是否这两个值都已设置好?值不应为0。(1=启用,0=禁止)。

# vi /etc/apt/apt.conf.d/20auto-upgrades

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

详情:

  • 第一行使 apt 每天自动运行 apt-get update
  • 第一行使 apt 每天自动安装安全更新。

via: https://www.2daygeek.com/automatic-security-update-unattended-upgrades-ubuntu-debian/

作者:Magesh Maruthamuthu 选题:lujun9972 译者:tomjlw 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

这篇教程将向你展示如何更新服务器版本或者桌面版本的 Ubuntu。它还解释了更新和升级之间的区别以及你应该了解的有关于 Ubuntu Linux 中的更新的一些其他内容。

如果你是一个新手并已经体验 Ubuntu 数天或几周,你可能想知道如何更新你的 Ubuntu 系统以获取安全补丁,错误修复和应用升级。

更新 Ubuntu 非常简单。我并不是瞎说。它简单得只要运行两个命令。让我来告诉你这两个命令的更多细节。

请注意,本教程适用于 Ubuntu 18.04、16.04 或任何其他版本。命令行方式也适用于基于 Ubuntu 的发行版如 Linux Mint、Linux Lite、elementary OS 等。

通过命令行更新 Ubuntu

如何更新 Ubuntu

在桌面上,打开终端。你可以在菜单里找到它或者使用 Ctrl+Alt+T 快捷键。如果你是登录到一台 Ubuntu 服务器,那你已经在访问一个终端了。

在终端里,你只需要使用以下命令:

sudo apt update && sudo apt upgrade -y

它将询问你密码,而你可以使用你的账号密码。输入时,你将不会看到任何内容在屏幕上,所以请继续输入你的密码并按回车键。

现在,我来解释下上面的命令。

事实上,这不是一条命令。它由两条命令组成。符号 && 是合并两条命令的一个方法,第二条命令仅在前一条命令执行成功时执行。

当命令 apt upgrade 要求你在安装更新前确认时,末尾的参数 -y 会自动输入 yes

请注意,你也可以逐条使用这两条命令:

sudo apt update
sudo apt upgrade

这将花费更长的时间,因为你必须等待第一条命令执行完成后才能输入第二条命令。

说明:sudo apt update

这条命令更新了可用软件包的本地数据库。如果你没运行这条命令,本地数据库将不会被更新,而你的系统将不会知道是否有可用的新版本。

这就是为什么当你运行 sudo apt update,你会在输出中看到大量的 URL。这条命令会从对应的储存库(你在输出中看到的 URL)中获取软件包信息。

更新 Ubuntu Linux

在命令的末尾,它告诉你有多少个软件包可以被更新。你可以使用下列命令查看这些软件包:

apt list --upgradable

补充阅读: 阅读这篇文章了解命令 apt update 的输出中的 Ign、Hit 和 Get 是什么

说明:sudo apt upgrade

这条命令将已安装的软件包版本与本地数据库进行匹配。它收集全部信息,然后列出所有具有更新版本的软件包。此时,它会询问您是否要升级(已安装的软件包更新到新版本)。

通过命令行更新 Ubuntu Linux

你可以键入 yesy 或者只敲回车键去确认安装这些更新。

所以总的来说,sudo apt update 会检查可用的新版本,而 sudo apt upgrade 实际上会执行更新。

命令 update 可能会令人困惑,因为你可能期望通过命令 apt update 安装更新来更新系统,但这并不会发生。

通过 GUI 更新 Ubuntu(适用于桌面用户)

如果你使用桌面版 Ubuntu,你并不需要为了更新系统而打开终端。你可以仍可以使用命令行更新,但这只是一个选择。

在菜单里,找到 “软件更新” 并运行它。

在 Ubuntu 中运行 Software Updater

它将检查你的系统是否有可用的更新。

检查 Ubuntu 是否有可用更新

如果有可用的更新,它将给你提供安装更新的选择。

在 Ubuntu 中通过更新管理器安装更新

现在,点击 “安装”,它可能会向你询问密码。

通过 GUI 在 Ubuntu Linux 中安装更新

一旦你输入你的密码,它将开始安装更新。

通过 GUI 更新 Ubuntu

在某些情况下,你可能需要重启系统才能使已安装的更新正常工作。如果需要重启系统,你将在更新结束时收到通知。

通过 GUI 更新 Ubuntu

如果你不希望马上重启你的系统,可以选择稍后重启。

通过 GUI 在 Ubuntu 中安装更新

提示:如果“软件更新”返回一个错误,你需要在终端是使用命令 sudo apt update。输出的最后几行将包含真正的错误信息。你可以在因特网上搜索该错误并解决问题。

更新 Ubuntu 时要记住几件事

你刚学习了如何更新你的 Ubuntu 系统。如果你感兴趣,你还需要了解一些关于 Ubuntu 更新的内容。

更新后清理

你的系统将会有一些更新后不再需要的软件包。你可用使用这条命令删除这些软件包并释放空间

sudo apt autoremove

在 Ubuntu Server 中内核热修复以避免重启

如果是 Linux 内核更新,你将需要在系统更新后重启。当你不希望服务器停机时,这将会是一个问题。

热修复功能允许 Linux 内核在持续运行时打补丁。换句话说就是你不需要重启你的系统。

如果你在管理服务器,你可能需要在 Ubuntu 中启用热修复

版本升级是不同的

本文讨论的更新是使你安装的 Ubuntu 保持最新。但它不包括版本升级(例如从 Ubuntu 16.04 升级到 18.04)。

Ubuntu 版本 升级完全是另一回事。它更新整个操作系统核心。你需要在这个漫长的过程开始前做好备份。

总结

我希望你喜欢这个关于 Ubuntu 系统更新的教程并学到一些新东西。

如果你有其他问题,请随时提出。如果你是一位经验丰富的 Linux 用户并且有些更好的技巧,请同我们分享。


via: https://itsfoss.com/update-ubuntu/

作者:Abhishek Prakash 选题:lujun9972 译者:LazyWolfLin 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

自我更新 Arch Linux 桌面以来已经有一个月了。今天我试着更新我的 Arch Linux 系统,然后遇到一个错误 “error:failed to commit transaction (conflicting files) stfl:/usr/lib/libstfl.so.0 exists in filesystem”。看起来是 pacman 无法更新一个已经存在于文件系统上的库 (/usr/lib/libstfl.so.0)。如果你也遇到了同样的问题,下面是一个快速解决方案。

解决 Arch Linux 中出现的 “error:failed to commit transaction (conflicting files)”

有三种方法。

1。简单在升级时忽略导致问题的 stfl 库并尝试再次更新系统。请参阅此指南以了解 如何在更新时忽略软件包

2。使用命令覆盖这个包:

$ sudo pacman -Syu --overwrite /usr/lib/libstfl.so.0

3。手工删掉 stfl 库然后再次升级系统。请确保目标包不被其他任何重要的包所依赖。可以通过去 archlinux.org 查看是否有这种冲突。

$ sudo rm /usr/lib/libstfl.so.0

现在,尝试更新系统:

$ sudo pacman -Syu

我选择第三种方法,直接删除该文件然后升级 Arch Linux 系统。很有效!

希望本文对你有所帮助。还有更多好东西。敬请期待!

干杯!


via: https://www.ostechnix.com/how-to-solve-error-failed-to-commit-transaction-conflicting-files-in-arch-linux/

作者:SK 选题:lujun9972 译者:lujun9972 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

yum 命令是 RHEL / CentOS Linux 系统中用来安装和更新软件包的一个工具。我知道如何使用 yum 命令行 更新系统,但是我想用 cron 任务自动更新软件包。该如何配置才能使得 yum 使用 cron 自动更新系统补丁或更新呢?

首先需要安装 yum-cron 软件包。该软件包提供以 cron 命令运行 yum 更新所需的文件。如果你想要每晚通过 cron 自动更新可以安装这个软件包。

CentOS/RHEL 6.x/7.x 上安装 yum cron

输入以下 yum 命令:

$ sudo yum install yum-cron

使用 CentOS/RHEL 7.x 上的 systemctl 启动服务:

$ sudo systemctl enable yum-cron.service 
$ sudo systemctl start yum-cron.service 
$ sudo systemctl status yum-cron.service

在 CentOS/RHEL 6.x 系统中,运行:

$ sudo chkconfig yum-cron on 
$ sudo service yum-cron start

yum-cronyum 的一个替代方式。使得 cron 调用 yum 变得非常方便。该软件提供了元数据更新、更新检查、下载和安装等功能。yum-cron 的各种功能可以使用配置文件配置,而不是输入一堆复杂的命令行参数。

配置 yum-cron 自动更新 RHEL/CentOS Linux

使用 vi 等编辑器编辑文件 /etc/yum/yum-cron.conf/etc/yum/yum-cron-hourly.conf

$ sudo vi /etc/yum/yum-cron.conf

确保更新可用时自动更新:

apply_updates = yes

可以设置通知 email 的发件地址。注意: localhost将会被system\_name` 的值代替。

email_from = root@localhost

列出发送到的 email 地址。

email_to = your-it-support@some-domain-name

发送 email 信息的主机名。

email_host = localhost

CentOS/RHEL 7.x 上不想更新内核的话,添加以下内容:

exclude=kernel*

RHEL/CentOS 6.x 下添加以下内容来禁用内核更新

YUM_PARAMETER=kernel*

保存并关闭文件。如果想每小时更新系统的话修改文件 /etc/yum/yum-cron-hourly.conf,否则文件 /etc/yum/yum-cron.conf 将使用以下命令每天运行一次(使用 cat 命令 查看):

$ cat /etc/cron.daily/0yum-daily.cron

示例输出:

#!/bin/bash

# Only run if this flag is set. The flag is created by the yum-cron init
# script when the service is started -- this allows one to use chkconfig and
# the standard "service stop|start" commands to enable or disable yum-cron.
if [[ ! -f /var/lock/subsys/yum-cron ]]; then
 exit 0
fi

# Action!
exec /usr/sbin/yum-cron /etc/yum/yum-cron-hourly.conf
[root@centos7-box yum]# cat /etc/cron.daily/0yum-daily.cron
#!/bin/bash

# Only run if this flag is set. The flag is created by the yum-cron init
# script when the service is started -- this allows one to use chkconfig and
# the standard "service stop|start" commands to enable or disable yum-cron.
if [[ ! -f /var/lock/subsys/yum-cron ]]; then
 exit 0
fi

# Action!
exec /usr/sbin/yum-cron

完成配置。现在你的系统将每天自动更新一次。更多细节请参照 yum-cron 的说明手册。

$ man yum-cron

关于作者

作者是 nixCraft 的创始人,一个经验丰富的系统管理员和 Linux/Unix 脚本培训师。他曾与全球客户合作,领域涉及IT,教育,国防和空间研究以及非营利部门等多个行业。请在 TwitterFacebookGoogle+ 上关注他。获取更多有关系统管理、Linux/Unix 和开源话题请关注我的 RSS/XML 地址


via: https://www.cyberciti.biz/faq/fedora-automatic-update-retrieval-installation-with-cron/

作者:Vivek Gite 译者:shipsw 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

 title=

Konstantin Ryabitsev 为你讲解哪个 Linux 内核版本可以被视作“稳定版”,以及你应该如何选择一个适用你的内核版本。

每次 Linus Torvalds 发布 一个新 Linux 内核的主线版本,几乎都会引起这种困惑,那就是到底哪个内核版本才是最新的“稳定版”?是新的那个 X.Y,还是前面的那个 X.Y-1.Z ?最新的内核版本是不是太“新”了?你是不是应该坚持使用以前的版本?

kernel.org 网页上的信息并不会帮你解开这个困惑。目前,在该页面的最顶部,我们看到是最新稳定版内核是 4.15 — 但是在这个表格的下面,4.14.16 也被列为“ 稳定版 stable ”,而 4.15 被列为“ 主线版本 mainline ”,很困惑,是吧?

不幸的是,这个问题并不好回答。我们在这里使用“稳定”这个词有两个不同的意思:一是,作为最初发布的 Git 树的名字,二是,表示这个内核可以被视作“稳定版”,用在“生产系统”。

由于 Git 的分布式特性,Linux 的开发工作在许多 不同的分叉仓库中 进行。所有的 bug 修复和新特性也是首先由各个子系统维护者收集和准备的,然后提交给 Linus Torvalds,由 Linus Torvalds 包含进 他自己的 Linux 树 中,他的 Git 树被认为是 Git 仓库的 “master”。我们称这个树为 “主线” Linux 树。

候选发布版(RC)

在每个新的内核版本发布之前,它都要经过几轮的“候选发布”,它由开发者进行测试并“打磨”所有的这些很酷的新特性。基于他们这几轮测试的反馈,Linus 决定最终版本是否已经准备就绪。通常有 7 个每周预发布版本,但是,这个数字经常走到 -rc8,并且有时候甚至达到 -rc9 及以上。当 Linus 确信那个新内核已经没有问题了,他就制作最终发行版,我们称这个版本为“稳定版”,表示它不再是一个“候选发布版”。

Bug 修复

就像任何一个由不是十全十美的人所写的复杂软件一样,任何一个 Linux 内核的新版本都包含 bug,并且这些 bug 必须被修复。Linux 内核的 bug 修复规则非常简单:所有修复必须首先进入到 Linus 的树。一旦主线仓库中的 bug 被修复后,它接着会被应用到内核开发社区仍在维护的已发布内核中。在它们被考虑回迁到已发布的稳定版本之前,所有的 bug 修复必须满足 一套重要的标准 — 标准的其中之一是,它们 “必须已经存在于 Linus 的树中”。这是一个 独立的 Git 仓库,维护它的用途是回迁 bug 修复,而它也被称为“稳定”树 —— 因为它用于跟踪以前发布的稳定内核。这个树由 Greg Kroah-Hartman 策划和维护。

最新的稳定内核

因此,无论在什么时候,为了查看最新的稳定内核而访问 kernel.org 网站时,你应该去使用那个在大黄色按钮所说的“最新的稳定内核”。

但是,你可能会惊奇地发现 —— 4.15 和 4.14.16 都是稳定版本,那么到底哪一个更“稳定”呢?有些人不愿意使用 “.0” 的内核发行版,因为他们认为这个版本并不足够“稳定”,直到最新的是 ".1" 的为止。很难证明或者反驳这种观点的对与错,并且这两种观点都有赞成或者反对的理由,因此,具体选择哪一个取决于你的喜好。

一方面,任何一个进入到稳定树的发行版都必须首先被接受进入主线内核版本中,并且随后会被回迁到已发行版本中。这意味着内核的主线版本相比稳定树中的发行版本来说,总包含有最新的 bug 修复,因此,如果你想使用的发行版包含的“已知 bug”最少,那么使用 “.0” 的主线发行版是最佳选择。

另一方面,主线版本增加了所有很酷的新特性 —— 而新特性也给它们带来了数量未知的“新 bug”,而这些“新 bug”在老的稳定版中是不会存在的。而新的、未知的 bug 是否比旧的、已知的但尚未修复的 bug 更加令人担心呢? —— 这取决于你的选择。不过需要说明的一点是,许多 bug 修复只对内核的主线版本进行了彻底的测试。当补丁回迁到旧内核时,它们可能会工作的很好,但是它们很少做与旧内核的集成测试工作。通常都假定,“以前的稳定版本”足够接近当前的确信可用于生产系统的主线版本。而实际上也确实是这样的,当然,这也更加说明了为什么选择“哪个内核版本更稳定”是件非常困难的事情了。

因此,从根本上说,我们并没有定量的或者定性的手段去明确的告诉你哪个内核版本更加稳定 —— 4.15 还是 4.14.16?我们能够做到的只是告诉你,它们具有“不同的稳定性”,(这个答案可能没有帮到你,但是,至少你明白了这些版本的差别是什么?)。

学习更多的 Linux 的知识,可以通过来自 Linux 基金会和 edX 的免费课程 "认识 Linux"


via: https://www.linux.com/blog/learn/2018/2/which-linux-kernel-version-stable

作者:KONSTANTIN RYABITSEV 译者:qhwdw 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

不久之前我已经向你展示了如何在任意离线的 UbuntuArch Linux 操作系统上安装软件。 今天,我们将会看看如何完整地离线更新并升级基于 Debian 的操作系统。 和之前所述方法的不同之处在于,这次我们将会升级整个操作系统,而不是单个的软件包。这个方法在你没有网络链接或拥有的网络速度很慢的时候十分有用。

完整地离线更新并升级基于 Debian 的操作系统

首先假设,你在单位拥有正在运行并配置有高速互联网链接的系统(Windows 或者 Linux),而在家有一个没有网络链接或网络很慢(例如拨号网络)的 Debian 或其衍生的操作系统。现在如果你想要离线更新你家里的操作系统怎么办?购买一个更加高速的网络链接?不,根本不需要!你仍然可以通过互联网离线更新升级你的操作系统。这正是 Apt-Offline工具可以帮助你做到的。

正如其名,apt-offline 是一个为 Debian 及其衍生发行版(诸如 Ubuntu、Linux Mint 这样基于 APT 的操作系统)提供的离线 APT 包管理器。使用 apt-offline,我们可以完整地更新/升级我们的 Debian 系统而不需要网络链接。这个程序是由 Python 编程语言写成的兼具 CLI 和图形界面的跨平台工具。

准备工作

  • 一个已经联网的操作系统(Windows 或者 Linux)。在这份指南中,为了便于理解,我们将之称为在线操作系统。
  • 一个离线操作系统(Debian 及其衍生版本)。我们称之为离线操作系统。
  • 有足够空间容纳所有更新包的 USB 驱动器或者外接硬盘。

安装

Apt-Offline 可以在 Debian 及其衍生版本的默认仓库中获得。如果你的在线操作系统是运行的 Debian、Ubuntu、Linux Mint,及其它基于 DEB 的操作系统,你可以通过下面的命令安装 Apt-Offline:

sudo apt-get install apt-offline

如果你的在线操作系统运行的是非 Debian 类的发行版,使用 git clone 获取 Apt-Offline 仓库:

git clone https://github.com/rickysarraf/apt-offline.git

切换到克隆的目录下并在此处运行:

cd apt-offline/
sudo ./apt-offline

在离线操作系统(没有联网的操作系统)上的步骤

到你的离线操作系统上创建一个你想存储签名文件的目录:

mkdir ~/tmp
cd ~/tmp/

你可以自己选择使用任何目录。接下来,运行下面的命令生成签名文件:

sudo apt-offline set apt-offline.sig

示例输出如下:

Generating database of files that are needed for an update.
Generating database of file that are needed for operation upgrade

默认条件下,apt-offline 将会生成需要更新和升级的相关文件的数据库。你可以使用 --update 或者 --upgrade 选项相应创建。

拷贝完整的 tmp 目录到你的 USB 驱动器或者或者外接硬盘上,然后换到你的在线操作系统(有网络链接的操作系统)。

在在线操作系统上的步骤

插入你的 USB 驱动器然后进入 tmp 文件夹:

cd tmp/

然后,运行如下命令:

sudo apt-offline get apt-offline.sig --threads 5 --bundle apt-offline-bundle.zip

在这里的 -threads 5 代表着(并发连接的) APT 仓库的数目。如果你想要从更多的仓库下载软件包,你可以增加这里的数值。然后 -bundle apt-offline-bundle.zip 选项表示所有的软件包将会打包到一个叫做 apt-offline-bundle.zip 的单独存档中。这个存档文件将会被保存在你的当前工作目录中(LCTT 译注:即 tmp 目录)。

上面的命令将会按照之前在离线操作系统上生成的签名文件下载数据。

根据你的网络状况,这个操作将会花费几分钟左右的时间。请记住,apt-offline 是跨平台的,所以你可以在任何操作系统上使用它下载包。

一旦下载完成,拷贝 tmp 文件夹到你的 USB 或者外接硬盘上并且返回你的离线操作系统(LCTT 译注:此处的复制操作似不必要,因为我们一直在 USB 存储器的 tmp 目录中操作)。千万保证你的 USB 驱动器上有足够的空闲空间存储所有的下载文件,因为所有的包都放在 tmp 文件夹里了。

离线操作系统上的步骤

把你的设备插入你的离线操作系统,然后切换到你之前下载了所有包的 tmp目录下。

cd tmp

然后,运行下面的命令来安装所有下载好的包。

sudo apt-offline install apt-offline-bundle.zip

这个命令将会更新 APT 数据库,所以 APT 将会在 APT 缓冲里找所有需要的包。

注意事项: 如果在线和离线操作系统都在同一个局域网中,你可以通过 scp 或者其他传输应用程序将 tmp 文件传到离线操作系统中。如果两个操作系统在不同的位置(LCTT 译注:意指在不同的局域网),那就使用 USB 设备来拷贝。

好了大伙儿,现在就这么多了。 希望这篇指南对你有用。还有更多好东西正在路上。敬请关注!

祝你愉快!


via: https://www.ostechnix.com/fully-update-upgrade-offline-debian-based-systems/

作者:SK 译者:leemeans 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出