mirror of
https://github.com/LCTT/TranslateProject.git
synced 2024-12-29 21:41:00 +08:00
commit
e5cd6d87ed
162
published/20210718 Is Open-Source Software Secure.md
Normal file
162
published/20210718 Is Open-Source Software Secure.md
Normal file
@ -0,0 +1,162 @@
|
||||
[#]: subject: (Is Open-Source Software Secure?)
|
||||
[#]: via: (https://news.itsfoss.com/open-source-software-security/)
|
||||
[#]: author: (Ankush Das https://news.itsfoss.com/author/ankush/)
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (CanYellow)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-15423-1.html)
|
||||
|
||||
开源软件安全吗?
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
作为一个偏爱 [在桌面电脑上使用 Linux][1],并鼓励使用开源软件的人,你可能期待就标题中提出的问题得到一个响亮的**肯定**回答。
|
||||
|
||||
然而,我并不打算仅限于讨论开源软件的优点。让我们一起探索更多观点!
|
||||
|
||||
在本文,我计划分享我关于开源软件是否安全的思考,以及哪些事情与开源软件的安全性相关。
|
||||
|
||||
### 为什么你需要关注开源软件是否安全?
|
||||
|
||||
不论你是使用 [Linux][2] 系统还是使用其他类型的操作系统,你都会在某种程度上(直接地/间接地)被开源软件所包围。
|
||||
|
||||
举个例子,大多数专有软件工具依赖于某种形式的开源库来保证其正常工作。
|
||||
|
||||
此外,各种规模的公司(包括谷歌、微软和 Facebook)依赖开源软件或者以某种途径向开源社区贡献资源是有原因的。
|
||||
|
||||
因此,开源软件的安全性是有必要了解的。
|
||||
|
||||
### 有关开源软件安全性的迷思
|
||||
|
||||
![][3]
|
||||
|
||||
虽然有多种理由证明开源软件在安全性方面的缺陷,然而其中一些实际毫无意义。
|
||||
|
||||
#### 任何人都可以查看并恶意利用开源软件代码
|
||||
|
||||
是的,开源软件代码对于任何人都是可访问的。但是你可以查看代码并不意味着你可以利用它。
|
||||
|
||||
**不现实。**
|
||||
|
||||
即使任何人都可以复刻(或者拷贝)该软件,原始软件也不能轻易地被修改使用。
|
||||
|
||||
通常,项目维护人员(或者维护团队)管理代码仓库,并且接受来自贡献者的提交。开源软件代码在接受之前会被审查。没有人可以就这样劫持代码。
|
||||
|
||||
**不论是开源软件还是闭源软件,攻击者都需要付出努力来利用软件中的代码漏洞或者添加恶意代码。**
|
||||
|
||||
#### 没有专职团队,安全性无从谈起
|
||||
|
||||
很多人相信如果开源软件没有专职人员或者专职团队,维护软件安全性是困难的。
|
||||
|
||||
恰恰相反,由于各种各样类型的贡献者的加入与离开,开源软件获得了来自更大范围的开发者的更多关注。
|
||||
|
||||
他们可能比由专有软件所聘用的少数开发者更能够发现安全问题。
|
||||
|
||||
一些来自 Mozilla 等同类公司的项目拥有自己的专职团队来高效处理安全问题。同样的,大部分成功的开源项目拥有大量的资源用于保障安全性。
|
||||
|
||||
因此,开源软件的生态系统是安全性的组合包。即使没有专职团队,开源项目也可以得到来自各类贡献者的帮助,他们中的一些很大程度上是有利可图的,这有助于他们投入更多的精力。
|
||||
|
||||
### 开源软件是安全的,以下是原因
|
||||
|
||||
![][5]
|
||||
|
||||
既然我们已经澄清了这些有关开源软件安全性的迷思,让我重点展示一下开源软件是如何处理安全问题的。
|
||||
|
||||
换句话说,开源软件在安全性上的优势。
|
||||
|
||||
请不要忘记,开源软件的优势也是 [Linux 比 Windows 更好][4] 的一些原因。
|
||||
|
||||
#### 更多的眼晴关注开源软件代码
|
||||
|
||||
不像专有软件,(对开源软件的)代码访问并不局限于少数几个开发者。
|
||||
|
||||
一些开源项目甚至可能拥有数以万记的开发者可以查看代码、审查它们并标记和修复其中的安全性问题。
|
||||
|
||||
相比闭源软件,这给予了开源项目拥有**快速识别问题并尽快修复它们的能力**的优势。
|
||||
|
||||
不仅仅限于拥有更多的开发者,企业通常也会参与他们所使用的开源项目。当他们这样做的时候,他们也会查阅代码并审查它们。
|
||||
|
||||
这提供了另一条外部审查的途径,而这可能有助于提升开源软件的安全性。
|
||||
|
||||
反之,就闭源软件而言,数量有限的开发者可能并不能找出所有种类的安全问题。而且他们可能需要花费更长的时间来一一修复发现的问题。
|
||||
|
||||
#### 社区决定安全问题的优先级
|
||||
|
||||
闭源软件的开发者可能在处理什么问题和什么时候解决问题等方面有某些限制或者优先等级。
|
||||
|
||||
而如果是开源项目,贡献者社区可以自行决定优先级,并自行安排他们想解决的问题以及决定合适修复问题。你不需要依赖于供应商的决定或者按照他们的指示来解决一个安全问题。
|
||||
|
||||
着手处理和修复安全问题的决策在开源软件项目中更加透明和灵活。因此,它可以被证明是更有效的,并为你带来以下三个益处:
|
||||
|
||||
* 透明度
|
||||
* 不依赖供应商
|
||||
* 更快的安全更新
|
||||
|
||||
### 开源软件不是防弹的,以下是原因
|
||||
|
||||
![][6]
|
||||
|
||||
虽然在某些情况下,开源软件可能在安全性上具有优势,然而仍有一些因素影响它。
|
||||
|
||||
承认这些问题的存在是很重要的,据此,企业或者个人可以就开源软件的安全情况做出更好的决定。
|
||||
|
||||
#### 并无足够的眼睛来审查代码和不确定性
|
||||
|
||||
即使开源软件代码可以被全世界的开发者自由访问,**项目没有足够的贡献者/开发者彻底审查开源代码**的可能性仍然存在。
|
||||
|
||||
既如此,我们不能对开源软件的同行审查抱有极高的信心,因为它恰好缺失了这一点。
|
||||
|
||||
开源软件可能“声称”拥有最高的安全性因为它们是开源的。在没有足够的开发者致力于该项目时,这是一种误导。
|
||||
|
||||
同样,我们也无从得知有多少开发者在查看/检查代码,也不知道代码的检查进行到什么程度了。
|
||||
|
||||
举例而言,<ruby>[心脏出血漏洞][T1]<rt>Heartbleed</rt></ruby> 是在一个被广泛使用的项目(OpenSSL)中引入了 2 年以后才被发现的。
|
||||
|
||||
#### 软件责任与问责
|
||||
|
||||
对于个人用户这可能并不重要,但是**开源项目通常并无任何保证**。
|
||||
|
||||
因此,如果一家公司使用它,它们必须自行承担任何由该软件使用造成的数据丢失与损坏。
|
||||
|
||||
这告诉你,没有什么是 100% 安全和没有漏洞的。无论有多少眼睛聚焦在代码上或者贡献者的技术多么精湛,总会存在某种形式的风险,无论是安全风险还是数据丢失。
|
||||
|
||||
这告诉我们一个现实:开源软件并非防弹的。
|
||||
|
||||
### 开源软件有其更高安全性的优势,但是...
|
||||
|
||||
就安全性而言没有什么优胜者。不论是闭源还是开源,当涉及安全问题时都适用同一套原则。
|
||||
|
||||
有很多外部因素可以影响软件安全性,而**其中很多因素并不依赖于源代码**。
|
||||
|
||||
必须以某种形式监控代码,以保证安全。
|
||||
|
||||
是的,**开源道路提供了闭源软件所不具备的优势**,但是这并不意味着开源软件是防弹的。
|
||||
|
||||
_你对开源软件安全状况有何思考?你又是否认为开源软件比专有软件解决方案更好呢?_
|
||||
|
||||
提前感谢你在下面的评论中提出的宝贵意见。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/open-source-software-security/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[CanYellow](https://github.com/CanYellow)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/linux-foundation-linux-desktop/
|
||||
[2]: https://itsfoss.com/what-is-linux-distribution/
|
||||
[3]: https://news.itsfoss.com/content/images/wordpress/2021/07/hacker-exploit-illustration.png
|
||||
[4]: https://itsfoss.com/linux-better-than-windows/
|
||||
[5]: https://news.itsfoss.com/content/images/wordpress/2021/07/open-source-security-illustration.png
|
||||
[6]: https://news.itsfoss.com/content/images/wordpress/2021/07/open-source-security-issue.jpg
|
||||
|
||||
[T1]: https://www.cve.org/CVERecord?id=CVE-2014-0160
|
||||
[0]: https://news.itsfoss.com/content/images/size/w2000/wordpress/2021/07/open-source-security.jpg
|
@ -0,0 +1,242 @@
|
||||
[#]: subject: (Complete Guide to Configuring SSH in Ubuntu)
|
||||
[#]: via: (https://itsfoss.com/set-up-ssh-ubuntu/)
|
||||
[#]: author: (Chris Patrick Carias Stas https://itsfoss.com/author/chris/)
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (Donkey-Hao)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-15175-1.html)
|
||||
|
||||
在 Ubuntu 中配置 SSH 的完整指南
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202210/25/102118u33grazpccrvxwdf.jpg)
|
||||
|
||||
> 如今 SSH 已成为了登录远程服务器的默认方式。
|
||||
|
||||
SSH 的全称是 “<ruby>安全的 Shell<rt>Secure Shell</rt></ruby>”,它功能强大、效率高,这个主流的网络协议用于在两个远程终端之间建立连接。让我们不要忘记它名称的“安全”部分,SSH 会加密所有的通信流量,以防止如劫持、窃听等攻击,同时提供不同的身份认证方式和无数个配置选项。
|
||||
|
||||
在这份新手指南中,你会学到:
|
||||
|
||||
- SSH 的基本概念
|
||||
- 设置 SSH 服务器(在你想要远程登录的系统上)
|
||||
- 从客户端(你的电脑)通过 SSH 连接远程服务器
|
||||
|
||||
### SSH 的基本概念
|
||||
|
||||
在学习配置过程前,让我们先了解一下 SSH 的全部基础概念。
|
||||
|
||||
SSH 协议基于<ruby>客户端-服务器<rt>server-client</rt></ruby>(CS)架构。“<ruby>服务器<rt>Server</rt></ruby>”允许“<ruby>客户端<rt>Client</rt></ruby>”通过通信通道进行连接。该信道是经过加密的,信息交换通过 SSH 公私钥进行管理。
|
||||
|
||||
![Image credit: SSH][1]
|
||||
|
||||
[OpenSSH][2] 是在 Linux、BSD 和 Windows 系统上提供 SSH 功能的最流行的开源工具之一。
|
||||
|
||||
想要成功配置 SSH,你需要:
|
||||
|
||||
- 在作为服务器的机器上部署 SSH 服务器组件,它由 `openssh-server` 包提供。
|
||||
- 在你远程访问服务器的客户端机器上部署 SSH 客户端组件,它由 `openssh-client` 包提供,大多数 Linux 和 BSD 发行版都已经预装好了。
|
||||
|
||||
区分服务器和客户端是十分重要的事情。或许你不想要你的 PC 作为 SSH 服务器,除非你有充分理由希望其他人通过 SSH 连接你的系统。
|
||||
|
||||
通常来说,你有一个专用的服务器系统。例如,一个 [运行 Ubuntu 的树莓派][3]。你可以 [启用树莓派的 SSH 服务][4],这样你可以在你 PC 中的终端中,通过 SSH 控制并管理该设备。
|
||||
|
||||
有了这些信息,让我们看看如何在 Ubuntu 上设置 SSH 服务器。
|
||||
|
||||
### 在 Ubuntu 服务器中配置 SSH
|
||||
|
||||
设置 SSH 并不复杂,只需要以下几步。
|
||||
|
||||
#### 前提
|
||||
|
||||
- 一个在服务器端拥有 `sudo` 权限的用户
|
||||
- 可以下载所需包的互联网连接
|
||||
- 在你的网络中至少有另一个系统。可以是局域网中的另一台电脑,远程服务器或者计算机中托管的虚拟机。
|
||||
|
||||
**再次强调,在你想要通过 SSH 远程登录的系统上安装 SSH 服务。**
|
||||
|
||||
#### 第一步:安装所需包
|
||||
|
||||
让我们从打开终端输入一些必要命令开始。
|
||||
|
||||
注意,在安装新的包或者软件前,要 [更新你的 Ubuntu 系统][5],以确保运行的是最新版本的程序。
|
||||
|
||||
```
|
||||
sudo apt update && sudo apt upgrade
|
||||
```
|
||||
|
||||
你要运行 SSH 服务器的包由 OpensSSH 的 `openssh-server` 组件提供:
|
||||
|
||||
```
|
||||
sudo apt install openssh-server
|
||||
```
|
||||
|
||||
![][6]
|
||||
|
||||
#### 第二步:检查服务器状态
|
||||
|
||||
当你下载并安装完包后,SSH 服务器应该已经运行了,但是为了确保万无一失我们需要检查一下:
|
||||
|
||||
```
|
||||
service ssh status
|
||||
```
|
||||
|
||||
你还可以使用 `systemctl` 命令:
|
||||
|
||||
```
|
||||
sudo systemctl status ssh
|
||||
```
|
||||
|
||||
你应该会看到这样的结果,其中 `active` 是高亮的。输入 `q` 退出该页面。
|
||||
|
||||
![][7]
|
||||
|
||||
如果你的结果中 SSH 服务没有运行,使用这个命令运行它:
|
||||
|
||||
```
|
||||
sudo systemctl enable --now ssh
|
||||
```
|
||||
|
||||
#### 第三步:允许 SSH 通过防火墙
|
||||
|
||||
Ubuntu 带有名为 [UFW][8](<ruby>简单的防火墙<rt>Uncomplicated Firewall</rt></ruby>)的防火墙,这是管理网络规则的 `iptables` 的一个接口。如果启动了防火墙,它可能会阻止你连接服务器。
|
||||
|
||||
想要配置 UFW 允许你的接入,你需要运行如下命令:
|
||||
|
||||
```
|
||||
sudo ufw allow ssh
|
||||
```
|
||||
|
||||
UFW 的运行状态可以通过运行 `sudo ufw status` 来检查。
|
||||
|
||||
现在,我们的 SSH 服务器已经开始运行了,在等待来自客户端的连接。
|
||||
|
||||
### 连接远程服务器
|
||||
|
||||
你本地的 Linux 系统已经安装了 SSH 客户端。如果没有,你可以在 Ubuntu 中使用如下命令安装:
|
||||
|
||||
```
|
||||
sudo apt install openssh-client
|
||||
```
|
||||
|
||||
要连接你的 Ubuntu 系统,你需要知道它的 IP 地址,然后使用 `ssh` 命令,就像这样:
|
||||
|
||||
```
|
||||
ssh username@address
|
||||
```
|
||||
|
||||
将 **用户名**(`username`)改为你的系统上的实际用户名,并将 **地址**(`address`)改为你服务器的 IP 地址。
|
||||
|
||||
如果你 [不知道 IP 地址][9],可以在服务器的终端输入 `ip a` 查看结果。应该会看到这样的结果:
|
||||
|
||||
![Using “ip a” to find the IP address][10]
|
||||
|
||||
可以看到我的 IP 地址是 `192.168.1.111`。让我们使用 `username@address` 格式进行连接。
|
||||
|
||||
```
|
||||
ssh team@192.168.1.111
|
||||
```
|
||||
|
||||
这是你第一次连接到该 SSH 服务器,它会请求添加主机。输入 `yes` 并回车即可。
|
||||
|
||||
![First time connecting to the server][12]
|
||||
|
||||
SSH 会立即告诉你该主机已经被永久添加了,并要求你输入指定用户的密码,输入密码并再次按回车即可。
|
||||
|
||||
![Host added, now type in the password][13]
|
||||
|
||||
瞧,你远程登录了你的 Ubuntu 系统!
|
||||
|
||||
![Connected!][14]
|
||||
|
||||
现在,你可以在远程服务器的终端里和寻常一样工作了。
|
||||
|
||||
#### 关闭 SSH 连接
|
||||
|
||||
你只需要输入 `exit` 即可关闭连接,它会立马关闭不需要确认。
|
||||
|
||||
![Closing the connection with “exit”][15]
|
||||
|
||||
### 在 Ubuntu 中关闭并禁止 SSH
|
||||
|
||||
如果你想要停止 SSH 服务,需要运行该命令:
|
||||
|
||||
```
|
||||
sudo systemctl stop ssh
|
||||
```
|
||||
|
||||
该命令会关闭 SSH 服务,直到重启它或者系统重启。想要重启它,输入:
|
||||
|
||||
```
|
||||
sudo systemctl start ssh
|
||||
```
|
||||
|
||||
现在,如果你想要禁止 SSH 跟随系统启动,使用该命令:
|
||||
|
||||
```
|
||||
sudo systemctl disable ssh
|
||||
```
|
||||
|
||||
该命令不会停止当前的 SSH 会话,只会在启动的时候生效。如果你想要它跟随系统启动,输入:
|
||||
|
||||
```
|
||||
sudo systemctl enable ssh
|
||||
```
|
||||
|
||||
#### 其他 SSH 客户端
|
||||
|
||||
从 Linux 到 macOS,大多数 *nix 系统中都有 `ssh` 工具,但这并不是唯一的选项,这里有几个可以在其他操作系统中使用的客户端:
|
||||
|
||||
* [PuTTY][16] 是一个自由开源的 Windows 系统上的 SSH 客户端。它功能强大并且简单易用。如果你从 Windows 系统上连接你的 Ubuntu 服务器,PuTTY 是最好的选择。(LCTT 译注:切记从官方网站下载。)
|
||||
* 对安卓用户来说,[JuiceSSH][17] 是十分优秀的工具。如果你在旅途中需要一个移动客户端来连接你的 Ubuntu 系统,我强烈建议你试试 JuiceSSH。它已经出现了将近 10 年,并且可以免费使用。
|
||||
* 最后是 [Termius][18],它可用于 Linux、Windows、macOS、iOS 和安卓。它有一个免费版本和几个付费选项。如果你运行大量服务器并进行共享连接的团队合作,那么 Termius 对你来说是一个不错的选择。
|
||||
|
||||
#### 总结
|
||||
|
||||
在这份指导中,你可以在 Ubuntu 系统中设置 SSH 作为服务器,允许来自你电脑的远程安全的连接,便于你通过命令行开展工作。
|
||||
|
||||
此,我推荐以下文章:
|
||||
|
||||
* [Linux SSH 入门教程][19]
|
||||
* [利用 SSH 配置文件管理多个 SSH 连接][20]
|
||||
* [向 SSH 服务器添加公钥以进行无密码身份验证][21]
|
||||
* [保护你的 SSH 服务器的 SSH 加固技巧][22]
|
||||
|
||||
远程工作快乐!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/set-up-ssh-ubuntu/
|
||||
|
||||
作者:[Chris Patrick Carias Stas][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[Donkey-Hao](https://github.com/Donkey-Hao)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/chris/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/ssh-diagram.png?resize=800%2C259&ssl=1
|
||||
[2]: https://www.openssh.com/
|
||||
[3]: https://itsfoss.com/install-ubuntu-server-raspberry-pi/
|
||||
[4]: https://itsfoss.com/ssh-into-raspberry/
|
||||
[5]: https://itsfoss.com/update-ubuntu/
|
||||
[6]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/ssh-0001.png?resize=800%2C253&ssl=1
|
||||
[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/05/ssh-0002.png?resize=800%2C263&ssl=1
|
||||
[8]: https://itsfoss.com/set-up-firewall-gufw/
|
||||
[9]: https://itsfoss.com/check-ip-address-ubuntu/
|
||||
[10]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/ssh-find-ip.png?resize=800%2C341&ssl=1
|
||||
[11]: https://itsfoss.com/cdn-cgi/l/email-protection
|
||||
[12]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/ssh-0004.png?resize=800%2C87&ssl=1
|
||||
[13]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/ssh-0005.png?resize=800%2C57&ssl=1
|
||||
[14]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/05/ssh-0006.png?resize=800%2C322&ssl=1
|
||||
[15]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/05/ssh-0007.png?resize=800%2C87&ssl=1
|
||||
[16]: https://www.putty.org/
|
||||
[17]: https://juicessh.com/
|
||||
[18]: https://termius.com/
|
||||
[19]: https://linuxhandbook.com/ssh-basics/
|
||||
[20]: https://linuxhandbook.com/ssh-config-file/
|
||||
[21]: https://linuxhandbook.com/add-ssh-public-key-to-server/
|
||||
[22]: https://linuxhandbook.com/ssh-hardening-tips/
|
||||
[23]: https://linuxhandbook.com/sshcourse/
|
@ -0,0 +1,243 @@
|
||||
[#]: subject: (Optimize Java serverless functions in Kubernetes)
|
||||
[#]: via: (https://opensource.com/article/21/6/java-serverless-functions-kubernetes)
|
||||
[#]: author: (Daniel Oh https://opensource.com/users/daniel-oh)
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (cool-summer-021)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-15178-1.html)
|
||||
|
||||
优化 Kubernetes 中的 Java 无服务器函数
|
||||
======
|
||||
|
||||
> 在 Kubernetes 中运行无服务器函数时,实现更快的启动速度和更小的内存占用。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202210/26/151603a4a44w1a71zk8b11.jpg)
|
||||
|
||||
由于运行上千个应用程序<ruby>容器荚<rt>Pod</rt></ruby>所耗费的资源多,令它实现较少工作节点和资源占用所需成本也较高,所以在使用 [Kubernetes][2] 时,快速启动和较少的内存占用是至关重要的。在 Kubernetes 平台运行容器化微服务时,内存占用是比吞吐量更重要的考量因素,这是因为:
|
||||
|
||||
* 由于需要持续运行,所以耗费资源更多(不同于 CPU 占用)
|
||||
* 微服务令开销成本成倍增加
|
||||
* 一个单体应用程序变为若干个微服务的情况(例如 20 个微服务占用的存储空间约有 20GB)
|
||||
|
||||
这些情况极大影响了无服务器函数的发展和 Java 部署模型。到目前为止,许多企业开发人员选择 Go、Python 或 Node.js 这些替代方案来解决性能瓶颈,直到出现了 [Quarkus][3] 这种基于 kubernetes 的原生 Java 堆栈,才有所改观。本文介绍如何在使用了 Quarkus 的 kubernetes 平台上进行性能优化,以便运行无服务器函数。
|
||||
|
||||
### 容器优先的设计理念
|
||||
|
||||
由于 Java 生态系统中传统的框架都要进行框架的初始化,包括配置文件的处理、`classpath` 的扫描、类加载、注解的处理以及构建元模型,这些过程都是必不可少的,所以它们都比较耗费资源。如果使用了几种不同的框架,所耗费的资源也是成倍增加。
|
||||
|
||||
Quarkus 通过“<ruby>左移<rt>shifting left</rt></ruby>”,把所有的资源开销大的操作都转移到构建阶段,解决了这些 Java 性能问题。在构建阶段进行代码和框架分析、字节码转换和动态元模型生成,而且只有一次,结果是:运行时可执行文件经过高度优化,启动非常快,不需要经过那些传统的启动过程,全过程只在构建阶段执行一次。
|
||||
|
||||
![Quarkus Build phase][4]
|
||||
|
||||
更重要的是:Quarkus 支持构建原生可执行文件,它具有良好性能,包括快速启动和极小的<ruby>驻留集大小<rt>resident set size</rt></ruby>(RSS)内存占用,跟传统的云原生 Java 栈相比,具备即时扩展的能力和高密度的内存利用。
|
||||
|
||||
![Quarkus RSS and Boot Time Metrics][7]
|
||||
|
||||
这里有个例子,展示如何使用 Quarkus 将一个 [Java 无服务器][8] 项目构建为本地可执行文件。
|
||||
|
||||
### 1、使用 Quarkus 创建无服务器 Maven 项目
|
||||
|
||||
以下命令生成一个 Quarkus 项目,(例如 `quarkus-serverless-native`)以此创建一个简单的函数:
|
||||
|
||||
```
|
||||
$ mvn io.quarkus:quarkus-maven-plugin:1.13.4.Final:create \
|
||||
-DprojectGroupId=org.acme \
|
||||
-DprojectArtifactId=quarkus-serverless-native \
|
||||
-DclassName="org.acme.getting.started.GreetingResource"
|
||||
```
|
||||
|
||||
### 2、构建一个本地可执行文件
|
||||
|
||||
你需要使用 GraalVM 为 Java 程序构建一个本地可执行文件。你可以选择 GraalVM 的任何发行版,例如 [Oracle GraalVM Community Edition (CE)][9] 或 [Mandrel][10](Oracle GraalVM CE 的下游发行版)。Mandrel 是为支持 OpenJDK 11 上的 Quarkus-native 可执行文件的构建而设计的。
|
||||
|
||||
打开 `pom.xml`,你将发现其中的 `native` 设置。你将使用它来构建本地可执行文件。
|
||||
|
||||
```
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>native</id>
|
||||
<properties>
|
||||
<quarkus.package.type>native</quarkus.package.type>
|
||||
</properties>
|
||||
</profile>
|
||||
</profiles>
|
||||
```
|
||||
|
||||
> **注意:** 你可以在本地安装 GraalVM 或 Mandrel 发行版。你也可以下载 Mandrel 容器映像来构建它(像我那样),因此你还需要在本地运行一个容器引擎(例如 Docker)。
|
||||
|
||||
假设你已经打开了容器运行时,此时需要运行一下 Maven 命令:
|
||||
|
||||
使用 [Docker][11] 作为容器引擎:
|
||||
|
||||
```
|
||||
$ ./mvnw package -Pnative \
|
||||
-Dquarkus.native.container-build=true \
|
||||
-Dquarkus.native.container-runtime=docker
|
||||
```
|
||||
|
||||
使用 [Podman][12] 作为容器引擎:
|
||||
|
||||
```
|
||||
$ ./mvnw package -Pnative \
|
||||
-Dquarkus.native.container-build=true \
|
||||
-Dquarkus.native.container-runtime=podman
|
||||
```
|
||||
|
||||
输出信息结尾应当是 `BUILD SUCCESS`。
|
||||
|
||||
![Native Build Logs][13]
|
||||
|
||||
不借助 JVM 直接运行本地可执行文件:
|
||||
|
||||
```
|
||||
$ target/quarkus-serverless-native-1.0.0-SNAPSHOT-runner
|
||||
```
|
||||
|
||||
输出信息类似于:
|
||||
|
||||
```
|
||||
__ ____ __ _____ ___ __ ____ ______
|
||||
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
|
||||
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
|
||||
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
|
||||
INFO [io.quarkus] (main) quarkus-serverless-native 1.0.0-SNAPSHOT native
|
||||
(powered by Quarkus xx.xx.xx.) Started in 0.019s. Listening on: http://0.0.0.0:8080
|
||||
INFO [io.quarkus] (main) Profile prod activated.
|
||||
INFO [io.quarkus] (main) Installed features: [cdi, kubernetes, resteasy]
|
||||
```
|
||||
|
||||
简直是超音速!启动只花了 19 毫秒。你的运行时间可能稍有不同。
|
||||
|
||||
使用 Linux 的 `ps` 工具检测一下,结果内存占用还是很低。检测的方法是:在应用程序运行期间,另外打开一个终端,运行如下命令:
|
||||
|
||||
```
|
||||
$ ps -o pid,rss,command -p $(pgrep -f runner)
|
||||
```
|
||||
|
||||
输出结果类似于:
|
||||
|
||||
```
|
||||
PID RSS COMMAND
|
||||
10246 11360 target/quarkus-serverless-native-1.0.0-SNAPSHOT-runner
|
||||
```
|
||||
|
||||
该进程只占 11MB 内存。非常小!
|
||||
|
||||
> **注意:** 各种应用程序(包括 Quarkus)的驻留集大小和内存占用,都因运行环境而异,并随着应用程序载入而上升。
|
||||
|
||||
你也可以使用 REST API 访问这个函数。输出结果应该是 `Hello RESTEasy`:
|
||||
|
||||
```
|
||||
$ curl localhost:8080/hello
|
||||
Hello RESTEasy
|
||||
```
|
||||
|
||||
### 3、把函数部署到 Knative 服务
|
||||
|
||||
如果你还没有创建命名空间,现在就在 [OKD][15](OpenShift Kubernetes 发行版)[创建一个命名空间][14](例如 `quarkus-serverless-native`),进而把这个本地可执行文件部署为无服务器函数。然后添加 `quarkus-openshift` 扩展:
|
||||
|
||||
```
|
||||
$ ./mvnw -q quarkus:add-extension -Dextensions="openshift"
|
||||
```
|
||||
|
||||
向 `src/main/resources/application.properties` 文件中添加以下内容,配置 Knative 和 Kubernetes 的相关资源:
|
||||
|
||||
```
|
||||
quarkus.container-image.group=quarkus-serverless-native
|
||||
quarkus.container-image.registry=image-registry.openshift-image-registry.svc:5000
|
||||
quarkus.native.container-build=true
|
||||
quarkus.kubernetes-client.trust-certs=true
|
||||
quarkus.kubernetes.deployment-target=knative
|
||||
quarkus.kubernetes.deploy=true
|
||||
quarkus.openshift.build-strategy=docker
|
||||
```
|
||||
|
||||
构建本地可执行文件,并把它直接部署到 OKD 集群:
|
||||
|
||||
```
|
||||
$ ./mvnw clean package -Pnative
|
||||
```
|
||||
|
||||
> **注意:** 提前使用 `oc login` 命令,确保登录的是正确的项目(例如 `quarkus-serverless-native`)。
|
||||
|
||||
输出信息结尾应当是 `BUILD SUCCESS`。完成一个本地二进制文件的构建并部署为 Knative 服务需要花费几分钟。成功创建服务后,使用 `kubectl` 或 `oc` 命令工具,可以查看 Knative 服务和版本信息:
|
||||
|
||||
```
|
||||
$ kubectl get ksvc
|
||||
NAME URL [...]
|
||||
quarkus-serverless-native http://quarkus-serverless-native-[...].SUBDOMAIN True
|
||||
|
||||
$ kubectl get rev
|
||||
NAME CONFIG NAME K8S SERVICE NAME GENERATION READY REASON
|
||||
quarkus-serverless-native-00001 quarkus-serverless-native quarkus-serverless-native-00001 1 True
|
||||
```
|
||||
|
||||
### 4、访问本地可执行函数
|
||||
|
||||
运行 `kubectl` 命令,搜索无服务器函数的节点:
|
||||
|
||||
```
|
||||
$ kubectl get rt/quarkus-serverless-native
|
||||
```
|
||||
|
||||
输出信息类似于:
|
||||
|
||||
```
|
||||
NAME URL READY REASON
|
||||
quarkus-serverless-native http://quarkus-serverless-restapi-quarkus-serverless-native.SUBDOMAIN True
|
||||
```
|
||||
|
||||
用 `curl` 命令访问上述信息中的 `URL` 字段:
|
||||
|
||||
```
|
||||
$ curl http://quarkus-serverless-restapi-quarkus-serverless-native.SUBDOMAIN/hello
|
||||
```
|
||||
|
||||
过了不超过一秒钟,你也会得到跟本地操作一样的结果:
|
||||
|
||||
```
|
||||
Hello RESTEasy
|
||||
```
|
||||
|
||||
当你在 OKD 群集中访问 Quarkus 运行中的节点的日志,你会发现本地可执行文件正在以 Knative 服务的形式运行。
|
||||
|
||||
![Native Quarkus Log][16]
|
||||
|
||||
### 下一步呢?
|
||||
|
||||
你可以借助 GraalVM 发行版优化 Java 无服务器函数,从而在 Knative 中使用 Kubernetes 将它们部署为无服务器函数。Quarkus 支持在普通的微服务中使用简易配置进行性能优化。
|
||||
|
||||
本系列的下一篇文章将指导你在不更改代码的情况下跨多个无服务器平台实现可移植函数。
|
||||
|
||||
*(Daniel Oh, [CC BY-SA 4.0][5])*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/6/java-serverless-functions-kubernetes
|
||||
|
||||
作者:[Daniel Oh][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[cool-summer-021](https://github.com/cool-summer-021)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/daniel-oh
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/ship_captain_devops_kubernetes_steer.png?itok=LAHfIpek (Ship captain sailing the Kubernetes seas)
|
||||
[2]: https://opensource.com/article/19/6/reasons-kubernetes
|
||||
[3]: https://quarkus.io/
|
||||
[4]: https://opensource.com/sites/default/files/uploads/quarkus-build.png (Quarkus Build phase)
|
||||
[5]: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
[6]: https://quarkus.io/blog/runtime-performance/
|
||||
[7]: https://opensource.com/sites/default/files/uploads/quarkus-boot-metrics.png (Quarkus RSS and Boot Time Metrics)
|
||||
[8]: https://opensource.com/article/21/5/what-serverless-java
|
||||
[9]: https://www.graalvm.org/community/
|
||||
[10]: https://github.com/graalvm/mandrel
|
||||
[11]: https://www.docker.com/
|
||||
[12]: https://podman.io/
|
||||
[13]: https://opensource.com/sites/default/files/uploads/native-build-logs.png (Native Build Logs)
|
||||
[14]: https://docs.okd.io/latest/applications/projects/configuring-project-creation.html
|
||||
[15]: https://docs.okd.io/latest/welcome/index.html
|
||||
[16]: https://opensource.com/sites/default/files/uploads/native-quarkus-log.png (Native Quarkus Log)
|
@ -0,0 +1,264 @@
|
||||
[#]: subject: (Try Linux on any operating system with VirtualBox)
|
||||
[#]: via: (https://opensource.com/article/21/6/try-linux-virtualbox)
|
||||
[#]: author: (Stephan Avenwedde https://opensource.com/users/hansic99)
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (chai001125)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-15183-1.html)
|
||||
|
||||
使用 VirtualBox 安装 Linux 虚拟机
|
||||
======
|
||||
|
||||
> VirtualBox 能帮助任何人(即使是命令行新手)安装一个新的虚拟机。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202210/27/104215te6xpq2e2vvxprjs.jpg)
|
||||
|
||||
VirtualBox 能让任何人都可以轻松安装 Linux 虚拟机。你不需要有使用命令行的经验,就可以自己安装一个简单的 Linux 虚拟机。在虚拟机方面,我精通很多东西,但这篇文章将向新手展示如何安装一个 Linux 虚拟机。此外,这篇文章还概述了如何使用开源虚拟机管理程序 [VirtualBox][2] ,来运行以及安装一个测试目的的 Linux 系统。
|
||||
|
||||
### 一些术语
|
||||
|
||||
在开始之前,你需要了解在本安装教程中的两个操作系统(OS)之间的区别:
|
||||
|
||||
* <ruby>主机系统<rt>host system</rt></ruby>:这指的是你安装 VirtualBox 的操作系统(即本机的操作系统)。
|
||||
* <ruby>客体系统<rt>guest system</rt></ruby>:这指的是你想要在主机系统之上运行的虚拟化系统。
|
||||
|
||||
在输入/输出、网络、文件访问、剪贴板、音频和视频方面,主机系统和客体系统都必须能够交互。
|
||||
|
||||
在本教程中,我将使用 Windows 10 作为 _主机系统_,[Fedora 33][3] 作为 _客体系统_。
|
||||
|
||||
### 安装前的准备
|
||||
|
||||
当我们谈论虚拟化时,实际上,我们指的是 [硬件辅助虚拟化][4]。硬件辅助虚拟化需要兼容的 CPU。过去十年来,几乎每个普通的 x86 CPU 都有这一功能。AMD 公司称这样的 x86 CPU 是具有 **AMD 虚拟化技术(AMD-V)** 的处理器,英特尔公司则称其是具有 **Intel 虚拟化技术(VT-x)** 的处理器。虚拟化功能增加了一些额外的 CPU 指令,你可以在 BIOS 中启用或禁用这些指令。
|
||||
|
||||
在安装虚拟机之前:
|
||||
|
||||
* 确保在 BIOS 中启用了虚拟化技术(AMD-V 或 VT-x)。
|
||||
* 下载并安装好 [VirtualBox][5]。
|
||||
|
||||
### 准备虚拟机
|
||||
|
||||
下载你要用的 Linux 发行版的镜像文件。下载 32 位还是 64 位的操作系统镜像都没有关系,因为在 32 位的主机系统上也可以启动 64 位的操作系统镜像(当然内存的使用会受限),反之亦然。
|
||||
|
||||
> **注意事项:** 如果可以的话,请下载附带有 [逻辑卷管理器][6](LVM)的 Linux 发行版。LVM 会将文件系统与物理硬盘驱动器解耦。如果你的空间不足时,这能够让你增加客体系统的硬盘驱动器的大小。
|
||||
|
||||
现在,打开 VirtualBox,然后单击黄色的“<ruby>新建<rt>New</rt></ruby>”按钮:
|
||||
|
||||
![VirtualBox New VM][7]
|
||||
|
||||
接下来,配置客体操作系统允许使用多少内存:
|
||||
|
||||
![Set VM memory size][9]
|
||||
|
||||
我的建议是:**不要吝啬分配给客体操作系统使用的内存!** 当客体操作系统的内存不足时,客体系统将开始从随机存取存储器(RAM)向硬盘驱动器进行内存分页,这样会极大地恶化系统的性能和响应能力。如果底层的主机系统开始分页,你很可能不会注意到。对于具有图形化桌面环境的 Linux 工作站系统,我建议至少分配 4GB 内存。
|
||||
|
||||
接下来,创建虚拟磁盘:
|
||||
|
||||
![Create virtual hard disk][10]
|
||||
|
||||
虚拟磁盘的格式选择默认的选项 “VDI(VirtualBox 磁盘镜像)” 就可以了:
|
||||
|
||||
![Selecting hard disk file type][11]
|
||||
|
||||
在以下的窗口中,我建议选择“<ruby>动态分配<rt>dynamically allocated</rt></ruby>”,因为这允许你在之后增加虚拟磁盘的大小。如果你选择了“<ruby>固定大小<rt>fixed size</rt></ruby>”,磁盘的速度可能会更快,但你将无法修改虚拟磁盘的大小了:
|
||||
|
||||
![Dynamically allocating hard disk][12]
|
||||
|
||||
建议你使用附带有逻辑卷管理器(LVM)的 Linux 发行版,这样你就可以先创建一个较小的硬盘。如果之后你的客体系统的空间快用完了,你可以按需增加磁盘的大小。
|
||||
|
||||
> **注意**:我选择的客体系统为 Fedora,在 Fedora 的官网说明:[Fedora 至少需要分配 20GB 的空闲磁盘空间][13]。我强烈建议你遵守该规范。在这里,我选择了 8GB,以便稍后演示如何用命令行增加磁盘空间。如果你是 Linux 新手,或者对命令行没有经验,请依旧选择 20GB。
|
||||
|
||||
![Setting hard disk size][14]
|
||||
|
||||
创建好硬盘驱动器后,从 VirtualBox 主窗口的列表中选择新创建的虚拟机,然后单击“<ruby>设置<rt>Settings</rt></ruby>”。在设置菜单中,点击“<ruby>系统<rt>System</rt></ruby>”,然后选择“<ruby>处理器<rt>Processor</rt></ruby>”标签。默认情况下,VirtualBox 只向客体系统分配一个 CPU 内核。在现代多核 CPU 计算机上,分配至少两个内核是没有任何问题的,这能显著地加快客体系统的速度:
|
||||
|
||||
![Assigning cores to guest system][15]
|
||||
|
||||
#### 设置网络适配器
|
||||
|
||||
接下来,要处理的是网络设置。默认情况下, VirtualBox 会创建一个 NAT 连接,这对于大多数情况来说,是没有问题、不用做其他更改的:
|
||||
|
||||
![Network settings][16]
|
||||
|
||||
你也可以创建多个网络适配器。以下是网络适配器最常见的类型:
|
||||
|
||||
* NAT:NAT 适配器能自动执行 [网络地址转换][17]。从外部看,主机和客体系统使用着相同的 IP 地址。你无法通过网络从主机系统内访问客体系统。(尽管,你也可以通过定义 [端口转发][18],来访问某些服务。)当你的主机系统可以访问互联网时,则你的客体系统也可以访问互联网。NAT 不再需要进一步的配置。
|
||||
* _如果你只需要让客体系统接入互联网就可以的话,请选择 “NAT”。_
|
||||
* <ruby>桥接适配器<rt>Bridged adapter</rt></ruby>:在此配置中,客体系统和主机系统可以共享相同的物理以太网设备。这两个系统都将拥有独立的 IP 地址。从外部看,网络中会有两个独立的系统,它们共享相同的物理以太网适配器。这种设置更灵活,但需要更多的配置。
|
||||
* _如果你想要共享客体系统的网络服务的话,请选择 “桥接适配器”。_
|
||||
* <ruby>仅限主机的适配器<rt>Host-only adapter</rt></ruby>:在此配置中,客体系统只能与主机,或在同一主机上运行的其他客体系统相互通信。主机系统也可以连接到客体系统。但客体系统不能接入互联网或物理网络。
|
||||
* _如果你想要获得高安全性,请选择 “仅限主机的适配器”。_
|
||||
|
||||
#### 分配操作系统镜像
|
||||
|
||||
在设置菜单中,点击“<ruby>存储<rt>Storage</rt></ruby>”,然后选择虚拟光盘驱动器。单击右侧的 “光盘”图标,然后点击“<ruby>选择一个磁盘文件……<rt>Choose a disk file…</rt></ruby>”,然后分配你想要安装的、已下载的 Linux 发行版镜像:
|
||||
|
||||
![Assigning OS image][19]
|
||||
|
||||
### 安装 Linux
|
||||
|
||||
现在,就已经配置好了虚拟机。右上角关闭“<ruby>设置<rt>Settings</rt></ruby>”菜单,返回主窗口。点击“绿色箭头”(即“开始”按钮)。虚拟机将从虚拟光盘驱动器启动,你将发现你已经进入到 Linux 发行版的安装程序中:
|
||||
|
||||
![VirtualBox Fedora installer][20]
|
||||
|
||||
#### 设置分区
|
||||
|
||||
安装程序将在安装过程中要求你提供分区信息。选择“<ruby>自定义<rt>Custom</rt></ruby>”:
|
||||
|
||||
![Selecting Custom partition configuration][21]
|
||||
|
||||
> **注意:** 我假设,你创建这一虚拟机的目的是为了测试。此外,你也无需关心客体系统的休眠,因为此功能会由 VirtualBox 来隐式地提供。因此,你可以省略交换分区,以节省主机系统的磁盘空间。请记住,如果你需要的话,你可以稍后自己添加交换分区。在 《[Linux 系统交换空间的介绍][22]》 这篇文章中,作者 David Both 进一步解释了如何添加交换分区,并选择交换分区正确的大小。
|
||||
|
||||
Fedora 33 及之后更高的版本提供了一个 [zram 分区][23],zram 分区可以用于存放分页和交换、并经过压缩过后的硬盘数据。zram 分区可以按需地调整大小,并且它比硬盘交换分区快得多。
|
||||
|
||||
为了简单,我们只添加以下两个<ruby>挂载点<rt>Mount Point</rt></ruby>:
|
||||
|
||||
![Adding mount points][24]
|
||||
|
||||
保存更改,接下来我们继续安装。
|
||||
|
||||
### 安装 VirtualBox 增强功能
|
||||
|
||||
完成安装后,从硬盘驱动器启动,并登录到虚拟机。现在,你可以安装 <ruby>VirtualBox 增强功能<rt>VirtualBox Guest Additions</rt></ruby>,其中包括特殊的设备驱动程序和系统应用程序,它们能提供以下功能:
|
||||
|
||||
* 共享剪贴板
|
||||
* 共享文件夹
|
||||
* 更好的性能
|
||||
* 可自由扩展的窗口大小
|
||||
|
||||
点击顶部菜单栏的“<ruby>设备<rt>Devices</rt></ruby>”,然后选择“<ruby>插入增强功能的 CD 镜像……<rt>Insert Guest Additions CD image...</rt></ruby>”,来安装 VirtualBox 增强功能:
|
||||
|
||||
![Selecting Guest Additions CD image][25]
|
||||
|
||||
在大多数 Linux 发行版上,带有增强功能的 CD 镜像会自动挂载,并且能够在文件管理器中找到。Fedora 会问你是否要运行安装脚本。单击“<ruby>运行<rt>Run</rt></ruby>”,并授予该安装进程 root 权限:
|
||||
|
||||
![Enabling Guest Additions autorun][26]
|
||||
|
||||
安装完成后,需要重新启动系统。
|
||||
|
||||
### LVM:扩大磁盘空间
|
||||
|
||||
我在之前给 Fedora 虚拟机分配了 8GB 硬盘空间,是一个愚蠢的决定,因为 Fedora 很快就会告警空间不足:
|
||||
|
||||
![Fedora hard disk running out of space][27]
|
||||
|
||||
正如我提到的,Fedora 官网建议安装时分配 20GB 的磁盘空间。因为 8GB 是 Fedora 33 安装启动就需要的最少空间。没有安装其他软件(除了 VirtualBox 增强功能)的一个新安装的系统就几乎占用了整个 8GB 的可用空间。这时候,不要打开 GNOME 软件中心或任何其他可能从互联网下载文件的东西。
|
||||
|
||||
幸运的是,我选择了附带有 LVM 的 Fedora,这样我就可以用命令行轻松地修复这个问题。
|
||||
|
||||
要增加虚拟机中文件系统的空间,你必须先增加主机系统上分配的虚拟硬盘驱动器。
|
||||
|
||||
关闭虚拟机。如果你的主机系统运行的是 Windows,请打开终端,并进入到 `C:\Program Files\Oracle\VirtualBox` 目录下。使用以下命令,将磁盘大小扩大到 12,000MB:
|
||||
|
||||
```
|
||||
VBoxManage.exe modifyhd "C:\Users\StephanA\VirtualBox VMs\Fedora_33\Fedora_33.vdi" --resize 12000
|
||||
```
|
||||
|
||||
然后启动虚拟机,并打开“<ruby>磁盘<rt>Disks</rt></ruby>”工具。你可以看到你刚刚新创建且未分配的可用空间。选择“<ruby>可用空间<rt>Free Space</rt></ruby>”,然后单击 “+” 按钮:
|
||||
|
||||
![Free space before adding][28]
|
||||
|
||||
现在,创建一个新的分区。选择你要使用的可用空间的大小:
|
||||
|
||||
![Creating a new partition and setting size][29]
|
||||
|
||||
如果你不想在新分区上创建文件系统或任何其他内容,请选择“<ruby>其他<rt>Other</rt></ruby>”:
|
||||
|
||||
![Selecting "other" for partition volume type][30]
|
||||
|
||||
选择“<ruby>无文件系统<rt>No Filesystem</rt></ruby>”:
|
||||
|
||||
![Setting "No filesystem" on new partition][31]
|
||||
|
||||
现在,磁盘空间应该如下图所示:
|
||||
|
||||
![VirtualBox after adding new partition][32]
|
||||
|
||||
虚拟机有了一个新的分区设备:`/dev/sda3`。通过输入 `vgscan` ,来检查你的 LVM 卷组,找到 `fedora_localhost_live` 这一 LVM 卷组 :
|
||||
|
||||
![Checking LVM volume group by typing vgscan:][33]
|
||||
|
||||
现在,已经万事俱备了。在新分区 `/dev/sda3` 中扩展卷组 `fedora_localhost_live`:
|
||||
|
||||
```
|
||||
vgextend fedora_localhost-live /dev/sda3
|
||||
```
|
||||
|
||||
![vgextend command output][34]
|
||||
|
||||
由于卷组比逻辑卷大,你可以增加逻辑卷的大小。命令 `vgdisplay` 显示了共有 951 个可用的物理扩展(PE):
|
||||
|
||||
![vgdisplay command output][35]
|
||||
|
||||
将逻辑卷增加 951 个物理扩展:
|
||||
|
||||
```
|
||||
lvextend -l+951 /dev/mapper/fedora_localhost--live-root
|
||||
```
|
||||
|
||||
![lvextend command output][36]
|
||||
|
||||
在增加了逻辑卷后,最后一件事就是调整文件系统的大小:
|
||||
|
||||
```
|
||||
resize2fs /dev/mapper/fedora_localhost--live-root
|
||||
```
|
||||
|
||||
![resize2fs command output][37]
|
||||
|
||||
这样磁盘空间就增加完成了!检查“<ruby>磁盘使用分析器<rt>Disk Usage Analyzer</rt></ruby>”,你就可以看到扩展空间已经可用于文件系统了。
|
||||
|
||||
### 总结
|
||||
|
||||
使用虚拟机,你可以检查在一个特定的操作系统或一个特定版本的操作系统、软件是如何操作的。除此之外,你还可以尝试任何想测试的 Linux 发行版,而不必担心系统损坏。对于资深用户来说,VirtualBox 在测试、网络和模拟方面提供了广泛的可能性。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/6/try-linux-virtualbox
|
||||
|
||||
作者:[Stephan Avenwedde][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[chai001125](https://github.com/chai001125)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/hansic99
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/computer_code_programming_laptop.jpg?itok=ormv35tV (Person programming on a laptop on a building)
|
||||
[2]: https://www.virtualbox.org/
|
||||
[3]: https://getfedora.org/
|
||||
[4]: https://en.wikipedia.org/wiki/Hardware-assisted_virtualization
|
||||
[5]: https://www.virtualbox.org/wiki/Downloads
|
||||
[6]: https://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)
|
||||
[7]: https://opensource.com/sites/default/files/uploads/virtualbox_new_vm.png (VirtualBox New VM)
|
||||
[8]: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
[9]: https://opensource.com/sites/default/files/uploads/virtualbox_memory_size_1.png (Set VM memory size)
|
||||
[10]: https://opensource.com/sites/default/files/uploads/virtualbox_create_hd_1.png (Create virtual hard disk)
|
||||
[11]: https://opensource.com/sites/default/files/uploads/virtualbox_create_hd_2.png (Selecting hard disk file type)
|
||||
[12]: https://opensource.com/sites/default/files/uploads/virtualbox_create_hd_3.png (Dynamically allocating hard disk)
|
||||
[13]: https://getfedora.org/en/workstation/download/
|
||||
[14]: https://opensource.com/sites/default/files/uploads/virtualbox_create_hd_4.png (Setting hard disk size)
|
||||
[15]: https://opensource.com/sites/default/files/uploads/virtualbox_cpu_settings.png (Assigning cores to guest system)
|
||||
[16]: https://opensource.com/sites/default/files/uploads/virtualbox_network_settings2.png (Network settings)
|
||||
[17]: https://en.wikipedia.org/wiki/Network_address_translation
|
||||
[18]: https://www.virtualbox.org/manual/ch06.html#natforward
|
||||
[19]: https://opensource.com/sites/default/files/uploads/virtualbox_choose_image3.png (Assigning OS image)
|
||||
[20]: https://opensource.com/sites/default/files/uploads/virtualbox_running.png (VirtualBox Fedora installer)
|
||||
[21]: https://opensource.com/sites/default/files/uploads/virtualbox_partitioning_1.png (Selecting Custom partition configuration)
|
||||
[22]: https://opensource.com/article/18/9/swap-space-linux-systems
|
||||
[23]: https://fedoraproject.org/wiki/Changes/SwapOnZRAM
|
||||
[24]: https://opensource.com/sites/default/files/uploads/virtualbox_partitioning_2.png (Adding mount points)
|
||||
[25]: https://opensource.com/sites/default/files/uploads/virtualbox_guest_additions_2.png (Selecting Guest Additions CD image)
|
||||
[26]: https://opensource.com/sites/default/files/uploads/virtualbox_guest_additions_autorun.png (Enabling Guest Additions autorun)
|
||||
[27]: https://opensource.com/sites/default/files/uploads/virtualbox_disk_usage_1.png (Fedora hard disk running out of space)
|
||||
[28]: https://opensource.com/sites/default/files/uploads/virtualbox_disks_before.png (Free space before adding)
|
||||
[29]: https://opensource.com/sites/default/files/uploads/virtualbox_new_partition_1.png (Creating a new partition and setting size)
|
||||
[30]: https://opensource.com/sites/default/files/uploads/virtualbox_new_partition_2.png (Selecting "other" for partition volume type)
|
||||
[31]: https://opensource.com/sites/default/files/uploads/virtualbox_no_partition_3.png (Setting "No filesystem" on new partition)
|
||||
[32]: https://opensource.com/sites/default/files/uploads/virtualbox_disk_after.png (VirtualBox after adding new partition)
|
||||
[33]: https://opensource.com/sites/default/files/uploads/virtualbox_vgscan.png (Checking LVM volume group by typing vgscan:)
|
||||
[34]: https://opensource.com/sites/default/files/uploads/virtualbox_vgextend_2.png (vgextend command output)
|
||||
[35]: https://opensource.com/sites/default/files/uploads/virtualbox_vgdisplay.png (vgdisplay command output)
|
||||
[36]: https://opensource.com/sites/default/files/uploads/virtualbox_lvextend.png (lvextend command output)
|
||||
[37]: https://opensource.com/sites/default/files/uploads/virtualbox_resizefs.png (resize2fs command output)
|
@ -0,0 +1,160 @@
|
||||
[#]: subject: "Troubleshooting “Bash: Command Not Found” Error in Linux"
|
||||
[#]: via: "https://itsfoss.com/bash-command-not-found/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "chai001125"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15164-1.html"
|
||||
|
||||
解决 Linux 中的 “Bash: Command Not Found” 报错
|
||||
======
|
||||
|
||||
> 本新手教程展示了在 Debian、Ubuntu 和其他的 Linux 发行版上如何解决 “Bash: command not found” 这一报错。
|
||||
|
||||
当你在 Linux 中使用命令时,你希望得到终端输出的结果。但有时候,你会遇到终端显示“<ruby>命令未找到<rt>command not found</rt></ruby>”这一报错。
|
||||
|
||||
![][1]
|
||||
|
||||
对于这个问题,并没有直截了当且单一的解决方案。你必须自己做一些故障排除来解决这个报错。
|
||||
|
||||
老实说,要解决它并不难。该报错信息已经给出了一些提示:“命令未找到”,这说明你的 shell(或者 Linux 系统)找不到你输入的那条命令。
|
||||
|
||||
shell(或 Linux 系统)找不到命令,有三个可能的原因:
|
||||
|
||||
* 你将命令的名称拼错了
|
||||
* 该命令还没有安装
|
||||
* 该命令是一个可执行脚本,但其位置未知
|
||||
|
||||
接下来,我们会详细介绍“命令未找到”这一报错的每一个原因。
|
||||
|
||||
### 解决“命令未找到”报错
|
||||
|
||||
![][2]
|
||||
|
||||
#### 方法 1:再次检查命令名称有没有写错
|
||||
|
||||
每个人都会犯错误,尤其是在打字的时候。你输入的命令可能存在错别字(也就是你写错啦)。
|
||||
|
||||
你应该特别注意:
|
||||
|
||||
* 是否拼对了正确的命令名称
|
||||
* 是否在命令与其选项之间加上了空格
|
||||
* 是否在拼写中混淆了 1(数字 1)、I(大写的 i)和 l(小写的 L)
|
||||
* 是否正确使用了大写字母或者小写字母
|
||||
|
||||
看看下面的示例,因为我写错了 `ls` 命令,所以会导致“command not found”报错。
|
||||
|
||||
![][3]
|
||||
|
||||
所以,请再次仔细确认你输入得对不对。
|
||||
|
||||
#### 方法 2:确保命令已安装在你的系统上
|
||||
|
||||
这是“命令未找到”错误的另一个常见原因。如果命令尚未安装,则无法运行该命令。
|
||||
|
||||
虽然在默认情况下,你的 Linux 发行版自带安装了大量命令,但是不会在系统中预装 _所有的_ 命令行工具。如果你尝试运行的命令不是一个流行的常用命令,那么你需要先安装它。
|
||||
|
||||
你可以使用发行版的软件包管理器来安装命令。
|
||||
|
||||
![You may have to install the missing command][4]
|
||||
|
||||
有时候,某一常用命令可能也不再能使用了,甚至你也不能够安装这个命令了。这种情况下,你需要找到一个替代的命令,来得到结果。
|
||||
|
||||
以现已弃用的 `ifconfig` 命令为例。网络上的旧教程依旧会让你使用 `ifconfig` 命令,来 [获取本机的 IP 地址][5] 和网络接口信息,但是,在较新的 Linux 版本中,你已经无法使用 `ifconfig` 了。`ifconfig` 命令已被 `ip` 命令所取代。
|
||||
|
||||
![Some popular commands get discontinued over the time][1]
|
||||
|
||||
有时候,你的系统可能甚至找不到一些非常常见的命令。当你在 Docker 容器中运行 Linux 发行版时,就通常如此。Docker 容器为了缩小操作系统镜像的大小,容器中通常不包含那些常见的 Linux 命令。
|
||||
|
||||
这就是为什么使用 Docker 的用户会碰到 [ping 命令未找到][6] 等报错的原因。
|
||||
|
||||
![Docker containers often have only a few commands installed][7]
|
||||
|
||||
因此,这种情况下的解决方案是安装缺失的命令,或者是找到一个与缺失命令有同等功能的工具。
|
||||
|
||||
### 方法 3:确保命令是真实的,而不是一个别名
|
||||
|
||||
我希望你知道 Linux 中的别名概念。你可以配置你自己的较短的命令来代替一个较长命令的输入。
|
||||
|
||||
一些发行版,如 Ubuntu,会自动提供 `ll`(`ls -l` 的别名)、`la`(`ls -a` 的别名)等命令。
|
||||
|
||||
![][13]
|
||||
|
||||
想象一下,你习惯于在你的个人系统上输入 `ll` 和 `la`,而你登录到另一个 Linux 系统,发现 `ll` 命令并不存在。你甚至不能安装 `ll` 命令,因为它不是一个真正的命令。
|
||||
|
||||
所以,如果你找不到一个命令,甚至不能安装,你应该尝试在互联网上搜索该命令是否存在。如果不存在,可能是其他系统上的一个别名。
|
||||
|
||||
#### 方法 4:检查命令是否是一个路径正确的可执行脚本
|
||||
|
||||
这是 Linux 新手在 [运行 shell 脚本][8] 时常犯的错误。
|
||||
|
||||
即使你在同一目录下,仅用可执行脚本的名称,来运行可执行脚本,也会显示错误。
|
||||
|
||||
```
|
||||
[email protected]:~/scripts# sample
|
||||
-bash: sample: command not found
|
||||
```
|
||||
|
||||
因为你需要显式指定 shell 解释器或可执行脚本的路径!
|
||||
|
||||
![][9]
|
||||
|
||||
如果你在其他目录下,在未提供文件正确路径的情况下,运行 shell 脚本,则会有“<ruby>找不到文件<rt>no such file or directory</rt></ruby>”的报错。
|
||||
|
||||
![][10]
|
||||
|
||||
> **把可执行文件的路径加到 PATH 变量中**
|
||||
>
|
||||
> 有时候,你下载了一个软件的压缩文件(tar 格式),解压这个 tar 文件,然后找到一个可执行文件和其他程序文件。你需要运行可执行文件,来运行那个软件。
|
||||
>
|
||||
> 但是,你需要在可执行文件的同一目录下或指定可执行文件的整个路径,才能运行那个可执行文件。这很令人烦扰。
|
||||
>
|
||||
> 你可以使用 `PATH` 变量来解决这个问题。`PATH` 变量包含了有各种 Linux 命令的二进制(可执行)文件的目录集合。当你运行一个命令时,你的 Linux 系统会检查 `PATH` 变量中的上述目录,以查找该命令的可执行文件。
|
||||
>
|
||||
> 你可以使用 `which` 命令,来检查某一命令的二进制文件的位置:
|
||||
>
|
||||
> ![][11]
|
||||
>
|
||||
> 如果你想从系统上的任何地方都能运行可执行文件或脚本,你需要将可执行文件的位置添加到 `PATH` 变量中。
|
||||
>
|
||||
> ![][12]
|
||||
>
|
||||
> 然后,`PATH` 变量需要添加到 shell 的 rc 文件中,如此对 `PATH` 变量的更改就是永久性的。
|
||||
>
|
||||
> 这里的要点是:你的 Linux 系统必须了解可执行脚本的位置。要么在运行时给出可执行文件的整个路径,要么将其位置添加到 `PATH` 变量中。
|
||||
|
||||
### 以上的内容有帮到你吗?
|
||||
|
||||
我懂得,当你是 Linux 新手时,很多事情可能会让你不知所措。但是,当你了解问题的根本原因时,你的知识会逐渐增加。
|
||||
|
||||
对于“未找到命令”报错来说,没有简单的解决方案。我提供给你了一些提示和要点,我希望这对你的故障排除有帮助。
|
||||
|
||||
如果你仍然有疑问或需要帮助,请在评论区告诉我吧。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/bash-command-not-found/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[chai001125](https://github.com/chai001125)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/bash-command-not-found-error.png?resize=741%2C291&ssl=1
|
||||
[2]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/bash-command-not-found-error-1.png?resize=800%2C450&ssl=1
|
||||
[3]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/command-not-found-error.png?resize=723%2C234&ssl=1
|
||||
[4]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/command-not-found-debian.png?resize=741%2C348&ssl=1
|
||||
[5]: https://itsfoss.com/check-ip-address-ubuntu/
|
||||
[6]: https://linuxhandbook.com/ping-command-ubuntu/
|
||||
[7]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/ping-command-not-found-ubuntu.png?resize=786%2C367&ssl=1
|
||||
[8]: https://itsfoss.com/run-shell-script-linux/
|
||||
[9]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/bash-script-command-not-found-error-800x331.png?resize=800%2C331&ssl=1
|
||||
[10]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/09/script-file-not-found-error-800x259.png?resize=800%2C259&ssl=1
|
||||
[11]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/path-location.png?resize=800%2C241&ssl=1
|
||||
[12]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/09/adding-executable-to-PATH-variable-linux.png?resize=800%2C313&ssl=1
|
||||
[13]: https://itsfoss.com/wp-content/uploads/2022/01/alias-in-ubuntu.png
|
@ -0,0 +1,141 @@
|
||||
[#]: subject: "Using habits to practice open organization principles"
|
||||
[#]: via: "https://opensource.com/open-organization/22/6/using-habits-practice-open-organization-principles"
|
||||
[#]: author: "Ron McFarland https://opensource.com/users/ron-mcfarland"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "Donkey-Hao"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15182-1.html"
|
||||
|
||||
利用习惯练习开放式组织原则
|
||||
======
|
||||
|
||||
> 你可以按照以下步骤,来养成符合开放文化的习惯,并改掉那些不符合开放文化的习惯。
|
||||
|
||||
![Selfcare, drinking tea on the porch][1]
|
||||
|
||||
很久以来,我就对习惯很感兴趣。几年前,我做了一次关于习惯利弊的演讲,并且介绍了如何改变坏习惯、养成好习惯。不久前,我阅读了 Art Markman 教授的 《Smart Thinking》一书,这本书主要讨论的也是习惯。或许你会问习惯与 [开放式组织的原则][2] 有什么关系?这其中有一定的联系!我将会分成两篇文章,来解释你可以如何管理你的习惯。
|
||||
|
||||
在本文中,我们将讨论习惯如何工作的,以及更重要的是你如何去开始改变你的习惯。在下一篇文章中,我们将回顾 Markman 教授在他书中所表达的思想。
|
||||
|
||||
### 开放式组织原则和习惯的交集
|
||||
|
||||
设想你学习过开放式组织的原则,尽管你认为它们很有趣并且很有价值,但是你还没有对这些原则形成自己的习惯。以下就是你现实中会表现出来的样子。
|
||||
|
||||
社区:如果你面对一项重要挑战,但是你不知道如何独自解决它,你很有可能会由于习惯而放弃这项挑战。养成与由志同道合的人组成的社区,共同解决问题的习惯,不是更好吗?
|
||||
|
||||
协作:假设你认为你不善于合作,你喜欢独立完成任务。你知道有一些需要合作才能完成的事情,但是你并没有参与合作的习惯。为了弥补这种情况,你必须养成与他人更多合作的习惯。
|
||||
|
||||
信息共享:假如说你喜欢将你所做的事以及所知道的东西当作秘密。但是,你知道如果你不共享信息,你也无法从他人那里获取有用的信息。因此,你必须拥有共享信息的习惯。
|
||||
|
||||
包容性:想象一下,你与你不熟悉的人,或者是在个性、文化还是语言上都与你不同的人一起工作,你会感到不自在。但是,你知道如果你想要成功的话,你必须要和各种各样的人一同工作。那你该如何培养包容的习惯呢?
|
||||
|
||||
适应能力:假设当你所做的事情不再能达到你所希望的结果之后,你往往会拒绝改变。但是,你知道你必须适应这种情况,并重新调整你的努力,那你如何才能养成适应的习惯呢?
|
||||
|
||||
### 习惯是什么?
|
||||
|
||||
在我给出关于上述开放式组织原则的示例之前,我想先解释一下习惯的一些相关特征。
|
||||
|
||||
* 习惯是重复很多次的行为,最终习惯会成为你下意识的行为。
|
||||
* 习惯是自动的并且当时会感觉良好。当一个人在养成习惯后,做习惯行为会使他感觉很好,但是当他跳出习惯做事时,会感到不舒服。或许之后他会再次考虑尝试。
|
||||
* 一些习惯是有益的,并且能够节省你很多的能量。大脑只占身体质量的 2%,但是却会消耗 20% 的能量。因为大脑在思考和集中精力上需要消耗很多能量,你可以通过培养下意识的习惯来节省能量。
|
||||
* 一些习惯对你有害,因此你渴望改变这些坏习惯。
|
||||
* 所有的习惯都会给你回报,即使回报是短暂的。
|
||||
* 习惯是基于你熟悉的事情和你知道的东西而形成的,即使你可能并不一定需要这个习惯。
|
||||
|
||||
### 养成习惯的 3 个步骤
|
||||
|
||||
1. 提示(触发器):首先,提示或者触发器会告诉大脑,进入之前学习的习惯性行为的自动模式之中。这里的提示可以是某件事,比如每天在确定的时间点、在确定的地点,看到一包糖果或者看到电视购物节目,亦或者看到某个特定的人。时间压力会触发你去做例行事项(routine)。在令人崩溃的环境下也会触发例行事项。简而言之,某件事提醒你开始做一些固定的事情。
|
||||
2. <ruby>例行事项<rt>routine</rt></ruby>:例行事项会被触发。一个例行事项是一系列的身体、心理或者情绪上的表现,可以是非常复杂的,也可以十分简单。诸如与心情相关的一些习惯可以在很短时间内被触发。
|
||||
3. 奖励:最后一步是奖励,奖励会帮助你的大脑计算一个特定的行为是否值得记住。奖励的范围很广泛,可以是食物或者其他令你感到快乐的东西。
|
||||
|
||||
### 商业环境中的坏习惯
|
||||
|
||||
习惯不仅仅是个人行为。所有的组织或多或少都有一些好的坏的制度习惯。然而,一些组织会有先见之明地设计好他们的习惯,而其他组织却不会设计习惯,只是随着竞争或者担心落伍而演变。以下是一些组织的坏习惯示例:
|
||||
|
||||
* 总是晚提交报告
|
||||
* 单独工作或者分组合作,然而采用相反的方法才合适
|
||||
* 上级对下级施压很大
|
||||
* 不关心销售额的下降
|
||||
* 由于内卷,销售团队之间不协同合作
|
||||
* 让一个健谈的人主导会议
|
||||
|
||||
### 逐步改变习惯
|
||||
|
||||
习惯不是一成不变的,你可以改变你的行为习惯。首先,要知道不能一下子改变所有坏习惯。相反,先找到一个关键的习惯进行改变,这会产生小而快速的奖励。请记住,改变了一个关键的习惯后,会产生连锁反应。
|
||||
|
||||
以下是你可以用来改变任何习惯的四步框架,其中还包括与开放式组织原则相关的习惯。
|
||||
|
||||
#### 第一步:调整例行事项
|
||||
|
||||
确定你的习惯循环和例行事项,例如,当面临一件你无法独自解决的重大挑战之时。例行事项(你表现出的行为)最容易确定,所以先从它下手:例如,“在我的组织中,没人愿意和别人讨论问题。大家都会早早地放弃”。决定好你想要调整、改变或者学习的事情:例如:“每次重大挑战到来的时候,我应该和他人讨论一下,并且尝试建立一个志同道合、有能力解决问题的社区。”
|
||||
|
||||
#### 第二步:有奖励的实验
|
||||
|
||||
奖励是很重要的,因为它会满足你强烈的渴望。但是,我们通常没有意识到强烈的渴望会驱动我们的行为。只有在事后,才会被我们察觉。比方说,开会时很多次你都想尽快离开会议室,避免讨论话题,即使内心清楚你应该弄明白如何解决问题。
|
||||
|
||||
要了解强烈的渴望是什么,你必须要实验。这可能会花费你几天、几周甚至更久的时间。你必须要感受到触发压力,才能完全识别它。例如,问问你自己当你试图推卸责任时的感受。
|
||||
|
||||
把你自己当作科学家,进行实验并收集数据。这是你调查研究的步骤:
|
||||
|
||||
1. 第一个行为结束后,开始调整后面的行为,看看有没有奖励变化。例如,如果你每次碰到自己无法解决的挑战时都放弃,那么奖励就是不承担责任的解脱。更好的解决方法是与至少一个同样关心该问题的人讨论该问题。关键是要测试不同的假设,以确定哪种渴望驱使你的日常生活。你真的想逃避责任吗?
|
||||
2. 在经历四至五个不同的例行事项和奖励之后,写下在收到每个奖励后立即想到的前三、四件事。例如,你不会在面对挑战时放弃,而是与其他人讨论这个问题。然后,你决定可以做什么。
|
||||
3. 写下你的感受或渴望后,设置一个 15 分钟的计时器。当计时器结束时,问问自己是否依旧渴望。在屈服于渴望之前,请休息一会儿并再考虑一两次这个问题。这会迫使你意识到这一刻,并帮助你稍后回忆起你当时的想法。
|
||||
4. 试着记住你在那一刻的想法和感受,然后在例行事项后 15 分钟。如果渴望消失了,你就已经确定了回报是什么。
|
||||
|
||||
#### 第三步:分析出坏习惯的提示或触发器
|
||||
|
||||
坏习惯的提示信息很难鉴定,因为通常有太多信息干扰你未定型的行为。要在干扰中鉴别提示,你可以在你的坏习惯出现的时候,观察以下四个因素:
|
||||
|
||||
地点:它在哪里发生?例如:“我最大的挑战在会议中出现。”
|
||||
|
||||
时间:它什么时候出现?例如:“如果我累了,下午的会议就是在浪费时间,因为我没兴趣付出努力。”
|
||||
|
||||
感受:你当时的情绪状态是怎样的?例如:“当我听到这个问题时,我感到压力山大并且很沮丧。”
|
||||
|
||||
人们:当时有谁或者哪一类人在你周围,还是你是独自一人?例如:“在会议上,大多数人似乎对这个问题也不感兴趣。剩下的人主导会议讨论。”
|
||||
|
||||
#### 第四步:制定养成好习惯的计划
|
||||
|
||||
一旦你确定奖励可以驱动你的行为,某些提示会触发你的坏习惯,那你就可以开始改变你的行动。请跟随以下三个简单的步骤:
|
||||
|
||||
1. 首先,规划好习惯的提示。例如:“在会议上,我将发现并将我的注意力集中在重要的问题上。”
|
||||
2. 其次,选择一种能带来相同回报的好行为,但不会遭受你现在坏习惯的惩罚。例如:“我将找到解决这个问题的方法,并考虑我需要哪些资源和技能才能成功。当我创建一个能够成功解决问题的社区时,我会感觉很棒。”
|
||||
3. 最后,让你选择的行为成为深思熟虑的选择,直到你不再需要考虑它,就能下意识地做它了。例如:“我将有意识地关注重要问题,直到我可以不假思索地做到这一点。我会查看近期会议的安排表,这样我就可以提前知道会发生什么。在每次会议开始前和会议期间,我会问自己‘为什么我会来开会’,来确保我集中注意于重要的事情。”
|
||||
|
||||
#### 制定计划来避免忘记必做事项
|
||||
|
||||
为了成功地开始做你经常忘记的事情,请按照以下步骤:
|
||||
|
||||
1. 计划你想要做什么
|
||||
2. 决定何时完成
|
||||
3. 将计划分为必要的小任务
|
||||
4. 用计时器或者日常计划进行提示,并开始每项任务
|
||||
5. 按计划完成每个任务
|
||||
6. 按时完成后就奖励自己
|
||||
|
||||
### 习惯的改变
|
||||
|
||||
习惯的改变需要很长时间。有时候互助小组会帮助你改变习惯。有时候,在低压力环境中,进行大量的练习和角色预演能够更好地帮助你改变。想要找到有效的奖励,你需要不断的尝试。
|
||||
|
||||
有时,习惯是更重要、更深层次问题的反映。在这些情况下,你可能需要专业帮助。但是,如果你有改变的愿望,并接受在此过程中会有一些小失败,你就可以控制任何习惯。
|
||||
|
||||
在本文中,我使用了使用 *提示-例行事项-奖励* 三个过程的社区开发示例。它同样可以应用于其他开放式组织的原则。我希望这篇文章能让你思考如何通过了解习惯如何运作、采取措施改变习惯,以及制定计划避免忘记你想做的事情,来管理习惯。无论是开放式组织原则,还是其他任何东西,你现在都可以判断出提示、常规和奖励。当提示出现时,这将引导你制定改变习惯的计划。
|
||||
|
||||
在我的下一篇文章中,我将通过 Art Markman 教授在《Smart Thinking》中观点来继续讨论习惯。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/open-organization/22/6/using-habits-practice-open-organization-principles
|
||||
|
||||
作者:[Ron McFarland][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[Donkey-Hao](https://github.com/Donkey-Hao)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/ron-mcfarland
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/coffee_tea_selfcare_wfh_porch_520.png
|
||||
[2]: https://theopenorganization.org/definition/open-organization-definition/
|
@ -0,0 +1,197 @@
|
||||
[#]: subject: "7 summer book recommendations from open source enthusiasts"
|
||||
[#]: via: "https://opensource.com/article/22/6/2022-opensourcecom-summer-reading-list"
|
||||
[#]: author: "Joshua Allen Holm https://opensource.com/users/holmja"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "chai001125"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15157-1.html"
|
||||
|
||||
来自开源爱好者的 7 本读物推荐
|
||||
======
|
||||
|
||||
> 社区的成员们推荐这些书籍,涵盖了从有趣的悬疑小说到发人深省的非小说作品的各种类型,你一定能从中找到一本你想看的书!
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202210/20/115515jsppwzz8s1ssle7p.jpg)
|
||||
|
||||
很高兴能为大家介绍 Opensource.com 的 2022 年暑期阅读清单。今年的榜单包含来自 Opensource.com 社区成员的 7 本精彩的读物推荐。你可以发现各种各样的书籍,涵盖从有趣舒适的谜团到探索发人深省主题的非小说类作品。我希望你能在这个榜单中找到感兴趣的书本。
|
||||
|
||||
希望你喜欢!
|
||||
|
||||
### 《每个 Java 程序员都应该知道的 97 件事:专家的集体智慧》
|
||||
|
||||
![Book title 97 Things Every Java Programmer Should Know][4]
|
||||
|
||||
> **《<ruby>[每个 Java 程序员都应该知道的 97 件事:专家的集体智慧][5]<rt>97 Things Every Java Programmer Should Know: Collective Wisdom from the Experts</rt></ruby>》**
|
||||
|
||||
编辑:Kevlin Henney 和 Trisha Gee
|
||||
|
||||
*[由 Seth Kenlon 推荐][6]*
|
||||
|
||||
这本书是由 73 位在软件行业工作的不同作者共同撰写。它的优秀之处在于它不仅仅适用于 Java 编程。当然,有些章节会涉及 Java,但是也还有一些其他话题,例如了解你的容器环境、如何更快更好地交付软件、以及不要隐藏你的开发工具,这些适用于任何语言的开发。
|
||||
|
||||
更好的是,有些章节同样适用于生活中的问题。将问题和任务分成小的部分是解决任何问题的好建议;建立多样化的团队对所有合作者都很重要;由从散乱的一块块拼图到拼好的完成品,看起来像是拼图玩家的思路,也适用于不同的工作角色。
|
||||
|
||||
每章只有几页,总共有 97 个章节,你可以轻松跳过不适用于你自己的章节。无论你是一直在写 Java 代码、或者只是学过一点 Java,亦或是尚未开始学习 Java,对于对代码和软件开发过程感兴趣的极客来说,这都会是一本好书。
|
||||
|
||||
### 《城市不是计算机:其他的城市智能》
|
||||
|
||||
![Book title A City is Not a Computer][7]
|
||||
|
||||
> **《<ruby>[城市不是计算机:其他的城市智能][8]<rt>A City is Not a Computer: Other Urban Intelligences</rt></ruby>》**
|
||||
|
||||
作者:Shannon Mattern
|
||||
|
||||
*[由 Scott Nesbitt 推荐][9]*
|
||||
|
||||
如今,让一切变得智能已经成为一种 *时尚*:我们的手机、家用电器、手表、汽车,甚至是城市都变得智能化了。
|
||||
|
||||
对于城市的智能化,这意味着传感器变得无处不在,在我们开展业务时收集数据,并根据这些数据向我们推送信息(无论数据有用与否)。
|
||||
|
||||
这就引出了一个问题,将所有高科技技术嵌入到城市中是否会使得城市智能化呢?在《城市不是计算机》这本书中,作者 Shannon Mattern 认为并不是这样的。
|
||||
|
||||
城市智能化的目标之一是为市民提供服务和更好的城市参与感。Mattern 指出,但是实际上,智慧城市“希望将技术专家的管理想法与公共服务相融合,从而将公民重新设置为‘消费者’和‘用户’”,然而,这并不是在鼓励公民积极参与城市的生活和治理。
|
||||
|
||||
第二个问题是关于智慧城市收集的数据。我们不知道收集了什么数据,以及收集了多少数据。我们也不知道这些数据使用在什么地方,以及是谁使用的。收集的数据太多了,以至于处理数据的市政工作人员会不堪重负。他们无法处理所有数据,因此他们专注于短期容易实现的任务,而忽略了更深层次和更紧迫的问题。这绝对达不到在推广智慧城市时所承诺的目标:智慧城市将成为解决城市困境的良药。
|
||||
|
||||
《城市不是计算机》是一本短小精悍、经过深入研究的、反对拥抱智慧城市的论证。这本书让我们思考智慧城市的真正目的:要让百姓真正受益于城市智能化,并引发我们的思考:发展智慧城市是否必要呢。
|
||||
|
||||
### 《git sync 谋杀案》
|
||||
|
||||
![Book title git sync murder][10]
|
||||
|
||||
> **《<ruby>[git sync 谋杀案][11]<rt>git sync murder</rt></ruby>》**
|
||||
|
||||
作者:Michael Warren Lucas
|
||||
|
||||
*[由 Joshua Allen Holm 推荐][12]*
|
||||
|
||||
Dale Whitehead 宁愿呆在家里,通过他的电脑终端与世界连接,尤其是在他参加的最后一次会议上发生的事情之后。在那次会议上,Dale 扮演了一个业余侦探的角色,解决了一桩谋杀案。你可以在该系列的第一本书《<ruby>git commit 谋杀案<rt>git commit murder</rt></ruby>》中读到那个案件。
|
||||
|
||||
现在,Dale 回到家,参加另一个会议,他再次发现自己成为了侦探。在《<ruby>git sync 谋杀案<rt>git sync murder</rt></ruby>》中,Dale 参加了一个当地科技会议/科幻大会,会议上发现一具尸体。这是谋杀,还是只是一场意外?现在,Dale 是这些问题的“专家”,他发现自己被卷入了这件事,并要亲自去弄清楚到底发生了什么。再多说的话就剧透了,所以我能说《git sync 谋杀案》这本书十分引人入胜,而且读起来很有趣。不必先阅读《git commit 谋杀案》,才能阅读《git sync 谋杀案》,但我强烈推荐一起阅读该系列中的这两本书。
|
||||
|
||||
作者 Michael Warren Lucas 的《git 谋杀案》系列非常适合喜欢悬疑小说的科技迷。Lucas 写过很多复杂的技术题材的书,这本书也延续了他的技术题材,《git sync 谋杀案》这本书中的人物在会议活动上谈论技术话题。如果你因为新冠疫情,最近没有参加过会议,怀念参会体验的话,Lucas 将带你参加一个技术会议,其中还有一个谋杀之谜以待解决。Dale Whitehead 是一个有趣的业余侦探,我相信大多数读者会喜欢和 Dale 一起参加技术会议,并充当侦探破解谜案的。
|
||||
|
||||
### 《像女孩一样踢球》
|
||||
|
||||
![Book title Kick Like a Girl][13]
|
||||
|
||||
> **《<ruby>[像女孩一样踢球][14]<rt>Kick Like a Girl</rt></ruby>》**
|
||||
|
||||
作者:Melissa Di Donato Roos
|
||||
|
||||
*[由 Joshua Allen Holm 推荐][15]*
|
||||
|
||||
没有人喜欢被孤立,当女孩 Francesca 想在公园里踢足球时,她也是这样。男孩们不会和她一起玩,因为她是女孩,所以她不高兴地回家了。她的母亲安慰她,讲述了有重要影响力的著名女性的故事。《像女孩一样踢球》中详述的历史人物包括历史中来自许多不同领域的女性。读者将了解 Frida Kahlo、Madeleine Albright、<ruby>阿达·洛芙莱斯<rt>Ada Lovelace</rt></ruby>、Rosa Parks、Amelia Earhart、<ruby>玛丽·居里<rt>Marie Curie</rt></ruby>(居里夫人)、Valentina Tereshkova、<ruby>弗洛伦斯·南丁格尔<rt>Florence Nightingale</rt></ruby> 和 Malala Yousafzai 的故事。听完这些鼓舞人心的人物故事后,Francesca 回到公园,向男孩们发起了一场足球挑战。
|
||||
|
||||
《像女孩一样踢球》这本书的特色是作者 Melissa Di Donato Roos(SUSE 的 CEO,LCTT 译注:SUSE 是一家总部位于德国的软件公司,创立于 1992 年,以提供企业级 Linux 为主要业务)引人入胜的写作和 Ange Allen 的出色插图。这本书非常适合年轻读者,他们会喜欢押韵的文字和书中的彩色插图。Melissa Di Donato Roos 还写了另外两本童书,《<ruby>美人鱼如何便便<rt>How Do Mermaids Poo?</rt></ruby>》和《<ruby>魔盒<rt>The Magic Box</rt></ruby>》,这两本书也都值得一读。
|
||||
|
||||
### 《这是我的!:所有权的潜规则如何控制着我们的生活》
|
||||
|
||||
![Book title Mine!][16]
|
||||
|
||||
> **《<ruby>[这是我的!:所有权的潜规则如何控制着我们的生活][17]<rt>Mine!: How the Hidden Rules of Ownership Control Our Lives</rt></ruby>》**
|
||||
|
||||
作者:Michael Heller 和 James Salzman
|
||||
|
||||
*[由 Bryan Behrenshausen 推荐][18]*
|
||||
|
||||
作者 Michael Heller 和 James Salzman 在文章《这是我的!》中写道:“你对所有权的很多了解都是错误的”。这是一种被吸引到开源领域的人不得不接受所有权规则的对抗性邀请。这本书肯定是为开源爱好者而写的,他们对代码、思想、各种知识产权的所有权的看法往往与主流观点和普遍接受的认知不同。在本书中,Heller 和 Salzman 列出了“所有权的隐藏规则”,这些规则管理着谁能控制对什么事物的访问。这些所有权规则是微妙的、强大的、有着深刻的历史惯例。这些所有权规则已经变得如此普遍,以至于看起来无可争议,这是因为“先到先得”或“种瓜得瓜,种豆得豆”的规则已经成为陈词滥调。然而,我们看到它们无处不在:在飞机上,为宝贵的腿部空间而战;在街道上,邻居们为铲好雪的停车位发生争执;在法庭上,陪审团决定谁能控制你的遗产和你的 DNA。在当下的数字时代,所有权的替代理论能否为重新思考基本权利创造空间?作者们认为这是可以的。如果这是正确的,我们可能会回应:在未来,开源软件能否成为所有权运作的模型呢?
|
||||
|
||||
### 《并非所有童话故事都有幸福的结局:雪乐山公司的兴衰》
|
||||
|
||||
![Book Title Not All Fairy Tales Have Happy Endings][19]
|
||||
|
||||
> **《<ruby>[并非所有童话故事都有幸福的结局:雪乐山公司的兴衰][20]<rt>Not All Fairy Tales Have Happy Endings: The Rise and Fall of Sierra On-Line</rt></ruby>》**
|
||||
|
||||
作者:Ken Williams
|
||||
|
||||
*[由 Joshua Allen Holm 推荐][21]*
|
||||
|
||||
在 1980 年代和 1990 年代,<ruby>雪乐山公司<rt>Sierra On-Line</rt></ruby>是计算机软件行业的巨头。这家由 Ken 和 Roberta Williams 夫妻创立的公司,出身并不起眼,但却发布了许多标志性的电脑游戏。《<ruby>国王密使<rt>King's Quest</rt></ruby>》、《<ruby>宇宙传奇<rt>Space Quest</rt></ruby>》、《<ruby>荣耀任务<rt>Quest for Glory</rt></ruby>》、《Leisure Suit Larry》 和 《<ruby>狩魔猎人<rt>Gabriel Knight</rt></ruby>》 只是该公司几个最大的专属系列中的很小一部分。
|
||||
|
||||
《并非所有童话故事都有幸福的结局》这本书,涵盖了从雪乐山公司发布第一款游戏 《<ruby>[神秘屋][22]<rt>Mystery House</rt></ruby>》,到该公司不幸地被 CUC 国际公司收购以及后续的所有内容。雪乐山品牌在被收购后仍存活了一段时间,但 Williams 创立的雪乐山已不复存在。Ken Williams 以一种只有他才能做到的方式,讲述了雪乐山公司的整个历史。雪乐山的历史叙述穿插了一些 Williams 提出的管理和计算机编程建议的章节。虽然 Ken Williams 在写这本书时,已经离开这个行业很多年了,但他的建议仍然非常重要。
|
||||
|
||||
虽然雪乐山公司已不复存在,但该公司对计算机游戏行业产生了持久的影响。对于任何对计算机软件历史感兴趣的人来说,《并非所有童话故事都有美好的结局》都是值得一读的。雪乐山公司在其鼎盛时期处于游戏开发的最前沿,从带领公司走过那个激动人心的岁月的 Ken Williams 身上,我们可以学到许多宝贵的经验。
|
||||
|
||||
### 《新机器的灵魂》
|
||||
|
||||
![Book title The Soul of a New Machine][23]
|
||||
|
||||
> **《<ruby>[新机器的灵魂][24]<rt>The Soul of a New Machine</rt></ruby>》**
|
||||
|
||||
作者:Tracy Kidder
|
||||
|
||||
*[由 Guarav Kamathe 推荐][25]*
|
||||
|
||||
我是计算机历史的狂热读者。知道这些人们如此依赖(并且经常被认为是理所当然)的计算机是如何形成的,真是令人着迷!我是在 [Bryan Cantrill][27] 的博客文章中,第一次听说 《[新机器的灵魂][26]》这本书的。这是一本由 [Tracy Kidder][29] 编著的非虚构书籍,于 1981 年出版,作者 Tracy Kidder也因此获得了 [普利策奖][30]。故事发生在 1970 年代,想象一下你是负责设计 [下一代计算机][31] 工程团队中的一员。故事的背景是在<ruby>通用数据公司<rt>Data General Corporation</rt></ruby>,该公司当时是一家小型计算机供应商,正在与美国<ruby>数字设备公司<rt>Digital Equipment Corporation</rt></ruby>(DEC)的 32 位 VAX 计算机相竞争。该书概述了通用数据公司内部两个相互竞争的团队,都想在设计新机器上一展身手,结果导致了一场争斗。接下来,细致地描绘了随之展开的事件。这本书深入地讲述了相关工程师的思想、他们的工作环境、他们在此过程中面临的技术挑战、他们是如何克服这些困难的、以及压力如何影响到了他们的个人生活等等。任何想知道计算机是怎么制造出来的人都应该阅读这本书。
|
||||
|
||||
以上就是 2022 年的推荐阅读书目。它提供了很多非常棒的选择,我相信读者们能得到数小时发人深省的阅读时光。想获取更多书籍推荐,请查看我们历年的阅读书目。
|
||||
|
||||
* [2021 年 Opensource.com 推荐阅读书目][32]
|
||||
* [2020 年 Opensource.com 推荐阅读书目][33]
|
||||
* [2019 年 Opensource.com 推荐阅读书目][34]
|
||||
* [2018 年 Open Organization 推荐阅读书目][35]
|
||||
* [2016 年 Opensource.com 推荐阅读书目][36]
|
||||
* [2015 年 Opensource.com 推荐阅读书目][37]
|
||||
* [2014 年 Opensource.com 推荐阅读书目][38]
|
||||
* [2013 年 Opensource.com 推荐阅读书目][39]
|
||||
* [2012 年 Opensource.com 推荐阅读书目][40]
|
||||
* [2011 年 Opensource.com 推荐阅读书目][41]
|
||||
* [2010 年 Opensource.com 推荐阅读书目][42]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/6/2022-opensourcecom-summer-reading-list
|
||||
|
||||
作者:[Joshua Allen Holm][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[chai001125](https://github.com/chai001125)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/holmja
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/tea-cup-mug-flowers-book-window.jpg
|
||||
[2]: https://unsplash.com/@sixteenmilesout?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
||||
[3]: https://unsplash.com/s/photos/tea?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
||||
[4]: https://opensource.com/sites/default/files/2022-06/97_Things_Every_Java_Programmer_Should_Know_1.jpg
|
||||
[5]: https://www.oreilly.com/library/view/97-things-every/9781491952689/
|
||||
[6]: https://opensource.com/users/seth
|
||||
[7]: https://opensource.com/sites/default/files/2022-06/A_City_is_Not_a_Computer_0.jpg
|
||||
[8]: https://press.princeton.edu/books/paperback/9780691208053/a-city-is-not-a-computer
|
||||
[9]: https://opensource.com/users/scottnesbitt
|
||||
[10]: https://opensource.com/sites/default/files/2022-06/git_sync_murder_0.jpg
|
||||
[11]: https://mwl.io/fiction/crime#gsm
|
||||
[12]: https://opensource.com/users/holmja
|
||||
[13]: https://opensource.com/sites/default/files/2022-06/Kick_Like_a_Girl.jpg
|
||||
[14]: https://innerwings.org/books/kick-like-a-girl
|
||||
[15]: https://opensource.com/users/holmja
|
||||
[16]: https://opensource.com/sites/default/files/2022-06/Mine.jpg
|
||||
[17]: https://www.minethebook.com/
|
||||
[18]: https://opensource.com/users/bbehrens
|
||||
[19]: https://opensource.com/sites/default/files/2022-06/Not_All_Fairy_Tales.jpg
|
||||
[20]: https://kensbook.com/
|
||||
[21]: https://opensource.com/users/holmja
|
||||
[22]: https://en.wikipedia.org/wiki/Mystery_House
|
||||
[23]: https://opensource.com/sites/default/files/2022-06/The_Soul_of_a_New_Machine.jpg
|
||||
[24]: https://www.hachettebookgroup.com/titles/tracy-kidder/the-soul-of-a-new-machine/9780316204552/
|
||||
[25]: https://opensource.com/users/gkamathe
|
||||
[26]: https://en.wikipedia.org/wiki/The_Soul_of_a_New_Machine
|
||||
[27]: https://en.wikipedia.org/wiki/Bryan_Cantrill
|
||||
[28]: http://dtrace.org/blogs/bmc/2019/02/10/reflecting-on-the-soul-of-a-new-machine/
|
||||
[29]: https://en.wikipedia.org/wiki/Tracy_Kidder
|
||||
[30]: https://www.pulitzer.org/winners/tracy-kidder
|
||||
[31]: https://en.wikipedia.org/wiki/Data_General_Eclipse_MV/8000
|
||||
[32]: https://opensource.com/article/21/6/2021-opensourcecom-summer-reading-list
|
||||
[33]: https://opensource.com/article/20/6/summer-reading-list
|
||||
[34]: https://opensource.com/article/19/6/summer-reading-list
|
||||
[35]: https://opensource.com/open-organization/18/6/summer-reading-2018
|
||||
[36]: https://opensource.com/life/16/6/2016-summer-reading-list
|
||||
[37]: https://opensource.com/life/15/6/2015-summer-reading-list
|
||||
[38]: https://opensource.com/life/14/6/annual-reading-list-2014
|
||||
[39]: https://opensource.com/life/13/6/summer-reading-list-2013
|
||||
[40]: https://opensource.com/life/12/7/your-2012-open-source-summer-reading
|
||||
[41]: https://opensource.com/life/11/7/summer-reading-list
|
||||
[42]: https://opensource.com/life/10/8/open-books-opensourcecom-summer-reading-list
|
@ -3,14 +3,14 @@
|
||||
[#]: author: "Krishna Mohan Koyya https://www.opensourceforu.com/author/krishna-mohan-koyya/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "MjSeven"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15154-1.html"
|
||||
|
||||
在 Kubernetes 上使用 Flask 的 Python 微服务
|
||||
在 Kubernetes 上使用 Flask 搭建 Python 微服务
|
||||
======
|
||||
|
||||
![Python 微服务][6]
|
||||
![](https://img.linux.net.cn/data/attachment/album/202210/19/124429nmw0xmfz3x3mrrf2.jpg)
|
||||
|
||||
*微服务遵循领域驱动设计(DDD),与开发平台无关。Python 微服务也不例外。Python3 的面向对象特性使得按照 DDD 对服务进行建模变得更加容易。本系列的第 10 部分演示了如何将用户管理系统的查找服务作为 Python 微服务部署在 Kubernetes 上。*
|
||||
|
||||
@ -24,17 +24,17 @@
|
||||
|
||||
Python 是一种通用编程语言,已经存在了大约 30 年。早期,它是自动化脚本的首选。然而,随着 Django 和 Flask 等框架的出现,它的受欢迎程度越来越高,现在各种领域中都在应用它,如企业应用程序开发。数据科学和机器学习进一步推动了它的发展,Python 现在是三大编程语言之一。
|
||||
|
||||
许多人将 Python 的成功归功于它容易编码。这只是一部分原因。只要你的目标是开发小型脚本,Python 就像一个玩具,你会非常喜欢它。然而,当你进入严肃的大规模应用程序开发领域时,你将不得不处理大量的 if 和 else,Python 变得与任何其他平台一样好或一样坏。例如,采用一种面向对象的方法!许多 Python 开发人员甚至可能没意识到 Python 支持类、继承等功能。Python 确实支持成熟的面向对象开发,但是有它自己的方式 -- Pythonic!让我们探索一下!
|
||||
许多人将 Python 的成功归功于它容易编码。这只是一部分原因。只要你的目标是开发小型脚本,Python 就像一个玩具,你会非常喜欢它。然而,当你进入严肃的大规模应用程序开发领域时,你将不得不处理大量的 `if` 和 `else`,Python 变得与任何其他平台一样好或一样坏。例如,采用一种面向对象的方法!许多 Python 开发人员甚至可能没意识到 Python 支持类、继承等功能。Python 确实支持成熟的面向对象开发,但是有它自己的方式 -- Pythonic!让我们探索一下!
|
||||
|
||||
### 领域模型
|
||||
|
||||
添加服务通过将数据保存到一个 MySQL 数据库中来将用户添加到系统中。查找服务的目标是提供一个 REST API 按用户名查找用户。域模型如图 1 所示。它主要由一些值对象组成,如用户实体的用户名、电话以及 UserRepository。
|
||||
`AddService` 通过将数据保存到一个 MySQL 数据库中来将用户添加到系统中。`FindService` 的目标是提供一个 REST API 按用户名查找用户。域模型如图 1 所示。它主要由一些值对象组成,如 `User` 实体的`Name`、`PhoneNumber` 以及 `UserRepository`。
|
||||
|
||||
![图 1: 查找服务的域模型][1]
|
||||
|
||||
让我们从用户名开始。由于它是一个值对象,因此必须在创建时进行验证,并且必须保持不可变。基本结构如所示:
|
||||
让我们从 `Name` 开始。由于它是一个值对象,因此必须在创建时进行验证,并且必须保持不可变。基本结构如所示:
|
||||
|
||||
```python
|
||||
```
|
||||
class Name:
|
||||
value: str
|
||||
def __post_init__(self):
|
||||
@ -42,11 +42,11 @@ class Name:
|
||||
raise ValueError("Invalid Name")
|
||||
```
|
||||
|
||||
如你所见,用户名包含一个字符串类型的值。作为后期初始化的一部分,我们会验证它。
|
||||
如你所见,`Name` 包含一个字符串类型的值。作为后期初始化的一部分,我们会验证它。
|
||||
|
||||
Python 3.7 提供了 @dataclass 装饰器,它提供了许多开箱即用的数据承载类的功能,如构造函数、比较运算符等。如下是装饰后的 Name 类:
|
||||
Python 3.7 提供了 `@dataclass` 装饰器,它提供了许多开箱即用的数据承载类的功能,如构造函数、比较运算符等。如下是装饰后的 `Name` 类:
|
||||
|
||||
```python
|
||||
```
|
||||
from dataclasses import dataclass
|
||||
|
||||
@dataclass
|
||||
@ -57,30 +57,30 @@ class Name:
|
||||
raise ValueError("Invalid Name")
|
||||
```
|
||||
|
||||
以下代码可以创建一个 Name 对象:
|
||||
以下代码可以创建一个 `Name` 对象:
|
||||
|
||||
```python
|
||||
```
|
||||
name = Name("Krishna")
|
||||
```
|
||||
|
||||
value 属性可以按照如下方式读取或写入:
|
||||
`value` 属性可以按照如下方式读取或写入:
|
||||
|
||||
```python
|
||||
```
|
||||
name.value = "Mohan"
|
||||
print(name.value)
|
||||
```
|
||||
|
||||
可以很容易地与另一个 Name 对象比较,如下所示:
|
||||
可以很容易地与另一个 `Name` 对象比较,如下所示:
|
||||
|
||||
```python
|
||||
```
|
||||
other = Name("Mohan")
|
||||
if name == other:
|
||||
print("same")
|
||||
```
|
||||
|
||||
如你所见,对象比较的是值而不是引用。这一切都是开箱即用的。我们还可以通过冻结对象使对象不可变。这是 Name 值对象的最终版本:
|
||||
如你所见,对象比较的是值而不是引用。这一切都是开箱即用的。我们还可以通过冻结对象使对象不可变。这是 `Name` 值对象的最终版本:
|
||||
|
||||
```python
|
||||
```
|
||||
from dataclasses import dataclass
|
||||
|
||||
@dataclass(frozen=True)
|
||||
@ -91,9 +91,9 @@ class Name:
|
||||
raise ValueError("Invalid Name")
|
||||
```
|
||||
|
||||
电话也遵循类似的方法,因为它也是一个值对象:
|
||||
`PhoneNumber` 也遵循类似的方法,因为它也是一个值对象:
|
||||
|
||||
```python
|
||||
```
|
||||
@dataclass(frozen=True)
|
||||
class PhoneNumber:
|
||||
value: int
|
||||
@ -102,9 +102,9 @@ class PhoneNumber:
|
||||
raise ValueError("Invalid Phone Number")
|
||||
```
|
||||
|
||||
用户类是一个实体,不是一个值对象。换句话说,用户是可变的。以下是结构:
|
||||
`User` 类是一个实体,不是一个值对象。换句话说,`User` 是可变的。以下是结构:
|
||||
|
||||
```python
|
||||
```
|
||||
from dataclasses import dataclass
|
||||
import datetime
|
||||
|
||||
@ -121,11 +121,11 @@ class User:
|
||||
self.since = datetime.datetime.now()
|
||||
```
|
||||
|
||||
你能观察到用户并没有冻结,因为我们希望它是可变的。但是,我们不希望所有属性都是可变的。标识字段如 _name 和 _since 是希望不会修改的。那么,这如何做到呢?
|
||||
你能观察到 `User` 并没有冻结,因为我们希望它是可变的。但是,我们不希望所有属性都是可变的。标识字段如 `_name` 和 `_since` 是希望不会修改的。那么,这如何做到呢?
|
||||
|
||||
Python3 提供了所谓的描述符协议,它会帮助我们正确定义 getters 和 setters。让我们使用 @property 装饰器将 getter 添加到 User 的所有三个字段中。
|
||||
Python3 提供了所谓的描述符协议,它会帮助我们正确定义 getter 和 setter。让我们使用 `@property` 装饰器将 getter 添加到 `User` 的所有三个字段中。
|
||||
|
||||
```python
|
||||
```
|
||||
@property
|
||||
def name(self) -> Name:
|
||||
return self._name
|
||||
@ -139,9 +139,9 @@ def since(self) -> datetime.datetime:
|
||||
return self._since
|
||||
```
|
||||
|
||||
电话字段的 setter 可以使用 @<字段>.setter 来装饰:
|
||||
`phone` 字段的 setter 可以使用 `@<字段>.setter` 来装饰:
|
||||
|
||||
```python
|
||||
```
|
||||
@phone.setter
|
||||
def phone(self, phone: PhoneNumber) -> None:
|
||||
if phone is None:
|
||||
@ -149,25 +149,25 @@ def phone(self, phone: PhoneNumber) -> None:
|
||||
self._phone = phone
|
||||
```
|
||||
|
||||
通过重写 \_\_str\_\_() 函数,也可以为 User 提供一个简单的打印方法:
|
||||
通过重写 `__str__()` 函数,也可以为 `User` 提供一个简单的打印方法:
|
||||
|
||||
```python
|
||||
```
|
||||
def __str__(self):
|
||||
return self.name.value + " [" + str(self.phone.value) + "] since " + str(self.since)
|
||||
```
|
||||
|
||||
这样,域模型的实体和值对象就准备好了。创建异常类如下所示:
|
||||
|
||||
```python
|
||||
```
|
||||
class UserNotFoundException(Exception):
|
||||
pass
|
||||
```
|
||||
|
||||
域模型现在只剩下 UserRepository 了。Python 提供了一个名为 abc 的有用模块来创建抽象方法和抽象类。因为 UserRepository 只是一个接口,所以我们可以使用 abc 模块。
|
||||
域模型现在只剩下 `UserRepository` 了。Python 提供了一个名为 `abc` 的有用模块来创建抽象方法和抽象类。因为 `UserRepository` 只是一个接口,所以我们可以使用 `abc` 模块。
|
||||
|
||||
任何继承自 abc.ABC 的类都将变为抽象类,任何带有 @abc.abstractmethod 装饰器的函数都会变为一个抽象函数。下面是 UserRepository 的结构:
|
||||
任何继承自 `abc.ABC` 的类都将变为抽象类,任何带有 `@abc.abstractmethod` 装饰器的函数都会变为一个抽象函数。下面是 `UserRepository` 的结构:
|
||||
|
||||
```python
|
||||
```
|
||||
from abc import ABC, abstractmethod
|
||||
|
||||
class UserRepository(ABC):
|
||||
@ -176,9 +176,9 @@ class UserRepository(ABC):
|
||||
pass
|
||||
```
|
||||
|
||||
UserRepository 遵循仓储模式。换句话说,它在 User 实体上提供适当的 CRUD 操作,而不会暴露底层数据存储语义。在本例中,我们只需要 fetch() 操作,因为查找服务只查找用户。
|
||||
`UserRepository` 遵循仓储模式。换句话说,它在 `User` 实体上提供适当的 CRUD 操作,而不会暴露底层数据存储语义。在本例中,我们只需要 `fetch()` 操作,因为 `FindService` 只查找用户。
|
||||
|
||||
因为 UserRepository 是一个抽象类,我们不能从抽象类创建实例对象。创建对象必须依赖于一个具体类实现这个抽象类。数据层 UserRepositoryImpl 提供了 UserRepository 的具体实现:
|
||||
因为 `UserRepository` 是一个抽象类,我们不能从抽象类创建实例对象。创建对象必须依赖于一个具体类实现这个抽象类。数据层 `UserRepositoryImpl` 提供了 `UserRepository` 的具体实现:
|
||||
|
||||
```
|
||||
class UserRepositoryImpl(UserRepository):
|
||||
@ -186,9 +186,9 @@ class UserRepositoryImpl(UserRepository):
|
||||
pass
|
||||
```
|
||||
|
||||
由于添加服务将用户数据存储在一个 MySQL 数据库中,因此 UserRepositoryImpl 也必须连接到相同的数据库去检索数据。下面是连接到数据库的代码。主要,我们正在使用 MySQL 的连接库。
|
||||
由于 `AddService` 将用户数据存储在一个 MySQL 数据库中,因此 `UserRepositoryImpl` 也必须连接到相同的数据库去检索数据。下面是连接到数据库的代码。注意,我们正在使用 MySQL 的连接库。
|
||||
|
||||
```python
|
||||
```
|
||||
from mysql.connector import connect, Error
|
||||
|
||||
class UserRepositoryImpl(UserRepository):
|
||||
@ -211,9 +211,9 @@ class UserRepositoryImpl(UserRepository):
|
||||
raise e
|
||||
```
|
||||
|
||||
在上面的片段中,我们使用 root 用户,admin 密码连接到一个名为 mysqldb 的数据库服务器,使用名为 glarimy 的数据库(模式)。在演示代码中是可以包含这些信息的,但在生产中不建议这么做,因为这会暴露敏感信息。
|
||||
在上面的片段中,我们使用用户 `root` / 密码 `admin` 连接到一个名为 `mysqldb` 的数据库服务器,使用名为 `glarimy` 的数据库(模式)。在演示代码中是可以包含这些信息的,但在生产中不建议这么做,因为这会暴露敏感信息。
|
||||
|
||||
fetch() 操作的逻辑非常直观,它对 ums_users 表执行 SELECT 查询。回想一下,添加服务正在将用户数据写入同一个表中。如果 SELECT 查询没有返回记录,fetch() 函数将抛出 UserNotFoundException 异常。否则,它会从记录中构造 User 实体并将其返回给调用者。这没有什么特殊的。
|
||||
`fetch()` 操作的逻辑非常直观,它对 `ums_users` 表执行 SELECT 查询。回想一下,`AddService` 正在将用户数据写入同一个表中。如果 SELECT 查询没有返回记录,`fetch()` 函数将抛出 `UserNotFoundException` 异常。否则,它会从记录中构造 `User` 实体并将其返回给调用者。这没有什么特殊的。
|
||||
|
||||
### 应用层
|
||||
|
||||
@ -221,9 +221,9 @@ fetch() 操作的逻辑非常直观,它对 ums_users 表执行 SELECT 查询
|
||||
|
||||
![图 2: 添加服务的应用层][2]
|
||||
|
||||
众所周知,一个 DTO 只是一个没有任何业务逻辑的数据容器。它主要用于在查找服务和外部服务之间传输数据。我们只是提供了在 REST 层中将 UserRecord 转换为字典以便用于 JSON 传输:
|
||||
众所周知,一个 DTO 只是一个没有任何业务逻辑的数据容器。它主要用于在 `FindService` 和外部之间传输数据。我们只是提供了在 REST 层中将 `UserRecord` 转换为字典以便用于 JSON 传输:
|
||||
|
||||
```python
|
||||
```
|
||||
class UserRecord:
|
||||
def toJSON(self):
|
||||
return {
|
||||
@ -233,9 +233,9 @@ class UserRecord:
|
||||
}
|
||||
```
|
||||
|
||||
控制器的工作是将 DTO 转换为用于域服务的域对象,反之亦然。可以从 find() 操作中观察到这一点。
|
||||
控制器的工作是将 DTO 转换为用于域服务的域对象,反之亦然。可以从 `find()` 操作中观察到这一点。
|
||||
|
||||
```python
|
||||
```
|
||||
class UserController:
|
||||
|
||||
def __init__(self):
|
||||
@ -253,11 +253,11 @@ class UserController:
|
||||
return None
|
||||
```
|
||||
|
||||
find() 操作接收一个字符串作为用户名,然后将其转换为 Name 对象,并调用 UserRepository 获取相应的 User 对象。如果找到了,则使用检索到的 User 对象创建 UserRecord。回想一下,将域对象转换为 DTO 是很有必要的,这样可以对外部服务隐藏域模型。
|
||||
`find()` 操作接收一个字符串作为用户名,然后将其转换为 `Name` 对象,并调用 `UserRepository` 获取相应的 `User` 对象。如果找到了,则使用检索到的 `User`` 对象创建 `UserRecord`。回想一下,将域对象转换为 DTO 是很有必要的,这样可以对外部服务隐藏域模型。
|
||||
|
||||
UserController 不需要有多个实例,它也可以是单例的。通过重写 \_\_new\_\_,可以将其建模为一个单例。
|
||||
`UserController` 不需要有多个实例,它也可以是单例的。通过重写 `__new__`,可以将其建模为一个单例。
|
||||
|
||||
```python
|
||||
```
|
||||
class UserController:
|
||||
def __new__(self):
|
||||
if not hasattr(self, ‘instance’):
|
||||
@ -279,11 +279,11 @@ class UserController:
|
||||
return None
|
||||
```
|
||||
|
||||
我们已经完全实现了查找服务的模型,剩下的唯一任务是将其作为 REST 服务公开。
|
||||
我们已经完全实现了 `FindService` 的模型,剩下的唯一任务是将其作为 REST 服务公开。
|
||||
|
||||
### REST API
|
||||
|
||||
查找服务只提供一个 API,那就是通过用户名查找用户。显然 URI 如下所示:
|
||||
`FindService` 只提供一个 API,那就是通过用户名查找用户。显然 URI 如下所示:
|
||||
|
||||
```
|
||||
GET /user/{name}
|
||||
@ -294,26 +294,26 @@ GET /user/{name}
|
||||
我们可以使用 Flask 框架来构建 REST API,它最初的目的是使用 Python 开发 Web 应用程序。除了 HTML 视图,它还进一步扩展到支持 REST 视图。我们选择这个框架是因为它足够简单。
|
||||
创建一个 Flask 应用程序:
|
||||
|
||||
```python
|
||||
```
|
||||
from flask import Flask
|
||||
app = Flask(__name__)
|
||||
```
|
||||
|
||||
然后为 Flask 应用程序定义路由,就像函数一样简单:
|
||||
|
||||
```python
|
||||
```
|
||||
@app.route('/user/<name>')
|
||||
def get(name):
|
||||
pass
|
||||
```
|
||||
|
||||
注意 @app.route 映射到 API /user/<name>,与之对应的函数的 get()。
|
||||
注意 `@app.route` 映射到 API `/user/<name>`,与之对应的函数的 `get()`。
|
||||
|
||||
如你所见,每次用户访问 API 如 http://server:port/user/Krishna 时,都将调用这个 get() 函数。Flask 足够智能,可以从 URL 中提取 'Krishna' 作为用户名,并将其传递给 get() 函数。
|
||||
如你所见,每次用户访问 API 如 `http://server:port/user/Krishna` 时,都将调用这个 `get()` 函数。Flask 足够智能,可以从 URL 中提取 `Krishna` 作为用户名,并将其传递给 `get()` 函数。
|
||||
|
||||
get() 函数很简单。它要求控制器找到该用户,并将其与通常的 HTTP 头一起打包为 JSON 格式后返回。如果控制器返回 None,则 get() 函数返回合适的 HTTP 状态码。
|
||||
`get()` 函数很简单。它要求控制器找到该用户,并将其与通常的 HTTP 头一起打包为 JSON 格式后返回。如果控制器返回 `None`,则 `get()` 函数返回合适的 HTTP 状态码。
|
||||
|
||||
```python
|
||||
```
|
||||
from flask import jsonify, abort
|
||||
|
||||
controller = UserController()
|
||||
@ -326,17 +326,16 @@ else:
|
||||
return resp
|
||||
```
|
||||
|
||||
最后,我们需要 Flask 应用程序提供服务,可以使用 waitress 服务:
|
||||
最后,我们需要 Flask 应用程序提供服务,可以使用 `waitress` 服务:
|
||||
|
||||
```python
|
||||
```
|
||||
from waitress import serve
|
||||
serve(app, host="0.0.0.0", port=8080)
|
||||
```
|
||||
|
||||
在上面的片段中,应用程序在本地主机的 8080 端口上提供服务。
|
||||
最终代码如下所示:
|
||||
在上面的片段中,应用程序在本地主机的 8080 端口上提供服务。最终代码如下所示:
|
||||
|
||||
```python
|
||||
```
|
||||
from flask import Flask, jsonify, abort
|
||||
from waitress import serve
|
||||
|
||||
@ -358,11 +357,11 @@ serve(app, host="0.0.0.0", port=8080)
|
||||
|
||||
### 部署
|
||||
|
||||
查询服务的代码已经准备完毕。除了 REST API 之外,它还有域模型、数据层和应用程序层。下一步是构建此服务,将其容器化,然后部署到 Kubernetes 上。此过程与部署其他服务妹有任何区别,但有一些 Python 特有的步骤。
|
||||
`FindService` 的代码已经准备完毕。除了 REST API 之外,它还有域模型、数据层和应用程序层。下一步是构建此服务,将其容器化,然后部署到 Kubernetes 上。此过程与部署其他服务妹有任何区别,但有一些 Python 特有的步骤。
|
||||
|
||||
在继续前进之前,让我们来看下文件夹和文件结构:
|
||||
|
||||
```bash
|
||||
```
|
||||
+ ums-find-service
|
||||
+ ums
|
||||
- domain.py
|
||||
@ -373,11 +372,11 @@ serve(app, host="0.0.0.0", port=8080)
|
||||
- kube-find-deployment.yml
|
||||
```
|
||||
|
||||
如你所见,整个工作文件夹都位于 ums-find-service 下,它包含了 ums 文件夹中的代码和一些配置文件,例如 Dockerfile、requirements.txt 和 kube-find-deployment.yml。
|
||||
如你所见,整个工作文件夹都位于 `ums-find-service` 下,它包含了 `ums` 文件夹中的代码和一些配置文件,例如 `Dockerfile`、`requirements.txt` 和 `kube-find-deployment.yml`。
|
||||
|
||||
domain.py 包含域模型,data.py 包含 UserRepositoryImpl,app.py 包含剩余代码。我们已经阅读过代码了,现在我们来看看配置文件。
|
||||
`domain.py` 包含域模型,`data.py` 包含 `UserRepositoryImpl`,`app.py` 包含剩余代码。我们已经阅读过代码了,现在我们来看看配置文件。
|
||||
|
||||
第一个是 requirements.txt,它声明了 Python 系统需要下载和安装的外部依赖项。我们需要用查找服务中用到的每个外部 Python 模块来填充它。如你所见,我们使用了 MySQL 连接器、Flask 和 Waitress 模块。因此,下面是 requirements.txt 的内容。
|
||||
第一个是 `requirements.txt`,它声明了 Python 系统需要下载和安装的外部依赖项。我们需要用查找服务中用到的每个外部 Python 模块来填充它。如你所见,我们使用了 MySQL 连接器、Flask 和 Waitress 模块。因此,下面是 `requirements.txt` 的内容。
|
||||
|
||||
```
|
||||
Flask==2.1.1
|
||||
@ -386,7 +385,7 @@ mysql-connector-python
|
||||
waitress
|
||||
```
|
||||
|
||||
第二步是在 Dockerfile 中声明一些必要显示(to 校正:这里不太理解该如何翻译),如下:
|
||||
第二步是在 `Dockerfile` 中声明 Docker 相关的清单,如下:
|
||||
|
||||
```
|
||||
FROM python:3.8-slim-buster
|
||||
@ -401,7 +400,7 @@ ENTRYPOINT ["python"]
|
||||
CMD ["/ums/app.py"]
|
||||
```
|
||||
|
||||
总的来说,我们使用 Python 3.8 作为基线,除了移动 requirements.txt 之外,我们还将代码从 ums 文件夹移动到 Docker 容器中对应的文件夹中。然后,我们指示容器运行 pip3 install 命令安装对应模块。最后,我们向外暴露 8080 端口(因为 waitress 运行在此端口上)。
|
||||
总的来说,我们使用 Python 3.8 作为基线,除了移动 `requirements.txt` 之外,我们还将代码从 `ums` 文件夹移动到 Docker 容器中对应的文件夹中。然后,我们指示容器运行 `pip3 install` 命令安装对应模块。最后,我们向外暴露 8080 端口(因为 waitress 运行在此端口上)。
|
||||
|
||||
为了运行此服务,我们指示容器使用使用以下命令:
|
||||
|
||||
@ -409,7 +408,7 @@ CMD ["/ums/app.py"]
|
||||
python /ums/app.py
|
||||
```
|
||||
|
||||
一旦 Dockerfile 准备完成,在 ums-find-service 文件夹中运行以下命令,创建 Docker 镜像:
|
||||
一旦 `Dockerfile` 准备完成,在 `ums-find-service` 文件夹中运行以下命令,创建 Docker 镜像:
|
||||
|
||||
```
|
||||
docker build -t glarimy/ums-find-service
|
||||
@ -430,7 +429,7 @@ docker push glarimy/ums-find-service
|
||||
|
||||
最后一步是为 Kubernetes 部署构建清单。
|
||||
|
||||
在之前的文章中,我们已经介绍了如何建立 Kubernetes 集群、部署和使用服务的方法。我假设仍然使用之前文章中的 manifest 文件来部署添加服务、MySQL、Kafka 和 Zookeeper。我们只需要将以下内容添加到 kube-find-deployment.yml 文件中:
|
||||
在之前的文章中,我们已经介绍了如何建立 Kubernetes 集群、部署和使用服务的方法。我假设仍然使用之前文章中的清单文件来部署添加服务、MySQL、Kafka 和 Zookeeper。我们只需要将以下内容添加到 `kube-find-deployment.yml` 文件中:
|
||||
|
||||
```
|
||||
apiVersion: apps/v1
|
||||
@ -469,9 +468,9 @@ selector:
|
||||
app: ums-find-service
|
||||
```
|
||||
|
||||
上面 manifest 的第一部分声明了 glarimy/ums-find-service 镜像的查找服务,它包含三个副本。它还暴露 8080 端口。manifet 的后半部分声明了一个Kubernetes 服务作为查找服务部署的前端。请记住,在之前文章中,mysqldb 服务已经是上述清单的一部分了。
|
||||
上面清单文件的第一部分声明了 `glarimy/ums-find-service` 镜像的 `FindService`,它包含三个副本。它还暴露 8080 端口。清单的后半部分声明了一个 Kubernetes 服务作为 `FindService` 部署的前端。请记住,在之前文章中,mysqldb 服务已经是上述清单的一部分了。
|
||||
|
||||
运行以下命令在 Kubernetes 集群上部署 manifest:
|
||||
运行以下命令在 Kubernetes 集群上部署清单文件:
|
||||
|
||||
```
|
||||
kubectl create -f kube-find-deployment.yml
|
||||
@ -487,7 +486,7 @@ kubectl get services
|
||||
|
||||
![图 3: Kubernetes 服务][3]
|
||||
|
||||
它会列出集群上运行的所有服务。注意查找服务的外部 ip,使用 curl 调用此服务:
|
||||
它会列出集群上运行的所有服务。注意查找服务的外部 IP,使用 `curl` 调用此服务:
|
||||
|
||||
```
|
||||
curl http://10.98.45.187:8080/user/KrishnaMohan
|
||||
@ -495,17 +494,17 @@ curl http://10.98.45.187:8080/user/KrishnaMohan
|
||||
|
||||
注意:10.98.45.187 对应查找服务,如图 3 所示。
|
||||
|
||||
如果我们使用添加服务创建一个名为 KrishnaMohan 的用户,那么上面的 curl 命令看起来如图 4 所示:
|
||||
如果我们使用 `AddService` 创建一个名为 `KrishnaMohan` 的用户,那么上面的 `curl` 命令看起来如图 4 所示:
|
||||
|
||||
![图 4: 查找服务][4]
|
||||
|
||||
用户管理系统(UMS)的体系结构包含添加服务和查找服务,以及存储和消息传递所需的后端服务,如图 5 所示。可以看到终端用户使用 ums 添加服务的 IP 地址添加新用户,使用 ums 查找服务的 IP 地址查找已有用户。每个 Kubernetes 服务都由三个对应容器的节点支持。还要注意:同样的 mysqldb 服务用于存储和检索用户数据。
|
||||
用户管理系统(UMS)的体系结构包含 `AddService` 和 `FindService`,以及存储和消息传递所需的后端服务,如图 5 所示。可以看到终端用户使用 `ums-add-service` 的 IP 地址添加新用户,使用 `ums-find-service` 的 IP 地址查找已有用户。每个 Kubernetes 服务都由三个对应容器的节点支持。还要注意:同样的 mysqldb 服务用于存储和检索用户数据。
|
||||
|
||||
![图 5: UMS 的添加服务和查找服务][5]
|
||||
|
||||
### 其他服务
|
||||
|
||||
UMS 系统还包含两个服务:查找服务和日志服务。在本系列的下一部分中,我们将在 Node 平台上设计这些服务,并将它们部署到同一个 Kubernetes 集群,以演示多语言微服务架构的真正魅力。最后,我们将观察一些与微服务相关的设计模式。
|
||||
UMS 系统还包含两个服务:`SearchService` 和 `JournalService`。在本系列的下一部分中,我们将在 Node 平台上设计这些服务,并将它们部署到同一个 Kubernetes 集群,以演示多语言微服务架构的真正魅力。最后,我们将观察一些与微服务相关的设计模式。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -514,7 +513,7 @@ via: https://www.opensourceforu.com/2022/09/python-microservices-using-flask-on-
|
||||
作者:[Krishna Mohan Koyya][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[MjSeven](https://github.com/MjSeven)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -3,28 +3,26 @@
|
||||
[#]: author: "sk https://ostechnix.com/author/sk/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "MjSeven"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15158-1.html"
|
||||
|
||||
在 Linux 和 Unix 中如何从命令行查找默认网关的 IP 地址
|
||||
在 Linux 中如何从命令行查找默认网关的 IP 地址
|
||||
======
|
||||
Linux 下查找网关或路由器 IP 地址的 5 种方法。
|
||||
|
||||
**网关**是一个节点或一个路由器,当连接到同一路由器时,它允许两个或多个 IP 地址不同的主机相互通信。如果没有网关,它们将无法相互通信。换句话说,网关充当接入点,将网络数据从本地网络传输到远程网络。在本指南中,我们将看到在 Linux 和 Unix 中从命令行找到默认网关的所有可能方法。
|
||||
![](https://img.linux.net.cn/data/attachment/album/202210/20/161605f5ispl5jslbpllss.jpg)
|
||||
|
||||
#### 内容
|
||||
> Linux 下查找网关或路由器 IP 地址的 5 种方法。
|
||||
|
||||
1. 在 Linux 中查找默认网关 1.1 使用 ip 命令查找默认网关 1.2 使用 route 命令显示默认网关 IP 地址 1.3 使用 netstat 命令查看网关 IP 地址 1.4 使用 routel 命令打印默认网关或路由器 IP 地址 1.5 从以太网配置文件中查找网关
|
||||
2. 总结
|
||||
**网关** 是一个节点或一个路由器,当连接到同一路由器时,它允许两个或多个 IP 地址不同的主机相互通信。如果没有网关,它们将无法相互通信。换句话说,网关充当接入点,将网络数据从本地网络传输到远程网络。在本指南中,我们将看到在 Linux 和 Unix 中从命令行找到默认网关的所有可能方法。
|
||||
|
||||
### 在 Linux 中查找默认网关
|
||||
|
||||
Linux 中有各种各样的命令行工具可用于查看网关 IP 地址。最常用的工具是:**ip**、**ss** 和 **netcat**。我们将通过示例了解如何使用每种工具查看默认网关。
|
||||
Linux 中有各种各样的命令行工具可用于查看网关 IP 地址。最常用的工具是:`ip`、`ss` 和 `netcat`。我们将通过示例了解如何使用每种工具查看默认网关。
|
||||
|
||||
#### 1. 使用 ip 命令查找默认网关
|
||||
#### 1、使用 ip 命令查找默认网关
|
||||
|
||||
**ip** 命令用于显示和操作 Linux 中的路由、网络设备、接口和隧道。
|
||||
`ip` 命令用于显示和操作 Linux 中的路由、网络设备、接口和隧道。
|
||||
|
||||
要查找默认网关或路由器 IP 地址,只需运行:
|
||||
|
||||
@ -44,7 +42,7 @@ $ ip r
|
||||
$ ip route show
|
||||
```
|
||||
|
||||
**示例输出:**
|
||||
示例输出:
|
||||
|
||||
```
|
||||
default via 192.168.1.101 dev eth0 proto static metric 100
|
||||
@ -52,34 +50,30 @@ default via 192.168.1.101 dev eth0 proto static metric 100
|
||||
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.20 metric 100
|
||||
```
|
||||
|
||||
你从输出中看到了 **"default via 192.168.1.101"** 这一行吗?它就是默认网关。我的默认网关是 **192.168.1.101**。
|
||||
你从输出中看到了 `default via 192.168.1.101` 这一行吗?它就是默认网关。我的默认网关是 `192.168.1.101`。
|
||||
|
||||
你可以使用 **-4** 参数只**显示 IPv4 网关**:
|
||||
你可以使用 `-4` 参数只`显示 IPv4 网关`:
|
||||
|
||||
```
|
||||
$ ip -4 route
|
||||
```
|
||||
|
||||
或者,使用 **`-6`** 参数只**显示 IPv6 网关**:
|
||||
或者,使用 `-6` 参数只**显示 IPv6 网关**:
|
||||
|
||||
```
|
||||
$ ip -6 route
|
||||
```
|
||||
|
||||
如你所见,IP 地址和子网详细信息也一并显示了。如果你想只显示默认网关,排除所有其他细节,可以使用 `ip route` 搭配 **`awk`** 命令,如下所示。
|
||||
|
||||
使用 `ip route` 和 `grep` 查找默认网关 IP 地址,执行命令:
|
||||
|
||||
```(to 校正,此条命令原文无,怀疑是作者忘记加了)
|
||||
$ ip route | grep default
|
||||
```
|
||||
如你所见,IP 地址和子网详细信息也一并显示了。如果你想只显示默认网关,排除所有其他细节,可以使用 `ip route` 搭配 `awk` 命令,如下所示。
|
||||
|
||||
使用 `ip route` 和 `awk` 命令打印网关地址,执行命令:
|
||||
|
||||
```(to 校正,译注:wsl1 上无输出结果,正常 Linux 发行版无问题)
|
||||
```
|
||||
$ ip route | awk '/^default/{print $3}'
|
||||
```
|
||||
|
||||
(LCTT 译注:wsl1 上无输出结果,正常 Linux 发行版无问题)
|
||||
|
||||
或者:
|
||||
|
||||
```
|
||||
@ -88,7 +82,7 @@ $ ip route show default | awk '{print $3}'
|
||||
|
||||
这将只列出网关 IP:
|
||||
|
||||
**示例输出:**
|
||||
示例输出:
|
||||
|
||||
```
|
||||
192.168.1.101
|
||||
@ -96,18 +90,20 @@ $ ip route show default | awk '{print $3}'
|
||||
|
||||
![使用 ip 命令列出默认网关][1]
|
||||
|
||||
你也可以使用 **[grep][2]** 命令配合 `ip route` 对默认网关进行过滤。
|
||||
你也可以使用 [grep][2] 命令配合 `ip route` 对默认网关进行过滤。
|
||||
|
||||
使用 `ip route` 和 `grep` 查找默认网关 IP 地址,执行命令:
|
||||
|
||||
```
|
||||
$ ip route | grep default
|
||||
default via 192.168.1.101 dev eth0 proto static metric 100
|
||||
```
|
||||
|
||||
在最新的 Linux 发行版中,`ip route` 是查找默认网关 ip 地址的推荐命令。然而,你们中的一些人可能仍然在使用传统的工具,如 `route` 和 **`netstat`**。旧习难改,对吧?下面的部分将介绍如何在 Linux 中使用 `route` 和 `netstat` 命令确定网关。
|
||||
在最新的 Linux 发行版中,`ip route` 是查找默认网关 IP 地址的推荐命令。然而,你们中的一些人可能仍然在使用传统的工具,如 `route` 和 `netstat`。旧习难改,对吧?下面的部分将介绍如何在 Linux 中使用 `route` 和 `netstat` 命令确定网关。
|
||||
|
||||
#### 2. 使用 route 命令显示默认网关 IP 地址
|
||||
#### 2、使用 route 命令显示默认网关 IP 地址
|
||||
|
||||
**route** 命令用于在较老的 Linux 发行版中显示和操作路由表,如 RHEL 6、CentOS 6 等。
|
||||
`route` 命令用于在较老的 Linux 发行版中显示和操作路由表,如 RHEL 6、CentOS 6 等。
|
||||
|
||||
如果你正在使用较老的 Linux 发行版,你可以使用 `route` 命令来显示默认网关。
|
||||
|
||||
@ -119,7 +115,7 @@ default via 192.168.1.101 dev eth0 proto static metric 100
|
||||
$ dnf provides route
|
||||
```
|
||||
|
||||
**示例输出:**
|
||||
示例输出:
|
||||
|
||||
```
|
||||
net-tools-2.0-0.52.20160912git.el8.x86_64 : Basic networking tools
|
||||
@ -133,7 +129,7 @@ Matched from:
|
||||
Filename : /usr/sbin/route
|
||||
```
|
||||
|
||||
如你所见,net-tools 包提供了 `route` 命令。所以,让我们使用以下命令来安装它:
|
||||
如你所见,`net-tools` 包提供了 `route` 命令。所以,让我们使用以下命令来安装它:
|
||||
|
||||
```
|
||||
$ sudo dnf install net-tools
|
||||
@ -145,7 +141,7 @@ $ sudo dnf install net-tools
|
||||
$ route -n
|
||||
```
|
||||
|
||||
**示例输出:**
|
||||
示例输出:
|
||||
|
||||
```
|
||||
Kernel IP routing table
|
||||
@ -157,13 +153,13 @@ Destination Gateway Genmask Flags Metric Ref Use Iface
|
||||
|
||||
![使用 route 命令显示默认网关 IP 地址][3]
|
||||
|
||||
如你所见,网关 IP 地址是 192.168.1.101。你还将在 Flags 下面看到两个字母 **UG**。字母 **U** 代表接口是 **UP**,**G** 表示网关。
|
||||
如你所见,网关 IP 地址是 192.168.1.101。你还将在 Flags 下面看到两个字母 `UG`。字母 `U` 代表接口是 “Up”(在运行),`G` 表示 “Gateway”(网关)。
|
||||
|
||||
#### 3. 使用 netstat 命令查看网关 IP 地址
|
||||
#### 3、使用 netstat 命令查看网关 IP 地址
|
||||
|
||||
**Netstat** 会输出 Linux 网络子系统的信息。使用 netstat 工具,我们可以在 Linux 和 Unix 系统中打印网络连接、路由表、接口统计信息、伪装连接和组播成员关系。
|
||||
`netstat` 会输出 Linux 网络子系统的信息。使用 `netstat` 工具,我们可以在 Linux 和 Unix 系统中打印网络连接、路由表、接口统计信息、伪装连接和组播成员关系。
|
||||
|
||||
Netstat 是 net-tools 包的一部分,所以确保你已经在 Linux 系统中安装了它。使用以下命令在基于 RHEL 的系统中安装它:
|
||||
`netstat` 是 `net-tools` 包的一部分,所以确保你已经在 Linux 系统中安装了它。使用以下命令在基于 RHEL 的系统中安装它:
|
||||
|
||||
```
|
||||
$ sudo dnf install net-tools
|
||||
@ -175,7 +171,7 @@ $ sudo dnf install net-tools
|
||||
$ netstat -rn
|
||||
```
|
||||
|
||||
**示例输出:**
|
||||
示例输出:
|
||||
|
||||
```
|
||||
Kernel IP routing table
|
||||
@ -187,26 +183,26 @@ Destination Gateway Genmask Flags MSS Window irtt Iface
|
||||
|
||||
![使用 netstat 命令查看网关 IP 地址][4]
|
||||
|
||||
`netstat` 命令与 `route` 命令的输出信息相同。如上输出可知,网关的 IP 地址为 192.168.1.191,UG 表示网关连接的网卡(NIC)是有效的,G 表示网关。
|
||||
`netstat` 命令与 `route` 命令的输出信息相同。如上输出可知,网关的 IP 地址为 `192.168.1.191`,`UG` 表示网关连接的网卡是有效的,`G` 表示网关。
|
||||
|
||||
请注意 `netstat` 也已弃用,建议使用 **ss** 命令代替 netstat。
|
||||
请注意 `netstat` 也已弃用,建议使用 `ss` 命令代替 `netstat`。
|
||||
|
||||
#### 4. 使用 routel 命令打印默认网关或路由器 IP 地址
|
||||
#### 4、使用 routel 命令打印默认网关或路由器 IP 地址
|
||||
|
||||
**routel** 是一个脚本,它以一种漂亮格式的输出路由。routel 脚本的输出让一些人认为比 `ip route` 列表更直观。
|
||||
`routel` 是一个脚本,它以一种漂亮格式的输出路由。`routel` 脚本的输出让一些人认为比 `ip route` 列表更直观。
|
||||
|
||||
routel 脚本也是 net-tools 包的一部分。
|
||||
`routel` 脚本也是 `net-tools` 包的一部分。
|
||||
|
||||
打印默认网关或路由器 IP 地址,运行 routel 脚本,不带任何参数,如下所示:
|
||||
打印默认网关或路由器 IP 地址,不带任何参数运行 `routel` 脚本,如下所示:
|
||||
|
||||
```
|
||||
$ routel
|
||||
```
|
||||
|
||||
**示例输出:**
|
||||
示例输出:
|
||||
|
||||
```
|
||||
target gateway source proto scope dev tbl
|
||||
target gateway source proto scope dev tbl
|
||||
default 192.168.1.101 static eth0
|
||||
172.17.0.0/ 16 172.17.0.1 kernel linkdocker0
|
||||
192.168.1.0/ 24 192.168.1.20 kernel link eth0
|
||||
@ -241,11 +237,11 @@ $ routel | grep default
|
||||
default 192.168.1.101 static eth0
|
||||
```
|
||||
|
||||
#### 5. 从以太网配置文件中查找网关
|
||||
#### 5、从以太网配置文件中查找网关
|
||||
|
||||
如果你在 **[Linux 或 Unix 中配置了静态 IP 地址][6],你可以通过查看网络配置文件查看默认网关或路由器 IP 地址。
|
||||
如果你在 [Linux 或 Unix 中配置了静态 IP 地址][6],你可以通过查看网络配置文件查看默认网关或路由器 IP 地址。
|
||||
|
||||
在基于 RPM 的系统上,如 Fedora、RHEL、CentOS、AlmaLinux 和 Rocky Linux 等,网络接口卡(简称 **NIC**)配置存储在 **/etc/sysconfig/network-scripts/** 目录下。
|
||||
在基于 RPM 的系统上,如 Fedora、RHEL、CentOS、AlmaLinux 和 Rocky Linux 等,网络接口卡配置存储在 `/etc/sysconfig/network-scripts/` 目录下。
|
||||
|
||||
查找网卡的名称:
|
||||
|
||||
@ -253,7 +249,7 @@ $ routel | grep default
|
||||
# ip link show
|
||||
```
|
||||
|
||||
**示例输出:**
|
||||
示例输出:
|
||||
|
||||
```
|
||||
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
|
||||
@ -262,13 +258,13 @@ $ routel | grep default
|
||||
link/ether d2:85:0c:c7:c1:c3 brd ff:ff:ff:ff:ff:ff link-netnsid 0
|
||||
```
|
||||
|
||||
网卡名为 **eth0**。所以让我们打开这个 NIC 文件的网卡配置:
|
||||
网卡名为 `eth0`。所以让我们打开这个网卡文件的网卡配置:
|
||||
|
||||
```
|
||||
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
|
||||
```
|
||||
|
||||
**示例输出:**
|
||||
示例输出:
|
||||
|
||||
```
|
||||
DEVICE=eth0
|
||||
@ -283,13 +279,13 @@ DNS1=8.8.8.8
|
||||
|
||||
如你所见,网关 IP 为 `192.168.1.101`。
|
||||
|
||||
在 Debian、Ubuntu 及其衍生版中,所有的网络配置文件都存储在 **/etc/network** 目录下。
|
||||
在 Debian、Ubuntu 及其衍生版中,所有的网络配置文件都存储在 `/etc/network` 目录下。
|
||||
|
||||
```
|
||||
$ cat /etc/network/interfaces
|
||||
```
|
||||
|
||||
**示例输出:**
|
||||
示例输出:
|
||||
|
||||
```
|
||||
auto ens18
|
||||
@ -313,7 +309,7 @@ via: https://ostechnix.com/find-default-gateway-linux/
|
||||
作者:[sk][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[MjSeven](https://github.com/MjSeven)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,141 @@
|
||||
[#]: subject: "The story behind Joplin, the open source note-taking app"
|
||||
[#]: via: "https://opensource.com/article/22/9/joplin-interview"
|
||||
[#]: author: "Richard Chambers https://opensource.com/users/20i"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "MareDevi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15161-1.html"
|
||||
|
||||
开源笔记软件 Joplin 背后的故事
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202210/21/112935tfapsvpac06h2sth.jpg)
|
||||
|
||||
> Laurent Cozic 与我坐下来,讨论了 Joplin 是如何开始的,以及这个开源笔记软件的下一步计划。
|
||||
|
||||
在这次采访中,我见到了笔记软件 Joplin 的创建者 Laurent Cozic。[Joplin][2] 是 [20i][3] 奖励的赢家,所以我想了解是什么让它如此成功,以及他如何实现的。
|
||||
|
||||
### 你能概述一下什么是 Joplin 吗?
|
||||
|
||||
[Joplin][4] 是一个开源的笔记软件。它可以让你捕获你的想法并从任何设备安全地访问它们。
|
||||
|
||||
### 显然,还有很多其他的笔记应用,那么除了免费使用之外,它还有什么不同呢?
|
||||
|
||||
对我们的许多用户来说,它是开源的这一事实是一个非常重要的方面,因为这意味着没有供应商对数据的封锁,而且数据可以很容易地被导出并以各种方式访问。
|
||||
|
||||
我们还关注用户的安全和数据隐私,特别是端到端加密同步功能,以及通过对应用的任何连接保持透明。我们还与安全研究人员合作,以保证软件更加安全。
|
||||
|
||||
最后,Joplin 可以通过几种不同的方式进行定制 —— 通过插件(可以添加新的功能)和主题来定制应用程序的外观。我们还公开了一个数据 API,它允许第三方应用程序访问 Joplin 的数据。
|
||||
|
||||
> **[相关阅读:5 款 Linux 上的笔记应用][5]**
|
||||
|
||||
### 这是一个竞争非常激烈的市场,那么是什么激发了你创建它的想法?
|
||||
|
||||
这是有原因的的。我从 2016 年开始研究它,因为我不喜欢现有的商业记事应用程序:笔记、附件或标签不能轻易被其他工具导出或操作。
|
||||
|
||||
这主要是由于供应商的封锁,另外还有供应商缺乏动力,因为他们没有动力帮助用户将他们的数据转移到其他应用程序。还有一个问题是,这些公司通常会以纯文本形式保存笔记,而这有可能造成数据隐私和安全方面的问题。
|
||||
|
||||
因此,我决定开始创建一个简单且具有同步功能的移动和终端应用程序,使我的笔记能够轻松地在我的设备上访问。之后又创建了桌面应用程序,项目从此开始发展。
|
||||
|
||||
![Chrome OS 上 Joplin 的图片][6]
|
||||
|
||||
### 编写 Joplin 花了多长时间呢?
|
||||
|
||||
自 2016 年以来,我一直在断断续续地开发,但并不是专门去维护。不过在过去的两年里,我更加专注于它。
|
||||
|
||||
### 对于准备创建自己的开源应用的人,你有什么建议?
|
||||
|
||||
挑选一个你自己使用的项目和你喜欢的技术来工作。
|
||||
|
||||
管理一个开源项目有时是很困难的,所以必须要有足够的兴趣去让它变得更有价值。那么我想 “早发布,多发布” 原则在这里也适用,这样你就可以衡量用户的兴趣,以及是否有必要花时间进一步开发这个项目。
|
||||
|
||||
### 有多少人参与了 Joplin 的开发?
|
||||
|
||||
有 3、4 人参与开发。目前,我们还有 6 名学生在 <ruby>谷歌编程之夏<rt>Google Summer of Code</rt></ruby> 中为这个项目工作。
|
||||
|
||||
### 许多人都在创建开源项目,但 Joplin 对你来说是一个巨大的成功。关于如何获得关注,你能否给开发者提供一些建议?
|
||||
|
||||
没有简单的公式,说实话,我不认为我可以在另一个项目中复制这种成功!你必须对你所做的事情充满热情,但同时也要严谨、有组织、稳步前进,确保代码质量保持高水平,并拥有大量的测试单元以防止回归。
|
||||
|
||||
同时,对于你收到的用户反馈保持开放的态度,并在此基础上改进项目。
|
||||
|
||||
一旦你掌握了这些,剩下的可能就全靠运气了 —— 如果你做的项目让很多人都感兴趣,事情可能会顺利进行!
|
||||
|
||||
### 一旦你得到关注,但如果你没有传统的营销预算,你如何保持这种势头?
|
||||
|
||||
我认为这在于倾听项目周围的社区。举个例子来说,我从未计划过建立一个论坛,但有人在 GitHub 上提出了这个建议,所以我创建了一个论坛,它成为了一个分享想法、讨论功能、提供支持等很好的方式。社区也普遍欢迎新人,这形成了一种良性循环。
|
||||
|
||||
除此以外,定期就项目进行沟通也很重要。
|
||||
|
||||
我们没有一个公开的路线图,因为大多数功能的 ETA 通常是 “我不知道”,但我会试图就即将到来的功能、新版本等进行沟通。我们也会就重要的事件进行沟通,特别是谷歌编程之夏,或者当我们有机会赢得像 20i FOSS 奖的时候。
|
||||
|
||||
最后,我们很快将在伦敦举行一次面对面的聚会,这是与社区和合作者保持联系的另一种方式。
|
||||
|
||||
### 用户的反馈是如何影响路线图的?
|
||||
|
||||
很明显,贡献者们经常仅仅因为他们需要某个特性而从事某些工作。但除此之外,我们还根据论坛和 GitHub 问题追踪器上的信息,追踪对用户来说似乎最重要的功能。
|
||||
|
||||
例如,移动应用程序现在具有很高的优先级,因为我们经常从用户那里听到,它的限制和缺陷是有效使用 Joplin 的一个问题。
|
||||
|
||||
![桌面使用Joplin的图片][8]
|
||||
|
||||
### 你是如何跟上最新的开发和编码的发展的?
|
||||
|
||||
主要是通过阅读 Hacker News!
|
||||
|
||||
### 你有个人最喜欢的自由/开源软件可以推荐吗?
|
||||
|
||||
在不太知名的项目中,[SpeedCrunch][9] 作为一个计算器非常好。它有很多功能,而且很好的是它能保留以前所有计算的历史。
|
||||
|
||||
我还使用 [KeepassXC][10] 作为密码管理器。在过去的几年里,它一直在稳步改进。
|
||||
|
||||
最后,[Visual Studio Code][11] 作为一个跨平台的文本编辑器非常棒。
|
||||
|
||||
### 我原以为 Joplin 是以 Janis 的名字命名的,但维基百科告诉我来自是 Scoot Joplin。你为什么选择这个名字?
|
||||
|
||||
我起初想把它命名为 “jot-it”,但我想这个名字已经被人占了。
|
||||
|
||||
由于我那时经常听 Scoot Joplin 的 <ruby>拉格泰姆<rt>ragtime</rt></ruby>音乐(我相当痴迷于此),我决定使用他的名字。
|
||||
|
||||
我认为产品名称的含义并不太重要,只要名称本身易于书写、发音、记忆,并与一些积极的东西(或至少没有消极的东西)有关。
|
||||
|
||||
我觉得 “Joplin” 符合所有条件。
|
||||
|
||||
### 关于 Joplin 的计划,你还有什么可以说的吗?也许是对一个新功能的独家预告?
|
||||
|
||||
如前所述,我们非常希望在用户体验设计和新功能方面对移动应用进行改进。
|
||||
|
||||
我们也在考虑创建一个 “插件商店”,以便更容易地浏览和安装插件。
|
||||
|
||||
感谢 Laurent — 祝 Joplin 的未来好运。
|
||||
|
||||
*图片来自: (Opensource.com, CC BY-SA 4.0)*
|
||||
|
||||
*[这篇访谈最初发表在 20i 博客上,已获得许可进行转载。][12]*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/9/joplin-interview
|
||||
|
||||
作者:[Richard Chambers][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[MareDevi](https://github.com/MareDevi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/20i
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/wfh_work_home_laptop_work.png
|
||||
[2]: https://joplinapp.org/
|
||||
[3]: https://www.20i.com/foss-awards/winners
|
||||
[4]: https://opensource.com/article/19/1/productivity-tool-joplin
|
||||
[5]: https://opensource.com/article/22/8/note-taking-apps-linux
|
||||
[6]: https://opensource.com/sites/default/files/2022-09/joplin-chrome-os.png
|
||||
[7]: https://opensource.com/article/21/10/google-summer-code
|
||||
[8]: https://opensource.com/sites/default/files/2022-09/joplin-desktop.png
|
||||
[9]: https://heldercorreia.bitbucket.io/speedcrunch/
|
||||
[10]: https://opensource.com/article/18/12/keepassx-security-best-practices
|
||||
[11]: https://opensource.com/article/20/6/open-source-alternatives-vs-code
|
||||
[12]: https://www.20i.com/blog/joplin-creator-laurent-cozic/
|
@ -0,0 +1,96 @@
|
||||
[#]: subject: "How to Update Google Chrome on Ubuntu Linux"
|
||||
[#]: via: "https://itsfoss.com/update-google-chrome-ubuntu/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15163-1.html"
|
||||
|
||||
如何在 Ubuntu Linux 上更新谷歌 Chrome
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202210/22/085013gihsi4rtmpkmj4yb.png)
|
||||
|
||||
> 你设法在你的 Ubuntu 系统上安装了谷歌 Chrome 浏览器。现在你想知道如何让浏览器保持更新。
|
||||
|
||||
在 Windows 和 macOS 上,当 Chrome 上有可用更新时,你会在浏览器中收到通知,你可以从浏览器中点击更新选项。
|
||||
|
||||
Linux 中的情况有所不同。你不会从浏览器更新 Chrome。你要使用系统更新对其进行更新。
|
||||
|
||||
是的。当 Chrome 上有可用的新更新时,Ubuntu 会通过系统更新工具通知你。
|
||||
|
||||
![当有新版本的 Chrome 可用时,Ubuntu 会发送通知][1]
|
||||
|
||||
你只需单击“<ruby>立即安装<rt>Install Now</rt></ruby>”按钮,在被提示时输入你的帐户密码并将 Chrome 更新到新版本。
|
||||
|
||||
让我告诉你为什么会在系统级别看到更新,以及如何在命令行中更新谷歌 Chrome。
|
||||
|
||||
### 方法 1:使用系统更新更新谷歌浏览器
|
||||
|
||||
你最初是如何安装 Chrome 的?你从 [Chrome 网站][2] 获得了 deb 安装程序文件,并使用它来 [在 Ubuntu 上安装 Chrome][3]。
|
||||
|
||||
当你这样做时,谷歌会在你系统的源列表中添加一个仓库条目。这样,你的系统就会信任来自谷歌仓库的包。
|
||||
|
||||
![谷歌 Chrome 存储库添加到 Ubuntu 系统][4]
|
||||
|
||||
对于添加到系统中的所有此类条目,包更新通过 Ubuntu 更新程序集中进行。
|
||||
|
||||
这就是为什么当 Google Chrome(和其他已安装的应用)有可用更新时,你的 Ubuntu 系统会向你发送通知。
|
||||
|
||||
![Chrome 更新可通过系统更新与其他应用一起使用][5]
|
||||
|
||||
**单击“<ruby>立即安装<rt>Install Now</rt></ruby>”按钮并在要求时输入你的密码**。很快,系统将安装所有可升级的软件包。
|
||||
|
||||
根据更新偏好,通知可能不是立即的。如果需要,你可以手动运行更新程序工具并查看适用于你的 Ubuntu 系统的更新。
|
||||
|
||||
![运行软件更新程序以查看你的系统有哪些可用更新][6]
|
||||
|
||||
### 方法 2:在 Ubuntu 命令行中更新 Chrome
|
||||
|
||||
如果你更喜欢终端而不是图形界面,你也可以使用命令更新 Chrome。
|
||||
|
||||
打开终端,并依次运行以下命令:
|
||||
|
||||
```
|
||||
sudo apt update
|
||||
|
||||
sudo apt --only-upgrade install google-chrome-stable
|
||||
```
|
||||
|
||||
第一条命令更新包缓存,以便你的系统知道可以升级哪些包。
|
||||
|
||||
第二条命令 [仅更新单个包][7],即谷歌 Chrome(安装为 `google-chrome-stable`)。
|
||||
|
||||
### 总结
|
||||
|
||||
如你所见,Ubuntu 比 Windows 更精简。你会随其他系统更新一起更新 Chrome。
|
||||
|
||||
顺便一提,如果你对它不满意,你可以了解 [从 Ubuntu 中删除 Google Chrome][8]。
|
||||
|
||||
Chrome 是一款不错的浏览器。你可以通过 [使用 Chrome 中的快捷方式][9] 来试验它,因为它使浏览体验更加流畅。
|
||||
|
||||
在 Ubuntu 上享受 Chrome!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/update-google-chrome-ubuntu/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://itsfoss.com/wp-content/uploads/2021/06/chrome-edge-update-ubuntu.png
|
||||
[2]: https://www.google.com/chrome/
|
||||
[3]: https://itsfoss.com/install-chrome-ubuntu/
|
||||
[4]: https://itsfoss.com/wp-content/uploads/2021/06/google-chrome-repo-ubuntu.png
|
||||
[5]: https://itsfoss.com/wp-content/uploads/2021/06/chrome-edge-update-ubuntu.png
|
||||
[6]: https://itsfoss.com/wp-content/uploads/2022/04/software-updater-ubuntu-22-04.jpg
|
||||
[7]: https://itsfoss.com/apt-upgrade-single-package/
|
||||
[8]: https://itsfoss.com/uninstall-chrome-from-ubuntu/
|
||||
[9]: https://itsfoss.com/google-chrome-shortcuts/
|
@ -3,37 +3,38 @@
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15155-1.html"
|
||||
|
||||
Xubuntu 22.10:热门新功能
|
||||
======
|
||||
这是 Xubuntu 22.10 Kinetic Kudu 及其新功能的快速总结。
|
||||
|
||||
> 这是 Xubuntu 22.10 Kinetic Kudu 及其新功能的快速总结。
|
||||
|
||||
![Xubuntu 22.10 桌面][1]
|
||||
|
||||
质量需要时间来建立。它适用于生活的所有阶段,包括软件。
|
||||
质量需要时间来建立。它适用于生活的各个方面,包括软件。
|
||||
|
||||
自 Xfce 4.16 发布以来,Xfce 4.17(开发版)已经被添加了许多新功能。这包括核心 Xfce、原生应用,GNOME 43、MATE 1.26 和 libadwaita。由于 Xfce 也是 GNOME 和 MATE 的组合,正确地合并和测试这些更改需要时间。
|
||||
|
||||
在 Xubuntu 22.10 Kinetic Kudu 版本中,你将体验到自 2020 年 12 月以来所做的所有改进:将近两年的错误修复和增强。
|
||||
|
||||
让我们快速查看一下时间表。目前,Xubuntu 22.10 beta 已经发布并正在测试中(本页末尾的 ISO 链接)。最终版本预计于 2022 年 10 月 20 日发布。
|
||||
让我们快速查看一下时间表。目前,Xubuntu 22.10 beta 已经发布,并正在测试中(本问末尾提供了 ISO 链接)。最终版本预计于 2022 年 10 月 20 日发布。
|
||||
|
||||
### Xubuntu 22.10 新功能
|
||||
|
||||
#### 核心更新和 GNOME 框架
|
||||
|
||||
Xubuntu 22.10 的核心是基于 Ubuntu 22.10 的 Linux Kernel 5.19。另外,Xfce 桌面版是 Xfce 4.17。
|
||||
在其核心,Xubuntu 22.10 同其基于的 Ubuntu 22.10 一样,采用 Linux 内核 5.19。另外,Xfce 桌面版本是 Xfce 4.17。
|
||||
|
||||
4.17 版本是一个开发标签,因为它是下一个大版本 Xfce 4.18 的垫脚石,该版本 [计划在今年圣诞节发布][2]。
|
||||
4.17 版本是一个开发版,因为它是下一个大版本 Xfce 4.18 的基础,该版本 [计划在今年圣诞节发布][2]。
|
||||
|
||||
让我们谈谈 GNOME 和相关应用。 Xubuntu 22.10 中的 Xfce 4.17 首次获得了带有 GNOME 43 更新的 libadwaita。这意味着默认的 GNOME 应用程序可以在 Xfce 桌面下正确呈现。
|
||||
|
||||
话虽如此,GNOME Software 43 在 Xubuntu 22.10 的 Xfce 桌面下看起来很棒。如果你将其与 Xfce 原生外观和带有 CSD/SSD(例如 Disk)的 GNOME 应用进行比较,它们看起来都很整洁。
|
||||
这就是说,GNOME <ruby>软件应用<rt>Software</rt></ruby> 43 在 Xubuntu 22.10 的 Xfce 桌面下看起来很棒。如果你将其与 Xfce 原生外观和带有 CSD/SSD(例如 “<ruby>磁盘应用<rt>Disk</rt></ruby>”)的 GNOME 应用进行比较,它们看起来都很顺眼。
|
||||
|
||||
我对 GNOME Software 43 在 Xfce 桌面下的 libadwaita/GTK4 渲染效果如此之好感到惊讶。
|
||||
我对 GNOME 软件应用 43 在 Xfce 桌面下的 libadwaita/GTK4 渲染效果如此之好感到惊讶。
|
||||
|
||||
![在 Xubuntu 22.10 中一起使用三种不同的窗口][3]
|
||||
|
||||
@ -41,11 +42,11 @@ Xubuntu 22.10 的核心是基于 Ubuntu 22.10 的 Linux Kernel 5.19。另外,X
|
||||
|
||||
Xfce 桌面带来了自己的原生应用集。在此版本中,所有应用都从 4.16 升级到 4.17 版本。
|
||||
|
||||
值得注意的变化包括 Xfce 面板获得了对任务列表插件的中键单击支持和托盘时钟中的二进制时间模式。pulse 音频插件引入了一个新的录音指示器,可以过滤掉多个按钮按下事件。
|
||||
值得注意的变化包括:Xfce 面板获得了对任务列表插件的中键单击支持,和托盘时钟中的二进制时间模式。PulseAudio 插件引入了一个新的录音指示器,可以过滤掉多个按钮按下事件。
|
||||
|
||||
Thunar 文件管理器获得了大量的底层功能和错误修复。如果你将 Thunar 4.16 与 Thunar 4.17 进行比较,它是变化巨大的。更改包括更新的上下文菜单、路径栏、搜索、导航等。你可以在[此处][4]阅读 Thunar 的所有更改日志。
|
||||
Thunar 文件管理器获得了大量的底层功能和错误修复。如果你将 Thunar 4.16 与 Thunar 4.17 进行比较,它是变化巨大的。更改包括更新的上下文菜单、路径栏、搜索、导航等。你可以在 [此处][4] 阅读 Thunar 的所有更改日志。
|
||||
|
||||
此外,截屏应用 screenshooter 默认支持 WebP。蓝牙管理器 Blueman 在系统托盘新增配置文件切换器并更新 Catfish 文件搜索工具。
|
||||
此外,截屏应用 ScreenShooter 默认支持 WebP。蓝牙管理器 Blueman 在系统托盘新增配置文件切换器,并更新了 Catfish 文件搜索工具。
|
||||
|
||||
这是 Xfce 应用版本的更新列表和指向其更改日志的链接(如果你想进一步挖掘)。
|
||||
|
||||
@ -64,30 +65,30 @@ Thunar 文件管理器获得了大量的底层功能和错误修复。如果你
|
||||
|
||||
默认的 elementary-xfce 图标集(浅色和深色)得到了更新,带有额外的精美图标,让你的 Xfce 桌面焕然一新。默认的 Greybird GTK 主题对窗口装饰进行了必要的改进,并添加了 Openbox 支持。
|
||||
|
||||
你可能会注意到的重要且可见的变化之一是 ALT+TAB 外观。图标更大一些,眼睛更舒适,可以在深色背景下更快地切换窗口。
|
||||
你可能会注意到的重要且可见的变化之一是 `ALT+TAB` 外观。图标更大一些,眼睛更舒适,可以在深色背景下更快地切换窗口。
|
||||
|
||||
![在 Xubuntu 22.10 的 elementary-xfce 中更新的图标集示例][15]
|
||||
|
||||
![ALT TAB 有更大的图标][16]
|
||||
|
||||
上述更改使默认应用与基础 [Ubuntu 22.10 版本][17]保持一致。以下是 Xubuntu 22.10 中的更改概括。
|
||||
上述更改使默认应用与其所基于的 [Ubuntu 22.10 版本][17] 保持一致。以下是 Xubuntu 22.10 中的更改概括。
|
||||
|
||||
### 概括
|
||||
|
||||
* Linux Kernel 5.19 和基于 Ubuntu 22.10
|
||||
* Linux 内核 5.19,基于 Ubuntu 22.10
|
||||
* Xfce 桌面版 4.17
|
||||
* 原生应用全部更新到 4.17
|
||||
* 核心与 GNOME 43、libadwaita、GTK4 保持一致
|
||||
* MATE 应用程序升级到 1.26
|
||||
* Mozilla Firefox 网络浏览器 105.0
|
||||
* Mozilla Firefox 网页浏览器 105.0
|
||||
* Thunderbird 邮件客户端 102.3
|
||||
* LibreOffice 7.4.4.2
|
||||
|
||||
### 总结
|
||||
|
||||
Xfce 桌面作为一个整体最关键的变化是在 4.18 版本中到来的。例如,最初的 Wayland 支持、更新的 glib 和 GTK 包。如果一切顺利,你可以在明年 4 月发布的 Xubuntu 中期待这些最好的变化。
|
||||
Xfce 桌面最关键的整体变化将在 4.18 版本中到来。例如,最初的 Wayland 支持、更新的 glib 和 GTK 包。如果一切顺利,你可以在明年 4 月发布的 Xubuntu 中期待这些最好的变化。
|
||||
|
||||
最后,如果你想试用,可以从[这个页面][18]下载 beta 镜像。
|
||||
最后,如果你想试用,可以从 [这个页面][18] 下载 Beta 镜像。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -96,7 +97,7 @@ via: https://www.debugpoint.com/xubuntu-22-10-features/
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,80 @@
|
||||
[#]: subject: "Easiest Way to Open Files as Root in GNOME Files"
|
||||
[#]: via: "https://www.debugpoint.com/gnome-files-root-access/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15168-1.html"
|
||||
|
||||
在 GNOME 文件应用中以 Root 身份打开文件的最简单方法
|
||||
======
|
||||
|
||||
> 这是在 GNOME 文件应用中以 root 身份访问文件或目录的最简单方法。
|
||||
|
||||
![][1]
|
||||
|
||||
在 Windows 中,你通常可以在右键单击上下文菜单中以“以管理员身份打开”的方式打开文件或文件夹。
|
||||
|
||||
该功能是文件管理器的一部分,对于 Windows,它是 Windows 资源管理器的一部分。但是,它是由操作系统及其权限控制模块执行的。
|
||||
|
||||
在 Linux 发行版及其文件管理器中,情况略有不同。不同的桌面有自己的处理方式。
|
||||
|
||||
由于以管理员(root)身份修改文件和文件夹是有风险的,并且可能导致系统损坏,因此用户无法通过文件管理器的 GUI 轻松使用该功能。
|
||||
|
||||
例如,KDE Plasma 的默认文件管理器(Dolphin)最近 [添加了此功能][2],因此当需要 root 权限时,它会通过 PolicyKit KDE Agent(polkit)窗口询问你,如下所示。
|
||||
|
||||
![使用 Polkit 实现 KIO 后的 Dolphin root 访问权限][3]
|
||||
|
||||
而不是相反的方式。比如,你想在文件管理器中通过 root 打开/执行一些东西时,你不能使用 `sudo dolphin` 以 root 权限运行文件管理器本身。
|
||||
|
||||
在某种程度上,它挽救了许多不可预见的情况。但是高级用户总是可以通过终端使用 `sudo` 来完成他们的工作。
|
||||
|
||||
### GNOME 文件应用(Nautilus)和对文件、目录的 root 访问权限
|
||||
|
||||
话虽如此,[GNOME 文件应用][4](又名 Nautilus)有一种方法可以通过 root 打开文件和文件夹。
|
||||
|
||||
以下是方法:
|
||||
|
||||
* 打开 GNOME 文件应用(Nautilus)。
|
||||
* 然后单击左侧窗格中的“<ruby>其他位置<rt>Other Locations</rt></ruby>”。
|
||||
* 按 `CTRL+L` 调出地址栏。
|
||||
* 在地址栏中,输入下面的内容并回车。
|
||||
```
|
||||
admin:///
|
||||
```
|
||||
* 它会要求输入管理员密码。当你成功验证,你就会以管理员身份打开系统。
|
||||
* 现在,从这里开始,无论你做什么,它都是管理员或 root。
|
||||
|
||||
![以管理员身份输入位置地址][5]
|
||||
|
||||
![输入管理员密码][6]
|
||||
|
||||
![以 root 身份打开 GNOME 文件应用][7]
|
||||
|
||||
但是,与往常一样,请小心你作为管理员所做的事情。在你以 root 身份验证自己之后,通常很容易忘记。
|
||||
|
||||
这些选项不容易看到总是有原因的,以防止你和许多新的 Linux 用户破坏他们的系统。
|
||||
|
||||
祝好。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/gnome-files-root-access/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.debugpoint.com/wp-content/uploads/2022/10/nauroot-1024x576.jpg
|
||||
[2]: https://www.debugpoint.com/dolphin-root-access/
|
||||
[3]: https://www.debugpoint.com/wp-content/uploads/2022/02/Dolphin-root-access-after-KIO-with-Polkit-implementation.jpg
|
||||
[4]: https://wiki.gnome.org/Apps/Files
|
||||
[5]: https://www.debugpoint.com/wp-content/uploads/2022/10/Enter-the-location-address-as-admin.jpg
|
||||
[6]: https://www.debugpoint.com/wp-content/uploads/2022/10/Give-admin-password.jpg
|
||||
[7]: https://www.debugpoint.com/wp-content/uploads/2022/10/Opening-GNOME-Files-as-root.jpg
|
@ -3,34 +3,37 @@
|
||||
[#]: author: "Pranav Krishna https://itsfoss.com/author/pranav/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15160-1.html"
|
||||
|
||||
如何在 Arch Linux 中启用 Snap 支持
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202210/21/100128gzzqkf3fcg3f6q3n.jpg)
|
||||
|
||||
Snap 是由 Ubuntu 的母公司 Canonical 设计的通用包格式。有些人不喜欢 Snap,但它有一些优势。
|
||||
|
||||
通常,某些应用仅以 Snap 格式提供。这为你提供了在 Arch Linux 中启用 snap 的充分理由。
|
||||
通常,某些应用仅以 Snap 格式提供。这为你提供了在 Arch Linux 中启用 Snap 的充分理由。
|
||||
|
||||
我知道 AUR 拥有大量应用,但 snap 应用通常直接来自开发人员。
|
||||
我知道 AUR 拥有大量应用,但 Snap 应用通常直接来自开发人员。
|
||||
|
||||
如果你希望能够在 Arch Linux 中安装 Snap 应用,你需要先启用 snap 支持。
|
||||
如果你希望能够在 Arch Linux 中安装 Snap 应用,你需要先启用 Snap 支持。
|
||||
|
||||
有两种方法可以做到:
|
||||
|
||||
* 使用 AUR 助手启用 Snap 支持(更简单)
|
||||
* 通过从 AUR 获取包手动启用 Snap 支持
|
||||
* 通过从 AUR 获取包,手动启用 Snap 支持
|
||||
|
||||
让我们看看怎么做。
|
||||
|
||||
### 方法 1. 使用 AUR 助手启用 Snap
|
||||
### 方法 1、使用 AUR 助手启用 Snap
|
||||
|
||||
Snap 在 Arch 用户仓库中以 *snapd* 包的形式提供。你可以使用 AUR 助手轻松安装它。
|
||||
Snap 支持在 Arch 用户仓库中以 `snapd` 包的形式提供。你可以使用 AUR 助手轻松安装它。
|
||||
|
||||
存在[许多 AUR 助手][1],但 *yay* 是我更喜欢的,因为它的语法类似于 [pacman 命令][2]。
|
||||
有 [许多 AUR 助手][1],但 `yay` 是我更喜欢的,因为它的语法类似于 [pacman 命令][2]。
|
||||
|
||||
如果你还没有安装 AUR,请使用以下命令安装 Yay(需要事先 git):
|
||||
如果你还没有安装 AUR,请使用以下命令安装 Yay(需要事先安装 `git`):
|
||||
|
||||
```
|
||||
git clone https://aur.archlinux.org/yay
|
||||
@ -42,7 +45,7 @@ makepkg -si
|
||||
|
||||
![安装 yay][3]
|
||||
|
||||
现在 *yay* 已安装,你可以通过以下方式安装 snapd:
|
||||
现在 `yay` 已安装,你可以通过以下方式安装 `snapd`:
|
||||
|
||||
```
|
||||
yay -Sy snapd
|
||||
@ -50,11 +53,11 @@ yay -Sy snapd
|
||||
|
||||
![使用 yay 从 AUR 安装 snapd][4]
|
||||
|
||||
每当你[更新 Arch Linux][5] 系统时,Yay 都会启用 snapd 的自动更新。
|
||||
每当你 [更新 Arch Linux][5] 系统时,`yay` 都会启用 `snapd` 的自动更新。
|
||||
|
||||
### 验证 snap 是否有效
|
||||
#### 验证 Snap 支持是否有效
|
||||
|
||||
要测试 snap 是否正常工作,请安装并运行 *hello-world* snap 包。
|
||||
要测试 Snap 支持是否正常工作,请安装并运行 `hello-world` Snap 包。
|
||||
|
||||
```
|
||||
sudo snap install hello-world
|
||||
@ -64,13 +67,13 @@ hello-world
|
||||
sudo snap run hello-world
|
||||
```
|
||||
|
||||
![hello-world snap 包执行][6]
|
||||
![hello-world Snap 包执行][6]
|
||||
|
||||
如果它运行良好,那么你可以轻松安装其他 snap 包。
|
||||
如果它运行良好,那么你可以轻松安装其他 Snap 包。
|
||||
|
||||
### 方法 2. 从 AUR 手动构建 snap 包
|
||||
### 方法 2、从 AUR 手动构建 snapd 包
|
||||
|
||||
如果你不想使用 AUR 助手,你仍然可以从 AUR 获取 snap。让我展示详细的过程。
|
||||
如果你不想使用 AUR 助手,你仍然可以从 AUR 获取 `snapd`。让我展示详细的过程。
|
||||
|
||||
你需要先安装一些构建工具。
|
||||
|
||||
@ -78,9 +81,9 @@ sudo snap run hello-world
|
||||
sudo pacman -Sy git go go-tools python-docutils
|
||||
```
|
||||
|
||||
![为 snap 安装依赖项][7]
|
||||
![为 Snap 安装依赖项][7]
|
||||
|
||||
完成依赖项安装后,现在可以克隆 AUR 目录,如下所示:
|
||||
完成依赖项安装后,现在可以克隆 `snapd` 的 AUR 目录,如下所示:
|
||||
|
||||
```
|
||||
git clone https://aur.archlinux.org/snapd
|
||||
@ -90,17 +93,17 @@ cd snapd
|
||||
|
||||
![克隆仓库][8]
|
||||
|
||||
然后构建 snapd 包:
|
||||
然后构建 `snapd` 包:
|
||||
|
||||
```
|
||||
makepkg -si
|
||||
```
|
||||
|
||||
当它要求安装其他依赖包时输入 yes。
|
||||
当它要求安装其他依赖包时输入 `yes`。
|
||||
|
||||
![手动构建 snapd][9]
|
||||
|
||||
你已安装 snapd 守护程序。但是,需要启用它以在启动时自动启动。
|
||||
你已安装 `snapd` 守护程序。但是,需要启用它以在启动时自动启动。
|
||||
|
||||
```
|
||||
sudo systemctl enable snapd --now
|
||||
@ -110,15 +113,15 @@ sudo systemctl enable snapd.apparmor --now #start snap applications
|
||||
sudo ln -s /var/lib/snapd/snap /snap #optional: classic snap support
|
||||
```
|
||||
|
||||
![启动时启用 snap][10]
|
||||
![启动时启用 Snap][10]
|
||||
|
||||
手动构建包的主要缺点是每次新更新启动时你都必须手动构建。使用 AUR 助手为我们解决了这个问题。
|
||||
|
||||
### 总结
|
||||
|
||||
我更喜欢 Arch Linux 中的 pacman 和 AUR。很少能看到不在 AUR 中但以其他格式提供的应用。尽管如此,在某些你希望直接从源获取它的情况下,使用 snap 可能是有利的,例如 [在 Arch 上安装 Spotify][11]。
|
||||
我更喜欢 Arch Linux 中的 pacman 和 AUR。很少能看到不在 AUR 中但以其他格式提供的应用。尽管如此,在某些你希望直接从源获取它的情况下,使用 Snap 可能是有利的,例如 [在 Arch 上安装 Spotify][11]。
|
||||
|
||||
希望本教程对您有所帮助。如果你有任何问题,请告诉我。
|
||||
希望本教程对你有所帮助。如果你有任何问题,请告诉我。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -127,7 +130,7 @@ via: https://itsfoss.com/install-snap-arch-linux/
|
||||
作者:[Pranav Krishna][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,128 @@
|
||||
[#]: subject: "How to Set Static IP Address on Ubuntu Server 22.04"
|
||||
[#]: via: "https://www.linuxtechi.com/static-ip-address-on-ubuntu-server/"
|
||||
[#]: author: "Pradeep Kumar https://www.linuxtechi.com/author/pradeep/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15181-1.html"
|
||||
|
||||
如何在 Ubuntu 服务器 22.04 上设置静态 IP 地址
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202210/27/091312aohaix6g6kay68xa.jpg)
|
||||
|
||||
> 在这篇文章中,我们将介绍如何在 Ubuntu 服务器 22.04 上设置静态 IP 地址。
|
||||
|
||||
强烈建议在 Linux 服务器上使用静态 IP,因为它会在重启后保持不变。静态 IP 对邮件服务器、Web 服务器和文件服务器等服务器起着重要作用。
|
||||
|
||||
**准备条件**
|
||||
|
||||
* 最小安装的 Ubuntu 服务器 22.04
|
||||
* 具有 `sudo` 管理员权限的普通用户
|
||||
|
||||
在 Ubuntu 服务器 22.04 中,网络由 netplan 程序控制,因此我们将使用 netplan 在 Ubuntu 服务器上配置静态 IP 地址。
|
||||
|
||||
注意:我们不能使用 [nmcli 程序][1],因为它不是 Ubuntu 服务器上默认安装的一部分。
|
||||
|
||||
### 在 Ubuntu 服务器 22.04 上设置静态 IP 地址
|
||||
|
||||
登录到你的 Ubuntu 服务器 22.04,查找 netplan 配置文件。它位于 `/etc/netplan` 目录下。
|
||||
|
||||
```
|
||||
$ cd /etc/netplan/
|
||||
$ ls -l
|
||||
total 4
|
||||
-rw-r--r-- 1 root root 116 Oct 12 04:03 00-installer-config.yaml
|
||||
$
|
||||
```
|
||||
|
||||
运行以下 `cat` 命令以查看 `00-installer-config.yaml` 的内容。
|
||||
|
||||
注意:配置文件的名称可能因你的设置而异。由于它是一个 yaml 文件,因此请确保在编辑时保持缩进和语法。
|
||||
|
||||
```
|
||||
$ cat 00-installer-config.yaml
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
![Default-Content-netplan-ubuntu-server][2]
|
||||
|
||||
根据上面的输出,它说我们有 `ens33` 接口,它正在从 DHCP 服务器获取 IP。查看接口名称的另一种方法是通过 `ip` 命令。
|
||||
|
||||
现在,要配置静态 IP 代替 DHCP,使用 `vi` 或 `nano` 编辑器编辑 netplan 配置文件并添加以下内容。
|
||||
|
||||
```
|
||||
$ sudo vi 00-installer-config.yaml
|
||||
# This is the network config written by 'subiquity'
|
||||
network:
|
||||
renderer: networkd
|
||||
ethernets:
|
||||
ens33:
|
||||
addresses:
|
||||
- 192.168.1.247/24
|
||||
nameservers:
|
||||
addresses: [4.2.2.2, 8.8.8.8]
|
||||
routes:
|
||||
- to: default
|
||||
via: 192.168.1.1
|
||||
version: 2
|
||||
```
|
||||
|
||||
保存并关闭文件。
|
||||
|
||||
![Updated-Netplan-Config-File-Content-Ubuntu-Server][3]
|
||||
|
||||
在上面的文件中,我们使用了以下内容,
|
||||
|
||||
* `ens33` 为接口名称
|
||||
* 用于设置静态 IP 的地址
|
||||
* `nameservers` 用于指定 DNS 服务器的 IP
|
||||
* 用于指定默认网关的路由
|
||||
|
||||
注意:根据你的环境更改 IP 详细信息和接口名称。
|
||||
|
||||
要是上述修改生效,请使用以下 `netplan` 命令应用这些更改:
|
||||
|
||||
```
|
||||
$ sudo netplan apply
|
||||
```
|
||||
|
||||
运行以下 IP 命令查看接口上的 IP 地址:
|
||||
|
||||
```
|
||||
$ ip addr show ens33
|
||||
```
|
||||
|
||||
要查看默认路由,请运行:
|
||||
|
||||
```
|
||||
$ ip route show
|
||||
```
|
||||
|
||||
上述命令的输出。
|
||||
|
||||
![ip-addr-route-command-output-ubuntu-server][4]
|
||||
|
||||
完美,以上命令的输出确认静态 IP 和路由配置成功。
|
||||
|
||||
这就是这篇文章的全部内容。请在下面的评论部分发表你的问题和反馈。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.linuxtechi.com/static-ip-address-on-ubuntu-server/
|
||||
|
||||
作者:[Pradeep Kumar][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.linuxtechi.com/author/pradeep/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.linuxtechi.com/configure-ip-with-nmcli-command-linux/
|
||||
[2]: https://www.linuxtechi.com/wp-content/uploads/2022/10/Default-Content-netplan-ubuntu-server.png
|
||||
[3]: https://www.linuxtechi.com/wp-content/uploads/2022/10/Updated-Netplan-Config-File-Content-Ubuntu-Server.png
|
||||
[4]: https://www.linuxtechi.com/wp-content/uploads/2022/10/ip-addr-route-command-output-ubuntu-server.png
|
@ -0,0 +1,106 @@
|
||||
[#]: subject: "Enjoy the Classic Snake Game in Your Linux Terminal"
|
||||
[#]: via: "https://www.debugpoint.com/snake-game-linux-terminal/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15186-1.html"
|
||||
|
||||
在你的 Linux 终端中玩经典的贪吃蛇游戏
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202210/28/091539oanrjizald7rzr7a.jpg)
|
||||
|
||||
> 这是你在 Linux 终端中安装和玩经典贪吃蛇的方法。
|
||||
|
||||
还记得老式手机经典简单的贪吃蛇吗?我记得玩了几个小时。嘿,当时没有其他选择,对吧?智能手机仍未上市。而你所拥有的只有这个。
|
||||
|
||||
![Nokia 3310 中的旧版贪吃蛇游戏][1]
|
||||
|
||||
但随着时间的推移,贪吃蛇被具有各种选项的更高级的图形游戏所取代。但没有什么能比得上经典贪吃蛇游戏。
|
||||
|
||||
如果我告诉你,你可以在 Linux 终端中玩这个游戏呢?无论你运行的是 Ubuntu Linux、Fedora Linux 还是 Arch Linux,都无关紧要。该游戏适用于大多数 [发行版][2]。
|
||||
|
||||
![nsnake - 主菜单][3]
|
||||
|
||||
### 安装 nSnake – Linux 终端的贪吃蛇
|
||||
|
||||
你可以使用以下方法通过终端安装 [此游戏][4]。
|
||||
|
||||
对于 Ubuntu、Linux Mint 或其他相关发行版:
|
||||
|
||||
```
|
||||
sudo apt install nsnake
|
||||
```
|
||||
|
||||
对于 Fedora Linux 和其他:
|
||||
|
||||
```
|
||||
sudo dnf install nsnake
|
||||
```
|
||||
|
||||
对于 Arch Linux,此游戏可在 [Arch 用户仓库(AUR)][5] 中获得。你可以使用以下步骤安装它。
|
||||
|
||||
* [设置 Yay AUR 助手][6]
|
||||
* 然后打开终端并运行以下命令
|
||||
|
||||
```
|
||||
yay -S nsnake
|
||||
```
|
||||
|
||||
上面的命令会安装游戏的软件仓库版本,它可能不是最新的。但是,如果你想要最新版本,你可能需要通过 GitHub 编译源代码。我在本页末尾添加了编译说明供你参考。
|
||||
|
||||
### 玩游戏
|
||||
|
||||
玩游戏非常简单。在终端中输入 `nsnake`,这将启动游戏。
|
||||
|
||||
要立即退出,请按 `q`。
|
||||
|
||||
以下是默认键绑定。
|
||||
|
||||
* `箭头键` - 移动蛇
|
||||
* `q` – 退出游戏
|
||||
* `p` – 暂停游戏
|
||||
|
||||
你还可以通过主菜单以各种方式配置游戏。
|
||||
|
||||
![nsnake Linux 终端贪吃蛇设置][7]
|
||||
|
||||
完成了,玩吧!
|
||||
|
||||
### 编译
|
||||
|
||||
要编译最新版本,请在所有 Linux 发行版中使用以下命令。
|
||||
|
||||
哦,确保你已经安装了 `git` 和 `ncurses-devel`,它们是编译所需的包。
|
||||
|
||||
```
|
||||
git clone https://github.com/alexdantas/nSnake.git
|
||||
cd nsnake
|
||||
make
|
||||
make install
|
||||
```
|
||||
|
||||
那么,你喜欢贪吃蛇游戏吗?与其他基于终端的游戏相比,你更喜欢它吗?在下面的评论框中与其他读者分享你的观点。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/snake-game-linux-terminal/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.debugpoint.com/wp-content/uploads/2021/12/Nokia-3310-with-legacy-snake-game.jpg
|
||||
[2]: https://www.debugpoint.com/category/distributions
|
||||
[3]: https://www.debugpoint.com/wp-content/uploads/2021/12/nsnake-Game-Main-Menu.jpg
|
||||
[4]: https://github.com/alexdantas/nsnake
|
||||
[5]: https://aur.archlinux.org/packages/nsnake/
|
||||
[6]: https://www.debugpoint.com/2021/01/install-yay-arch/
|
||||
[7]: https://www.debugpoint.com/wp-content/uploads/2021/12/nsnake-Linux-Terminal-Snake-Game-Settings.jpg
|
@ -0,0 +1,161 @@
|
||||
[#]: subject: "Learn Bash base64 Encode and Decode With Examples"
|
||||
[#]: via: "https://www.debugpoint.com/bash-base64-encode-decode/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "chai001125"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15189-1.html"
|
||||
|
||||
通过示例来学习 Bash base64 的编码和解码
|
||||
======
|
||||
|
||||
> 你想了解 Base64 编码和解码的方法吗?在本教程中,我们使用 Bash shell 脚本和各种示例解释了 Base64 编码和解码步骤。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202210/29/163350mde5lll86j6lspln.jpg)
|
||||
|
||||
Base64 编码方法可以将二进制数据转换为文本,如此编码数据可以在任何通信媒介进行传输。这种编码方法主要用于电子邮件加密的过程。
|
||||
|
||||
总体而言,Base64 编码方法是一种二进制到文本的编码方案,以 ASCII 字符串格式表示 8 字节的二进制数据。使用这种编码方法在各种媒介之间传输数据时有几个优势,尤其是对于那些能可靠地支持文本内容的媒介。因此,Base64 编码方法在万维网上被广泛使用。这种编码方案最常用于电子邮件附件的编码上。
|
||||
|
||||
根据 Base64 编码表,二进制数据可以经 Base64 编码后可以转换为 64 个不同的 ASCII 字符,包含大写字母 `A` 到 `Z`,小写字母 `a` 到 `z`,数字 `0` 到 `9`,以及符号 `+` 和 `/`,这些字符在传输和打印上十分便捷。
|
||||
|
||||
这 64 个 ASCII 字符代表着从 `000000` 到 `111111` 的二进制值。每个非末尾的 Base64 编码字符恰好代表 6 位二进制值。
|
||||
|
||||
![Base64 Index Table][2]
|
||||
|
||||
### Bash base64 的编码和解码
|
||||
|
||||
#### 句法
|
||||
|
||||
在我们提供示例之前,首先介绍 Base64 的基本语法。
|
||||
|
||||
```
|
||||
base64 [OPTIONs] [INFILE] [OUTFILE]
|
||||
```
|
||||
|
||||
- 选项(`Option`):参照下面的表格,你可以提供任何的选项或组合多个选项。
|
||||
- 输入(`INFILE`):你可以从标准输入(如命令行)或文件中输入。
|
||||
- 输出(`OUTFILE`):你可以将输出重定向到标准输出,如终端或文件中。
|
||||
|
||||
| 选项 | 描述 |
|
||||
| :- | :- |
|
||||
| `-e` 或者 `--encode` | 此选项用于对标准输入的数据或从文件中读入的数据进行编码。这是默认选项。 |
|
||||
| `-d` 或者 `--decode` | 此选项用于对标准输入的数据或从文件中读入的已 Base64 编码数据进行解码。 |
|
||||
| `-n` 或者 `--noerrcheck` | 默认情况下,Base64 在解码数据时,会自动检查是否有错误。你可以使用该选项在解码时忽略检查。 |
|
||||
| `-i` 或 `--ignore-garbage` | 此选项用于在解码时忽略非字母字符。 |
|
||||
| `-u` 或者 `--help` | 此选项用于获取有关使用此命令的信息。 |
|
||||
|
||||
#### 示例 1:基本编码
|
||||
|
||||
在 Linux 中,默认已安装好 Base64 软件包。因此,你可以轻松地从命令行使用 Base64。要对一个字符串或文本进行编码,你可以通过管道将其传递到 `base64` 命令,并获取待编码的文本。在下面的示例中,对字符串 `debugpoint.com` 进行了 Base64 编码。
|
||||
|
||||
```
|
||||
echo "debugpoint.com" | base64
|
||||
```
|
||||
|
||||
![bash base64 encode and decode - example 1][3]
|
||||
|
||||
结果是经过 Base64 编码后的字符串。
|
||||
|
||||
#### 解释
|
||||
|
||||
Base64 编码方法使用下面的几个步骤来转换输入的数据。首先,每个输入字符转换为 8 位二进制值,接着,二进制字符串拆分为一组组 6 位的二进制值,然后,每个 6 位的二进制值被转换为十进制值。
|
||||
|
||||
最后,每个十进制值都通过 Base64 编码索引表转换为 Base64 字符。
|
||||
|
||||
在上面的示例中,第一个字符 `d` 被转换为二进制 `01100100`。前 6 位是 `011001`,转换为十进制是 `25`。`25` 在 Base64 编码索引表中对应着 `Z`。整个输入的文本流都像如此编码。请参阅以下编码过程的示例。
|
||||
|
||||
![Base64 Encode and Decode – inner working][4]
|
||||
|
||||
#### 示例 2:基本解码
|
||||
|
||||
要解码字符串,需要将编码值传递给 `base64` 命令,选项为 `--decode`,它将输出你之前输入的字符串。
|
||||
|
||||
![bash base64 encode and decode - example 2 (decode the same example)][5]
|
||||
|
||||
#### 示例 3:对文本文件进行编码
|
||||
|
||||
示例 1 中的同一命令也可用于编码文本文件,并将输出重定向到另一个文本文件。方法如下。
|
||||
|
||||
```
|
||||
base64 example3.txt > example3-encoded.txt
|
||||
```
|
||||
|
||||
![Encode a text file][6]
|
||||
|
||||
#### 示例 4:对文本文件进行解码
|
||||
|
||||
要解码使用 Base64 编码的文本文件,只需使用 `--decode` 或 `-d` 选项,并传递文本文件名。
|
||||
|
||||
```
|
||||
base64 -d example3-encoded.txt
|
||||
```
|
||||
|
||||
#### 示例 5:对用户输入的数据进行编码
|
||||
|
||||
使用 Bash shell 编程,你可以通过终端接收用户的输入,并对其进行 Base64 编码。你需要先编写一个简单的 shell 脚本,并在授予可执行权限后执行。
|
||||
|
||||
以下就是一个简单的示例,它从用户那里获得输入,然后进行 Base64 编码,最终显示编码的字符串。
|
||||
|
||||
```
|
||||
#!/bin/bash
|
||||
#Sample program to take input, encode to base64 and display on terminal
|
||||
#Example by www.debugpoint.com
|
||||
echo "Enter text for encoding to base64:"
|
||||
read input_text
|
||||
output_text=`echo -n $input_text | base64`
|
||||
echo "The Base64 Encoded text is: $output_text"
|
||||
```
|
||||
|
||||
![Custom input - base64 encode and decode using script][7]
|
||||
|
||||
#### 示例 6:用 Base64 进行简单的身份认证
|
||||
|
||||
你可以运用上述的编码和解码方法,实现一个简单的身份验证系统。你可以让用户输入密码或密码,然后将密码存储在文件中。或者进行实时比较。
|
||||
|
||||
如果存储的编码字符串与用户输入的文本再编码的字符串相匹配,则用户可以通过验证。虽然这是一种检查身份验证的很简单的方法,但有时这对一些简单的业务案例很有用。
|
||||
|
||||
```
|
||||
#!/bin/bash
|
||||
#Sample program to take input, encode to base64 and display on terminal
|
||||
#Example by www.debugpoint.com
|
||||
echo "Type your password"
|
||||
read pwd1
|
||||
decoded_text=`echo 'U2lsZW5jZSBpcyBnb2xkZW4h' | base64 --decode`
|
||||
if [[ $pwd1 == $decoded_text ]]
|
||||
then
|
||||
echo "You are a valid user."
|
||||
else
|
||||
echo "You are NOT a valid user."
|
||||
fi
|
||||
```
|
||||
|
||||
![A Simple Authentication using bash base64][8]
|
||||
|
||||
### 总结
|
||||
|
||||
我希望你能通过这些示例,学会 [Base64][9] 编码和解码的基础知识。此外,你也了解到 Base64 的内部编码方式。如果这对你很有帮助,或你还需要有关此主题的其他教程,请在下面的评论区中告诉我吧。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/bash-base64-encode-decode/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[chai001125](https://github.com/chai001125)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.debugpoint.com/wp-content/uploads/2021/11/base64example-1024x576.jpg
|
||||
[2]: https://www.debugpoint.com/wp-content/uploads/2021/11/Base64-Index-Table.png
|
||||
[3]: https://www.debugpoint.com/wp-content/uploads/2021/11/bash-base64-encode-and-decode-example-1.jpg
|
||||
[4]: https://www.debugpoint.com/wp-content/uploads/2021/11/Base64-Encode-and-Decode-inner-working.png
|
||||
[5]: https://www.debugpoint.com/wp-content/uploads/2021/11/bash-base64-encode-and-decode-example-2-decode-the-same-example.jpg
|
||||
[6]: https://www.debugpoint.com/wp-content/uploads/2021/11/Encode-a-text-file.png
|
||||
[7]: https://www.debugpoint.com/wp-content/uploads/2021/11/Custom-input-base64-encode-and-decode-using-script.png
|
||||
[8]: https://www.debugpoint.com/wp-content/uploads/2021/11/A-Simple-Authentication-using-bash-base64.png
|
||||
[9]: https://linux.die.net/man/1/base64
|
@ -0,0 +1,72 @@
|
||||
[#]: subject: "Can Kubernetes help solve automation challenges?"
|
||||
[#]: via: "https://opensource.com/article/22/10/kubernetes-solve-automation-challenges"
|
||||
[#]: author: "Rom Adams https://opensource.com/users/romdalf"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15193-1.html"
|
||||
|
||||
Kubernetes 能否帮助解决自动化挑战?
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202210/30/105625ocz9sd9z6g4dzb44.jpg)
|
||||
|
||||
> 组织层面的自动化一直是一个难以实现的目标,但 Kubernetes 或许能够改变这一切。
|
||||
|
||||
当我在 2002 年采用 Gentoo Linux 作为我的主要操作系统时,我开始了我的自动化之旅。二十年后,自动化还没有完成。当我与客户和合作伙伴会面时,他们分享了团队内部的自动化成果,但他们也描述了在组织层面实现类似成功所面临的挑战。
|
||||
|
||||
大多数 IT 组织都能够端到端地提供虚拟机,从而将过去 4 周的交付周期缩短到仅 5 分钟。这种级别的自动化本身就是一个复杂的工作流程,需要网络(IP 地址管理、DNS、代理、网络区域等)、身份访问管理、[虚拟机管理程序][2]、存储、备份、更新操作系统、应用最新的配置文件、监控、安全和强化以及合规性基准测试,等等。哇,这么多!
|
||||
|
||||
满足高速、可扩展和按需自动化的业务需求并不容易。例如,来看看经典的网上商店或提交纳税申报表的在线政府服务,其工作负载有明确的峰值需要面对。
|
||||
|
||||
处理此类负载的一种常见方法是拥有一个超大的服务器集群,以供 IT 专业人员的特定团队使用,监控客户或公民的季节性涌入。每个人都希望及时部署整个栈。他们希望基础架构在混合云场景的上下文中运行工作负载,使用“<ruby>构建-消耗-回收<rt>build-consume-trash</rt></ruby>”模型来优化成本,同时从无限弹性中受益。
|
||||
|
||||
换句话说,每个人都想要乌托邦式的“云体验”。
|
||||
|
||||
### 云真的能交付吗?
|
||||
|
||||
尚有一线机会,这主要归功于 [Kubernetes][3] 的设计方式。Kubernetes 的指数级普及推动了创新,取代了管理平台和应用的标准传统做法。 Kubernetes 需要使用 “<ruby>万物皆代码<rt>Everything-as-Code</rt></ruby>”(EaC)来定义从简单的计算节点到 TLS 证书的所有资源的期望状态。Kubernetes 强制使用三种主要的设计结构:
|
||||
|
||||
* 一个标准接口,以减少内部和外部组件之间的整合问题
|
||||
* API 优先及仅 API 的方法来标准化其所有组件的 CRUD(创建、读取、更新、删除)操作
|
||||
* 使用 [YAML][4] 作为通用语言,以简单易读的方式定义这些组件的所有所需状态
|
||||
|
||||
这三个关键组成部分基本上是选择自动化平台的相同要求,至少如果你想让跨职能团队轻松采用是这样的。这也模糊了团队之间的职责分工,有助于提高跨越孤岛的协作,这是一件好事!
|
||||
|
||||
事实上,采用 Kubernetes 的客户和合作伙伴正在加速进入超自动化状态。Kubernetes 有机地推动团队采用多种 [DevOps 基础和实践][5],如:EaC、[使用 Git 进行版本控制][6]、同行评审、<ruby>[文档即代码][7]<rt>Documentation as Code</rt></ruby>,并鼓励跨职能协作。这些实践有助于提高团队的自动化技能,并帮助团队在处理应用生命周期和基础架构的 GitOps 和 CI/CD 管道方面取得良好的开端。
|
||||
|
||||
### 让自动化成为现实
|
||||
|
||||
你没看错!网络商店或政府报告等复杂系统的整个栈可以用清晰、可理解、通用的术语定义,可以在任何本地或云提供商上执行。可以定义具有自定义指标的自动伸缩器以触发所需栈的即时部署,以解决季节性高峰期间客户或市民的涌入问题。当指标恢复正常,且云计算资源不再有存在的理由时,你将它们回收并恢复常规运营,而由一组核心资产在本地接管业务,直到下一次激增。
|
||||
|
||||
### 鸡和蛋的悖论
|
||||
|
||||
考虑到 Kubernetes 和云原生模式,自动化是必须的。但它提出了一个重要的问题:一个组织可以在解决自动化战略之前采用 Kubernetes 吗?
|
||||
|
||||
似乎从 Kubernetes 开始可以激发更好的自动化,但这并不是一个一成不变的结论。工具不是对技能、实践和文化问题的解决方案。但是,设计良好的平台可以成为 IT 组织内学习、变革和跨职能协作的催化剂。
|
||||
|
||||
### 开始使用 Kubernetes
|
||||
|
||||
即使你觉得自己错过了自动化列车,也不要害怕从简单、不复杂的栈上开始使用 Kubernetes。当你 [掌握了初始步骤][8],就可以拥抱这个出色的编排系统的简单性,并根据更复杂的需求进行迭代。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/10/kubernetes-solve-automation-challenges
|
||||
|
||||
作者:[Rom Adams][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/romdalf
|
||||
[b]: https://github.com/lkxed
|
||||
[2]: https://www.redhat.com/en/topics/virtualization/what-is-a-hypervisor?intcmp=7013a000002qLH8AAM
|
||||
[3]: https://www.redhat.com/en/topics/containers/what-is-kubernetes?intcmp=7013a000002qLH8AAM
|
||||
[4]: https://opensource.com/article/21/9/yaml-cheat-sheet
|
||||
[5]: https://opensource.com/resources/devops
|
||||
[6]: https://opensource.com/life/16/7/stumbling-git
|
||||
[7]: https://opensource.com/article/21/3/devops-documentation
|
||||
[8]: https://opensource.com/article/17/11/getting-started-kubernetes
|
@ -0,0 +1,113 @@
|
||||
[#]: subject: "Install Gedit on Ubuntu 22.10 and Make it Default Text Editor"
|
||||
[#]: via: "https://itsfoss.com/install-gedit-ubuntu/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15194-1.html"
|
||||
|
||||
在 Ubuntu 22.10 上安装 Gedit 并将其设为默认文本编辑器
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202210/30/124029bf0qjklphcpzpclh.jpg)
|
||||
|
||||
[GNOME 有了一个全新的文本编辑器][1],以取代旧的 Gedit 编辑器。
|
||||
|
||||
虽然 GNOME 42 已经可以使用了它,但 Ubuntu 22.04 还依赖于 Gedit。
|
||||
|
||||
这在 Ubuntu 22.10 中发生了变化。 GNOME <ruby>文本编辑器<rt>Text Editor</rt></ruby> 现在是默认程序,甚至没有安装 Gedit。
|
||||
|
||||
![搜索文本编辑器只出现 GNOME 文本编辑器][2]
|
||||
|
||||
虽然新编辑器足够好,但并不是每个人都喜欢它。如果你将 Gedit 与其他插件一起频繁使用,则尤其如此。
|
||||
|
||||
如果你属于这类人,让我向你展示如何在 Ubuntu 上安装 Gedit。我还将分享如何将其设为默认文本编辑器。
|
||||
|
||||
### 在 Ubuntu 上安装 Gedit
|
||||
|
||||
这实际上是不费吹灰之力的。虽然默认未安装 Gedit,但它仍然可以在 Ubuntu 仓库中找到。
|
||||
|
||||
所以,你所要做的就是使用 `apt` 命令来安装它:
|
||||
|
||||
```
|
||||
sudo apt install gedit
|
||||
```
|
||||
|
||||
Gedit 也可以在软件中心中找到,但它是 Snap 包。如果你愿意,你可以安装它。
|
||||
|
||||
![Gedit 也可以在 Ubuntu 的 Snap 商店中找到][3]
|
||||
|
||||
#### 安装 Gedit 插件(可选)
|
||||
|
||||
默认情况下,Gedit 为你提供访问一些插件的选项。你可以从 “汉堡菜单-><ruby>偏好<rt>Preference</rt></ruby>-><ruby>插件<rt>Plugins</rt></ruby>” 启用或禁用插件。
|
||||
|
||||
![在 Gedit 中访问插件][4]
|
||||
|
||||
你可以在这里看到可用的插件。检查已安装或正在使用的插件。
|
||||
|
||||
![查看 Gedit 中可用和已安装的插件][5]
|
||||
|
||||
但是,你可以通过安装 gedit-plugins 元数据包将插件选择提升到一个新的水平。
|
||||
|
||||
```
|
||||
sudo apt install gedit-plugins
|
||||
```
|
||||
|
||||
这将使你可以访问其他插件,如书签、括号补全、Python 控制台等。
|
||||
|
||||
![其他 Gedit 插件][6]
|
||||
|
||||
**提示**:如果你发现 Gedit 因缺少底角而显得有些格格不入,你可以安装一个名为 [Round Bottom Corner][7] 的 GNOME 扩展。这将为包括 Gedit 在内的所有应用强制添加圆底角。
|
||||
|
||||
### 使 Gedit 成为默认文本编辑器
|
||||
|
||||
好了!你已经安装了 Gedit,但文本文件仍然在双击操作后使用 GNOME 文本编辑器打开。要使用 Gedit 打开文件,你需要右键单击,然后选择“<ruby>打开方式<rt>open with</rt></ruby>”选项。
|
||||
|
||||
如果你希望一直使用 Gedit 打开文本文件,你可以将其设置为默认程序。
|
||||
|
||||
右键单击文本文件并选择“<ruby>打开方式<rt>open with</rt></ruby>”选项。在此处选择 Gedit 并从底部启用“<ruby>始终用于此文件类型<rt>Always use for this file type</rt></ruby>”选项。
|
||||
|
||||
![设置 Gedit 为默认文本编辑器][8]
|
||||
|
||||
### 删除 Gedit
|
||||
|
||||
觉得 Gedit 没达到预期么?这很少见,但我不会评判你。要从 Ubuntu 中删除 Gedit,请使用以下命令:
|
||||
|
||||
```
|
||||
sudo apt remove gedit
|
||||
```
|
||||
|
||||
你也可以尝试从软件中心卸载它。
|
||||
|
||||
### 总结
|
||||
|
||||
GNOME 文本编辑器是下一代从头开始创建的编辑器,它与新的 GNOME 完美融合。
|
||||
|
||||
对于简单的文本编辑来说已经足够了。然而,Gedit 有一个插件生态系统,赋予它更多功能。
|
||||
|
||||
对于那些将它广泛用于编码和其他事情的人来说,安装 Gedit 仍然是 Ubuntu 中的一个选项。
|
||||
|
||||
那你呢?你会坚持使用默认的新文本编辑器还是回到旧的 Gedit?
|
||||
|
||||
---
|
||||
|
||||
via: https://itsfoss.com/install-gedit-ubuntu/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux 中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://itsfoss.com/gnome-text-editor/
|
||||
[2]: https://itsfoss.com/wp-content/uploads/2022/10/text-editor-ubuntu.png
|
||||
[3]: https://itsfoss.com/wp-content/uploads/2022/10/install-gedit-from-ubuntu-software-center.png
|
||||
[4]: https://itsfoss.com/wp-content/uploads/2022/10/access-plugins-in-gedit.png
|
||||
[5]: https://itsfoss.com/wp-content/uploads/2022/10/plugins-in-gedit.png
|
||||
[6]: https://itsfoss.com/wp-content/uploads/2022/10/additional-plugins-gedit.png
|
||||
[7]: https://extensions.gnome.org/extension/5237/rounded-window-corners/
|
||||
[8]: https://itsfoss.com/wp-content/uploads/2022/10/set-gedit-default.png
|
@ -0,0 +1,80 @@
|
||||
[#]: subject: "Ubuntu but rolling but also stable That's what Rhino Linux aims to be"
|
||||
[#]: via: "https://news.itsfoss.com/rhino-linux/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "littlebirdnest"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15192-1.html"
|
||||
|
||||
Rhino Linux:滚动发布但也很稳定的 Ubuntu
|
||||
======
|
||||
|
||||
> 滚动发布的 Ubuntu 发行版?等等,什么? Rhino Linux 听起来不错……
|
||||
|
||||
![Ubuntu but rolling but also stable! That's what Rhino Linux aims to be][1]
|
||||
|
||||
Rhino Linux 将成为 [Rolling Rhino Remix][2] 的继任者。这个由 http.llamaz 构建的 Linux 发行版,提供了滚动发布的**非官方的** Ubuntu 变体版本。
|
||||
|
||||
需要澄清的是,该项目从未旨在取代其他稳定的发行版,而纯粹是一个充满乐趣的激情项目。
|
||||
|
||||
而随着人们开始将其用作日常使用并对其期望更多,开发人员决定将其变成一个严肃的项目。
|
||||
|
||||
Rhino Linux 作为它的继任者。那么,你对它的期待是什么?
|
||||
|
||||
### 有请继任者 Rhino Linux
|
||||
|
||||
其主要目标是提供稳定的 Ubuntu 体验,同时仍提供滚动发布模式。
|
||||
|
||||
目标仍保持不变,但 Rhino Linux 的基础将得到彻底改变。他们有可能使它成为一个令人印象深刻的滚动发布的 Ubuntu 发行版。
|
||||
|
||||
**听起来很令人兴奋!🤯**
|
||||
|
||||
在其核心,Rhino Linux 将使用稍微修改过的 [Xfce][3] 版本作为其桌面环境;之所以选择它是因为它众所周知的稳定性和速度。
|
||||
|
||||
Rhino Linux 的创始人提到了以下几点:
|
||||
|
||||
> 滚动版 Ubuntu 仍然是我们的核心理念。Rhino Linux 并不是从 Rolling Rhino Remix 中分离出来的,而是将它重新设想为更稳定、更成熟的发行版,它原本就应该以这种方式出厂。
|
||||
|
||||
![xfce 4.14][4]
|
||||
|
||||
除此之外,[Pacstall][5] 将用作 Rhino Linux 上的默认包管理器及其存储库之一。
|
||||
|
||||
> 💡 Pacstall 是一个受 [AUR][6] 启发的 Ubuntu 包管理器。
|
||||
|
||||
Pacstall 的开发由其创始人 [Plasma][7] 领导。他还作为新开发人员之一(副项目负责人)加入,而 [Sourajyoti Basak][8] 作为另一位核心成员加入。
|
||||
|
||||
### 前进:可用性和发布
|
||||
|
||||
在撰写本文时,Rhino Linux 尚未确定任何具体的发布日期,但你可以预计它会在 **2023** 年的某个时间发布。
|
||||
|
||||
Rolling Rhino Remix 会发生什么?
|
||||
|
||||
开发者澄清说,它将在 Rhino Linux 发布后继续维护三个月。但是,在 2022 年 1 月 11 日后继发布之后,它没有新的发布镜像。
|
||||
|
||||
你可以通过访问其 [官方网站][9] 了解更多关于 Rhino Linux 的信息。
|
||||
|
||||
_💬 你觉得 Rhino Linux 怎么样?它可以成为值得尝试的官方 Ubuntu 风格的竞争者吗?_
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/rhino-linux/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[littlebirdnest](https://github.com/littlebirdnest)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/content/images/size/w1200/2022/10/rhino-linux.png
|
||||
[2]: https://github.com/rollingrhinoremix
|
||||
[3]: https://www.xfce.org/
|
||||
[4]: https://news.itsfoss.com/content/images/2022/10/XFCE_4.14.png
|
||||
[5]: https://github.com/pacstall/pacstall
|
||||
[6]: https://itsfoss.com/aur-arch-linux/
|
||||
[7]: https://github.com/Henryws
|
||||
[8]: https://github.com/wizard-28
|
||||
[9]: https://rhinolinux.org/
|
@ -0,0 +1,111 @@
|
||||
[#]: subject: "Open source DevOps tools in a platform future"
|
||||
[#]: via: "https://opensource.com/article/22/10/open-source-devops-tools"
|
||||
[#]: author: "Will Kelly https://opensource.com/users/willkelly"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lxbwolf"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15170-1.html"
|
||||
|
||||
开源 DevOps 工具的平台化未来
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202210/24/092748lwwoicus5e4s59gg.jpg)
|
||||
|
||||
> 当商业 DevOps 工具市场着眼于平台时,是时候让开源 DevOps 工具重新定义它们的未来了。
|
||||
|
||||
DevOps 的开源根基是无法动摇的,即便有预言称全球的 DevOps 市场将在 2026 年之前达到 178 亿美元。不断变化的工作环境、安全和合规性问题,以及风险投资公司等等因素正在将市场推向 DevOps 平台,开发团队可以在云中获得完整的端到端 DevOps 工具链。
|
||||
|
||||
### 开源 DevOps 工具现状
|
||||
|
||||
我们要搞清楚一件事:开源工具不可能从 DevOps 世界中消失。现在,在开源和供应商提供的 DevOps 工具之间存在着一种平衡,开发人员会在两者间选择适合他们的工具。事实上,很多情况下,一个开发团队起初会为他们的 DevOps 流水线选择一个开源工具,后来又升级到商业版本。
|
||||
|
||||
### 三种开源 DevOps 工具实例
|
||||
|
||||
下面我们介绍一些开源 DevOps 工具的例子,每种工具都已经有了围绕其建立的商业化生态。
|
||||
|
||||
#### Git
|
||||
|
||||
源代码管理工具 [Git][1] 作为源代码库,可能是 DevOps 工具链的主要基础之一。
|
||||
|
||||
Git 的两个最佳商业案例是 GitLab 和 GitHub。GitLab [接受开发者对其贡献开源项目][2]。GitHub 也在着手努力成为一个 DevOps 平台,推出了人工智能版的结对编程 GitHub Copilot,在推出后受到了一些开源团体的褒贬不一的评价。
|
||||
|
||||
#### Jenkins
|
||||
|
||||
作为一个开源的自动化服务,Jenkins 因其易于安装、配置和可扩展性而受到推崇。
|
||||
|
||||
CloudBees 提供了 JenkinsX,JenkinsX 是一套开源的解决方案,可以为 Kubernetes 上的云原生应用提供自动化持续集成和持续交付(CI/CD)以及自动化测试工具。他们还为JenkinsX 提供商业支持,包括:
|
||||
|
||||
- 访问 CloudBees 的专业技术技能
|
||||
- 24x7 技术支持
|
||||
- 访问 CloudBees 的文档和在线知识库
|
||||
|
||||
#### Kubernetes
|
||||
|
||||
随着越来越多的组织寻求企业级的容器编排解决方案,[Kubernetes][3] 的发展成为必然。尽管有人批评其复杂性。
|
||||
|
||||
自然而然的,Kubernetes 周边有完整的、蓬勃发展的产业。根据 Allied 市场调研的数据,全球容器和 [Kubernetes 安全][4] 市场在 2020 年的估值为 7.14 亿美元,预计到 2030 年将达到 8.42 亿美元。
|
||||
|
||||
### 目前的 DevOps 工具链
|
||||
|
||||
各个行业仍有很多<ruby>自建<rt>build-your-own</rt></ruby>(BYO)的 CI/CD 工具链在发挥作用。支持 DevOps 功能的开源项目仍在蓬勃发展。
|
||||
|
||||
BYO 工具链可以集成其他工具,而且非常具有扩展性,这对于持续迭代其 DevOps 实践的组织来说一直是一个优势。在出于业务、IT 和安全原因寻求标准化的企业中,缺乏标准的材料清单可能是个麻烦。
|
||||
|
||||
虽然 DevOps 平台的出现并没有被忽视,但许多组织早在大流行之前就将他们的 CI/CD 工具链迁移到了公有云。长期以来,工具链本身的安全性一直是一个不断上升的问题,而公有云基础设施提供了身份访问管理(IAM)和其他安全功能来控制访问。
|
||||
|
||||
### DevOps 平台是敌是友?
|
||||
|
||||
DevOps 平台是一个端到端的解决方案,它将 CI/CD 工具链的所有功能放入云中。DevOps 平台的例子包括 GitLab 和 Harness。GitHub 也在采取行动,使自己成为一个 DevOps 平台。
|
||||
|
||||
#### 优势(即便只从企业买家角度考虑)
|
||||
|
||||
DevOps 平台对那些已经适应了 SaaS 和云计算行业的基于消费和订阅的定价的企业买家很有吸引力。在这个远程和混合工作的世界里,对可维护性、安全、合规性和开发人员的生产力的担忧肯定是技术领导者的首要考虑。对这些人来说,在 DevOps 平台上实现标准化是很有吸引力的。
|
||||
|
||||
#### 劣势
|
||||
|
||||
在依赖供应商提供的 DevOps 工具链时,人们会想到对供应商锁定功能的古老担忧。开发团队构建和维护其工具链的可扩展性不会像他们从头开始制作工具链时那样,更不用说引入新的工具来改善他们的工作流程了。
|
||||
|
||||
DevOps 平台供应商也有潜在的经济方面的劣势。想一想,一个被高估的 DevOps 工具初创公司如果没有达到其投资者的高额财务目标,可能会发生什么。同样,也可能有一些较小的初创供应商得不到下一轮的资金,而慢慢消失。
|
||||
|
||||
虽然 DevOps 平台的出现在很多方面都是有意义的,但它确实违背了促成我们今天使用的 DevOps 工具的开源精神。
|
||||
|
||||
### DevOps 工具:一个拐点
|
||||
|
||||
随着工作模式的改变,人们对 DevOps 工具链的安全和合规性的关注必然会增加。
|
||||
|
||||
#### 正在变化的工作环境
|
||||
|
||||
我们的工作方式与企业其他部门一样影响着 DevOps 团队。远程和混合 DevOps 团队需要安全的工具链。整个流水线中不断变化的协作和报告要求,如异步工作和经理要求返回办公室等,也是日益增长的必要条件。
|
||||
|
||||
#### 软件供应链安全市场
|
||||
|
||||
在高调的攻击和美国联邦政府的回应之后,软件供应链安全市场引起了很多关注。目前还没有组织将软件供应链的攻击归咎于开源,但我们将看到 DevOps/DevSecOps 实践和工具的延伸,以对抗这种威胁。不过,当一切都结束时,DevOps/DevSecOps 的工具和实践将超过一些转向这一趋势的初创公司。
|
||||
|
||||
### 结语
|
||||
|
||||
对于 DevOps 领域的开源软件(OSS)项目来说,这还远远没有结束,但 DevOps 利益相关者有权开始询问未来的工具链。然而,OSS DevOps 项目确实需要考虑它们的未来,特别是考虑到日益增长的直接影响流水线的安全和合规性问题。
|
||||
|
||||
DevOps 平台供应商与开源工具的未来趋势是合作性竞争,即 DevOps 平台供应商向作为其平台基础的开源工具贡献时间、金钱和资源。一个有趣的例子就是 [OpsVerse][5],它用他们为客户管理的开源工具提供了一个 DevOps 平台。
|
||||
|
||||
然后,还有一个未来,随着更多的企业构建的工具链迁移到云端,开源 DevOps 工具项目将继续繁荣和创新。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/10/open-source-devops-tools
|
||||
|
||||
作者:[Will Kelly][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lxbwolf](https://github.com/lxbwolf)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/willkelly
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/article/22/4/our-favorite-git-commands
|
||||
[2]: https://opensource.com/article/19/9/how-contribute-gitlab
|
||||
[3]: https://opensource.com/resources/what-is-kubernetes
|
||||
[4]: https://enterprisersproject.com/article/2019/1/kubernetes-security-4-tips-manage-risks?intcmp=7013a000002qLH8AAM
|
||||
[5]: https://www.opsverse.io/
|
||||
[6]: https://www.redhat.com/architect/devsecops-culture?intcmp=7013a000002qLH8AAM
|
@ -0,0 +1,285 @@
|
||||
[#]: subject: "Give Your Linux Desktop a Halloween Makeover"
|
||||
[#]: via: "https://itsfoss.com/linux-halloween-makeover/"
|
||||
[#]: author: "Sreenath https://itsfoss.com/author/sreenath/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "chai001125"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15190-1.html"
|
||||
|
||||
打造万圣节 Linux 桌面
|
||||
======
|
||||
|
||||
马上就到万圣节了,太棒啦!
|
||||
|
||||
我相信你已经有了一些庆祝万圣节的想法。给你的 Linux 桌面做一个像幽灵般的黑暗改造,就类似于下面的屏幕截图,你觉得怎么样?
|
||||
|
||||
![ubuntu halloween theming final looks][1]
|
||||
|
||||
可定制是 Linux 的一大优势,对 Linux 可进行的定制是多种多样且没有尽头的。之前,我们向你展示过 [如何让你的 Linux 看起来像 macOS][2] 的方法。今天,我将继续分享一些定制“万圣节”Linux 桌面的技巧。
|
||||
|
||||
可以通过主题、图标、扩展、字体、Conky 等一系列配置组合起来,来实现 Linux 桌面的定制。_虽然,你可以在任何的 Linux 发行版和桌面环境中配置这些东西,但是仅在一个教程中展示所有 Linux 发行版和桌面环境的桌面定制方法,是不太可行的。_
|
||||
|
||||
因此,在本文中,我将介绍 Ubuntu 与 GNOME 桌面环境的桌面定制方法。
|
||||
|
||||
### 安装所需工具
|
||||
|
||||
你需要一些软件包和工具。在开始定制桌面前,请确保你安装了全部(或大多数)的软件包和工具。
|
||||
|
||||
_你不必做**所有**这些桌面改变。但你做的越多,你的桌面也会美化得更好看。_
|
||||
|
||||
#### 安装 GNOME 优化工具和 GMOME 扩展管理器
|
||||
|
||||
使用以下命令,来安装 GNOME <ruby>优化<rt>Tweaks</rt></ruby> 工具和 GMOME <ruby>扩展管理器<rt>Extensions manager</rt></ruby>:
|
||||
|
||||
```
|
||||
sudo apt install gnome-tweaks gnome-extension-manager
|
||||
```
|
||||
|
||||
在基于 KDE 的 Linux 系统中,没有可以更改 Linux 桌面外观的优化工具。但是,你可以使用 Kvantum-Manager 这一应用程序来更改外观,请参考我在 [KDE 主题指南][3] 中的讨论。
|
||||
|
||||
#### 安装 Conky(可选)
|
||||
|
||||
你可以选择是否要安装 Conky ,因为现在 conky-manager 项目已经不再维护了,因此继续使用 Conky 可能会有点棘手。但无论如何,我们用它来增加万圣节外观的感觉。
|
||||
|
||||
```
|
||||
sudo apt install conky-all
|
||||
```
|
||||
|
||||
#### 安装 Neofetch 或者 Shell-color 脚本
|
||||
|
||||
这个步骤也可以由你自主选择。你可以选择使用 [neofetch][4],因为 `neofetch` 工具已经在 Ubuntu 仓库中了,你可以直接通过 `apt install` 安装,并且 `neofetch` 使用起来也很简单。
|
||||
|
||||
```
|
||||
sudo apt install neofetch
|
||||
```
|
||||
|
||||
[Shell-color 脚本][5] 是另一个不错的选择。在 Arch 用户仓库(AUR)中有该软件包,Arch Linux 用户可以从 AUR 安装 Shell-color 脚本。而在 Ubuntu 中,你则需要手动安装它。
|
||||
|
||||
```
|
||||
git clone https://gitlab.com/dwt1/shell-color-scripts.git
|
||||
cd shell-color-scripts
|
||||
sudo make install
|
||||
```
|
||||
|
||||
#### 安装主题、图标、字体和壁纸工具
|
||||
|
||||
我正在使用的是 [Sweet][6] 主题工具、[Beautiline][7] 图标软件包、[simple1e][8] 光标工具和 [Grey-Minimalistic][9] Conky 主题,下载好这些工具后,再解压包。你还要下载 [Creepster][10] 字体。
|
||||
|
||||
最后,从互联网上下载一张 [万圣节幽灵氛围的壁纸][11]。
|
||||
|
||||
> 请注意!你即将要进行大量的定制和更改。要恢复到原来普通的外观,你可以通过撤销你所做的所有更改。一个更简单的方法是:创建一个管理员权限的新用户,并使用该新用户进行所有这些更改。这样,你的原始用户帐户和外观就不会受到影响。在万圣节结束后,你可以删除这个新增的用户。
|
||||
|
||||
现在,你有了所有定制桌面的工具和资源,是时候使用它们了!
|
||||
|
||||
### 安装并使用扩展
|
||||
|
||||
打开 GMOME <ruby>扩展管理器<rt>Extensions manager</rt></ruby>。在 Ubuntu 22.04 中,你可以在<ruby>浏览<rt>Browse</rt></ruby>菜单下安装扩展。
|
||||
|
||||
![install gnome shell extensions user themes blur my shell and dash to dock][12]
|
||||
|
||||
在其他版本的 Ubuntu 和其他带有 GNOME 的发行版上,你可以通过浏览器 [安装 shell 扩展][13],来安装扩展。为了实现打造万圣节桌面的目的,请安装以下扩展程序:
|
||||
|
||||
- [User Themes][14]
|
||||
- [Dash to Dock][15]
|
||||
- [Blur my Shell][16]
|
||||
|
||||
此外,请确保所有的扩展都已启用。
|
||||
|
||||
### 配置主题、图标和字体
|
||||
|
||||
你需要将解压的主题文件夹复制,并粘贴到 `~/.themes` 目录下,将解压的图标和光标文件夹复制,并粘贴到 `~/.icons` 目录下。
|
||||
|
||||
接下来,打开 GNOME <ruby>优化<rt>Tweaks</rt></ruby> 工具,并应用主题、图标和字体等设置,如下的截图所示。
|
||||
|
||||
![set themes with gnome tweaks][17]
|
||||
|
||||
要 [在 Ubuntu 中使用自定义字体][18],请右键单击你下载和解压的字体文件,然后选择使用<ruby>字体管理器<rt>Font manager</rt></ruby>打开。我打算使用的是 [Creepster][10] 字体。
|
||||
|
||||
![right click on font file and select open with fonts][19]
|
||||
|
||||
然后,点击右上角的<ruby>安装<rt>Install</rt></ruby>按钮。
|
||||
|
||||
![install font using font manager application][20]
|
||||
|
||||
请注意:在某些系统中,点击安装按钮不会显示“<ruby>已安装<rt>installed</rt></ruby>”的提示。在这种情况下,你只需关闭界面就行了,因为一旦你点击了安装按钮,该字体就已经安装上了。
|
||||
|
||||
再重新打开 GNOME <ruby>优化<rt>Tweaks</rt></ruby> 工具,然后前往<ruby>字体<rt>Fonts</rt></ruby>边栏,在这里,你可以更改各个文件类型的字体,如下图所示。
|
||||
|
||||
![change system fonts using gnome tweaks][21]
|
||||
|
||||
请注意,对于终端,需要等宽字体。在这里,我使用了普通字体,这里可能会让你稍稍有点迷失。
|
||||
|
||||
### 应用 Dash to Dock 扩展设置
|
||||
|
||||
首先,你要使用 GNOME 扩展应用程序,来**关闭 Ubuntu Dock 扩展**。
|
||||
|
||||
![Disable Ubuntu Dock][22]
|
||||
|
||||
如果 Dash to Dock 扩展还尚未运行的话,请先运行它。
|
||||
|
||||
然后,右键单击在底部显示的 “Dash to Dock” 按钮,然后选择 “Dash to Dock Settings”。
|
||||
|
||||
![select dash to dock settings][23]
|
||||
|
||||
在设置中,你需要调整一些小东西。
|
||||
|
||||
首先,使用滑块,来缩小图标的大小。
|
||||
|
||||
![setting dash to dock icon size][24]
|
||||
|
||||
之后,你需要减少程序坞的不透明度,我更喜欢完全透明的程序坞。
|
||||
|
||||
所以,我将不透明度设置为 <ruby>固定<rt>fixed</rt></ruby>,并使用滑块将其降至零,如下图所示。
|
||||
|
||||
![opacity setting for dash to dock][25]
|
||||
|
||||
### GNOME 终端的设置
|
||||
|
||||
你想得到的 Linux 桌面的主要变化是自定义**模糊且有一定透明度**的 `neofetch` 外观(或 shell-color 脚本外观)。
|
||||
|
||||
我们之前在 GNOME <ruby>优化<rt>Tweaks</rt></ruby> 工具中应用了等宽字体,因此 GNOME 终端中的字体也会被更改。
|
||||
|
||||
首先,从 <ruby>偏好设置<rt>preferences</rt></ruby> 中创建一个新的配置文件。
|
||||
|
||||
![select preferences from hamburger menu][26]
|
||||
|
||||
单击 `+` ,来创建一个新配置文件。输入文件的名称,并点击 <ruby>创建<rt>create</rt></ruby>,如下所示:
|
||||
|
||||
![create new profile in gnome terminal][27]
|
||||
|
||||
在这个新配置文件中,更改透明度设置,将透明度的滑块放在中间,如下图所示:
|
||||
|
||||
![set transperancy to gnome terminal][28]
|
||||
|
||||
完成后,要将此配置文件设置为默认的配置文件,单击与新配置文件关联的三角形按钮,然后选择 “<ruby>设置为默认<rt>Set as Default</rt></ruby>”。
|
||||
|
||||
![set new profile as default in gnome terminal][29]
|
||||
|
||||
#### 设置模糊效果
|
||||
|
||||
上述的步骤只会将终端变成一个透明的 shell。但是,如果你还需要有利于提高可见性的模糊效果,你需要进入到 “Blur my Shell” 扩展进行设置。
|
||||
|
||||
![blur my shell extension settings][30]
|
||||
|
||||
首先,进入到 <ruby>应用程序<rt>Application</rt></ruby> 菜单。现在,确保终端已打开,并置于屏幕明显的位置。单击 <ruby>添加<rt>Add</rt></ruby> 窗口,然后选择 GNOME 终端窗口,以设置模糊效果。请注意:此功能还处于测试阶段,因此可能会出现一些小故障。
|
||||
|
||||
![applying blur effect to selected windows][31]
|
||||
|
||||
也可以对其他应用程序(例如 Nautilus 文件管理器)重复此过程,来设置模糊效果。
|
||||
|
||||
#### 定制 Neofetch
|
||||
|
||||
Neofetch 的最佳功能之一是其可定制性。你可以使用多种方法来调整 Neofetch 的外观。为了更有万圣节氛围,我选择了一个南瓜图像,来代替发行版的徽标。
|
||||
|
||||
Neofetch 提供以各种格式添加自定义图像的功能。为此,也有各种供支持的后端。在这里,我使用 jp2a 后端,它将使用 [转换成 ASCII 的图片][32]。
|
||||
|
||||
```
|
||||
neofetch --jp2a /path/to/your/image/file.png
|
||||
```
|
||||
|
||||
![neofetch with custom backend][33]
|
||||
|
||||
上述命令将创建一个带有自定义图片的 Neofetch 实例。你可以将此命令写入你的 `.bashrc` 文件,以便永久放置该图片。
|
||||
|
||||
_不幸的是,这在我的 Wayland 实例上并不起作用。_
|
||||
|
||||
#### 自定义 Shell-Color 脚本
|
||||
|
||||
如果你安装的是 Shell Color 脚本工具,则会有多种 shell 脚本。要列出可用的脚本,请使用命令:
|
||||
|
||||
```
|
||||
colorscript -l
|
||||
```
|
||||
|
||||
![ghosts shell color script][34]
|
||||
|
||||
你可以通过将 `colorscript random` 写入你的 `.bashrc` 文件,以每次都获得一个随机的颜色脚本,或者通过将`colorscript -e <name>`写入你的 `.bashrc` 文件,来得到一个特定的颜色脚本。
|
||||
|
||||
### 设置 Conky
|
||||
|
||||
我使用的是 Deviantart 的 [Grey-Minimalistic][9] conky 主题。Conky 主题的每种类型都有不同的安装方法。因此,如果你想要使用另一个 Conky 文件的话,请遵循它的 `README` 文件中描述的设置方法,进行设置。
|
||||
|
||||
解压 Conky 主题文件,里面有几个文件夹。首先,你需要安装关联的图标和字体,也就是说,使用 <ruby>字体管理器<rt>font-manager</rt></ruby> 安装给定的字体。接着,将图标文件夹拷贝,并粘贴到 `~/.icons` 文件夹。
|
||||
|
||||
![copy and paste conky files to home directory][35]
|
||||
|
||||
然后,进入 Conky 文件夹。确保你已 [启用查看隐藏文件][36],将 `.conkyrc` 文件和 `.conky-vision-icons` 文件复制到你的主目录,如上图所示。
|
||||
|
||||
现在,启动 Conky,看起来就变成下图这样了。
|
||||
|
||||
![conky theme applied][37]
|
||||
|
||||
将 Conky 添加到 [自启动应用程序列表][38] 中,以便在每次开机时都能自启动。
|
||||
|
||||
![add conky to the list of startup applications][39]
|
||||
|
||||
### 更改壁纸
|
||||
|
||||
快要完成啦。你现在唯一需要做的就是 [更改背景壁纸][40]。我相信你之前已经下载好了有万圣节幽灵气氛的壁纸,右键 “<ruby>设置为壁纸<rt>Set as Wallpaper</rt></ruby>” 就好啦。
|
||||
|
||||
![set image as wallpaper from nautilus][41]
|
||||
|
||||
### 看看最终成果吧!
|
||||
|
||||
如果你遵循上面的大多数步骤的话,你就会得到一个与以下截图相似的桌面。
|
||||
|
||||
![ubuntu halloween theme final look][42]
|
||||
|
||||
这个桌面对于万圣节来说够吓人了吗?你觉得怎么样?在评论区中告诉我吧。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/linux-halloween-makeover/
|
||||
|
||||
作者:[Sreenath][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[chai001125](https://github.com/chai001125)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/sreenath/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://itsfoss.com/wp-content/uploads/2022/10/ubuntu-halloween-theming-final-looks.jpg
|
||||
[2]: https://itsfoss.com/make-ubuntu-look-like-macos/
|
||||
[3]: https://itsfoss.com/properly-theme-kde-plasma/
|
||||
[4]: https://itsfoss.com/using-neofetch/
|
||||
[5]: https://gitlab.com/dwt1/shell-color-scripts
|
||||
[6]: https://www.gnome-look.org/p/1253385
|
||||
[7]: https://www.gnome-look.org/p/1425426
|
||||
[8]: https://www.gnome-look.org/p/1405210
|
||||
[9]: https://www.deviantart.com/bryantlloyd/art/Grey-Minimalistic-634726564
|
||||
[10]: https://fonts.google.com/specimen/Creepster?query=creepster
|
||||
[11]: https://www.wallpaperflare.com/search?wallpaper=spooky
|
||||
[12]: https://itsfoss.com/wp-content/uploads/2022/10/install-gnome-shell-extensions-user-themes-blur-my-shell-and-dash-to-dock.png
|
||||
[13]: https://itsfoss.com/gnome-shell-extensions/
|
||||
[14]: https://extensions.gnome.org/extension/19/user-themes/
|
||||
[15]: https://extensions.gnome.org/extension/307/dash-to-dock/
|
||||
[16]: https://extensions.gnome.org/extension/3193/blur-my-shell/
|
||||
[17]: https://itsfoss.com/wp-content/uploads/2022/10/set-themes-with-gnome-tweaks.png
|
||||
[18]: https://itsfoss.com/install-fonts-ubuntu/
|
||||
[19]: https://itsfoss.com/wp-content/uploads/2022/10/right-click-on-font-file-and-select-open-with-fonts.png
|
||||
[20]: https://itsfoss.com/wp-content/uploads/2022/10/install-font-using-font-manager-application.png
|
||||
[21]: https://itsfoss.com/wp-content/uploads/2022/10/change-system-fonts-using-gnome-tweaks.png
|
||||
[22]: https://itsfoss.com/wp-content/uploads/2020/06/disable-ubuntu-dock.png
|
||||
[23]: https://itsfoss.com/wp-content/uploads/2022/10/select-dash-to-dock-settings.png
|
||||
[24]: https://itsfoss.com/wp-content/uploads/2022/10/setting-dash-to-dock-icon-size.png
|
||||
[25]: https://itsfoss.com/wp-content/uploads/2022/10/opacity-setting-for-dash-to-dock.png
|
||||
[26]: https://itsfoss.com/wp-content/uploads/2022/10/select-preferences-from-hamburger-menu.png
|
||||
[27]: https://itsfoss.com/wp-content/uploads/2022/10/create-new-profile-in-gnome-terminal.png
|
||||
[28]: https://itsfoss.com/wp-content/uploads/2022/10/set-transperancy-to-gnome-terminal.png
|
||||
[29]: https://itsfoss.com/wp-content/uploads/2022/10/set-new-profile-as-default-in-gnome-terminal.png
|
||||
[30]: https://itsfoss.com/wp-content/uploads/2022/10/blur-my-shell-extension-settings.png
|
||||
[31]: https://itsfoss.com/wp-content/uploads/2022/10/applying-blur-effect-to-selected-windows.png
|
||||
[32]: https://itsfoss.com/ascii-image-converter/
|
||||
[33]: https://itsfoss.com/wp-content/uploads/2022/10/neofetch-with-custom-backend.png
|
||||
[34]: https://itsfoss.com/wp-content/uploads/2022/10/ghosts-shell-color-script.png
|
||||
[35]: https://itsfoss.com/wp-content/uploads/2022/10/copy-and-paste-conky-files-to-home-directory.png
|
||||
[36]: https://itsfoss.com/hide-folders-and-show-hidden-files-in-ubuntu-beginner-trick/
|
||||
[37]: https://itsfoss.com/wp-content/uploads/2022/10/conky-theme-applied.png
|
||||
[38]: https://itsfoss.com/manage-startup-applications-ubuntu/
|
||||
[39]: https://itsfoss.com/wp-content/uploads/2022/10/add-conky-to-the-list-of-startup-applications.png
|
||||
[40]: https://itsfoss.com/change-wallpaper-ubuntu/
|
||||
[41]: https://itsfoss.com/wp-content/uploads/2022/10/set-image-as-wallpaper-from-nautilus.png
|
||||
[42]: https://itsfoss.com/wp-content/uploads/2022/10/ubuntu-halloween-theme-final-look.jpg
|
@ -0,0 +1,38 @@
|
||||
[#]: subject: "GitHub Copilot Appears To Be In Violation Of The Open Source Licence"
|
||||
[#]: via: "https://www.opensourceforu.com/2022/10/github-copilot-appears-to-be-in-violation-of-the-open-source-licence/"
|
||||
[#]: author: "Laveesh Kocher https://www.opensourceforu.com/author/laveesh-kocher/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15167-1.html"
|
||||
|
||||
GitHub Copilot 似乎违反了开源许可证的规定
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202210/23/100112lms67c7e8mow8sv6.jpg)
|
||||
|
||||
> 自 Copilot 首次亮相以来,Butterick 就对该计划提出了批评。
|
||||
|
||||
微软在 2018 年支付 75 亿美元收购了 GitHub,此后将这个代码仓库整合到其开发者工具中,同时在很大程度上采取了放手的态度。Matthew Butterick 是一名作家、律师,也是一名程序员,他认为微软基于机器学习的代码助手 GitHub Copilot 存在一些问题,它似乎不正确地对待开源代码许可证。
|
||||
|
||||
GitHub Copilot 是 Visual Studio 和其他 IDE 的一个插件,通过在你输入时提供代码完成的 “建议” 来运作。Codex 是该系统的动力源。然而,Butterick 等开发者认为 AI 在如何学习方面存在问题,或者更具体地说,AI 是从哪里训练的。
|
||||
|
||||
这里的问题是,GitHub 所训练的公开代码仓库是有许可证的,当他们的工作被利用时,需要按照许可证进行。虽然微软对其使用代码的问题一直避而不谈,称其为合理使用,但 Copilot 除了提供建议外,还能生成逐字逐句的代码部分。
|
||||
|
||||
根据 Codex(由微软授权)的开发者 OpenAI的说法,“Codex 是在数以千万计的公开代码仓库中训练出来的,包括 GitHub 上的代码。”微软自己也含糊地将训练材料描述为数十亿行的公共代码。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.opensourceforu.com/2022/10/github-copilot-appears-to-be-in-violation-of-the-open-source-licence/
|
||||
|
||||
作者:[Laveesh Kocher][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.opensourceforu.com/author/laveesh-kocher/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.opensourceforu.com/wp-content/uploads/2022/10/github-logo-2-1-696x348.png
|
@ -0,0 +1,120 @@
|
||||
[#]: subject: "Kubuntu 22.10 is Now Available!"
|
||||
[#]: via: "https://news.itsfoss.com/kubuntu-22-10-release/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15173-1.html"
|
||||
|
||||
Kubuntu 22.10 的新变化
|
||||
======
|
||||
|
||||
> Kubuntu 22.10 可能不是最令人兴奋的升级。但是,它包括了一些有用的变化。
|
||||
|
||||
![Kubuntu 22.10 现已发布][1]
|
||||
|
||||
Kubuntu 是 Ubuntu 的一个官方版本,它在一个精致的 KDE 驱动的软件包中提供了很多功能。
|
||||
|
||||
Kubuntu 22.10 的发布带来了各种改进和一个 [KDE Plasma][2] 的更新版本。
|
||||
|
||||
让我们来看看这个版本的亮点。
|
||||
|
||||
### Kubuntu 22.10 有什么新变化?
|
||||
|
||||
![Kubuntu 22.10 桌面][3]
|
||||
|
||||
Kubuntu 22.10 带来了很多更新,其中一些重要的更新包括:
|
||||
|
||||
- KDE Plasma 5.25
|
||||
- Linux 内核 5.19
|
||||
- PipeWire
|
||||
- Firefox 104
|
||||
- Qt 5.15.6
|
||||
|
||||
> 💡 Kubuntu 22.10 将被支持九个月,直到 **2023 年 7 月**。如果你想要稳定而不是功能,你应该更喜欢使用 [LTS 版本][4]。
|
||||
|
||||
#### KDE Plasma 5.25
|
||||
|
||||
![Kubuntu 22.10 KDE 版本][5]
|
||||
|
||||
尽管最近 [KDE Plasma 5.26][6] 已经发布了,但 Kubuntu 22.10 还是搭载了 KDE Plasma 5.25。
|
||||
|
||||
然而,KDE Plasma 5.25 与 5.24 相比仍然是一个重大的更新,它包含了很多改进,例如,加强了对触摸板/触摸屏的支持,升级了用户界面等等。
|
||||
|
||||
你可以阅读我们对 KDE Plasma 5.25 的报道来了解更多。
|
||||
|
||||
> **[KDE Plasma 5.25:颜色、主题和其他改进][15]**
|
||||
|
||||
另外,你可以期待 KDE Plasma 5.26 作为一个小版本发布,而不是作为 Kubuntu 22.10 发布的一部分。
|
||||
|
||||
#### 默认采用 PipeWire
|
||||
|
||||
像大多数基于 Ubuntu 22.10 的发行版一样,[PipeWire][7] 是这个版本的 Kubuntu 的默认音频/视频处理器。
|
||||
|
||||
它取代了 [PulseAudio][8],众所周知,它与 Ubuntu 22.10 不兼容。
|
||||
|
||||
#### Linux 内核 5.19
|
||||
|
||||
![Kubuntu 22.10 Linux 内核 5.19][9]
|
||||
|
||||
Kubuntu 22.10 采用了最新的 Linux 内核 5.19,这应该会带来对 ARM SoC 和 Arc Alchemist GPU 的支持、Btrfs 的各种改进、对 AMD RDNA3 图形的初步支持等等。
|
||||
|
||||
#### 测试用的 Wayland 会话
|
||||
|
||||
![Kubuntu 22.10 Wayland 会话切换器][10]
|
||||
|
||||
Kubuntu 22.10 具有对 Plasma Wayland 会话的初步支持,但它仅用于测试目的,并不是一个完整的集成。
|
||||
|
||||
![Kubuntu 22.10 Wayland 会话信息][11]
|
||||
|
||||
#### 其他升级
|
||||
|
||||
其他一些更新包括:
|
||||
|
||||
- 自定义桌面重点颜色
|
||||
- 默认浏览器是 Firefox 104 Snap
|
||||
- Qt 5.15.6
|
||||
- LibreOffice 7.4
|
||||
- 改进的应用程序商店
|
||||
|
||||
要探索更多关于该版本的信息,请参考 [官方发布说明][12]。
|
||||
|
||||
### 下载 Kubuntu 22.10
|
||||
|
||||
你可以从 [Ubuntu 的中央镜像库][13] 或其 [官方网站][14] 下载最新的 ISO。
|
||||
|
||||
> **[Kubuntu 22.10][14]**
|
||||
|
||||
*它的官方网站可能需要一段时间来提供 ISO。*
|
||||
|
||||
💬 你对这个版本感到兴奋吗?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/kubuntu-22-10-release/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/content/images/size/w1200/2022/10/kubuntu-22-10-release.jpg
|
||||
[2]: https://kde.org/plasma-desktop/
|
||||
[3]: https://news.itsfoss.com/content/images/2022/10/Kubuntu_22.10_Desktop.png
|
||||
[4]: https://itsfoss.com/long-term-support-lts/
|
||||
[5]: https://news.itsfoss.com/content/images/2022/10/Kubuntu_22.10_KDE_Version.png
|
||||
[6]: https://news.itsfoss.com/kde-plasma-5-26-release/
|
||||
[7]: https://pipewire.org/
|
||||
[8]: https://www.freedesktop.org/wiki/Software/PulseAudio/
|
||||
[9]: https://news.itsfoss.com/content/images/2022/10/Kubuntu_22.10_Linux_Kernel.png
|
||||
[10]: https://news.itsfoss.com/content/images/2022/10/Kubuntu_22.10_Wayland_Session.png
|
||||
[11]: https://news.itsfoss.com/content/images/2022/10/Kubuntu_22.10_Wayland_Session_2.png
|
||||
[12]: https://wiki.ubuntu.com/KineticKudu/ReleaseNotes/Kubuntu
|
||||
[13]: https://cdimage.ubuntu.com/kubuntu/releases/22.10/release/
|
||||
[14]: https://kubuntu.org/getkubuntu/
|
||||
[15]: https://news.itsfoss.com/kde-plasma-5-25-release/
|
@ -0,0 +1,126 @@
|
||||
[#]: subject: "Ubuntu MATE 22.10 Release Has Some Interesting Upgrades!"
|
||||
[#]: via: "https://news.itsfoss.com/ubuntu-mate-22-10-release/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15174-1.html"
|
||||
|
||||
Ubuntu MATE 22.10 的新变化
|
||||
======
|
||||
|
||||
> Ubuntu MATE 22.10 已经发布,其中有一些细微而有用的变化。来看看吧!
|
||||
|
||||
![Ubuntu MATE 22.10 版本有一些有趣的升级!][1]
|
||||
|
||||
Ubuntu MATE 是 [Ubuntu 官方版本][2] 之一,每次升级都会增加有趣的改进。
|
||||
|
||||
它的目标用户是那些既珍惜传统桌面的外观和感觉,又渴望现代操作系统的功能的用户。
|
||||
|
||||
Ubuntu MATE 22.10 版本增加了许多改进和功能,让我们来看看这些。
|
||||
|
||||
### Ubuntu MATE 22.10 的新变化
|
||||
|
||||
![Ubuntu MATE 22.10 桌面][3]
|
||||
|
||||
基于非 LTS 版本的 [Ubuntu 22.10][4] ,Ubuntu MATE 22.10 带来了多项更新,一些关键的亮点包括:
|
||||
|
||||
- 对 MATE 桌面的改进。
|
||||
- 新的 AI 墙纸。
|
||||
- PipeWire 是默认的音频服务器。
|
||||
- 新的 MATE 用户管理器。
|
||||
- Firefox 105 更新。
|
||||
- LibreOffice 7.4。
|
||||
|
||||
> 💡 注意,Ubuntu MATE 的升级通常包括更多的功能补充。但这一次,Martin Wimpress 一直致力于为 Debian MATE 版带来类似的体验。你可以在我们之前的报道中阅读更多细节。
|
||||
|
||||
> [准备好在 Debian Linux 上获得 Ubuntu MATE 体验吧!][15]
|
||||
|
||||
#### MATE 桌面升级
|
||||
|
||||
![Ubuntu MATE 22.10 桌面视图][5]
|
||||
|
||||
MATE 桌面收到了各种错误修复和对 Ayatana 指示器、MATE 面板的更新。
|
||||
|
||||
现在,你可以将小程序居中对齐,与通常的左右对齐选项一起。
|
||||
|
||||
这项功能将在 MATE 桌面 1.28 版中正式出现,但 Ubuntu MATE 团队在 MATE 桌面 1.27 版的基础上将其与这个版本一起推出。
|
||||
|
||||
#### MATE 用户管理器
|
||||
|
||||
![Ubuntu MATE 22.10 用户管理器][6]
|
||||
|
||||
MATE 用户管理器是该发行版的一个新的补充,允许你添加、修改、删除用户账户。
|
||||
|
||||
有了它,你可以选择哪些用户可以成为管理员、设置自动登录、设置个人资料图片,以及管理组成员资格。对于有多个用户的计算机来说,这是一个相当方便和急需的功能。
|
||||
|
||||
#### 新的 AI 壁纸
|
||||
|
||||
![Ubuntu MATE 22.10 AI 壁纸][7]
|
||||
|
||||
这个版本的另一大亮点是增加了新的 AI 生成的壁纸。
|
||||
|
||||
这些看起来很美 😍
|
||||
|
||||
鉴于人工智能生成的壁纸现在正大行其道,Ubuntu MATE 团队在 Ubuntu MATE 22.10 中加入了一批新的壁纸。
|
||||
|
||||
它是由 [Simon Butcher][8] 使用扩散模型创建的,用来描画 “捻角羚”。
|
||||
|
||||
#### Linux 内核 5.19
|
||||
|
||||
Ubuntu MATE 22.10 得益于 Linux 内核 5.19 带来的改进,对各种 ARM SoC、Arc Alchemist GPU 等提供了增强支持。
|
||||
|
||||
你可以阅读我们的相关报道以了解更多。
|
||||
|
||||
#### 🛠️ 其他变化和改进
|
||||
|
||||
与其他新版本一样,Ubuntu MATE 22.10 用 [PipeWire][10] 取代了 [PulseAudio][9],以获得更好的音频处理,并加入了额外的蓝牙编解码器,如 AAC、LDAC、aptX 和 aptX HD。
|
||||
|
||||
其他值得注意的变化包括:
|
||||
|
||||
- 更新的应用程序包括:Firefox 105、LibreOffice 7.4、Celluloid 0.20 和 Evolution 3.46。
|
||||
- Ubuntu MATE HUD 支持 MATE、XFCE 和 Budgie,具有更多的配置能力。
|
||||
|
||||
如果你感到好奇,你可以查看 Ubuntu MATE 22.10 [官方发布说明][11]。
|
||||
|
||||
### 下载 Ubuntu MATE 22.10
|
||||
|
||||
你可以从 [Ubuntu 的中央镜像库][12] 或其 [官方网站][13] 下载最新的 ISO。
|
||||
|
||||
*它的官方网站/仓库可能需要一段时间来提供 ISO。*
|
||||
|
||||
> 💡 Ubuntu MATE 22.10 将被支持九个月,直到 **2023 年 7 月** 。如果你想要稳定而不是功能,你应该更喜欢使用 [LTS 版本][14]。
|
||||
|
||||
> **[下载 Ubuntu MATE 22.10][13]**
|
||||
|
||||
💬 _有兴趣尝试 Ubuntu MATE 22.10 吗?请在评论中告诉我你的想法。_
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/ubuntu-mate-22-10-release/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/content/images/size/w1200/2022/10/ubuntu-mate-22-10-release.jpg
|
||||
[2]: https://itsfoss.com/which-ubuntu-install/
|
||||
[3]: https://news.itsfoss.com/content/images/2022/10/ubuntu-mate-22-10.png
|
||||
[4]: https://news.itsfoss.com/ubuntu-22-10-features/
|
||||
[5]: https://news.itsfoss.com/content/images/2022/10/Ubuntu_MATE_22.10_Desktop.png
|
||||
[6]: https://news.itsfoss.com/content/images/2022/10/Ubuntu_MATE_22.10_User_Manager.png
|
||||
[7]: https://news.itsfoss.com/content/images/2022/10/Ubuntu_MATE_22.10_AI_Wallpapers.png
|
||||
[8]: https://twitter.com/simonjbutcher
|
||||
[9]: https://www.freedesktop.org/wiki/Software/PulseAudio/
|
||||
[10]: https://pipewire.org/
|
||||
[11]: https://ubuntu-mate.org/blog/ubuntu-mate-kinetic-kudu-release-notes/
|
||||
[12]: https://cdimage.ubuntu.com/ubuntu-mate/releases/22.10/release/
|
||||
[13]: https://ubuntu-mate.org/download/
|
||||
[14]: https://itsfoss.com/long-term-support-lts/
|
||||
[15]: https://news.itsfoss.com/ubuntu-mate-debian/
|
@ -0,0 +1,121 @@
|
||||
[#]: subject: "Ubuntu Budgie 22.10 Release Improves Control Center and Removes Some GNOME Apps"
|
||||
[#]: via: "https://news.itsfoss.com/ubuntu-budgie-22-10-release/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "littlebirdnest"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15179-1.html"
|
||||
|
||||
Ubuntu Budgie 22.10 的新变化
|
||||
======
|
||||
|
||||
> Ubuntu Budgie 22.10 是一个有趣的版本,它删除了几个 GNOME 应用程序,以及一些其他改进。
|
||||
|
||||
![Ubuntu Budgie 22.10 Release Improves Control Center and Removes Some GNOME Apps][1]
|
||||
|
||||
[Ubuntu Budgie][2] 是 Ubuntu 的官方版本,因其传统的桌面界面和最小的软件膨胀而广受欢迎。
|
||||
|
||||
Ubuntu Budgie 22.10 的发布带来了一些关键的调整和补充。
|
||||
|
||||
### 🆕 Ubuntu Budgie 22.10 有什么新变化
|
||||
|
||||
![ubuntu budgie 22.10][3]
|
||||
|
||||
基于 Ubuntu 22.10 “<ruby>充满活力的捻角羚<rt>Kinetic Kudu</rt></ruby>”,Ubuntu Budgie 22.10 带来了 Budgie 桌面 10.6.4 和许多其他改进。
|
||||
|
||||
一些值得注意的亮点包括:
|
||||
|
||||
- 增强型 Budgie <ruby>控制中心<rt>Control Center</rt></ruby>
|
||||
- 更新了 Budgie 的“<ruby>欢迎<rt>Welcome</rt></ruby>”应用
|
||||
- 替换各种基于 GNOME 的应用程序
|
||||
- 对翻译进行了更新
|
||||
|
||||
#### Budgie 桌面和控制中心
|
||||
|
||||
![ubuntu budgie 22.10 desktop settings][4]
|
||||
|
||||
Budgie 桌面以及更新到 V10.6.4, 它添加了一个新的全局选项来控制小程序之间的间距,并对工作区和时钟小程序进行了各种改进。
|
||||
|
||||
![ubuntu budgie 22.10 display color profiles][5]
|
||||
|
||||
Budgie <ruby>控制中心<rt>Control Center</rt></ruby>也得到了一堆调整,例如重新设计的显示颜色配置文件支持,修改了对屏幕分享的支持,如 [RDP][6] 和 [VNC][7],用于显示缩放的选项,等等。
|
||||
|
||||
#### 升级了欢迎应用
|
||||
|
||||
![ubuntu budgie 22.10 welcome app][8]
|
||||
|
||||
Ubuntu Budgie 22.10 特别升级了 [Budgie 的欢迎应用][9],改善了翻译以及一些其他改进。
|
||||
|
||||
#### 默认的应用的变化
|
||||
|
||||
Ubuntu Budgie 的开发人员已经开始替换和删除基于 GNOME 的应用程序,转而使用基于 MATE 的应用程序和其他替代品。
|
||||
|
||||
他们决定这样做是因为基于 GNOME 的应用程序在 Budgie 中的外观与其他具有圆角边缘的应用程序的外观不一致。
|
||||
|
||||
这些不一致是由于 GNOME 根据其样式和主题需求而转到 Libadwaita 库造成的。
|
||||
|
||||
Libadwaita 库是 GNOME 的一个有争议的补充,没有多少用户喜欢,你可以通过我们的报道来了解更多信息。
|
||||
|
||||
> **[你对在 Linux 世界中 GNOME 的 Libadwaita 库怎么看?][15]**
|
||||
|
||||
以下是一些已删除或替换的应用程序:
|
||||
|
||||
- GNOME 计算器被 MATE 计算器取代。
|
||||
- 删除了 GNOME 日历。
|
||||
- GNOME 系统监视器已由 MATE 系统监视器取代。
|
||||
- 删除了 GNOME 截图。
|
||||
- [字体管理器][10] 替代了 GNOME 字体查看器。
|
||||
|
||||
#### 🛠️ 其他改变
|
||||
|
||||
其他改变包括以下:
|
||||
|
||||
- 重新开发的内置主题
|
||||
- 移除 PulseAudio,并支持 PipeWire
|
||||
- 原生的截图功能
|
||||
- 支持 WebP 图像
|
||||
- 能够查看显示器的刷新率
|
||||
|
||||
你可以通过 [发行说明][11] 了解更多。
|
||||
|
||||
### 📥 下载 Ubuntu Budgie 22.10
|
||||
|
||||
你可以在 [Ubuntu 中央镜像仓库][12] 或者它的 [官方网站][13] 下载最新的 ISO。
|
||||
|
||||
*其官方网站可能需要一段时间才能提供 ISO。*
|
||||
|
||||
> **[下载 Ubuntu Budgie 22.10][13]**
|
||||
|
||||
> 💡 Ubuntu Budgie 22.10 将支持 9 个月直到 **2023 年 6 月**。如果你想使用稳定的功能,更应该选择 [LTS 版本][14]。
|
||||
|
||||
💬 你如何看待这个非 LTS 版本?愿意尝试一下吗?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/ubuntu-budgie-22-10-release/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[littlebirdnest](https://github.com/littlebirdnest)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/content/images/size/w1200/2022/10/ubuntu-budgie-22-10-release.png
|
||||
[2]: https://ubuntubudgie.org/
|
||||
[3]: https://news.itsfoss.com/content/images/2022/10/Ubuntu_Budgie_22.10.png
|
||||
[4]: https://news.itsfoss.com/content/images/2022/10/Ubuntu_Budgie_22.10_Desktop_Settings.png
|
||||
[5]: https://news.itsfoss.com/content/images/2022/10/Ubuntu_Budgie_22.10_Color_Profiles.png
|
||||
[6]: https://en.wikipedia.org/wiki/Remote_Desktop_Protocol
|
||||
[7]: https://en.wikipedia.org/wiki/Virtual_Network_Computing
|
||||
[8]: https://news.itsfoss.com/content/images/2022/10/Ubuntu_Budgie_22.10_Welcome.png
|
||||
[9]: https://ubuntubudgie.org/2022/02/quick-overview-of-budgie-welcome-application/
|
||||
[10]: https://itsfoss.com/font-manager/
|
||||
[11]: https://ubuntubudgie.org/2022/09/ubuntu-budgie-22-10-release-notes/
|
||||
[12]: https://cdimage.ubuntu.com/ubuntu-budgie/releases/22.10/
|
||||
[13]: https://ubuntubudgie.org/downloads/
|
||||
[14]: https://itsfoss.com/long-term-support-lts/
|
||||
[15]: https://news.itsfoss.com/gnome-libadwaita-library/
|
@ -0,0 +1,134 @@
|
||||
[#]: subject: "Xubuntu 22.10 Releases With Xfce Upgrades, and Other Refinements"
|
||||
[#]: via: "https://news.itsfoss.com/xubuntu-22-10-release/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "littlebirdnest"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15188-1.html"
|
||||
|
||||
Xubuntu 22.10 的新变化
|
||||
======
|
||||
|
||||
> Xubuntu 22.10 提供了精致的 Xfce 体验。请读此文了解详情。
|
||||
|
||||
![Xubuntu 22.10 Releases With Xfce Upgrades, and Other Refinements][1]
|
||||
|
||||
Xubuntu 是基于 Xfce 的 Ubuntu 官方版本。
|
||||
|
||||
它也是最好的轻量级 Linux 发行版之一。
|
||||
|
||||
随着最新的 Xubuntu 22.10 “Kinetic Kudu” 版本,你可以看到改进的桌面环境、添加的功能,以及全面的细化。
|
||||
|
||||
### Xubuntu 22.10 的新变化
|
||||
|
||||
![Xubuntu 22.10 home][2]
|
||||
|
||||
Xubuntu 22.10 带来了一些令人兴奋的升级。一些亮点包括:
|
||||
|
||||
- Xfce 4.16(或 Xfce 4.17 开发版)
|
||||
- Catfish 的外观进行了更新。
|
||||
- 更新了新图标,弃用了 elementary-xfce-darker 主题。
|
||||
- Mousepad 搜索历史。
|
||||
- Thundar 文件管理器的改进。
|
||||
- Xfce 任务管理器。
|
||||
|
||||
> 💡 Xubuntu 22.10 将支持九个月,直到 **2023 年 7 月**。如果你想要稳定性而不是功能,你应该首选使用 [LTS 版本][3]。
|
||||
|
||||
#### Xfce 4.17 开发版还是 Xfce 4.16?
|
||||
|
||||
Xubuntu 22.10 的发行说明说它专门提供了 Xfce 4.17 开发版本。
|
||||
|
||||
但是,当我安装 Xubuntu 22.10 的 beta 版本(并将其更新到最新版本)时,只具有 Xfce 4.16。
|
||||
|
||||
![][4]
|
||||
|
||||
不确定他们是否退出了 Xfce 4.17 开发版本,或者 Xfce 4.16 现在是否存在。
|
||||
|
||||
#### Catfish 外观
|
||||
|
||||
![xubuntu catfish][5]
|
||||
|
||||
Catfish 是 Xubuntu 上的一个文件搜索工具。通过新的升级,它具有焕然一新的外观,并做了底层的改进。
|
||||
|
||||
与你搜索的文件交互时,你还会获得一个“打开方式”上下文菜单。
|
||||
|
||||
![][6]
|
||||
|
||||
Catfish 还添加了一些细微而有用的功能。
|
||||
|
||||
#### GNOME 43 软件应用
|
||||
|
||||
在值得注意的应用程序更新中,GNOME 的最新软件中心是一个不错的选择。这是 Xubuntu 22.10 的外观:
|
||||
|
||||
![][7]
|
||||
|
||||
当然,它可能无法与 Xfce 上的其他应用程序保持一致,但我认为你应该不会介意。
|
||||
|
||||
#### 图标更新
|
||||
|
||||
随着 elementary-xfce 0.17 图标更新,有许多新图标和更简洁的选项,可提供一致的 Xubuntu 桌面体验。
|
||||
|
||||
![][8]
|
||||
|
||||
此外,elementary-xfce-darkest 主题图标包已被弃用。
|
||||
|
||||
![][9]
|
||||
|
||||
#### 任务管理器右键选项
|
||||
|
||||
![][10]
|
||||
|
||||
你现在可以将完整的进程路径复制到剪贴板。这对于需要从命令行进行故障排除或停止操作很有用。
|
||||
|
||||
### 其他增强功能
|
||||
|
||||
![][11]
|
||||
|
||||
还有其他几个值得注意的变化,包括:
|
||||
|
||||
- Linux 内核 5.19。
|
||||
- Firefox 浏览器 105。
|
||||
- `Alt-Tab` 视图通过更突出的图标进行了改进。
|
||||
- 马赛克拼图添加到 SGT 拼图系列。
|
||||
- Mousepad 文本编辑器现在包括搜索历史记录,以及更多调整。
|
||||
|
||||
要了解有关更改的更多信息,请查看 [官方发行说明][12]。
|
||||
|
||||
### 下载 Xubuntu 22.10
|
||||
|
||||
你可以从 [Ubuntu 的中央镜像库][13] 或它的 [官方网站][14] 下载最新的 ISO 文件。
|
||||
|
||||
官方网站可能需要一段时间才能提供 ISO。
|
||||
|
||||
> **[下载Xubuntu 22.10][14]**
|
||||
|
||||
💬 你觉得 Xubuntu 22.10 如何?请在评论中告诉我。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/xubuntu-22-10-release/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[littlebirdnest](https://github.com/littlebirdnest)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/content/images/size/w1200/2022/10/xubuntu-22-10-release.jpg
|
||||
[2]: https://news.itsfoss.com/content/images/2022/10/xubuntu-22-10.png
|
||||
[3]: https://itsfoss.com/long-term-support-lts/
|
||||
[4]: https://news.itsfoss.com/content/images/2022/10/xfce-4-16.jpg
|
||||
[5]: https://news.itsfoss.com/content/images/2022/10/catfish-xubuntu-22-10.png
|
||||
[6]: https://news.itsfoss.com/content/images/2022/10/catfish-openwith-1.jpg
|
||||
[7]: https://news.itsfoss.com/content/images/2022/10/xubuntu-gnome-43-software.jpg
|
||||
[8]: https://news.itsfoss.com/content/images/2022/10/xubuntu-22-10-icons.jpg
|
||||
[9]: https://news.itsfoss.com/content/images/2022/10/xfce-dark-theme.png
|
||||
[10]: https://news.itsfoss.com/content/images/2022/10/task-manager-copy-command-line.jpg
|
||||
[11]: https://news.itsfoss.com/content/images/2022/10/xubuntu-22-10-puzzle.png
|
||||
[12]: https://wiki.xubuntu.org/releases/22.10/release-notes
|
||||
[13]: https://cdimage.ubuntu.com/xubuntu/releases/22.10/release/
|
||||
[14]: https://xubuntu.org/download/
|
147
published/202210/20221020.5 ⭐️ Ubuntu 22.10 Is Here!.md
Normal file
147
published/202210/20221020.5 ⭐️ Ubuntu 22.10 Is Here!.md
Normal file
@ -0,0 +1,147 @@
|
||||
[#]: subject: "Ubuntu 22.10 Is Here!"
|
||||
[#]: via: "https://news.itsfoss.com/ubuntu-22-10-release/"
|
||||
[#]: author: "Jacob Crume https://news.itsfoss.com/author/jacob/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15171-1.html"
|
||||
|
||||
Ubuntu 22.10 的新变化
|
||||
======
|
||||
|
||||
> Ubuntu 22.10 是一个令人印象深刻的版本,它拥有新的快速切换功能、应用程序散布,以及更多。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202210/24/101545l1jae18e1881ee19.jpg)
|
||||
|
||||
Ubuntu 22.10 “<ruby>充满活力的捻角羚<rt>Kinetic Kudu</rt></ruby>”来了。它带来了许多重大的改进,特别是 Linux 内核 5.19 和 GNOME 43 的体验。
|
||||
|
||||
当然,这是一个经过定制的 GNOME 体验,现有的 Ubuntu 用户会很熟悉。
|
||||
|
||||
那么,Ubuntu 22.10 都有哪些新变化呢?让我们一起来看看。
|
||||
|
||||
### Ubuntu 22.10 的新变化
|
||||
|
||||
![][2]
|
||||
|
||||
除了 GNOME 43 之外,Ubuntu 22.10 还包括:
|
||||
|
||||
- 一个改进的 <ruby>设置<rt>Settings</rt></ruby> 应用程序。
|
||||
- 经典的 Unity 应用程序<ruby>散布模式<rt>Spread Mode</rt></ruby>的复活。
|
||||
- 一些著名的应用程序被移植到 GTK4 和 Libadwaita。
|
||||
- 全系统支持 WebP。
|
||||
- PipeWire 采样管默认的音频服务器。
|
||||
- Linux 内核 5.19。
|
||||
|
||||
> 💡 Ubuntu 22.10 将被支持九个月,直到 **2023 年 7 月**。如果你想要稳定而不是功能,你应该更愿意使用 [LTS 版本][3]。
|
||||
|
||||
#### 🎨 视觉改进
|
||||
|
||||
当第一次测试一个新版本时,视觉上的变化总是最先被注意到的。在 Ubuntu 22.10 中尤其如此,这要归功于 [GNOME 43][4] 所带来的重大改进。
|
||||
|
||||
![Ubuntu 22.10 快速设置][5]
|
||||
|
||||
首先,我们有全新的快速设置菜单,它取代了旧的、相当笨拙的系统菜单。与安卓、iOS 和 Windows 11 中的菜单类似,这个新增的菜单允许你打开和关闭 Wi-Fi 和蓝牙,所有这些都无需进入<ruby>设置<rt>Settings</rt></ruby>应用程序。
|
||||
|
||||
当然,在这个版本中我们还得到了全新的壁纸。
|
||||
|
||||
![Ubuntu 22.10 壁纸][6]
|
||||
|
||||
对于这个变化,我除了喜欢并希望从社区中看到更多这样的设计之外,没有什么别的可说的。
|
||||
|
||||
此外,更多的应用程序被移植到了 GTK4,包括对 Nautilus 文件管理器的改进。
|
||||
|
||||
一些有价值的新增功能包括:
|
||||
|
||||
- 拖动并选择文件的能力(橡皮筋选择)。
|
||||
- 自适应视图与一个紧凑的窗口。
|
||||
- 新的文件上下文菜单。
|
||||
|
||||
你可以通过我们的详细报道来探索 Nautilus 的改进。
|
||||
|
||||
#### 👴 应用程序散布回来了!
|
||||
|
||||
我不太喜欢的 GNOME 的一个部分是多窗口应用程序的切换,我相信很多其他用户都有这样的不满。
|
||||
|
||||
![Ubuntu 22.04][7]
|
||||
|
||||
幸运的是,Ubuntu 22.10 现在提供了一个很好的解决方案,对于长期用户来说应该是很熟悉的。终于,在 2017 年放弃对 Unity 的支持五年后,Ubuntu 的开发者们又把应用程序<ruby>散布<rt>Spread</rt></ruby>带了回来。
|
||||
|
||||
![Ubuntu 22.10应用程序散布][8]
|
||||
|
||||
这是一个重大的改进,我很惊讶 GNOME 自己没有这样做。
|
||||
|
||||
#### 🛠️ 设置的改进
|
||||
|
||||
虽然不是大多数人日常使用的应用程序,但<ruby>系统设置<rt>System Settings</rt></ruby>是 GNOME 体验的一个核心部分。考虑到这一点,看到它接受了一次重大的视觉改造,以及移植到了 GTK 4 和 Libadwaita,真是太棒了。
|
||||
|
||||
![Ubuntu 22.10 桌面设置][9]
|
||||
|
||||
因此,它现在变得更好看了,而且是自适应的,这意味着它在任何尺寸下都能很好地工作,甚至在像 PinePhone 这样的 Linux 手机上也能很好地工作!
|
||||
|
||||
另一个与设置有关的变化是增加了一个新的 “<ruby>Ubuntu 桌面设置<rt>Ubuntu Desktop Settings</rt></ruby>”菜单项。这提供了一个单一的、统一的地方来定制和改变你所有的 Ubuntu 特定设置。
|
||||
|
||||
#### Linux 内核 5.19
|
||||
|
||||
Ubuntu 22.10 还带来了一个更新的内核,即 [Linux 内核 5.19][10]。这个版本的改进相当少,尽管它确实带来了对一些下一代硬件的改进支持。
|
||||
|
||||
你应该注意到这是 Linux 5.x 系列的最后一个版本,因为 Linux 内核下一个版本跳到了 6.0。
|
||||
|
||||
#### 其他变化
|
||||
|
||||
![Ubuntu 22.10 webp][11]
|
||||
|
||||
总的来说有几个细微的调整。但其中一些基本的调整包括:
|
||||
|
||||
- 图像应用程序默认支持 .WebP 图像格式。
|
||||
- GNOME 文本编辑器是默认编辑器。你可以安装 gedit 并使其成为默认的。
|
||||
- GNOME 图书应用程序已经不再可用。Ubuntu 推荐 [Foliate][12] 作为替代。
|
||||
- 不再默认安装 To Do 应用程序,并且它有了一个新的名字,“Endeavour”。
|
||||
- GNOME 终端仍然是默认的终端应用。如果需要,可以安装 [GNOME 控制台][13]。
|
||||
- 更新了 Firefox 104、[Thunderbird 102][14] 和 [Libreoffice 7.4][15] 等应用程序。
|
||||
- 更多的应用程序已经被移植到 GTK4,特别是 [Nautilus][16]。
|
||||
|
||||
> ℹ️ 注意,我们的列表集中在对桌面终端用户重要的变化上。如果你想知道更多关于服务器和其他使用情况的变化/更新,请参考 [官方发布说明][17]。
|
||||
|
||||
### 下载 Ubuntu 22.10
|
||||
|
||||
你可以从 [Ubuntu 的中央镜像库][18] 或其 [官方网站][19] 下载最新的 ISO。
|
||||
|
||||
**官方网站/仓库可能需要一段时间来提供 ISO 的下载。
|
||||
|
||||
> **[下载Ubuntu 22.10][19]**
|
||||
|
||||
💬 有兴趣尝试 Ubuntu 22.10 吗?请在评论中告诉我你的想法。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/ubuntu-22-10-release/
|
||||
|
||||
作者:[Jacob Crume][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/jacob/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/content/images/size/w1200/2022/10/ubuntu-22-10-release.png
|
||||
[2]: https://news.itsfoss.com/content/images/2022/10/ubuntu-22-10.png
|
||||
[3]: https://itsfoss.com/long-term-support-lts/
|
||||
[4]: https://news.itsfoss.com/gnome-43-release/
|
||||
[5]: https://news.itsfoss.com/content/images/2022/10/ubuntu-22-10-quick-setting.jpg
|
||||
[6]: https://news.itsfoss.com/content/images/2022/10/22.10-wallpaper.png
|
||||
[7]: https://news.itsfoss.com/content/images/2022/10/ubuntu-22-04-window-minimize.png
|
||||
[8]: https://news.itsfoss.com/content/images/2022/10/ubuntu-22-10-app-spread.jpg
|
||||
[9]: https://news.itsfoss.com/content/images/2022/10/ubuntu-22-10-desktop-setting.png
|
||||
[10]: https://news.itsfoss.com/linux-kernel-5-19-release/
|
||||
[11]: https://news.itsfoss.com/content/images/2022/10/ubuntu-22-10-webp.png
|
||||
[12]: https://itsfoss.com/foliate-ebook-viewer/
|
||||
[13]: https://itsfoss.com/gnome-console/
|
||||
[14]: https://news.itsfoss.com/thunderbird-102-release/
|
||||
[15]: https://news.itsfoss.com/libreoffice-7-4-release/
|
||||
[16]: https://news.itsfoss.com/gnome-files-43/
|
||||
[17]: https://discourse.ubuntu.com/t/kinetic-kudu-release-notes/27976
|
||||
[18]: https://cdimage.ubuntu.com/ubuntu/releases/22.10/release/
|
||||
[19]: https://ubuntu.com/download/desktop
|
@ -0,0 +1,197 @@
|
||||
[#]: subject: "10 Things to Do After Installing Ubuntu 22.10 [With Bonus Tip]"
|
||||
[#]: via: "https://www.debugpoint.com/things-to-do-ubuntu-22-10/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "chai001125"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15185-1.html"
|
||||
|
||||
安装 Ubuntu 22.10 后要做的 10 件事
|
||||
======
|
||||
|
||||
> 以下是我们安装 Ubuntu 22.10 “Kinetic Kudu”(GNOME 版)后,推荐做的 10 件事列表。
|
||||
|
||||
![][1]
|
||||
|
||||
Ubuntu 22.10 带来了很多令人兴奋的新功能,例如 GNOME 43、最新的内核、重新设计的托盘菜单、文件应用的功能和 Pipewire 等 [新功能][2]。
|
||||
|
||||
我相信你已经迫不及待地想尝试 Ubuntu 22.10 上的这些新功能了。
|
||||
|
||||
但是请先等一等。
|
||||
|
||||
在你前往享受你新安装的 Ubuntu 22.10 之前,我要向你推荐一个不容错过的 Ubuntu 定制技巧列表。
|
||||
|
||||
### 安装 Ubuntu 22.10 后要做的 10 件事
|
||||
|
||||
#### 1、更新你的系统
|
||||
|
||||
安装好 Ubuntu 22.10 后,第一件要做的事就是更新你的系统。因为时差的原因,最新的 ISO 镜像通常不会包括所有的系统更新。所以,你要打开一个终端窗口,并运行以下命令,来更新你的系统。
|
||||
|
||||
```
|
||||
sudo apt update && sudo apt upgrade
|
||||
```
|
||||
|
||||
上述命令执行完成后,你就可以进行下一步啦。
|
||||
|
||||
#### 2、删除 Firefox Snap,并安装 Flatpak 或者 deb 版本的 Firefox
|
||||
|
||||
自去年发布的 Ubuntu 21.10 版本以来,默认的网页浏览器 Firefox 开始以 Snap 软件包的形式出现。如果你是普通用户,这可能不是一个问题或者需要担心的事情。但是出于几个原因,例如 Snap 软件包的 Firefox 启动时间较长、且当 Firefox 有后台更新时,会有不必要的 Snap 更新通知等等原因,导致许多用户不太喜欢 Firefox 的 Snap 软件包。
|
||||
|
||||
因此,你可以按照 [我写的另一篇操作指南][3],来完全删除 Firefox 的 Snap 软件包。这一过程有点复杂,需要花费一点时间。删除完成后,再从个人软件包存档(PPA)安装 deb 版本的 Firefox,或者使用 [Flatpak 版本][4] 的 Firefox。
|
||||
|
||||
这是一个可选的动作,你也可以跳过这一步骤。
|
||||
|
||||
#### 3、安装并启用 Flatpak
|
||||
|
||||
虽然,几乎所有最新的 Linux 发行版都会默认安装 Flatpak,但是 Ubuntu 并没有默认安装 Flatpak,这是因为 Ubuntu 使用了它自己的沙箱技术 Snap。
|
||||
|
||||
但 Flatpak 这一应用程序还是最适合于每个人。Flatpak 能够帮助你快速安装多个应用程序,并在使用过程中无需担心依赖性和其他事情。
|
||||
|
||||
大多数 Flatpak 应用程序都在集中的仓库 Flathub 中。
|
||||
|
||||
要在 Ubuntu 22.10 中启用 Flatpak 应用程序,请按照以下命令进行操作。
|
||||
|
||||
```
|
||||
sudo apt install flatpakflatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakreporeboot
|
||||
```
|
||||
|
||||
如果你想进一步了解关于此安装过程的更多信息,请阅读我们不久前发布的 [指南][5]。
|
||||
|
||||
#### 4、查看隐私设置
|
||||
|
||||
我建议你在安装 Ubuntu 后,手动退出任何数据收集项。大家都知道,无论怎么努力尝试,在互联网上保护自己的隐私都很困难。因此,这些小步骤很重要。
|
||||
|
||||
要配置隐私项,请打开“<ruby>设置<rt>Settings</rt></ruby>”并选择“<ruby>隐私<rt>Privacy</rt></ruby>”。然后查看隐私菜单下列出的项目。
|
||||
|
||||
此外,请确保禁用对 Ubuntu 服务器的后台报告。需要运行以下命令来手动禁用,因为在设置中没有禁用它的选项。
|
||||
|
||||
```
|
||||
sudo ubuntu-report -f send no
|
||||
```
|
||||
|
||||
![Turn off location services in Ubuntu 22.10][6]
|
||||
|
||||
#### 5、探索 GNOME 43 的功能
|
||||
|
||||
在 Ubuntu 22.10 版本中,最具视觉和功能性的变化是 GNOME 43。因为 GNOME 43 有一些根本性和核心变化,所以它会影响每个人和他们的工作。GNOME 43 带来了一个新的药丸形状的托盘菜单,并更新了文件应用和 GNOME Web 等原生应用程序的功能。
|
||||
|
||||
请查看更为详细的 [GNOME 43 功能][7] 一文,以了解更多信息,或者你也可以自己探索 GNOME 43。
|
||||
|
||||
![Quick Settings Demo in GNOME 43][8]
|
||||
|
||||
#### 6、确保音频可以与 Pipewire 配合使用
|
||||
|
||||
如果你经常使用音频,或者你的工作范围涉及到声音捕获、播放等内容,请确保在 Ubuntu 22.10 中,你的音频在有线或蓝牙情况下都能正常工作。
|
||||
|
||||
因为 Ubuntu 22.10 这个版本中的音频服务器是多年来第一次发生了变化,传统的 PulseAudio 被现代的 Pipewire 所取代。因此,请务必进行验证音频是否能正常使用。
|
||||
|
||||
#### 7、安装其他软件包
|
||||
|
||||
确保你可以在 Ubuntu 桌面上播放所有视频和音频格式是很重要的。如果你在设置期间跳过了额外的软件包安装,可以通过以下命令进行安装。
|
||||
|
||||
```
|
||||
sudo apt install ubuntu-restricted-extras
|
||||
```
|
||||
|
||||
这可以解决 Ubuntu 中的任何视频或音频的播放问题,特别是 GNOME 视频无法播放的情况(因为GNOME 视频在默认情况下将无法播放任何内容)。
|
||||
|
||||
#### 8、安装基本的应用程序
|
||||
|
||||
带有 GNOME 的 Ubuntu 基础版本只有非常基本的应用程序。因此,在你使用 Ubuntu 之前,你需要安装一些其他必要的应用程序。
|
||||
|
||||
由于每个人的工作范围不同,每个人所需的应用程序也都不同。因此,在这里我仅提供一个通用的应用程序的列表,我认为你可以把这些应用程序都安装上,因为这些应用程序对所有人来说都很常用。
|
||||
|
||||
- GIMP – 进阶的照片编辑器
|
||||
- VLC – 无需额外编解码器即可播放任何内容的媒体播放器
|
||||
- Leafpad – 轻量级文本编辑器(甚至比默认的文本编辑器 gedit 还要更轻量级)
|
||||
- Synaptic – 更好的软件包管理器
|
||||
|
||||
安装这些应用程序的命令:
|
||||
|
||||
```
|
||||
sudo apt install -y gimp vlc leafpad synaptic
|
||||
```
|
||||
|
||||
#### 9、获取一些 GNOME 扩展
|
||||
|
||||
你可以使用几个很酷的扩展程序,来扩展 GNOME 43 的功能,包括自定义顶部栏、托盘、更改 adwaita 外观等等。首先,使用下面的命令通过 Flatpak 来安装 GNOME 扩展管理器。
|
||||
|
||||
```
|
||||
flatpak install flathub com.mattjakeman.ExtensionManager
|
||||
```
|
||||
|
||||
安装完成后,你就可以在 GNOME 扩展管理器中搜索你想要的任何扩展了。以下是一些必要扩展,你可以用它们来快速扩展 GNOME 43 的功能,我认为它们非常适合你全新的 Ubuntu 桌面。你只需在扩展管理器应用程序中,搜索这些名称即可。
|
||||
|
||||
- Caffeine
|
||||
- Custom Hot Corners
|
||||
- Dash to Dock
|
||||
- Blur my shell
|
||||
- Gradients
|
||||
- Hide Activities Button
|
||||
- Net speed simplified
|
||||
|
||||
#### 10、准备备份
|
||||
|
||||
我们总是在我们遇到困难时,才觉得有必要备份。所以,请确保从一开始你就为备份做好了准备。理想的备份应用程序是 Timeshift,它很容易安装和使用。
|
||||
|
||||
以下是你可以从终端安装 Timeshift 的一组命令。安装完成后,你可以打开 Timeshift,并按照屏幕上的说明,设置备份了。
|
||||
|
||||
```
|
||||
sudo add-apt-repository -y ppa:teejee2008/ppasudo apt-get updatesudo apt-get install timeshift
|
||||
```
|
||||
|
||||
### 额外小技巧
|
||||
|
||||
如果你想进一步定制你新安装的 Ubuntu 系统,以下是一些额外的小技巧。
|
||||
|
||||
#### 安装漂亮的字体
|
||||
|
||||
字体是一个很小却影响很大的设置项。虽然,Ubuntu 自带有好用的“Ubuntu regular”字体。
|
||||
|
||||
但是,你也可以从 Ubuntu 的官方仓库中安装一些其他漂亮的字体。以下是安装字体的一些命令。
|
||||
|
||||
```
|
||||
sudo apt install fonts-roboto fonts-cascadia-code fonts-firacode
|
||||
```
|
||||
|
||||
安装完成后,你可以使用 [GNOME Tweak 工具][9],来更改字体。
|
||||
|
||||
#### 安装 TLP
|
||||
|
||||
如果你经常使用笔记本电脑,那么你要好好爱惜电脑的电池。虽然电池用久了总是会损坏的,但你可以采取一些步骤,来减缓电池的老化。TLP 是 Linux 中自动优化电池使用、减缓电池老化的最好的程序之一。你可以使用以下命令来安装 TLP。
|
||||
|
||||
```
|
||||
sudo apt install tlp
|
||||
```
|
||||
|
||||
我建议你将电池的电量始终保持在 50% 至 80% 之间。不要过度充电或让电池电量消耗到 50% 以下,也不要给电脑连续插电。
|
||||
|
||||
### 总结
|
||||
|
||||
以上就是安装桌面 Ubuntu 22.10 后要做的 10 件事啦。
|
||||
|
||||
我希望这篇文章会对你有帮助,你能够通过本文的方法来定制和调整你的 Ubuntu 桌面。那么你认为在安装好 Ubuntu 后,什么事是最推荐做的呢?请在评论区中告诉我吧。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/things-to-do-ubuntu-22-10/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[chai001125](https://github.com/chai001125)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.debugpoint.com/wp-content/uploads/2022/10/u2210-things-hd-1024x576.jpg
|
||||
[2]: https://www.debugpoint.com/ubuntu-22-10/
|
||||
[3]: https://www.debugpoint.com/remove-firefox-snap-ubuntu/
|
||||
[4]: https://flathub.org/apps/details/org.mozilla.firefox
|
||||
[5]: https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/
|
||||
[6]: https://www.debugpoint.com/wp-content/uploads/2022/10/Turn-off-location-services-in-Ubuntu-22.10.jpg
|
||||
[7]: https://www.debugpoint.com/gnome-43/
|
||||
[8]: https://www.debugpoint.com/wp-content/uploads/2022/08/Quick-Settings-Demo-in-GNOME-43.gif
|
||||
[9]: https://www.debugpoint.com/customize-your-ubuntu-desktop-using-gnome-tweak/
|
@ -0,0 +1,146 @@
|
||||
[#]: subject: "How to Install Python 3.10 in Ubuntu and Other Related Linux"
|
||||
[#]: via: "https://www.debugpoint.com/install-python-3-10-ubuntu/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15195-1.html"
|
||||
|
||||
如何在 Ubuntu 和其他相关 Linux 中安装 Python 3.10
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202210/30/152139lddzddabu5u4buud.jpg)
|
||||
|
||||
> 计划为工作安装 Python 3.10?以下是在 Ubuntu 和相关发行版中安装 Python 3.10 的方法。
|
||||
|
||||
Python 3.10 于 2021 年 10 月 25 日发布,具有附加功能和更新。此版本带来了更好的错误消息处理、新的模式匹配功能、<ruby>类型别名<rt>TypeAlias</rt></ruby>、用户定义的类型保护等。你可以在 [此处][1] 阅读发布重点。
|
||||
|
||||
在编写本指南时,大多数当前发行版都采用 Python 3.10。例如,Ubuntu 22.04 LTS 和 Fedora 36 默认都有 Python 3.10。
|
||||
|
||||
也就是说,如果你现在在任何不支持的版本中需要 Python 3.10,你可以使用 [下面的可靠 PPA][2] 在 Ubuntu 中安装最新的 Python 3.10。下面是方法。
|
||||
|
||||
### 如何在 Ubuntu 上安装 Python 3.10
|
||||
|
||||
此 PPA 可用于 Ubuntu 21.10、Ubuntu 21.04、Ubuntu 20.04 LTS、Ubuntu 18.04 LTS 和 Linux Mint 20.x、Elementary OS 6 和其他相关的基于 Ubuntu 的发行版。这些发行版大多数默认情况下不支持 3.10。
|
||||
|
||||
打开终端并添加以下 PPA:
|
||||
|
||||
```
|
||||
sudo add-apt-repository ppa:deadsnakes/ppa
|
||||
```
|
||||
|
||||
使用以下命令刷新缓存:
|
||||
|
||||
```
|
||||
sudo apt update
|
||||
```
|
||||
|
||||
并使用以下命令安装 Python 3.10:
|
||||
|
||||
```
|
||||
sudo apt install python3.10
|
||||
```
|
||||
|
||||
### 设置 Python 版本
|
||||
|
||||
将 Python 3.10 设置为默认值需要一些额外的步骤。如下。
|
||||
|
||||
> **警告**:你的 Ubuntu 系统中的许多应用程序依赖于 Python 3.9 的库存版本。因此,请确保你的工作应用(例如 GIMP、GNOME 终端等)与 Python 3.10 兼容。所以,要小心。
|
||||
|
||||
**快速提示:** 如果要检查已安装的系统包中的哪些依赖于特定版本,请使用 `apt-cache` 命令的 `rdepends` 开关。在下面的示例中,我检查哪些已安装的包依赖于 Python 3.8。
|
||||
|
||||
```
|
||||
apt-cache rdepends python3.8
|
||||
```
|
||||
|
||||
```
|
||||
[~]$ apt-cache rdepends python3.8
|
||||
python3.8
|
||||
Reverse Depends:
|
||||
python3.8-dbg
|
||||
virtualbox
|
||||
python3.8-venv
|
||||
python3.8-full
|
||||
libpython3.8-testsuite
|
||||
libglib2.0-tests
|
||||
idle-python3.8
|
||||
idle-python3.8
|
||||
python3.8-minimal
|
||||
python3.8-doc
|
||||
python3.8-dev
|
||||
python3.8-dbg
|
||||
python3-uno
|
||||
gedit
|
||||
virtualbox
|
||||
stimfit
|
||||
python3.8-venv
|
||||
python3-stfio
|
||||
python3-escript-mpi
|
||||
python3-escript
|
||||
python3-csound
|
||||
pitivi
|
||||
obs-studio
|
||||
liferea
|
||||
libpython3.8-testsuite
|
||||
libglib2.0-tests
|
||||
kitty
|
||||
kdevelop-python
|
||||
idle-python3.8
|
||||
idle-python3.8
|
||||
rhythmbox-plugins
|
||||
python3.8-minimal
|
||||
python3.8-doc
|
||||
python3.8-dev
|
||||
python3
|
||||
python3-uno
|
||||
python3-all
|
||||
cluster-glue
|
||||
gedit
|
||||
[~]$
|
||||
```
|
||||
|
||||
#### 使用 Python 3.10 作为默认 Python3
|
||||
|
||||
首先,使用终端中的以下命令检查当前默认版本。
|
||||
|
||||
```
|
||||
python3 --version
|
||||
```
|
||||
|
||||
使用 `update-alternatives` 创建指向 `python3` 的符号链接。
|
||||
|
||||
```
|
||||
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 1
|
||||
```
|
||||
|
||||
```
|
||||
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.10 2
|
||||
```
|
||||
|
||||
并通过以下命令选择使用哪一个作为 `python3`:
|
||||
|
||||
```
|
||||
sudo update-alternatives --config python3
|
||||
```
|
||||
|
||||
![在 Ubuntu 中安装 Python 3.10][3]
|
||||
|
||||
这就是所有步骤。现在,你可以开始在当前的 Ubuntu 版本中使用最新的 Python 进行工作/学习。你可以使用上述命令切换到库存版本并在任何时间更改版本号。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/install-python-3-10-ubuntu/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://docs.python.org/3.10/whatsnew/3.10.html
|
||||
[2]: https://github.com/deadsnakes
|
||||
[3]: https://www.debugpoint.com/wp-content/uploads/2021/10/Installed-Python-3.10-in-Ubuntu-1024x472.jpeg
|
@ -0,0 +1,248 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (chai001125)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-15281-1.html)
|
||||
[#]: subject: (The Definitive Guide to Using and Customizing the Dock in Ubuntu)
|
||||
[#]: via: (https://itsfoss.com/customize-ubuntu-dock/)
|
||||
[#]: author: (Abhishek Prakash https://itsfoss.com/author/abhishek/)
|
||||
|
||||
在 Ubuntu 中使用和自定义程序坞
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
当你登录 Ubuntu 时,你会看到屏幕左侧的 <ruby>程序坞/停靠栏<rt> dock </rt></ruby>,上面有一些应用程序的图标。程序坞(也称为 <ruby>启动器<rt> launcher </rt></ruby>,或者 <ruby>面板<rt> panel </rt></ruby>)可以让你快速启动某个常用的应用程序。
|
||||
|
||||
![][1]
|
||||
|
||||
我经常使用程序坞。在本文中,我将分享一些关于有效使用程序坞的小技巧,并介绍自定义程序坞的外观和位置的方法。
|
||||
|
||||
你将在本教程中学习到以下内容:
|
||||
|
||||
* 程序坞的基本用途:添加应用程序,并使用快捷方式来启动应用程序
|
||||
* 自定义程序坞的外观:更改图标大小、图标位置
|
||||
* 更改程序坞的位置:可用于单屏和多显示器的设置
|
||||
* 在程序坞中隐藏已安装的磁盘图标
|
||||
* 自动隐藏或禁用程序坞
|
||||
* 使用 `dconf-editor` 对程序坞进行额外的定制
|
||||
* 用其他程序坞应用程序替换 Ubuntu 默认的程序坞
|
||||
|
||||
我将在教程中使用 <ruby>程序坞<rt> dock </rt></ruby>、<ruby>面板<rt> panel </rt></ruby>和 <ruby>启动器<rt> launcher </rt></ruby> 等术语,它们的意思是等同的。
|
||||
|
||||
### 如何使用 Ubuntu 程序坞:你必须知道的基础知识
|
||||
|
||||
如果你是 Ubuntu 的新手,你需要掌握如何使用程序坞。尽管,在一段时间后你总会熟悉程序坞的功能,但是阅读本文能让你更快地明白。
|
||||
|
||||
#### 向程序坞添加新的应用程序(或删除应用程序)
|
||||
|
||||
这一步骤十分简单。从菜单中搜索你想要添加在程序坞的应用程序,然后运行它。
|
||||
|
||||
正在运行的应用程序会显示在程序坞中,它的图标在程序坞中所有图标的下方。右键单击该图标,然后选择 “<ruby>添加到收藏夹<rt> Add to Favorites </rt></ruby>” 选项。这会把该应用程序的图标锁定到程序坞上。
|
||||
|
||||
![Right-click on the icon and select “Add to Favorites”][2]
|
||||
|
||||
从程序坞中删除应用程序的图标,操作起来更为简单。你不需要运行你想要在程序坞删除的应用程序,只需右键单击应用程序图标,然后选择 “<ruby>从收藏夹中删除<rt> Remove From Favorites </rt></ruby>” 即可。
|
||||
|
||||
![Right-click on the icon and select “Remove from Favorites”][3]
|
||||
|
||||
#### 更改程序坞中的图标顺序
|
||||
|
||||
默认情况下,新添加到程序坞的应用程序图标会放置在程序坞上的所有图标之后。但是,你也可以改变图标的位置。
|
||||
|
||||
要更改图标的顺序,你只需将它拖放到另一个位置即可,不用 “<ruby>锁定位置<rt> lock it </rt></ruby>”,或者做其他的事情。如果你不做任何的更改,这个图标会一直停留在那个位置。
|
||||
|
||||
![Reorder Icons On Ubuntu Docks][4]
|
||||
|
||||
#### 右键单击程序坞中的图标,以获取应用程序的额外选项
|
||||
|
||||
左键单击程序坞中的图标会启动应用程序,或者如果应用程序已经在运行,则这个应用程序会被聚焦,即它会出现在所有其他正在运行的应用程序窗口前面。
|
||||
|
||||
右键单击程序坞中的图标会为你提供应用程序的额外选项。不同的应用程序会有不同的选项。
|
||||
|
||||
右键单击**浏览器**图标,在它的额外选项中,你可以打开一个新的私人窗口,或预览所有正在运行的窗口。
|
||||
|
||||
![][5]
|
||||
|
||||
右键单击**文件管理器**图标,在它的额外选项中,你可以查看所有已添加书签的目录,或预览打开的窗口。
|
||||
|
||||
当然,你也可以通过右键单击图标,来退出应用程序。大多数应用程序能够通过右键单击而退出,而一些应用程序(例如 Telegram 等),将被最小化到 <ruby>系统托盘<rt> system tray </rt></ruby> 中。
|
||||
|
||||
#### 使用键盘快捷键,以快速启动程序坞中的应用程序 [知道这个的人不多]
|
||||
|
||||
你只需用鼠标单击程序坞上的图标,即可启动应用程序。但是,你也可以用键盘快捷键,来启动应用程序。
|
||||
|
||||
使用 `WIN`/`Super` + `数字键` 的组合,能够启动程序坞中该位置的应用程序。
|
||||
|
||||
![][6]
|
||||
|
||||
如果应用程序已经在运行了,它将被聚焦。
|
||||
|
||||
由于这个功能是基于位置的,所以请不要一直对图标进行重新排序。就我个人而言,我把 Firefox 放在程序坞的第 1 个位置,文件管理器放在第 2 个位置,备用浏览器放在第 3 个位置,以此类推,直到第 9 个位置。这样,我可以使用 `Super + 2`,从而快速启动文件管理器。
|
||||
|
||||
因为我的系统连接了 3 个屏幕,所以我发现这个快速启动应用程序的功能特别好用,我不必再将鼠标移动到第一个屏幕上的程序坞上了。你也可以在其他屏幕上启用或禁用程序坞,我将在本教程的后面部分向你展示如何设置。
|
||||
|
||||
### 改变程序坞在屏幕上的位置
|
||||
|
||||
默认情况下,程序坞位于屏幕的左侧。但是,有些人喜欢将程序坞放置在屏幕底部。
|
||||
|
||||
Ubuntu 允许你更改程序坞的位置。你可以将程序坞移至底部或右侧。我不觉得有很多人真的想要把扩展坞放在了顶部,所以没有将扩展坞移到顶部的选项。
|
||||
|
||||
![Change Launcher Position][7]
|
||||
|
||||
要更改程序坞位置,请进入 “<ruby>设置<rt> Settings </rt></ruby>” 菜单,然后点击 “<ruby>外观<rt> Appearance </rt></ruby>” ,你可以在 Dock 栏下看到一些选项,然后你可以在此处更改 “<ruby>屏幕上的位置<rt> Position on screen </rt></ruby>” 这一设置。
|
||||
|
||||
![Go to Settings->Appearance->Dock][8]
|
||||
|
||||
#### 程序坞在多显示器设置中的位置
|
||||
|
||||
如果你的系统连接了多个屏幕,你可以选择是在所有的屏幕上还是在某个选定的屏幕上,显示扩展坞。
|
||||
|
||||
![Ubuntu Dock Settings Multimonitor][9]
|
||||
|
||||
对于我个人而言,我只在我的笔记本电脑屏幕上显示程序坞,因为这是我的主屏幕。这样在我的另外两个屏幕会留有最大的空间。
|
||||
|
||||
### 更改程序坞的外观
|
||||
|
||||
让我们继续看看 Ubuntu 程序坞中的更多自定义选项吧。
|
||||
|
||||
想象一下,如果你在程序坞中添加了太多的应用程序或打开了太多应用程序,那么程序坞的空间会被填满。如果你想要进入到程序坞端点处的应用程序,那么你必须滚动到程序坞顶部和底部才可以。
|
||||
|
||||
你可以更改程序坞的图标大小,来解决这个问题,这样程序坞就能够容纳更多图标来。不过,也不要让图标太小。
|
||||
|
||||
![][10]
|
||||
|
||||
要更改程序坞的图标大小,请进入 “<ruby>设置<rt> Settings </rt></ruby>” 菜单,然后点击 “<ruby>外观<rt> Appearance </rt></ruby>” ,并通过移动 “<ruby>图标大小<rt> Icon size </rt></ruby>” 下的滑块来更改它。默认的图标大小为 48 像素。
|
||||
|
||||
![Changing Icon Size In Ubuntu Dock][11]
|
||||
|
||||
#### 在程序坞中隐藏已安装的磁盘图标
|
||||
|
||||
当你插入 U 盘或 SD 卡时,它的驱动器会安装到系统中,并且在程序坞中会立即出现一个图标。这个图标很有用,因为你可以直接通过右键单击它,来安全地删除驱动器选项。
|
||||
|
||||
![Mounted disks are displayed In the Ubuntu Dock][12]
|
||||
|
||||
如果你认为在程序坞中显示已安装的磁盘图标很麻烦的话,你也可以关闭这个功能。别担心,你仍然可以从文件管理器访问已安装的驱动器。
|
||||
|
||||
打开终端,使用以下命令,来隐藏程序坞中已安装的磁盘图标:
|
||||
|
||||
```
|
||||
gsettings set org.gnome.shell.extensions.dash-to-dock show-mounts false
|
||||
```
|
||||
|
||||
更改会立即生效。你不再会为程序坞中显示已安装的磁盘而烦恼了。
|
||||
|
||||
如果你想要恢复默认情况,请使用以下命令:
|
||||
|
||||
```
|
||||
gsettings set org.gnome.shell.extensions.dash-to-dock show-mounts true
|
||||
```
|
||||
|
||||
### 改变程序坞的行为
|
||||
|
||||
接下来,让我们自定义程序坞的默认行为,使它能更适合你的需求吧。
|
||||
|
||||
#### 启用点击最小化
|
||||
|
||||
如果你单击一个正在运行的应用程序的图标,那么这个应用程序的窗口将成为焦点。当如果你**再次单击**这个图标时,将什么都不会发生。这是因为,在默认情况下,第二次点击同一图标不会最小化应用程序。
|
||||
|
||||
这是现代桌面的默认行为,但我不太喜欢,我更喜欢的是:当我**第二次点击图标时,应用程序会被最小化**。
|
||||
|
||||
如果你像我一样,那么你可能想要在 Ubuntu 中 [启用点击最小化选项][13]:
|
||||
|
||||
为此,请打开终端并输入以下命令:
|
||||
|
||||
```
|
||||
gsettings set org.gnome.shell.extensions.dash-to-dock click-action 'minimize'
|
||||
```
|
||||
|
||||
#### 自动隐藏 Ubuntu 程序坞,以获得更多屏幕空间
|
||||
|
||||
如果你想要有最大的屏幕空间,你可以在 Ubuntu 中为程序坞启用自动隐藏选项。
|
||||
|
||||
自动隐藏选项会隐藏程序坞,你就能获得整个屏幕。不过,程序坞仍然可以使用。将光标移动到程序坞原来所在的位置,它就会再次出现。当程序坞重新出现时,它会覆盖在正在运行的应用程序窗口上。这是一件好事,否则太多元素会开始在屏幕上移动。
|
||||
|
||||
要设置程序坞自动隐藏,请进入 “<ruby>设置<rt> Settings </rt></ruby>” 菜单,然后点击 “<ruby>外观<rt> Appearance </rt></ruby>” ,你可以在 Dock 栏下开启 <ruby>自动隐藏选项<rt> Auto-hide the Dock </rt></ruby>” 。
|
||||
|
||||
![Auto-hide the dock][14]
|
||||
|
||||
如果你不喜欢自动隐藏程序坞的话,你可以用同样的方式禁用它。
|
||||
|
||||
#### 禁用 Ubuntu 默认的程序坞
|
||||
|
||||
Ubuntu 程序坞的自动隐藏选项对很多人来说已经足够好了,但是依旧有些用户根本不喜欢 Ubuntu 自带的程序坞。如果你也是其中的一员,你可以选择完全禁用 Ubuntu 的程序坞。
|
||||
|
||||
从 Ubuntu 20.04 开始,你可以使用 <ruby>扩展应用程序<rt> Extensions application </rt></ruby>,来管理 [GNOME 扩展][15]。
|
||||
|
||||
![Look for Extensions app in the menu][16]
|
||||
|
||||
使用这个扩展应用程序,你就可以轻松地禁用或重新启用程序坞了。
|
||||
|
||||
![Disable Ubuntu Dock][17]
|
||||
|
||||
### 使用 dconf-editor 进行高级的程序坞定制 [不推荐]
|
||||
|
||||
##### 请注意
|
||||
|
||||
`dconf-editor` 能让你更改 GNOME 桌面环境的几乎每个方面。这个性质喜忧参半,因为你在更改时必须小心,而且大多数设置都可以即时更改,无需确认。虽然你可以重置你的更改,但你仍可能会将系统置于难以恢复正常的状态。
|
||||
|
||||
出于这个原因,我不推荐你使用 `dconf-editor`,特别是如果你不喜欢花时间在故障排除和修复问题上,或者如果你不太熟悉 Linux 和 GNOME。
|
||||
|
||||
[dconf-editor][18] 给你提供了在 Ubuntu 中自定义程序坞的其他选项。你可以在从软件中心安装 `dconf-editor`,然后导航到 `org > gnome > shell > extensions > dash-to-dock`,在这里你会找到很多自定义程序坞的选择。
|
||||
|
||||
![][19]
|
||||
|
||||
### 替换 Ubuntu 默认的程序坞
|
||||
|
||||
有几个第三方的程序坞应用程序可用于 Ubuntu 和其他 Linux 发行版。你可以安装你想要的第三方程序坞,并使用它。
|
||||
|
||||
例如,你可以从软件中心下载 “Plank dock”,并以与 Ubuntu 程序坞类似的方式来使用它。
|
||||
|
||||
![Plank Dock in Ubuntu][20]
|
||||
|
||||
在这种情况下,禁用 Ubuntu 默认的程序坞会是一个更好的主意,因为同时使用多个扩展坞是不太明智的。
|
||||
|
||||
### 总结
|
||||
|
||||
本教程介绍了在 GNOME 实现中,如何自定义 Ubuntu 默认的程序坞。上述程序坞的更改在 vanilla GNOME 的程序坞上运行良好。
|
||||
|
||||
我已经向你展示了大多数常见的 Ubuntu 程序坞的定制方法。你不需要去盲目地跟随教程中的所有步骤。阅读并思考哪一个是你需要的,然后根据教程中的方法更改配置。
|
||||
|
||||
如果你不喜欢 Ubuntu 默认的程序坞,也有其他的程序坞可供试验。
|
||||
|
||||
这个教程让你学到了新东西吗?你还想看到更多这样的教程吗?欢迎你在评论区中建议和反馈。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/customize-ubuntu-dock/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[chai001125](https://github.com/chai001125)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/01/ubuntu-dock.png?resize=800%2C450&ssl=1
|
||||
[2]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/01/add-icons-to-dock.png?resize=800%2C450&ssl=1
|
||||
[3]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/01/remove-icons-from-dock.png?resize=800%2C450&ssl=1
|
||||
[4]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/01/reorder-icons-on-ubuntu-docks.gif?resize=800%2C430&ssl=1
|
||||
[5]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/01/right-click-icons-ubuntu-dock.png?resize=800%2C450&ssl=1
|
||||
[6]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/01/keyboard-shortcut-for-ubuntu-dock.png?resize=800%2C450&ssl=1
|
||||
[7]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/01/change-launcher-position-ubuntu.png?resize=800%2C450&ssl=1
|
||||
[8]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/01/change-dock-position-ubuntu.png?resize=800%2C450&ssl=1
|
||||
[9]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/01/ubuntu-dock-settings-multimonitor.png?resize=800%2C450&ssl=1
|
||||
[10]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/01/normal-icon-size-dock.jpg?resize=1024%2C1080&ssl=1
|
||||
[11]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/01/changing-icon-size-in-ubuntu-dock.png?resize=800%2C450&ssl=1
|
||||
[12]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/01/external-mounted-disks-in-ubuntu-dock.png?resize=800%2C450&ssl=1
|
||||
[13]: https://itsfoss.com/click-to-minimize-ubuntu/
|
||||
[14]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2021/01/autohide-dock-ubuntu.png?resize=800%2C450&ssl=1
|
||||
[15]: https://itsfoss.com/gnome-shell-extensions/
|
||||
[16]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2020/06/GNOME-extensions-app-ubuntu.jpg?resize=800%2C240&ssl=1
|
||||
[17]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/01/disable-dock-ubuntu.png?resize=800%2C450&ssl=1
|
||||
[18]: https://wiki.gnome.org/Apps/DconfEditor
|
||||
[19]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/01/dconf-editor-dock.png?resize=592%2C599&ssl=1
|
||||
[20]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/01/plank-dock-Ubuntu.jpg?resize=800%2C382&ssl=1
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202211/23/143533heym0bybbfm0bfbj.jpg
|
@ -0,0 +1,228 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (FYJNEVERFOLLOWS)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-15246-1.html)
|
||||
[#]: subject: (Convert audio files with this versatile Linux command)
|
||||
[#]: via: (https://opensource.com/article/20/2/linux-sox)
|
||||
[#]: author: (Klaatu https://opensource.com/users/klaatu)
|
||||
|
||||
使用这个多功能的 Linux 命令转换音频文件
|
||||
======
|
||||
|
||||
> SoX Sound Exchange 甚至可以为你的音频文件添加特效。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202211/13/104314skttlizoioyeaw3w.jpg)
|
||||
|
||||
我工作需要使用音视频媒体,不管你处理哪种媒体,你肯定知道标准化是一种有价值的工具。就像你不会试图把一个分数加到一个小数上而不转换其中一个一样,我已经知道,把不同格式的媒体组合起来并不理想。为了方便用户,大多数爱好者级应用程序使转换过程不可见。然而,对于那些需要控制媒体细节的用户的灵活软件,会通常让你自己提前将媒体转换为所需的格式。我有一些最喜欢的音频转换工具,其中之一就是号称“音频的瑞士军刀” —— [SoX][2]。
|
||||
|
||||
### 安装
|
||||
|
||||
在 Linux 或 BSD 上,可以从软件存储库或 Ports 树中安装 `sox` 命令(,以及一些有用的符号链接)。
|
||||
|
||||
你也可以从 [Sourceforge.net][3] 上安装 SoX。它不经常发布,但它的代码库往往是稳定的,所以如果你想要最新的功能(如 Opus 支持),构建它是容易和安全的。
|
||||
|
||||
SoX 主要提供了 `sox` 命令,但是创建了一些有用的符号链接:`play`、`rec` 和 `soxi`。
|
||||
|
||||
### 使用 SoX 获取文件信息
|
||||
|
||||
SoX 可以读取和重写音频数据。它是否存储重写的音频数据取决于你。在有些情况下,你不需要存储转换后的数据,例如,当你将输出直接发送到扬声器进行回放时。然而,在进行任何转换之前,最好首先确定要处理的是什么。
|
||||
|
||||
使用 `soxi` 命令也可以收集音频文件信息。`soxi` 会符号链接到 `soxi --info`。
|
||||
|
||||
```
|
||||
$ soxi countdown.mp3
|
||||
Input File(输入文件) : '/home/tux/countdown.mp3'
|
||||
Channels(通道数) : 1
|
||||
Sample Rate(采样率) : 44100
|
||||
Precision(数据精度) : 16-bit(16 比特)
|
||||
Duration(时长) : 00:00:11.21 = 494185 samples...(11.21 秒 = 494185 采样点)
|
||||
File Size(文件大小) : 179k
|
||||
Bit Rate(比特率) : 128k
|
||||
Sample Encoding(编码格式): MPEG audio (layer I, II or III)
|
||||
```
|
||||
|
||||
这个输出可以让你很好地了解音频文件的编码方式、文件长度、文件大小、采样率和通道数。其中一些你可能*认为*你已经知道了,但当客户把媒体带到我面前时,我从不相信这些假设。使用 `soxi` 验证媒体属性。
|
||||
|
||||
### 转换文件
|
||||
|
||||
在本例中,,一个游戏节目倒计时的音频是以MP3文件的形式提供的。虽然几乎所有的编辑应用程序都接受压缩音频,但它们并不是在压缩的数据上进行编辑。转换是在某个地方发生的,可能是一个秘密的后台任务,也可能提示让你保存一份副本。我通常喜欢自己提前完成转换。这样,我可以控制使用的格式。我可以在夜间批量处理大量的媒体,而不是浪费宝贵的制作时间,等待编辑应用程序按需处理它们。
|
||||
|
||||
`sox` 命令用于转换音频文件。在 `sox` 流程中有几个阶段:
|
||||
|
||||
* 输入
|
||||
* 合并
|
||||
* 特效
|
||||
* 输出
|
||||
|
||||
但在命令语法中,特效步骤令人困惑地放到了*最后一步*。这意味着 `sox` 流程是这样组成的:
|
||||
|
||||
```
|
||||
输入 → 合并 → 输出 → 特效
|
||||
```
|
||||
|
||||
### 编码
|
||||
|
||||
最简单的转换命令只涉及一个输入文件和一个输出文件。下面是转换 MP3 文件为无损 FLAC 文件的命令:
|
||||
|
||||
```
|
||||
$ sox countdown.mp3 output.flac
|
||||
$ soxi output.flac
|
||||
|
||||
Input File(输入文件) : 'output.flac'
|
||||
Channels(通道数) : 1
|
||||
Sample Rate(采样率) : 44100
|
||||
Precision(数据精度) : 16-bit(16 比特)
|
||||
Duration(时长) : 00:00:11.18 = 493056 samples...(11.18 秒 = 493056 采样点)
|
||||
File Size(文件大小) : 545k
|
||||
Bit Rate(比特率) : 390k
|
||||
Sample Encoding(编码格式): 16-bit FLAC
|
||||
Comment(注释) : 'Comment=Processed by SoX'
|
||||
```
|
||||
|
||||
#### 特效
|
||||
|
||||
特效可以在命令末尾指定。它可以在将数据发送到最终目的地之前更改音频。例如,有时声音太大会在转换过程中造成问题:
|
||||
|
||||
```
|
||||
$ sox bad.wav bad.ogg
|
||||
sox WARN sox: `bad.ogg' output clipped 126 samples; decrease volume?
|
||||
```
|
||||
|
||||
应用**增益**(`gain`)效果通常可以解决此问题:
|
||||
|
||||
|
||||
```
|
||||
$ sox bad.wav bad.ogg gain -1
|
||||
```
|
||||
|
||||
#### 淡入淡出
|
||||
|
||||
另一个常用的效果是**淡入淡出**(`fade`)。此效果允许你定义淡入或淡出的类型,以及你希望淡入淡出效果持续的时间。
|
||||
|
||||
下面是一个使用倒抛物线的 6 秒淡入示例:
|
||||
|
||||
```
|
||||
$ sox intro.ogg intro.flac fade p 6
|
||||
```
|
||||
|
||||
这将对音频的头部应用 3 秒的淡入,并从 8 秒标记开始淡出(这段音乐只有 11 秒,因此在这种情况下淡出也是 3 秒):
|
||||
|
||||
```
|
||||
$ sox intro.ogg intro.flac fade p 3 8
|
||||
```
|
||||
|
||||
`sox` 手册页中列出了不同类型的淡入淡出(正弦、线性、倒抛物线等)以及淡入淡出提供的选项。
|
||||
|
||||
#### 特效语法
|
||||
|
||||
每个特效插件都有自己的语法,因此请参阅手册页了解如何调用每个特效插件的详细信息。
|
||||
|
||||
效果可以在一个命令中以菊花链的方式进行,至少在你想组合它们的范围内是如此。换句话说,没有语法可以只在六秒钟的淡出期间应用一个镶边效果。对于如此精确的东西,你需要一个图形声波编辑器或数字音频工作站,例如 [LMMS][4] 或 [Rosegarden][5]。但是,如果你只想应用一次特效,可以在同一命令中将它们一起列出。
|
||||
|
||||
此命令应用了一个 -1 的**增益**效果、1.35 的节奏**拉伸**和**淡出**:
|
||||
|
||||
```
|
||||
$ sox intro.ogg output.flac gain -1 stretch 1.35 fade p 0 6
|
||||
$ soxi output.flac
|
||||
|
||||
Input File(输入文件) : 'output.flac'
|
||||
Channels(通道数) : 1
|
||||
Sample Rate(采样率) : 44100
|
||||
Precision(数据精度) : 16-bit(16 比特)
|
||||
Duration(时长) : 00:00:15.10 = 665808 samples...(15.10 秒 = 665808 采样点)
|
||||
File Size(文件大小) : 712k
|
||||
Bit Rate(比特率) : 377k
|
||||
Sample Encoding(编码格式): 16-bit FLAC
|
||||
Comment(注释) : 'Comment=Processed by SoX'
|
||||
```
|
||||
|
||||
### 组合音频
|
||||
|
||||
SoX 还可以通过连接或混合音频文件来组合音频文件。
|
||||
|
||||
要连接(或者说*拼接*)文件合并为一个文件,请在命令中提供多个输入文件:
|
||||
|
||||
```
|
||||
$ sox countdown.mp3 intro.ogg output.flac
|
||||
```
|
||||
|
||||
在本例中,`output.flac` 现在包含 `countdown.mp3` 音频,紧接着是 `intro.ogg` 音乐。
|
||||
|
||||
但是,如果你希望两首曲目同时播放,可以使用 `--combine mix` 选项:
|
||||
|
||||
```
|
||||
$ sox --combine mix countdown.mp3 intro.ogg output.flac
|
||||
```
|
||||
|
||||
然而,想象一下,这两个输入文件的不同之处不仅仅在于它们的编解码器。人声音轨用单声道(一个声道)录制并不少见,但音乐至少要用立体声(至少两个声道)来录制。SoX 不会给出默认的解决方案,因此你必须首先自己标准化这两个文件的格式。
|
||||
|
||||
#### 更改音频文件
|
||||
|
||||
选项与后面列出文件名有关。例如,此命令中的 `--channels` 选项将*仅仅*应用于 `input.wav`,而*不被*应用于 `example.ogg` 和 **output.flac**:
|
||||
|
||||
```
|
||||
$ sox --channels 2 input.wav example.ogg output.flac
|
||||
```
|
||||
|
||||
这意味着在 SoX 中,选项的位置非常重要。如果你在命令开始时指定一个选项,那么实际上只会覆盖 SoX 自己从输入文件中收集的内容。然而,在*输出文件*名前的选项决定了 SoX 如何写入音频数据。
|
||||
|
||||
要解决前面的通道不兼容问题,你可以首先标准化输入,然后混合:
|
||||
|
||||
```
|
||||
$ sox countdown.mp3 --channels 2 countdown-stereo.flac gain -1
|
||||
$ soxi countdown-stereo.flac
|
||||
|
||||
Input File(输入文件) : 'countdown-stereo.flac'
|
||||
Channels(通道数) : 2
|
||||
Sample Rate(采样率) : 44100
|
||||
Precision(数据精度) : 16-bit(16 比特)
|
||||
Duration(时长) : 00:00:11.18 = 493056 samples...(11.18 秒 = 493056 采样点)
|
||||
File Size(文件大小) : 545k
|
||||
Bit Rate(比特率) : 390k
|
||||
Sample Encoding(编码格式): 16-bit FLAC
|
||||
Comment(注释) : 'Comment=Processed by SoX'
|
||||
|
||||
$ sox --combine mix \
|
||||
countdown-stereo.flac \
|
||||
intro.ogg \
|
||||
output.flac
|
||||
```
|
||||
|
||||
SoX 绝对需要多个命令来执行复杂的操作,因此根据需要创建几个临时和中间文件是正常的。
|
||||
|
||||
### 多通道音频
|
||||
|
||||
当然,并非所有音频都被限制在一个或两个声道。如果你想将多个音频通道组合成一个文件,可以使用 SoX 的 `--combine merge` 选项:
|
||||
|
||||
```
|
||||
$ sox --combine merge countdown.mp3 intro.ogg output.flac
|
||||
$ soxi output.flac
|
||||
|
||||
Input File : 'output.flac'
|
||||
Channels : 3
|
||||
[...]
|
||||
```
|
||||
|
||||
### 简单的音频操作
|
||||
|
||||
在没有视觉界面的情况下操作音频似乎很奇怪,而且对于某些任务来说,SoX 绝对不是最好的工具。然而,对于许多任务,SoX 提供了一个简单而轻量级的工具包。SoX 是一个具有强大潜力的简单命令。有了它,你可以转换音频,操纵通道和波形,甚至生成自己的声音。本文仅简要概述了其功能,因此请阅读其手册页或 [在线文档][2],然后看看你能创造什么。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/20/2/linux-sox
|
||||
|
||||
作者:[Klaatu][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[FYJNEVERFOLLOWS](https://github.com/FYJNEVERFOLLOWS)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/klaatu
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/hi-fi-stereo-vintage.png?itok=KYY3YQwE (HiFi vintage stereo)
|
||||
[2]: http://sox.sourceforge.net/sox.html
|
||||
[3]: http://sox.sourceforge.net
|
||||
[4]: https://opensource.com/life/16/2/linux-multimedia-studio
|
||||
[5]: https://opensource.com/article/18/3/make-sweet-music-digital-audio-workstation-rosegarden
|
197
published/202211/20210415 5 reasons sysadmins love systemd.md
Normal file
197
published/202211/20210415 5 reasons sysadmins love systemd.md
Normal file
@ -0,0 +1,197 @@
|
||||
[#]: subject: (5 reasons sysadmins love systemd)
|
||||
[#]: via: (https://opensource.com/article/21/4/sysadmins-love-systemd)
|
||||
[#]: author: (Seth Kenlon https://opensource.com/users/seth)
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (chai001125)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-15296-1.html)
|
||||
|
||||
系统管理员喜欢 systemd 的 5 个理由
|
||||
======
|
||||
|
||||
> systemd 的速度和易用性使其成为管理现代 Linux 系统的流行方式。
|
||||
|
||||
![][0]
|
||||
|
||||
系统管理员知道,在一台运行着的**现代计算机**上会发生很多事情:应用程序在后台运行、预定事件等待在特定时间被触发、事件写入日志文件、发送状态报告。在以前,不同的进程可以通过一系列 Unix 工具,来进行有效地管理和监控。然而,现代的计算机运作更为复杂了:本地服务与容器化应用程序一同运行、能够轻松访问云及其运行的集群、实时进程、以及有比以往都多的数据。
|
||||
|
||||
拥有统一的管理方法不但是用户想要的,也是忙碌的系统管理员所迫切渴望的。为了完成这项重要的任务,<ruby>系统守护进程<rt> system daemon </rt></ruby> (**systemd**) 被开发出来,并迅速被所有主要的 Linux 发行版所采用了。
|
||||
|
||||
当然,systemd 并不是管理 Linux 系统的唯一方式,还有许多其他可供选择的初始化系统,包括 sysvinit、OpenRC、runit、s6 和 BusyBox,但 systemd 将 Linux 视为一个统一的数据集,意味着 systemd 能用强大的工具对 Linux 进行一致的操作和查询。对于忙碌的系统管理员和许多用户来说,systemd 的速度和易用性是一个重要的特性。有以下的五个原因。
|
||||
|
||||
### 启动管理
|
||||
|
||||
启动 Linux 计算机可能是一件非常罕见的事情。**服务器**的正常运行时间通常以 _年_ 来计算,而不是月或周。**笔记本电脑和台式机**可能会频繁地关闭和启动,但更多的时候它们是被挂起或休眠了。无论哪种类型,**最近一次开机的时刻**都可用于检查一段时间内的计算机健康情况,因为当你在监视系统或诊断问题时,这一时刻能够限制查看的数据量大小,从而让你快速地找到问题所在。
|
||||
|
||||
如果你不记得上次启动计算机的时间,你可以使用 systemd 的日志记录工具 `journalctl`,来列出计算机的所有启动会话:
|
||||
|
||||
```
|
||||
$ journalctl --list-boots
|
||||
-42 7fe7c3... Fri 2020-12-04 05:13:59 - Wed 2020-12-16 16:01:23
|
||||
-41 332e99... Wed 2020-12-16 20:07:39 - Fri 2020-12-18 22:08:13
|
||||
[...]
|
||||
-1 e0fe5f... Mon 2021-03-29 20:47:46 - Mon 2021-03-29 21:59:29
|
||||
0 37fbe4... Tue 2021-03-30 04:46:13 - Tue 2021-03-30 10:42:08
|
||||
```
|
||||
|
||||
最近一次启动会话输出在结果列表的底部,因此你可以通过管道将输出传输到 `tail`,来查看最近一次启动会话。
|
||||
|
||||
左侧的数字(在本例中为 42、41、1 和 0)是每个启动会话的索引号。换句话说,如果你要查看某一特定启动会话的日志,你可以使用这个索引号作为参数。
|
||||
|
||||
### 日志检查
|
||||
|
||||
查看日志是推断系统信息的一种重要方法。日志提供了计算机运行的大部分事件的历史记录,这些记录都是在没有你直接监督的情况下生成的。通过日志,你可以知道某一服务何时启动、定时任务何时运行、哪些服务在后台运行、哪些事件运行失败等等信息。故障排除的初始步骤是使用 systemd 的 `journalctl` 来查看日志:
|
||||
|
||||
```
|
||||
$ journalctl --pager-end
|
||||
```
|
||||
|
||||
`--pager-end` 选项(简写为 `-e`)会从 `journalctl` 的输出末尾开始查看日志,因此要查看更早发生的日志,你需要向上滚动。
|
||||
|
||||
systemd 维护一个错误信息的“目录”,错误信息包含错误记录、可能的解决方案、支持论坛的链接和开发人员文档。这个错误信息的“目录”能为日志事件提供重要的上下文,否则它可能会成为海量日志中的一个令人困惑的信息,或者更糟的是,错误信息可能会完全被忽视。要将错误消息与日志中的解释性文本放在一起输出,你可以使用 `--catalog` 选项(简写为 `-x`):
|
||||
|
||||
```
|
||||
$ journalctl --pager-end --catalog
|
||||
```
|
||||
|
||||
要进一步限定日志输出,你可以指定要查看哪个启动会话的日志。因为每个启动会话都有索引,所以你可以使用 `--boot` 选项,来指定某个启动会话,并仅查看该启动会话的日志:
|
||||
|
||||
```
|
||||
$ journalctl --pager-end --catalog --boot 42
|
||||
```
|
||||
|
||||
你还可以查看特定 systemd 单元的日志。例如,要解决 SSH 服务的问题,你可以指定 `--unit sshd` 选项,来仅查看适用于 `sshd` 守护程序的日志:
|
||||
|
||||
```
|
||||
$ journalctl --pager-end \
|
||||
--catalog --boot 42 \
|
||||
--unit sshd
|
||||
```
|
||||
|
||||
### 服务管理
|
||||
|
||||
systemd 的第一个任务就是启动你的计算机,systemd 会迅速、高效且有效地执行这一任务。但 systemd 一直需要管理的任务是服务管理,因为 systemd 需要确保你要运行的服务确实在你的会话期间启动,并继续运行。systemd 的这一功能非常稳健,因为理论上即使是一个崩溃的服务也可以在没有你干预的情况下重新启动。
|
||||
|
||||
你可以通过使用 `systemctl` 命令来让 systemd 管理服务,并能查看定义服务的 <ruby>单元文件<rt> unit file </rt></ruby>:
|
||||
|
||||
```
|
||||
$ systemctl cat sshd
|
||||
# /usr/lib/systemd/system/sshd.service
|
||||
[Unit]
|
||||
Description=OpenSSH server daemon
|
||||
Documentation=man:sshd(8) man:sshd_config(5)
|
||||
After=network.target sshd-keygen.target
|
||||
Wants=sshd-keygen.target
|
||||
|
||||
[Service]
|
||||
Type=notify
|
||||
EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config
|
||||
EnvironmentFile=-/etc/sysconfig/sshd
|
||||
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
KillMode=process
|
||||
Restart=on-failure
|
||||
RestartSec=42s
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
大多数单元文件都在 `/usr/lib/systemd/system/` 目录下,但是你也可以用局部更改来修改配置,请使用以下的方式:
|
||||
|
||||
```
|
||||
$ systemctl edit sshd
|
||||
```
|
||||
|
||||
你可以通过 `is-active` 选项,来查看某一服务当前是否处于活动状态:
|
||||
|
||||
```
|
||||
$ systemctl is-active sshd
|
||||
active
|
||||
$ systemctl is-active foo
|
||||
inactive
|
||||
```
|
||||
|
||||
同样地,你可以通过 `is-failed` 选项,来查看某一服务是否运行失败了。
|
||||
|
||||
```
|
||||
$ systemctl is-failed sshd
|
||||
```
|
||||
|
||||
使用以下命令,来启动或者停止某一服务:
|
||||
|
||||
```
|
||||
$ systemctl stop sshd
|
||||
$ systemctl start sshd
|
||||
```
|
||||
|
||||
使用以下命令,让某一服务在开机时自启动:
|
||||
|
||||
```
|
||||
$ systemctl enable sshd
|
||||
```
|
||||
|
||||
添加 `--now` 选项,让某一服务在开机时启动并在当前会话中立即启动。
|
||||
|
||||
### 定时器管理
|
||||
|
||||
在以前,当你想在 Linux 上自动执行一项任务时,你可以使用的工具是 `cron`。如今,`cron` 命令仍能使用,但对于在 Linux 上自动执行一项任务,也有一些其他好用的替代方案。例如,[anacron 命令][2] 是一个多功能的、类似于 `cron` 的系统,它能够运行在停机期间可能会错过的任务。
|
||||
|
||||
计划的事件就是在特定时间需要激活的服务。systemd 管理一个名为 [定时器][3] 的工具,它类似 cron 的功能。你可以使用以下命令,来列出活动中的定时器:
|
||||
|
||||
```
|
||||
$ systemctl list-timers
|
||||
NEXT LEFT
|
||||
Tue 2021-03-30 12:37:54 NZDT 16min left [...]
|
||||
Wed 2021-03-31 00:00:00 NZDT 11h left [...]
|
||||
Wed 2021-03-31 06:42:02 NZDT 18h left [...]
|
||||
|
||||
3 timers listed.
|
||||
Pass --all to see loaded but inactive timers, too.
|
||||
```
|
||||
|
||||
你可以使用以下命令,来像启用服务一样启用定时器:
|
||||
|
||||
```
|
||||
$ systemctl enable myMonitor.timer
|
||||
```
|
||||
|
||||
### 目标管理
|
||||
|
||||
<ruby>目标<rt>target</rt></ruby> 是 systemd 的最后一个主要组成部分。像服务和定时器一样,目标也是一个单元文件,也可以以相同的方式启动和启用。目标的独特之处在于它们可以将其他单元文件任意分组。例如,你可能希望开机启动到文本控制台界面而不是图形桌面,因此有一个 `multi-user` 目标。但是,`multi-user` 目标只是没有包括桌面单元文件的 `graphical` 目标。
|
||||
|
||||
简而言之,目标是一种将服务、定时器甚至其他的目标集合在一起,以表示机器的预期状态的简单方法。
|
||||
|
||||
事实上,在 systemd 中,重启、关机或关闭操作只是一个目标而已。
|
||||
|
||||
你可以使用 `list-unit-files` 选项,用 `--type` 选项将其限制为 `target` 来列出所有可用的目标:
|
||||
|
||||
```
|
||||
$ systemctl list-unit-files --type target
|
||||
```
|
||||
|
||||
### 使用 systemd 对计算机进行控制管理
|
||||
|
||||
现代的 Linux 使用 systemd 进行服务管理和日志检查。从个人的 Linux 系统到企业服务器,systemd 都能提供有效的监控,并且十分易于维护。你越频繁地使用 systemd,systemd 对你而言就会变得越容易预测和直观,你就会明白系统的不同部分是如何相互关联的。
|
||||
|
||||
为了更好地熟悉 systemd,请现在就开始使用它吧。请 [下载关于 systemd 相关命令的备忘录][4],你可以在实际使用 systemd 中经常参考这个备忘录,这样你就能更快熟悉使用 systemd 啦!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/4/sysadmins-love-systemd
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[chai001125](https://github.com/chai001125)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/seth
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/OSDC_women_computing_4.png?itok=VGZO8CxT (Woman sitting in front of her laptop)
|
||||
[2]: https://opensource.com/article/21/2/linux-automation
|
||||
[3]: https://opensource.com/article/20/7/systemd-timers
|
||||
[4]: https://opensource.com/downloads/linux-systemd-cheat-sheet
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202211/28/085754t9sztkt26452ys4s.png
|
@ -0,0 +1,123 @@
|
||||
[#]: subject: (How we built an open source design system to create new community logos)
|
||||
[#]: via: (https://opensource.com/article/21/4/ansible-community-logos)
|
||||
[#]: author: (Fiona Lin https://opensource.com/users/fionalin)
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (MareDevi)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-15227-1.html)
|
||||
|
||||
我们如何建立一个开源的设计系统来创造新的社区徽标
|
||||
======
|
||||
|
||||
> 了解 Ansible 的新徽标是如何根据相关人员的意见开发的,以确保整个项目的品牌一致性。
|
||||
|
||||
![UX design Mac computer with mobile and laptop][1]
|
||||
|
||||
作为红帽的用户体验(UX)设计和 Ansible 产品团队的交互设计师,我们花了大约 6 个月的时间为 Ansible 社区设计了一系列徽标。这件事其实在更早的时候就开始了,当时一位项目经理要求我们为一个幻灯片提供一个 “快速而简单” 的徽标。在收集了一些需求后,我们在几天内就向相关人员展示了一个徽标,而且没有经过太多调整。几个月后,另一个相关人员说他们也需要类似的徽标,所以我们重复了这个过程。
|
||||
|
||||
于是,我们注意到一个模式:像这样的徽标资源不仅仅代表个人的要求,而是整个 Ansible 项目的共同需要。在完成了几个徽标要求后,我们有了一系列临时的设计,但在没有意识到品牌和设计惯例的情况下,这可能给整个 Ansible 的品牌视觉造成了不一致。随着这个徽标系列的增加,我们认识到了这个迫在眉睫的问题,并需要解决它。
|
||||
|
||||
我们的解决方案是创建一个 Ansible 设计系统,这是一个针对品牌的资源,可以指导未来一致的徽标设计。
|
||||
|
||||
### 什么是设计系统?
|
||||
|
||||
设计系统是一个可重复使用的资源和指导方法的集合,有助于告知任何数字产品套件的视觉语言。设计系统创造了一些模式,将独立的产品整合在一起,并通过可扩展性和一致性提升品牌。
|
||||
|
||||
特别是在一个有多种产品的大公司里,如果没有标准化,扩展起来就不容易,因为不同的团队对每个产品都有贡献。设计系统可以作为每个团队建立新资产的基线。有了标准化的外观和感觉,产品在整个组合中被统一为一个家族。
|
||||
|
||||
### 从头构建一个设计系统
|
||||
|
||||
在收到相关人员提出的为 Ansible 开源社区(如 Ansible Builder、Ansible Runner 和Project Receptor)创建徽标的一系列要求后,我们决定为我们的工作流程设计一个结构,并创建一个单一的事实来源,为之努力。
|
||||
|
||||
首先,我们对现有的徽标进行了视觉审计,以确定我们要做的是什么。Ansible 的原始徽标系列由四个主要图像组成:代表 AWX 的 Angry Spud,代表 Ansible 核心/引擎的 Ansibull,以及代表 AWX 的带翅膀的显示器。大部分的徽标都是用一致的红色阴影和公牛的形象联系在一起的,但是笔画的宽度、笔画的颜色、线条的质量和排版复杂而多样。
|
||||
|
||||
![Original Ansible logos][2]
|
||||
|
||||
Angry Spud 使用棕褐色的轮廓和手绘风格,而 Ansibull 则是一个对称的几何矢量图。AWX 显示器是一个异类,它有细线画的翅膀,蓝色的矢量矩形,以及古英语字体(这里没有包括在内,但与家族中其他使用现代无衬线的字体相比,它是一个例外)。
|
||||
|
||||
### 确立新的设计标准
|
||||
|
||||
考虑到调色板、排版和图像,我们产生了一个一致的构图,以 Ansibull 代表所有核心的 Ansible 产品,以及大胆的线条和充满活力的颜色。
|
||||
|
||||
![Ansible design system][4]
|
||||
|
||||
新的 Ansible 社区徽标设计风格指南详细说明了 Ansible 产品徽标的调色、排版、尺寸、间距和徽标变化。
|
||||
|
||||
新的风格指南展示了一种全新的、现代的定制字体,该字体基于瑞士独立字体厂商 [Grilli Type][5] 的 GT America 字体。我们为该字体创造了一个柔和的外观,通过圆润每个字母某些角落来配合图像的圆润度。
|
||||
|
||||
我们决定通过在光谱中加入更多的颜色并以原色为基础,设计一个更生动、更饱和、更普遍的调色板。新的调色板以浅蓝色、黄色和粉红色为主色调,每种颜色都有较浅的高光和较深的阴影。这种更广泛的颜色范围使系统内有更多的灵活性,并引入了 3D 的外观和感觉。
|
||||
|
||||
![New Ansible logos][6]
|
||||
|
||||
我们还引入了新的图像,如 Receptor 和 AWX 徽标中的六边形,以保持视觉上的连续性。最后,我们确保每个徽标在浅色和深色背景上都能使用,以获得最大的灵活性。
|
||||
|
||||
### 拓展设计组合
|
||||
|
||||
一旦我们建立了核心徽标系列,我们就开始为 Ansible 服务创建徽章,如 Ansible Demo 和 Ansible Workshop。为了将服务与产品区分开来,我们决定将服务图形包围在一个圆圈中,圆圈中包含了相同的定制排版的服务名称。新的服务徽章显示了幼儿版的 Ansibull(来自 Ansible Builder 的徽标)正在完成与每个服务相关的任务,例如 Ansible Demo 指向白板,Ansible Workshop 则使用构建工具。
|
||||
|
||||
![New Ansible services logos][7]
|
||||
|
||||
### 利用开放源码进行设计决策
|
||||
|
||||
最初的 AWX 徽标受到了摇滚乐图像的影响,如翅膀和重金属字体(此处省略)。
|
||||
|
||||
![Original AWX logo][8]
|
||||
|
||||
(Fiona Lin and Taufique Rahman, [CC BY-SA 4.0][3])
|
||||
|
||||
Ansible 社区的一些成员,包括红帽多样性和包容性小组,提请我们注意,这些元素类似于仇恨团体使用的图像。
|
||||
|
||||
考虑到原徽标的社会影响,我们必须迅速与 Ansible 社区合作,设计一个替代徽标。我们没有像最初的徽标那样闭门造车,而是扩大了项目的范围,仔细考虑了更多的相关人员,包括 Ansible 社区、红帽多样性和包容性小组,以及红帽法律团队。
|
||||
|
||||
我们开始了头脑风暴,向 Ansible 开源社区征求意见。Ansible 的一位工程师 Rebeccah Hunter 在草图绘制阶段做出了贡献,后来成为我们设计团队中的一员。让一大群相关人员参与进来的挑战之一是,我们对新的徽标概念有了各种各样的想法,比如一条辅助电缆、一碗拉面等等。
|
||||
|
||||
我们勾画了五个社区贡献的徽标创意,每个徽标都有不同的品牌视觉:一个芽、一个火箭、一个显示器、一碗拉面和一个辅助电缆。
|
||||
|
||||
![AWX logo concepts][9]
|
||||
|
||||
在完成这些初步的概念草图后,我们建立了一个虚拟的投票机制,并在整个迭代过程中使用。这个投票系统使我们能够利用社区的反馈,从五个初始概念缩小到三个:火箭、一碗拉面和显示器。我们在这三个方向上进一步迭代,并通过专门的 Slack 频道进行反馈,直到我们找到一个符合社区愿景的方向,即 AWX 显示器。
|
||||
|
||||
![New AWX logo][10]
|
||||
|
||||
以社区的意见为指导,我们围绕显示器为 AWX 打造了徽标概念。我们保留了原徽标中的显示器元素,同时使其外观和感觉现代化,以配合我们更新的设计系统。我们使用了更鲜艳的色调,更简洁的无衬线字体,以及来自 Project Receptor 徽标的元素,包括六角形图案。
|
||||
|
||||
通过从一开始就与我们的社区接触,我们能够在公开场合进行设计和迭代,所有相关人员都有一种包容感。最后,我们认为这是取代一个有争议的徽标的最好方法。最终的版本被移交给了红帽法律团队,在获得批准后,我们用这个新的徽标替换了所有的现有资产。
|
||||
|
||||
### 主要收获
|
||||
|
||||
为设计系统创建一套规则和资源,使你的数字产品全面保持一致,消除品牌混乱,并实现可扩展性。
|
||||
|
||||
当你探索在自己的社区建立一个设计系统时,你可能会从我们在这条路上学到的这些关键经验中受益:
|
||||
|
||||
* 用设计系统来扩展新的徽标,比没有设计系统要容易得多。
|
||||
* 当你使用投票系统来验证结果时,杂乱无章的设计方案就会变得不那么令人生畏。
|
||||
* 将大量受众的注意力引向三套方案,可以消除决策疲劳,集中社区反馈。
|
||||
|
||||
我们希望这篇文章能够提供用于开源社区的设计系统的启示,并帮助你认识到在早期开发一个系统的好处。如果你正在创建一个新的设计系统,你有什么问题?如果你已经创建了一个,你学到了什么教训?请在评论中分享你的想法。
|
||||
|
||||
*(图像来自:Fiona Lin and Taufique Rahman, [CC BY-SA 4.0][3])*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/4/ansible-community-logos
|
||||
|
||||
作者:[Fiona Lin][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[MareDevi](https://github.com/MareDEvi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/fionalin
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/ux-design-mac-laptop.jpg?itok=9-HKgXa9 (UX design Mac computer with mobile and laptop)
|
||||
[2]: https://opensource.com/sites/default/files/pictures/original_logos.png (Original Ansible logos)
|
||||
[3]: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
[4]: https://opensource.com/sites/default/files/pictures/design_system.png (Ansible design system)
|
||||
[5]: https://www.grillitype.com/
|
||||
[6]: https://opensource.com/sites/default/files/pictures/new_logos.png (New Ansible logos)
|
||||
[7]: https://opensource.com/sites/default/files/pictures/new_service_badges.png (New Ansible services logos)
|
||||
[8]: https://opensource.com/sites/default/files/uploads/awx_original.png (Original AWX logo)
|
||||
[9]: https://opensource.com/sites/default/files/uploads/awx_concepts.png (AWX logo concepts)
|
||||
[10]: https://opensource.com/sites/default/files/uploads/awx.png (New AWX logo)
|
@ -0,0 +1,460 @@
|
||||
[#]: subject: (Identify security properties on Linux using checksec)
|
||||
[#]: via: (https://opensource.com/article/21/6/linux-checksec)
|
||||
[#]: author: (Gaurav Kamathe https://opensource.com/users/gkamathe)
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (chai001125)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-15264-1.html)
|
||||
|
||||
在 Linux 上使用 Checksec 识别二进制文件的安全属性
|
||||
======
|
||||
|
||||
> 这篇文章能让你了解如何使用 Checksec ,来识别一个可执行文件的安全属性,了解安全属性的含义,并知道如何使用它们。
|
||||
|
||||
![][0]
|
||||
|
||||
编译源代码会生成一个二进制文件(LCTT 译注:即 `.o` 文件)。在编译期间,你可以向 `gcc` 编译器提供 <ruby>标志<rt> flags </rt></ruby>,以启用或禁用二进制文件的某些属性,这些属性与安全性相关。
|
||||
|
||||
Checksec 是一个漂亮的小工具,同时它也是一个 shell 脚本。Checksec 可以识别编译时构建到二进制文件中的安全属性。编译器可能会默认启用一些安全属性,你也可以提供特定的标志,来启用其他的安全属性。
|
||||
|
||||
本文将介绍如何使用 Checksec ,来识别二进制文件的安全属性,包括:
|
||||
|
||||
1. Checksec 在查找有关安全属性的信息时,使用了什么**底层的命令**
|
||||
2. 在将源代码编译成二进制文件时,如何使用<ruby> GNU 编译器套件<rt> GNU Compiler Collection </rt></ruby>(即 GCC)来**启用安全属性**。
|
||||
|
||||
### 安装 checksec
|
||||
|
||||
要在 Fedora 和其他基于 RPM 的 Linux 系统上,安装 Checksec,请使用以下命令:
|
||||
|
||||
```
|
||||
$ sudo dnf install checksec
|
||||
```
|
||||
|
||||
对于基于 Debian 的 Linux 发行版,使用对应的 `apt` 命令,来安装 Checksec。
|
||||
|
||||
```
|
||||
$ sudo apt install checksec
|
||||
```
|
||||
|
||||
### shell 脚本
|
||||
|
||||
在安装完 Checksec 后,能够发现 Checksec 是一个**单文件**的 shell 脚本,它位于 `/usr/bin/checksec`,并且这个文件挺大的。Checksec 的一个优点是你可以通过快速通读这个 shell 脚本,从而了解 Checksec 的执行原理、明白所有能查找有关二进制文件或可执行文件的安全属性的**系统命令**:
|
||||
|
||||
```
|
||||
$ file /usr/bin/checksec
|
||||
/usr/bin/checksec: Bourne-Again shell script, ASCII text executable, with very long lines
|
||||
|
||||
$ wc -l /usr/bin/checksec
|
||||
2111 /usr/bin/checksec
|
||||
```
|
||||
|
||||
以下的命令展示了如何对你每天都会使用的:`ls` 命令的二进制文件运行 Checksec。Checksec 命令的格式是:`checksec --file=`,后面再跟上二进制文件的绝对路径:
|
||||
|
||||
```
|
||||
$ checksec --file=/usr/bin/ls
|
||||
RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE
|
||||
Full RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH No Symbols Yes 5 17 /usr/bin/ls
|
||||
```
|
||||
|
||||
当你在终端中对某个二进制文件运行 Checksec 时,你会看到安全属性有颜色上的区分,显示什么是好的安全属性(绿色),什么可能不是好的安全属性(红色)。我在这里说 **“可能”** 是因为即使有些安全属性是红色的,也不一定意味着这个二进制文件很糟糕,它可能只是表明发行版供应商在编译二进制文件时做了一些权衡,从而舍弃了部分安全属性。
|
||||
|
||||
Checksec 输出的第一行提供了二进制文件的各种安全属性,例如 `RELRO`、`STACK CANARY`、`NX` 等(我将在后文进行详细解释)。第二行打印出给定二进制文件(本例中为 `ls`)在这些安全属性的状态(例如,`NX enabled` 表示为堆栈中的数据没有执行权限)。
|
||||
|
||||
### 示例二进制文件
|
||||
|
||||
在本文中,我将使用以下的 “hello world” 程序作为示例二进制文件。
|
||||
|
||||
```
|
||||
#include <stdio.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
printf("Hello World\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
请注意,在编译源文件 `hello.c` 的时候,我没有给 `gcc` 提供任何额外的标志:
|
||||
|
||||
```
|
||||
$ gcc hello.c -o hello
|
||||
|
||||
$ file hello
|
||||
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=014b8966ba43e3ae47fab5acae051e208ec9074c, for GNU/Linux 3.2.0, not stripped
|
||||
|
||||
$ ./hello
|
||||
Hello World
|
||||
```
|
||||
|
||||
使用 Checksec 运行二进制文件 `hello`,打印的某些安全属性的状态,与上面的 `ls` 二进制文件的结果不同(在你的屏幕上,某些属性可能显示为红色):
|
||||
|
||||
```
|
||||
$ checksec --file=./hello
|
||||
RELRO STACK CANARY NX PIE RPATH RUNPATH Symbols FORTIFY Fortified Fortifiable FILE
|
||||
Partial RELRO No canary found NX enabled No PIE No RPATH No RUNPATH 85) Symbols No 0 0./hello
|
||||
$
|
||||
```
|
||||
|
||||
(LCTT 译注:在我的 Ubuntu 22.04 虚拟机,使用 11.3.0 版本的 `gcc`,结果与上述不太相同,利用默认参数进行编译,会得到 RELRO、PIE、NX 保护是全开的情况。)
|
||||
|
||||
### 更改 Checksec 的输出格式
|
||||
|
||||
Checksec 允许自定义各种输出格式,你可以使用 `--output` 来自定义输出格式。我将选择的输出格式是 JSON 格式,并将输出结果通过管道传输到 `jq` 实用程序,来得到漂亮的打印。
|
||||
|
||||
接下来,确保你已安装好了 [jq][3],因为本教程会使用 `jq` 从 Checksec 的输出结果中,用 `grep` 来快速得到某一特定的安全属性状态,并报告该安全属性是否启动(启动为 `yes`,未启动为 `no`):
|
||||
|
||||
```
|
||||
$ checksec --file=./hello --output=json | jq
|
||||
{
|
||||
"hello": {
|
||||
"relro": "partial",
|
||||
"canary": "no",
|
||||
"nx": "yes",
|
||||
"pie": "no",
|
||||
"rpath": "no",
|
||||
"runpath": "no",
|
||||
"symbols": "yes",
|
||||
"fortify_source": "no",
|
||||
"fortified": "0",
|
||||
"fortify-able": "0"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 看一看所有的安全属性
|
||||
|
||||
上面的二进制文件 `hello` 包括几个安全属性。我将该二进制文件与 `ls` 的二进制文件进行比较,以检查启用的安全属性有何不同,并解释 Checksec 是如何找到此信息。
|
||||
|
||||
#### 1、符号(Symbol)
|
||||
|
||||
我先从简单的讲起。在编译期间,某些 <ruby>符号<rt> symbols </rt></ruby>包含在二进制文件中,这些符号主要用作于调试。开发软件时,需要用到这些符号,来调试和修复错误。
|
||||
|
||||
这些符号通常会从供用户普遍使用的最终二进制文件中删除。删除这些符号不会影响到二进制文件的执行。删除符号通常是为了节省空间,因为一旦符号被删除了,二进制文件就会稍微小一些。在闭源或专有软件中,符号通常都会被删除,因为把这些符号放在二进制文件中,可以很容易地推断出软件的内部工作原理。
|
||||
|
||||
根据 Checksec 的结果,在二进制文件 `hello` 中有符号,但在 `ls` 的二进制文件中不会有符号。同样地,你还可以用 `file` 命令,来找到符号的信息,在二进制文件 `hello` 的输出结果的最后,看到 `not stripped`,表明二进制文件 `hello` 有符号:
|
||||
|
||||
```
|
||||
$ checksec --file=/bin/ls --output=json | jq | grep symbols
|
||||
"symbols": "no",
|
||||
|
||||
$ checksec --file=./hello --output=json | jq | grep symbols
|
||||
"symbols": "yes",
|
||||
|
||||
$ file hello
|
||||
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=014b8966ba43e3ae47fab5acae051e208ec9074c, for GNU/Linux 3.2.0, not stripped
|
||||
```
|
||||
|
||||
Checksec 是如何找到符号的信息呢?Checksec 提供了一个方便的 `--debug` 选项,来显示运行了哪些函数。因此,运行以下的命令,会显示在 shell 脚本中运行了哪些函数:
|
||||
|
||||
```
|
||||
$ checksec --debug --file=./hello
|
||||
```
|
||||
|
||||
在本教程中,我试图寻找 Checksec 查找安全属性信息时,使用了什么**底层命令**。由于 Checksec 是一个 shell 脚本,因此你始终可以使用 Bash 功能。以下的命令将输出从 shell 脚本中运行的每个命令:
|
||||
|
||||
```
|
||||
$ bash -x /usr/bin/checksec --file=./hello
|
||||
```
|
||||
|
||||
如果你滚动浏览上述的输出结果的话,你会看到 `echo_message` 后面有各个安全属性的类别。以下显示了 Checksec 检测二进制文件是否包含符号时,运行的底层命令:
|
||||
|
||||
```
|
||||
+ readelf -W --symbols ./hello
|
||||
+ grep -q '\\.symtab'
|
||||
+ echo_message '\033[31m96) Symbols\t\033[m ' Symbols, ' symbols="yes"' '"symbols":"yes",'
|
||||
```
|
||||
|
||||
上面的输出显示,Checksec 利用 `readelf`,来读取二进制文件,并提供一个特殊 `--symbols` 标志,来列出二进制文件中的所有符号。然后它会查找一个特殊值:`.symtab`,它提供了所能找到的条目的计数(即符号的个数)。你可以在上面编译的测试二进制文件 `hello` 上,尝试以下命令,得到与 Checksec 查看二进制文件类似的符号信息:
|
||||
|
||||
```
|
||||
$ readelf -W --symbols ./hello
|
||||
$ readelf -W --symbols ./hello | grep -i symtab
|
||||
```
|
||||
|
||||
(LCTT 译注:也可以通过直接查看 `/usr/bin/checksec` 下的 Checksec 源文件。)
|
||||
|
||||
##### 如何删除符号
|
||||
|
||||
你可以在编译后或编译时删除符号。
|
||||
|
||||
* **编译后:** 在编译后,你可以使用 `strip`,手动地来删除二进制文件的符号。删除后,使用 `file` 命令,来检验是否还有符号,现在显示 `stripped`,表明二进制文件 `hello` 无符号了:
|
||||
|
||||
```
|
||||
$ gcc hello.c -o hello
|
||||
$
|
||||
$ file hello
|
||||
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=322037496cf6a2029dcdcf68649a4ebc63780138, for GNU/Linux 3.2.0, not stripped
|
||||
$
|
||||
$ strip hello
|
||||
$
|
||||
$ file hello
|
||||
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=322037496cf6a2029dcdcf68649a4ebc63780138, for GNU/Linux 3.2.0, stripped
|
||||
$
|
||||
```
|
||||
* **编译时:** 你也可以在编译时,用 `-s` 参数让 gcc 编译器帮你自动地删除符号:
|
||||
|
||||
```
|
||||
$ gcc -s hello.c -o hello
|
||||
$
|
||||
$ file hello
|
||||
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=247de82a8ad84e7d8f20751ce79ea9e0cf4bd263, for GNU/Linux 3.2.0, stripped
|
||||
$
|
||||
```
|
||||
|
||||
重新运行 Checksec,你可以看到现在二进制文件 `hello` 的 `symbols` 这一属性的值是`no`:
|
||||
|
||||
```
|
||||
$ checksec --file=./hello --output=json | jq | grep symbols
|
||||
"symbols": "no",
|
||||
$
|
||||
```
|
||||
|
||||
#### 2、Canary(堆栈溢出哨兵)
|
||||
|
||||
Canary 是放置在缓冲区和 <ruby>栈<rt> stack </rt></ruby> 上的控制数据之间的已知值,它用于监视缓冲区是否溢出。当应用程序执行时,会为其分配两种内存,其中之一就是 _栈_。栈是一个具有两个操作的数据结构:第一个操作 `push`,将数据压入堆栈;第二个操作 `pop`,以后进先出的顺序从栈中弹出数据。恶意的输入可能会导致栈溢出,或使用特制的输入破坏栈,并导致程序崩溃:
|
||||
|
||||
```
|
||||
$ checksec --file=/bin/ls --output=json | jq | grep canary
|
||||
"canary": "yes",
|
||||
$
|
||||
$ checksec --file=./hello --output=json | jq | grep canary
|
||||
"canary": "no",
|
||||
$
|
||||
```
|
||||
|
||||
Checksec 是如何确定二进制文件是否启用了 Canary 的呢?使用上述同样的方法,得到 Checksec 在检测二进制文件是否启用 Canary 时,运行的底层命令:
|
||||
|
||||
```
|
||||
$ readelf -W -s ./hello | grep -E '__stack_chk_fail|__intel_security_cookie'
|
||||
```
|
||||
|
||||
##### 启用 Canary
|
||||
|
||||
为了防止栈溢出等情况,编译器提供了 `-stack-protector-all` 标志,它向二进制文件添加了额外的代码,来检查缓冲区是否溢出:
|
||||
|
||||
```
|
||||
$ gcc -fstack-protector-all hello.c -o hello
|
||||
|
||||
$ checksec --file=./hello --output=json | jq | grep canary
|
||||
"canary": "yes",
|
||||
```
|
||||
|
||||
Checksec 显示 Canary 属性现已启用。你还可以通过以下方式,来验证这一点:
|
||||
|
||||
```
|
||||
$ readelf -W -s ./hello | grep -E '__stack_chk_fail|__intel_security_cookie'
|
||||
2: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@GLIBC_2.4 (3)
|
||||
83: 0000000000000000 0 FUNC GLOBAL DEFAULT UND __stack_chk_fail@@GLIBC_2.4
|
||||
$
|
||||
```
|
||||
|
||||
#### 3、位置无关可执行文件(PIE)
|
||||
|
||||
<ruby>位置无关可执行文件<rt>Position-Independent Executable</rt></ruby>(PIE),顾名思义,它指的是放置在内存中某处执行的代码,不管其绝对地址的位置,即代码段、数据段地址随机化(ASLR):
|
||||
|
||||
```
|
||||
$ checksec --file=/bin/ls --output=json | jq | grep pie
|
||||
"pie": "yes",
|
||||
|
||||
$ checksec --file=./hello --output=json | jq | grep pie
|
||||
"pie": "no",
|
||||
```
|
||||
|
||||
通常,PIE 仅对 <ruby>库<rt> libraries </rt></ruby>启用,并不对独立命令行程序启用 PIE。在下面的输出中,`hello` 显示为 `LSB executable`,而 `libc` 标准库(`.so`) 文件被标记为 `LSB shared object`:
|
||||
|
||||
```
|
||||
$ file hello
|
||||
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=014b8966ba43e3ae47fab5acae051e208ec9074c, for GNU/Linux 3.2.0, not stripped
|
||||
|
||||
$ file /lib64/libc-2.32.so
|
||||
/lib64/libc-2.32.so: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=4a7fb374097fb927fb93d35ef98ba89262d0c4a4, for GNU/Linux 3.2.0, not stripped
|
||||
```
|
||||
|
||||
Checksec 查找是否启用 PIE 的底层命令如下:
|
||||
|
||||
```
|
||||
$ readelf -W -h ./hello | grep EXEC
|
||||
Type: EXEC (Executable file)
|
||||
```
|
||||
|
||||
如果你在共享库上尝试相同的命令,你将看到 `DYN`,而不是 `EXEC`:
|
||||
|
||||
```
|
||||
$ readelf -W -h /lib64/libc-2.32.so | grep DYN
|
||||
Type: DYN (Shared object file)
|
||||
```
|
||||
|
||||
##### 启用 PIE
|
||||
|
||||
要在测试程序 `hello.c` 上启用 PIE,请在编译时,使用以下命令:
|
||||
|
||||
```
|
||||
$ gcc -pie -fpie hello.c -o hello`
|
||||
```
|
||||
|
||||
你可以使用 Checksec,来验证 PIE 是否已启用:
|
||||
|
||||
```
|
||||
$ checksec --file=./hello --output=json | jq | grep pie
|
||||
"pie": "yes",
|
||||
$
|
||||
```
|
||||
|
||||
现在,应该会显示为 “<ruby> PIE 可执行<rt> pie executable </rt></ruby>”,其类型从 `EXEC` 更改为 `DYN`:
|
||||
|
||||
```
|
||||
$ file hello
|
||||
hello: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=bb039adf2530d97e02f534a94f0f668cd540f940, for GNU/Linux 3.2.0, not stripped
|
||||
|
||||
$ readelf -W -h ./hello | grep DYN
|
||||
Type: DYN (Shared object file)
|
||||
```
|
||||
|
||||
#### 4、NX(堆栈禁止执行)
|
||||
|
||||
NX 代表 <ruby>不可执行<rt> non-executable </rt></ruby>。它通常在 CPU 层面上启用,因此启用 NX 的操作系统可以将某些内存区域标记为不可执行。通常,缓冲区溢出漏洞将恶意代码放在堆栈上,然后尝试执行它。但是,让堆栈这些可写区域变得不可执行,可以防止这种攻击。在使用 `gcc` 对源程序进行编译时,默认启用此安全属性:
|
||||
|
||||
```
|
||||
$ checksec --file=/bin/ls --output=json | jq | grep nx
|
||||
"nx": "yes",
|
||||
|
||||
$ checksec --file=./hello --output=json | jq | grep nx
|
||||
"nx": "yes",
|
||||
```
|
||||
|
||||
Checksec 使用以下底层命令,来确定是否启用了 NX。在尾部的 `RW` 表示堆栈是可读可写的;因为没有 `E`,所以堆栈是不可执行的:
|
||||
|
||||
```
|
||||
$ readelf -W -l ./hello | grep GNU_STACK
|
||||
GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RW 0x10
|
||||
```
|
||||
|
||||
##### 演示如何禁用 NX
|
||||
|
||||
我们不建议禁用 NX,但你可以在编译程序时,使用 `-z execstack` 参数,来禁用 NX:
|
||||
|
||||
```
|
||||
$ gcc -z execstack hello.c -o hello
|
||||
|
||||
$ checksec --file=./hello --output=json | jq | grep nx
|
||||
"nx": "no",
|
||||
```
|
||||
|
||||
编译后,堆栈会变为可读可写可执行(`RWE`),允许在堆栈上的恶意代码执行:
|
||||
|
||||
```
|
||||
$ readelf -W -l ./hello | grep GNU_STACK
|
||||
GNU_STACK 0x000000 0x0000000000000000 0x0000000000000000 0x000000 0x000000 RWE 0x10
|
||||
```
|
||||
|
||||
#### 5、RELRO(GOT 写保护)
|
||||
|
||||
RELRO 代表 “<ruby>重定位只读<rt> Relocation Read-Only </rt></ruby>”。可执行链接格式(ELF)二进制文件使用全局偏移表(GOT)来动态地解析函数。启用 RELRO 后,会设置二进制文件中的 GOT 表为只读,从而防止重定位攻击:
|
||||
|
||||
```
|
||||
$ checksec --file=/bin/ls --output=json | jq | grep relro
|
||||
"relro": "full",
|
||||
|
||||
$ checksec --file=./hello --output=json | jq | grep relro
|
||||
"relro": "partial",
|
||||
```
|
||||
|
||||
Checksec 使用以下底层命令,来查找是否启用 RELRO。在二进制文件 `hello` 仅启用了 RELRO 属性中的一个属性,因此,在 Checksec 验证时,显示 `partial`:
|
||||
|
||||
```
|
||||
$ readelf -W -l ./hello | grep GNU_RELRO
|
||||
GNU_RELRO 0x002e10 0x0000000000403e10 0x0000000000403e10 0x0001f0 0x0001f0 R 0x1
|
||||
|
||||
$ readelf -W -d ./hello | grep BIND_NOW
|
||||
```
|
||||
|
||||
##### 启用全 RELRO
|
||||
|
||||
要启用全 RELRO,请在 `gcc` 编译时,使用以下命令行参数:
|
||||
|
||||
```
|
||||
$ gcc -Wl,-z,relro,-z,now hello.c -o hello
|
||||
|
||||
$ checksec --file=./hello --output=json | jq | grep relro
|
||||
"relro": "full",
|
||||
```
|
||||
|
||||
现在, RELRO 中的第二个属性也被启用,使程序变成全 RELRO:
|
||||
|
||||
```
|
||||
$ readelf -W -l ./hello | grep GNU_RELRO
|
||||
GNU_RELRO 0x002dd0 0x0000000000403dd0 0x0000000000403dd0 0x000230 0x000230 R 0x1
|
||||
|
||||
$ readelf -W -d ./hello | grep BIND_NOW
|
||||
0x0000000000000018 (BIND_NOW)
|
||||
```
|
||||
|
||||
#### 6、Fortify
|
||||
|
||||
Fortify 是另一个安全属性,但它超出了本文的范围。Checksec 是如何在二进制文件中验证 Fortify,以及如何在 `gcc` 编译时启用 Fortify,作为你需要解决的课后练习。
|
||||
|
||||
```
|
||||
$ checksec --file=/bin/ls --output=json | jq | grep -i forti
|
||||
"fortify_source": "yes",
|
||||
"fortified": "5",
|
||||
"fortify-able": "17"
|
||||
|
||||
$ checksec --file=./hello --output=json | jq | grep -i forti
|
||||
"fortify_source": "no",
|
||||
"fortified": "0",
|
||||
"fortify-able": "0"
|
||||
```
|
||||
|
||||
### 其他的 Checksec 功能
|
||||
|
||||
关于安全性的话题是永无止境的,不可能在本文涵盖所有关于安全性的内容,但我还想提一下 Checksec 命令的一些其他功能,这些功能也很好用。
|
||||
|
||||
#### 对多个二进制文件运行 Checksec
|
||||
|
||||
你不必对每个二进制文件都进行一次 Checksec。相反,你可以提供多个二进制文件所在的目录路径,Checksec 将一次性为你验证所有文件:
|
||||
|
||||
```
|
||||
$ checksec --dir=/usr
|
||||
```
|
||||
|
||||
#### 对进程运行 Checksec
|
||||
|
||||
Checksec 除了能检查二进制文件的安全属性,Checksec 还能对程序起作用。以下的命令用于查找你系统上所有正在运行的程序的安全属性。如果你希望 Checksec 检查所有正在运行的进程,可以使用 `--proc-all`,或者你也可以使用进程名称,选择特定的进程进行检查:
|
||||
|
||||
```
|
||||
$ checksec --proc-all
|
||||
|
||||
$ checksec --proc=bash
|
||||
```
|
||||
|
||||
#### 对内核运行 Checksec
|
||||
|
||||
除了本文介绍的用 Checksec 检查用户态应用程序的安全属性之外,你还可以使用它来检查系统内置的 <ruby>内核属性<rt> kernel properties </rt></ruby>:
|
||||
|
||||
```
|
||||
$ checksec --kernel
|
||||
```
|
||||
|
||||
### 快来试一试 Checksec 吧
|
||||
|
||||
Checksec 是一个能了解哪些用户空间和内核的安全属性被启用的好方法。现在,你就可以开始使用 Checksec,来了解每个安全属性是什么,并明白启用每个安全属性的原因,以及它能阻止的攻击类型。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/6/linux-checksec
|
||||
|
||||
作者:[Gaurav Kamathe][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[chai001125](https://github.com/chai001125)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/gkamathe
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/target-security.png
|
||||
[2]: http://www.opengroup.org/onlinepubs/009695399/functions/printf.html
|
||||
[3]: https://stedolan.github.io/jq/download/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202211/18/095702dzvm482460vnrv6y.jpg
|
@ -0,0 +1,100 @@
|
||||
[#]: subject: (5 more reasons to run Kubernetes in your Linux homelab)
|
||||
[#]: via: (https://opensource.com/article/21/6/kubernetes-linux-homelab)
|
||||
[#]: author: (Seth Kenlon https://opensource.com/users/seth)
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (chai001125)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-15278-1.html)
|
||||
|
||||
在你的 Linux 家庭实验室上运行 Kubernetes 的 5 个理由
|
||||
======
|
||||
|
||||
> Kubernetes 的优势不仅在于它能够做什么,还在于知道它能为你做什么。
|
||||
|
||||
![][0]
|
||||
|
||||
在 [树莓派家庭实验室上运行 Kubernetes 的 5 个理由][2] 这篇文章中,我解释了为什么推荐在家里使用 Kubernetes。其中的理由相对来说会有点随意,并且主要于关注结果。除了 Kubernetes 好用的功能之外,还有其他几个应将 Kubernetes 包含在你自己的计算机的理由。
|
||||
|
||||
(LCTT 译注:<ruby>家庭实验室<rt>Homelab</rt></ruby> 指的是安置在你家里的一个服务器或者多服务器的组合配置。在之上托管了多个服务和虚拟系统,以此来进行测试、开发,或者提供家庭功能用途。)
|
||||
|
||||
### 1、Kubernetes 是基于 Linux 而建立的
|
||||
|
||||
![T-shirt reading "Containers are Linux"][3]
|
||||
|
||||
Kubernetes 有很高的知名度。对于一些人来说,Kubernetes 是一种神秘技术,有一个不好念的名字;而对另一些人来说,Kubernetes 就好像是牧羊犬放牧羊群一样,可以帮助他们管理过多的容器;对于其它人来说,Kubernetes 是一种 <ruby>云<rt> cloud </rt></ruby> 的操作系统,是 <ruby>实效云开发<rt> effective cloud development </rt></ruby> 的一个有用的界面;对于大多数人来说,Kubernetes 可能是他们从未听说过的后端软件。正如人们所想的那样,Kubernetes 具有所有这些能力,甚至有更多的功能。
|
||||
|
||||
并非每个人都以相同的方式使用 Kubernetes,但如果你主要的工作是系统管理,你会发现 Kubernetes _只是又一个 Linux 命令_。
|
||||
|
||||
我有一件 T 恤,上面写着 “<ruby>容器就是 Linux<rt> Containers are Linux </rt></ruby>”,它的意思是显而易见的。容器技术使用 cgroup,来运行包含一个或一组应用程序的最小 Linux 操作系统镜像。当你运行容器时,实际上你就是在运行 Linux。虽然 Kubernetes 能在许多平台上使用,但 Kubernetes 管理的是 Linux 容器。当你通过终端与 Kubernetes 交互时,就像是使用 Linux:有命令、选项、参数和语法。运行 Kubernetes 的 `kubeadm` 或(在 OKD 或 OpenShift 上)运行 `oc` 命令,你会感觉到很熟悉,是因为它们的工作方式与你习惯使用的任何其他 Linux 命令一样。开始时看似陌生的东西很快就会变得自然,任何有兴趣在终端上花时间的 Linux 用户都可以在 Kubernetes 中探索到许多有趣的东西。
|
||||
|
||||
### 2、Kubernetes 很灵活
|
||||
|
||||
在过去,Kubernetes 有点死板,因为从本质上来说,它仅能支持一个 <ruby>容器运行时<rt> container runtime </rt></ruby>。这个规定非常严格,以至于今天需要一个 <ruby>硬编码的垫片<rt> hardcoded shim </rt></ruby>,才能绕过这个遗留问题。幸运的是,如今 Kubernetes 已经变得足够灵活,可以满足管理员的许多不同需求了。[Podman][5] 和 [CRI-O][6] 可用作于容器引擎,它们都可以与 [systemd][7] 集成(这是因为 Kubernetes 的底层都是 Linux)。你可以自己选择 Kubernetes 所使用的文件系统、集群大小和构造、监控工具、镜像、编程语言等等配置。甚至现在有些人说 Kubernetes 有 _太多_ 的选择了。
|
||||
|
||||
### 3、学习 Kubernetes 有助于个人发展
|
||||
|
||||
容器是一个硕果累累的事物,它们会快速地成倍增长,这就是它的设计。容器旨在扩展,它们通过生成克隆来扩展。将容器分组(称为 “<ruby>容器荚<rt>pod</rt></ruby>”),并自动管理容器荚的生命周期,这就是 Kubernetes 运用的方式。它正在改变服务器的运行方式。
|
||||
|
||||
你可能不需要无限扩展的容器集合,也不需要任何东西来帮助你管理正运行的一或两个容器。但是,如果你希望受益于处理容器荚的能力,那么 Kubernetes 正是你需要学习的工具。随着越来越多的公司和组织走向全球,拥抱 [数字化转型][8],Kubernetes 正在成为 IT 领域的必备技能。如果你想要在这个领域中发展,那么现在开始学习 Kubernetes 并熟悉它的常见问题及其解决方案,将会是一项很好的投资。
|
||||
|
||||
### 4、Kubernetes 让容器更有意义
|
||||
|
||||
你可能还记得几年前,当开源项目刚开始将它们的代码作为容器镜像分发时,对于许多人来说,容器这一概念是令人费解的:没有多少系统管理员真正理解 [容器是什么][9],或者明白容器的边界在哪里、如何进入容器,以及为什么数据不能存在于容器内。
|
||||
|
||||
现在,IT 界(包括开发人员在内)都对容器的概念都十分熟悉了。对于现代的 [CI/CD 工作流程][10] 来说,交付给容器十分有意义。不过,对于系统管理员来说,容器的优势如下:安装容器(理论上)比等待发行版更新其软件包更为容易,而且容器可以扩展。然而,在你使用 Kubernetes 之前,你很可能都不会真正地感受到这些好处。当你开始使用 Kubernetes 和相关工具管理容器之前,持续交付容器的好处和容器的扩展能力可能只是你从文章里面读过的想法。将容器集成到你管理服务器的方式中,你会突然明白 Kubernetes 中令人兴奋的是什么。
|
||||
|
||||
![Apache JMeter][11]
|
||||
|
||||
你可以试试看这个最基本的测试:只需在容器中启动你最喜欢的 Web 服务器,创建一个容器荚,然后使用来自 [Apache JMeter][12] 的流量访问你的服务器,然后观察容器响应。
|
||||
|
||||
### 5、Kubernetes 是云原生的
|
||||
|
||||
如果你主要做的是软件开发,而不是系统管理,那么 Kubernetes 也是 <ruby>网页应用程序<rt> web apps </rt></ruby>的一个很好的平台。我们现在都在使用网页应用程序,尽管大多数人只是将它们视为 “<ruby>网站<rt> website </rt></ruby>”。网络拥有庞大的用户群,因此通过浏览器提供开源的应用程序是非常有意义的。有一些很棒的开源应用程序在网络上运行,其中许多的应用程序都以容器的形式分发的,它们可以支持简单的安装和持续的用户体验。
|
||||
|
||||
### Kubernetes 的其他优势:Kubernetes 很有意思
|
||||
|
||||
你还记得你还是 Linux 新手的时候吗?对于一些人来说,那可能是几十年前的事了,而对于其他人来说,可能是不久的过去。不过,对于所有人来说,学习一项新事物会是一个有趣的挑战。如果你达到了认为 “Linux 的安装与其说是一个挑战,不如说是一个麻烦” 的程度,那么你可以尝试一下构建一个 Kubernetes 集群。它会让你回忆起你忘记的各种概念:如何修改纯文本(特别是 [YAML][13] 格式的)配置文件,如何配置网络接口和网络,如何路由流量,知道一个后端相对于另一个后端的优缺点,在 `--dry-run` 测试之后运行 `--dry-run` 测试,试探性地按回车键来确定你是否做对了。老实说,使用 Kubernetes 很有趣。
|
||||
|
||||
如果你想构建自己的基础架构,没有什么比构建你自己的 Kubernetes 集群更好的了。Kubernetes 集群将会为你打开一个全新的世界。你很快就会成为一名云架构师,学会完善你的开放云,在容器中安装令人惊叹的开源 Web 应用程序,也能为你的家人和朋友提供访问权限。
|
||||
|
||||
你自己就能得到解决方案。这真是太棒啦。
|
||||
|
||||
### 快来试试看 Kubernetes 吧
|
||||
|
||||
对 Kubernetes 的初学者来说,Kubernetes 似乎很难快速上手,因为 Kubernetes 是一个新的工具,会让你感到有点害怕,而且它还需要云服务。但是,以下有几种方法可以让你开始 Kubernetes 体验。
|
||||
|
||||
首先,安装 [Minikube][14] 或 [Minishift][14]。这两个工具都允许你在自己的计算机上运行 Kubernetes 的本地实例。虽然这种方式比不上“构建一个集群并与你的朋友共享”那么令人满意,但它是一种让你熟悉 Kubernetes 环境、命令和工具包的很好且安全的方式。
|
||||
|
||||
当你准备进一步研究 Kubernetes 后,请进一步阅读 Chris Collins 的《[使用树莓派构建 Kubernetes 集群][15]》 的文章。之后,再下载我们的免费电子书 《[在你树莓派家庭实验室上运行 Kubernetes][16]》。在不知不觉中,你会发现自己也明白了“容器就是 Linux”的含义。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/6/kubernetes-linux-homelab
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[chai001125](https://github.com/chai001125)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/seth
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/wfh_work_home_laptop_work.png?itok=VFwToeMy (Working from home at a laptop)
|
||||
[2]: https://opensource.com/article/20/8/kubernetes-raspberry-pi
|
||||
[3]: https://opensource.com/sites/default/files/uploads/containers-are-linux.jpg (T-shirt reading "Containers are Linux")
|
||||
[4]: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
[5]: http://podman.io
|
||||
[6]: http://cri-o.io
|
||||
[7]: https://opensource.com/article/21/5/systemd
|
||||
[8]: https://enterprisersproject.com/what-is-digital-transformation
|
||||
[9]: https://opensource.com/article/18/11/behind-scenes-linux-containers
|
||||
[10]: https://opensource.com/article/18/8/what-cicd
|
||||
[11]: https://opensource.com/sites/default/files/uploads/jmeter.png (Apache JMeter)
|
||||
[12]: https://jmeter.apache.org
|
||||
[13]: https://www.redhat.com/sysadmin/yaml-beginners
|
||||
[14]: https://opensource.com/article/18/10/getting-started-minikube
|
||||
[15]: https://opensource.com/article/20/6/kubernetes-raspberry-pi
|
||||
[16]: https://opensource.com/downloads/kubernetes-raspberry-pi
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202211/22/000124imal02j2yollqbqj.jpg
|
220
published/202211/20210623 Parsing config files with Lua.md
Normal file
220
published/202211/20210623 Parsing config files with Lua.md
Normal file
@ -0,0 +1,220 @@
|
||||
[#]: subject: (Parsing config files with Lua)
|
||||
[#]: via: (https://opensource.com/article/21/6/parsing-config-files-lua)
|
||||
[#]: author: (Seth Kenlon https://opensource.com/users/seth)
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (hadisi1993)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-15235-1.html)
|
||||
|
||||
使用 Lua 解析配置文件
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202211/10/084609uq6vvp1vjzqzpc9k.jpg)
|
||||
|
||||
> 使用 Lua 配置持久化应用设置。
|
||||
|
||||
不是所有的应用都需要配置文件;对很多应用来说,在启动时变得焕然一新对它们更有利。例如,简单的工具就极少需要偏好项和设置在使用过程中保持稳定不变。然而,当你编写一个复杂的应用程序时,如果能让用户设置与应用的交互方式,以及应用与系统交互的方式会很不错。这就是配置文件用来做的事情。本文将讨论一些利用 Lua 进行持久化配置的方法。
|
||||
|
||||
### 选择一种格式
|
||||
|
||||
关于配置文件很重要的两点是一致性和可预见性。你不会希望为了保存用户偏好项,将信息转储到文件中,然后再花几天去编码实现“逆向工程”,处理最后出现在文件里的随机信息。
|
||||
|
||||
这里用一些常用的 [配置文件格式][2]。Lua 有一些库可以处理大多数常用的配置格式;在本文中,我会采用 INI 格式。
|
||||
|
||||
### 安装库
|
||||
|
||||
Lua 库的核心仓库是 [Luarocks.org][3]。你可以在这个网站搜索库,或者你可以安装并使用 `luarocks` 终端命令。
|
||||
|
||||
Linux 环境中,你可以从发行版的软件仓库中下载它,例如:
|
||||
|
||||
```
|
||||
$ sudo dnf install luarocks
|
||||
```
|
||||
|
||||
在 macOS 上,请使用 [MacPorts][4] 或者 [Homebrew][5]。在 Windows 上,请使用 [Chocolatey][6]。
|
||||
|
||||
`luarocks` 安装后,你可以使用 `search` 子命令来搜索一个恰当的库。如果你不知道库的名字,可以通过关键词来搜索这个库,例如 `ini`、xml` 或者 `json`,这取决于你想要用这个库做什么。打个比方,你可以搜索 `inifile`, 这个库被我用来解析 INI 格式的文本文件。
|
||||
|
||||
```
|
||||
$ luarocks search inifile
|
||||
Search results:
|
||||
inifile
|
||||
1.0-2 (rockspec) - https://luarocks.org
|
||||
1.0-2 (src) - https://luarocks.org
|
||||
1.0-1 (rockspec) - https://luarocks.org
|
||||
[...]
|
||||
```
|
||||
|
||||
一个开发者容易犯的错误是在系统上安装了这个库却忘了把它和应用打包。这会给没有安装这个库的用户带来麻烦。为了防止这个问题发生,可以使用 `--tree` 选项将它安装在项目的本地文件夹中。如果你没有这个项目文件夹,那就先创建这个文件夹再安装库:
|
||||
|
||||
```
|
||||
$ mkdir demo
|
||||
$ cd demo
|
||||
$ luarocks install --tree=local inifile
|
||||
```
|
||||
|
||||
`--tree` 选项指示 `luarocks` 创建一个新文件夹并在其中安装你的库,例如这个例子中的 `local` 文件夹。 使用这个简单的技巧,你可以将所有你项目要使用的依赖项直接安装到项目文件夹中。
|
||||
|
||||
### 配置代码
|
||||
|
||||
首先,在一个名 `myconfig.ini` 的文件中创建一些 INI 数据。
|
||||
|
||||
```
|
||||
[example]
|
||||
name=Tux
|
||||
species=penguin
|
||||
enabled=false
|
||||
|
||||
[demo]
|
||||
name=Beastie
|
||||
species=demon
|
||||
enabled=false
|
||||
```
|
||||
|
||||
将这个文件保存到你的主目录下,命名为 `myconfig.ini`, _不要_ 存到项目文件夹下。你通常会希望配置文件独立于你的文件存在,这样当用户卸载你的应用时,使用应用时产生的数据可以保存在系统中。有些用户会删除不重要的配置文件,但大多数不会。最终,如果他们要重装这个应用,还会保留着所有的用户偏好项。
|
||||
|
||||
配置文件的位置以技术来说并不重要,但每一个操作系统都有存储它们的特定或者默认的路径。在 Linux 中,这个路径由 [Freedesktop 规范][7] 指定。它规定配置文件被保存在一个名为 `~/.config` 的隐藏文件夹中。为了操作时更加清晰明确,可以在主目录下存储配置文件,以便于使用和寻找。
|
||||
|
||||
创建第二个文件,命名为 `main.lua`,并在你喜欢的文本编辑器中打开它。
|
||||
|
||||
首先,你必须告诉 Lua 你将想要使用的附加库放置在哪里。`package.path` 变量决定了 Lua 到哪里去寻找这些库。你可以从终端中查看 Lua 默认的包地址:
|
||||
|
||||
```
|
||||
$ Lua
|
||||
> print(package.path)
|
||||
./?.lua;/usr/share/lua/5.3/?.lua;/usr/share/lua/5.3/?/init.lua;/usr/lib64/lua/5.3/?.lua;/usr/lib64/lua/5.3/?/init.lua
|
||||
```
|
||||
|
||||
在你的 Lua 代码中,将你本地库的路径添加到 `package.path` 中:
|
||||
|
||||
```
|
||||
package.path = package.path .. ';local/share/lua/5.3/?.lua
|
||||
```
|
||||
|
||||
### 使用 Lua 解析 INI 文件
|
||||
|
||||
当包的位置确定以后,下一件事就是引入 `inifile` 库并处理一些操作系统逻辑。即使这是一个很简单的应用,代码也需要从操作系统获取到用户主目录的路径,并建立在必要时将文件系统路径返回给操作系统的通信方式。
|
||||
|
||||
```
|
||||
package.path = package.path .. ';local/share/lua/5.3/?.lua
|
||||
inifile = require('inifile')
|
||||
|
||||
-- find home directory
|
||||
home = os.getenv('HOME')
|
||||
|
||||
-- detect path separator
|
||||
-- returns '/' for Linux and Mac
|
||||
-- and '\' for Windows
|
||||
d = package.config:sub(1,1)
|
||||
```
|
||||
|
||||
现在你可使用 `inifile` 来从配置文件解析数据到 Lua 表中。一旦这些数据被导入进表中,你可以像查询其他的 Lua 表一样查询它。
|
||||
|
||||
```
|
||||
-- parse the INI file and
|
||||
-- put values into a table called conf
|
||||
conf = inifile.parse(home .. d .. 'myconfig.ini')
|
||||
|
||||
-- print the data for review
|
||||
print(conf['example']['name'])
|
||||
print(conf['example']['species'])
|
||||
print(conf['example']['enabled'])
|
||||
```
|
||||
|
||||
在终端中运行代码可以看见结果:
|
||||
|
||||
```
|
||||
$ lua ./main.lua
|
||||
Tux
|
||||
penguin
|
||||
false
|
||||
```
|
||||
|
||||
这看起来是正确的。试试在 `demo` 块中执行同样的操作。
|
||||
|
||||
### 使用 INI 格式存储数据
|
||||
|
||||
不是所有用来解析的库都会读写数据(通常被称为 _编码 和 _解码_),但是 `inifile` 会这样做。这意味着你可以使用它对配置文件进行修改。
|
||||
|
||||
为了改变配置文件中的值,你可以对被解析的表中的变量进行设置,然后把表重写回配置文件中。
|
||||
|
||||
```
|
||||
-- set enabled to true
|
||||
conf['example']['enabled'] = true
|
||||
conf['demo']['enabled'] = true
|
||||
|
||||
-- save the change
|
||||
inifile.save(home .. d .. 'myconfig.ini', conf)
|
||||
```
|
||||
|
||||
现在再来看看配置文件:
|
||||
|
||||
```
|
||||
$ cat ~/myconfig.ini
|
||||
[example]
|
||||
name=Tux
|
||||
species=penguin
|
||||
enabled=true
|
||||
|
||||
[demo]
|
||||
name=Beastie
|
||||
species=demon
|
||||
enabled=true
|
||||
```
|
||||
|
||||
### 配置文件
|
||||
|
||||
按照用户的设想来存储数据对程序来说是至关重要的。幸运的是,这对工程师来说是一个很常规的任务,大多数工作可能早已被完成了。只要找到一个好用的库完成开放格式下编码和解码,你就能为用户提供一致且持续的体验。
|
||||
|
||||
以下是完整的演示代码,可供参考。
|
||||
|
||||
```
|
||||
package.path = package.path .. ';local/share/lua/5.3/?.lua'
|
||||
inifile = require('inifile')
|
||||
|
||||
-- find home directory
|
||||
home = os.getenv('HOME')
|
||||
|
||||
-- detect path separator
|
||||
-- returns '/' for Linux and Mac
|
||||
-- and '\' for Windows
|
||||
d = package.config:sub(1,1)
|
||||
|
||||
-- parse the INI file and
|
||||
-- put values into a table called conf
|
||||
conf = inifile.parse(home .. d .. 'myconfig.ini')
|
||||
|
||||
-- print the data for review
|
||||
print(conf['example']['name'])
|
||||
print(conf['example']['species'])
|
||||
print(conf['example']['enabled'])
|
||||
|
||||
-- enable Tux
|
||||
conf['example']['enabled'] = true
|
||||
|
||||
-- save the change
|
||||
inifile.save(home .. d .. 'myconfig.ini', conf)
|
||||
```
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/6/parsing-config-files-lua
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[hadisi1993](https://github.com/hadisi1993)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/seth
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/OSDC_women_computing_2.png?itok=JPlR5aCA (坐在电脑前的女人)
|
||||
[2]: https://opensource.com/article/21/6/config-files-and-their-formats
|
||||
[3]: https://opensource.com/article/19/11/getting-started-luarocks
|
||||
[4]: https://opensource.com/article/20/11/macports
|
||||
[5]: https://opensource.com/article/20/6/homebrew-mac
|
||||
[6]: https://opensource.com/article/20/3/chocolatey
|
||||
[7]: https://www.freedesktop.org/wiki/Specifications
|
||||
[8]: http://www.opengroup.org/onlinepubs/009695399/functions/getenv.html
|
@ -0,0 +1,190 @@
|
||||
[#]: subject: "Installing Packages From External Repositories in Ubuntu [Explained]"
|
||||
[#]: via: "https://itsfoss.com/adding-external-repositories-ubuntu/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "nophDog"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15299-1.html"
|
||||
|
||||
详解在 Ubuntu 从外部存储库安装软件包
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
你大概知道怎么在 Ubuntu 中使用 `apt` 命令安装软件包。那些软件包都是来自 Ubuntu 的官方存储库。
|
||||
|
||||
那第三方或者外部存储库呢?不,我这里并不是要讲 PPA。
|
||||
|
||||
早晚你会碰到那种至少四行的安装说明:你需要安装名为 `apt-transport-https` 的包、操作一下 GPG 和 <ruby>源列表<rt>source list</rt></ruby> 之后,你才能正常安装软件包。
|
||||
|
||||
没有什么印象的话,那我分享一个 [在 Ubuntu 上安装最新版本的 Yarn][1] 的例子:
|
||||
|
||||
```
|
||||
sudo apt install apt-transport-https curl
|
||||
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
|
||||
sudo sh -c 'echo "deb https://dl.yarnpkg.com/debian/ stable main" >> /etc/apt/sources.list.d/yarn.list'
|
||||
sudo apt update && sudo apt install yarn
|
||||
```
|
||||
|
||||
当你需要直接从开发者那里安装编程工具的时候,大概率会碰到这种安装方式。
|
||||
|
||||
许多人只是按照说明进行操作,并不会去思考其中的原理。这也没什么不对,但了解该过程实际上可以提升你在这方面的知识,而且有助于之后排除故障。
|
||||
|
||||
我来解释一下这些代码背后的逻辑。
|
||||
|
||||
### 理解从外部存储库安装的过程
|
||||
|
||||
在你继续往下阅读之前,我强烈建议你先看看下面这两篇文章,方便理解后续的概念:
|
||||
|
||||
* [什么是 Ubuntu 中的存储库][2]
|
||||
* [什么是 Ubuntu 中 PPA][3]
|
||||
|
||||
为了让你有点印象,这里有一张软件包存储库和 [Linux 中的包管理器][4] 的图片。
|
||||
|
||||
![Illustration of repository and package manager][5]
|
||||
|
||||
整件事情其实就是在系统中添加一个新的外部存储库。这样,你就可以从这个新存储库下载并安装可用的软件包。如果这个存储库提供了包版本的更新,你可以在更新系统的同时更新这些软件包(`apt update && apt upgrade`)。
|
||||
|
||||
那么,这是什么工作原理呢?让我们一条一条地过一遍。
|
||||
|
||||
#### 第 1 部分:为 apt 获取 HTTPS 支持
|
||||
|
||||
第一行是这样的:
|
||||
|
||||
```
|
||||
sudo apt install apt-transport-https curl
|
||||
```
|
||||
|
||||
`curl` 是一个 [Linux 终端下载文件的工具][6]。这里主要的部分是安装 `apt-transport-https`,但事实上已经不需要了。
|
||||
|
||||
明白了吗?这个 `apt-transport-https` 包让你的系统通过 HTTPS 协议安全访问存储库。按照设计,Ubuntu 的存储库使用 http 而不是 https 协议。
|
||||
|
||||
看看下面的截图。 https 这张图是我已经添加到系统中的外部存储库。Ubuntu 的存储库和 PPA 使用 http 协议。
|
||||
|
||||
![][7]
|
||||
|
||||
在旧版本的 `apt` 包管理器中,不支持 https 协议。`apt-transport-https` 包为 `apt` 添加了 https 支持。要新增一个使用 https 的存储库,首先就得先安装此包。
|
||||
|
||||
我之前不是说不需要安装这个包了吗?是的,因为较新版本的 `apt`(高于 1.5)已经支持 https,所以你不需要再安装 `apt-transport-https`。
|
||||
|
||||
但是你依然看到我在说明中提到了这个包。这更多是出于遗留原因,而且可能还有很旧的发行版在使用旧版本的 `apt` 包。
|
||||
|
||||
现在,你可能想知道既然 https 是安全协议,那为什么 Ubuntu 的存储库还要使用 http 而不是 https。这难道没有安全风险吗?接着往下看你就知道答案了。
|
||||
|
||||
#### 第 2 部分:添加远程存储库的 GPG 密钥
|
||||
|
||||
Linux 存储库内置了基于 GPG 密钥的安全机制。每个存储库都将其 GPG 公钥添加到你的系统信任密钥中。来自存储库的包由这个 GPG 密钥“<ruby>签名<rt>signed</rt></ruby>”,并且通过这份存储的公钥,系统能够验证软件包正是来自这个存储库。
|
||||
|
||||
如果 [密钥之间不匹配,你的系统会发出提醒][8],而不会继续从该存储库安装或者更新软件包。
|
||||
|
||||
到目前为止,一切都很顺利。下一步是将外部存储库的 GPG 公钥添加到你的 Linux 系统,以便它能接收来自该存储库的软件包。
|
||||
|
||||
```
|
||||
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
|
||||
```
|
||||
|
||||
在上面的命令中,你使用 `curl` 从指定的 URL 下载 GPG 密钥。选项 `-sS` 能够让你不看多余的输出(静默模式),但会显示错误(如果有的话)。最后一个 `-` 告诉 `apt-key` 使用<ruby>标准输入<rt>stdin</rt></ruby>而不是文件(在本例中是 `curl` 命令的输出)。
|
||||
|
||||
`apt-key add` 命令已经将下载的密钥添加到系统中。
|
||||
|
||||
你可以通过 `apt-key list` 命令查看系统中各种存储库添加的 GPG 密钥。
|
||||
|
||||
![List GPG keys][9]
|
||||
|
||||
这是将 GPG 密钥添加到系统的一种方法。你会看到一些其它的命令,看起来略有不同,但效果一样,都是将存储库的公钥添加到你的系统里面。
|
||||
|
||||
```
|
||||
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
|
||||
```
|
||||
|
||||
你会注意到 `apt-key` 已被弃用的警告。在 Ubuntu 22.04 之前,你还可以使用 `apt-key` 命令,但它最终会被删除。现在不需要杞人忧天。
|
||||
|
||||
#### 第 3 部分:将外部存储库添加到源列表
|
||||
|
||||
下个命令是在系统的源列表中添加一个新条目。这样,你的系统就会知道它得检查该存储库中的包和更新。
|
||||
|
||||
```
|
||||
sudo sh -c 'echo "deb https://dl.yarnpkg.com/debian/ stable main" >> /etc/apt/sources.list.d/yarn.list'
|
||||
```
|
||||
|
||||
有一个文件 `/etc/apt/sources.list` 包含 Ubuntu 存储库的详细信息。最好不要随便动这个文件。所有新增的存储库都应放在 `/etc/apt/sources.list.d` 目录中相应的文件里(约定以 `.list` 结尾)。
|
||||
|
||||
![External repository should have their own sources list file in the /etc/apt/sources.list.d directory][10]
|
||||
|
||||
这使得包管理变得更容易。如果你要从系统中删除一个存储库,只需删除相应的源文件即可。无需修改主 `sources.list` 文件。
|
||||
|
||||
让我们再仔细地看一下这行命令。
|
||||
|
||||
```
|
||||
sudo sh -c 'echo "deb https://dl.yarnpkg.com/debian/ stable main" >> /etc/apt/sources.list.d/yarn.list'
|
||||
```
|
||||
|
||||
使用 `sh` 可以在一个新的 shell 进程中运行命令,而不是 [子 shell][11]。 `-c` 选项告诉 `sh` 命令从参数而不是标准输入读取命令。然后它运行 `echo` 命令,也就是把 `deb https://dl.yarnpkg.com/debian/ stable main` 这一行添加到 `/etc/apt/sources.list.d/yarn.list` 文件(会创建该文件)。
|
||||
|
||||
现在,你可以通过各种方法在指定目录中创建 `.list` 文件并在其中添加包含存储库详细信息的数据行。你也可以像这样使用:
|
||||
|
||||
```
|
||||
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
|
||||
```
|
||||
|
||||
明白了吧?
|
||||
|
||||
#### 第 4 部分:从新添加的存储库安装应用程序
|
||||
|
||||
到目前为止,你已经将存储库的 GPG 密钥和存储库的 URL 添加到系统中。
|
||||
|
||||
但是系统仍然不晓得这个新存储库中有哪些可用的包。这就是为什么你需要先使用下面这个命令更新包元数据的本地缓存:
|
||||
|
||||
```
|
||||
sudo apt update
|
||||
```
|
||||
|
||||
这时你的系统就已经知道新增存储库中可用软件包的信息,现在可以试试安装软件包:
|
||||
|
||||
```
|
||||
sudo apt install yarn
|
||||
```
|
||||
|
||||
为了节省时间,你可以在 [同一行挨着运行这两个命令][12]e。
|
||||
|
||||
```
|
||||
sudo apt update && sudo apt install yarn
|
||||
```
|
||||
|
||||
`&&` 可以确保第二个命令只会在前一个命令没有任何报错的前提下运行。
|
||||
|
||||
整个流程就是这样。
|
||||
|
||||
#### 有没有豁然开朗呢,还是一脸懵逼?
|
||||
|
||||
我已经解释了在 Ubuntu 中使用外部存储库背后的逻辑。希望你现在能更好地理解它,当然可能还有很多细节会让你困惑。
|
||||
|
||||
如果你还不清楚或者还有其他问题,可以联系我。如果你发现了技术上的纰漏,记得在评论区告诉我。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/adding-external-repositories-ubuntu/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[nophDog](https://github.com/nophDog)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/install-yarn-ubuntu/
|
||||
[2]: https://itsfoss.com/ubuntu-repositories/
|
||||
[3]: https://itsfoss.com/ppa-guide/#comments
|
||||
[4]: https://itsfoss.com/package-manager/
|
||||
[5]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2020/10/linux-package-manager-explanation.png?resize=800%2C450&ssl=1
|
||||
[6]: https://itsfoss.com/download-files-from-linux-terminal/
|
||||
[7]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/08/apt-update-http-https.png?resize=800%2C527&ssl=1
|
||||
[8]: https://itsfoss.com/solve-gpg-error-signatures-verified-ubuntu/
|
||||
[9]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2021/07/list-apt-key-gpg-ubuntu.png?resize=800%2C547&ssl=1
|
||||
[10]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2021/08/sources-list-ubuntu.png?resize=800%2C313&ssl=1
|
||||
[11]: https://linuxhandbook.com/subshell/
|
||||
[12]: https://itsfoss.com/run-multiple-commands-linux/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202211/29/154339id0xb2exw0c8y222.jpg
|
@ -0,0 +1,77 @@
|
||||
[#]: subject: "My top 5 tips for setting up Terraform"
|
||||
[#]: via: "https://opensource.com/article/21/8/terraform-tips"
|
||||
[#]: author: "Ayush Sharma https://opensource.com/users/ayushsharma"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "cool-summer-021"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15206-1.html"
|
||||
|
||||
关于配置 Terraform 的五条建议
|
||||
======
|
||||
|
||||
> 本文介绍我使用 Terraform 五年之后吸取到的经验。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202211/02/220728ngg0kzjg0rldu0l7.jpg)
|
||||
|
||||
使用 Terraform 五年的经历让我吸取到一些重要经验。无论团队大小、项目性质,有五条要点对于配置合乎逻辑且可用的 Terraform 平台至关重要。
|
||||
|
||||
### 1、了解你的目标受众
|
||||
|
||||
这一点似乎显而易见,但我也见过一些在这方面犯错的案例。当组织和规划 Terraform 的相关代码时,无论是将目录结构标准化还是确定命名规范,考虑目标受众是非常重要的。例如:你的团队是否会使用这些 Terraform 脚本和模块?你是否会向其他团队交接工作?你的团队是否会有新成员加入?你是否正在独自进行项目开发?你是否会半年或一年后仍然使用这些配置,还是会将它安排给别人?
|
||||
|
||||
这类问题会影响某些决策。理想情况下,无论如何都应该有 <ruby>[远程状态][2]<rt>Remote State</rt></ruby> 和 <ruby>[状态锁定][3]<rt>State Locking</rt></ruby> 两种状态。远程状态确保你的笔记本电脑不是你的 Terraform 唯一运行的机器,状态锁定确保同一时刻只有一个人对基础设施进行修改操作。
|
||||
|
||||
命名规范应该对项目的最终拥有者有意义,而不是只对开发团队有意义。如果项目会转交给其他团队,应该确保他们对命名规范有发言权。如果代码由非技术的利益相关者或内部安全/ GCR 团队负责审查,应该确保他们会检查命名规范。另外,对于资源名称,为了让代码审查人员更仔细地进行检查,你应该使用资源标签,把有关的数据分类/隐私需求(高、中、低)标示出来。
|
||||
|
||||
### 2、重用,重用,重用
|
||||
|
||||
[Terraform 注册表][4] 为大多数普通用例提供了现成模块类库。我已经使用过 VPC 模块和安全模块中的大量功能,这些功能只需要提供相关的参数就能使用。使用不同的参数,简单调用这些模块对于处理大部分用例已经足够了。尽可能多地重用这些公共模块,可以避免大量且重复的编码、测试、检查、修复、重构等操作。
|
||||
|
||||
我也发现,基于使用或变更的频率划分模块和资源大有好处。例如,只使用一次的基础设施手脚架,例如 VPC 相关设置、安全模块、路由表、VPC 端点等,可以放在一起。但是像私有托管域条目、自动伸缩模块、目标模块、负载均衡器等,每次部署时都会变化,所以把这些与一次性的基础设施手脚架分离开来,会令代码检查更方便,调试更快速。
|
||||
|
||||
### 3、要明确,而非隐含
|
||||
|
||||
Terraform 代码中有一些常见的模式,它会导致设计中出现错误的假设。团队可以假设用来写代码的 Terraform 版本永远保持不变,外部模块不会变化,或它们使用的提供者不会变更。当这些外部依赖不可避免地发生变化时,就会导致一些难以发现的问题。
|
||||
|
||||
无论何处(包括主要的 Terraform 组、提供者组、功能模块组)都要确保定义是明确的。事先定义版本,可以确保依赖库是固定的,因此你可以在讨论、审查、测试后,明明白白地更新依赖关系。
|
||||
|
||||
### 4、自动化每一处,包括笔记本电脑、共享虚拟机、CI/CD。
|
||||
|
||||
在部署的各个阶段使用自动化方法,可以避免可能发生的问题。
|
||||
|
||||
在你提交代码前,使用 [Git 预提交钩子][5] 运行 `terraform fmt` 和 `terraform validate`。预提交钩子的作用是确保你的代码满足最低程度的格式和语法正确。把这个预提交文件检入到仓库,对你的团队成员都有好处。项目的第一步就进行质量控制相关的操作,它虽然表面上是小事一桩,但也很重要,能为项目节省大量时间。
|
||||
|
||||
一切现代化部署工具都有 CI 流程。当你向原始仓库推送代码时,可以使用它来运行 SAST 和单元测试工具。我写过一篇 [博客][6],是关于使用 Checkov 测试 Terraform 代码的安全性和合规性,并为组织特定的惯例创建自定义检查。把这些单元测试工具加入到你的 CI 管道,可以改进代码质量和健壮性。
|
||||
|
||||
### 5、写个好的 README.md 文件
|
||||
|
||||
我们都认为 Terraform 代码是自文档化的。的确如此,但是只有当未来的团队已经了解你的公司的命名规范、开发指南、机密通信、圈内笑话,以及你的仓库内除有效的 Terraform 代码之外其他所有东西,才会如此。维护 `README.md` 文件是个好习惯,它能节省大量时间,而且团队成员要为自己向 README 文件提交的任何内容负责,这样也就确保团队成员的忠诚度。
|
||||
|
||||
你的 README 文件至少应该包含在你的工作环境下(Linux、 Windows、Mac 等等)初始化 Terraform 环境的步骤,包括 Terraform 的版本信息。它应当确定需要的依赖库(Checkov、 TerraGrunt 及其他依赖)和其版本,以及团队使用的方便的 Linux 别名(例如有人喜欢将 `terraform fmt` 简写为 `tff`)。最重要的是,需要确定分支和 PR 审核策略和流程、命名规范和资源标签的相关标准。
|
||||
|
||||
README 文件需要通过这样的检验:如果团队有新成员加入,能否告诉他们做什么以及如何正确地完成工作?如果不能,在后续的几个月内,你将面对的是无休止的标准和流程讨论会议。
|
||||
|
||||
### 结束语
|
||||
|
||||
这些就是我使用 Terraform 多年后,认为需要传授给大家的五条有用的建议。也欢迎你分享自己的最佳实践。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/8/terraform-tips
|
||||
|
||||
作者:[Ayush Sharma][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[cool-summer-021](https://github.com/cool-summer-021)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/ayushsharma
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/puzzle_computer_solve_fix_tool.png?itok=U0pH1uwj (Puzzle pieces coming together to form a computer screen)
|
||||
[2]: https://www.terraform.io/docs/language/state/index.html
|
||||
[3]: https://www.terraform.io/docs/language/state/locking.html
|
||||
[4]: https://registry.terraform.io/
|
||||
[5]: https://opensource.com/life/16/8/how-construct-your-own-git-server-part-6
|
||||
[6]: https://notes.ayushsharma.in/2021/07/cloud-infrastructure-sast-terraform-checkov
|
@ -0,0 +1,154 @@
|
||||
[#]: subject: "Diagnose connectivity issues with the Linux ping command"
|
||||
[#]: via: "https://opensource.com/article/21/10/linux-ping-command"
|
||||
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "chai001125"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15271-1.html"
|
||||
|
||||
使用 Linux 的 ping 命令诊断网络连接问题
|
||||
======
|
||||
|
||||
> 在本文中,我们将讨论网络连接最基本的诊断工具之一:`ping` 命令。
|
||||
|
||||
![][0]
|
||||
|
||||
如今,联网计算机变得十分普遍,以至于我们大多数人都理所当然地认为,房间一侧的计算机可以连接上房间另一侧的计算机,更不用说能连接上世界的另一端的计算机了。如此,网络使互联网、云、文件共享、媒体流、远程管理、打印等服务成为可能。但是当网络出现问题时,有时很难诊断到底是其中哪一环节出现了问题。下面,我们就来介绍:网络连接最基本的诊断工具之一—— `ping` 命令。
|
||||
|
||||
### 基本的 ping 命令
|
||||
|
||||
当你无法访问本地网络上的计算机或互联网上的服务器时,你可以 `ping` 它的 IP 地址。`ping` 将 <ruby>互联网控制报文协议<rt> Internet Control Message Protocol </rt></ruby>(ICMP)数据包发送到目标 IP 地址。当我们要对网路连接状况进行判断时,ICMP 是个非常有用的协议,本质上 ICMP 是一个响应和应答信号。
|
||||
|
||||
让我们由近及远地进行故障排除。请先 `ping` 你自己的计算机,以确保你的计算机正在运行 <ruby>网络栈<rt> networking stack </rt></ruby>。你正在操作的计算机称为 <ruby> 主机 <rt> localhost </rt></ruby>,本地回环地址是:`127.0.0.1`。
|
||||
|
||||
`ping` 命令能用主机的 <ruby>主机名<rt> hostname </rt></ruby>、IP 地址(即 `127.0.0.1`)或者仅仅用简写 `0` 来表示 “主机”。
|
||||
|
||||
你可以使用 `-c` 选项,来控制发送数据包的 <ruby>次数<rt> count </rt></ruby>。
|
||||
|
||||
```
|
||||
$ ping 0 -c 1
|
||||
PING 0 (127.0.0.1) 56(84) bytes of data.
|
||||
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.069 ms
|
||||
|
||||
--- 0 ping statistics ---
|
||||
1 packets transmitted, 1 received, 0% packet loss, time 0ms
|
||||
rtt min/avg/max/mdev = 0.069/0.069/0.069/0.000 ms
|
||||
```
|
||||
|
||||
在你确认本地网络栈已启动并运行后,接下来,你可以 `ping` 你的路由器的 IP 地址。路由器的 IP 地址通常以 `192.168` 或 `10` 开头。实际的 IP 地址取决于路由器的配置。
|
||||
|
||||
当你没有指定要发送多少次请求时,你可以用 `Ctrl+C`,来终止 `ping` 的运行。
|
||||
|
||||
```
|
||||
$ ping 192.168.0.1
|
||||
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
|
||||
From 192.168.0.100: icmp_seq=2 Redirect Host(New nexthop: 192.168.0.1)
|
||||
From 192.168.0.100: icmp_seq=3 Redirect Host(New nexthop: 192.168.0.1)
|
||||
From 192.168.0.100: icmp_seq=4 Redirect Host(New nexthop: 192.168.0.1)
|
||||
From 192.168.0.100: icmp_seq=5 Redirect Host(New nexthop: 192.168.0.1)
|
||||
^C
|
||||
```
|
||||
|
||||
如果你能 `ping` 通路由器,则表示你的有线或无线连接能正常工作。
|
||||
|
||||
对于你的局域网上的其他主机呢?你可以 `ping` 各种设备,但是并非所有设备都能保证响应,因为一些设备会丢弃 ICMP 数据包,但许多设备会做出响应。例如,我可以 `ping` 我的打印机:
|
||||
|
||||
```
|
||||
$ ping 192.168.0.4
|
||||
```
|
||||
|
||||
### ping 路由器以外的其他服务器
|
||||
|
||||
在确定你自己的网络内部都能连通以后,你还可以 `ping` 通到路由器以外的其他服务器。同样地,并非所有服务器都能接收 ICMP 数据包,更不用说响应 ICMP 数据包了。然而,也有一些服务器可以接收并响应 ICMP 数据包,而在互联网中的一个重要服务器是 <ruby>域名服务器<rt> nameserver </rt></ruby>。
|
||||
|
||||
谷歌的 <ruby>域名解析服务器<rt> DNS server </rt></ruby>的 IP 地址很容易记住,而且它会响应 `ping` 请求:
|
||||
|
||||
```
|
||||
$ ping -c 2 8.8.8.8
|
||||
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
|
||||
64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=53.3 ms
|
||||
64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=53.5 ms
|
||||
|
||||
--- 8.8.8.8 ping statistics ---
|
||||
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
|
||||
rtt min/avg/max/mdev = 53.304/53.424/53.544/0.120 ms
|
||||
```
|
||||
|
||||
当你连不上一个网站时,你可以查询全球 DNS 网络,以找出其主机服务器的地址,然后 `ping` 该服务器。这至少可以告诉你,网站不通的原因是主机已关闭,或者只是 Web 服务器问题。
|
||||
|
||||
例如,假设你尝试访问 `example.com`,但是发现失败了。首先,使用 `host` 命令找到 `example.com` 的 IP 地址:
|
||||
|
||||
```
|
||||
$ host example.com
|
||||
example.com has address 93.184.216.34
|
||||
example.com has IPv6 address 2606:2800:220:1:248:1893:25c8:1946
|
||||
example.com mail is handled by 0
|
||||
```
|
||||
|
||||
然后,`ping` 该网站的的 IP 地址:
|
||||
|
||||
```
|
||||
$ ping 93.184.216.34 -c 1
|
||||
```
|
||||
|
||||
### 使用 IPv6
|
||||
|
||||
`ping` 不仅可以使用 IPv4,还能使用 IPv6。可以通过指定 `-4` 或 `-6` 选项,来只使用 IPv4 或 IPv6。
|
||||
|
||||
### 设置数据包大小
|
||||
|
||||
你可以使用 `-s` 选项,来更改要发送的 ICMP 数据包的 <ruby>大小<rt> size </rt></ruby>。默认的数据大小为 56 字节,加上 8 字节包头,总共得到 64 字节的 ICMP 数据包。以下的示例将发送的 ICMP 数据包大小修改为 35+8=43 个字节:
|
||||
|
||||
```
|
||||
$ ping -s 35 -c 5 8.8.8.8
|
||||
```
|
||||
|
||||
你可以使用 `-D` 选项,使得在终端中的每个 `ping` 回复之前,先打印出当前的时间戳。该时间戳为 UNIX 时间戳,加上微秒:
|
||||
|
||||
```
|
||||
$ ping -D 8.8.8.8
|
||||
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
|
||||
[1634013430.297468] 64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=53.3 ms
|
||||
[1634013431.298738] 64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=53.1 ms
|
||||
```
|
||||
|
||||
### 设置时间间隔/长短
|
||||
|
||||
你可以使用 `-i` 选项,来更改两次 `ping` 请求之间的 <ruby>时间间隔<rt> interval </rt></ruby>。以下的示例将 `ping` 间隔更改为 2 秒:
|
||||
|
||||
```
|
||||
$ ping -i 2
|
||||
```
|
||||
|
||||
你也可以使用 `-w` 选项,来在一段时间后终止 `ping`,单位为秒。
|
||||
|
||||
```
|
||||
$ ping -w 6
|
||||
```
|
||||
|
||||
### ping 的变体
|
||||
|
||||
`ping` 有很多变体。例如,`iputils` 包提供了 `ping` 命令;[Busybox][2] 也有`ping` 命令;BSD 也有;甚至还有一个图形界面的 `ping`:`gping`,它可用于 Linux、macOS 和 Windows。你可以在 [GitHub][3] 上找到更多有关 `gping` 的信息。
|
||||
|
||||
### 一起来学习吧
|
||||
|
||||
`ping` 命令很简单,但它可以帮你诊断网络连接问题。下次再遇到网络连接问题时,让 `ping` 命令成为你解决问题的第一个工具吧。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/10/linux-ping-command
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[chai001125](https://github.com/chai001125)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/seth
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/world_remote_teams.png?itok=Wk1yBFv6 (World locations with red dots with a sun burst background)
|
||||
[2]: https://opensource.com/article/21/8/what-busybox
|
||||
[3]: https://github.com/orf/gping
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202211/20/094045mhhkqhepke4qebks.jpg
|
@ -0,0 +1,486 @@
|
||||
[#]: subject: "For the Love of Ubuntu: Here are the Mascots of All Ubuntu Releases"
|
||||
[#]: via: "https://itsfoss.com/all-Ubuntu-mascots/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "chai001125"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15240-1.html"
|
||||
|
||||
Ubuntu 所有版本的吉祥物
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202211/11/130502q6500yvm0znvktz9.jpg)
|
||||
|
||||
> 在这篇文章中,我们会介绍迄今为止所有 Ubuntu 发行版本的吉祥物。
|
||||
|
||||
你可能已经注意到了:每个 Ubuntu 版本都会有一个版本名称和代号。代号由两个单词组成,这两个单词有相同的首字母,第一个单词是形容词,另一个单词通常是一个濒危的物种名称。
|
||||
|
||||
对应于其代号,这些 Ubuntu 版本也有一个吉祥物。例如,Ubuntu 22.04 的代号为 “Jammy Jellyfish”,因此 Ubuntu 22.04 的桌面壁纸上有 **吉祥物:水母** 的图像。
|
||||
|
||||
但是实际上,这些“吉祥物”并不总是 Ubuntu 版本的一部分,因为吉祥物在早期的 Ubuntu 版本中是没有的。
|
||||
|
||||
有史以来第一个 Ubuntu 版本是在 2004 年 10 月发布的 4.10 版(LCTT 译注:Ubuntu 的版本号是由年份和月份的组合来表示的。)但是,直到 Ubuntu 8.04 LTS “Hardy Heron” 版本,你才会看到相关的吉祥物。
|
||||
|
||||
在我之前写的 [另一篇文章][1] 中,我整理了所有 Ubuntu 版本的默认壁纸。在本文中,你将了解到所有 Ubuntu 版本的吉祥物。
|
||||
|
||||
现在,就让我们按时间倒序,一起进入 Ubuntu 的吉祥物之旅吧。
|
||||
|
||||
(LCTT 校注:本文原文发表时,Ubuntu 22.10 尚未发布,它的代号是 “Kinetic Kudu”,吉祥物是“捻角羚”。)
|
||||
|
||||
(LCTT 校注:由于 Ubuntu 系列的代号和吉祥物选择的都是比较少见的动物和晦涩的描述,因此尽管译者和校对虽然尽力了,但是应该还有谬误。我觉得原文作者为了找出这些说明也尽力,恐怕真正权威的诠释只有 Canonical 才能给出吧。)
|
||||
|
||||
### Ubuntu 22.04 Jammy Jellyfish(幸运水母)
|
||||
|
||||
![Ubuntu 22.04 mascot][2]
|
||||
|
||||
于 2021 年 4 月 21 日发布。
|
||||
|
||||
Jammy 的意思是被果酱覆盖着的、充满果酱的。不太正式地,Jammy 还有**幸运**的意思。
|
||||
|
||||
<ruby>水母<rt> Jellyfish </rt></ruby> 是一种自由游动的水生动物,它的身体就像是一把透明伞,还具有拖曳的触须。少数水母是通过茎干固定在海床上,而不能移动。全世界的海洋中有超过两百种的水母,它们分布于全球各地的水域里。
|
||||
|
||||
### Ubuntu 21.10 Impish Indri(顽皮大狐猴)
|
||||
|
||||
![Ubuntu 21.10 mascot][3]
|
||||
|
||||
于 2021 年 10 月 14 日发布。
|
||||
|
||||
Impish 的意思是以**顽皮**而不是严肃的方式,对某人/某事不太尊重。
|
||||
|
||||
<ruby>大狐猴<rt> Indri </rt></ruby>,也称为 babakoto,是现存的最大的狐猴之一。它的头身长约 64 至 72 厘米,体重在 6 至 9.5 公斤之间。它的毛发是黑白相间的。在攀爬或攀爬时,它会保持竖直的姿势。
|
||||
|
||||
> 据维基:2014 年的世界自然保护联盟(IUCN) <ruby>红色名录<rt> Red List </rt></ruby> 中,仅出现在马达加斯加的大狐猴首次被提升至极危级别。
|
||||
|
||||
### Ubuntu 21.04 Hirsute Hippo(多毛河马)
|
||||
|
||||
![Ubuntu 21.04 mascot][4]
|
||||
|
||||
于 2021 年 4 月 22 日发布。
|
||||
|
||||
Hirsute 的意思是**多毛的**。
|
||||
|
||||
<ruby>河马<rt> Hippo </rt></ruby>,是一种生活在非洲大陆撒哈拉以南的大型半水生哺乳动物。河马是河马科中仅有的两个现存物种之一,另一个物种是 <ruby>侏儒河马<rt> pygmy hippopotamus </rt></ruby>。河马的名字来源于古希腊语“river horse”。
|
||||
|
||||
> 据维基:在 2006 年 5 月已被 IUCN 红色名录中分为易危物种,世界仅存约 12.5 万-15 万头
|
||||
|
||||
但是其实,我并没有见过很多多毛的河马 😅。
|
||||
|
||||
### Ubuntu 20.10 Groovy Gorilla(时髦大猩猩)
|
||||
|
||||
![Ubuntu 20.10 mascot][5]
|
||||
|
||||
于 2020 年 10 月 22 日发布。
|
||||
|
||||
Groovy 的意思是**时尚的**和令人兴奋的。
|
||||
|
||||
<ruby>大猩猩<rt> Gorilla </rt></ruby>,是一种草食性的地栖巨猿。它主要栖息在赤道非洲的热带森林中。大猩猩属分为两个物种:东部大猩猩和西部大猩猩,以及进一步可分为四个或五个亚种。
|
||||
|
||||
### Ubuntu 20.04 LTS Focal Fossa(瞩目狸猫)
|
||||
|
||||
![Ubuntu 20.04 mascot][6]
|
||||
|
||||
于 2020 年 4 月 23 日发布。
|
||||
|
||||
Focal 的意思是令人注目的、**瞩目**。
|
||||
|
||||
<ruby>马岛长尾狸猫<rt> Fossa </rt></ruby>,是**马达加斯加岛上最大的食肉性哺乳动物**。它身体的长度可以达到近六英尺,其中它们的长尾巴占了一半。它们看起来就像是猫、狗和獴的杂交体。它们有细长的身体、肌肉发达的四肢和短的红棕色毛发。
|
||||
|
||||
### Ubuntu 19.10 Eoan Ermine(东方白鼬)
|
||||
|
||||
![Ubuntu 19.10 mascot][7]
|
||||
|
||||
于 2019 年 10 月 17 日发布。
|
||||
|
||||
Eoan 的意思是**与黎明或东方有关的**。
|
||||
|
||||
<ruby>白鼬<rt> Stoat </rt></ruby>,也被称为欧亚貂、白令貂,简称 <ruby>貂<rt> Ermine </rt></ruby>,是一种原产于欧亚大陆和北美北部的鼬科动物。由于鼬在极地广泛分布,因此它被 IUCN 列为最不担忧灭绝的物种。
|
||||
|
||||
> 据维基:IUCN 将其列为世界百大外来入侵种。
|
||||
|
||||
### Ubuntu 19.04 Disco Dingo(迪斯科野犬)
|
||||
|
||||
![Ubuntu 19.04 mascot][8]
|
||||
|
||||
于 2019 年 4 月 18 日发布。
|
||||
|
||||
Disco 与**迪斯科**音乐和夜总会有关。
|
||||
|
||||
<ruby>澳洲野犬<rt> Dingo </rt></ruby>,是在澳大利亚发现的一种古老的犬种。澳洲野犬的科属分类在不同出版物中不太一样,因此它的科属分类存在争议。
|
||||
|
||||
### Ubuntu 18.10 Cosmic Cuttlefish(外星墨鱼)
|
||||
|
||||
![Ubuntu 18.10 mascot][9]
|
||||
|
||||
于 2018 年 10 月 18 日发布。
|
||||
|
||||
Cosmic 意味着与地球**不同的**、宇宙的。
|
||||
|
||||
<ruby>墨鱼<rt> Cuttlefish </rt></ruby>,是乌贼目的一种海洋软体动物。它属于头足类,这一类还包含了鱿鱼、章鱼和鹦鹉螺。墨鱼有一个独特的内壳,即墨鱼骨,它可以用于控制浮力。
|
||||
|
||||
### Ubuntu 18.04 LTS Bionic Beaver(仿生河狸)
|
||||
|
||||
![Ubuntu 18.04 mascot][10]
|
||||
|
||||
于 2018 年 4 月 26 日发布。
|
||||
|
||||
Bionic 意味着**仿生的**,或者是机电的。
|
||||
|
||||
<ruby>河狸<rt> Beaver </rt></ruby>,是北半球温带的一种大型半水生啮齿动物。有两种现存的海狸:北美河狸和欧亚河狸。河狸是仅次于水豚的现存第二大啮齿动物。
|
||||
|
||||
> 据维基:它们处于 IUCN 哺乳动物红色名录中的无危物种,在中国河狸被列为一级保护动物。
|
||||
|
||||
英国用户认为这个版本的名称特别有趣。
|
||||
|
||||
### Ubuntu 17.10 Artful Aardvark(机灵土豚)
|
||||
|
||||
![Ubuntu 17.10 mascot][11]
|
||||
|
||||
于 2017 年 10 月 19 日发布。
|
||||
|
||||
Ubuntu 在此版本中默认切换回了 GNOME。
|
||||
|
||||
Artful 的意思是聪明的或**机灵的**。
|
||||
|
||||
<ruby>土豚<rt> Aardvark </rt></ruby>,是一种原产于非洲的穴居、夜间活动的中型哺乳动物。它是管齿目中唯一的现存物种。与大多数其他食虫动物不同,它有一个长长的像猪一样的鼻子,可以闻出食物在哪里。
|
||||
|
||||
### Ubuntu 17.04 Zesty Zapus(开心跳鼠)
|
||||
|
||||
![Ubuntu 17.04 mascot][12]
|
||||
|
||||
于 2017 年 4 月 13 日发布。
|
||||
|
||||
这个版本是最后一个以 Unity 桌面为特色的版本。
|
||||
|
||||
Zesty 意味着有一种强烈的、**令人开心的**、有点辛辣的味道。
|
||||
|
||||
<ruby>跳鼠<rt>Zapus</rt></ruby> 是北美跳鼠中唯一一个有牙齿的一个属。跳鼠是除 <ruby>指猴<rt> Aye-aye </rt></ruby>之外,唯一现存的有 18 颗牙齿的哺乳动物。
|
||||
|
||||
### Ubuntu 16.10 Yakkety Yak(唠叨牦牛)
|
||||
|
||||
![Ubuntu 16.10 mascot][13]
|
||||
|
||||
于 2016 年 10 月 13 日发布。
|
||||
|
||||
Yakkety 有很多意思。OMG Ubuntu 说,“yakking” 有唠唠叨叨这一非正式意思,yakkety 还可能是一种知名的流行爵士乐器 “Yakety Sax” 的另一种拼写。
|
||||
|
||||
<ruby>牦牛<rt> Yak </rt></ruby>,是一种大型驯养的野牛。它的毛发蓬松,肩部隆起,有很大的角。在一些地方它是一种驮畜,人们也可以食用它的奶和肉、以及加工它的皮制作东西。
|
||||
|
||||
### Ubuntu 16.04 LTS Xenial Xerus(好客地松鼠)
|
||||
|
||||
![Ubuntu 16.04 mascot][14]
|
||||
|
||||
于 2016 年 4 月 21 日发布。
|
||||
|
||||
Xenial 的意思是**热情好客的**。
|
||||
|
||||
<ruby>非洲地松鼠<rt> Xerus </rt></ruby>,有四个亚种,分别是**开普地松鼠,条纹地松鼠,山地松鼠和无条纹地松鼠**。这些动物是昼行性的,是食草动物,通常吃坚果、根和种子。然而,有时它们也会吃蛋类和其他小动物。
|
||||
|
||||
### Ubuntu 15.10 Wily Werewolf(狡猾狼人)
|
||||
|
||||
![Ubuntu 15.10 mascot][15]
|
||||
|
||||
于 2015 年 10 月 22 日发布。
|
||||
|
||||
这个版本可能是少有的发布代号中带有虚构动物的 Ubuntu 版本之一。
|
||||
|
||||
Wily 的意思是善于获得优势,尤其在欺骗上十分**狡猾的**。
|
||||
|
||||
<ruby>狼人<rt> Werewolf </rt></ruby>,是可以隐藏住耳朵和尾巴的一种神话生物。它是人,也是狼,大多数人因为它们的长相而害怕它们。
|
||||
|
||||
### Ubuntu 15.04 Vivid Vervet(活泼绿猴)
|
||||
|
||||
![Ubuntu 15.04 mascot][16]
|
||||
|
||||
于 2015 年 4 月 23 日发布。
|
||||
|
||||
Vivid 的意思是**活泼**的、明亮的。
|
||||
|
||||
<ruby>黑长尾猴<rt> Vervet monkey </rt></ruby>,是一种原产于非洲的角猿科的旧大陆猴。“vervet”一词也用于表示<ruby>绿猴属<rt> Chlorocebus </rt></ruby>的所有动物,其中包含五个不同的亚种,这五个不同的亚种主要分布在南部非洲以及一些东部国家。
|
||||
|
||||
### Ubuntu 14.10 Utopic Unicorn(乌托邦独角兽)
|
||||
|
||||
![Ubuntu 14.10 mascot][17]
|
||||
|
||||
于 2014 年 10 月 23 日发布。
|
||||
|
||||
这个版本是另一个其发布代号中带有虚构动物的 Ubuntu 版本。
|
||||
|
||||
Utopic 与**乌托邦**有关,乌托邦是一个虚构的、不存在但是一个理想的地方。
|
||||
|
||||
<ruby>独角兽<rt> Unicorn </rt></ruby>,是一种传说中的生物。自古以来,它就被描述为前额有一个巨大的、尖的、螺旋状的角的一种野兽。
|
||||
|
||||
### Ubuntu 14.04 LTS Trusty Tahr(可靠塔尔羊)
|
||||
|
||||
![Ubuntu 14.04 mascot][18]
|
||||
|
||||
于 2014 年 4 月 17 日发布。
|
||||
|
||||
Trusty 意味着**可靠的**或忠实的。
|
||||
|
||||
<ruby>塔尔羊<rt> Tahr </rt></ruby>,是一种很像山羊的哺乳动物。它们会栖息在阿曼、印度南部和喜马拉雅山脉的悬崖和山坡上。
|
||||
|
||||
### Ubuntu 13.10 Saucy Salamander(活泼蝾螈)
|
||||
|
||||
![Ubuntu 13.10 mascot][19]
|
||||
|
||||
于 2013 年 10 月 17 日发布。
|
||||
|
||||
Saucy 意味着大胆的、**活泼的**或精神饱满的。
|
||||
|
||||
<ruby>蝾螈<rt> Salamander </rt></ruby>是一类两栖动物。其典型特征是有着蜥蜴般的外观,它们有细长的身体,钝的鼻子,以及与身体成直角突出的短肢,并且幼体和成体都有尾巴。现存的所有十个蝾螈科都属于有尾目。
|
||||
|
||||
### Ubuntu 13.04 Raring Ringtail(热情猫熊)
|
||||
|
||||
![Ubuntu 13.04 mascot][20]
|
||||
|
||||
于 2013 年 4 月 25 日发布。
|
||||
|
||||
Raring 的意思是热情的和**非常渴望做某事**。
|
||||
|
||||
<ruby>猫熊<rt> Ringtail </rt></ruby>,是**一种像猫一样大的食肉动物,类似于一只长着浣熊尾巴的小狐狸**。它浓密的尾巴是扁平的,几乎和头部和身体一样长,有黑白交替的环。它们是夜行动物,一天中的大部分时间都在它们的巢穴里睡觉。
|
||||
|
||||
### Ubuntu 12.10 Quantal Quetzal(量子大咬鹃)
|
||||
|
||||
![Ubuntu 12.10 mascot][21]
|
||||
|
||||
于 2012 年 10 月 18 日发布。
|
||||
|
||||
Quantal 意味着与**量子**或量子理论有关的。
|
||||
|
||||
<ruby>大咬鹃<rt> Quetzal </rt></ruby>,是咬鹃家族中的一种色彩鲜艳的鸟类。它们生活在森林中,主要是在潮湿的高地。来自*凤尾绿咬鹃属*的五种物种生活在新热带的,而另外一个物种,即角咬鹃,生活在墨西哥和美国最南端的局部地区。大咬鹃相当地大,它们的身体长度超过 32 厘米或者有 13 英寸长,比其他咬鹃科的物种都大。绚丽的大咬鹃因其鲜艳的色彩,而成为危地马拉的国鸟。
|
||||
|
||||
### Ubuntu 12.04 LTS Precise Pangolin(精准穿山甲)
|
||||
|
||||
![Ubuntu 12.04 mascot][22]
|
||||
|
||||
于 2012 年 4 月 26 日发布。
|
||||
|
||||
Precise 意味着能**精确**或准确地表达细节。
|
||||
|
||||
<ruby>穿山甲<rt> Pangolin </rt></ruby>,有时被称为有鳞食蚁兽,是鳞甲目的一种哺乳动物。它现存的一个科是穿山甲科,有三个属:穿山甲亚属、长尾穿山甲亚属和地穿山甲亚属。穿山甲亚属包括在亚洲发现的四种物种,而长尾穿山甲亚属和地穿山甲亚属各包括两种物种,均在撒哈拉以南非洲发现。
|
||||
|
||||
> 据维基百科:2014 年,IUCN 红色名录物种存续委员会穿山甲专门小组,指出穿山甲是目前全世界最常被走私买卖的哺乳动物。所有穿山甲都面临巨大的生存威胁,其中中华穿山甲和马来穿山甲被 IUCN 评估为“极危”物种,非法走私的活动极为猖獗。随着亚洲的 4 种穿山甲数量锐减,走私贸易商家已转移目标至非洲,以满足市场上的庞大需求。
|
||||
|
||||
### Ubuntu 11.10 Oneiric Ocelot(梦幻豹猫)
|
||||
|
||||
![Ubuntu 11.10 mascot][23]
|
||||
|
||||
于 2011 年 10 月 13 日发布。
|
||||
|
||||
Oneiric 的意思是与**梦**有关的。
|
||||
|
||||
<ruby>豹猫<rt> Ocelot </rt></ruby>,是一种中等大小的斑点野猫。它的肩长可达 40 至 50 厘米,体重在 8 至 15.5 公斤之间。<ruby>卡尔·林奈<rt>Carl Linnaeus</rt></ruby> 于 1758 年首次在书中描述了它。
|
||||
|
||||
> 据维基:华盛顿公约将孟加拉国、印度以及泰国的豹猫族群列入附录一禁止进行国际贸易,而其他族群亦列入华盛顿公约附录二。
|
||||
|
||||
### Ubuntu 11.04 Natty Narwhal(聪明独角鲸)
|
||||
|
||||
![Ubuntu 11.04 mascot][24]
|
||||
|
||||
于 2011 年 4 月 28 日发布。
|
||||
|
||||
这个版本是第一个采用 Unity 桌面的版本。
|
||||
|
||||
Natty 意味着**聪明**和时尚的。
|
||||
|
||||
<ruby>独角鲸<rt> Narwhal </rt></ruby>,是一种中等大小的齿鲸。拥有一颗突出的犬齿的大“獠牙”。它常年生活在格陵兰、加拿大和俄罗斯周围的北极水域。它是一角鲸科中现存的两种鲸鱼物种之一,另一个物种是 <ruby>白鲸<rt> Beluga whale </rt></ruby>。
|
||||
|
||||
### Ubuntu 10.10 Maverick Meerkat(独行猫鼬)
|
||||
|
||||
![Ubuntu 10.10 mascot][25]
|
||||
|
||||
于 2010 年 10 月 10 日发布。
|
||||
|
||||
Maverick 的意思是**特立独行的**或有独立思想的。
|
||||
|
||||
<ruby>猫鼬<rt> Meerkat </rt></ruby>,是一种在南部非洲发现的小型猫鼬。它的特点是头宽、眼睛大、鼻子尖、腿长、尾巴很细,毛色有斑纹。
|
||||
|
||||
### Ubuntu 10.04 LTS Lucid Lynx(清醒猞狸)
|
||||
|
||||
![Ubuntu 10.04 mascot][26]
|
||||
|
||||
于 2010 年 4 月 29 日发布。
|
||||
|
||||
Lucid 意味着**易于理解的**或明亮的。
|
||||
|
||||
<ruby>猞猁<rt> Lynx </rt></ruby>,是中型野猫属猞猁中的一种。猞猁这个名字起源于中古英语,源自希腊语 λύγξ,λύγξ 又源自于印欧语词根 leuk-,指的是它眼睛能反射发光的样子。
|
||||
|
||||
### Ubuntu 9.10 Karmic Koala(幸运考拉)
|
||||
|
||||
![Ubuntu 9.10 mascot][27]
|
||||
|
||||
于 2009 年 10 月 29 日发布。
|
||||
|
||||
Karmic 意味着与**命运**、业力有关。
|
||||
|
||||
<ruby>考拉<rt> Koala </rt></ruby>,是一种原产于澳大利亚的树栖草食性的有袋动物。它是袋鼠科唯一现存的物种,它的近亲是<ruby>袋熊<rt> Wombat </rt></ruby>。
|
||||
|
||||
> 据维基:在 19 世纪初树袋熊遭到捕杀出口,数量由百万只锐减至一千多只,于是澳大利亚政府立法保护。
|
||||
|
||||
### Ubuntu 9.04 Jaunty Jackalope(自信鹿角兔)
|
||||
|
||||
![Ubuntu 9.04 mascot][28]
|
||||
|
||||
于 2009 年 4 月 23 日发布。
|
||||
|
||||
这个版本是我用的第一个 Ubuntu 版本。
|
||||
|
||||
Jaunty 是指拥有活泼、开朗和**自信**的态度。
|
||||
|
||||
<ruby>鹿角兔<rt> Jackalope </rt></ruby>,是**北美民间传说中的一种神话动物**,被描述为长着羚羊角的可怕的长角兔。Jackalope 这个词是由 jackrabbit 和 antelope 组合而成的。许多鹿角兔的标本都是由用鹿角制成的。
|
||||
|
||||
### Ubuntu 8.10 Intrepid Ibex(无畏野山羊)
|
||||
|
||||
![Ubuntu 8.10 mascot][29]
|
||||
|
||||
于 2008 年 10 月 30 日发布。
|
||||
|
||||
Intrepid 意味着**无所畏惧**、冒险的。
|
||||
|
||||
<ruby>野山羊<rt> Ibex </rt></ruby>,以雄性的大弯角为特征,在前面形成像横向的脊那样。它主要分布于欧亚大陆、北非和东非。
|
||||
|
||||
### Ubuntu 8.04 LTS Hardy Heron(坚韧苍鹭)
|
||||
|
||||
![Ubuntu 8.04 mascot][30]
|
||||
|
||||
于 2008 年 4 月 24 日发布。
|
||||
|
||||
这个版本是第一个吉祥物出现在其默认壁纸上的 Ubuntu 版本。
|
||||
|
||||
Hardy 意味着能够**忍受**困难条件的、强大的。
|
||||
|
||||
<ruby>苍鹭<rt> Heron </rt></ruby>,是一种长腿、长颈、生活在淡水和沿海的鸟类。
|
||||
|
||||
### Ubuntu 7.10 Gutsy Gibbon(阵风长臂猿)
|
||||
|
||||
![Ubuntu 7.10 mascot][31]
|
||||
|
||||
于 2007 年 10 月 18 日发布。
|
||||
|
||||
Gusty 表示以**阵风**的方式吹动。
|
||||
|
||||
<ruby>长臂猿<rt> Gibbon </rt></ruby>,是一种猿类,它们生活在孟加拉国东部、印度东北部、中国南部和印度尼西亚的亚热带和热带雨林地区。
|
||||
|
||||
### Ubuntu 7.04 Feisty Fawn(活泼小鹿)
|
||||
|
||||
![Ubuntu 7.04 mascot][32]
|
||||
|
||||
于 2007 年 4 月 19 日发布。
|
||||
|
||||
Feisty 意味着**小而坚定**的。
|
||||
|
||||
<ruby>小鹿<rt> Fawn </rt></ruby>,指的是第一年刚出生的小鹿。
|
||||
|
||||
### Ubuntu 6.10 Edgy Eft(紧张水蜥)
|
||||
|
||||
![Ubuntu 6.10 mascot][33]
|
||||
|
||||
于 2006 年 10 月 26 日发布。
|
||||
|
||||
Edgy 的意思是**紧张的**。
|
||||
|
||||
<ruby>水蜥<rt> Eft </rt></ruby>,是蝾螈的陆生幼年期。蝾螈是一种蜥蜴,它具有三个不同的发育生命阶段:水生幼虫、陆生幼体和成体。
|
||||
|
||||
所以水蜥指的是一个青年的蝾螈。
|
||||
|
||||
### Ubuntu 6.06 Dapper Drake(整洁公鸭)
|
||||
|
||||
![Ubuntu 6.06 mascot][34]
|
||||
|
||||
于 2006 年 6 月 1 日发布。
|
||||
|
||||
Dapper 的意思是衣着整洁,**外表整洁的**。
|
||||
|
||||
<ruby>公鸭<rt> Drake </rt></ruby>,是完全性成熟的成年雄性鸭子。
|
||||
|
||||
### Ubuntu 5.10 Breezy Badger(微风之獾)
|
||||
|
||||
![Ubuntu 5.10 mascot][35]
|
||||
|
||||
于 2005 年 10 月 12 日发布。
|
||||
|
||||
Breezy 的意思是有**微风**的。
|
||||
|
||||
<ruby>獾<rt> Badger </rt></ruby>,一种是短腿的杂食动物,经常蹲下身挤在一起。
|
||||
|
||||
### Ubuntu 5.04 Hoary Hedgehog(灰白刺猬)
|
||||
|
||||
![Ubuntu 5.04 mascot][36]
|
||||
|
||||
于 2005 年 4 月 8 日发布。
|
||||
|
||||
Hoary 是**灰白色的**意思。
|
||||
|
||||
<ruby>刺猬<rt> Hedgehogis </rt></ruby>,是一种多刺的哺乳动物,遍布于欧洲、亚洲和非洲的部分地区,并引入到了新西兰。
|
||||
|
||||
### Ubuntu 4.10 : Warty Warthog(有疣疣猪)
|
||||
|
||||
![Ubuntu 4.10 mascot][37]
|
||||
|
||||
于 2004 年 10 月 20 日发布。
|
||||
|
||||
Ubuntu 就是从这个版本开始的。
|
||||
|
||||
Wart 是由病毒引起的一种小的、坚硬的、良性的皮肤生长物。Warty 的意思是**长满疣的**。
|
||||
|
||||
<ruby>疣猪<rt> Warthog </rt></ruby>,是猪科的一种野生动物,它是在撒哈拉以南非洲的草原、稀树草原和林地中被发现的。
|
||||
|
||||
### 总结
|
||||
|
||||
本文有没有让 Ubuntu 用户了解了更多知识呢?从技术上讲,并没有,但回顾历史是件好事。如果你多年来一直是 Ubuntu 用户,那么这篇文章可能会引发你的怀旧之情。
|
||||
|
||||
Ubuntu 9.04 是我第一次尝试 Linux 桌面。如果我没记错的话,那是在 2009 年 9 月下旬。仅仅几周后,我的系统就升级到了 Ubuntu 9.10。那些天我经常在 Ubuntu 论坛上浏览,探索这个新的操作系统,并学习新的东西。
|
||||
|
||||
那么,这篇文章有没有勾起你的一些美好的回忆呢?你的第一个 Ubuntu 版本又是哪个呢?在评论区中分享你的 Ubuntu 使用经历吧。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/all-Ubuntu-mascots/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[chai001125](https://github.com/chai001125)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://itsfoss.com/Ubuntu-default-wallpapers-download/
|
||||
[2]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-22-04-mascot.jpg
|
||||
[3]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-21-10-mascot.jpg
|
||||
[4]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-21-04-mascot.jpg
|
||||
[5]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-20-10-mascot.jpg
|
||||
[6]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-20-04-mascot-1.jpg
|
||||
[7]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-19-10-mascot.jpg
|
||||
[8]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-19-04-mascot.jpg
|
||||
[9]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-18-10-mascot.jpg
|
||||
[10]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-18-04-mascot.jpg
|
||||
[11]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-17-10-mascot.jpg
|
||||
[12]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-17-04-mascot.jpg
|
||||
[13]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-16-10-mascot.jpg
|
||||
[14]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-16-04-mascot.jpg
|
||||
[15]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-15-10-mascot.jpg
|
||||
[16]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-15-04-mascot.jpg
|
||||
[17]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-14-10-mascot.jpg
|
||||
[18]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-14-04-mascot.jpg
|
||||
[19]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-13-10-mascot.jpg
|
||||
[20]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-13-04-mascot.jpg
|
||||
[21]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-12-10-mascot.jpg
|
||||
[22]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-12-04-mascot.jpg
|
||||
[23]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-11-10-mascot.jpg
|
||||
[24]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-11-04-mascot.jpg
|
||||
[25]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-10-10-mascot.jpg
|
||||
[26]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-10-04-mascot.jpg
|
||||
[27]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-9-10-mascot.jpg
|
||||
[28]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-9-04-mascot.jpg
|
||||
[29]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-8-10-mascot.jpg
|
||||
[30]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-8-04-mascot.jpg
|
||||
[31]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-7-10-mascot.jpg
|
||||
[32]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-7-04-mascot.jpg
|
||||
[33]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-6-10-mascot.jpg
|
||||
[34]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-6-06-mascot.jpg
|
||||
[35]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-5-10-mascot.jpg
|
||||
[36]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-5-04-mascot.jpg
|
||||
[37]: https://itsfoss.com/wp-content/uploads/2022/05/Ubuntu-4-10-mascot.jpg
|
@ -0,0 +1,188 @@
|
||||
[#]: subject: "12 essential Linux commands for beginners"
|
||||
[#]: via: "https://opensource.com/article/22/5/essential-linux-commands"
|
||||
[#]: author: "Don Watkins https://opensource.com/users/don-watkins"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "chai001125"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15215-1.html"
|
||||
|
||||
12 个对新手最重要的 Linux 命令
|
||||
======
|
||||
|
||||
> 我向所有的 Linux 初学者推荐以下这些命令。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202211/05/092308plqfl6a6z0g7afx7.jpg)
|
||||
|
||||
在使用 Linux 命令行时,很容易就会迷失方向,这可能会导致灾难性的后果:我有一次使用删除命令 `rm` 删除文件,然而删除之后我才意识到我刚刚是删除了计算机的引导目录。后来,我学会了使用 `pwd` 命令,来知道当前在文件系统的哪个目录下;并且我使用了 [trashy 和 trash-cli][2] 这一命令行回收站工具(LCTT 译注:在删除文件时 `trash-cli` 会充当中间人,将文件先“删除”到桌面上的垃圾箱中,能够通过垃圾箱或通过终端的 `trash` 命令,来恢复垃圾箱中已删除的文件。)
|
||||
|
||||
当我刚开始使用 Linux 时,我有一个放在桌子上的“速查表”,它就是《101 条你应该知道的 Linux 命令》,我在管理 Linux 服务器时能参考速查表上面的这些命令。随着我越来越熟悉这些命令,我越来越精通服务器管理了。
|
||||
|
||||
以下是我认为最有用的 12 个 Linux 命令。
|
||||
|
||||
### 1、打印工作目录(pwd)
|
||||
|
||||
`pwd` 命令会打印出你的工作目录。换句话来说,它输出你当前所在目录的路径。`pwd` 命令有两种选项:`-L` 或 `--logical`(即逻辑路径)用来打印当前的目录路径(不解析符号链接),`-P` 或 `--physial`(即物理路径)会打印出解析符号链接后的物理目录。(LCTT 译注:你可以进一步阅读我们翻译的 [另一篇文章](https://linux.cn/article-4356-1.html)。)
|
||||
|
||||
### 2、创建目录(mkdir)
|
||||
|
||||
使用 `mkdir` 命令来创建一个新目录,是非常容易的。以下命令,创建了一个名为 `example` 目录(若 `example` 已存在,则无法创建):
|
||||
|
||||
```
|
||||
$ mkdir example
|
||||
```
|
||||
|
||||
你也可以在嵌套地创建目录及其子目录:
|
||||
|
||||
```
|
||||
$ mkdir -p example/one/two
|
||||
```
|
||||
|
||||
如果目录 `example` 和目录 `one` 都已存在,则仅会创建目录 `two`。如果上述目录都不存在,则会创建这三个嵌套的目录。
|
||||
|
||||
### 3、列出文件(ls)
|
||||
|
||||
我最早使用的是 MS-DOS(微软磁盘操作系统),因此我习惯于使用 `dir` 命令,来列出文件。我不记得当时是否能在 Linux 上使用 `dir` 命令,但是如今 `dir` 命令已经包含在 <ruby>GNU 核心实用程序包<rt>GNU Core Utilities package</rt></ruby> 中了。大多数人会使用 `ls` 命令,来显示目录中的文件及其所有的属性。`ls` 命令有许多选项,包括 `-l` 查看文件的长列表,显示文件所有者和权限等信息。
|
||||
|
||||
### 4、更改当前工作目录(cd)
|
||||
|
||||
在 Linux 中经常要更改当前工作目录,这就是 `cd` 命令的功能。例如,以下的示例将让你从 <ruby>主目录<rt>home</rt></ruby> 进入 `Documents` 目录:
|
||||
|
||||
```
|
||||
$ cd Documents
|
||||
```
|
||||
|
||||
你可以使用 `cd ~` 或者 `cd`,来快速转换到你的主目录。你可以使用 `cd ..` 来返回到上一级目录。
|
||||
|
||||
### 5、删除文件(rm)
|
||||
|
||||
删除文件是很危险的,因为在 Linux 终端上用 `rm` 命令会**彻底地**删除文件,并没有像桌面的垃圾桶那样依旧保存着删除的文件。许多终端用户有一个坏习惯,他们会永久地删除他们认为不再需要的文件。然而,因为没有“取消删除”命令,这个坏习惯可能会导致严重的问题:你会不小心删除了包含重要数据的目录。
|
||||
|
||||
Linux 系统为文件删除提供了 `rm` 和 `shred` 命令。要删除文件 `example.txt`,请输入以下内容:
|
||||
|
||||
```
|
||||
$ rm example.txt
|
||||
```
|
||||
|
||||
然而,使用 `trash` 命令要安全得多,例如 [trashy][3] 或者 [trash-cli][4],它会将文件先“删除”到桌面上的垃圾箱中:
|
||||
|
||||
```
|
||||
$ trash example.txt
|
||||
```
|
||||
|
||||
(LCTT 译注:关于 Trash-Cli 的更多信息可以参考我们翻译的 [另一篇文章](https://linux.cn/article-10029-1.html)。)
|
||||
|
||||
### 6、复制文件(cp)
|
||||
|
||||
使用 `cp` 命令,来复制文件。`cp` 的语法是从*旧文件*复制到*新文件*。这里有一个例子:
|
||||
|
||||
```
|
||||
$ cp file1.txt newfile1.txt
|
||||
```
|
||||
|
||||
你也可以复制整个目录:
|
||||
|
||||
```
|
||||
$ cp -r dir1 newdirectory
|
||||
```
|
||||
|
||||
### 7、移动并重命名文件(mv)
|
||||
|
||||
重命名和移动文件在功能上是相同的过程。当你移动文件时,从一个目录中取出一个文件,并将其放入一个新目录中;当你重命名文件时,将一个目录中的文件更改为新名称,并放回到同一目录或另一个目录下。无论是重命名还是移动文件,你都可以使用 `mv` 命令:
|
||||
|
||||
```
|
||||
$ mv file1.txt file_001.txt
|
||||
```
|
||||
|
||||
### 8、创建一个空文件(touch)
|
||||
|
||||
使用 `touch` 命令可以简单地创建一个空文件:
|
||||
|
||||
```
|
||||
$ touch one.txt
|
||||
|
||||
$ touch two.txt
|
||||
|
||||
$ touch three.md
|
||||
```
|
||||
|
||||
### 9、更改权限(chmod)
|
||||
|
||||
使用 `chmod` 命令,来更改文件的权限。`chmod` 最常见的用途是让文件能够执行:
|
||||
|
||||
```
|
||||
$ chmod +x myfile
|
||||
```
|
||||
|
||||
以下的示例展示了如何用 `chmod` 命令给文件赋予权限,这对于脚本来说特别方便。尝试一下这个简单的练习吧:
|
||||
|
||||
```
|
||||
$ echo 'echo Hello $USER' > hello.sh
|
||||
|
||||
$ chmod +x hello.sh
|
||||
|
||||
$ ./hello.sh
|
||||
Hello, Don
|
||||
```
|
||||
|
||||
### 10、提升为 root 权限(sudo)
|
||||
|
||||
在管理自己的 Linux 系统时,可能需要提升为超级用户(也称为 root),这就是 `sudo`(即 <ruby>以超级用户做<rt>super user do</rt></ruby>)命令的来源。假设你想要做一些只有管理员(或 root 用户)才能做的事情,只需在命令前加一个 `sudo` 即可:
|
||||
|
||||
```
|
||||
$ touch /etc/os-release && echo "Success"
|
||||
touch: cannot touch '/etc/os-release': Permission denied
|
||||
|
||||
$ sudo touch /etc/os-release && echo "Success"
|
||||
Success
|
||||
```
|
||||
|
||||
### 11、关机(poweroff)
|
||||
|
||||
`poweroff` 命令的功能和它的字面意思一样:把你的计算机关机。需要在 `poweroff` 前面加一个 `sudo` 才能成功关机。
|
||||
|
||||
实际上,还有很多方法可以关闭你的计算机,这些方法有略微的不同。例如,`shutdown` 命令会在指定的时间(例如 60 秒)后关闭计算机:
|
||||
|
||||
```
|
||||
$ sudo shutdown -h 60
|
||||
```
|
||||
|
||||
或者立即关闭计算机:
|
||||
|
||||
```
|
||||
$ sudo shutdown -h now
|
||||
```
|
||||
|
||||
你也可以用 `sudo shutdown -r now` 或者 `reboot` 来重启计算机。
|
||||
|
||||
### 12、阅读手册(man)
|
||||
|
||||
`man` 命令可能是 Linux 中最重要的命令了,你可以通过 `man` 命令查看 Linux 系统上每个命令的官方文档。例如,要阅读更多有关 `mkdir` 的信息,可以输入:
|
||||
|
||||
```
|
||||
$ man mkdir
|
||||
```
|
||||
|
||||
一个与 `man` 相关的命令是 `info` 命令,它提供了一组不同的手册,它通常会提供比简洁的 `man` 页面更详细一点的内容。
|
||||
|
||||
### 你最喜欢的 Linux 命令是什么?
|
||||
|
||||
Linux 系统上还有数百个其他命令!你最喜欢使用的 Linux 命令是什么呢?什么命令是你一直反复使用的呢?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/5/essential-linux-commands
|
||||
|
||||
作者:[Don Watkins][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[chai001125](https://github.com/chai001125)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/don-watkins
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/command_line_prompt.png
|
||||
[2]: https://www.redhat.com/sysadmin/recover-file-deletion-linux
|
||||
[3]: https://gitlab.com/trashy/trashy
|
||||
[4]: https://github.com/andreafrancia/trash-cli
|
@ -0,0 +1,135 @@
|
||||
[#]: subject: "How to Record Audio in Linux With Audacity (and Reduce Noise)"
|
||||
[#]: via: "https://itsfoss.com/audacity-recording/"
|
||||
[#]: author: "Anuj Sharma https://itsfoss.com/author/anuj/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "FYJNEVERFOLLOWS"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15284-1.html"
|
||||
|
||||
如何在 Linux 中使用 Audacity 录制音频(并降噪)
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
[Audacity][1] 是一个自由开源的跨平台 [音频编辑器][2]。专业人士使用它是因为它提供的功能仅需安装很小的软件包。
|
||||
|
||||
你不必成为一名专业人士并使用它的所有功能。你可以使用它从麦克风录制音频,并执行一些基本操作,如背景噪声消除。
|
||||
|
||||
我将在本教程中向你展示如何做到这一点。
|
||||
|
||||
### 在 Linux 上安装 Audacity
|
||||
|
||||
在 Linux 上安装 Audacity 是一个非常简单的过程。由于其受欢迎,可以在大多数 Linux 发行版的官方存储库中找到它。
|
||||
|
||||
你可以在发行版的软件中心或软件包管理器中搜索它。
|
||||
|
||||
作为一个终端爱好者,让我分享一下常见发行版的命令。
|
||||
|
||||
对于基于 Debian 或 Ubuntu 的发行版:
|
||||
|
||||
```
|
||||
sudo apt install audacity
|
||||
```
|
||||
|
||||
对于基于 RHEL 或 Fedora 的发行版:
|
||||
|
||||
```
|
||||
sudo dnf install audacity
|
||||
```
|
||||
|
||||
如果你在用基于 Arch 的发行版:
|
||||
|
||||
```
|
||||
sudo pacman -Syu audacity
|
||||
```
|
||||
|
||||
**注意**,通过官方存储库安装可能无法获得 [最新版本][3]。要获得最新版本,你可以使用 AppImage 或 Flatpak/Snap 软件包。
|
||||
|
||||
### 使用 Audacity 录制音频
|
||||
|
||||
安装 Audacity 后,从应用程序菜单打开它或从终端启动它。你会看到这样的界面:
|
||||
|
||||
![Audacity Interface][4]
|
||||
|
||||
单击“录制”按钮(红点)即可轻松开始录制。完成后,单击“
|
||||
停止”按钮(方形图标)来结束录制。你还可以预览录制的波形,如下所示:
|
||||
|
||||
![record audio with audacity][5]
|
||||
|
||||
然后,你可以通过单击“播放”按钮(绿色图标)检查录制的内容。
|
||||
|
||||
如果你没有看到任何波形,则表示未录制到任何内容。很可能,你没有正确设置音频输入。确保你选择了正确的麦克风,并确保在“<ruby>系统设置<rt>system settings</rt></ruby>”中其未被静音。你也可以通过 Audacity 接口设置。
|
||||
|
||||
录音不会自动保存为 MP3 或其他格式。**要保存录音**,你可以转到 “<ruby>文件<rt>File</rt></ruby> → <ruby>导出<rt>Export</rt></ruby>” 并选择 “<ruby>导出为 MP3<rt>Export as MP3</rt></ruby>”(或任何其他想要的格式)。
|
||||
|
||||
### 使用 Audacity 降低背景噪声
|
||||
|
||||
Audacity 还有另一个很棒的功能,你可以使用它来减少录制音频中的白噪声。
|
||||
|
||||
最好的做法是在开始使用 Audacity 录制时的前五秒不要说任何话。这将为你提供所需的背景噪声。
|
||||
|
||||
在录制音频的波形上,选择你认为是背景噪声的部分。
|
||||
|
||||
![Background noise][6]
|
||||
|
||||
选择噪声部分后,从顶部文件菜单中转到 “<ruby>效果<rt>Effects</rt></ruby> → <ruby>降低噪音<rt>Noise Reduction</rt></ruby>”。
|
||||
|
||||
它会像这样打开一个弹出窗口。单击此处的 “<ruby>获取噪音配置文件<rt>Get Noise Profile</rt></ruby>”。
|
||||
|
||||
![Noise Reduction Effect Popup Window][7]
|
||||
|
||||
现在,你已经设置了噪声配置文件。现在,你必须使用它来减少录音中的噪声。
|
||||
|
||||
按 `Ctrl + A` 快捷键选择整段录音。你也可以选择其中的一部分,仅对所选部分减少噪声。
|
||||
|
||||
选择音轨后,再次转到 “<ruby>效果<rt>Effects</rt></ruby> → <ruby>降低噪音<rt>Noise Reduction</rt></ruby>”。
|
||||
|
||||
**这次不要单击** “<ruby>获取噪音配置文件<rt>Get Noise Profile</rt></ruby>”。这一次,你应该能够按下 “OK” 按钮。
|
||||
|
||||
只需按下 “OK” 按钮,即可将降噪效果应用到录音中,并反映在波形上,如下所示:
|
||||
|
||||
![Audio Waveform after Noise Reduction][8]
|
||||
|
||||
现在,相较而言,录制的音频将具有更少的噪声。你可以在选择 “<ruby>降低噪音<rt>Noise Reduction</rt></ruby>” 效果时微调噪声过滤。
|
||||
|
||||
总结如下:
|
||||
|
||||
* 选择噪声部分,转到 “<ruby>效果<rt>Effects</rt></ruby> → <ruby>降低噪音<rt>Noise Reduction</rt></ruby>”,然后单击 “<ruby>获取噪音配置文件<rt>Get Noise Profile</rt></ruby>”
|
||||
* 按 `Ctrl + A` 选择整段音频录制,转到 “<ruby>效果<rt>Effects</rt></ruby> → <ruby>降低噪音<rt>Noise Reduction</rt></ruby>”,这次按 `OK` 按钮
|
||||
|
||||
请注意,你无法移除所有类型的噪声,但这应该会有所帮助。
|
||||
|
||||
### Audacity 能做更多事情
|
||||
|
||||
使用 Audacity 录制音频可能不像使用 GNOME 录音机那样简单,但它并不太复杂。如果你正在录制画外音,降噪功能将非常有用。
|
||||
|
||||
Audacity 有更多其他功能,不可能在一个教程中涵盖所有这些功能。这就是为什么我会保持简短的原因。
|
||||
|
||||
如果你不能接受 2021 年的 [Audacity 的隐私政策调整][9],试试其他可用的工具。
|
||||
|
||||
我希望这个小教程能帮助你使用 Audacity 进行音频录制。如果你有问题或建议,请告诉我。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/audacity-recording/
|
||||
|
||||
作者:[Anuj Sharma][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[FYJNEVERFOLLOWS](https://github.com/FYJNEVERFOLLOWS)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/anuj/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://github.com/audacity/audacity
|
||||
[2]: https://itsfoss.com/best-audio-editors-linux/
|
||||
[3]: https://github.com/audacity/audacity/releases
|
||||
[4]: https://itsfoss.com/wp-content/uploads/2022/08/audacity-interface.png
|
||||
[5]: https://itsfoss.com/wp-content/uploads/2022/08/record-audio-with-audacity.png
|
||||
[6]: https://itsfoss.com/wp-content/uploads/2022/08/audacity-noise-reduction.png
|
||||
[7]: https://itsfoss.com/wp-content/uploads/2022/08/audacity-noise-steps.png
|
||||
[8]: https://itsfoss.com/wp-content/uploads/2022/08/audacity-noise-reduced.png
|
||||
[9]: https://news.itsfoss.com/audacity-fiasco-fork/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202211/24/114858g6vpfg3gfglvxnp4.jpg
|
343
published/202211/20220903 Infuse your awk scripts with Groovy.md
Normal file
343
published/202211/20220903 Infuse your awk scripts with Groovy.md
Normal file
@ -0,0 +1,343 @@
|
||||
[#]: subject: "Infuse your awk scripts with Groovy"
|
||||
[#]: via: "https://opensource.com/article/22/9/awk-groovy"
|
||||
[#]: author: "Chris Hermansen https://opensource.com/users/clhermansen"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lxbwolf"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15231-1.html"
|
||||
|
||||
为你的 awk 脚本注入 Groovy
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202211/09/100129hp5bze5bbbbmddw6.jpg)
|
||||
|
||||
> awk 和 Groovy 相辅相成,可以创建强大、有用的脚本。
|
||||
|
||||
最近我写了一个使用 Groovy 脚本来清理我的音乐文件中的标签的系列。我开发了一个 [框架][2],可以识别我的音乐目录的结构,并使用它来遍历音乐文件。在该系列的最后一篇文章中,我从框架中分离出一个实用类,我的脚本可以用它来处理文件。
|
||||
|
||||
这个独立的框架让我想起了很多 awk 的工作方式。对于那些不熟悉 awk 的人来说,你学习下这本电子书:
|
||||
|
||||
> **[《awk 实用指南》][3]**
|
||||
|
||||
我从 1984 年开始大量使用 awk,当时我们的小公司买了第一台“真正的”计算机,它运行的是 System V Unix。对我来说,awk 是非常完美的:它有<ruby>关联内存<rt>associative memory</rt></ruby>——将数组视为由字符串而不是数字来索引的。它内置了正则表达式,似乎专为处理数据而生,尤其是在处理数据列时,而且结构紧凑,易于学习。最后,它非常适合在 Unix 工作流使用,从标准输入或文件中读取数据并写入到输出,数据不需要经过其他的转换就出现在了输入流中。
|
||||
|
||||
说 awk 是我日常计算工具箱中的一个重要部分一点也不为过。然而,在我使用 awk 的过程中,有几件事让我感到不满意。
|
||||
|
||||
可能主要的问题是 awk 善于处理以分隔字段呈现的数据,但很奇怪它不善于处理 CSV 文件,因为 CSV 文件的字段被引号包围时可以嵌入逗号分隔符。另外,自 awk 发明以来,正则表达式已经有了很大的发展,我们需要记住两套正则表达式的语法规则,而这并不利于编写无 bug 的代码。[一套这样的规则已经很糟糕了][4]。
|
||||
|
||||
由于 awk 是一门简洁的语言,因此它缺少很多我认为有用的东西,比如更丰富的基础类型、结构体、`switch` 语句等等。
|
||||
|
||||
相比之下,Groovy 拥有这些能力:可以使用 [OpenCSV 库][5],它很擅长处理 CSV 文件、Java 正则表达式和强大的匹配运算符、丰富的基础类型、类、`switch` 语句等等。
|
||||
|
||||
Groovy 所缺乏的是简单的面向管道的概念,即把要处理数据作为一个传入的流,以及把处理过的数据作为一个传出的流。
|
||||
|
||||
但我的音乐目录处理框架让我想到,也许我可以创建一个 Groovy 版本的 awk “引擎”。这就是我写这篇文章的目的。
|
||||
|
||||
### 安装 Java 和 Groovy
|
||||
|
||||
Groovy 是基于 Java 的,需要先安装 Java。最新的、合适的 Java 和 Groovy 版本可能都在你的 Linux 发行版的软件库中。Groovy 也可以按照 [Groovy 主页][6] 上的说明进行安装。对于 Linux 用户来说,一个不错的选择是 [SDKMan][7],它可以用来获得多个版本的 Java、Groovy 和其他许多相关工具。在这篇文章中,我使用的是 SDK 的版本:
|
||||
|
||||
* Java:OpenJDK 11 的 11.0.12 的开源版本
|
||||
* Groovy:3.0.8
|
||||
|
||||
### 使用 Groovy 创建 awk
|
||||
|
||||
这里的基本想法是将打开一个或多个文件进行处理、将每行分割成字段、以及提供对数据流的访问等复杂情况封装在三个部分:
|
||||
|
||||
* 在处理数据之前
|
||||
* 在处理每行数据时
|
||||
* 在处理完所有数据之后
|
||||
|
||||
我并不打算用 Groovy 来取代 awk。相反,我只是在努力实现我的典型用例,那就是:
|
||||
|
||||
* 使用一个脚本文件而不是在命令行写代码
|
||||
* 处理一个或多个输入文件
|
||||
* 设置默认的分隔符为 `|`,并基于这个分隔符分割所有行
|
||||
* 使用 OpenCSV 完成分割工作(awk 做不到)
|
||||
|
||||
### 框架类
|
||||
|
||||
下面是用 Groovy 类实现的 “awk 引擎”:
|
||||
|
||||
```
|
||||
@Grab('com.opencsv:opencsv:5.6')
|
||||
import com.opencsv.CSVReader
|
||||
public class AwkEngine {
|
||||
// With admiration and respect for
|
||||
// Alfred Aho
|
||||
// Peter Weinberger
|
||||
// Brian Kernighan
|
||||
// Thank you for the enormous value
|
||||
// brought my job by the awk
|
||||
// programming language
|
||||
Closure onBegin
|
||||
Closure onEachLine
|
||||
Closure onEnd
|
||||
private String fieldSeparator
|
||||
private boolean isFirstLineHeader
|
||||
private ArrayList<String> fileNameList
|
||||
public AwkEngine(args) {
|
||||
this.fileNameList = args
|
||||
this.fieldSeparator = "|"
|
||||
this.isFirstLineHeader = false
|
||||
}
|
||||
public AwkEngine(args, fieldSeparator) {
|
||||
this.fileNameList = args
|
||||
this.fieldSeparator = fieldSeparator
|
||||
this.isFirstLineHeader = false
|
||||
}
|
||||
public AwkEngine(args, fieldSeparator, isFirstLineHeader) {
|
||||
this.fileNameList = args
|
||||
this.fieldSeparator = fieldSeparator
|
||||
this.isFirstLineHeader = isFirstLineHeader
|
||||
}
|
||||
public void go() {
|
||||
this.onBegin()
|
||||
int recordNumber = 0
|
||||
fileNameList.each { fileName ->
|
||||
int fileRecordNumber = 0
|
||||
new File(fileName).withReader { reader ->
|
||||
def csvReader = new CSVReader(reader,
|
||||
this.fieldSeparator.charAt(0))
|
||||
if (isFirstLineHeader) {
|
||||
def csvFieldNames = csvReader.readNext() as
|
||||
ArrayList<String>
|
||||
csvReader.each { fieldsByNumber ->
|
||||
def fieldsByName = csvFieldNames.
|
||||
withIndex().
|
||||
collectEntries { name, index ->
|
||||
[name, fieldsByNumber[index]]
|
||||
}
|
||||
this.onEachLine(fieldsByName,
|
||||
recordNumber, fileName,
|
||||
fileRecordNumber)
|
||||
recordNumber++
|
||||
fileRecordNumber++
|
||||
}
|
||||
} else {
|
||||
csvReader.each { fieldsByNumber ->
|
||||
this.onEachLine(fieldsByNumber,
|
||||
recordNumber, fileName,
|
||||
fileRecordNumber)
|
||||
recordNumber++
|
||||
fileRecordNumber++
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
this.onEnd()
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
虽然这看起来是相当多的代码,但许多行是因为太长换行了(例如,通常你会合并第 38 行和第 39 行,第 41 行和第 42 行,等等)。让我们逐行看一下。
|
||||
|
||||
第 1 行使用 `@Grab` 注解从 [Maven Central][8] 获取 OpenCSV 库的 5.6 本周。不需要 XML。
|
||||
|
||||
第 2 行我引入了 OpenCSV 的 `CSVReader` 类
|
||||
|
||||
第 3 行,像 Java 一样,我声明了一个 `public` 实用类 `AwkEngine`。
|
||||
|
||||
第 11-13 行定义了脚本所使用的 Groovy 闭包实例,作为该类的钩子。像任何 Groovy 类一样,它们“默认是 `public`”,但 Groovy 将这些字段创建为 `private`,并对其进行外部引用(使用 Groovy 提供的 getter 和 setter 方法)。我将在下面的示例脚本中进一步解释这个问题。
|
||||
|
||||
第 14-16 行声明了 `private` 字段 —— 字段分隔符,一个指示文件第一行是否为标题的标志,以及一个文件名的列表。
|
||||
|
||||
第 17-31 行定义了三个构造函数。第一个接收命令行参数。第二个接收字段的分隔符。第三个接收指示第一行是否为标题的标志。
|
||||
|
||||
第 31-67 行定义了引擎本身,即 `go()` 方法。
|
||||
|
||||
第 33 行调用了 `onBegin()` 闭包(等同于 awk 的 `BEGIN {}` 语句)。
|
||||
|
||||
第 34 行初始化流的 `recordNumber`(等同于 awk 的 `NR` 变量)为 0(注意我这里是从 00 而不是 1 开始的)。
|
||||
|
||||
第 35-65 行使用 `each` `{}` 来循环处理列表中的文件。
|
||||
|
||||
第 36 行初始化文件的 `fileRecordNumber`(等同于 awk 的 `FNR` 变量)为 0(从 0 而不是 1 开始)。
|
||||
|
||||
第 37-64 行获取一个文件对应的 `Reader` 实例并处理它。
|
||||
|
||||
第 38-39 行获取一个 `CSVReader` 实例。
|
||||
|
||||
第 40 行检测第一行是否为标题。
|
||||
|
||||
如果第一行是标题,那么在 41-42 行会从第一行获取字段的标题名字列表。
|
||||
|
||||
第 43-54 行处理其他的行。
|
||||
|
||||
第 44-48 行把字段的值复制到 `name:value` 的映射中。
|
||||
|
||||
第 49-51 行调用 `onEachLine()` 闭包(等同于 awk 程序 `BEGIN {}` 和 `END {}` 之间的部分,不同的是,这里不能输入执行条件),传入的参数是 `name:value` 映射、处理过的总行数、文件名和该文件处理过的行数。
|
||||
|
||||
第 52-53 行是处理过的总行数和该文件处理过的行数的自增。
|
||||
|
||||
如果第一行不是标题:
|
||||
|
||||
第 56-62 行处理每一行。
|
||||
|
||||
第 57-59 调用 `onEachLine()` 闭包,传入的参数是字段值的数组、处理过的总行数、文件名和该文件处理过的行数。
|
||||
|
||||
第 60-61 行是处理过的总行数和该文件处理过的行数的自增。
|
||||
|
||||
第 66 行调用 `onEnd()` 闭包(等同于 awk 的 `END {}`)。
|
||||
|
||||
这就是该框架的内容。现在你可以编译它:
|
||||
|
||||
```
|
||||
$ groovyc AwkEngine.groovy
|
||||
```
|
||||
|
||||
一点注释:
|
||||
|
||||
如果传入的参数不是一个文件,编译就会失败,并出现标准的 Groovy 堆栈跟踪,看起来像这样:
|
||||
|
||||
```
|
||||
Caught: java.io.FileNotFoundException: not-a-file (No such file or directory)
|
||||
java.io.FileNotFoundException: not-a-file (No such file or directory)
|
||||
at AwkEngine$_go_closure1.doCall(AwkEngine.groovy:46)
|
||||
```
|
||||
|
||||
OpenCSV 可能会返回 `String[]` 值,不像 Groovy 中的 `List` 值那样方便(例如,数组没有 `each {}`)。第 41-42 行将标题字段值数组转换为 list,因此第 57 行的 `fieldsByNumber` 可能也应该转换为 list。
|
||||
|
||||
### 在脚本中使用这个框架
|
||||
|
||||
下面是一个使用 `AwkEngine` 来处理 `/etc/group` 之类由冒号分隔并没有标题的文件的简单脚本:
|
||||
|
||||
```
|
||||
def ae = new AwkEngine(args, ':')
|
||||
int lineCount = 0
|
||||
ae.onBegin = {
|
||||
println “in begin”
|
||||
}
|
||||
ae.onEachLine = { fields, recordNumber, fileName, fileRecordNumber ->
|
||||
if (lineCount < 10)
|
||||
println “fileName $fileName fields $fields”
|
||||
lineCount++
|
||||
}
|
||||
ae.onEnd = {
|
||||
println “in end”
|
||||
println “$lineCount line(s) read”
|
||||
}
|
||||
|
||||
ae.go()
|
||||
```
|
||||
|
||||
第 1 行 调用的有两个参数的构造函数,传入了参数列表,并定义冒号为分隔符。
|
||||
|
||||
第 2 行定义一个脚本级的变量 `lineCount`,用来记录处理过的行数(注意,Groovy 闭包不要求定义在外部的变量为 `final`)。
|
||||
|
||||
第 3-5 行定义 `onBegin()` 闭包,在标准输出中打印出 “in begin” 字符串。
|
||||
|
||||
第 6-10 行定义 `onEachLine()` 闭包,打印文件名和前 10 行字段,无论是否为前 10 行,处理过的总行数 `lineCount` 都会自增。
|
||||
|
||||
第 11-14 行定义 `onEnd()` 闭包,打印 “in end” 字符串和处理过的总行数。
|
||||
|
||||
第 15 行运行脚本,使用 `AwkEngine`。
|
||||
|
||||
像下面一样运行一下脚本:
|
||||
|
||||
```
|
||||
$ groovy Test1Awk.groovy /etc/group
|
||||
in begin
|
||||
fileName /etc/group fields [root, x, 0, ]
|
||||
fileName /etc/group fields [daemon, x, 1, ]
|
||||
fileName /etc/group fields [bin, x, 2, ]
|
||||
fileName /etc/group fields [sys, x, 3, ]
|
||||
fileName /etc/group fields [adm, x, 4, syslog,clh]
|
||||
fileName /etc/group fields [tty, x, 5, ]
|
||||
fileName /etc/group fields [disk, x, 6, ]
|
||||
fileName /etc/group fields [lp, x, 7, ]
|
||||
fileName /etc/group fields [mail, x, 8, ]
|
||||
fileName /etc/group fields [news, x, 9, ]
|
||||
in end
|
||||
78 line(s) read
|
||||
$
|
||||
```
|
||||
|
||||
当然,编译框架类生成的 `.class` 文件需要在 classpath 中,这样才能正常运行。通常你可以用 `jar` 把这些 class 文件打包起来。
|
||||
|
||||
我非常喜欢 Groovy 对行为委托的支持,这在其他语言中需要各种诡异的手段。许多年来,Java 需要匿名类和相当多的额外代码。Lambda 已经在很大程度上解决了这个问题,但它们仍然不能引用其范围之外的非 final 变量。
|
||||
|
||||
下面是另一个更有趣的脚本,它很容易让人想起我对 awk 的典型使用方式:
|
||||
|
||||
```
|
||||
def ae = new AwkEngine(args, ';', true)
|
||||
ae.onBegin = {
|
||||
// nothing to do here
|
||||
}
|
||||
def regionCount = [:]
|
||||
ae.onEachLine = { fields, recordNumber, fileName, fileRecordNumber ->
|
||||
regionCount[fields.REGION] =
|
||||
(regionCount.containsKey(fields.REGION) ?
|
||||
regionCount[fields.REGION] : 0) +
|
||||
(fields.PERSONAS as Integer)
|
||||
}
|
||||
ae.onEnd = {
|
||||
regionCount.each { region, population ->
|
||||
println “Region $region population $population”
|
||||
}
|
||||
}
|
||||
|
||||
ae.go()
|
||||
```
|
||||
|
||||
第 1 行调用了三个函数的构造方法,`true` 表示这是“真正的 CSV” 文件,第一行为标题。由于它是西班牙语的文件,因此它的逗号表示数字的`点`,标准的分隔符是分号。
|
||||
|
||||
第 2-4 行定义 `onBegin()` 闭包,这里什么也不做。
|
||||
|
||||
第 5 行定义一个(空的)`LinkedHashmap`,键是 String 类型,值是 Integer 类型。数据文件来自于智利最近的人口普查,你要在这个脚本中计算出智利每个地区的人口数量。
|
||||
|
||||
第 6-11 行处理文件中的行(加上标题一共有 180,500 行)—— 请注意在这个案例中,由于你定义 第 1 行为 CSV 列的标题,因此 `fields` 参数会成为 `LinkedHashMap<String,String>` 实例。
|
||||
|
||||
第 7-10 行是 `regionCount` 映射计数增加,键是 `REGION` 字段的值,值是 `PERSONAS` 字段的值 —— 请注意,与 awk 不同,在 Groovy 中你不能在赋值操作的右边使用一个不存在的映射而期望得到空值或零值。
|
||||
|
||||
第 12-16 行,打印每个地区的人口数量。
|
||||
|
||||
第 17 行运行脚本,调用 `AwkEngine` 。
|
||||
|
||||
像下面一样运行一下脚本:
|
||||
|
||||
```
|
||||
$ groovy Test2Awk.groovy ~/Downloads/Censo2017/ManzanaEntidad_CSV/Censo*csv
|
||||
Region 1 population 330558
|
||||
Region 2 population 607534
|
||||
Region 3 population 286168
|
||||
Region 4 population 757586
|
||||
Region 5 population 1815902
|
||||
Region 6 population 914555
|
||||
Region 7 population 1044950
|
||||
Region 8 population 1556805
|
||||
Region 16 population 480609
|
||||
Region 9 population 957224
|
||||
Region 10 population 828708
|
||||
Region 11 population 103158
|
||||
Region 12 population 166533
|
||||
Region 13 population 7112808
|
||||
Region 14 population 384837
|
||||
Region 15 population 226068
|
||||
$
|
||||
```
|
||||
|
||||
以上为全部内容。对于那些喜欢 awk 但又希望得到更多的东西的人,我希望你能喜欢这种 Groovy 的方法。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/9/awk-groovy
|
||||
|
||||
作者:[Chris Hermansen][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lxbwolf](https://github.com/lxbwolf)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/clhermansen
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/browser_screen_windows_files.png
|
||||
[2]: https://opensource.com/article/22/8/music-tagging-framework-groovy
|
||||
[3]: https://opensource.com/downloads/awk-ebook
|
||||
[4]: http://regex.info/blog/2006-09-15/247
|
||||
[5]: http://opencsv.sourceforge.net/
|
||||
[6]: https://groovy.apache.org/download.html
|
||||
[7]: https://opensource.com/article/22/3/manage-java-versions-sdkman
|
||||
[8]: https://mvnrepository.com/artifact/com.opencsv/opencsv
|
@ -0,0 +1,231 @@
|
||||
[#]: subject: "Why do domain names sometimes end with a dot?"
|
||||
[#]: via: "https://jvns.ca/blog/2022/09/12/why-do-domain-names-end-with-a-dot-/"
|
||||
[#]: author: "Julia Evans https://jvns.ca/"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "lxbwolf"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15254-1.html"
|
||||
|
||||
为什么有时候域名的末尾有个点?
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202211/15/001222ytut3qvtau32f2p2.jpg)
|
||||
|
||||
大家好!今年早些时候,我在写《[DNS 是如何工作的][1]》 时,有人问我——为什么人们有时在域名的末尾加一个点?例如,如果你通过运行 `dig example.com` 查询 `example.com` 的 IP,你会看到一下内容:
|
||||
|
||||
```
|
||||
$ dig example.com
|
||||
example.com. 5678 IN A 93.184.216.34
|
||||
```
|
||||
|
||||
执行完 `dig` 命令后,`example.com` 有一个 `.` ——变成了 `example.com.`!发生了什么?
|
||||
|
||||
有些 DNS 工具也要求传给它的域名后加一个 `.`:如果你在使用 [miekg/dns][2] 时传给它 `example.com`,它会报错:
|
||||
|
||||
```
|
||||
// trying to send this message will return an error
|
||||
m := new(dns.Msg)
|
||||
m.SetQuestion("example.com", dns.TypeA)
|
||||
```
|
||||
|
||||
最初我以为我知道这个问题的答案(“呃,末尾的点意味着域名是完全限定的?”)。这是对的 —— 一个<ruby>完全限定域名<rt>fully qualified domain name</rt></ruby>(FQDN)是一个末尾有 `.` 的域名!
|
||||
|
||||
但是*为什么*末尾的点是有用且重要的呢?
|
||||
|
||||
### 在 DNS 的请求/响应中,域名的末尾并没有 “.”
|
||||
|
||||
我曾经(错误地)认为 “为什么末尾有一个点?”的答案可能是 “在 DNS 请求/响应中,域名末尾有一个 `.`,所以我们把它放进去,以匹配你的计算机实际发送/接收的内容”。但事实并不是这样!
|
||||
|
||||
当计算机发送 DNS 请求/响应时,域名的末尾并没有点。实际上,域名中*没有*点。
|
||||
|
||||
域名会被编码成一系列的长度/字符串对。例如,域名 `example.com` 被编码为这 13 个字节。
|
||||
|
||||
```
|
||||
7example3com0
|
||||
```
|
||||
|
||||
编码后的内容一个点也没有。一个 ASCII 域名(如 `example.com`)被转成了各种 DNS 软件的 DNS 请求/响应中使用的格式。
|
||||
|
||||
今天我们来讨论域名被转成 DNS 响应的一个地方:区域文件。
|
||||
|
||||
### 区域文件中域名末尾的 “.”
|
||||
|
||||
一些人管理域名的 DNS 记录的方法是创建一个被称为 “区域文件” 的文本文件,然后配置一些 DNS 服务器软件(如 `nsd` 或 `bind`)来为该区域文件中指定的 DNS 记录提供服务。
|
||||
|
||||
下面是一个对应 `example.com` 的示例区域文件:
|
||||
|
||||
```
|
||||
orange 300 IN A 1.2.3.4
|
||||
fruit 300 IN CNAME orange
|
||||
grape 3000 IN CNAME example.com.
|
||||
```
|
||||
|
||||
在这个文件中,任何不以 `.` 结尾的域名(比如 `orange`)后都会自动加上 `.example.com`。所以 `orange` 成了 `orange.example.com` 的简称。DNS 服务器从它的配置中得知这是一个 `example.com` 的区域文件,所以它知道在所有不以点结尾的名字后面自动添加 `example.com`。
|
||||
|
||||
我想这里的想法只是为了少打几个字符——如果要打出全称,区域文件会是这样:
|
||||
|
||||
```
|
||||
|
||||
orange.example.com. 300 IN A 1.2.3.4
|
||||
fruit.example.com. 300 IN CNAME orange.example.com.
|
||||
grape.example.com. 3000 IN CNAME example.com.
|
||||
|
||||
```
|
||||
|
||||
确实多了很多字符。
|
||||
|
||||
### 你也可以不通过区域文件来使用 DNS
|
||||
|
||||
尽管官方的 DNS RFC([RFC 1035][3])中定义了区域文件格式,但你也可以不通过区域文件来使用 DNS。例如,AWS Route 53 就不用区域文件来存储 DNS 记录!你可以通过 Web 界面或 API 来创建记录,我猜他们是用某种数据库而不是一堆文本文件来存储记录。
|
||||
|
||||
不过,Route 53(像许多其他 DNS 工具一样)确实支持导入和导出区域文件,这个功能或许在你更换 DNS 提供商时很有用。
|
||||
|
||||
### dig 命令输出中末尾的 “.”
|
||||
|
||||
现在我们来讨论下 `dig` 命令的输出:
|
||||
|
||||
```
|
||||
$ dig example.com
|
||||
; <<>> DiG 9.18.1-1ubuntu1.1-Ubuntu <<>> +all example.com
|
||||
;; global options: +cmd
|
||||
;; Got answer:
|
||||
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10712
|
||||
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
|
||||
|
||||
;; OPT PSEUDOSECTION:
|
||||
; EDNS: version: 0, flags:; udp: 65494
|
||||
;; QUESTION SECTION:
|
||||
;example.com. IN A
|
||||
|
||||
;; ANSWER SECTION:
|
||||
example.com. 81239 IN A 93.184.216.34
|
||||
```
|
||||
|
||||
有一件奇怪的事是,几乎每一行都以 `;;` 开头,这是怎么回事?`;` 是区域文件中的注释字符!
|
||||
|
||||
我想 `dig` 以这种奇怪的方式输出的原因可能是为了方便你粘贴这些内容到区域文件时,不用修改就可以直接用。
|
||||
|
||||
这也是 `example.com` 末尾有个 `.` 的原因 —— 区域文件要求域名末尾必须有点(否则它们会被解释为是相对于该区域的)。因此 `dig` 也这么处理了。
|
||||
|
||||
我真的希望 dig 有一个 `+human` 选项,以更人性化的方式打印出这些信息,但现在我太懒了,懒得花工夫去实际贡献代码来做这件事(而且我并不擅长 C),所以我只能在我的博客上抱怨一下 :)
|
||||
|
||||
### curl 命令输出中末尾的 “.”
|
||||
|
||||
我们来看下另一个末尾有 `.` 的例子:`curl`!
|
||||
|
||||
我家里有台计算机名为 `grapefruit`,其上运行着 Web 服务器。当我执行 `curl grapefruit` 时,会输出:
|
||||
|
||||
```
|
||||
$ curl grapefruit
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
||||
|
||||
<html>
|
||||
<head>
|
||||
......
|
||||
```
|
||||
|
||||
这样运行没问题!但是如果我在域名后加一个 `.` 会怎样呢?它报错了:
|
||||
|
||||
```
|
||||
$ curl grapefruit.
|
||||
curl: (6) Could not resolve host: grapefruit.
|
||||
```
|
||||
|
||||
发生了什么?为了搞清楚,我们需要先来学习下搜索域:
|
||||
|
||||
### 初识搜索域
|
||||
|
||||
当我执行 `curl grapefrult` 时,它是怎么被转成一个 DNS 请求的?你可能会认为我的计算机会向域名 `grapefruit` 发送一个请求,对吗?但事实并不是这样。
|
||||
|
||||
让我们用 `tcpdump` 来看看到底是什么域名在被查询。
|
||||
|
||||
```
|
||||
$ sudo tcpdump -i any port 53
|
||||
[...] A? grapefruit.lan. (32)
|
||||
```
|
||||
|
||||
实际上是向 `grapefruit.lan.` 发送的请求。为什么呢?
|
||||
|
||||
解释一下:
|
||||
|
||||
1. `curl` 调用函数 `getaddrinfo` 来查询 `grapefruit`
|
||||
2. `getaddrinfo` 查询了我计算机上的文件 `/etc/resolv.conf`
|
||||
3. `/etc/resolv.conf` 包含两行内容:
|
||||
```
|
||||
nameserver 127.0.0.53
|
||||
search lan
|
||||
```
|
||||
4. 因为有 `search lan` 这行内容,所以 `getaddrinfo` 在 `grapefruit` 的末尾添加了一个 `lan`,去查询 `grapefruit.lan`
|
||||
|
||||
### 什么时候搜索域被使用?
|
||||
|
||||
现在我们知道了一些奇怪的事情:当我们查询一个域名时,有时会有一个额外的东西(如 `lan`)被加到最后。但是什么时候会发生这种情况呢?
|
||||
|
||||
1. 如果我们在域名**末尾**添加一个 `.`,那么这时不会用到搜索域
|
||||
2. 如果域名**中间包含**一个 `.`(如 `example.com`),那么默认也不会用到搜索域。但是可以通过修改配置来改变处理逻辑(在 [ndots][4] 里有更详细的说明)
|
||||
|
||||
我们现在知道了 `curl grapefruit.` 与 `curl grapefruit` 结果不一样的原因——因为一个查询的是 `grapefruit.`,而另一个查询的是 `grapefruit.lan.`。
|
||||
|
||||
### 我的计算机怎么知道使用哪个搜索域呢?
|
||||
|
||||
当我连接路由时,它会通过 DHCP 告诉我它的搜索域是 `lan` —— 它也是通过这个方式给我的计算机分配 IP。
|
||||
|
||||
### 所以为什么要在域名末尾加一个点呢?
|
||||
|
||||
现在我们已经了解了区域文件和搜索域,下面是我认为的人们要在域名末尾加点的原因:
|
||||
|
||||
有两种情况下,域名会被修改,并在末尾添加其他东西。
|
||||
|
||||
* 在 `example.com` 的区域文件中,`grapefruit` 会被转为 `grapefruit.example.com`
|
||||
* 在我的本地网络(我的计算机已经配置了使用搜索域 `lan`),`grapefruit` 被转为 `grapefruit.lan`
|
||||
|
||||
因此,由于域名在某些情况下实际上可能被转成其他名字,人们就在结尾处加一个 `.`,以此来表示 “**这是域名,末尾不需要添加任何东西,这就是全部内容**”。否则会引起混乱。
|
||||
|
||||
“这就是全部内容”的技术术语是**“完全限定域名”**,简称为**“FQDN”**。所以 `google.com.` 是一个完全限定域名,而 `google.com` 不是。
|
||||
|
||||
我总是要提醒自己这样做的原因,因为我很少使用区域文件和搜索域,所以我经常觉得——“我当然是指 `google.com` 而不是 `google.com.something.else`! 我为什么要指其他东西?那太傻了!”
|
||||
|
||||
但是有些人确实在使用区域文件和搜索域(例如 Kubernetes 中使用了搜索域!),所以结尾的 `.` 很有用,可以让人确切的知道,不应该再添加其他东西。
|
||||
|
||||
### 什么时候在末尾添加 “.”?
|
||||
|
||||
以下是关于何时在域名末尾加 ". " 的几个简单说明:
|
||||
|
||||
**需要添加:配置 DNS 时**
|
||||
|
||||
在配置 DNS 时,使用完全限定域名从来都不是坏事。你不一定要这样做:非完全限定域名通常也能正常工作,但我从来没有遇到过不接受完全限定域名的 DNS 软件。
|
||||
|
||||
有些 DNS 软件需要这样做:现在我为 `jvns.ca` 使用的 DNS 服务器让我在域名的末尾加上 `.`(例如在 CNAME 记录中),并提示如果我不添加,它将在我输入的内容末尾加上 `.jvns.ca`。我不同意这个设计决定,但这不是什么大问题,我只是在最后加一个 `.`。
|
||||
|
||||
**不需要加:在浏览器中**
|
||||
|
||||
令人困惑的是,在浏览器中,在域名结尾处加一个 `.` *不能*正常运行。例如,如果我在浏览器中输入 `https://twitter.com.`,它就会报错。它会返回 404。
|
||||
|
||||
我认为这里发生的事情是,它将 HTTP `Host` 标头设置为 `Host:twitter.com.`,而对端的 Web 服务器则期望 `Host:twitter.com`。
|
||||
|
||||
同样地,`https://jvns.ca.` 由于某种原因,返回了一个 SSL 错误。
|
||||
|
||||
### 我认为相对域名在过去是比较常见的
|
||||
|
||||
最后一件事:我认为“相对”域名(比如我用 `grapefruit` 来指代我家的另一台计算机 `grapefruit.lan`)在过去更常用,因为 DNS 是在大学或其他有大型内部网络的大机构中开发的。
|
||||
|
||||
在今天的互联网上,使用“绝对”域名(如 `example.com`)似乎更为普遍。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://jvns.ca/blog/2022/09/12/why-do-domain-names-end-with-a-dot-/
|
||||
|
||||
作者:[Julia Evans][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[lxbwolf](https://github.com/lxbwolf)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://jvns.ca/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://wizardzines.com/zines/dns/
|
||||
[2]: https://github.com/miekg/dns
|
||||
[3]: https://www.rfc-editor.org/rfc/rfc1035#section-4.1.1
|
||||
[4]: https://pracucci.com/kubernetes-dns-resolution-ndots-options-and-why-it-may-affect-application-performances.html
|
@ -2,49 +2,52 @@
|
||||
[#]: via: "https://www.linuxtechi.com/install-kubernetes-cluster-on-debian/"
|
||||
[#]: author: "Pradeep Kumar https://www.linuxtechi.com/author/pradeep/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: " "
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: translator: "lxbwolf"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15302-1.html"
|
||||
|
||||
How to Install Kubernetes Cluster on Debian 11 with Kubeadm
|
||||
如何用 Kubeadm 在 Debian 11 上安装 Kubernetes 集群
|
||||
======
|
||||
Are you looking for an easy guide for installing Kubernetes Cluster on Debian 11 (Bullseye)?
|
||||
|
||||
The step-by-step guide on this page will demonstrate you how to install Kubernetes cluster on Debian 11 with Kubeadm utility.
|
||||
![][0]
|
||||
|
||||
Kubernetes (k8s) cluster contains master and worker nodes which are used to run containerized applications. Master node works as control plan and worker nodes offers environment for actual workload.
|
||||
> 你是否在寻找一份在 Debian 11(Bullseye)上安装 Kubernetes 集群的简易指南?
|
||||
|
||||
##### Prerequisites
|
||||
这份分步指南将向你展示如何使用 Kubeadm 工具在 Debian 11 上安装 Kubernetes 集群。
|
||||
|
||||
* Minimal Installed Debian 11
|
||||
Kubernetes(k8s)集群包含主控节点和工作节点,用于运行容器化的应用程序。主控节点作为控制平面,工作节点为实际工作负载提供环境。
|
||||
|
||||
前置条件:
|
||||
|
||||
* 已安装 Debian 11
|
||||
* 2 CPU / vCPU
|
||||
* 2 GB RAM
|
||||
* 20 GB free disk space
|
||||
* Sudo User with Admin rights
|
||||
* Stable Internet Connectivity
|
||||
* 20 GB 空闲硬盘空间
|
||||
* 有管理员权限的 sudo 用户
|
||||
* 稳定的网络连接
|
||||
|
||||
##### Lab Setup
|
||||
实验环境配置:
|
||||
|
||||
For the demonstration, I am using three Debian 11 systems with following details,
|
||||
在本文中,我使用了 3 个 Debian 11 系统的节点,配置如下
|
||||
|
||||
* Master Node (k8s-master) – 192.168.1.236
|
||||
* Worker Node 1 (k8s-worker1) – 192.168.1.237
|
||||
* Worker Node 2 (k8s-worker2) – 192.168.1.238
|
||||
* 主控节点(`k8s-master`) – 192.168.1.236
|
||||
* 工作节点 1(`k8s-worker1`) – 192.168.1.237
|
||||
* 工作节点 2(`k8s-worker2`) – 192.168.1.238
|
||||
|
||||
Without any further delay, let’s jump into the installation steps.
|
||||
事不宜迟,我们直接进入安装步骤。
|
||||
|
||||
### 1 ) Set Host Name and update /etc/hosts file
|
||||
### 1、设置主机名和更新 /etc/hosts 文件
|
||||
|
||||
Use hostnamectl command to set the hostname on master and worker nodes.
|
||||
在主控节点和工作节点上使用 `hostnamectl` 命令来设置主机名:
|
||||
|
||||
```
|
||||
$ sudo hostnamectl set-hostname "k8s-master" // Run on master node
|
||||
$ sudo hostnamectl set-hostname "k8s-worker1" // Run on 1st worker node
|
||||
$ sudo hostnamectl set-hostname "k8s-worker2" // Run on 2nd worker node
|
||||
$ sudo hostnamectl set-hostname "k8s-master" // 在主控节点运行
|
||||
$ sudo hostnamectl set-hostname "k8s-worker1" // 在工作节点 1 运行
|
||||
$ sudo hostnamectl set-hostname "k8s-worker2" // 在工作节点 2 运行
|
||||
```
|
||||
|
||||
Add the following entries in /etc/hosts file on all the nodes,
|
||||
在所有节点的 `/etc/hosts` 文件末尾添加下面几行内容:
|
||||
|
||||
```
|
||||
192.168.1.236 k8s-master
|
||||
@ -52,20 +55,20 @@ Add the following entries in /etc/hosts file on all the nodes,
|
||||
192.168.1.238 k8s-worker2
|
||||
```
|
||||
|
||||
### 2) Disable Swap on all nodes
|
||||
### 2、在所有节点上关闭交换分区
|
||||
|
||||
For kubelet to work smoothly, it is recommended to disable swap. Run following commands on master and worker nodes to turn off swap.
|
||||
我推荐关闭交换分区,以便更丝滑地使用 `kubelet`。在所有节点上执行以下命令来关闭交换分区:
|
||||
|
||||
```
|
||||
$ sudo swapoff -a
|
||||
$ sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
|
||||
```
|
||||
|
||||
### 3) Configure Firewall Rules for Kubernetes Cluster
|
||||
### 3、配置 Kubernetes 集群相关的防火墙规则
|
||||
|
||||
In case, OS firewall is enabled on your debian systems then allow following ports on master and worker nodes respectively.
|
||||
如果你的操作系统防火墙是打开的,请分别在主控节点和工作节点允许以下的端口。
|
||||
|
||||
On Master node, run
|
||||
在主控节点,执行:
|
||||
|
||||
```
|
||||
$ sudo ufw allow 6443/tcp
|
||||
@ -78,7 +81,7 @@ $ sudo ufw allow 10255/tcp
|
||||
$ sudo ufw reload
|
||||
```
|
||||
|
||||
On Worker Nodes,
|
||||
在工作节点,执行:
|
||||
|
||||
```
|
||||
$ sudo ufw allow 10250/tcp
|
||||
@ -86,13 +89,13 @@ $ sudo ufw allow 30000:32767/tcp
|
||||
$ sudo ufw reload
|
||||
```
|
||||
|
||||
Note: If firewall is disabled on your Debian 11 systems, then you can skip this step.
|
||||
注意:如果你的 Debian 11 系统防火墙是关闭的,可以跳过此步骤。
|
||||
|
||||
### 4) Install Containerd run time on all nodes
|
||||
### 4、在所有节点安装 Containerd 运行时
|
||||
|
||||
Containerd is the industry standard container run time, we must install containerd on all master and worker nodes.
|
||||
Containerd 是容器运行时的行业标准,所有节点必须安装 Containerd。
|
||||
|
||||
Before installing containerd, set the following kernel parameters on all the nodes.
|
||||
先在所有节点上配置如下的核心参数,再安装 Containerd。
|
||||
|
||||
```
|
||||
$ cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
|
||||
@ -110,28 +113,26 @@ net.bridge.bridge-nf-call-ip6tables = 1
|
||||
EOF
|
||||
```
|
||||
|
||||
To make above changes into the effect, run
|
||||
运行如下命令,以使上面的更改生效:
|
||||
|
||||
```
|
||||
$ sudo sysctl --system
|
||||
```
|
||||
|
||||
Now, install conatinerd by running following apt command on all the nodes.
|
||||
现在,在所有节点上运行如下 `apt` 命令来安装 Conatinerd。
|
||||
|
||||
```
|
||||
$ sudo apt update
|
||||
$ sudo apt -y install containerd
|
||||
```
|
||||
|
||||
Configure containerd so that it works with Kubernetes, run beneath command on all the nodes
|
||||
在所有节点上运行如下命令来配置 Containerd:
|
||||
|
||||
```
|
||||
$ containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
|
||||
```
|
||||
|
||||
Set cgroupdriver to systemd on all the nodes,
|
||||
|
||||
Edit the file ‘/etc/containerd/config.toml’ and look for the section ‘[plugins.”io.containerd.grpc.v1.cri”.containerd.runtimes.runc.options]’ and add SystemdCgroup = true
|
||||
在所有节点上设置 `cgroupdriver` 为 `systemd`,编辑 `/etc/containerd/config.toml` 文件,找到 `[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]` 部分,添加一行内容:`SystemdCgroup = true`:
|
||||
|
||||
```
|
||||
$ sudo vi /etc/containerd/config.toml
|
||||
@ -139,18 +140,18 @@ $ sudo vi /etc/containerd/config.toml
|
||||
|
||||
![systemdCgroup-true-containerd-config-toml][1]
|
||||
|
||||
Save and close the file.
|
||||
保存并退出文件。
|
||||
|
||||
Restart and enable containerd service on all the nodes,
|
||||
在所有节点上重启并启用 `containerd` 服务:
|
||||
|
||||
```
|
||||
$ sudo systemctl restart containerd
|
||||
$ sudo systemctl enable containerd
|
||||
```
|
||||
|
||||
### 5) Enable Kubernetes Apt Repository
|
||||
### 5、添加 Kubernetes Apt 库
|
||||
|
||||
Enable Kubernetes apt repository on all the nodes, run
|
||||
执行以下命令,添加 Kubernetes Apt 库:
|
||||
|
||||
```
|
||||
$ sudo apt install gnupg gnupg2 curl software-properties-common -y
|
||||
@ -158,9 +159,9 @@ $ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dea
|
||||
$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
|
||||
```
|
||||
|
||||
### 6) Install Kubelet, Kubectl and Kubeadm on all nodes
|
||||
### 6、在所有节点上安装 kubelet、kubectl 和 kubeadm
|
||||
|
||||
Run the following apt commands on all the nodes to install Kubernetes cluster components like kubelet, kubectl and Kubeadm.
|
||||
在所有节点上执行以下 `apt` 命令,安装 Kubernetes 集群组件,如 `kubelet`、`kubectl` 以及 `kubeadm`。
|
||||
|
||||
```
|
||||
$ sudo apt update
|
||||
@ -168,21 +169,21 @@ $ sudo apt install kubelet kubeadm kubectl -y
|
||||
$ sudo apt-mark hold kubelet kubeadm kubectl
|
||||
```
|
||||
|
||||
### 7) Create Kubernetes Cluster with Kubeadm
|
||||
### 7、使用 Kubeadm 创建 Kubernetes 集群
|
||||
|
||||
Now, we are all set to create Kubernetes cluster, run following command only from master node,
|
||||
现在我们可以创建 Kubernetes 集群了,在主控节点上执行以下命令:
|
||||
|
||||
```
|
||||
$ sudo kubeadm init --control-plane-endpoint=k8s-master
|
||||
```
|
||||
|
||||
Output,
|
||||
命令输出:
|
||||
|
||||
![Kubernetes-Control-Plane-Initialization-Debian11][2]
|
||||
|
||||
Above output confirms that control plane has been initialized successfully. In the output, we have commands for regular user for interacting with the cluster and also the command to join any worker node to this cluster.
|
||||
出现以上内容,说明控制平面初始化成功。在输出中,有普通用户与集群交互的命令,也有把任何工作节点加入到集群的命令。
|
||||
|
||||
To start interacting with cluster, run following commands on master node,
|
||||
要开始与集群进行交互,请在主控节点上运行以下命令:
|
||||
|
||||
```
|
||||
$ mkdir -p $HOME/.kube
|
||||
@ -190,36 +191,35 @@ $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
|
||||
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
|
||||
```
|
||||
|
||||
Run following kubectl command to get nodes and cluster information,
|
||||
执行以下 `kubectl` 命令来获取节点和集群的信息:
|
||||
|
||||
```
|
||||
$ kubectl get nodes
|
||||
$ kubectl cluster-info
|
||||
```
|
||||
|
||||
Output of above commands,
|
||||
以上命令的输出:
|
||||
|
||||
![Nodes-Cluster-Info-Kubectl][3]
|
||||
|
||||
Join both the worker nodes to the cluster by running ‘Kubeadm join’ command.
|
||||
通过执行 `kubeadm join` 命令来把两个工作节点加入到集群。
|
||||
|
||||
Note: Copy the exact command from the output of ‘kubeadm init’ command. In my case, following is the command
|
||||
注意:请从 `kubeadm init` 命令的输出中复制完整的命令。在我的例子中,命令如下:
|
||||
|
||||
```
|
||||
$ sudo kubeadm join k8s-master:6443 --token ta622t.enl212euq7z87mgj \
|
||||
|
||||
--discovery-token-ca-cert-hash sha256:2be58f54458d0e788c96b8841f811069019161f9a3dd8502a38c773e5c6ead17
|
||||
```
|
||||
|
||||
Output from Worker Node 1,
|
||||
在工作节点 1 上的输出如下:
|
||||
|
||||
![Worker-Node1-Join-Kunernetes-Cluster][4]
|
||||
|
||||
Output from Worker Nod 2 ,
|
||||
在工作节点 2 上的输出如下:
|
||||
|
||||
![Worker-Node2-Join-Kubernetes-Cluster][5]
|
||||
|
||||
Check the nodes status by running following command from master node,
|
||||
在主控节点上执行以下命令,检查节点的状态:
|
||||
|
||||
```
|
||||
$ kubectl get nodes
|
||||
@ -230,21 +230,21 @@ k8s-worker2 NotReady <none> 2m19s v1.25.0
|
||||
$
|
||||
```
|
||||
|
||||
To make nodes status ready, we must install POD network addons like Calico or flannel.
|
||||
为了使节点状态变为 `ready`,我们需要安装<ruby>容器荚<rt>Pod</rt></ruby>网络插件,如 Calico 或 flannel。
|
||||
|
||||
### 8) Install Calico Pod Network Addon
|
||||
### 8、安装 Calico Pod 网络插件
|
||||
|
||||
On the master node, run beneath command to install calico,
|
||||
在主控节点上执行以下命令安装 Calico:
|
||||
|
||||
```
|
||||
$ kubectl apply -f https://projectcalico.docs.tigera.io/manifests/calico.yaml
|
||||
```
|
||||
|
||||
Output,
|
||||
输出:
|
||||
|
||||
![Install-calico-pod-network-addon-debian11][6]
|
||||
|
||||
Allow Calico ports in OS firewall, run beneath ufw commands on all the nodes,
|
||||
在所有节点上执行以下命令,配置防火墙允许 Calico 的端口:
|
||||
|
||||
```
|
||||
$ sudo ufw allow 179/tcp
|
||||
@ -255,7 +255,7 @@ $ sudo ufw allow 4789/udp
|
||||
$ sudo ufw reload
|
||||
```
|
||||
|
||||
Verify the status of Calico pods, run
|
||||
执行以下命令检查下 Calico 的状态:
|
||||
|
||||
```
|
||||
$ kubectl get pods -n kube-system
|
||||
@ -263,15 +263,15 @@ $ kubectl get pods -n kube-system
|
||||
|
||||
![Calico-Pods-Status-Kuberenetes-Debian11][7]
|
||||
|
||||
Perfect, now check nodes status again,
|
||||
完美!现在再检查下节点状态:
|
||||
|
||||
![Nodes-status-after-calico-Installation][8]
|
||||
|
||||
Great, output above confirms that master and worker nodes are in ready status. Now, this cluster is ready for the workload.
|
||||
非常棒!上面的输出说明主控节点和工作节点的状态都是 `ready`。现在这个集群可以正常工作了。
|
||||
|
||||
### 9) Test Kubernetes Cluster Installation
|
||||
### 9、检查 Kubernetes 集群安装是否正确
|
||||
|
||||
To test Kubernetes cluster installation, let’s try to deploy nginx based application via deployment. Run beneath commands,
|
||||
我们尝试通过 `deployment` 命令来部署基于 Nginx 的应用程序,来验证 Kubernetes 集群的安装是否正确。执行以下命令:
|
||||
|
||||
```
|
||||
$ kubectl create deployment nginx-app --image=nginx --replicas 2
|
||||
@ -279,13 +279,13 @@ $ kubectl expose deployment nginx-app --name=nginx-web-svc --type NodePort --por
|
||||
$ kubectl describe svc nginx-web-svc
|
||||
```
|
||||
|
||||
Output of above commands,
|
||||
以上命令的输出:
|
||||
|
||||
![Nginx-Based-App-Kubernetes-Cluster-Debian11][9]
|
||||
|
||||
Try to access the nginx based application using following curl command along with the nodeport 30036.
|
||||
使用以下的 `curl` 命令通过节点端口 30036 来访问基于 nginx 的应用程序。
|
||||
|
||||
Note : In the curl command we can use either of worker node’s hostname.
|
||||
注意:在 `curl` 命令中,可以使用两个工作节点任一的主机名。
|
||||
|
||||
```
|
||||
$ curl http://k8s-worker1:30036
|
||||
@ -293,9 +293,9 @@ $ curl http://k8s-worker1:30036
|
||||
|
||||
![Access-Nginx-Based-App-via-NodePort-Kubernetes-Debian11][10]
|
||||
|
||||
Above command’s output confirm that we are able to access our nginx based application.
|
||||
以上的输出说明我们可以正常访问基于 nginx 的应用程序了。
|
||||
|
||||
That’s all from this guide, I hope you have found it informative and able to install Kubernetes cluster on Debian 11 smoothly. Kindly do post your queries and feedback in below comments section.
|
||||
以上为全部内容。希望本文对你有用,参照本文可以在 Debian 11 上正常安装 Kubernetes 集群。如有任何问题,请在下面评论区告诉我。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -303,8 +303,8 @@ via: https://www.linuxtechi.com/install-kubernetes-cluster-on-debian/
|
||||
|
||||
作者:[Pradeep Kumar][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
译者:[lxbwolf](https://github.com/lxbwolf)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
@ -320,3 +320,4 @@ via: https://www.linuxtechi.com/install-kubernetes-cluster-on-debian/
|
||||
[8]: https://www.linuxtechi.com/wp-content/uploads/2022/09/Nodes-status-after-calico-Installation.png
|
||||
[9]: https://www.linuxtechi.com/wp-content/uploads/2022/09/Nginx-Based-App-Kubernetes-Cluster-Debian11.png
|
||||
[10]: https://www.linuxtechi.com/wp-content/uploads/2022/09/Access-Nginx-Based-App-via-NodePort-Kubernetes-Debian11.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202211/30/091928zlxbvttw58x6rztw.jpg
|
@ -0,0 +1,354 @@
|
||||
[#]: subject: "Execute Commands On Remote Linux Systems Via SSH"
|
||||
[#]: via: "https://ostechnix.com/execute-commands-on-remote-linux-systems-via-ssh/"
|
||||
[#]: author: "sk https://ostechnix.com/author/sk/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "MjSeven"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15263-1.html"
|
||||
|
||||
通过 SSH 在远程 Linux 系统上执行命令
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202211/17/163910g9u42ssfcuk9c290.jpg)
|
||||
|
||||
> 通过安全的网络连接在远程计算机上调用命令或程序。
|
||||
|
||||
有一天,我正在测试如何在 [将文件或目录复制到多个位置和系统时保持完整的文件权限][1]。当我想检查远程系统上的文件权限时,我必须通过 SSH 登录它并检查属性。从远程系统多次登录和注销的过程让我有点烦,我想,如果我可以**在远程 Linux 系统上通过 SSH 执行命令**就好了。
|
||||
|
||||
幸运的是,在浏览了 `ssh` 命令的手册页后,我找到了一个解决办法。
|
||||
|
||||
如果你想知道如何本地运行远程系统上运行命令或脚本,而不登录到远程系统,下面的内容会告诉你如何做。
|
||||
|
||||
### 1、通过 SSH 在远程 Linux 系统上执行命令
|
||||
|
||||
从本地系统通过 SSH 在远程系统上运行命令或脚本的典型方法是:
|
||||
|
||||
```
|
||||
$ ssh <username@IP_Address-or-Doman_name> <Command-or-Script>
|
||||
```
|
||||
|
||||
允许我给你们举几个例子:
|
||||
|
||||
#### 1.1、通过 SSH 在远程系统上运行单个命令
|
||||
|
||||
假设你想要 [查找远程 Linux 系统的内核详细信息][2]。为此,只需运行:
|
||||
|
||||
```
|
||||
$ ssh sk@192.168.225.22 uname -a
|
||||
```
|
||||
|
||||
这里,
|
||||
|
||||
* `sk` 是远程系统的用户名,
|
||||
* `192.168.225.22` 是远程系统的 IP 地址,
|
||||
* `uname -a` 是我想在远程系统上运行的命令。
|
||||
|
||||
示例输出:
|
||||
|
||||
![通过 SSH 在远程 Linux 系统上执行命令][3]
|
||||
|
||||
看到没?我并没有实际登录到远程系统,但通过 SSH 在远程系统上执行了 `uname` 命令,并在本地系统的终端上显示了输出。
|
||||
|
||||
你还可以像下面这样用引号指定命令。
|
||||
|
||||
```
|
||||
$ ssh sk@192.168.225.22 "uname -a"
|
||||
```
|
||||
|
||||
或者,
|
||||
|
||||
```
|
||||
$ ssh sk@192.168.225.22 'uname -a'
|
||||
```
|
||||
|
||||
如果你已经 [更改了 SSH 协议的默认端口][4],只需使用 `-p` 参数指定它。
|
||||
|
||||
```
|
||||
$ ssh -p 2200 sk@192.168.225.22 uname -a
|
||||
```
|
||||
|
||||
#### 1.2、通过 SSH 在远程主机上执行多个命令
|
||||
|
||||
你还可以在远程主机上运行多个命令,方法是将它们放在引号中。
|
||||
|
||||
```
|
||||
$ ssh sk@192.168.225.22 "uname -r && lsb_release -a"
|
||||
```
|
||||
|
||||
或者:
|
||||
|
||||
```
|
||||
$ ssh sk@192.168.225.22 "uname -r ; lsb_release -a"
|
||||
```
|
||||
|
||||
上面的命令将显示我的 Ubuntu 服务器的内核版本和发行版详细信息。
|
||||
|
||||
示例输出:
|
||||
|
||||
![在 Linux 上通过 SSH 在远程主机上运行多个命令][5]
|
||||
|
||||
正如一位读者在下面的评论部分提到的那样,你应该用引号指定多个命令。如果不使用引号,第一个命令将在远程系统上执行,第二个命令将仅在本地计算机上执行。整个带引号的命令将按预期在远程计算机上运行。
|
||||
|
||||
> **提示:** 了解 `&&` 和 `;` 在命令中的区别:
|
||||
>
|
||||
> `&&` 操作符只有在第一个命令成功时才执行第二个命令。
|
||||
>
|
||||
> 示例:
|
||||
>
|
||||
> ```
|
||||
> sudo apt-get update && sudo apt-get upgrade
|
||||
> ```
|
||||
>
|
||||
> 在上述示例中,如果第一个命令成功,才会执行 `sudo apt-get upgrade`。否则,它将不会运行。
|
||||
>
|
||||
> `;` 操作符会执行第二个命令,无论第一个命令是成功还是失败。
|
||||
>
|
||||
> 示例:
|
||||
>
|
||||
> ```
|
||||
> sudo apt-get update ; sudo apt-get upgrade
|
||||
> ```
|
||||
>
|
||||
> 在上述示例中,即使第一个命令失败,`sudo apt-get upgrade` 也会执行。
|
||||
|
||||
#### 1.3、通过 SSH 在远程机器上调用有 sudo 权限的命令
|
||||
|
||||
有些命令需要 `sudo` 权限才能运行。例如,以下命令将在我的远程系统上安装 `apache2`。
|
||||
|
||||
```
|
||||
$ ssh -t sk@192.168.225.22 sudo apt install apache2
|
||||
```
|
||||
|
||||
示例输出:
|
||||
|
||||
![通过 SSH 在远程机器上运行有 Sudo 权限的命令][6]
|
||||
|
||||
注意到了吗?我在上面的命令中使用了 `-t` 标志,我们需要使用它来强制进行伪终端分配。它用于在远程机器上执行任意基于屏幕的程序,这非常有用。例如,在实现菜单服务时。
|
||||
|
||||
另外,我输入了**两次**密码。第一次是远程用户的密码,以便从本地系统通过 SSH 访问远程系统,第二次是为了向远程用户赋予 sudo 权限,以便安装应用程序(在本例中为 apache2)。
|
||||
|
||||
让我们用以下命令检查 Apache 服务是否正在运行:
|
||||
|
||||
```
|
||||
$ ssh -t sk@192.168.225.22 sudo systemctl status apache2
|
||||
sk@192.168.225.22's password:
|
||||
[sudo] password for sk:
|
||||
● apache2.service - The Apache HTTP Server
|
||||
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
|
||||
Drop-In: /lib/systemd/system/apache2.service.d
|
||||
└─apache2-systemd.conf
|
||||
Active: active (running) since Thu 2019-12-19 11:08:03 UTC; 52s ago
|
||||
Main PID: 5251 (apache2)
|
||||
Tasks: 55 (limit: 2318)
|
||||
CGroup: /system.slice/apache2.service
|
||||
├─5251 /usr/sbin/apache2 -k start
|
||||
├─5253 /usr/sbin/apache2 -k start
|
||||
└─5254 /usr/sbin/apache2 -k start
|
||||
|
||||
Dec 19 11:08:03 ubuntuserver systemd[1]: Starting The Apache HTTP Server...
|
||||
Dec 19 11:08:03 ubuntuserver apachectl[5227]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 2409:4072:51f:a1b6:a00:27ff:f
|
||||
Dec 19 11:08:03 ubuntuserver systemd[1]: Started The Apache HTTP Server.
|
||||
```
|
||||
|
||||
同样的,我们可以通过 SSH 在本地系统上运行远程系统上的任何命令或脚本。
|
||||
|
||||
#### 1.4、通过 SSH 在远程系统上运行本地脚本
|
||||
|
||||
让我们在本地系统上创建一个简单的脚本来显示关于远程系统的发行版名称、包管理和基本细节等。
|
||||
|
||||
```
|
||||
$ vi system_information.sh
|
||||
```
|
||||
|
||||
添加以下行:
|
||||
|
||||
```
|
||||
#!/bin/bash
|
||||
#Name: Display System Details
|
||||
#Owner: OSTechNIx
|
||||
#----------------------------
|
||||
echo /etc/*_ver* /etc/*-rel*; cat /etc/*_ver* /etc/*-rel*
|
||||
```
|
||||
|
||||
按下 `ESC` 键,输入 `:wq` 保存退出。
|
||||
|
||||
现在,通过 SSH 命令在远程系统上运行这个脚本:
|
||||
|
||||
```
|
||||
$ ssh sk@192.168.225.22 'bash -s' < system_information.sh
|
||||
```
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
sk@192.168.225.22's password:
|
||||
/etc/debian_version /etc/lsb-release /etc/os-release
|
||||
buster/sid
|
||||
DISTRIB_ID=Ubuntu
|
||||
DISTRIB_RELEASE=18.04
|
||||
DISTRIB_CODENAME=bionic
|
||||
DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS"
|
||||
NAME="Ubuntu"
|
||||
VERSION="18.04.2 LTS (Bionic Beaver)"
|
||||
ID=ubuntu
|
||||
ID_LIKE=debian
|
||||
PRETTY_NAME="Ubuntu 18.04.2 LTS"
|
||||
VERSION_ID="18.04"
|
||||
HOME_URL="https://www.ubuntu.com/"
|
||||
SUPPORT_URL="https://help.ubuntu.com/"
|
||||
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
|
||||
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
|
||||
VERSION_CODENAME=bionic
|
||||
UBUNTU_CODENAME=bionic
|
||||
```
|
||||
|
||||
如果你没有在上面的命令中指定 `bash -s`,你将获得远程系统的详细信息,但伪终端不会被分配。
|
||||
|
||||
#### 1.5、将远程主机的命令输出保存到本地主机
|
||||
|
||||
如果你希望与支持团队或同事共享远程系统上运行的命令输出,那么这非常有用。
|
||||
|
||||
以下命令将通过 SSH 在远程系统运行 `du -ah`,并将输出保存在本地系统的 `diskusage.txt` 文件中。
|
||||
|
||||
```
|
||||
$ ssh sk@192.168.225.22 du -ah > diskusage.txt
|
||||
```
|
||||
|
||||
然后,你可以通过使用 `cat` 命令或文本编辑器查看 `diskusage.txt` 文件来分析磁盘使用细节。
|
||||
|
||||
```
|
||||
$ cat diskusage.txt
|
||||
4.0K ./.profile
|
||||
4.0K ./.gnupg/private-keys-v1.d
|
||||
8.0K ./.gnupg
|
||||
76K ./data/image.jpg
|
||||
128K ./data/file.pdf
|
||||
20K ./data/text.docx
|
||||
5.9M ./data/audio.mp3
|
||||
6.1M ./data
|
||||
0 ./.sudo_as_admin_successful
|
||||
4.0K ./pacman?inline=false
|
||||
4.0K ./.bash_logout
|
||||
4.0K ./.wget-hsts
|
||||
4.0K ./.bash_history
|
||||
0 ./.cache/motd.legal-displayed
|
||||
4.0K ./.cache
|
||||
4.0K ./deb-pacman_1.0-0.deb
|
||||
4.0K ./.bashrc
|
||||
6.2M .
|
||||
```
|
||||
|
||||
#### 1.6、配置 SSH 密钥认证,避免输入密码
|
||||
|
||||
如果你经常在远程系统上运行命令,你可能需要配置基于 SSH 密钥的身份验证,以便每次跳过密码输入。更多细节可以在以下链接中找到。
|
||||
|
||||
> **[Linux 系统下如何配置 SSH 密钥认证][7]**
|
||||
|
||||
配置了基于 SSH 密钥的认证后,我们可以通过 SSH 在远程机器上执行命令,从而不需要输入密码:
|
||||
|
||||
```
|
||||
$ ssh sk@192.168.225.22 sudo apt update
|
||||
```
|
||||
|
||||
### 2、通过 sshpass 在远程机器上运行命令
|
||||
|
||||
如果你不想配置基于 SSH 密钥的身份验证,你可以使用 `sshpass` 实用程序。
|
||||
|
||||
#### 2.1、什么是 sshpass?
|
||||
|
||||
`sshpass` 是为使用键盘交互密码身份验证模式运行 ssh 而设计的,但它以非交互的方式。简单来说,`sshpass` 提供了非交互式的方式来验证 SSH 会话。
|
||||
|
||||
SSH 使用直接 TTY 访问来确保密码确实是由交互式键盘用户发出的。`sshpass` 在一个专用 tty 中运行 SSH,让它误以为从交互用户那里获得了密码。
|
||||
|
||||
#### 2.2、在 Linux 中安装 sshpass
|
||||
|
||||
在许多 Linux 发行版的默认仓库中都有 `sshpass` 实用程序。例如,在 Debian、Ubuntu 及其衍生版本中,你可以使用下面的命令来安装 `sshpass`:
|
||||
|
||||
```
|
||||
$ sudo apt install sshpass
|
||||
```
|
||||
|
||||
#### 2.3、通过 SSH 和 sshpass 在远程机器上执行命令
|
||||
|
||||
`sshpass` 可以通过参数接受密码,或者通过环境变量读取密码,也可以从文本文件中读取密码。
|
||||
|
||||
**警告:** 所有这些方法都是 **高度不安全的**。所有系统用户都可以通过 `ps` 命令看到命令中的密码。**不建议**在生产中使用这些方法。最好使用基于密钥的身份验证。
|
||||
|
||||
让我们看看每种方法的示例。
|
||||
|
||||
##### 将密码作为参数提供
|
||||
|
||||
将密码作为参数提供,使用 `-p` 选项,如下所示:
|
||||
|
||||
```
|
||||
$ sshpass -p <remote-password> ssh remoteuser@ip-address <command-to-execute>
|
||||
```
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
$ sshpass -p ubuntu ssh ostechnix@192.168.1.30 uname -a
|
||||
```
|
||||
|
||||
其中,
|
||||
|
||||
* `-p ubuntu` - 提供远程系统的密码。
|
||||
* `ostechnix@192.168.1.30` - 远程系统用户名和地址。
|
||||
* `uname -a` - 要在远程计算机上执行的命令。
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
Linux Ubuntu22CT 5.15.60-1-pve #1 SMP PVE 5.15.60-1 (Mon, 19 Sep 2022 17:53:17 +0200) x86_64 x86_64 x86_64 GNU/Linux
|
||||
```
|
||||
|
||||
##### 密码作为环境变量提供
|
||||
|
||||
在这个方法中,我们声明一个名为 `SSHPASS` 的环境变量,用远程环境的密码作为其值。然后我们使用 `-e` 标志,如下所示:
|
||||
|
||||
```
|
||||
$ SSHPASS=ubuntu sshpass -e ssh ostechnix@192.168.1.30 uname -a
|
||||
```
|
||||
|
||||
##### 从文本文件中读取密码
|
||||
|
||||
使用 `echo` 命令在文本文件中追加密码:
|
||||
|
||||
```
|
||||
$ echo "ubuntu" > mypassword.txt
|
||||
```
|
||||
|
||||
现在,将密码文件传递给带有 `-f` 标志的 `sshpass`,如下所示:
|
||||
|
||||
```
|
||||
$ sshpass -f mypassword.txt ssh ostechnix@192.168.1.30 uname -a
|
||||
```
|
||||
|
||||
![通过 SSH 和 sshpass 在远程机器上执行命令][8]
|
||||
|
||||
### 总结
|
||||
|
||||
在本教程中,我们学习了一些通过安全的网络连接在远程计算机上调用命令或程序的方法。在所有的方法中,`sshpass` 方法是最不安全的,建议用户避免在生产系统中使用它。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://ostechnix.com/execute-commands-on-remote-linux-systems-via-ssh/
|
||||
|
||||
作者:[sk][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[MjSeven](https://github.com/MjSeven)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://ostechnix.com/author/sk/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://ostechnix.com/how-to-keep-ownership-and-file-permissions-intact-when-copying-files-or-directories/
|
||||
[2]: https://ostechnix.com/find-out-the-linux-distribution-name-version-and-kernel-details/
|
||||
[3]: https://ostechnix.com/wp-content/uploads/2019/12/Execute-Commands-On-Remote-Linux-Systems-Via-SSH.gif
|
||||
[4]: https://ostechnix.com/how-to-change-apache-ftp-and-ssh-default-port-to-a-custom-port-part-3/
|
||||
[5]: https://ostechnix.com/wp-content/uploads/2019/12/Run-multiple-commands-on-remote-systems-via-SSH-on-Linux.png
|
||||
[6]: https://ostechnix.com/wp-content/uploads/2019/12/Run-commands-with-sudo-privileges-on-remote-systems-via-SSH.png
|
||||
[7]: https://ostechnix.com/configure-ssh-key-based-authentication-linux/
|
||||
[8]: https://ostechnix.com/wp-content/uploads/2022/09/Execute-Commands-On-Remote-Machines-Over-SSH-With-sshpass.png
|
@ -0,0 +1,247 @@
|
||||
[#]: subject: "5 Best Python IDE(s) and Code Editor(s)"
|
||||
[#]: via: "https://www.debugpoint.com/5-best-python-ide-code-editor/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15288-1.html"
|
||||
|
||||
6 个最好的 Python IDE 和代码编辑器
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 我们列出了 2022 年适用于 Linux 和 Windows 的六个最佳 Python 代码编辑器。
|
||||
|
||||
如今,[Python][1] 无处不在,它可以说是现代版的 C 语言编程语言。从网站、应用程序、数据科学项目、人工智能到物联网设备,你可以发现 Python 无处不在。因此,作为这十年来流行的编程语言,了解 Python 的开发环境是很有必要的,开发人员用它创建应用程序,特别是如果你是刚刚开始学习 Python 编程,更需要了解 Python 开发环境。
|
||||
|
||||
许多 Python 开发环境都提供了可以满足你需求的功能和工具。其中有些环境对学习 Python 的初学者很有用,而另外一些用户则适用于重型 Python 开发和复杂的设置。在这里,在这篇文章中,我将谈一谈其中最好的几个,这将有助于你根据自己的需要和使用情况选择一个。
|
||||
|
||||
### 最好的 Python 编码编辑器
|
||||
|
||||
这个榜单上有以下几个编辑器:
|
||||
|
||||
1. Visual Studio Code
|
||||
2. Eclipse
|
||||
3. PyCharm
|
||||
4. Spyder
|
||||
5. Sublime Text
|
||||
6. Thonny
|
||||
|
||||
#### 1、Visual Studio Code
|
||||
|
||||
![Visual Studio Code][46]
|
||||
|
||||
尽管它是微软创造的,但 Visual Studio Code 是最好的代码编辑器之一。不仅是 Python,对于所有流行和趋势的编程语言都是。
|
||||
|
||||
它具有语法高亮、代码补完、调试、代码片段、内置 Git 等诸如此类的功能。对于新手来说,它有点复杂,但也只需几个小时就能学会。
|
||||
|
||||
然而,它是用 Electron 框架构建的,可能会感觉稍微慢一些。但在高端的开发硬件下这不是问题。它是一个自由开源的应用程序,适用于 Linux、macOS 和 Windows。
|
||||
|
||||
以下是适用于 Ubuntu、Fedora 和相关发行版的单个 deb 和 RPM 包:
|
||||
|
||||
> **[下载 VS Code][47]**
|
||||
|
||||
你也可以为 Flatpak 设置你的系统,并从终端运行以下命令,在所有 Linux 发行版上安装它。
|
||||
|
||||
```
|
||||
flatpak install flathub com.visualstudio.code
|
||||
```
|
||||
|
||||
#### 2、带有 PyDev 的 Eclipse
|
||||
|
||||
![Eclipse 编辑器][2]
|
||||
|
||||
[Eclipse][3] 是一个由 IBM 开发的自由开源的 IDE。这个完备的 IDE 可用于 Java 和 Android 开发。然而,它也支持许多其他编程语言,包括 Python。你可以将 Eclipse 与流行的 PyDev 插件一起使用,它可以将 Eclipse 转换成一个完整的 Python 开发环境。通过将 PyDev 集成在 Eclipse 中,你可以进行编译、代码分析、实时调试、交互式控制台访问,以及更多的功能。
|
||||
|
||||
优势:
|
||||
|
||||
* 丰富的功能和完整的 Python 开发 IDE。
|
||||
|
||||
劣势:
|
||||
|
||||
* 对系统性能有很大影响。
|
||||
* 针对高级用户。
|
||||
|
||||
安装和更多信息:
|
||||
|
||||
* 平台:Linux、Mac 和 Windows
|
||||
* 类型:集成开发环境
|
||||
* 价格:免费
|
||||
* 源代码:开源
|
||||
* 官方下载链接:[PyDev][4]、[Eclipse][5]
|
||||
* 官方网站:[Eclipse][6]、[PyDev 插件][7]
|
||||
* Flatpak:[Eclipse for Java 通过 Flathub 以 Flatpak 的形式提供][8],你可以在 [设置 Flatpak][9] 之后尝试这个版本
|
||||
|
||||
#### 3、PyCharm 编辑器
|
||||
|
||||
![PyCharm 编辑器][14]
|
||||
|
||||
由 JetBrains 开发的 [PyCharm][15] 提供了智能代码补完、代码检查、即时错误高亮、快速修复、自动代码重构和丰富的导航功能。
|
||||
|
||||
PyCharm 开箱即用的大量工具包括:集成的调试器和测试运行器;Python 剖析器;内置终端;与主要版本控制系统和内置数据库工具的集成;借助远程解释器提供的远程开发能力;集成 SSH 终端;以及与 Docker 和 Vagrant 的集成。
|
||||
|
||||
除了 Python,PyCharm 还为各种 Python 网页开发框架、特定模板语言、JavaScript、CoffeeScript、TypeScript、HTML/CSS、AngularJS、Node.js 等提供了一流的支持。
|
||||
|
||||
PyCharm 有两个版本的安装程序:专业版和社区版。社区版是自由开源的。专业版不是免费的,因为它带有专业工具和广泛的支持。专业版有一个不到 10 美元的月度订阅版本,供个人使用。
|
||||
|
||||
然而,如果你是一个初学者,你可以从 PyCharm 免费的社区版开始。
|
||||
|
||||
它适用于科学和网页 Python 开发。具有 HTML、JS 和 SQL 支持。
|
||||
|
||||
优势:
|
||||
|
||||
* 为专业人士提供先进的现代编辑功能,有助于快速开发。
|
||||
|
||||
劣势:
|
||||
|
||||
* 大多数专业工具都在付费版本中提供(个人使用时每月约 8 至 10 美元)。
|
||||
|
||||
安装和其他信息:
|
||||
|
||||
* 平台:Linux、Mac 和 Windows
|
||||
* 类型:IDE
|
||||
* 价格:免费(社区版)和付费(专业版)
|
||||
* 源代码:开源(社区版)
|
||||
* [官方下载链接][16]
|
||||
* Flatpak:你可以在 [为 Flatpak 设置你的 Linux 系统][18] 之后安装 [Flathub 提供的社区版本][17]
|
||||
|
||||
#### 4、Spyder 编辑器
|
||||
|
||||
![Spyder Editor][23]
|
||||
|
||||
[Spyder][24] 是一个强大的 Python 编辑器,是用 Python 编写的。它是为科学家、工程师和数据科学家所设计的。它将综合开发工具的高级编辑、分析、调试和剖析功能与科学软件包的数据探索、交互式执行、深度检查和漂亮的可视化功能独特地结合起来。
|
||||
|
||||
优势:
|
||||
|
||||
* 轻量级和免费
|
||||
|
||||
劣势:
|
||||
|
||||
* 你必须把它作为 Anaconda 软件包的一部分来下载。没有独立的安装程序。
|
||||
|
||||
安装和其他说明:
|
||||
|
||||
* 平台:Anaconda
|
||||
* 类型:IDE
|
||||
* 价格:免费
|
||||
* 源代码:开源
|
||||
* [官方下载链接][25]
|
||||
* [官方网站][26]
|
||||
|
||||
#### 5、Sublime Text
|
||||
|
||||
![Sublime Text][27]
|
||||
|
||||
[Sublime Text][28] 是一个支持 Python 编程的复杂的代码编辑器。它是一个跨平台的工具,原生支持许多编程语言。你可以使用插件来扩展其特性和功能。Sublime Text 带有提高生产力的功能,如 “Goto anything”,可以同时对文件的多个部分进行修改。
|
||||
|
||||
优点:
|
||||
|
||||
* 轻量级、免费、可用于 Windows、Mac 和 Linux。
|
||||
|
||||
缺点:
|
||||
|
||||
* 它是免费评估的,但你必须购买一个许可证来进行高级使用。(LCTT 译注:但可以一直免费评估,而不限制时间,只是会时不时提醒)
|
||||
|
||||
其他信息和安装:
|
||||
|
||||
* 平台:Windows、Linux、OS X
|
||||
* 类型:IDE
|
||||
* 价格:免费,但必须购买许可证才能继续使用
|
||||
* 源代码:闭源
|
||||
* [官方下载链接][29]
|
||||
* [官方网站][30]
|
||||
* Flatpak:Sublime Text 可以通过 [Flathub 以 Flatpak 软件包][31] 获得。设置你的 [Linux 上的 Flatpak][32],然后安装它。
|
||||
|
||||
#### 6、Thonny Python 编辑器
|
||||
|
||||
![Thonny 编辑器][37]
|
||||
|
||||
[Thonny][38] 是一个面向初学者的 Python IDE,使用起来很简单。它内置了最新的 Python(截至本文撰写时为 3.7+),所以你不需要在你的操作系统中单独安装 Python。用户界面毫不杂乱,对初学者来说没有任何干扰。Thonny 的其他一些显著特点包括:变量视图、简单调试器、单步调试和语法错误。
|
||||
|
||||
优点:
|
||||
|
||||
* 轻量级、免费,可用于 Windows、Mac 和 Linux。
|
||||
* 非常适合 Python 的绝对初学者(甚至是编码的初学者)。
|
||||
|
||||
缺点:
|
||||
|
||||
* 由于它是一个初学者的 IDE,所以只有基本的功能。
|
||||
|
||||
安装和其他信息:
|
||||
|
||||
* 平台:Windows、Linux 和 Mac
|
||||
* 类型:IDE
|
||||
* 价格:免费
|
||||
* 源代码:开源
|
||||
* [官方下载链接][39]
|
||||
* Flatpak:它通过 [Flathub 以 Flatpak][40] 的形式提供。设置你的 [Linux 系统安装 Flatpak][41],然后去安装它。
|
||||
|
||||
---
|
||||
|
||||
有很多 Python 编辑器可用,这些是用于编码的六个最好的 Python 编辑器。你可以尝试其他值得注意的 Python 编辑器:VIM、IDLE(默认 Python 自带)、Cloud 9 和 Emacs。
|
||||
|
||||
🗨️ 你最喜欢哪个编辑器?请在下面的评论区告诉我们。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/5-best-python-ide-code-editor/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.python.org/
|
||||
[2]: https://www.debugpoint.com/wp-content/uploads/2020/06/Eclipse-Editor.png
|
||||
[3]: https://www.eclipse.org/
|
||||
[4]: https://www.pydev.org/
|
||||
[5]: https://www.eclipse.org/
|
||||
[6]: https://www.eclipse.org/
|
||||
[7]: https://www.pydev.org/
|
||||
[8]: https://flathub.org/apps/details/org.eclipse.Java
|
||||
[9]: https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/
|
||||
[10]: https://flathub.org/apps/details/org.eclipse.Java
|
||||
[11]: https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/
|
||||
[12]: https://flathub.org/apps/details/org.eclipse.Java
|
||||
[13]: https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/
|
||||
[14]: https://www.debugpoint.com/wp-content/uploads/2020/06/PyCharm-Editor.png
|
||||
[15]: https://www.jetbrains.com/pycharm/
|
||||
[16]: https://www.jetbrains.com/pycharm/download/
|
||||
[17]: https://flathub.org/apps/details/com.jetbrains.PyCharm-Community
|
||||
[18]: https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/
|
||||
[19]: https://flathub.org/apps/details/com.jetbrains.PyCharm-Community
|
||||
[20]: https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/
|
||||
[21]: https://flathub.org/apps/details/com.jetbrains.PyCharm-Community
|
||||
[22]: https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/
|
||||
[23]: https://www.debugpoint.com/wp-content/uploads/2020/06/Spyder-Editor.png
|
||||
[24]: https://www.spyder-ide.org/
|
||||
[25]: https://www.anaconda.com/download/
|
||||
[26]: https://www.spyder-ide.org/
|
||||
[27]: https://www.debugpoint.com/wp-content/uploads/2020/06/Sublime-Text-Editor.png
|
||||
[28]: https://www.sublimetext.com/
|
||||
[29]: https://www.sublimetext.com/3
|
||||
[30]: https://www.sublimetext.com/
|
||||
[31]: https://flathub.org/apps/details/com.sublimetext.three
|
||||
[32]: https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/
|
||||
[33]: https://flathub.org/apps/details/com.sublimetext.three
|
||||
[34]: https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/
|
||||
[35]: https://flathub.org/apps/details/com.sublimetext.three
|
||||
[36]: https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/
|
||||
[37]: https://www.debugpoint.com/wp-content/uploads/2020/06/Thonny-Editor.png
|
||||
[38]: https://thonny.org/
|
||||
[39]: https://thonny.org/
|
||||
[40]: https://flathub.org/apps/details/org.thonny.Thonny
|
||||
[41]: https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/
|
||||
[42]: https://flathub.org/apps/details/org.thonny.Thonny
|
||||
[43]: https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/
|
||||
[44]: https://flathub.org/apps/details/org.thonny.Thonny
|
||||
[45]: https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/
|
||||
[46]: https://www.debugpoint.com/wp-content/uploads/2022/10/Visual-Studio-Code.jpg
|
||||
[47]: https://code.visualstudio.com/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202211/25/114333wj3t354qjhrggrvw.jpg
|
@ -0,0 +1,103 @@
|
||||
[#]: subject: "What you need to know about compiling code"
|
||||
[#]: via: "https://opensource.com/article/22/10/compiling-code"
|
||||
[#]: author: "Alan Smithee https://opensource.com/users/alansmithee"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "Donkey-Hao"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15213-1.html"
|
||||
|
||||
关于编译代码你应该知道的
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202211/04/054126nec50keexencosc4.jpg)
|
||||
|
||||
> 用这个方便的捕鼠器比喻来理解编译代码。
|
||||
|
||||
源代码必须要经过编译才能够运行程序,而对于开源软件,每个人都可以获取源代码。无论你是自己编写了代码,想要编译和运行它,还是下载了某人的项目来尝试它,了解如何通过 [编译器][2] 处理源代码,以及编译器如何处理这些代码,这都很有用。
|
||||
|
||||
### 创建一个更好的捕鼠器
|
||||
|
||||
一般情况我们不会将一个捕鼠器比作电脑,但不管你信不信,它确实与你正在使用的设备(手机或电脑)的 CPU 有一些相似之处。经典的捕鼠器(我说的不是 🐈)有两种状态:打开或者释放。你可以认为 *打开* 是将捕鼠器设置好准备捕获老鼠,以及 *释放* 是捕鼠器被老鼠触发。某种意义上来说,捕鼠器就像是一台有鼠标的电脑。你可以想象一下这个代码,用一种虚构的语言来描述这个过程:
|
||||
|
||||
```
|
||||
if mousetrap == 0 then
|
||||
There's a mouse!
|
||||
else
|
||||
There's no mouse yet.
|
||||
end
|
||||
```
|
||||
|
||||
换句话说,你可以基于捕鼠器的状态发现是否有老鼠(数据)。当然,捕鼠器不是万无一失的,有可能有一只老鼠在捕鼠器旁边,由于老鼠还没有触发捕鼠器,所以它的状态还是 *打开* 的。因此该程序可以进行改进,这都是非常典型的。
|
||||
|
||||
### 开关
|
||||
|
||||
总的来说,捕鼠器就是一个开关。你会在家里使用开关打开灯。可以从开关中获得许多信息。比如,人们会从你家灯的状态了解到你是否在家。
|
||||
|
||||
你可以根据邻居家灯的状态来改变行为。如果邻居家所有的灯都熄灭了,那么请关掉你大声的音乐,因为人们可能已经上床睡觉了。
|
||||
|
||||
CPU 也使用这样的逻辑,只不过乘以几个数量级,缩小到了微观级别。当 CPU 在特定寄存器上接收到电信号时,可以触发其他一些寄存器,然后触发另一个,以此类推。如果这些寄存器有特定的意义,那么就可以通信。也许激活同一主板上某处的芯片,或者使 LED 亮起,或者改变屏幕上的像素颜色。
|
||||
|
||||
种瓜得瓜,种豆得豆。如果你真的想在多个位置而不是仅限于一处发现老鼠,但是你只有一个捕鼠器,那你应该开发一个应用才行。使用网络摄像头和一些基本的图像识别软件,你可以建立空厨房的模型,然后扫描变化。当老鼠进入厨房,在原先没有老鼠的图像上会有像素的变化。记录下这些数据,如果有无人机可以追踪老鼠并捕获会更好,这样就可以将老鼠赶出厨房了。这时,你通过打开和关闭信号的魔法,创造了一个更好的捕鼠器。
|
||||
|
||||
### 编译器
|
||||
|
||||
代码编译器将人们可阅读的代码转换成 CPU 可以理解的机器语言。这是非常复杂的过程,因为 CPU 非常复杂(甚至比捕鼠器更加复杂),同时因为该过程比严格“需要”的更加灵活。并不是所有的编译器都很灵活。有一些编译器只有一个目标,它们只会处理特定格式的代码文件,处理过程也因此而简单明了。
|
||||
|
||||
幸运的是,现代的通用编译器并不简单。它们允许你编写不同语言的代码,也允许你用不同的方式链接库文件,并且可以生成运行在不同架构上的文件。[GNU 编译器集合][4](GCC)的 `gcc` 编译器 `--help` 会输出超过 50 行的选项,LLVM 的 `clang` 编译器的 `--help` 输出超过 1000 行。GCC 指导手册的字数超过 10 万。
|
||||
|
||||
当你在编译代码时会有很多选项。
|
||||
|
||||
当然,大多数人并不需要知道所有的选项。我从未读过 GCC 的手册页,因为它们是针对 Objective-C、Fortran 以及我从未听说过的芯片架构的。不过我重视它将代码编译为不同的架构 —— 64 位或者 32 位 —— 的能力,以及在其他行业已经落后的计算机上运行开源软件的能力。
|
||||
|
||||
### 编译生命周期
|
||||
|
||||
同样重要的是,理解编译代码的不同阶段。这是一个简单的 C 语言程序的生命周期:
|
||||
|
||||
1. 带有宏定义的 C 源代码 `.c` 文件,用 `cpp` 预处理为 `.i` 文件。
|
||||
2. 扩展了宏定义的 C 源代码 `.i` 文件,会被 `gcc` 转译成 `.s` 文件。
|
||||
3. 以汇编语言写的文本文件 `.s` 文件被汇编为目标 `.o` 文件。
|
||||
4. 带有 CPU 指令的二进制目标代码,以及其他目标文件和库 `*.o` 文件,以内存区域无关的偏移量,使用 `ld` 链接以生成可执行文件。
|
||||
5. 最终的二进制文件要么包含所有需要的目标,要么设置以动态链接库 `*.so` 文件加载。
|
||||
|
||||
你可以试试这个简单示例(可能需要对库路径做一些调整):
|
||||
|
||||
```
|
||||
$ cat << EOF >> hello.c
|
||||
#include
|
||||
int main(void)
|
||||
{ printf("hello world\n");
|
||||
return 0; }
|
||||
EOF
|
||||
$ cpp hello.c > hello.i
|
||||
$ gcc -S hello.i
|
||||
$ as -o hello.o hello.s
|
||||
$ ld -static -o hello \
|
||||
-L/usr/lib64/gcc/x86_64-slackware-linux/5.5.0/ \
|
||||
/usr/lib64/crt1.o /usr/lib64/crti.o hello.o \
|
||||
/usr/lib64/crtn.o --start-group -lc -lgcc \
|
||||
-lgcc_eh --end-group
|
||||
$ ./hello
|
||||
hello world
|
||||
```
|
||||
|
||||
### 可获得的知识
|
||||
|
||||
计算机已经变得非常强大,并且用户友好。请不要走向这两种可能的极端中的任何一种:计算机不像捕鼠器和电灯开关那么简单,但它们也不是无法理解的。你可以了解编译代码、如何链接以及针对不同架构进行编译。一旦你知道了,你就可以更好地调试代码。你可以理解你下载的代码,甚至可以修复其中的一两个错误。同时从理论上来讲,你可以建造一个更好的捕鼠器,或者用捕鼠器造一个 CPU。由你决定。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/10/compiling-code
|
||||
|
||||
作者:[Alan Smithee][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[Donkey-Hao](https://github.com/Donkey-Hao)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/alansmithee
|
||||
[b]: https://github.com/lkxed
|
||||
[2]: https://opensource.com/article/19/5/primer-assemblers-compilers-interpreters
|
||||
[3]: https://opensource.com/article/22/9/python-interpreters-2022
|
||||
[4]: https://opensource.com/article/22/5/gnu-c-compiler
|
@ -0,0 +1,312 @@
|
||||
[#]: subject: "13 Independent Linux Distros That are Built From Scratch"
|
||||
[#]: via: "https://itsfoss.com/independent-linux-distros/"
|
||||
[#]: author: "sreenath https://itsfoss.com/author/sreenath/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "MuggleWei"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15251-1.html"
|
||||
|
||||
13 个从头开始构建的独立 Linux 发行版
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202211/14/095522os6236zrzcgs79e9.jpg)
|
||||
|
||||
时至今日,世界上已经有成百上千种不同的 Linux 发行版。
|
||||
|
||||
它们中的大多数都可以被划归为三个大类 : Debian、Red Hat(Fedora)以及 Arch Linux。
|
||||
|
||||
使用基于 Debian/Ubuntu、Red Hat/SUSE 或者 Arch 的 Linux 发行版自然有它们的优势。它们很受大众欢迎,因此它们的包管理器能够提供大量的软件包。
|
||||
|
||||
然而,有一些用户更倾向于使用从头开始构建、独立于 DEB/RPM 这类包管理系统之外的发行版。
|
||||
|
||||
在这篇文章当中,我们将列出一些优秀的独立 Linux 发行版。
|
||||
|
||||
> **注意 :** 显然,下面的列表显然不会包括一些广受欢迎,通常作为创建新发行版的基础的发行版,如 Debian、Ubuntu 和 Fedora 等。此外,列表顺序不分先后,没有特定的排名。
|
||||
|
||||
### 1、NixOS
|
||||
|
||||
![Image Credits: Distrowatch][1]
|
||||
|
||||
NixOS 最初发布于 2003 年,NixOS 建立在 Nix 包管理器之上。它每年发布两个版本,通常是在 5 月和 11 月。
|
||||
|
||||
NixOS 可能不是一个直接面向新用户或普通用户的发行版。然而,其独特的 [包管理][2] 方法吸引了各种用户。
|
||||
|
||||
此外,它仍然支持 32 位系统。
|
||||
|
||||
其他特性:
|
||||
|
||||
* 构建隔离的包
|
||||
* 可靠的升级,并且具有回滚功能
|
||||
* 可重现的系统配置
|
||||
|
||||
> **[NixOS][3]**
|
||||
|
||||
### 2、Gentoo Linux
|
||||
|
||||
![Image Credits: Distrowatch][5]
|
||||
|
||||
Geetoo Linux 是一个主要针对操作系统专家的独立 Linux 发行版。它是为那些希望自由定制、微调和优化操作系统以满足其要求的用户而构建。
|
||||
|
||||
Gentoo 使用 [Portage 包管理器][6] 来创建和安装软件包,通常还允许你针对你的硬件来优化它们。Chrome 的开源版本 **Chromium OS** 便是使用 Gentoo 作为其核心的。
|
||||
|
||||
不要忘记,Gentoo 是 [仍然支持 32 位架构的发行版][7] 之一。
|
||||
|
||||
其他特性:
|
||||
|
||||
* 增量更新
|
||||
* 基于源码的软件管理方法
|
||||
* 支持 GURU(Gentoo 用户仓库)的<ruby>层叠<rt> Overlay </rt></ruby>仓库的概念,允许用户添加 Gentoo 尚未提供的软件包
|
||||
|
||||
> **[Gentoo Linux][8]**
|
||||
|
||||
### 3、Void Linux
|
||||
|
||||
![Image Credits: Distrowatch][9]
|
||||
|
||||
Void Linux 是一个 [滚动发布的发行版][10],使用 X 二进制软件包系统(XBPS)来安装和删除软件。它由前 NetBSD 开发者 Juan Romero Pardines 创建。
|
||||
|
||||
它使用 runit 而不是 systemd 作为其初始化系统。此外,它还让你可以选择使用多个 [桌面环境][11]。
|
||||
|
||||
其他特性:
|
||||
|
||||
* 最小化的系统要求
|
||||
* 官方库也提供非自由软件包
|
||||
* 支持树莓派
|
||||
* 集成 OpenBSD 的 LibreSSL
|
||||
* 支持 musl C 库
|
||||
* 支持 32 位系统
|
||||
|
||||
> **[Void Linux][12]**
|
||||
|
||||
### 4、Solus Linux
|
||||
|
||||
![solus budgie 2022][14]
|
||||
|
||||
Solus 的前身是 EvolveOS,它从头开始构建并提供了一些令人兴奋的特性。Solus 的旗舰版本使用自己打造的 Budgie 作为桌面环境。
|
||||
|
||||
与本篇文章介绍的其他系统相比,Solus 对于新手较为友好。它设法成为 [最好的 Linux 发行版][15] 之一。
|
||||
|
||||
它使用 eopkg 作为其包管理系统,支持版滚动发布模型。按照开发人员的说法,开发 Solus 的目标是用于个人电脑。
|
||||
|
||||
其他特性:
|
||||
|
||||
* 支持 Budgie、Gnome、MATE 和 KDE Plasma
|
||||
* 各种开箱即用的软件,从而减少设置工作
|
||||
|
||||
> **[Solus Linux][16]**
|
||||
|
||||
### 5、Mageia
|
||||
|
||||
![Image Credits: Distrowatch][17]
|
||||
|
||||
Mageia 始于 2010 年,它是 Mandriva Linux 的一个分支。它的目标是成为稳定且安全的桌面和服务器操作系统。
|
||||
|
||||
Mageia 是一个社区驱动的项目,由非营利组织和贡献者支持。每年会发布一个大版本。
|
||||
|
||||
其他特性:
|
||||
|
||||
* 支持 32 位系统
|
||||
* 支持 KDE Plasma、Gnome 和 XFCE
|
||||
* 最低的系统要求
|
||||
|
||||
> **[Mageia][18]**
|
||||
|
||||
### 6、Clear Linux
|
||||
|
||||
![Image Credits: Distrowatch][20]
|
||||
|
||||
Clear Linux 是一个由英特尔发布的发行版,主要设计考虑是性能和云服务的使用。
|
||||
|
||||
有趣的是,Clear Linux 升级时是作为一个整体而非去升级单个的软件包。所以,即使你不小心弄乱了系统设置,它也可以正确的启动,执行恢复出厂设置,并让用户重新设置。
|
||||
|
||||
它不太适合个人用户使用。但可以作为一个独特的选择而尝试一下。
|
||||
|
||||
其他特性:
|
||||
|
||||
* 针对英特尔平台的高度调优
|
||||
* 用户和系统文件之间严格分离
|
||||
* 持续的漏洞扫描
|
||||
|
||||
> **[Clear Linux OS][21]**
|
||||
|
||||
### 7、PCLinuxOS
|
||||
|
||||
![Image Credits: Distrowatch][22]
|
||||
|
||||
PCLinuxOS 是一个 x86_64 的 Linux 发行版,使用 APT/RPM 包管理。你可以使用 KDE Plasma、Mate 以及 XFCE 桌面,它同时还提供了更多特性的社区版本的桌面。
|
||||
|
||||
得益于 [Synaptic 包管理器][23],本地安装的 PCLinuxOS 采用了 APT 包管理系统。但你也可以从它的仓库中找到 RPM 包。
|
||||
|
||||
其他特性:
|
||||
|
||||
* mylivecd 脚本允许用户去生成一个当前已安装的硬件驱动的“快照”(所有的配置、应用、文档等)并且将它压缩为 ISO CD/DVD/USB 镜像
|
||||
* 额外支持超过 85 种语言
|
||||
|
||||
> **[PCLinuxOS][24]**
|
||||
|
||||
### 8、4MLinux
|
||||
|
||||
![4m linux 2022][25]
|
||||
|
||||
[4MLinux][26] 是一个通用的 Linux 发行版,重点聚焦于下面四个 **“M”**
|
||||
|
||||
* <ruby>维护<rt>Maintenance</rt></ruby>(系统救援 Live CD)
|
||||
* <ruby>多媒体<rt>Multimedia</rt></ruby>(支持大量的图形、音频和视频格式)
|
||||
* <ruby>微服务器<rt>Miniserver</rt></ruby>(支持 DNS、FTP、HTTP、MySQL、NFS、Proxy、SMTP、SSH 和 Telnet)
|
||||
* <ruby>神秘<rt>Mystery</rt></ruby>(包含了经典 Linux 游戏的集合)
|
||||
|
||||
它具有最低的系统要求,可作为桌面和服务器版本使用.
|
||||
|
||||
其他特性:
|
||||
|
||||
* 支持大量的图形、音频和视频格式
|
||||
* 是小型并且通用的 Linux 发行版
|
||||
|
||||
> **[4MLinux][27]**
|
||||
|
||||
### 9、Tiny Core Linux
|
||||
|
||||
![Image Credits: Distrowatch][28]
|
||||
|
||||
Tiny Core Linux 专注于使用 BusyBox 和 FLTK 提供一个基础的系统。它不是一个完备的桌面,所以,并不能保证它可以运行于任何系统。
|
||||
|
||||
它只是一个启动到非常精简的 X 桌面所需的核心,通常带有有线互联网访问权限。
|
||||
|
||||
用户可以很好的控制一切,但对于新 Linux 用户来说,它并不是一个轻松的开箱即用的系统。
|
||||
|
||||
其他特性:
|
||||
|
||||
* 旨在从启动时创建的内存副本中运行
|
||||
* 默认情况下,其操作就像像云端 / 互联网客户端一样
|
||||
* 用户可以使用 appbrowser 来游览库以及下载应用
|
||||
|
||||
> **[Tiny Core Linux][29]**
|
||||
|
||||
### 10、Linux From Scratch(LFS)
|
||||
|
||||
![Image Credit: Reddit][30]
|
||||
|
||||
[Reddit][31]
|
||||
|
||||
Linux From Scratch(LFS)并不是一个系统,而是通过手动构建所有组件来安装 Linux 的一种方法。一旦完成,它提供了一个紧凑、灵活和安全的系统,并且可以很好的理解一个基于 Linux 的操作系统内部是如何工作的。
|
||||
|
||||
如果你希望去深入理解 Linux 是如何工作的并且探寻其具体细节,那么 Linux From Scratch(LFS) 是你一定要去尝试,不能错过的一个项目。
|
||||
|
||||
其他特性
|
||||
|
||||
* 完全从头开始,定制化的构建 Linux 系统
|
||||
* 极度的灵活性
|
||||
* 由于从源码开始编译,提供了额外的安全性
|
||||
|
||||
> **[Linux From Scratch][32]**
|
||||
|
||||
### 11、Slackware
|
||||
|
||||
![Image Credits: Distrowatch][33]
|
||||
|
||||
Slackware 是现今还在维护的最古老的发行版。最初创建于 1993 年,以 Softlanding Linux 系统为基础,随后,许多的 Linux 发行版都是基于 Slackware。
|
||||
|
||||
Slackware 目标是称为最类似于 UNIX 的 Linux 发行版,同时保持简单和稳定。
|
||||
|
||||
其他特性:
|
||||
|
||||
* 支持 32 位和 64 位系统
|
||||
* 大量的在线文档
|
||||
* 从奔腾处理器到最新的机器,它都可以运行
|
||||
|
||||
> **[Slackware][34]**
|
||||
|
||||
### 12、Alpine Linux
|
||||
|
||||
![alpine linux xfce 2022][35]
|
||||
|
||||
Alpine Linux 是一个社区开发的操作系统,专为路由器、防火墙、VPN、VoIP 盒子和服务器而设计。它是 LEAF 项目的一个分支。
|
||||
|
||||
Alpine Linux 使用 apk-tools 包管理器,最初由 shell 脚本编写,而后使用 c 语言重构。它是最小的 Linux 发行版之一,仍然支持 32 位系统,并且是一个可以完全从电脑内存运行的操作系统。
|
||||
|
||||
其他特性:
|
||||
|
||||
* 提供大小仅为 5MB 的最小容器镜像
|
||||
* 对于主库,提供 2 年的支持;对于社区库,在下一个稳定版本发布前提供支持
|
||||
* 使用 musl libc 制作,Busybox 使用资源效率高的容器
|
||||
|
||||
> **[Alpine Linux][36]**
|
||||
|
||||
### 13、KaOS
|
||||
|
||||
![Image Credits: Distrowatch][37]
|
||||
|
||||
KaOS 是一个受到 Arch 启发,从头开始构建的 Linux 发行版。它使用 [pacman 包管理器][38]。它是按照"*一个桌面环境(KDE Plasma),一个工具包(Qt),一个架构(X86_64)*"的理念构建的。
|
||||
|
||||
它的软件库比较有限,但依然为普通用户提供了许多工具。
|
||||
|
||||
其他特性:
|
||||
|
||||
* 最新的 Plasma 桌面
|
||||
* 紧密集成的滚动和透明的现代桌面发行版
|
||||
|
||||
> **[KaOS][39]**
|
||||
|
||||
#### 总结
|
||||
|
||||
如果你需要一些独特的体验,那么这些独立 Linux 发行版应该能很好的满足你。
|
||||
|
||||
然而,如果你想要用其来替换如 Ubuntu 这样主流的 Linux 发行版作为你的桌面系统……你也许需要三思而后行,上面大多数的发行版(并不代表所有)都不是一个日常使用的桌面系统的理想的选项。
|
||||
|
||||
但是话又说回来,如果你对 Linux 发行版充满了经验,那么毫无疑问,你会享受这项冒险的任务的。
|
||||
|
||||
*如果你想尝试这些独立发行版的其中一种,哪一个会是你的优先选择呢 ? 请在评论中与我们分享。*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/independent-linux-distros/
|
||||
|
||||
作者:[sreenath][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[MuggleWei](https://github.com/MuggleWei)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux 中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/sreenath/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://itsfoss.com/wp-content/uploads/2022/10/nixos-2022.png
|
||||
[2]: https://itsfoss.com/package-manager/
|
||||
[3]: https://nixos.org/
|
||||
[4]: https://itsfoss.com/advanced-linux-distros/
|
||||
[5]: https://itsfoss.com/wp-content/uploads/2022/08/gentoo-linux-plasma.jpg
|
||||
[6]: https://wiki.gentoo.org/wiki/Portage
|
||||
[7]: https://itsfoss.com/32-bit-linux-distributions/
|
||||
[8]: https://www.gentoo.org/
|
||||
[9]: https://itsfoss.com/wp-content/uploads/2022/08/void-linux.jpg
|
||||
[10]: https://itsfoss.com/rolling-release/
|
||||
[11]: https://itsfoss.com/best-linux-desktop-environments/
|
||||
[12]: https://voidlinux.org/
|
||||
[13]: https://itsfoss.com/systemd-free-distros/
|
||||
[14]: https://itsfoss.com/wp-content/uploads/2022/10/solus-budgie-2022.jpg
|
||||
[15]: https://itsfoss.com/best-linux-distributions/
|
||||
[16]: https://getsol.us/home/
|
||||
[17]: https://itsfoss.com/wp-content/uploads/2022/08/mageia-1.jpg
|
||||
[18]: https://www.mageia.org/en/
|
||||
[19]: https://itsfoss.com/32-bit-linux-distributions/
|
||||
[20]: https://itsfoss.com/wp-content/uploads/2022/08/clear-linux-desktop.png
|
||||
[21]: https://clearlinux.org/
|
||||
[22]: https://itsfoss.com/wp-content/uploads/2022/08/pclinuxos.png
|
||||
[23]: https://itsfoss.com/synaptic-package-manager/
|
||||
[24]: https://www.pclinuxos.com/
|
||||
[25]: https://itsfoss.com/wp-content/uploads/2022/10/4m-linux-2022.jpg
|
||||
[26]: https://itsfoss.com/4mlinux-review/
|
||||
[27]: http://4mlinux.com/
|
||||
[28]: https://itsfoss.com/wp-content/uploads/2022/03/tinycore.jpg
|
||||
[29]: http://www.tinycorelinux.net/
|
||||
[30]: https://itsfoss.com/wp-content/uploads/2022/08/enable-aur-e1659974408774.png
|
||||
[31]: https://www.reddit.com/r/linuxmasterrace/comments/udi7ts/decided_to_try_lfs_in_a_vm_started_about_a_week/
|
||||
[32]: https://www.linuxfromscratch.org/
|
||||
[33]: https://itsfoss.com/wp-content/uploads/2022/10/slackware-scaled.jpg
|
||||
[34]: http://www.slackware.com/
|
||||
[35]: https://itsfoss.com/wp-content/uploads/2022/10/alpine-linux-xfce-2022.png
|
||||
[36]: https://www.alpinelinux.org/
|
||||
[37]: https://itsfoss.com/wp-content/uploads/2022/08/kaos-desktop.png
|
||||
[38]: https://itsfoss.com/pacman-command/
|
||||
[39]: https://kaosx.us/
|
@ -0,0 +1,112 @@
|
||||
[#]: subject: "How to Enable and Access USB Drive in VirtualBox"
|
||||
[#]: via: "https://www.debugpoint.com/enable-usb-virtualbox/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15287-1.html"
|
||||
|
||||
如何在 VirtualBox 中启用和访问 U 盘
|
||||
======
|
||||
|
||||
> 这是有关如何在 Oracle VirtualBox 中启用 USB 的指南。
|
||||
|
||||
![][1]
|
||||
|
||||
当你在虚拟机环境中工作时,USB 通常插入主机系统。但是从客体系统访问 USB 内容有点困难。
|
||||
|
||||
在 VirtualBox 中,你需要安装一些扩展并启用一些设置才能访问 USB。方法如下。
|
||||
|
||||
本文假设你已经安装了 VirtualBox,并且还在其中安装了一些 Linux 发行版或操作系统。
|
||||
|
||||
如果没有,请查看 [这篇文章][2]。
|
||||
|
||||
> **请注意,Oracle VM VirtualBox 扩展包采用 Oracle 的个人使用和评估许可证(PUEL)。该许可证与 VirtualBox 不同,后者采用的是 GPL。如果你将下面的步骤用于商业目的,请确保你仔细阅读 [本页面][11]。**
|
||||
|
||||
### 在 VirtualBox 7.0 中启用 USB
|
||||
|
||||
#### 安装 VirtualBox 扩展包
|
||||
|
||||
打开 VirtualBox 下载页面并从 [此链接][3] 下载适用于所有支持平台的 VirtualBox 扩展包。
|
||||
|
||||
![下载扩展包][4]
|
||||
|
||||
然后单击 “<ruby>文件<rt>File</rt></ruby> > <ruby>工具<rt>Tools</rt></ruby> > <ruby>扩展包管理器<rt>Extension Pack Manager</rt></ruby>”。
|
||||
|
||||
单击工具栏中的 “<ruby>安装<rt>Install</rt></ruby>” 按钮并选择下载的 .vbox-extpak 文件。
|
||||
|
||||
点击 “<ruby>安装<rt>Install</rt></ruby>”。接受条款,并为安装提供管理员密码。
|
||||
|
||||
![安装扩展包管理器][5]
|
||||
|
||||
![接受条款后安装扩展包管理器][6]
|
||||
|
||||
安装成功后,可以在已安装列表中看到。
|
||||
|
||||
重启主机系统。重启是强制性的。
|
||||
|
||||
#### 在客体机中启用 USB
|
||||
|
||||
将 U 盘插入你的宿主机系统,你希望从虚拟机中访问该系统。
|
||||
|
||||
启动 VirtualBox 并右键单击要启用 USB 的虚拟机名称。选择“<ruby>设置<rt>Settings</rt></ruby>”。
|
||||
|
||||
![虚拟机的启动设置][7]
|
||||
|
||||
在左窗格中,单击 USB。然后选择控制器版本。例如,你可以选择 USB 3.0。然后单击小加号图标添加 USB 过滤器。
|
||||
|
||||
在此列表中,你应该看到你的 U 盘名称(你插入的)。对于这个例子,我可以看到我插入的 Transcend Jetflash 驱动器。
|
||||
|
||||
选择它并按 “OK”。
|
||||
|
||||
![选择 U 盘][8]
|
||||
|
||||
现在,启动你的虚拟机。打开文件管理器,你应该会看到 U 盘已启用并挂载到你的虚拟机上。
|
||||
|
||||
在此演示中,你可以看到我的 [Arch-Xfce][9] 虚拟机的 Thunar 文件管理器正在显示我的 U 盘中的内容。
|
||||
|
||||
![启用 USB 并从 VirtualBox 访问内容][10]
|
||||
|
||||
### 使用说明
|
||||
|
||||
现在,这里有几件事你应该记住。
|
||||
|
||||
当你在主机系统中插入 U 盘时,请保持挂载状态。但在启动虚拟机之前不要打开或访问任何文件。
|
||||
|
||||
启动虚拟机后,U 盘将在主机系统中卸载并自动挂载到客体系统中,即你的虚拟机。
|
||||
|
||||
使用完 U 盘后,确保在虚拟机中将其弹出或卸载。然后它将能再从你的主机系统内访问。
|
||||
|
||||
### 总结
|
||||
|
||||
VirtualBox 是一个功能强大的程序,提供易于使用的功能来设置的你虚拟机。这些步骤很简单,并确保你的 U 盘在主机系统中被正确检测到以正常工作。
|
||||
|
||||
另外,请记住,通过扩展包检测 U 盘与 VirtualBox 客户端增强包无关。它们完全不相关并提供独立的功能。
|
||||
|
||||
最后,如果本指南对你有帮助,请在评论栏中告诉我。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/enable-usb-virtualbox/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.debugpoint.com/wp-content/uploads/2022/10/usb-vbox-1024x576.jpg
|
||||
[2]: https://www.debugpoint.com/tag/virtualbox
|
||||
[3]: https://www.virtualbox.org/wiki/Downloads
|
||||
[4]: https://www.debugpoint.com/wp-content/uploads/2022/10/Download-the-extension-pack.jpg
|
||||
[5]: https://www.debugpoint.com/wp-content/uploads/2022/10/install-extension-pack-manager.jpg
|
||||
[6]: https://www.debugpoint.com/wp-content/uploads/2022/10/install-extension-pack-manager-after-accepting-terms.jpg
|
||||
[7]: https://www.debugpoint.com/wp-content/uploads/2022/10/Launch-settings-for-the-virtual-machine.jpg
|
||||
[8]: https://www.debugpoint.com/wp-content/uploads/2022/10/Select-the-USB-stick.jpg
|
||||
[9]: https://www.debugpoint.com/xfce-arch-linux-install-4-16/
|
||||
[10]: https://www.debugpoint.com/wp-content/uploads/2022/10/Enabling-USB-and-accessing-contents-from-VirtualBox.jpg
|
||||
[11]: https://www.virtualbox.org/wiki/VirtualBox_PUEL
|
@ -0,0 +1,113 @@
|
||||
[#]: subject: "How to Update or Upgrade Ubuntu Offline without Internet"
|
||||
[#]: via: "https://www.debugpoint.com/how-to-update-or-upgrade-ubuntu-offline-without-internet/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "littlebirdnest"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15253-1.html"
|
||||
|
||||
如何在没有互联网连接的情况下离线更新 Ubuntu
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202211/14/232951blxmbe6wn5eympxq.jpg)
|
||||
|
||||
> 本指南介绍了如何在没有互联网连接的情况下离线更新 Ubuntu 的步骤。
|
||||
|
||||
在很多情况下,你可能需要在没有互联网连接的情况下更新你的 Ubuntu 系统。你可能在外地不方便上网,也可能你需要更新一堆未联网的 Ubuntu,不管是哪种情况,保持你的系统更新最新的软件包总是需要的。
|
||||
|
||||
当然,始终建议通过联网来更新系统。
|
||||
|
||||
但有时,出于安全考虑,这是不行的。连接到互联网可能需要给你的系统进行额外的加固,以保护它们免受黑客和恶意软件的攻击。
|
||||
|
||||
以下的方法使用 [apt-offline][1] 来解决这些问题,并概述了在没有互联网的情况下离线更新 Ubuntu 的步骤。
|
||||
|
||||
### 准备环节
|
||||
|
||||
- 一台能连接到网络的 Ubuntu(你朋友的、咖啡馆、实验室系统)
|
||||
- 存储了软件包的 U 盘
|
||||
- 两个系统都安装了 `apt-offline`:一个系统离线,另一个系统联网
|
||||
|
||||
### 安装 apt-offline
|
||||
|
||||
在两个系统下安装 `apt-offline`。你可以使用以下命令安装:
|
||||
|
||||
```
|
||||
sudo apt install apt-offline
|
||||
```
|
||||
|
||||
如果你想在离线的目标系统安装 `apt-offline`,你可以提前下载到 U 盘里,然后复制到目标系统,再使用下面的命令安装。
|
||||
|
||||
Ubuntu 22.04 LTS 和其他版本的下载链接如下所示。你可以选择一个镜像并下载 deb 文件。
|
||||
|
||||
> **[下载 .deb 文件 – apt-offline][2]**
|
||||
|
||||
```
|
||||
sudo dpkg -i name_of_package.deb
|
||||
```
|
||||
|
||||
### 如何更新 Ubuntu
|
||||
|
||||
在离线的目标系统上打开终端,使用以下命令创建一个 .sig 签名文件:
|
||||
|
||||
```
|
||||
sudo apt-offline set ~/offline-data.sig
|
||||
```
|
||||
|
||||
![创建签名文件][4]
|
||||
|
||||
在这个刚创建的签名文件中,包含下载所需的软件包的路径和详细信息。
|
||||
|
||||
![签名文件的内容][6]
|
||||
|
||||
把签名文件复制到 U 盘中,再插到联网的 Ubuntu 系统上。
|
||||
|
||||
在联网的 Ubuntu 上创建一个目录(参见下面)来存放这些文件。
|
||||
|
||||
打开一个终端,运行以下命令来下载所需的软件包。记得根据你的系统,更改下载目录和 .sig 签名文件的路径。
|
||||
|
||||
```
|
||||
apt-offline get -d ~/offline-data-dir offline-data.sig
|
||||
```
|
||||
|
||||
![下载软件包以离线安装][8]
|
||||
|
||||
你可以看到文件相应下载,然后复制整个下载目录到 U 盘,再插到离线的 Ubuntu 系统。
|
||||
|
||||
运行以下命令将下载的软件包安装到离线系统,记得根据你的系统更改目录路径。
|
||||
|
||||
```
|
||||
sudo apt-offline install offline-data-dir/
|
||||
```
|
||||
|
||||
![安装软件包][10]
|
||||
|
||||
如果一切顺利,你将获得一个更新完的 Ubuntu。
|
||||
|
||||
重复以上步骤,就可以保持你的离线 Ubuntu 为最新版本。
|
||||
|
||||
希望以上教程能帮到你更新离线的 Ubuntu 系统,如果你遇到任何问题,请在下面的评论框中告诉我。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/how-to-update-or-upgrade-ubuntu-offline-without-internet/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[littlebirdnest](https://github.com/littlebirdnest)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://github.com/rickysarraf/apt-offline
|
||||
[2]: https://packages.ubuntu.com/focal/all/apt-offline/download
|
||||
[3]: https://www.debugpoint.com/wp-content/uploads/2021/03/Create-the-sig-file-1024x204.jpg
|
||||
[4]: https://www.debugpoint.com/wp-content/uploads/2021/03/Create-the-sig-file.jpg
|
||||
[5]: https://www.debugpoint.com/wp-content/uploads/2021/03/sig-file-contents-1024x250.jpg
|
||||
[6]: https://www.debugpoint.com/wp-content/uploads/2021/03/sig-file-contents.jpg
|
||||
[7]: https://www.debugpoint.com/wp-content/uploads/2021/03/Download-the-packages-to-install-offline-1024x437.jpg
|
||||
[8]: https://www.debugpoint.com/wp-content/uploads/2021/03/Download-the-packages-to-install-offline.jpg
|
||||
[9]: https://www.debugpoint.com/wp-content/uploads/2021/03/Installing-packages-offline-update-ubuntu-1024x509.jpg
|
||||
[10]: https://www.debugpoint.com/wp-content/uploads/2021/03/Installing-packages-offline-update-ubuntu.jpg
|
@ -0,0 +1,92 @@
|
||||
[#]: subject: "How to Install Viber in Ubuntu and Other Linux"
|
||||
[#]: via: "https://www.debugpoint.com/install-viber-linux/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15205-1.html"
|
||||
|
||||
如何在 Ubuntu 中安装 Viber
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202211/02/161951egly6ylguc6g0w5g.jpg)
|
||||
|
||||
> 这是在 Ubuntu 和其他 Linux 系统中安装 Viber 的快速指南。
|
||||
|
||||
[Viber][1] 是一个免费、安全的通话和聊天程序,适用于所有流行的移动平台和操作系统。
|
||||
|
||||
它具有丰富的功能,例如语音/视频通话、支持 GIF 的文本消息、贴纸、照片和视频。此外,Viber 还具有群聊、群呼和消失消息功能。
|
||||
|
||||
Viber 是一个闭源程序,但有免费的 Linux 原生可执行客户端。
|
||||
|
||||
下面是安装它的方法。
|
||||
|
||||
### 在 Linux 上安装 Viber
|
||||
|
||||
它以 AppImage 可执行文件、deb 和 rpm 包的形式提供。按照下面的相应按钮直接下载。平均可执行文件大小约为 180MB。
|
||||
|
||||
> **[下载适用于所有 Linux 发行版的 Appimage][2]**
|
||||
|
||||
> **[适用于 Ubuntu 的 Deb 可执行文件][3]**
|
||||
|
||||
> **[Fedora 的 RPM 包][8]**
|
||||
|
||||
如果你已下载 AppImage,只需从任意文件管理器将权限更改为可执行文件即可。然后运行。
|
||||
|
||||
对于 Ubuntu、Linux Mint、Debian 和相关发行版,你可以通过[多种方法][4]安装 deb 包。
|
||||
|
||||
你可以通过已安装的软件管理器双击打开。或者通过 `dpkg` 命令安装,如下所示。
|
||||
|
||||
```
|
||||
sudo dpkg -i viber.deb
|
||||
```
|
||||
|
||||
对于 Fedora 和基于 RPM 的软件包,你可以通过以下命令安装。
|
||||
|
||||
```
|
||||
sudo dnf localinstall viber.rpm
|
||||
```
|
||||
|
||||
对于 Arch Linux 和其他发行版,你可以使用我上面提到的 Appimage。
|
||||
|
||||
### 使用
|
||||
|
||||
完成安装 Viber 后,通过应用菜单打开它。以下是你需要记住的几件事。
|
||||
|
||||
在从笔记本电脑/台式机开始使用 Viber 之前,你需要在手机上进行设置。从以下链接为你的移动平台下载并安装 Viber。
|
||||
|
||||
- [谷歌应用商店][5]
|
||||
- [苹果应用商店][6]
|
||||
|
||||
安装后,设置 Viber。请记住,它需要你的手机号码才能注册。
|
||||
|
||||
设置完成后,在 Linux 桌面上打开应用。你应该会看到如下页面。
|
||||
|
||||
![Viber 在 Linux 中运行][7]
|
||||
|
||||
从你的手机应用扫描二维码,你应该可以在 Linux 桌面上使用 Viber。
|
||||
|
||||
**注意:** 由于它是一个闭源应用,请确保你在使用 Viber 时了解此应用的条款和与隐私相关的情况。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/install-viber-linux/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.viber.com/
|
||||
[2]: https://download.cdn.viber.com/desktop/Linux/viber.AppImage
|
||||
[3]: https://download.cdn.viber.com/cdn/desktop/Linux/viber.deb
|
||||
[4]: https://www.debugpoint.com/install-deb-files/
|
||||
[5]: https://play.google.com/store/apps/details?id=com.viber.voip&hl=en_IN&gl=US
|
||||
[6]: https://apps.apple.com/us/app/viber-messenger-chats-calls/id382617920
|
||||
[7]: https://www.debugpoint.com/wp-content/uploads/2022/10/Viber-is-Running-in-Linux-1.jpg
|
||||
[8]: https://download.cdn.viber.com/desktop/Linux/viber.rpm
|
@ -0,0 +1,108 @@
|
||||
[#]: subject: "How to Clean Up Snap Versions to Free Up Disk Space"
|
||||
[#]: via: "https://www.debugpoint.com/clean-up-snap/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15219-1.html"
|
||||
|
||||
如何清理 Snap 版本以释放磁盘空间
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202211/06/082905iomvvhsgoooc5czg.jpg)
|
||||
|
||||
> 这个带有脚本的快速指南有助于清理旧的 Snap 版本并释放 Ubuntu 系统中的一些磁盘空间。
|
||||
|
||||
我正在使用的 Ubuntu 测试系统中的磁盘空间不足。因此,我通过 GNOME 的磁盘使用分析器进行调查,以找出哪个包正在消耗宝贵的 SSD 空间。除了通常的缓存和主目录,令我惊讶的是,我发现 Snap 和 Flatpak 消耗了大量的存储空间。
|
||||
|
||||
![Snap 大小 - 清理前][1]
|
||||
|
||||
尽管如此,我始终坚持一个规则:除非必要,否则不要使用 Snap 或 Flatpak。这主要是因为它们的安装尺寸和其他问题。我更喜欢原生 deb 和 rpm 包。多年来,我在这个测试系统中安装和移除了一定数量的 Snap 包。
|
||||
|
||||
但卸载后还有问题。Snap 在系统中保留了一些残留文件,一般用户不知道。
|
||||
|
||||
所以我打开了 Snap 文件夹 `/var/lib/snapd/snaps`,发现 Snap 保留了以前安装/卸载的软件包的旧版本。
|
||||
|
||||
例如,在下图中,你可以看到 GNOME 3.28、3.34 和 Wine 都被删除了。但它们还在那里。发生这种情况是因为 Snap 的设计,它在正确卸载后保留已卸载软件包的版本。
|
||||
|
||||
![snaps 目录下的文件][2]
|
||||
|
||||
或者,你可以在终端中使用:
|
||||
|
||||
```
|
||||
snap list --all
|
||||
```
|
||||
|
||||
![snap 列出全部][3]
|
||||
|
||||
对于保留的版本,默认值为 3。这意味着 Snap 会保留每个软件包的三个旧版本,包括活动版本。如果你对磁盘空间没有限制,这是可以的。
|
||||
|
||||
但是对于服务器和其他情况,这很容易遇到成本问题,它会消耗你的磁盘空间。
|
||||
|
||||
但是,你可以使用以下命令轻松修改计数。该值可以在 2 到 20 之间。
|
||||
|
||||
```
|
||||
sudo snap set system refresh.retain=2
|
||||
```
|
||||
|
||||
### 清理 Snap 版本
|
||||
|
||||
在 SuperUser 的一篇文章中,Canonical 的前工程经理 Popey [提供了一个简单的脚本][4],它可以清理旧版本的 Snaps 并保留最新版本。
|
||||
|
||||
这是我们将用来清理 Snap 的脚本。
|
||||
|
||||
```
|
||||
#!/bin/bash
|
||||
#Removes old revisions of snaps
|
||||
#CLOSE ALL SNAPS BEFORE RUNNING THIS
|
||||
set -eu
|
||||
LANG=en_US.UTF-8 snap list --all | awk '/disabled/{print $1, $3}' |
|
||||
while read snapname revision; do
|
||||
snap remove "$snapname" --revision="$revision"
|
||||
done
|
||||
```
|
||||
|
||||
将上面的脚本以 `.sh` 扩展名保存在一个目录中(例如 `clean_snap.sh`),赋予它可执行权限并运行。
|
||||
|
||||
```
|
||||
chmod +x clean_snap.sh
|
||||
```
|
||||
|
||||
当我运行脚本后,它减少了很多磁盘空间。该脚本还将显示要删除的包的名称。
|
||||
|
||||
![执行脚本][5]
|
||||
|
||||
![清理后的 Snap 大小][6]
|
||||
|
||||
### 结束语
|
||||
|
||||
对于 Snap 的设计效率如何,人们总是争论不休。许多人说,它的设计是坏的,是臃肿的,是消耗系统资源的。这种说法的某些部分是真实的,我不会否认它。如果实施和加强得当,整个沙盒应用的概念是很好的。但我相信,与 Snap 相比,Flatpak 工作做得更好。
|
||||
|
||||
也就是说,我希望这可以帮助你清理一些磁盘空间。尽管它只在 Ubuntu 中进行了测试,但它应该适用于所有支持 Snap 的 Linux 发行版。
|
||||
|
||||
此外,请查看我们关于 [如何清理 Ubuntu][7] 的指南以及其他步骤。
|
||||
|
||||
最后,如果你要清理 **Flatpak** 应用,请参阅 [这篇指南][8]。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/clean-up-snap/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.debugpoint.com/wp-content/uploads/2021/03/Snap-size-before-cleanup.jpg
|
||||
[2]: https://www.debugpoint.com/wp-content/uploads/2021/03/Files-under-snaps-directory.jpg
|
||||
[3]: https://www.debugpoint.com/wp-content/uploads/2021/03/snap-list-all.jpg
|
||||
[4]: https://superuser.com/a/1330590
|
||||
[5]: https://www.debugpoint.com/wp-content/uploads/2021/03/Executing-the-script.jpg
|
||||
[6]: https://www.debugpoint.com/wp-content/uploads/2021/03/Snaps-size-after-cleanup.jpg
|
||||
[7]: https://www.debugpoint.com/2018/07/4-simple-steps-clean-ubuntu-system-linux/
|
||||
[8]: https://www.debugpoint.com/clean-up-flatpak/
|
@ -0,0 +1,93 @@
|
||||
[#]: subject: "How to Check: Xorg or Wayland Display Server?"
|
||||
[#]: via: "https://www.debugpoint.com/check-wayland-or-xorg/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15216-1.html"
|
||||
|
||||
如何检查: 是 Xorg 还是 Wayland 显示服务器?
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202211/05/102913nmpm4pzka6b6aar1.jpg)
|
||||
|
||||
> 以下是快速检查在运行 Xorg 还是 Wayland 显示服务器的方法。
|
||||
|
||||
随着时间的推移,现代 Wayland 显示服务器正在进入所有 Linux 发行版。尽管老旧的 Xorg 仍然能用并且会继续存在,但 Wayland 无疑在安全性和其他性能方面更好。
|
||||
|
||||
但是,Xorg 不会很快完全淘汰。可能永远不会。
|
||||
|
||||
如果你在运行任何 Linux 发行版,如何检查运行的是 Xorg 还是 Wayland?下面是方法。
|
||||
|
||||
### Wayland 或 Xorg:你在运行哪一个?
|
||||
|
||||
在你的 Linux 发行版(例如 Ubuntu、Fedora、Arch 等)中打开一个终端窗口(`CTRL+ALT+T`)。
|
||||
|
||||
然后输入以下命令并回车:
|
||||
|
||||
```
|
||||
echo $XDG_SESSION_TYPE
|
||||
```
|
||||
|
||||
命令输出会告诉你当前会话是 Wayland 还是 Xorg(X11)。
|
||||
|
||||
```
|
||||
[debugpoint@fedora ~]$ echo $XDG_SESSION_TYPEwayland
|
||||
```
|
||||
|
||||
![此命令可以为你提供有关 Xorg 或 Wayland 的详细信息][1]
|
||||
|
||||
这很简单。但是,还有其他方法。
|
||||
|
||||
### 其他方法
|
||||
|
||||
#### 使用设置
|
||||
|
||||
如果你需要图形方法,请打开你的 Linux 发行版的设置应用。在关于部分,你应该看到某个标签下中的 Wayland/X11。
|
||||
|
||||
例如,在 GNOME 设置中,你可以在 “<ruby>窗口子系统<rt>Windowing system</rt></ruby>” 下找到它,如下图所示:
|
||||
|
||||
![在 GNOME 设置中可以找到它][2]
|
||||
|
||||
#### 使用会话值
|
||||
|
||||
你还可以使用 [systemd][3] 登录管理器 `loginctl` 找到它。请记住,它仅适用于基于 systemd 的系统。
|
||||
|
||||
打开终端并运行以下命令。你可以看到会话 id 值。在此示例中为 `c2`:
|
||||
|
||||
```
|
||||
loginctl
|
||||
```
|
||||
|
||||
现在,将会话 ID 传递给以下命令以获取显示服务器类型。确保将 c2 更改为你的系统规格。
|
||||
|
||||
```
|
||||
loginctl show-session c2 -p Type
|
||||
```
|
||||
|
||||
![使用 loginctl 查找][4]
|
||||
|
||||
### 总结
|
||||
|
||||
这些是你可以确定在 Linux 系统中运行的是 Systemd 还是 Xorg 的一些方法。你还可以在 shell 脚本中使用上述命令来实现进一步的流程自动化。
|
||||
|
||||
祝好。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/check-wayland-or-xorg/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.debugpoint.com/wp-content/uploads/2022/10/This-command-can-give-you-details-about-Xorg-or-Wayland-1024x612.jpg
|
||||
[2]: https://www.debugpoint.com/wp-content/uploads/2022/10/In-GNOME-Settings-you-can-find-it.jpg
|
||||
[3]: https://www.debugpoint.com/tag/systemd/
|
||||
[4]: https://www.debugpoint.com/wp-content/uploads/2022/10/Using-loginctl-to-find-out.jpg
|
@ -0,0 +1,60 @@
|
||||
[#]: subject: "4 open source editors I use for my writing"
|
||||
[#]: via: "https://opensource.com/article/22/10/open-source-editors"
|
||||
[#]: author: "Alan Formy-Duval https://opensource.com/users/alanfdoss"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "Donkey-Hao"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15248-1.html"
|
||||
|
||||
我使用的 4 款开源编辑器
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202211/13/153838gs7u2z33qxxfigx3.jpg)
|
||||
|
||||
> 分享一些我最喜欢的开源写作工具。
|
||||
|
||||
在我的职业生涯中,我已经写过很多东西,主要是作为一名 IT 顾问,创建产品文档作为给的客户可交付成果。这些文档通常针对不同操作系统和软件产品提供说明。
|
||||
|
||||
自 2018 年,我开始在 www.opensource.com 上发表关于开源软件的文章。当然,我使用开源软件进行协作。接下来我将介绍我使用过的四款开源编辑器。
|
||||
|
||||
### 1、Vi
|
||||
|
||||
[Vi][1] 也被称为 `Vim`(LCTT 校注:此外不确,Vi 和 Vim 是两个软件,只是 Vim 取代了 Vi,并以 `vi` 的名字运行。),是我学习的第一款开源编辑器。这是我在计算机科学课程中学习的编辑器,并且我所有的 C 语言编程都是通过它完成的。自 1995 年以来,实际上我一直使用它作为命令行编辑器。这款工具有多个迭代版本,以至于我都可以为之写一系列文章了。我只想说,在我的日常使用中,我坚持使用它的基本命令行形式,并进行最小的定制。
|
||||
|
||||
### 2、LibreOffice Writer
|
||||
|
||||
Writer 是 LibreOffice 开源办公套件的一部分。它是由<ruby>文档基金会<rt>Document Foundation</rt></ruby>维护的全功能文字处理器。它支持行业标准格式,例如开放文档格式 (ODF)、Open XML 和 MS Office DOC、DOCX。可以在其官方网站上 [了解有关 Writer 的更多信息][2]。
|
||||
|
||||
### 3、Ghostwriter
|
||||
|
||||
Ghostwriter 是一个用于 [Markdown 的文本编辑器][3]。它有一个很好的实时查看器和语法指南或备忘单功能。[访问官方网站][4] 了解更多内容。
|
||||
|
||||
### 4、Gedit
|
||||
|
||||
Gedit 是许多 Linux 发行版中的基本图形编辑器,被描述为“用于 GNOME 桌面的小型轻量级文本编辑器”。我最近开始使用它来创建 Asciidoc 格式的文章。使用 Asciidoc 的好处是语法易于管理并可导入到 Drupal 等 Web 渲染系统中。通过 [Gedit Wiki][5] 了解许多提示和技巧。
|
||||
|
||||
### 编辑文本
|
||||
|
||||
开源世界中有大量编辑软件。随着我继续写作,这个列表可能会增加。我的主要目标是格式简单。我希望我的文章易于在互联网平台上导入、转换和发布。
|
||||
|
||||
你的写作风格、功能需求和目标受众将指导你确定首选工具。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/10/open-source-editors
|
||||
|
||||
作者:[Alan Formy-Duval][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[Donkey-Hao](https://github.com/Donkey-Hao)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/alanfdoss
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/article/20/12/vi-text-editor
|
||||
[2]: https://www.libreoffice.org/discover/writer/
|
||||
[3]: https://opensource.com/article/21/10/markdown-editors
|
||||
[4]: https://github.com/KDE/ghostwriter
|
||||
[5]: https://wiki.gnome.org/Apps/Gedit
|
@ -0,0 +1,115 @@
|
||||
[#]: subject: "How to Upgrade to Ubuntu 22.10 From 22.04 LTS (Jammy to Kinetic)"
|
||||
[#]: via: "https://www.debugpoint.com/upgrade-ubuntu-22-04-22-10/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "robsean"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15199-1.html"
|
||||
|
||||
如何从 Ubuntu 22.04 LTS 升级到 22.10
|
||||
======
|
||||
|
||||
> 这里是如何将你当前的 Ubuntu 22.04 LTS Jammy Jellyfish 升级到 Ubuntu 22.10 Kinetic Kudu 的步骤。
|
||||
|
||||
始终停留在长期支持的发布版本,这是金科玉律。因为,先前的 [Ubuntu 22.04 LTS][1] Jammy Jellyfish 将被支持到 2027 年 4 月。这是一段很长的时间。
|
||||
|
||||
此外,LTS 版本超级稳定。它们很少损坏并变得不稳定。因此,如果你在笔记本电脑/台式机电脑或服务器上安装使用 LTS 版本,保持使用它。
|
||||
|
||||
然而,如果你想要最新的内核、GNOME 43 和 Pipewire 之类的最新技术 – 你可能会想完成版本跳级,并升级到 [Ubuntu 22.10 Kinetic Kudu][2]。
|
||||
|
||||
这里是如何做的方法。
|
||||
|
||||
### 升级 Ubuntu 22.04 LTS 到 Ubuntu 22.10
|
||||
|
||||
**注意**:我希望你没有运行去年 10 月份发布的 Ubuntu 21.10 Impish Indri 。因为它已经不被支持。但是鉴于某些原因,你正在运行它,我建议你直接重新安装 22.10 。或者,先升级到 22.04 ,再升级到 22.10 。
|
||||
|
||||
#### 在你升级前
|
||||
|
||||
在你升级前,做一些内务整理。这是非常重要的。
|
||||
|
||||
- 备份你的 `/home`、/`downloads` 和其它的文件到 USB 驱动器或任意独立的分区,以防升级失败。
|
||||
- 如果你随着时间的流逝而添加了一些额外的 PPA ,确保将它们记录下来。虽然,在升级过程开始前,升级过程将禁用 PPA 。而在升级完成后,确保手动启用 PPA 。
|
||||
- 记录并禁用所有的 GNOME 扩展。如果开发人员没有按照 GNOME 版本进行更新,那么扩展在升级后将会损坏。
|
||||
- 家中常备一个现场 USB 磁盘。
|
||||
|
||||
#### 升级步骤
|
||||
|
||||
打开 “<ruby>软件包和更新<rt>Software & Update</rt></ruby>” 。
|
||||
|
||||
转到 “<ruby>更新<rt>Updates</rt></ruby>” 标签页。
|
||||
|
||||
转到 “<ruby>通知我新的 Ubuntu 版本<rt>Notify me of a new Ubuntu version</rt></ruby>”,选择并将其更改为 “<ruby>任意新的版本<rt>For any new version</rt></ruby>”。
|
||||
|
||||
这将告诉软件包管理器来查找 Ubuntu 22.10 发布版本的详细信息。
|
||||
|
||||
![Make sure to change the option for new Ubuntu 22.10 release][3]
|
||||
|
||||
打开一个终端,并运行下面的命令:
|
||||
|
||||
```
|
||||
sudo apt update
|
||||
sudo apt upgrade
|
||||
```
|
||||
|
||||
或者,你也可以打开软件包更新程序。安装所有的准备就绪的软件包。
|
||||
|
||||
在两个命令完成后,打开软件包更新。你将会看到一个升级到 Ubuntu 22.10 的提示(如下图所示)。
|
||||
|
||||
![New version update prompt from the GUI method][4]
|
||||
|
||||
现在,单击 “<ruby>升级<rt>Upgrade</rt></ruby>” 按钮,并按照屏幕上的说明进行操作。升级过程需要一些时间,因此,要耐心等待,直至升级完成。确保在整个升级过程中有稳定的互联网链接。
|
||||
|
||||
如果你尚未获得更新,请等待一、两天后再次尝试。
|
||||
|
||||
如果你没有看到上述提示,手动重新启动一次系统。并再次添加尝试。
|
||||
|
||||
#### 通过终端
|
||||
|
||||
在终端中通过 nano 文件编辑器打开下面的文件。
|
||||
|
||||
```
|
||||
nano /etc/update-manager/release-upgrades
|
||||
```
|
||||
|
||||
将 `Prompt=LTS` 更改为 `Prompt=normal` 。注意:如果你已经如上所述将更新标签页更改为 “<ruby>任意新的版本<rt>For any new version</rt></ruby>” ,那么这个文件应该已经更新了。但是,要验证它一次。
|
||||
|
||||
![Change the release upgrade file][5]
|
||||
|
||||
分别按下组合键 `CTRL+O` 和组合键 `CTRL+X` 来保存和退出。
|
||||
|
||||
最后,你也可以运行下面的命令来从终端中强制升级过程。
|
||||
|
||||
```
|
||||
sudo do-release-upgrade -c
|
||||
```
|
||||
|
||||
![New version update prompt from the terminal method][6]
|
||||
|
||||
升级过程需要花费一些时间(最少半个小时,上不封顶),这主要取决于你的互联网连接和硬件。直至等到其完成。在完成后,重新启动并享受 Ubuntu 22.10 Kinetic Kudu.
|
||||
|
||||
![Upgrade is in progress][7]
|
||||
|
||||
在升级过程进行时,看看我们 [不久前发布的关于 Ubuntu 22.10][8] 的精彩文章。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/upgrade-ubuntu-22-04-22-10/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[robsean](https://github.com/robsean)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.debugpoint.com/ubuntu-22-04-review/
|
||||
[2]: https://www.debugpoint.com/ubuntu-22-10/
|
||||
[3]: https://www.debugpoint.com/wp-content/uploads/2022/10/Make-sure-to-change-the-option-for-new-Ubuntu-22.10-release.jpg
|
||||
[4]: https://www.debugpoint.com/wp-content/uploads/2022/10/New-version-update-prompt-from-the-GUI-method2.jpg
|
||||
[5]: https://www.debugpoint.com/wp-content/uploads/2022/10/Change-the-release-upgrade-file.jpg
|
||||
[6]: https://www.debugpoint.com/wp-content/uploads/2022/10/New-version-update-prompt-from-the-terminal-method.jpg
|
||||
[7]: https://www.debugpoint.com/wp-content/uploads/2022/10/Upgrade-is-in-progress.jpg
|
||||
[8]: https://www.debugpoint.com/tag/ubuntu-22-10
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user