mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-02-03 23:40:14 +08:00
commit
0566b78f41
1
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
1
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
@ -0,0 +1 @@
|
||||
blank_issues_enabled: true
|
18
.github/ISSUE_TEMPLATE/questions.yml
vendored
Normal file
18
.github/ISSUE_TEMPLATE/questions.yml
vendored
Normal file
@ -0,0 +1,18 @@
|
||||
name: Ask Questions | 提问
|
||||
description: Please describe your problem. | 请描述您的问题。
|
||||
labels: ["question"]
|
||||
assignees: []
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
Please answer these questions before you submit the desired feature. | 请在您提交期望的功能之前,回答以下这些问题
|
||||
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Your Questions
|
||||
description: Please describe your problem. | 请描述您的问题。
|
||||
placeholder: I have a question...
|
||||
validations:
|
||||
required: true
|
67
.github/ISSUE_TEMPLATE/topics.yml
vendored
Normal file
67
.github/ISSUE_TEMPLATE/topics.yml
vendored
Normal file
@ -0,0 +1,67 @@
|
||||
name: 推荐选题
|
||||
description: 推荐一个选题
|
||||
title: "[推荐类型] 文章日期 文章标题"
|
||||
labels: []
|
||||
assignees:
|
||||
- lkxed
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
标题请使用 **`[推荐类型] 文章日期 文章标题`** 格式,选题类型、文章日期和文章标题中间有一个 **空格**。
|
||||
|
||||
完整示例:
|
||||
- [推荐选题] 20220823 The Lost Art of the Makefile
|
||||
- [推荐选题] 20220905 Linus Torvalds Uses Apple MacBook Hardware to Release Linux Kernel 5.19
|
||||
- type: input
|
||||
id: url
|
||||
attributes:
|
||||
label: 原文链接地址
|
||||
description: 填写原文章的链接地址
|
||||
placeholder: https://......
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: terms
|
||||
attributes:
|
||||
label: 版权协议
|
||||
description: 填写原文章的版权协议
|
||||
multiple: false
|
||||
options:
|
||||
- CC-SA-BY
|
||||
- 其它公域许可证
|
||||
- 已获取作者授权
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: difficulty
|
||||
attributes:
|
||||
label: 文章难度
|
||||
description: 选择文章的难度
|
||||
multiple: false
|
||||
options:
|
||||
- 困难
|
||||
- 一般
|
||||
- 容易
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
id: category
|
||||
attributes:
|
||||
label: 文章分类
|
||||
description: 选择文章的分类
|
||||
multiple: false
|
||||
options:
|
||||
- 新闻(news)
|
||||
- 观点(talk)
|
||||
- 技术(tech)
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
id: reason
|
||||
attributes:
|
||||
label: 推荐理由
|
||||
description: 填写你的推荐理由
|
||||
placeholder:
|
||||
validations:
|
||||
required: false
|
172
Dict.md
172
Dict.md
@ -1,163 +1,79 @@
|
||||
LCTT 术语词典
|
||||
======
|
||||
|
||||
<img src="https://avatars3.githubusercontent.com/u/5432002?v=3&s=200" align="right" width="100" height="100"></img>
|
||||
<font face='黑体' size=6><b><center>Linux中国术语词典</center></b></font>
|
||||
<br />
|
||||
<font face='微软雅黑' size=3><b><center>[Linux中国](http://www.linux.cn)出品</center></b></font>
|
||||
****************************************************
|
||||
****************************************************
|
||||
<font face='微软雅黑'><b>本词典为规范Linux中国翻译组(LCTT)技术术语翻译而编写,同时也方便广大翻译志愿者查阅。限于编写者的水平,其中可能有不完善或疏漏的地方,希望广大翻译志愿者不吝指正。同时,希望广大翻译志愿者能提供相关术语的翻译供大家参考。另外,若在翻译过程中对某些术语有疑虑,可在我们的QQ专门群中进行讨论。在此,谨代表LCTT感谢各位志愿者的辛勤劳动和无私奉献。</b></font>
|
||||
<font face='微软雅黑' size=3><b><p align='right'>LCTT翻译组</p></b></font>
|
||||
****************************************************
|
||||
本文收录了 LCTT 自创和选用的翻译词汇。
|
||||
|
||||
#### A ####
|
||||
### 1. APM:高级电源管理
|
||||
### 2.
|
||||
#### B ####
|
||||
### 1. Backbone:骨干
|
||||
> 是一个网络的一部分,其作为所有网络运输的一个基本通道,其需要非常高的带宽。一个骨干网络的服务提供者连接许多企业子网和较小服务提供者的网络。一个企业骨干网络连接许多局域网和数据中心。
|
||||
为什么要自创翻译词汇?在翻译过程中,我们发现一些非缩写的英语术语沿袭使用了英语单词/短语,而没有得体的、公认的、正式的对应中文翻译。我们认为,中英文混杂是对原生语言的一种污染(英文缩写除外,这是为了减少冗长的语句),按照本地化的宗旨,应该对这些词汇进行翻译,并在必要时创造新的词汇。故此,我们在几年的翻译中,逐渐推敲和形成了一些新的译法,并在我们翻译的文章中使用和推广。
|
||||
|
||||
### 2. B channel(Bearer channel):承载信道
|
||||
> 承载信道(Bearer Channel),也叫做B channel,是一个全双工DS0时间槽(64-kbps),其携带模拟语音或数字资料通过综合服务数字网(ISDN)。
|
||||
对这些译法,我们尽量遵循“信达雅”的原则。但鉴于水平所及,肯定会有所不足,虽然也有不断的调整和改进,但仍希望得到大家的反馈和指正。
|
||||
|
||||
### 3. Backchannel:反向通道
|
||||
> 是指当其他实时在线会话在进行中时,习惯使用网络化的计算机来维持一个实时的在线会话。
|
||||
我们采用的方法是:
|
||||
|
||||
### 4. Back End:后台
|
||||
> 在一个计算机系统中,是指为一个前台作业提供服务的一个节点或软件程序。前台直接影响用户,后台可能与其他系统相连接,如数据库和其它系统。
|
||||
- 音似:中文读音近似于英文原词
|
||||
- 意近:中文字的意思接近英文原意
|
||||
- 组词:根据上述两条组成新的词汇,以避免和原有词汇混淆
|
||||
|
||||
### 5. Back-haul:回程线路
|
||||
> 是一个通信信道,它使携带信息流到远于最终目的地的地方,然后将它送回。这样做是因为传输到更远的远程区域的代价要远比直接发送的代价低地多。
|
||||
此外,需要说明的是,有些译法可能已经被其他人在别的地方更早提出,但限于我们的学识和搜索能力,并未发现和了解到,并非我们故意剽窃。
|
||||
|
||||
### 6. Backoff:退避
|
||||
> 是指当一个主机已经在有MAC 协议的网络中经历了一个冲突之后试图去重发之前的等待时期。这个退避时间通常是任意的来最小化相同节点再次冲突的可能性。在每次冲突后增加退避时期也能帮助预防重复碰撞,特别当这个网络负担很重时。
|
||||
顺便说一句,2014 年对 “Shebang”(`#!`)一词翻译时,来自于 LCTT 早期重要贡献者 GOLinux 提出的 “[释伴](https://linux.cn/article-3664-1.html)” 译法,是我们第一次创造新的翻译词汇,也是我们形成这样的想法的起点。
|
||||
|
||||
### 7. Backplane:附加卡
|
||||
> 在许多网络中是一个物理接口模块,例如,连接在一个界面处理器或卡和在一个总线机箱内数据总线和功率分配总线之间的一个路由器或转换器。
|
||||
除了自创的翻译词汇外,这里还收录了一些选用的翻译词汇。有一些词汇存在多种译法,我们在翻译和使用过程中,采用了某个译法,在此列出以保持一致。
|
||||
|
||||
### 8. Back Pressure:背压
|
||||
> 在计算机系统中,是指网络拥塞信息逆流通过一个Internet网络。
|
||||
### F
|
||||
|
||||
### 9. Balun(balanced-unbalanced):不平衡变压器
|
||||
> 意味着平衡-非平衡。不平衡变压器是一个设计用来转换平衡和不平衡之间的电信号的设备。
|
||||
#### Fork
|
||||
|
||||
### 10. Baseband:基带
|
||||
> 是一种类型的网络技术,在那里仅仅一种载波频率被使用。在一个基带网中,信息在传送介质中以数字的形式被携带在一个单一的多元信号通道中。
|
||||
Fork 行为/操作广泛用于进程管理、版本管理和软件衍生方面。此词汇也长期缺乏确定的译法。
|
||||
|
||||
### 11. Bastion Host:防御主机
|
||||
> 是在内部网络和外部网络之间的一个网关,它被设计来防御针对内部网络的攻击。这个系统在非武装区(DMZ)的公共一边,不被防火墙或过滤路由器保护,它对攻击是完全暴露的。
|
||||
此前,提议者对 Fork 给出了 “复刻” 的译法。基本意思是,根据上游/父本复制一份,然后在此基础上进行修改,从而形成“衍生品”。
|
||||
|
||||
### 12: Bc(Committed Burst):约定资讯讯务
|
||||
> 是一个用在帧中继系统的术语,是一个帧中继交互网约定接受和传输和通过一个帧中继网络数据链路控制(DLC)和一个特殊的时帧的最大数据量(用比特表示)。
|
||||
|
||||
### 13. BCP(Best Current Practices):最优现行方法
|
||||
> 是副系列的IETF RFCs,其被用于描述在Internet上的最优配置技术。
|
||||
有趣的是,我们发现 GitHub 的 [部分中文文档](https://docs.github.com/zh/actions/managing-workflow-runs/approving-workflow-runs-from-public-forks) 中也采用了此译法,不知道是不是受到了我们的影响。
|
||||
|
||||
### 14. BCU(Balanced Configuration Unit):平衡配置单元
|
||||
> 是一个综合的IBM解决方法,它由软件和硬件组成。BCUs是综合的和测试作为数据仓库系统的预配置功能块。
|
||||
- 提议者:wxy
|
||||
- 首次链接:https://linux.cn/article-7877-1.html
|
||||
|
||||
### 15. BECN(Backward Explicit Congestion Notification):显式拥塞通知
|
||||
> 是在帧中继报头的一个1比特域,其发信号到任何接收帧的事物(转换器和数据终端设备),拥塞就发生在帧的反面(后面)。帧中继转换器和数据终端设备可能遵照显式拥塞通知位来减慢那个方向的数据传输率。
|
||||
### L
|
||||
|
||||
### 16. BER(Bit Error Rate):误码率
|
||||
> 是接收到的位包含错误的比率。BER通常被表示成十足的负面力量。
|
||||
#### Live
|
||||
|
||||
### 17. BIP(Bit Interleaved Parity):位交叉奇偶校验
|
||||
> 一个用在ATM中的术语,是一个通常用来检测链接错误的一种方法。一个检测位或字被嵌入到以前发生阻塞或帧的链接中。位错误在有效载荷中能够作为维护信息被删除和报告。
|
||||
Live 原意多指“现场”、“实时”,在计算机环境中使用时也多引用此意。但对它的翻译就颇费神,因为无论是在 Live Patch,还是更多见的 Live USB/CD、Live Session,其实都不好翻译为“现场”、“实时”。
|
||||
|
||||
#### C ####
|
||||
提议者之前曾经尝试创造了新的“[临场](https://linux.cn/article-12854-1.html)”词汇,但是感觉有些不够达意。经过推敲,提议者再次推荐使用“立付”,在照顾发音的同时,取其“立时交付”之意。这样,Live USB/CD 可以译做 “立付 USB/CD”,Live Session 可以译做 “立付会话”。
|
||||
|
||||
#### D ####
|
||||
### 1. daemon:守护进程
|
||||
### 2.
|
||||
#### F ####
|
||||
而对于 Live Stream,提议者建议依旧翻译为“直播”、“实时流”。对于 Live Patch,还是采用 “热补丁” 这样的意译。
|
||||
|
||||
#### G ####
|
||||
- 提议者:wxy
|
||||
- 首次链接(临场):https://linux.cn/article-12854-1.html
|
||||
- 首次链接(立付):https://linux.cn/article-15499-1.html
|
||||
|
||||
#### H ####
|
||||
### 1. Home Directory:家目录
|
||||
#### I ####
|
||||
### 1. issue:工单
|
||||
> 有翻译做“问题”的,但是应该译作“工单”,尤其是用于 GitHub 中。
|
||||
#### Repo/Repository
|
||||
|
||||
#### J ####
|
||||
Repository 主要用于两个场景,一个是用于版本管理的代码仓库,一个是用于分发软件/组件/制品的软件仓库。
|
||||
|
||||
#### K ####
|
||||
鉴于两种场景的差异,建议在使用时,分别注明“代码仓库”或“软件仓库”,也可简称为 “代码仓”或“软件仓”。
|
||||
|
||||
#### L ####
|
||||
### 1. live CD:现场版 CD
|
||||
> 通常不翻译,但是如果翻译,可以译作“现场版”。
|
||||
### 2. live patch: 实时补丁/热补丁
|
||||
> 指 Linux 内核的 live patch 支持。
|
||||
### S
|
||||
|
||||
### 2. LTS(Long Term Support):长期支持
|
||||
> 该缩写词多见于操作系统发行版或者软件发行版名称中,表明该版本属于长期支持版。
|
||||
#### Shebang [ʃɪ'bæŋ]:释伴
|
||||
|
||||
#### M ####
|
||||
Shebang(也称为 Hashbang)是一个由井号和叹号构成的字符序列(`#!`),出现在脚本文件的第一行的前两个字符,后跟解释器路径,如:`#!/bin/sh`,这通常是 Linux 中 shell 脚本的标准起始行。
|
||||
|
||||
#### N ####
|
||||
长期以来,Shebang 都没有正式的中文名称。提议者将其翻译为:“释伴”,即解释伴随行的简称,同时又是 Shebang 的音译。(关于这个词汇的翻译,在下面的首次链接中有其它的建议和讨论。)
|
||||
|
||||
#### O ####
|
||||
### 1. Orchestration:编排
|
||||
> 描述复杂计算机系统、中间件(middleware)和业务的自动化的安排、协调和管理(来自维基百科)。
|
||||
- 提议者:GoLinux
|
||||
- 首次链接:https://linux.cn/article-3664-1.html
|
||||
|
||||
#### P ####
|
||||
### 1. P-code(Pseudo-code):伪代码语言
|
||||
> 一种解释型语言,执行方式介于编译型语言和解释型语言之间。和解释型语言一样,伪代码编程语言无需编译,在执行时自动转换成二进制形式。然而,和编译型语言不同的是,这种可执行的二进制文件是以伪代码的形式而不是机器语言的形式存储的。伪代码语言的例子有 Java、Python 和 REXX/Object REXX。
|
||||
#### Shell :交互界面
|
||||
|
||||
### 2. PAM(Pluggable Authentication Modules):可插拔认证模块
|
||||
> 用于系统安全性的可替换的用户认证模块,它允许在不知道将使用何种认证方案的情况下进行编程。这允许将来用其它模块来替换某个模块,却无需重写软件。
|
||||
Shell 是 Unix/Linux 等系统的 `sh`、`bash` 等命令行的接口程序,包括 DOS/Windows 的 `command.com`/`cmd.exe` 等其实也属于此类,只是通常不这样称呼。
|
||||
|
||||
### 3. Port/Ported/Porting:移植
|
||||
> 一个过程,即获取为某个操作系统平台编写的程序,并对其进行修改使之能在另一 OS 上运行,并且具有类似的功能。
|
||||
这个词汇也是一个一直没有翻译而径直使用的计算机词汇。我们也没有见到(找到)合适的翻译。但是我们在 LCTT 译者 CanYellow 翻译的一篇文章中见到他将其翻译为 “交互界面”,我们认为这是一种好的翻译。
|
||||
|
||||
### 4. POSIX(Portable Operating System Interface for uniX):UNIX 可移植操作系统接口
|
||||
> 一组编程接口标准,它们规定如何编写应用程序源代码以便应用程序可在操作系统之间移植。POSIX 基于 UNIX,它是 The Open Group 的 X/Open 规范的基础。
|
||||
注:有些人对此次条的翻译持反对意见,此词条建议尝试性在部分语境中使用。
|
||||
|
||||
#### Q ####
|
||||
- 提议者:CanYellow
|
||||
- 首次链接:https://linux.cn/article-15469-1.html
|
||||
|
||||
#### R ####
|
||||
### 1. RCS(Revision Control System):修订控制系统
|
||||
> 一组程序,它们控制组环境下文件的共享访问并跟踪文本文件的变化。常用于维护源代码模块的编码工作。
|
||||
### 说明
|
||||
|
||||
### 2. RFS(Remote File Sharing):远程文件共享
|
||||
> 一个程序,它让用户访问其它计算机上的文件,就好象文件在用户的系统上一样。
|
||||
|
||||
#### S ####
|
||||
### 1. shebang [ʃɪ'bæŋ]:释伴
|
||||
> Shebang(也称为Hashbang)是一个由井号和叹号构成的字符序列(#!),出现在文本文件的第一行的前两个字符,后跟解释器路径,如:#!/bin/sh,这通常是Linux中shell脚本的标准起始行。
|
||||
> 长期以来,shebang都没有正式的中文名称。Linux中国翻译组将其翻译为:释伴,即解释伴随行的简称,同时又是shebang的音译。
|
||||
|
||||
### 2. Spool(Simultaneous Peripheral Operation On-Line):假脱机
|
||||
> 将数据发送给一个程序,该程序将该数据信息放入队列以备将来使用(例如,打印假脱机程序)
|
||||
|
||||
### 2. Steganography:隐写术
|
||||
> 将一段信息隐藏在另一段信息中的做法。一个示例是在数字化照片中放置不可见的数字水印。
|
||||
|
||||
### 3. Swap:交换
|
||||
> 暂时将数据(程序和/或数据文件)从随机存取存储器移到磁盘存储器(换出),或反方向移动(换入),以允许处理比物理内存所能容纳的更多的程序和数据。
|
||||
|
||||
### 4. Scheduling:调度
|
||||
> 将任务分配至资源的过程,在计算机或生产处理中尤为重要(来自维基百科)。
|
||||
|
||||
#### T ####
|
||||
### 1. Time-sharing:分时
|
||||
> 一种允许多个用户分享处理器的方法,它以时间为基础给每个用户分配一部分处理器资源,按照这些时间段轮流运行每个用户的进程。
|
||||
|
||||
### 2. TL;DR:长篇摘要
|
||||
> Too Long;Didn't Read的缩写词,即太长,未阅的意思。该词多见于互联网社区论坛中,用于指出该文太长,没有阅读,或者标示出一篇长文章的摘要。在论坛回复中,该缩写词也多作为灌水用。因此,Linux中国翻译组将其翻译为:长篇摘要。
|
||||
|
||||
#### U ####
|
||||
|
||||
#### V ####
|
||||
### 1. VRML(Virtual Reality Modeling Language):虚拟现实建模语言
|
||||
> 一种主要基于 Web 的语言,用于 3D 效果(如构建遍历)。
|
||||
|
||||
#### W ####
|
||||
### 1. Wrapper:封装器
|
||||
> 用于启动另一个程序的程序。
|
||||
|
||||
#### X ####
|
||||
|
||||
#### Y ####
|
||||
|
||||
#### Z ####
|
||||
此文档会根据建议不断更新,其固定地址为: https://github.com/LCTT/TranslateProject/blob/master/Dict.md ,欢迎大家提交议题或拉取请求来完善它。
|
42
lctt2022.md
Normal file
42
lctt2022.md
Normal file
@ -0,0 +1,42 @@
|
||||
开源贡献者翻译组 LCTT 九岁啦
|
||||
======
|
||||
|
||||
九年前,也是这个上午,我创建了 LCTT 及其第一个项目 [TranslateProject](https://github.com/LCTT/TranslateProject/)。从最初只是有感于 Unix/Linux 上的中文手册页实在太糟糕,希望做一些事情;到最后变成了一个以翻译国外各个开源社区的技术文章和开源资讯/讨论的“流水”式项目,LCTT 已经走过了令我自己都非常吃惊的九年。
|
||||
|
||||
人的一生,几十年而已,能在一件事上持续投入九年时光,这是我从未想过的事情。驻足回望,LCTT 其实并没有完成我最初的想法,这是缺憾;但是 LCTT 就这样变成了另外一种并非在我计划中的样子,或许也有其必然性。现在看来,LCTT 做了一些事情,也有一些存在的意义。我试着总结一下:
|
||||
|
||||
LCTT 的主项目 TranslateProject,选题广泛,参与门槛低,从某种意义上,为初识开源的小伙伴提供一种成为开源贡献者的方式。一些人就是通过这个项目,迈出了成为开源贡献者的第一步,并在日后的学习和工作中,成为了开源爱好者、专业技术人员。
|
||||
|
||||
LCTT 持续翻译了数千篇(截至今日,已经翻译发布了 6395 篇文章),这些文章的专业程度横跨了入门到精通等不同难度,内容方向涉猎了开发、运维、使用和文化等各个方面。虽然,有些文章仅堪一读,但也有不少文章值得收藏、一再细读。我屡屡能从读者那里得到反馈,这些文章对他们提供了很大的帮助,我想这就是 LCTT 的存世价值之一吧。唯独可惜的是,这些文章,没有以很好的方式组织起来,甚憾。
|
||||
|
||||
LCTT 有数百成员(截至今日,成功地在仓库中进行了贡献的贡献者有 311 位),他们的年龄不等,最年轻的有初中的学生、最老的,嗯这个不需要说了;他们的职业各异,比较多的是大学生,也有很多从事技术工作的专业人员,甚至还有完全不从事技术工作的贡献者。但是,他们都有一个共同的身份就是 LCTT 贡献者,因此,他们都有很多开源兄弟姐妹。
|
||||
|
||||
按照惯例,每两年,我会写一篇 LCTT 总结。今年又快到这个时间了,我却有些不知道该如何下笔。恍惚间,我突然想到,LCTT 是一个贡献者组织,是大家的 LCTT,那么,为什么不让大家来为 LCTT 写两句话呢?于是,我在 LCTT 群内发起了号召,请诸位成员写写自己参与 LCTT 的经历、感受或收获,也可以是祝愿、建议。下面,是我收集到的其中一些成员的留言(以留言时的顺序列出):
|
||||
|
||||
- **译者-acyanbird**:Linux 中国是我的开源引路人,让我有机会从零开始参与开源社区,认识到了开源精神,见到了世界的另一个可能性。也借此机会参与不少活动,认识了很多开源人士。目前在组长的帮助下,我也开始自己建立社区,十分感谢您给我这个机会~希望我们都越来越好,有更多的人也来一起参与开源
|
||||
- **译者-mandeler**:LCTT community forever!
|
||||
- **译者-Kira-Pgr**:For a better open source world!
|
||||
- **译者-mengxinayan**:LCTT 不仅可以用来锻炼翻译能力,同时有专人进行校对,能有效找到自身不足。此外还可以用来接触新知新方向,最重要的是可以培养自身英文阅读的习惯。Thanks LCTT!
|
||||
- **译者-aftermath0703**:从 LCTT 我收获到了许多知识,有时间我就会去 GitHub 上读读新的文章,有更多时间我就会去翻译一篇。翻译过程中先自己翻译一遍,再用翻译网站翻译一遍,有偏差的地方相互比对,我觉得这对我的各项英语能力都有很大的帮助。希望 LCTT 蓬勃发展,越办越好!
|
||||
- **译者-MFGJT**:虽然因为工作原因很久没有翻译了,但是还是每天在看微信公众号。感觉到大家都很努力,希望今年有机会继续参加翻译 🌹
|
||||
- **译者-stevending1st**:加入 LCTT 最大的惊叹是核心贡献者能够做到维护一个几百人的贡献者群体,背后是他们巨大的努力。希望能在 LCTT 不断学习,努力提升自己的能力。也祝愿 LCTT 越来越好。
|
||||
- **译者-aREversez**:作为一个学翻译的学生,能参与到 LCTT 这样一个项目,了解更多关于开源与技术的知识,见识更宽阔的世界和更深远的历史,让自己能尽己所能为开源贡献一份力量,实属荣幸之至。希望咱们社区能够一直繁荣下去,传播更加丰富多彩的开源技术与思想!
|
||||
- **译者-mcfd**:LCTT 翻译的许多实用的技术文章,能够简明、易懂地为广大小白答疑解惑,扫除学习、日常中遇到的坑,间接且不断地为开源社区注入生机。清风不解凌云志,明月无声照九州。
|
||||
- **核心-lkxed**:在裸辞考研失败之后,我曾一度陷入迷茫。偶然间读到老王写的《如何以翻译贡献参与开源社区》,决心加入进来。自此,我从一个连 Git 和 GitHub 都搞不大懂的小白,成长为一名熟练的译者,又成长为一名熟练的选题。踏踏实实地做好一件小事,每天如此,不正是对抗焦虑和迷茫的好办法吗?感谢开源,给了我这个成长的机会;感谢 LCTT,领着我敲开了开源的大门;感谢老王,在我困惑时指点迷津。祝愿 LCTT 越办越好,我们一路与你同行!
|
||||
- **核心-bestony**:刚刚专门回到网站上看了一下,我参与 LCTT 已经 8 年了,8 年来,LCTT 见证了我从小透明到半透明,也经历了我人生的三分之一。希望在未来的时间里,我可以和 LCTT 共成长,也可以与 LCTT 共人生。
|
||||
- **核心-Locez**:今天是 LCTT 的生日,也是我的生日,一种奇妙的缘分。LCTT 是我接触 LC,接触开源以后第一个比较正式贡献的项目,对我来说意义比较非凡,重要的是通过这个项目在 LC 以及 LCTT 结识到了热爱分享的大家,特别是老王,viz,bestony 等人,很感谢大家在我学生时代起,就对我的一些耐心引导与帮助。
|
||||
- **译者-robsean**:科教兴国,实干兴邦
|
||||
- **译者-TravinDreek**:作为一位自由软件活动者,我主要从事技术伦理相关文章的翻译。我在 LCTT 的翻译动机,不止在于增进自己对当今技术伦理问题的认识,更在于让人们有机会了解到并利用自由(和开源)软件来应对这些问题。希望 LCTT 今后能在传播 FLOSS 方面起到更大的作用。Happy hacking.
|
||||
- **译者-Wlzzzz-del**:之前备考考研时,偶然接触到 LCTT。为了多了解一些 Linux 知识,同时提高自己的英语水平,因此选择加入了 LCTT,这也是我第一次参与开源项目。虽然因为很多原因,翻译的文章不多,但是 LCTT 发布的文章我都会认真阅读。在未来我希望能多抽出时间来,参与到翻译活动中来。
|
||||
- **译者-Veryzzj**:今年年初在朋友的介绍下认识了 LCTT 并参与到了其中,仔细回想 LCTT 的意义于我是什么?是打破开源项目于我的神秘面纱,是从申领到翻译每一篇收获的成就感,是发布了文章感受到的正反馈,是在翻译群中和大家交流时的友好气氛。正是这些点滴,是我对抗生命无意义感的武器。我们用语言打破边界,也用语言拓宽世界。预祝 LCTT 越来越好!
|
||||
- **译者-Chao-zhi**:加入 LCTT 已经六年了,我已经不记得自己是怎么加入 LCTT 了。但我一直记得我是通过 LCTT 的 wiki 学会使用 GitHub 的。也是通过 LCTT 慢慢了解开源世界的。希望能继续和 LCTT 一起成长。
|
||||
- **核心-MjSeven**:但愿 LCTT 长久,千里共婵娟
|
||||
- **译者-mudongliang**:LCTT 是早期我参与的开源项目,通过这个项目我学会了很多开源知识,熟练使用 Git 使用,为后期在内核项目贡献,奠定了坚实基础 😁
|
||||
- **译者-Northurland**:感谢 LC 治好了我的网友见面恐惧症(笑)。这是我在校园外参与的第一个项目,很感谢组长和 LC 的大家给予我这个机会。希望我们珍视的这个社区在未来能让更多人了解开源、参与开源。
|
||||
|
||||
说实话,LCTT 和 Linux 中国能走到今天,全赖这些贡献者的支持,这让我每每感觉吃力时,都有了不能放弃的理由。
|
||||
|
||||
那么,你是不是也想加入 LCTT 呢?很简单,访问 LCTT 官网:https://linux.cn/lctt/ 即可了解如何成为一名 LCTT 贡献者了。
|
||||
|
||||
最后,感谢大家九年来的支持和信任!顺祝大家中秋节、教师节快乐!
|
||||
|
@ -0,0 +1,167 @@
|
||||
[#]: subject: "Get started with edge computing by programming embedded systems"
|
||||
[#]: via: "https://opensource.com/article/21/3/rtos-embedded-development"
|
||||
[#]: author: "Alan Smithee https://opensource.com/users/alansmithee"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "cool-summer-021"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15525-1.html"
|
||||
|
||||
通过编写嵌入式系统入门边缘计算
|
||||
======
|
||||
|
||||
> 用于操控无线调制解调器的 AT 设备包是 RTOS 最流行的扩展功能之一。
|
||||
|
||||
![][0]
|
||||
|
||||
RTOS 是一个开源的 [嵌入式设备操作系统][2],由 RT-Thread 开发。它为开发者提供了标准化的、友好的基础架构,开发者可以基于各种设备编写代码,它包含大量有用的类库和工具包,使开发过程更加便捷。
|
||||
|
||||
RTOS 使用的是模块方式,以便于扩展,这一点跟 Linux 类似。各种软件包可以让开发者将 RTOS 用于任何想要的目标设备。RTOS 最常用的一种扩展是 AT 设备包,它包含各种不同 AT 设备(例如调制解调器)的移植文件和示例代码。
|
||||
|
||||
在超过 62,000 次下载中(截止至撰写本文时),最流行的 RTOS 扩展之一是 AT 设备包,其中包括用于不同 AT 设备的移植文件和示例代码。
|
||||
|
||||
### 关于 AT 命令
|
||||
|
||||
起初,AT 命令是一个协议,用于控制拨号调制解调器。随着调制解调器技术发展到较高的带宽,它仍然可以用作轻量级而高效的设备控制协议,主流的移动电话厂商也联手开发了一系列 AT 命令,用于控制移动电话上的 GSM 模块。
|
||||
|
||||
如今,AT 命令仍然在网络通信领域具有通用性,很多设备,例如 WiFi、蓝牙、4G,都支持 AT 命令。
|
||||
|
||||
如果你正在创建用于边缘计算输入、监控或物联网(IoT)的专用设备,则你可能接触到一些 RTOS 支持的 AT 设备,包括 ESP8266、ESP32、M26、MC20、RW007、MW31、SIM800C、W60X、SIM76XX、A9/A9G、BC26、AIR720、ME3616、M 6315、BC28 和 EC200X。
|
||||
|
||||
RT-Thread 包含套接字抽象层(SAL)组件,SAL 实现了多种网络协议和接口的抽象,为上层提供了一系列标准的 [BSD 套接字][3] API。SAL 进而接管了 AT 的套接字接口,所以开发者只需要考虑网络应用层提供的网络接口。
|
||||
|
||||
这个软件包实现了设备(包括上述设备)上的 AT 套接字功能,支持通过标准套接字接口以 AT 命令的形式通信。[RT-Thread 编程指南][4] 中就有关于这些功能的详细介绍。
|
||||
|
||||
at_device 软件包是在 LGPLv2.1 许可证下分发的,借助 [RT-Thread Env 工具][5] 可以方便地获取到。该工具包含一个配置器和一个包管理器,它们分别用于配置内核和组件功能,可以用于定制组件并管理在线包。有了这些工具,开发者可以像搭积木一样构建系统。
|
||||
|
||||
### 获取 AT 设备包
|
||||
|
||||
为了使用配置了 RTOS 的 AT 设备,你必须启用 AT 组件库和 AT 套接字功能,需要:
|
||||
|
||||
* RT_Thread 4.0.2+
|
||||
* RT_Thread AT 组件 1.3.0+
|
||||
* RT_Thread SAL 组件
|
||||
* RT-Thread netdev 组件
|
||||
|
||||
AT 设备包已经针对多种版本进行了相应的更新。版本不同,配置选项也相应地不同,因此必须针对相应的系统版本进行适配。目前最常用的 AT 设备包版本有:
|
||||
|
||||
* V1.2.0: 针对低于 V3.1.3 的 RT-Thread,V1.0.0 的 AT 组件
|
||||
* V1.3.0: 针对低于 V3.1.3 的 RT-Thread,V1.1.0 的 AT 组件
|
||||
* V1.4.0: 针对低于 V3.1.3 或等于 V4.0.0 的 RT-Thread,V1.2.0 的 AT 组件
|
||||
* V1.5.0: 针对低于 V3.1.3 或等于 V4.0.0 的 RT-Thread,V1.2.0 的 AT 组件
|
||||
* V1.6.0: 针对低于 V3.1.3 或等于 V4.0.1 的 RT-Thread,V1.2.0 的 AT 组件
|
||||
* V2.0.0/V2.0.1: 针对高于 V3.1.3 的 RT-Thread,V1.3.0 的 AT 组件
|
||||
* 最新版: 针对高于 V3.1.3 的 RT-Thread,V1.3.0 的 AT 组件
|
||||
|
||||
获取正确的版本的过程主要是在生成菜单时自动完成的。它基于现有的系统环境提供最合适的 AT 设备包。
|
||||
|
||||
正如前文提到的,不同的版本需要不同的配置选项。例如,
|
||||
|
||||
```
|
||||
RT-Thread online packages --->
|
||||
IoT - internet of things --->
|
||||
-*- AT DEVICE: RT-Thread AT component porting or samples for different device
|
||||
[ ] Enable at device init by thread
|
||||
AT socket device modules (Not selected, please select) --->
|
||||
Version (V1.6.0) --->
|
||||
```
|
||||
|
||||
按线程启用 AT 设备初始化的选项决定了配置是否创建一个单独的线程来初始化设备网络。
|
||||
|
||||
2.x 版本支持同时启用多个 AT 设备:
|
||||
|
||||
```
|
||||
RT-Thread online packages --->
|
||||
IoT - internet of things --->
|
||||
-*- AT DEVICE: RT-Thread AT component porting or samples for different device
|
||||
[*] Quectel M26/MC20 --->
|
||||
[*] Enable initialize by thread
|
||||
[*] Enable sample
|
||||
(-1) Power pin
|
||||
(-1) Power status pin
|
||||
(uart3) AT client device name
|
||||
(512) The maximum length of receive line buffer
|
||||
[ ] Quectel EC20 --->
|
||||
[ ] Espressif ESP32 --->
|
||||
[*] Espressif ESP8266 --->
|
||||
[*] Enable initialize by thread
|
||||
[*] Enable sample
|
||||
(realthread) WIFI ssid
|
||||
(12345678) WIFI password
|
||||
(uart2) AT client device name
|
||||
(512) The maximum length of receive line buffer
|
||||
[ ] Realthread RW007 --->
|
||||
[ ] SIMCom SIM800C --->
|
||||
[ ] SIMCom SIM76XX --->
|
||||
[ ] Notion MW31 --->
|
||||
[ ] WinnerMicro W60X --->
|
||||
[ ] AiThink A9/A9G --->
|
||||
[ ] Quectel BC26 --->
|
||||
[ ] Luat air720 --->
|
||||
[ ] GOSUNCN ME3616 --->
|
||||
[ ] ChinaMobile M6315 --->
|
||||
[ ] Quectel BC28 --->
|
||||
[ ] Quectel ec200x --->
|
||||
Version (latest) --->
|
||||
```
|
||||
|
||||
这个版本包含了很多其他选项,其中也有启用示例代码的选项,这对初学者或使用不熟悉的设备的开发者很有帮助。
|
||||
|
||||
你也可以设置相应选项,选择你想用来给你的组件供电的针脚、指示电源状态的针脚、样本设备使用的串行设备的名称,以及样本设备接收数据的最大长度。在合适的设备上,你也可以设置 SSID 和密码。
|
||||
|
||||
简而言之,控制选项是够用的。
|
||||
|
||||
* V2.x.x 版本支持同时启用多个 AT 设备,欲查看启用的设备信息,在 [finsh shell][6] 中执行 `ifocnfig` 命令即可。
|
||||
* V2.X.X 版本需要设备在使用前先注册;注册可以在样例目录中进行,或在应用层以自定义方式进行。
|
||||
* 针脚选项,例如电源针脚和电源状态针脚是按照设备的硬件连接来配置的。如果硬件的开启功能不可用,它们就会被设置为 `-1`。
|
||||
* 一台AT 设备应当对应一个序列名称,每台设备的 AT 客户端名称应当是不同的。
|
||||
|
||||
### AT 组件配置选项
|
||||
|
||||
当选择了 AT 组件包,启用了设备支持,AT 组件的客户端功能也就默认选择完成了。对 AT 组件来说,这就意味着有更多的选项要设置:
|
||||
|
||||
```
|
||||
RT-Thread Components --->
|
||||
Network --->
|
||||
AT commands --->
|
||||
[ ] Enable debug log output
|
||||
[ ] Enable AT commands server
|
||||
-*- Enable AT commands client
|
||||
(1) The maximum number of supported clients
|
||||
-*- Enable BSD Socket API support by AT commnads
|
||||
[*] Enable CLI(Command-Line Interface) for AT commands
|
||||
[ ] Enable print RAW format AT command communication data
|
||||
(128) The maximum length of AT Commonds buffer
|
||||
```
|
||||
|
||||
与 AT 设备包有关的配置选项有:
|
||||
|
||||
* 支持的客户端最大个数:选择 AT 设备包中的多台设备时,需要将该选项配置为对应的设备台数;
|
||||
* 通过 AT 命令启用 BSD 套接字 API 功能:当选择 AT 设备包时默认选择该选项。
|
||||
* AT 命令的最大长度:AT 命令可发送的数据的最大长度
|
||||
|
||||
### 一切皆有可能
|
||||
|
||||
当你开始进行嵌入式系统编程,你会很快意识到,你可以创造自己想象得到得任何东西。RTOS 旨在帮助你实现它,它的那些功能包为你提供了良好的开端。现在,设备的互联也是可期待的。边缘的物联网技术必须能够通过各种协议进行通信,而 AT 协议是关键。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/3/rtos-embedded-development
|
||||
|
||||
作者:[Alan Smithee][a]
|
||||
选题:[lkxed][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/alansmithee
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/tips_map_guide_ebook_help_troubleshooting_lightbulb_520.png
|
||||
[2]: https://opensource.com/article/20/6/open-source-rtos
|
||||
[3]: https://en.wikipedia.org/wiki/Berkeley_sockets
|
||||
[4]: https://github.com/RT-Thread/rtthread-manual-doc/blob/master/at/at.md
|
||||
[5]: https://www.rt-thread.io/download.html?download=Env
|
||||
[6]: https://www.rt-thread.org/download/rttdoc_1_0_0/group__finsh.html
|
||||
[7]: https://www.redhat.com/en/topics/edge-computing
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202302/10/065738jhzvfgfgyvfznfhz.jpg
|
@ -0,0 +1,141 @@
|
||||
[#]: subject: "3 steps for managing a beginner-friendly open source community"
|
||||
[#]: via: "https://opensource.com/article/21/8/beginner-open-source-community"
|
||||
[#]: author: "Isabel Costa https://opensource.com/users/isabelcmdcosta"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "XiaotingHuang22"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15534-1.html"
|
||||
|
||||
管理对新手友好的开源社区的三个步骤
|
||||
======
|
||||
|
||||
> 作为一个开源项目的成员,你可以做很多事情来帮助新手找到为项目作出贡献的方式。
|
||||
|
||||
![][0]
|
||||
|
||||
当有人刚开始为开源做贡献时,最好从对新手友好的故障和议题开始。但在他们修复故障之前,他们必须要能够找到这类问题。作为一个开源项目的成员,你可以做很多事情来帮助新手找到为项目贡献的方式。
|
||||
|
||||
鉴于此,[AnitaB.org 开源社区][2] 优先考虑让我们的社区做到对新手友好。我们提倡包容性,确保不同经验和水平的贡献者都可以参与进来,并且他们的贡献不止限于跟编程有关。
|
||||
|
||||
我最近在 [Upstream 2021][4],即 Tidelift 活动中介绍了我们在 [AnitaB.org][3] 上所做的一些社区工作,该活动启动了“维护者周”,这是一个为期一周的开源维护者庆祝活动。在活动中我讨论了我们策略的三个主要部分:
|
||||
|
||||
* 我们如何沟通
|
||||
* 项目和议题
|
||||
* 开源项目
|
||||
|
||||
### 我们如何沟通
|
||||
|
||||
透明度是开源的重要组成部分,我们将透明度原则应用于我们的沟通方式。实际上,这意味着我们所有的社区会议都是公开进行的,并且影响我们设置 Zulip 聊天的方式以及我们提供文档的方式。
|
||||
|
||||
#### 开放会议
|
||||
|
||||
任何人都可以加入我们的会议,并讨论与我们社区相关的话题。他们可以参与讨论或者旁听。会议相关信息在我们的社区日历中都可以找到。在这些通话中我们通常只使用语音聊天,我们发现这可以让人们在参与时感觉更自在。
|
||||
|
||||
我们举办以项目为中心的会议和一些分类的会议。会议上,来自不同领域的人们可以讨论同一个项目并帮助改进我们的流程。偶尔,我们会有“<ruby>自由提问<rt>Ask Me Anything</rt></ruby>(AMA)”会议,任何人都可以来问任何与开源相关的问题。
|
||||
|
||||
所有会议我们都会在共享文档中进行记录,并在 [我们的 Zulip][5] 中共享摘要和文档链接。
|
||||
|
||||
#### 我们的 Zulip 聊天
|
||||
|
||||
开源 Zulip 聊天平台是我们的主要社区交流渠道,虽然我们也在 Github 的评论区讨论议题和<ruby>拉取请求<rt>Pull Request</rt></ruby>(PR)。一般来说,我们禁用了私人消息以确保我们尽可能透明。对于这条规则,我们只有少数例外,那些私人聊天是管理员在处理我们运行程序的后勤工作所用的。我们发现这种方法更受欢迎,它还使我们能够更清楚公共聊天中的违规行为。
|
||||
|
||||
我们在 Zulip 聊天室分享所有会议摘要,包括讨论的要点、行动项目和文档。这些听起来好像是些显而易见的要求,但我一直惊讶于很多开源项目并不提供会议笔记,所以 Zulip 可以让那些没有参加会议的人也随时了解情况。
|
||||
|
||||
在 Zulip上,我们讨论项目路线图,回答社区的问题和疑问,并积极**促进人们通过不同的方式方法和在不同的场景下做出自己的贡献**。有时我们为贡献者的成就而庆祝 —— 无论是为了突出他们测试或者审查的第一个拉取请求,还是强调我们志愿者所做的出色工作。
|
||||
|
||||
#### 文档
|
||||
|
||||
我们尽量保持**关于我们流程的开放文档**,例如常见问题解答,以便这些社区成员可以按照自己的节奏和时间了解社区。这是为了让他们在联系我们之前了解我们的工作方式以及我们从事的工作类型。
|
||||
|
||||
### 项目和议题
|
||||
|
||||
关于我们的项目和议题管理,我们鼓励通过多种方式做出贡献,我们为新手专门创建特定的议题,并尝试让项目的设置变得简单。
|
||||
|
||||
#### 多种贡献的方式
|
||||
|
||||
我们努力创建**需要不同贡献的问题**,例如文档、测试、设计和外展。这是为了让任何人 —— 无关他们的经验水平和兴趣领域 —— 都能做出贡献。这样能够帮助社区参与进来,而且我们发现它使成员能够从一些省力但有价值的任务开始一步步做出贡献。
|
||||
|
||||
我们提倡的贡献类型有:
|
||||
|
||||
* 不同复杂性的编程任务。
|
||||
* 质量保证任务 —— 贡献者可以测试我们的应用程序或拉取请求并报告错误。
|
||||
* 社区成员可以参与讨论的设计会议。此外,创建模型和重新设计我们应用程序某些部分的机会,并探索改进用户体验。
|
||||
* 外展任务,我们主要在 Zulip 上推广,我们建议在我们的 Medium 出版物上发表博客,介绍他们的开源经验和他们的贡献。
|
||||
* 文档任务,可以包括一般社区文档或我们在 Docusaurus 上的项目文档。
|
||||
|
||||
#### 仅限新手的问题
|
||||
|
||||
我们将一些**议题标记为“仅限新手”**。这些问题适用于尚未为议题存储库做出贡献的人。为议题做标签还使我们能够让人们在贡献者大量涌入时开始他们的开源之旅,例如,在 [谷歌编程之夏(GSoC)][6] 申请期间。
|
||||
|
||||
有时,这些可能是“唾手可得的果实”,可以让他们熟悉作出贡献和提交拉取请求的过程。
|
||||
|
||||
#### 简单的项目设置
|
||||
|
||||
我们也很在意为我们的项目提供**新手友好的安装设置**。我们注意到最活跃的项目通常是最容易设置的。我们知道,为你不熟悉的项目做出贡献可能需要付出很多努力并且关乎贡献体验的成败。
|
||||
|
||||
我们尝试提供有关如何在多个操作系统上运行我们项目的说明。在过去,我们有一些项目有单独的说明,可以在 Unix 环境下运行,我们注意到贡献者在 Windows 上运行这些项目有些困难。自那以后我们不断进行改进,以避免贡献者在 Zulip 上寻求帮助时出现混乱。
|
||||
|
||||
我们根据贡献者的经验,一直在改进我们最活跃的项目之一 [mentorship-backend][7] 的自述文件。新手在这个项目中遇到的困难之一是设置与配置电子邮件帐户相关的部分环境变量,以使后台功能能够发送电子邮件。但是,由于此功能对于本地开发并不重要,因此默认情况下,我们将电子邮件设置设为可选,以便将电子邮件打印到终端,而不是发送给用户。这种方法仍然使贡献者可以看到这些电子邮件。与此更改类似,我们将 [SQLite 数据库][8] 作为本地开发的默认设置,以避免对 Postgres 数据库进行额外设置,虽然我们在部署版本中会使用到 Postgres。
|
||||
|
||||
我们注意到,一些贡献者在为我们的 [bridge-in-tech-backend][9] 项目做出贡献时觉得很困难,该项目的设置很复杂,并且包含的步骤比 [mentorship-backend][7] 多得多。自从我们在一个开源项目中注意到这一点以来,我们一直在探索如何改进其结构。
|
||||
|
||||
对于我们的大多数项目,我们还提供应用程序的实时体验版本或打包版本,以便贡献者无需设置即可测试项目。这有助于我们为那些对开发设置不感兴趣或不熟悉的贡献者提供一种方式,来尝试我们应用程序的最新版本,并通过报告发现的任何错误来做出贡献。我们在 [质量保证指南][10] 中放了这些应用程序的链接。
|
||||
|
||||
### 开源计划
|
||||
|
||||
我们在社区中组织了两个主要计划:开源黑客(OSH)(一个为期一个月的项目)和 Open Source Ambassadors(一个为期六个月的项目)。
|
||||
|
||||
#### 开源黑客(OSH)
|
||||
|
||||
在此计划中,我们在多个类别的贡献中创建议题 —— 文档、编码、外展、测试和设计(类似于 [谷歌的 Code-in][11] 竞赛)。 参与者可以为每个类别至少贡献一次并获得电子证书。一个议题可能包含多个类别,并且无需合并拉取请求也能使贡献有效。
|
||||
|
||||
我们为这个计划选取几个项目,请导师们集思广益为参与者创造议题。项目开始后参与者可以认领议题并开始作出贡献。导师们会支持帮助并审查他们的贡献。
|
||||
|
||||
这种方法鼓励贡献的多样性,并欢迎任何人,无论他们的编码能力如何,都可以在友好和不怕出错的环境中做出贡献。
|
||||
|
||||
#### 开源大使
|
||||
|
||||
在此计划中,我们从社区中选择大使,理想情况下他们将涵盖我们旨在促进的每一类贡献。至今该计划已启动了两次。
|
||||
|
||||
该计划旨在让成员通过回答社区的议题、协助贡献者参与并为他们指定的类别宣传来帮助管理项目和计划。
|
||||
|
||||
第一个计划举行时我们接受了所有的申请者。我们评估了社区成员的兴趣所在,并为那些想要做出贡献但最初不敢踏出第一步的人提供了一个体系。
|
||||
|
||||
第一个计划的举办给了我们很多启发。因为我们的活动中既有经验丰富的开源贡献者和社区成员,也有初来乍到缺乏经验的新手,因此项目的执行要求管理员进行大量的管理工作。一些社区大使信心十足准备好进一步采取新措施,而其他大使则需要更多支持。到了第二个,我们决定缩减该计划,只接受那些已经熟悉社区、可以领导倡议和项目并帮助我们培训新人的贡献者。
|
||||
|
||||
第二个计划中形成了正反馈循环。那些在第一个计划中还是新手的大使们,通过为上一个项目做出贡献并且从项目经验中学习之后能够做到轻松带领项目。
|
||||
|
||||
这种方法的改变使管理员能够更加专注于支持大使团队,帮助他们传播我们的使命,并继续让我们的社区对新手友好,并指导更多人做出贡献。
|
||||
|
||||
### 总结
|
||||
|
||||
这些计划帮助我们提高了对开源贡献和回馈的不同方式的认识。通过它们,我们发现志愿者通过管理项目和举办公开会议来提供帮助,这有助于管理社区并为我们的贡献者提供指导。
|
||||
|
||||
尽管我们得到了贡献者的良好反响,并帮助人们做出了他们的第一个贡献,但我们仍有很大的改进空间。我们将继续改进我们项目的设置和贡献指南,以改善贡献者的体验。我们还将继续专注于确保我们的组织始终拥有并推动不同类别的问题,促进包容性,以便任何有意愿做出贡献的人都能出自己的一份力。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/8/beginner-open-source-community
|
||||
|
||||
作者:[Isabel Costa][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[XiaotingHuang22](https://github.com/XiaotingHuang22)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/isabelcmdcosta
|
||||
[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://github.com/anitab-org
|
||||
[3]: https://anitab.org/
|
||||
[4]: https://youtu.be/l8r50jCr-Yo
|
||||
[5]: https://anitab-org.zulipchat.com/
|
||||
[6]: https://summerofcode.withgoogle.com/
|
||||
[7]: https://github.com/anitab-org/mentorship-backend#readme
|
||||
[8]: https://opensource.com/article/21/2/sqlite3-cheat-sheet
|
||||
[9]: https://github.com/anitab-org/bridge-in-tech-backend
|
||||
[10]: https://github.com/anitab-org/documentation/blob/master/quality-assurance.md
|
||||
[11]: https://codein.withgoogle.com/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202302/12/222832vxfof8844fo4vsl4.jpg
|
@ -0,0 +1,96 @@
|
||||
[#]: subject: "My favorite LibreOffice productivity tips"
|
||||
[#]: via: "https://opensource.com/article/21/9/libreoffice-tips"
|
||||
[#]: author: "Don Watkins https://opensource.com/users/don-watkins"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "XiaotingHuang22"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15530-1.html"
|
||||
|
||||
提高 LibreOffice 生产力的技巧
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 今天我将和大家分享一些 LibreOffice 的键盘快捷键和排版技巧,希望能够帮你省下宝贵的时间。
|
||||
|
||||
LibreOffice 是我首选的生产力应用程序。它是向教育工作者和学生推荐 Linux 发行版的最有力理由之一,无论是 PK-12 还是高等教育。新的学年快到了,我想也是时候推荐一些 LibreOffice 快捷方式和技巧,它们可以为你节省宝贵的时间。
|
||||
|
||||
### 使用键盘快捷键让你工作更快捷
|
||||
|
||||
我平时经常使用键盘快捷键,以下是适用于所有 LibreOffice 应用程序的最常见的快捷键
|
||||
|
||||
* `Ctrl+N` — 创建新文档
|
||||
* `Ctrl+O` — 打开一个文档
|
||||
* `Ctrl+S` — 保存文档
|
||||
* `Ctrl+Shift+S` — 另存为
|
||||
* `Ctrl+P` — 打印文档
|
||||
|
||||
这些是仅适用于 LibreOffice Writer 的快捷键:
|
||||
|
||||
* `Home` — 移动到当前行的初始位置
|
||||
* `End` — 移动至当前行的结尾位置
|
||||
* `Ctrl+Home` — 将光标移动到文档的初始位置
|
||||
* `Ctrl+End` — 将光标移动到文档的结尾位置
|
||||
* `Ctrl+A` — 全选
|
||||
* `Ctrl+D` — 双下划线
|
||||
* `Ctrl+E` — 居中
|
||||
* `Ctrl+H` — 查找并替换
|
||||
* `Ctrl+L` — 左对齐
|
||||
* `Ctrl+R` — 右对齐
|
||||
|
||||
功能键也大有用处:
|
||||
* `F2` — 打开公式栏
|
||||
* `F3` — 自动补完
|
||||
* `F5` — 打开导航器
|
||||
* `F7` — 打开拼写和语法
|
||||
* `F11` — 打开格式和排版
|
||||
* `Shift+F11` — 创建新样式
|
||||
|
||||
### 文档格式
|
||||
|
||||
文档格式有很多种,LibreOffice 支持其中很多文档格式。默认情况下,LibreOffice 将文档保存为 <ruby>开放文档格式<rt>Open Document Format</rt></ruby>(ODF),这是一种开源标准,将样式表和数据存储在 ZIP 容器中,文本文档标记为 ODT,电子表格标记为 ODS,演示文稿标记为 ODP。它是一种灵活的格式,由 LibreOffice 社区和文档基金会维护。
|
||||
|
||||
ODF 是默认启用的,因此你无需执行任何操作即可让 LibreOffice 使用这种格式。
|
||||
|
||||
另一种文档开放规范是微软的 [Office Open XML(OOXML)格式][2]。它是一个 ISO 标准,并得到所有主要办公解决方案的良好支持。
|
||||
|
||||
如果你与使用微软 Office 的人一起工作(它本身不是开源的,但它确实使用开放的 OOXML 格式),那么他们肯定习惯于 DOCX、XLSX 和 PPTX 格式,并且可能无法打开 ODT、ODS 或 ODP 文件。你可以通过在 LibreOffice 中将 OOXML 设置为默认格式来避免很多混乱。
|
||||
|
||||
将 OOXML 设置为你的首选格式:
|
||||
|
||||
1. 单击 “<ruby>工具<rt>Tools</rt></ruby>” 菜单并选择菜单底部的 “<ruby>选项<rt>Options</rt></ruby>”。
|
||||
2. 在 “<ruby>选项<rt>Options</rt></ruby>” 窗口中,单击左侧面板中的 “<ruby>加载/保存<rt>Load/Save</rt></ruby>” 类别,然后选择 “<ruby>常规<rt>General</rt></ruby>”。
|
||||
![LibreOffice设置面板][3]
|
||||
3. 导航到 “<ruby>默认文件格式和 ODF 设置<rt>Default File Format and ODF Settings</rt></ruby>” 部分。
|
||||
4. 在 “<ruby>文档类型<rt>Document type</rt></ruby>” 选择 “<ruby>文本文档<rt>Text document</rt></ruby>”,并在 “<ruby>始终另存为<rt>Always save as</rt></ruby>” 下拉列表选择 “Open XML (Transitional) (*.docx) ”。
|
||||
5. 点击 “<ruby>应用<rt>Apply</rt></ruby>” 然后点击 “<ruby>确定<rt>OK</rt></ruby>”。
|
||||
6. 取消选择 “<ruby>未以 ODF 或默认格式保存时发出警告<rt>Warn when not saving in ODF or default format </rt></ruby>” 以避免在保存时出现确认对话框。
|
||||
![LibreOffice 保存格式][5]
|
||||
|
||||
按照相同的逻辑重复,重复相同的过程用于 XLSX 和 PPTX 文档。
|
||||
|
||||
### 让办公更自由
|
||||
|
||||
LibreOffice 项目由蓬勃发展的用户和开发人员社区与文档基金会共同管理。这包括工程指导委员会、董事会、独立开发人员、设计师和翻译人员等。这些团队始终欢迎各位的贡献,因此如果你渴望参与一个超赞的开源项目,请不要犹豫 [参与进来][6]。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/9/libreoffice-tips
|
||||
|
||||
作者:[Don Watkins][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[XiaotingHuang22](https://github.com/XiaotingHuang22)
|
||||
校对:[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/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/lenovo-thinkpad-laptop-window-focus.png?itok=g0xPm2kD (young woman working on a laptop)
|
||||
[2]: https://www.iso.org/standard/71691.html
|
||||
[3]: https://opensource.com/sites/default/files/uploads/libreoffice-panel.jpg (LibreOffice settings panel)
|
||||
[4]: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
[5]: https://opensource.com/sites/default/files/uploads/libreoffice-save-format.jpg (LibreOffice save formats)
|
||||
[6]: https://www.libreoffice.org/community/get-involved/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202302/11/161923gks1dsldq7dd1z67.jpg
|
94
published/20220204 How we hired an open source developer.md
Normal file
94
published/20220204 How we hired an open source developer.md
Normal file
@ -0,0 +1,94 @@
|
||||
[#]: subject: "How we hired an open source developer"
|
||||
[#]: via: "https://opensource.com/article/22/2/how-we-hired-open-source-developer"
|
||||
[#]: author: "Mike Bursell https://opensource.com/users/mikecamel"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "XiaotingHuang22"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15543-1.html"
|
||||
|
||||
我们是如何聘请开源开发人员的
|
||||
======
|
||||
|
||||
> 我的团队不再采用标准的算法编程笔试,而是采用一套能够产出更多相关成果的流程。
|
||||
|
||||
![][0]
|
||||
|
||||
作为初创安全公司 [Profian][2] 的首席执行官和联合创始人,我参与了我们聘请开发人员从事 [Enarx][3] 的工作。Enarx 是一个处理机密信息计算的安全项目,几乎完全用 [Rust 语言][4] 编写(少部分用汇编语言)。Profian 现在已经在这次招聘找到了所有要找的人,一些开发人员将在接下来的几周内开始工作。然而,Enarx 绝对欢迎新的贡献者,如果事情继续顺利,公司将来肯定会雇用更多的人。
|
||||
|
||||
招聘人员并不容易,加上 Profian 还有一系列特别的要求,这让招人变得更加困难。因此我认为分享我们如何解决这个问题应该还蛮有意思的,而且也会对社区有帮助。
|
||||
|
||||
### 我们寻找什么样的人才?
|
||||
|
||||
以下就是我前文提到的特别要求:
|
||||
|
||||
* **系统编程**:Profian 主要需要那些喜欢系统层编程的人。这一层面的编程已经处于栈的底层,有很多直接与硬件或操作系统的交互。例如,要创建客户端-服务器部分,我们必须编写相当多的协议、管理加密等等,而这方面的工具还不是很成熟(请参阅下面的 “Rust” 一节)。
|
||||
* **Rust**:项目几乎都是用 Rust 语言编写的,那些不是的则是用汇编语言写的(目前只有 x86 平台,尽管随着我们添加更多平台情况可能会有所改变)。Rust 是一门很新、很酷同时也令人兴奋的编程语言,但它同时也很年轻,并且一些领域没有你想要的所有支持或者没有你希望的那么成熟 —— 这包括从密码学到多线程库到编译器/构建基本架构。
|
||||
* **分散各地的团队**:Profian 正在建立一个能够及时通讯联系的团队。Profian 在德国、芬兰、荷兰、北卡罗来纳州(美国)、马萨诸塞州(美国)、弗吉尼亚州(美国)和乔治亚州(美国)都有开发人员。我在英国,我们的社区经理在巴西,我们有来自印度和尼日利亚的实习生。从一开始我们就知道团队很难聚集在一个地方工作,因此我们需要能够通过视频、聊天和(最不济的情况下)电子邮件与人交流和协作的成员。
|
||||
* **安全**:Enarx 是一个安全项目。虽然我们并不是专门在寻找安全专家,但我们需要能够将安全放在首位去思考和工作,并设计和编写适用于安全环境的代码的人。
|
||||
* **Git**:我们所有的代码都存储在 Git 中(主要是 [GitHub][5],还有一些存在 GitLab)。我们围绕代码的大部分交互都是围绕 Git 进行的,因此任何加入我们团队的人都需要能自如使用它作为日常工作中的标准工具。
|
||||
* **开源**:开源不仅仅是许可;更是一种心态,同时,这也是一种合作方式。大量开源软件是由不同地域的人创建的,他们甚至可能不认为彼此身处于一个团队。我们需要知道我们招的人不仅能在公司内部凝聚成一个紧密的团队,同时也能够与组织外部的人员协作,并接受 Profian 的“默认开放”文化,这里的开放不仅仅限于代码,还要有开放的讨论、沟通和文档。
|
||||
|
||||
### 我们是如何找到人才的?
|
||||
|
||||
正如我在其他地方提到的,[招聘很困难][6]。Profian 使用多种方式寻找候选人,它们取得了不同程度的成功:
|
||||
|
||||
* 领英招聘广告
|
||||
* 领英搜索
|
||||
* 特定语言的讨论板和招聘板(例如,Reddit)
|
||||
* 外部招募人员(特别致敬来自 [Interstem][7] 公司的 Gerald)
|
||||
* 口耳相传/个人推荐
|
||||
|
||||
虽然很难从质量方面判断这些来源如何,但如果没有外部招聘人员,我们肯定会在数量上苦苦挣扎(我们也有一些来自该途径的优秀候选人)。
|
||||
|
||||
### 我们如何筛选出想要的人才?
|
||||
|
||||
我们需要按照上述的所有要求衡量所有候选人,但并非所有要求都是同等重要的。例如,虽然我们热衷于雇用 Rust 程序员,但那些在系统级别具有强大 C/C++ 技能的人也能成为团队里有用的一份子,因为他们能够很快掌握 Rust 语言。另一方面,熟悉使用 Git 是至关重要的,因为我们无法花时间去培养新团队成员,让他们跟上我们的工作方式。
|
||||
|
||||
你可能会觉得很惊讶,但强大的开源背景并不是必需的要求,在类似模式中工作的心态是必需的,而任何有开源参与历史的人都可能对 Git 有很好的了解。同理,在一个分散各地的团队中工作的能力这一条件上,我们认为有过任意开源社区的参与经历都会是个积极的指标,因为有如此多的开源项目都是由分散各地的人们完成的。至于安全这一条件,我们则一致决定这只是一个“锦上添花”的条件。
|
||||
|
||||
我们想让这个过程简单快捷。 Profian 没有设置专门的人力资源部门或人力职能,因为我们正忙于编写代码。以下是我们最终使用的招聘流程(实际流程中可能略有不同),我们试图在 1-2 周内完成招聘:
|
||||
|
||||
1. 初审:个人履历/简历/GitHub/GitLab/领英主页,决定是否面试
|
||||
2. 我作为 CEO 和候选人进行一场 30-40 分钟的讨论,了解他们是否适合我们团队的文化,同时让他们有机会了解我们,并了解他们是否真的像在初审提交的材料中所说的那样精通技术
|
||||
3. 由 Nathaniel 领导的有关技术方面的深入讨论,通常我也在场
|
||||
4. 与团队其他成员谈话
|
||||
5. 编码笔试
|
||||
6. 快速决策(通常在 24 小时内)
|
||||
|
||||
编码笔试很关键,但我们决定不采用通常的方法。我们的观点是,许多科技公司钟爱的纯“算法编码”笔试对我们想要的几乎毫无用处:考察候选人是否可以快速理解一段代码,解决一些问题,并与团队合作完成以上的工作。我们创建了一个 GitHub 存储库,其中包含一些几乎可以正常运行的 Rust 代码(事实上,我们最终使用了两个,其中一个用于技术栈上层的人),然后让候选人修复它,在上面执行一些与 Git 相关的过程,并稍作改进,在此过程中添加测试。
|
||||
|
||||
测试中一个必不可少的部分是让候选人通过我们的聊天室与团队互动。我们安排了 15 分钟的视频通话时间用于设置和初始问题,两个小时用于做笔试(“开卷”——以及与团队交谈,鼓励候选人使用互联网上所有可用的资源),然后是 30 分钟的总结会议,在这个会议上团队可以提出问题,候选人可以思考任务。这个谈话,结合笔试期间的聊天互动,让我们了解了候选人与团队沟通的能力。候选人挂断电话之后我们通常会在 5-10 分钟内决定是否要雇用他们。
|
||||
|
||||
这种方法通常效果很好。一些候选人在任务上遇到困难,一些人沟通不畅,一些人在 Git 交互方面做得不好 —— 这些是我们没有雇佣的人。这并不意味着他们不是优秀的程序员或者以后不适合该项目或公司,但他们不符合我们现在需要的标准。在我们聘用的开发人员中,他们的 Rust 经验水平和与团队互动的需求各不相同,但 Git 专业知识水平以及他们在和我们讨论之后的反应始终足以让我们决定接受他们。
|
||||
|
||||
### 感想
|
||||
|
||||
总的来说,我不认为我们会对筛选过程进行大的改动 —— 尽管我很确定我们可以在搜寻过程环节做得更好。通过编码笔试,我们可以筛选掉相当多的候选人,而且很好地帮了我们挑选合适的人。希望通过了这次选拔的每个人都很适合这个项目并且产出出色的代码(以及测试和文档等等)。时间会证明一切!
|
||||
|
||||
* * *
|
||||
|
||||
本文最初发布于 [Alice、Eve 和 Bob – 安全博客][8] 上,经许可后重新发布。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/2/how-we-hired-open-source-developer
|
||||
|
||||
作者:[Mike Bursell][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[XiaotingHuang22](https://github.com/XiaotingHuang22)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/mikecamel
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/connection_people_team_collaboration.png?itok=0_vQT8xV (people in different locations who are part of the same team)
|
||||
[2]: https://profian.com/
|
||||
[3]: https://enarx.dev/
|
||||
[4]: https://opensource.com/article/21/3/rust-programmer
|
||||
[5]: https://github.com/enarx/
|
||||
[6]: https://aliceevebob.com/2021/11/09/recruiting-is-hard/
|
||||
[7]: https://www.interstem.co.uk/
|
||||
[8]: https://aliceevebob.com/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202302/16/074428qxbm44dxh00x42z7.jpg
|
@ -0,0 +1,219 @@
|
||||
[#]: subject: "9 Best Matrix Clients for Decentralized Messaging"
|
||||
[#]: via: "https://itsfoss.com/best-matrix-clients/"
|
||||
[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "TravinDreek"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15515-1.html"
|
||||
|
||||
9 款最佳的去中心化通讯软件 Matrix 的客户端
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
Matrix 是一套开放的网络标准,专用于去中心化实时加密通讯。
|
||||
|
||||
这套标准由 Matrix.org 基金会发布和维护。Matrix.org 基金会是一个非营利性组织,致力于创建一个开放、独立且不断演进的通讯平台。
|
||||
|
||||
如果一款应用支持 Matrix 协议,那就可以视它为 Matrix 客户端。
|
||||
|
||||
### 为何要选用 Matrix 客户端?
|
||||
|
||||
[Matrix][1] 客户端致力于安全性和隐私性,并且提供了一个去中心化的网络,令许多特性得以实现。
|
||||
|
||||
自 2019 年(正式版本发布)以来,部分组织以及政府机构便开始逐渐采用 Matrix 协议,从而搭建安全、隐私、可靠的通讯平台。
|
||||
|
||||
就实际而言,去中心化的协议实现了不同组织间的相互通讯,同时也使得这个通讯协议得以抵抗审查。
|
||||
|
||||
如果你想要逃脱科技巨头的魔爪,那 Matrix 就是正确的选择。
|
||||
|
||||
不仅如此,你还可以运行自己的服务器,并加入 Matrix 网络。换言之,通讯的基础设施是去中心化的,但你仍然能够根据需要,对其进行部署和配置。
|
||||
|
||||
如果你好奇的话,Matrix 协议具备了你需要的所有基本功能:
|
||||
|
||||
* 去中心化交流
|
||||
* 端到端加密
|
||||
* WebRTC 语音通话 / 视频通话
|
||||
* 实时同步
|
||||
* 消息已读用户显示
|
||||
* “正在输入中” 提示
|
||||
* 群组聊天
|
||||
|
||||
而且,我还要再强调一次:这个项目是**开源**的!
|
||||
|
||||
所以,Matrix 客户端已经是不二之选了。对那些注重隐私和安全的用户来说,则更是如此。
|
||||
|
||||
> LCTT 译注:实际上,Matrix 只是在隐私和便利之间达成了一种相对的平衡。它是将类似 Mastodon 的 <ruby>联邦<rt>federated</rt></ruby> 网络结构用在了聊天中,也就是说,虽然整个网络去中心化成了许多节点,但节点服务器的运营者仍然能对其用户进行少量掌控。但总的来说,相对那些中心化的聊天应用而言,Matrix 是个值得考虑的替代品。
|
||||
|
||||
### 9 款最佳的开源 Matrix 客户端
|
||||
|
||||
本文中,我将介绍一些最好用的 Matrix 客户端,其中主要是桌面客户端(Linux、Windows、macOS),同时也推荐一些移动客户端和终端客户端。
|
||||
|
||||
#### 1、Element
|
||||
|
||||
![element][2]
|
||||
|
||||
[Element][3] 是最佳的 Slack 开源替代品之一。它可以用于个人通讯,也能用于群组聊天。
|
||||
|
||||
你可以免费使用,不过你也可以选择自己搭建服务器,或者付费使用托管的家庭服务器。Element 提供了许多有用的功能,让你能够高效协作,并与你的团队或好友加密通讯。
|
||||
|
||||
> LCTT 译注:如同 Mastodon 一样,自费搭建服务器或者付费使用服务器,对大部分用户而言都是不必要的。初学者建议前往 <https://joinmatrix.org/servers/>,并选择一个现有的服务器进行注册,其中许多服务器都是免费开放注册,并且国内可以连接的。下述的订阅功能也并不是必要的。
|
||||
|
||||
如果你选择付费订阅,你还能将 Signal、WhatsApp 和 Telegram 聊天并入其中。
|
||||
|
||||
它支持 Linux、Windows 和 macOS,同时还提供 Android 和 iOS 的手机客户端。并且,你还能在网页浏览器中使用它。因此,这是个方便的选择。
|
||||
|
||||
> LCTT 译注:国内用户可能会在桌面客户端遇到错误,导致无法使用 Element。这是因为它在首次启动会连接 matrix.org,但是国内用户无法访问这个地址。要解决此问题,须手动修改配置文件(篇幅有限,详见相关教程)。实在无法解决,可使用基于 Element 的 [SchildiChat](https://schildi.chat/),或下文列出的其他客户端。
|
||||
|
||||
> **[Element][4]**
|
||||
|
||||
#### 2、Rocket.Chat
|
||||
|
||||
![rocket chat][5]
|
||||
|
||||
[Rocket.Chat][6] 是另一个 Slack 替代品,我们更喜欢把它当成团队内部的通讯工具。
|
||||
|
||||
你可以在 Linux、Windows 和 macOS 上使用它,也可以获取 Android 和 iOS 的手机应用。
|
||||
|
||||
尽管你可以选择自建服务器或付费订阅,但它也宣布正在添加 [Matrix 协议的支持][7]。
|
||||
|
||||
本文创作之时,已经可以在 alpha 版中使用 Matrix 网络。不过,稳定版应该很快就会发布了。所以,如果你已经在使用 Rocket.Chat,或者想把它当作 Matrix 客户端来使用,那么敬请关注后续版本的发布。
|
||||
|
||||
> **[Rocket.Chat][8]**
|
||||
|
||||
#### 3、NeoChat
|
||||
|
||||
![neochat][9]
|
||||
|
||||
NeoChat 是一个简单的 Matrix 客户端,目前在 KDE 社区的管理下积极开发。
|
||||
|
||||
与 Element 不同,它只支持 Linux 和 Windows,特别是为 KDE Plasma 量身定做。你也可以在其他桌面环境使用它。
|
||||
|
||||
你可以在 KDE 的 “<ruby>发现<rt>Discover</rt></ruby>” 软件中心、Flathub 以及 Snap 商店安装它。它不支持手机平台。所以,如果有桌面用户想要一个简单的 Matrix 客户端,那 NeoChat 也是一个不错的选择。
|
||||
|
||||
> LCTT 译注:纠正一下,NeoChat 也支持安卓,可直接下载二进制,也可在 F-Droid 中添加 KDE 仓库后下载。除此之外,它还支持 macOS。详见其源代码仓库。
|
||||
|
||||
了解更多,可以查看它的 [源代码][10]。
|
||||
|
||||
> **[NeoChat][11]**
|
||||
|
||||
#### 4、FluffyChat
|
||||
|
||||
![fluffychat][12]
|
||||
|
||||
FluffyChat 在用户体验方面,是一个美观(可爱)的 Matrix 客户端。
|
||||
|
||||
如果你想要一个简单又直观的 Matrix 客户端,并且支持桌面和手机(安卓和 iOS),那么 FluffyChat 是一个不错的选择。
|
||||
|
||||
Linux 用户可以从 Snap 商店或 Flathub 安装它。它并不提供 Windows 和 macOS 的原生应用支持,但你可以在网页浏览器中使用它。
|
||||
|
||||
如果你好奇的话,可以从它的 [GitLab 页面][13] 了解更多。
|
||||
|
||||
> **[FluffyChat][14]**
|
||||
|
||||
#### 5、Fractal
|
||||
|
||||
![fractal][15]
|
||||
|
||||
Fractal 是一款用于 GNOME 桌面的 Matrix 聊天客户端,使用 Rust 编写。正如其描述所说,它的界面经过优化,适合大型团队的协作。
|
||||
|
||||
由于它以 Flatpak 的形式发布,你可以在任何 Linux 发行版上安装它,无论桌面环境如何。
|
||||
|
||||
如果你喜欢能够在系统上快速运行的应用,那 Fractal 可能是不错的选择。可以前往它的 [GitLab 页面][16] 了解更多。
|
||||
|
||||
> **[Fractal][17]**
|
||||
|
||||
#### 6、Hydrogen Web(实验性)
|
||||
|
||||
![hydrogen][18]
|
||||
|
||||
在找其它的精简的(专注性能)Matrix 客户端吗?
|
||||
|
||||
Hydrogen 聊天客户端提供轻量级体验、离线功能,并有着广泛的浏览器支持。
|
||||
|
||||
虽然仍未完工,但 Element 背后的同一支团队正在开发着它。所以,如果你期待看到一个轻量的 Matrix 客户端替代品,你可以在它的 [GitHub 页面][19] 跟进该项目。
|
||||
|
||||
> **[Hydrogen][20]**
|
||||
|
||||
#### 7、Matrix Commander(基于命令行)
|
||||
|
||||
如果你想要用终端在 Matrix 网络上来收发文字消息,这个命令行工具就十分不错。
|
||||
|
||||
当然,并非一切都能在终端完成。所以,最好创建 cron 任务来实现消息提醒、机器人等用例。
|
||||
|
||||
你可以在 [PyPi][21] 或者 Docker Hub 上找到它。
|
||||
|
||||
> **[Matrix Commander][22]**
|
||||
|
||||
#### 8、Gomuks(基于命令行)
|
||||
|
||||
![gomuks][23]
|
||||
|
||||
想试试用 Go 写的终端 Matrix 客户端?
|
||||
|
||||
并非每个人都可以尝试。不过,如果你喜欢用 Go 写的命令行工具,可以用 Gomuks 这个简单的 Matrix 客户端来进行基本聊天。
|
||||
|
||||
你可以在它的 [GitHub Releases 部分][24] 找到其 Linux、Windows 和 macOS 的二进制文件。
|
||||
|
||||
> **[Gomuks][25]**
|
||||
|
||||
#### 9、Syphon(Alpha 版)
|
||||
|
||||
![syphon][26]
|
||||
|
||||
我们通常会避免列出仍处于早期开发的程序。但是,Syphon 作为一个手机专用的 Matrix 客户端,是一个有趣的选择。
|
||||
|
||||
如果你想要为你的安卓 / iOS 设备安装一个类似 Signal 的开源 Matrix 客户端,那选择 Syphon 也不错。用户界面看起来很熟悉(但并不是完全照抄的)。如果你想实验一下,那可以试试。
|
||||
|
||||
> **[Syphon][27]**
|
||||
|
||||
### 总结
|
||||
|
||||
Matrix 协议也许没能流行于所有组织和人群之中。但是,可以证明的是,作为一个开源项目,它能称得上是一个隐私可靠的去中心化网络。
|
||||
|
||||
最好的一点在于,你可以选择你想要的客户端,而不必被迫使用特定的应用才能在多个设备之间进行通信。
|
||||
|
||||
所以,你会选择什么作为你最喜欢的 Matrix客户端?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/best-matrix-clients/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[Peaksol](https://github.com/TravinDreek)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://matrix.org/
|
||||
[2]: https://itsfoss.com/content/images/wordpress/2022/06/element-2022.jpg
|
||||
[3]: https://itsfoss.com/element/
|
||||
[4]: https://element.io/
|
||||
[5]: https://itsfoss.com/content/images/wordpress/2022/06/rocket-chat-2022.jpg
|
||||
[6]: https://itsfoss.com/rocket-chat/
|
||||
[7]: https://news.itsfoss.com/rocket-chat-matrix/
|
||||
[8]: https://rocket.chat/
|
||||
[9]: https://itsfoss.com/content/images/wordpress/2022/06/neochat.png
|
||||
[10]: https://invent.kde.org/network/neochat
|
||||
[11]: https://apps.kde.org/neochat/
|
||||
[12]: https://itsfoss.com/content/images/wordpress/2022/06/fluffychat.png
|
||||
[13]: https://gitlab.com/famedly/fluffychat
|
||||
[14]: https://fluffychat.im/
|
||||
[15]: https://itsfoss.com/content/images/wordpress/2022/06/fractal.png
|
||||
[16]: https://gitlab.gnome.org/GNOME/fractal
|
||||
[17]: https://wiki.gnome.org/Apps/Fractal
|
||||
[18]:https://itsfoss.com/content/images/wordpress/2022/06/hydrogen.png
|
||||
[19]: https://github.com/vector-im/hydrogen-web/
|
||||
[20]: https://github.com/vector-im/hydrogen-web/
|
||||
[21]: https://pypi.org/project/matrix-commander/
|
||||
[22]: https://github.com/8go/matrix-commander
|
||||
[23]: https://itsfoss.com/content/images/wordpress/2022/06/gomuks.png
|
||||
[24]: https://github.com/tulir/gomuks/releases
|
||||
[25]: https://maunium.net/go/gomuks/
|
||||
[26]: https://itsfoss.com/content/images/wordpress/2022/06/syphon.jpg
|
||||
[27]: https://syphon.org/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202302/06/163855x1rdxojvn1ohh00v.jpg
|
@ -0,0 +1,166 @@
|
||||
[#]: subject: "How Much of a Genius-Level Move Was Using Binary Space Partitioning in Doom?"
|
||||
[#]: via: "https://twobithistory.org/2019/11/06/doom-bsp.html"
|
||||
[#]: author: "Two-Bit History https://twobithistory.org"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "aREversez"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14945-1.html"
|
||||
|
||||
在《毁灭战士》中应用二叉空间分割(BSP)是何等天才之举?
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/19/161257n99vkniexsjdehvh.jpg)
|
||||
|
||||
1993 年,游戏开发公司 id Software 发行了一款第一人称射击游戏 《<ruby>毁灭战士<rt>DOOM</rt></ruby>》,游戏一经发行迅速爆火。在今天看来,《毁灭战士》可谓有史以来最具影响力的游戏之一。
|
||||
|
||||
《毁灭战士》发行之后的第十年(2003 年),记者 <ruby>大卫·库什纳<rt>David Kushner</rt></ruby> 出版了一本关于 id Software 的书,书名为《<ruby>Doom 启示录<rt>Masters of Doom</rt></ruby>》,后被奉为记录毁灭战士创作史的典范读物。几年前我曾读过这本书,如今内容已记得不太真切了,但是书中有一个关于 id Software 首席程序员 <ruby>约翰·卡马克<rt>John Carmack</rt></ruby> 的故事,我印象特别深刻。这里只对故事做粗略描述(具体情节请往下阅读)。实际上,早在《毁灭战士》开发前期,卡马克就发现自己为这款游戏编写的 3D 渲染器在渲染某些关卡时慢得像爬一样。对于《毁灭战士》这一对动感和速度有着相当高要求的射击游戏来说,这是一个非常严重的问题。意识到了这一问题的严重性,卡马克需要一个更加有效的渲染算法,于是他开始阅读相关论文。最后,他实现了一种叫做“<ruby>二叉空间分割<rt>binary space partitioning</rt></ruby>(BSP)”的技术,极大地提升了《毁灭战士》游戏引擎的运行速度,而这项技术此前从未用于电子游戏当中。
|
||||
|
||||
一直以来,我对这个故事的印象十分深刻。卡马克将学术前沿研究运用于电子游戏之中,我觉得这正是他之所以成为传奇人物的原因。无论从哪个角度来看,卡马克都应该是电子游戏行业中人尽皆知的典型的天才程序员,只不过上面这个故事是我最先能够想到的理由。
|
||||
|
||||
显而易见,“二叉空间分割”这个术语听起来就是难度相当高的课题,能够自行阅读论文并将其付诸实施实属不易,所以这个故事给我留下了深刻的印象。我一直认为卡马克的做法十分具有创见性,不过由于我既不懂二叉空间分割到底是怎样的一项技术,也不晓得这项技术在当时究竟有多么革新,所以我也并不确定自己的观点是否正确。如果按照从 <ruby>霍默·辛普森<rt>Homer Simpson</rt></ruby>(LCTT 译注:《辛普森一家人》中的那个老爹)到 <ruby>阿尔伯特·爱因斯坦<rt>Albert Einstein</rt></ruby> 的顺序为天才列出一套级别体系,那么卡马克将二叉空间分割技术运用于《毁灭战士》的做法究竟属于什么级别的天才之举呢?
|
||||
|
||||
同时,我也在想,二叉空间分割这个概念最初是从哪儿来的,又是怎样吸引到卡马克的?因此,本篇文章不仅仅会讲述约翰·卡马克和《毁灭战士》的故事,也会探讨二叉空间分割树(BSP 树)数据结构的发展历史。有意思的是,BSP 树和计算机科学领域其他许多技术一样,最初都起源于军事研究领域。
|
||||
|
||||
没错,《毁灭战士》的第一关卡 E1M1 就受到了美国空军的启发。
|
||||
|
||||
### VSD 难题
|
||||
|
||||
BSP 树是计算机图形领域最具挑战性难题的解决方案之一。举个例子,为了渲染出三维场景,渲染器必须能够区分在一个特定角度下的可见物体和不可见物体。如果渲染时间比较充足,这一要求也算不上大问题;但是就理想情况来说,实时游戏引擎在 1 秒内至少需要完成 30 次区分任务。
|
||||
|
||||
这一问题有时被称为 <ruby>可见面检测<rt>visible surface determination</rt></ruby>(VSD)问题。后来与卡马克合作开发《<ruby>雷神之锤<rt>Quake</rt></ruby>》(id Software 继《毁灭战士》之后开发的游戏)的程序员 <ruby>迈克尔·亚伯拉什<rt>Michael Abrash</rt></ruby>,在自己的著作《<ruby>图形程序开发人员指南<rt>Graphics Programming Black Book</rt></ruby>》 中写道:
|
||||
|
||||
> 我想探讨一下在我看来 3D 中最棘手的一个问题:可见面检测问题(在每个像素点上绘制合适的表面)以及与之密切相关的隐面消除问题(迅速去除不可见的多边形,用于加快可见表面检测速度)。简略起见,我将在下文采用缩写 VSD 来表示可见面检测和隐面消除。
|
||||
>
|
||||
> 为什么我会认为 VSD 是 3D 中最棘手的问题呢?尽管纹理映射等光栅化问题更让人感兴趣而且也更重要,但是相对而言,它们是范围相对有限的任务。随着 3D 加速器的出现,它们逐渐被转移到硬件中。同时,它们只随着屏幕分辨率的增加而增加,而分辨率的增加是相对温和的。
|
||||
>
|
||||
> 相反,VSD 却像是一个无底洞,目前应对方案也有很多。但实际上,在采用简单的方法处理 VSD 时,其性能会直接受到场景复杂程度的影响,而场景的复杂程度通常会以平方级或立方级的形式增大。所以在渲染过程中,VSD 很快就会成为制约因素。[^1]
|
||||
|
||||
亚伯拉什是在上个世纪九十年代末写的关于 VSD 问题的这些困难,这是在《毁灭战士》之后数年,这款游戏证明了普通人盼望着能用自家电脑玩很吃图形配置的游戏。九十年代早期,id Software 成立后发行了一些游戏。尽管当时的计算机还只是用来处理文字与表格或者执行其他任务,未尝想过要在上面运行游戏,id Software 必须对发行的游戏进行编程,使其能在计算机上流畅运行。为了实现这一飞跃,尤其是为了能让在《毁灭战士》之前 id Software 发行的少数 3D 游戏在电脑上运行,id Software 必须做出革新。在这些游戏中,所有的关卡在设计时都受到了一定限制,以便更容易解决 VSD 问题。
|
||||
|
||||
例如,在《毁灭战士》之前,id Software 发行了《<ruby>德军总部 3D 版<rt>Wolfenstein 3D 版</rt></ruby>》,该游戏的每一个关卡都是由与坐标轴平齐的墙壁组成。换言之,在《德军总部 3D 版》的游戏画面里,你看到的只有南北方向或者东西方向的墙壁。在游戏中,墙壁与墙壁之间有着固定的间隔,所有过道的宽度或是一个方格,或是两个方格等等,但绝不会出现 2.5 个方格。如此一来,尽管 id Software 团队只能设计出外观十分相似的关卡,但这也让卡马克为 《德军总部 3D 版》 编写渲染器的工作简单了不少。
|
||||
|
||||
通过将屏幕上的光线“齐射”入虚拟游戏世界,《德军总部 3D 版》的渲染器解决了 VSD 问题。通常来说,使用光线的渲染器叫做“光线投射”渲染器。这种渲染器的速度一般较慢,因为解决内部的 VSD 问题涉及到在光线和游戏中的物体之间找到第一个交点,这通常需要进行大量的计算。但在 《德军总部 3D 版》,由于所有的墙壁都与网格平齐,所以光线与墙壁相交的位置只能在网格线上。如此一来,渲染器只需逐个检查这些交点即可。如果渲染器先从离玩家视角最近的交点开始检查,接着检查下一个最近的交点,以此类推,最后遇到第一面墙壁时停止检查。这样,VSD 问题便轻而易举地得到了解决。光线从每一个像素点向前投射,与画面物体接触时停止,这一方法是可行的。因为从 CPU 资源来看,投射的成本很低。事实上,由于每面墙壁高度相同,因此针对同列的像素点,投射的光线只需一条。
|
||||
|
||||
尽管当时还没有专业的图形显卡,《德军总部 3D 版》凭借这一取巧之法得以在配置较低的个人电脑上正常运行起来。然而,这个办法并不适用于《毁灭战士》。因为 id Software 为这款新游戏增添了许多新元素 —— 倾斜的墙面、楼梯以及高低不一的天花板。光线投射的办法自然也就不好用了,于是卡马克编写出了一个新的渲染器。《德军总部 3D 版》的渲染器关注的是图像,将光线投射到屏幕像素表示的列上,而 《毁灭战士》 关注的则是物体。换句话说,《毁灭战士》 的渲染器会记录游戏场景中的所有物体,继而将其投射到屏幕当中;而非记录屏幕上的像素点,判断每个像素点的颜色。
|
||||
|
||||
对于强调物体的渲染器来说,可以使用 Z 缓冲区来解决 VSD 问题,比较简单。每次将物体投射到屏幕上时,需要对每个用于绘制的像素点进行检查。如果你想绘制出的物体的部分和已经绘制在目标像素点上的物体相比更加靠近玩家,可以将其覆盖。否则,必须保持像素不变。尽管办法很简单,但是 Z 缓冲区对内存的要求较高,而且渲染器可能仍然要花费大量的 CPU 资源来投射玩家永远不会看到的水平几何体。
|
||||
|
||||
在 20 世纪 90 年代,使用 Z 缓冲区的方法还存在着其他缺陷:IBM 兼容机(PC)搭载的是一种叫 VGA 的显示适配器系统,在这类电脑上,将图像写入帧缓冲区的成本非常之高。因此,在只会以后被覆盖的像素上绘制花费的时间拖慢了渲染器的性能。
|
||||
|
||||
考虑到将图像写入帧缓冲区的成本非常之高,理想的渲染器需要首先绘制离玩家最近的物体,接着是比较近的物体,以此类推,直到屏幕上每个像素点都写入了信息。这时,渲染器会停止运行,大幅缩短远处不可见物体的渲染时间。这种由近及远对物体进行排序的方法也可以解决 VSD 问题。那么问题又来了:什么才是玩家可以看到的?
|
||||
|
||||
最初,卡马克打算依靠《毁灭战士》的关卡布局来解决 VSD 问题。首先用渲染器绘制出玩家目前所在房间的墙壁,之后玩家冲进隔壁房间,再绘制出隔壁房间的墙壁。由于每个房间互不遮挡,这一办法也能解决 VSD 问题。而互相遮挡的房间可以分割成若干互不遮挡的“区域”。在 YouTube 上的一个 [视频][2] 中,Bisqwit 展示了自己制作出来的使用了相同算法的渲染器。可以看到,如果以超慢的速度运行,便能一睹渲染的具体过程。这一算法同样运用到了《毁灭公爵 3D 版》当中,这款游戏在 《毁灭战士》 推出三年之后发行,当时 CPU 的性能也更加强大了。1993 年,尽管在硬件上已经可以运行游戏了,但是使用这一算法的《毁灭战士》渲染器在复杂的层级结构上依旧表现吃力,尤其是在房间分割出来的各部分相互嵌套的情况下。不巧的是,这类层级结构正是构造环形楼梯等物体的唯一办法。沿着环形楼梯走下去,直到走入已经绘制好的区域,由于这其中涉及多次循环下降运动,导致游戏引擎的运行速度大幅降低。
|
||||
|
||||
在 id Software 团队意识到《毁灭战士》游戏引擎的速度可能过慢时,公司还面临着其他任务:将《德军总部 3D 版》移植到超级任天堂游戏机(简称“超任”)上。那时,超任的性能比 IBM 兼容机还要差。结果表明,尽管光线投射渲染器非常简单,但是想要在超任上快速运行是不可能的。于是,卡马克着手研究更为高效的算法。事实上,也正是为了顺利将《德军总部》移植到超任,卡马克首次研究了二叉空间分割技术,并将其付诸应用。由于《德军总部 3D 版》的墙壁与坐标轴平齐,所以二叉空间分割技术应用起来也比较简单直接;但是《毁灭战士》的情况则比较复杂。不过,卡马克发现,二叉空间分割树同样可以用来解决《毁灭战士》速度过慢的问题。
|
||||
|
||||
### 二叉空间分割
|
||||
|
||||
<ruby>二叉空间分割<rt>binary space partitioning</rt></ruby>(BSP)会提前将 3D 场景分割为若干部分,使 VSD 问题易于解决。讲到这里,你需要先了解一下为什么分割场景可以奏效:如果你在场景上画条线(对应三维空间里的一个平面),你就可以指出玩家或者摄像机视角在这条线的哪一侧,在这条线另一侧的物体无法遮挡玩家所在一侧的物体。如果多次重复这一操作,该三维场景最终会被分割为多个区域,这并不是对原始场景的改进,只是现在你知道了更多关于场景的不同部分会如何相互阻挡。
|
||||
|
||||
首次阐述上述三维场景分割的是美国空军的研究员,他们曾尝试向美国空军证明计算机图形已经非常先进,可以应用到飞行模拟器领域。1969 年,他们将研究发现发表在一份题为《计算机生成图像在图形仿真中的应用研究》的报告中。该报告的总结部分指出,计算机图形可用于训练飞行员,但也警告说,其实际应用可能会受制于 VSD 问题:
|
||||
|
||||
> 实时图像处理需要解决的一个关键问题就是优先级问题,或称隐藏线问题。在我们平时用眼睛观察外界时,大自然替我们轻易地解决了这一问题:不透明物体上的一个点,掩盖了同一视觉方向上、且距离较远的所有其它物体。但在计算机中,这项任务却非常困难。图像处理需要解决的优先级问题,随着环境复杂程度的增加,计算量会呈指数级增长,随即就会超过绘制物体透视图所需的计算负载。[^2]
|
||||
|
||||
他们在报告中提出了一项基于构造“遮挡矩阵”的方案,这一方案据说早些时候曾被应用于 NASA 的项目当中。研究员指出,平面将场景一分为二,可用来解决平面两侧物体之间存在的“任何优先级问题”。通常情况下,可能需要明确将这些平面添加到场景中,但对某些几何体,只需借助你已经拥有的几何体的表面即可。他们举了一个例子,如下图:p~1~、p~2~ 以及 p~3~ 是三个不同的平面,如果摄像机视角位于其中一个平面的前方,即“正”面,p~i~ 的值就等于 1。这种矩阵展示出基于三个不同平面和摄像机视角位置的三个物体之间的关系 —— 如果物体 a~i~ 遮挡了物体 a~j~,那么 a~ij~ 在此矩阵中的数值等于 1。
|
||||
|
||||
![][4]
|
||||
|
||||
研究人员指出,这种矩阵可以应用到硬件中,对每一帧进行重新评估。该矩阵基本上可以用作大型的开关,或者一种预置的 Z 缓冲区。在绘制给定的物体时,如果在物体所在列上得出数值 1,并且所在行已经在绘制中,那么物体被遮挡的部分就不会绘制出来。
|
||||
|
||||
不过,该矩阵方法的主要缺点在于,为了在场景中表示出 n 个物体,你需要一个尺寸为 n^2^ 的矩阵。于是,研究人员们继续深入,探究将遮挡矩阵表示为“优先级列表”的可行性,该列表的尺寸是 n,可确定物体绘制的顺序。他们随即发现,诸如上图此类场景根本无法确定顺序(因为它存在循环阻塞的现象)。因此,他们花了很多时间来阐明“合适”与“不合适”场景之间的数学区别。最后,他们得出了一个结论:至少对于“合适的”场景下,优先级列表是可以制作出来的;而对场景设计师来说,避免设计出“不合适”的场景也不是一件难事。但是,他们并没有说明如何生成该列表。可以说,这份 1969 年的研究的首要贡献在于提出了:至少,在 _理论上_,可以采用平面分割的方法,对场景中的物体进行渲染排序。
|
||||
|
||||
直到 1980 年,一份题为《基于优先级树结构的可见表面生成》的论文提出了解决该问题的具体算法。在这份论文中,作者 <ruby>亨利·福克斯<rt>Henry Fuchs</rt></ruby>、<ruby>泽维·凯德姆<rt>Zvi Kedem</rt></ruby> 以及 <ruby>布鲁斯·内勒<rt>Bruce Naylor</rt></ruby> 介绍了 BSP 树。他们指出,这种新的数据结构“可以替代十年前首次使用,但由于一些问题未得到广泛发展的方案”(即前文 1969 年美国空军相关研究中的方案)。[^3] BSP 树一经生成,即可用于确定场景中物体的优先级顺序。
|
||||
|
||||
三人在论文中对 BSP 树的工作原理给出了相当可读的解释。但在本文,我将尝试使用更加通俗的语言,介绍给大家。
|
||||
|
||||
首先,在场景中选定一个多边形,将该多边形所在的平面作为分割平面。同时,该多边形充当树的根节点。场景中剩下的多边形会分散在分割平面的两侧。位于分割表面“前方”或者与分割平面相交后位于“前”半部分的多边形落在了根节点左侧的左子树上;位于分割表面“后方”或者与分割平面相交后位于“后”半部分的多边形落在了右子树上。接着,递归重复这一过程:在左子树和右子树上各选定一个多边形,作为各自空间新的分割平面,继而二分出来更多的子空间和子树。等到全部的多边形均选定之后,二叉空间分割也就结束了。
|
||||
|
||||
假设你想由后向前将场景中的几何图形进行渲染。(这就是所谓的“<ruby>画家算法<rt>painter's algorithm</rt></ruby>”。因为在绘制时,距离摄像机较远的多边形会被距离摄像机较近的多边形所覆盖,借此正确进行渲染任务。)如果想要实现这一算法,必须按顺序遍历 BSP 树,左右子树的渲染顺序由摄像机视角与节点所在分割平面的位置关系决定的。因此,针对树上的每个节点,首先渲染距离分割平面较“远”一侧的所有多边形,接着是位于平面上的多边形,最后是距离平面较“近”一侧的所有多边形 —— “远”与“近”相对于摄像机视角而言。根据前文,距离分割平面较远一侧的多边形无法遮挡近侧的物体,所以这种方法可以解决 VSD 问题。
|
||||
|
||||
下图表示一个简单的二维场景的 BSP 树的构造与遍历过程。在二维中,分割平面变成了分割线,但就基本原理而言,与复杂的三维场景并无二致。
|
||||
|
||||
![][6]
|
||||
|
||||
第一步:根分割线落在 D 墙上,将剩下的几何图形分为两组。
|
||||
|
||||
![][7]
|
||||
|
||||
第二步:继续分割位于 D 墙两侧的空间。C 墙是其中一侧的唯一一堵墙壁,因此无需再分。另一侧,B 墙形成新的分割平面。因为 A 墙与新的分割平面相交,所以必须将其分割为两堵墙。
|
||||
|
||||
![][8]
|
||||
|
||||
第三步:参照右上方视角,由后向前对墙壁进行排序,对执行画家算法很有帮助。这就是树的顺序遍历过程。
|
||||
|
||||
福克斯、凯德姆以及内勒多次强调了 BSP 树的优势:它只需构建一次。可能有些难以置信,但实际上无论摄像机视角位于何处,同一棵 BSP 树都可以用来渲染一个场景。只要场景中的多边形没有移动,BSP 树就不会失效。因此,BSP 树在实时渲染任务中非常实用 —— 构建树时的所有艰巨任务都可以在渲染工作开展之前完成。
|
||||
|
||||
同时,三人也提到了一项需要进一步深入研究的问题:究竟怎样才能构建出一棵 “高质量的” BSP 树?BSP 树的质量取决于用作分割平面的多边形的选择。我在前文跳过了这一问题,不过如果用作分割平面的多边形与其他多边形相交,那么为了让 BSP 算法发挥作用,必须将相交的多边形一分为二,这样两部分就可以分在不同的空间。但是如果这种现象反复出现,BSP 树的构建势必会大幅增加场景中多边形的数量。
|
||||
|
||||
内勒后来在其 1993 年的论文《构建高质量的分割树》中提及这一问题。卡马克的同事,id Software 的共同创始人 <ruby>约翰·罗梅洛<rt>John Romero</rt></ruby> 指出,这篇论文是卡马克在《毁灭战士》中引入 BSP 树时读到的论文之一。[^4]
|
||||
|
||||
### 《毁灭战士》中的 BSP 树
|
||||
|
||||
别忘了,卡马克首次为《毁灭战士》设计渲染器时,通过让渲染器渲染玩家所在房间之外的临近房间,试图为关卡几何图形建立一套渲染顺序。对此,BSP 树是个不错的选择,因为在玩家进入之前的房间(区域)时,BSP 树能够避免让渲染器重复劳动,从而节省 CPU 资源。
|
||||
|
||||
实际上,“将 BSP 树引入《毁灭战士》”意味着将 BSP 树生成器引入《毁灭战士》的关卡编辑器中。当完成一个《毁灭战士》的关卡的制作时,BSP 树就会在关卡几何图形的基础上生成。根据程序员 <ruby>法比安·桑格勒德<rt>Fabien Sanglard</rt></ruby> 的说法,在原版《毁灭战士》中,一个关卡的 BSP 树生成时间需要 8 秒,全部关卡合计共需 11 分钟 [^5]。之所以生成时间较长,部分原因在于卡马克所用的 BSP 生成算法,该算法尝试使用各种启发式方法找出 “高质量” BSP 树。在运行时,8 秒的延时可能让人无法接受;但是离线等 8 秒,时间并不算长,尤其是考虑到 BSP 树提升了渲染器的性能。为每个关卡生成的 BSP 树将在游戏启动时作为关卡数据载入。
|
||||
|
||||
卡马克对 1980 年论文中提出的 BSP 树算法进行了改造,因为在《毁灭战士》开始运行时,当前关卡的 BSP 树就会读取到内存中,渲染器通过 BSP 树由前向后绘制物体,而非由后向前进行绘制。福克斯三人在那篇论文中演示了 BSP 树可用于执行由后向前的画家算法,但是画家算法会造成许多重复的绘制任务,对于 IBM 兼容机来说负担较大。因此,《毁灭战士》的渲染器换了个方向,首先绘制距离玩家较近的图形,之后再绘制离玩家较远的。这种反向排序很容易通过 BSP 树来实现,因为你可以在树的每个节点都进行反向遍历。为了避免绘制出来的远处图形遮挡到近处的图形,《毁灭战士》的渲染器使用了一种隐式 Z 缓冲区,这种缓冲区不仅具备普通 Z 缓冲区的优势,而且对内存的要求也较低。这种 Z 缓冲区有两组数组,一组记录水平方向的遮挡关系,另两组记录自屏幕顶部和底部的垂直方向的遮挡关系。《毁灭战士》的渲染器就算不使用实际的 Z 缓冲区也无伤大雅,因为从技术上来看它并不是真正的 3D 游戏。BSP 树数据结构的成本虽然不高,但却能够起作用,其原因在于《毁灭战士》不会发生以下问题:水平方向的遮挡数组能够发挥作用,是因为该游戏中没有倾斜的墙体;垂直方向的遮挡数组能够发挥作用,是因为该游戏不存在有着一上一下两扇窗户的墙体。
|
||||
|
||||
剩下比较棘手的问题是如何将《毁灭战士》中处于运动中的角色融入到借助 BSP 树绘制的静止的关卡几何图形中。该游戏中的敌人不可能纳入 BSP 树之中,因为他们会移动,而 BSP 树只对静止的几何形状起作用。所以渲染器首先绘制静止的关卡几何图形,同时与另一个内存使用效率较高的数据结构协作,记录屏幕上分割出来用于绘制的区域。之后,渲染器按照由后往前的顺序绘制敌人,并消除被屏幕上的区域遮挡住的敌人。这一过程与使用 BSP 树进行渲染相比,效果稍差一些。但是由于关卡中能看到的敌人的数量少于几何图形的数量,所以速度并不是一个严重的问题。
|
||||
|
||||
将 BSP 树应用到《毁灭战士》中可谓一大成功。卡马克能够想到 BSP 树是解决 VSD 问题的最佳方案,无疑非常高明。但是这可以称得上是天才之举吗?
|
||||
|
||||
桑格勒德在其关于《毁灭战士》游戏引擎的书中引用了罗梅洛的话:内勒的论文《构建高质量的分割树》主要讲述使用 BSP 树消除 3D 模型的背面。[^6] 根据罗梅洛所言,卡马克认为这种算法对《毁灭战士》依然有效,所以他放手一试,将 BSP 技术应用到了该游戏中。不过这话说得有些奉承的意味 —— 意在暗示卡马克在别人仍然使用 BSP 树渲染静止的场景时,发现该技术可以用于实时游戏领域。在《Doom 启示录》中也有给卡马克戴高帽的故事。该书作者库什纳认为,卡马克在阅读内勒的论文之后,问了自己,“如果使用 BSP 技术创造一整个虚拟世界,而不仅仅是一张 3D 图像,会怎么样呢?” [^7]。
|
||||
|
||||
这些“片面之词”忽视了 BSP 树的发展历史。当美国空军研究人员开始意识到场景分割可能会加快渲染任务的时候,他们就对提升 _实时_ 渲染的速度产生了兴趣,毕竟他们当时试图创建一个飞行模拟器。1980 年,同样的案例再次出现在了福克斯等人的论文中,他们探讨了 BSP 树如何应用于飞行模拟器中,帮助飞行员进行训练:飞行员用它来反复练习将飞机降至同一空港。由于空港的地形不会发生改变,BSP 树只需生成一次,即可一劳永逸。很明显,他们考虑的是实时模拟。在论文的引言部分,福克斯等人还谈到实时图形系统必须在至少 1/30 秒内生成一张图像,由此激励了他们的研究。
|
||||
|
||||
因此,卡马克不是第一个想到在实时图形模拟中应用 BSP 树的人。诚然,设想与付诸实践是两码事。但是即使在实施的过程中,卡马克受到的帮助与指导可比人们想象的要多得多。至少是到这篇文章写成之时,BSP 树的 [维基百科词条][13] 页面显示,卡马克参考了 1991 年 <ruby>陈<rt>Chen</rt></ruby> 和 <ruby>戈登<rt>Gordon</rt></ruby> 的一篇论文,以及 1990 年的一本教材《计算机图形学:原理及实践》。尽管该页面并未提供引用信息,但可信度没什么问题。陈和戈登的论文介绍了运用 BSP 树由前向后的渲染方法,这种方法与《毁灭战士》中用到的方法基本一致,还包括了我称之为“隐式 Z 缓冲区”的数据结构,可用于防止远处的图形在绘制时遮挡近处的图形。《计算机图形学:原理及实践》详细介绍了 BSP 树,以及一些构建并展示 BSP 树的伪代码(非常感谢我大学的图书馆,让我能够一睹这本教材 1990 年的版本)。因为这本书是计算机图形学的经典之作,所以卡马克很可能也有一本。
|
||||
|
||||
然而,卡马克发现自己遇到一个新问题:如何让第一人称射击游戏在一台 CPU 甚至都无法进行浮点操作的电脑上运行呢?通过调查研究,他证明了 BSP 树的数据结构非常适用于实时电子游戏渲染。尽管 BSP 树早已提出,而且到了卡马克的时代,相关理论已经非常成熟了,但我始终认为,卡马克的做法可谓惊人之壮举。也许,得到人们称誉的应该是整个《毁灭战士》的游戏引擎,它的确非常精致。我在前文也提及过,但是桑格勒德的《<ruby>游戏引擎黑皮书:毁灭战士<rt>Game Engine Black Book: DOOM</rt></ruby>》 很好地讲解了这款游戏引擎的非凡之处,以及这些优势相互契合之法。要明白,VSD 问题只是卡马克在编写《毁灭战士》游戏引擎时需要解决的诸多问题之一。不得不说,面对不为大多数程序员所知的复杂的数据结构,卡马克能够查阅相关文献,将其付诸实践,仅此一点就足以说明其技术之精湛、匠心之独到。
|
||||
|
||||
_如果你喜欢这篇文章,欢迎关注推特 [@TwoBitHistory][14],也可通过 [RSS feed][15] 订阅,获取最新文章(每四周更新一篇)。_
|
||||
|
||||
[^1]: Michael Abrash, “Michael Abrash’s Graphics Programming Black Book,” James Gregory, accessed November 6, 2019, <http://www.jagregory.com/abrash-black-book/#chapter-64-quakes-visible-surface-determination>.
|
||||
[^2]: R. Schumacher, B. Brand, M. Gilliland, W. Sharp, “Study for Applying Computer-Generated Images to Visual Simulation,” Air Force Human Resources Laboratory, December 1969, accessed on November 6, 2019, <https://apps.dtic.mil/dtic/tr/fulltext/u2/700375.pdf>.
|
||||
[^3]: Henry Fuchs, Zvi Kedem, Bruce Naylor, “On Visible Surface Generation By A Priori Tree Structures,” ACM SIGGRAPH Computer Graphics, July 1980.
|
||||
[^4]: Fabien Sanglard, Game Engine Black Book: DOOM (CreateSpace Independent Publishing Platform, 2018), 200.
|
||||
[^5]: Sanglard, 206.
|
||||
[^6]: Sanglard, 200.
|
||||
[^7]: David Kushner, Masters of Doom (Random House Trade Paperbacks, 2004), 142.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://twobithistory.org/2019/11/06/doom-bsp.html
|
||||
|
||||
作者:[Two-Bit History][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[aREversez](https://github.com/aREversez)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://twobithistory.org
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: tmp.eMwywbWYsp#fn:1
|
||||
[2]: https://youtu.be/HQYsFshbkYw?t=822
|
||||
[3]: tmp.eMwywbWYsp#fn:2
|
||||
[4]: https://twobithistory.org/images/matrix_figure.png
|
||||
[5]: tmp.eMwywbWYsp#fn:3
|
||||
[6]: https://twobithistory.org/images/bsp.svg
|
||||
[7]: https://twobithistory.org/images/bsp1.svg
|
||||
[8]: https://twobithistory.org/images/bsp2.svg
|
||||
[9]: tmp.eMwywbWYsp#fn:4
|
||||
[10]: tmp.eMwywbWYsp#fn:5
|
||||
[11]: tmp.eMwywbWYsp#fn:6
|
||||
[12]: tmp.eMwywbWYsp#fn:7
|
||||
[13]: https://en.wikipedia.org/wiki/Binary_space_partitioning
|
||||
[14]: https://twitter.com/TwoBitHistory
|
||||
[15]: https://twobithistory.org/feed.xml
|
||||
[16]: https://twitter.com/TwoBitHistory/status/1164631020353859585?ref_src=twsrc%5Etfw
|
||||
[17]: tmp.eMwywbWYsp#fnref:1
|
||||
[18]: tmp.eMwywbWYsp#fnref:2
|
||||
[19]: tmp.eMwywbWYsp#fnref:3
|
||||
[20]: tmp.eMwywbWYsp#fnref:4
|
||||
[21]: tmp.eMwywbWYsp#fnref:5
|
||||
[22]: tmp.eMwywbWYsp#fnref:6
|
||||
[23]: tmp.eMwywbWYsp#fnref:7
|
@ -3,18 +3,18 @@
|
||||
[#]: author: "Hunter Wittenborn https://itsfoss.com/author/hunter/"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "hanszhao80"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14911-1.html"
|
||||
|
||||
浅议 Firefox 多账户容器
|
||||
======
|
||||
|
||||
随着在设备上使用各种程序的用户的需求变得越来越复杂,程序本身也需要跟上用户的现实需求和未来期望。
|
||||
|
||||
我发现我每天都需要的东西是用一个简便的方法在网页浏览器保持登录多个账号。我 _可以_ 根据需要对我的每个账号进行登录和注销操作,但在短时间内切换多个账号时,这变得非常乏味。
|
||||
我发现我每天需要的东西是一个在网页浏览器保持登录多个账号的简单方法。我 _可以_ 根据需要对我的每个账号进行登录和注销操作,但在短时间内切换多个账号时,这变得非常乏味。
|
||||
|
||||
最初,我使用谷歌浏览器,它拥有管理多个帐户的能力。这很有效,但管理起来略显繁琐,而且明明只需 _一个_ 账号就能搞定的事却要创建一个新的谷歌账号来完成,这显得有点儿笨拙。
|
||||
最初,我使用谷歌浏览器,它拥有管理多个帐户的能力。这很有效,但管理起来略显繁琐,而且明明只需 _一个_ 谷歌账号就能搞定的事却要创建一个新的谷歌账号来完成,这显得有点儿笨拙。
|
||||
|
||||
这是我转而使用 Firefox <ruby>多账户容器<rt>Multi-Account Containers</rt></ruby> 功能的原因。它不仅比我在谷歌 Chrome 浏览器上的设置灵活得多,而且我还使用了由我的浏览器开发者自己创建的工具,从而在整体上获得了更流畅和更简单的体验。
|
||||
|
||||
@ -22,9 +22,9 @@
|
||||
|
||||
### Firefox 中的多帐户容器是什么?
|
||||
|
||||
如果你想将数字生活的各个部分彼此分开,多账户容器也非常有效。当你使用容器时,你在一个容器中的浏览活动不会与其他容器共享。这种隔离意味着你可以在不同容器中登录同一网站上的两个不同帐户。你的登录会话、网站偏好和跟踪数据将被限制在你使用某个网站的容器中。
|
||||
如果你想将数字生活的各个部分彼此分开,多账户容器也非常有效。通过使用容器,你在一个容器中的浏览活动不会与其他容器共享。这种隔离意味着你可以在不同容器中登录同一网站上的两个不同帐户。你的登录会话、网站偏好和跟踪数据将被限制在你使用某个网站的容器中。
|
||||
|
||||
它还有什么其他优势?想象一下,你在亚马逊或其他电子商务网站上购物。你浏览了一些商品,但没有购买任何东西。现在,如果你浏览网络,你会看到与你浏览的产品相关的广告。尽管有广告拦截器,一些网站仍会显示广告。使用容器,你可以将你的购物网站与其他网站分开。
|
||||
它还有什么其他优势?想象一下,你在亚马逊或其他电子商务网站上购物。你浏览了一些商品,但没有购买任何东西。现在,如果你浏览网络,你会看到与你浏览的产品相关的广告。尽管有广告拦截器,一些网站仍会显示广告。使用容器,你可以将你的购物网站与其他网站分开。(LCTT 校注:甚至根据你的浏览历史,你再次访问同一网站时看到的价格可能会被“宰熟”——反复浏览代表了你的购买倾向。)
|
||||
|
||||
再给大家分享一个例子。Firefox 默认提供一个 Facebook 容器。默认情况下,此容器包括 Facebook、Messenger 和 Instagram 网站。这意味着当你打开这三个网站中的任何一个时,它们都只会在“Facebook 容器”中打开。因此,Facebook 将无法跟踪你在其他网站上的活动。
|
||||
|
||||
@ -34,7 +34,7 @@
|
||||
|
||||
安装 Firefox 多账户容器是一个非常简单的过程,只需点击几下。
|
||||
|
||||
首先,前往 Firefox 附加组件网站上的 [扩展程序页面][3]。之后你唯一需要做的就是单击 `添加到 Firefox` 按钮。
|
||||
首先,前往 Firefox 附加组件网站上的 [扩展程序页面][3]。之后你唯一需要做的就是单击 “添加到 Firefox” 按钮。
|
||||
|
||||
![][4]
|
||||
|
||||
@ -58,7 +58,7 @@
|
||||
|
||||
![][8]
|
||||
|
||||
接着输入新容器的名称,选择颜色和图标。然后,点击 `OK` 保存新容器。
|
||||
接着输入新容器的名称,选择颜色和图标。然后,点击 “OK” 保存新容器。
|
||||
|
||||
![][9]
|
||||
|
||||
@ -84,20 +84,20 @@
|
||||
|
||||
为什么我被重定向了?因为现在我没有登录。这就是 Firefox 容器的乐趣之一:在一个浏览器会话中登录后,再进入一个容器,就好像你以前从未访问过该站点一样。
|
||||
|
||||
如果你在容器内完成对某个网站的登录,你从容器中访问该网站时将会保持登录状态。你还可以使用此功能从容器内登录网站,从而使该网站的所有数据远离你的正常浏览器数据。
|
||||
如果你在容器内完成对某个网站的登录,你从容器中访问该网站时将会保持登录状态。你还可以使用此功能从容器内登录网站,从而使该网站的所有数据与你的正常浏览器数据相隔开。
|
||||
|
||||
注意:你的浏览器历史记录本身之类的内容仍会暴露给你的正常浏览器会话。容器功能只是提供了一种方法来分离本文中提到的登录帐户等内容。
|
||||
> 注意:你的浏览器历史记录本身之类的内容仍会暴露给你的正常浏览器会话。容器功能只是提供了一种方法来分离本文中提到的登录帐户等内容。
|
||||
|
||||
### 总结
|
||||
|
||||
对于那些在乎自己的隐私,或者只是想真正尝试对其系统的安全性进行严格控制的人来说,多账户容器被证明是一个很棒的功能。
|
||||
|
||||
例如,你可以在容器内登录你的 Google 帐户,Google 永远不会知悉你在容器外的信息。
|
||||
个帐户的人来说,此扩展程序是一个不错的选择。有了它无需为你要使用的每样东西创建单独的浏览器帐户。
|
||||
例如,你可以在容器内登录你的谷歌帐户,谷歌永远不会知悉你在容器外的信息。
|
||||
对拥有多个帐户的人来说,此扩展程序是一个不错的选择。有了它无需为你要使用的每样东西创建单独的浏览器帐户。
|
||||
|
||||
好了,这就是 Firefox 的多帐户容器的基本知识。
|
||||
|
||||
需要任何帮助,或者只是有一个一般的问题?请随时在评论区指出。
|
||||
需要任何帮助,或者只是有点问题?请随时在评论区指出。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
@ -3,18 +3,19 @@
|
||||
[#]: author: "Jim Hall https://opensource.com/users/jim-hall"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "FYJNEVERFOLLOWS"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14916-1.html"
|
||||
|
||||
使用位字段和掩码写一个国际象棋游戏
|
||||
======
|
||||
使用位字段和掩码是不用数据结构组合数据的常用方法。
|
||||
![Chess pieces on a chess board][1]
|
||||
|
||||
> 使用位字段和掩码是不用数据结构组合数据的常用方法。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/10/114605qzfzztj2uupb7zuw.jpg)
|
||||
|
||||
假设你在用 C 语言写一个国际象棋游戏。追踪棋盘上棋子的一种方法是定义一个结构,该结构定义了棋盘上每个可能的棋子及其颜色,因此每个格子都包含该结构中的一个元素。例如,你可以将结构定义成下面这样:
|
||||
|
||||
|
||||
```
|
||||
struct chess_pc {
|
||||
int piece;
|
||||
@ -24,63 +25,56 @@ struct chess_pc {
|
||||
|
||||
有了这个数据结构,你的程序就会知道每个格子里是什么棋子及棋子的颜色。你可以快速识别出棋子是兵、车、马、象、后还是王,以及棋子是黑还是白。但是,有一种更直接的方法来跟踪这些信息,同时只用更少的数据和内存。与为棋盘上的每个方格存储两个 `int` 值的结构不同,我们可以存储单个 `int` 值,并使用二进制位字段和掩码来标识每个方格中的棋子和颜色。
|
||||
|
||||
|
||||
### 比特和二进制
|
||||
|
||||
当使用位字段表示数据时,我们最好像计算机一样思考。让我们从列出可能的棋子开始,并为每个棋子分配一个数字。我将帮助我们进入下一个步骤,用二进制表示这个数字,也就是按照计算机追踪它的方式。记住,二进制数是由比特组成的,比特要么是 0,要么是 1。
|
||||
|
||||
* `00000000:` 空 (0)
|
||||
* `00000001:` 兵 (1)
|
||||
* `00000010:` 车 (2)
|
||||
* `00000011:` 马 (3)
|
||||
* `00000100:` 象 (4)
|
||||
* `00000101:` 后 (5)
|
||||
* `00000110:` 王 (6)
|
||||
|
||||
当使用位字段表示数据时,我们最好像计算机一样思考。让我们从列出可能的棋子开始,并为每个棋子分配一个数字。让我们进入下一个步骤,用二进制表示这个数字,也就是按照计算机追踪它的方式。记住,二进制数是由比特组成的,比特要么是 0,要么是 1。
|
||||
|
||||
* `00000000:` 空(0)
|
||||
* `00000001:` 兵(1)
|
||||
* `00000010:` 车(2)
|
||||
* `00000011:` 马(3)
|
||||
* `00000100:` 象(4)
|
||||
* `00000101:` 后(5)
|
||||
* `00000110:` 王(6)
|
||||
|
||||
要列出一个棋盘上的所有棋子,我们只需要三个比特从右到左依次代表值 1、2 和 4。例如,数字 6 是二进制的 110。6 的二进制表示中的其他所有位都是 0。
|
||||
|
||||
一个聪明一点的方法:我们可以使用那些额外的总为零的比特来跟踪一个棋子是黑还是白。我们可以使用数字 8(二进制 `00001000`)来表示棋子是否为黑色。如果这一位是 1,则代表该棋子是黑色;如果是 0,则代表该棋子是白色。这被称为**位字段**,稍后我们可以使用二进制**掩码**将其取出。
|
||||
一个聪明一点的方法:我们可以使用那些额外的总是为零的比特来跟踪一个棋子是黑还是白。我们可以使用数字 8(二进制 `00001000`)来表示棋子是否为黑色。如果这一位是 1,则代表该棋子是黑色;如果是 0,则代表该棋子是白色。这被称为**位字段**,稍后我们可以使用二进制**掩码**将其取出。
|
||||
|
||||
### 用位字段存储数据
|
||||
|
||||
要编写一个使用位字段和掩码的国际象棋程序,我们可以从以下定义开始:
|
||||
|
||||
|
||||
```
|
||||
/* 棋子 */
|
||||
|
||||
#define EMPTY 0 // 空
|
||||
#define PAWN 1 // 兵
|
||||
#define ROOK 2 // 车
|
||||
#define KNIGHT 3 // 马
|
||||
#define BISHOP 4 // 象
|
||||
#define QUEEN 5 // 后
|
||||
#define KING 6 // 王
|
||||
#define EMPTY 0 // 空
|
||||
#define PAWN 1 // 兵
|
||||
#define ROOK 2 // 车
|
||||
#define KNIGHT 3 // 马
|
||||
#define BISHOP 4 // 象
|
||||
#define QUEEN 5 // 后
|
||||
#define KING 6 // 王
|
||||
|
||||
/* 棋色 */
|
||||
|
||||
#define BLACK 8 // 黑
|
||||
#define WHITE 0 // 白
|
||||
#define BLACK 8 // 黑
|
||||
#define WHITE 0 // 白
|
||||
|
||||
/* 掩码 */
|
||||
|
||||
#define PIECE 7
|
||||
```
|
||||
|
||||
当你为一个棋格赋值时,比如初始化棋盘,你可以赋一个 `int` 类型的值来跟踪棋子及其颜色。例如,要在棋盘的 0,0 位置存储棋子黑车,你可以使用下面的代码:
|
||||
|
||||
当你为一个棋格赋值时,比如初始化棋盘,你可以赋一个 `int` 类型的值来跟踪棋子及其颜色。例如,要在棋盘的 `0,0` 位置存储棋子黑车,你可以使用下面的代码:
|
||||
|
||||
```
|
||||
int board[8][8];
|
||||
|
||||
..
|
||||
|
||||
board[0][0] = BLACK | ROOK;
|
||||
```
|
||||
`|` 是二进制或符号,这意味着计算机将合并两个数字的比特。对于每个比特的位置,如果**任意一个**数字的比特为 1,该位置比特的结果也是 1。`BLACK` 的值(8,即二进制下的 `00001000`)和 `ROOK` 的值(2,即二进制下的 `00000010`)的二进制或结果是二进制下的 `00001010`,即 10:
|
||||
|
||||
`|` 是二进制“或”(`OR`)操作符,这意味着计算机将合并两个数字的比特。对于每个比特的位置,如果**任意一个**数字的比特为 1,该位置比特的结果也是 1。`BLACK` 的值(8,即二进制下的 `00001000`)和 `ROOK` 的值(2,即二进制下的 `00000010`)的二进制或结果是二进制下的 `00001010`,即 10:
|
||||
|
||||
```
|
||||
00001000 = 8
|
||||
@ -89,14 +83,13 @@ struct chess_pc {
|
||||
00001010 = 10
|
||||
```
|
||||
|
||||
类似地,要在棋盘的 6,0 位置存储一个白色兵,你可以这样做:
|
||||
|
||||
类似地,要在棋盘的 `6,0` 位置存储一个白色兵,你可以这样做:
|
||||
|
||||
```
|
||||
board[6][0] = WHITE | PAWN;
|
||||
```
|
||||
这样存储的值就是 `WHITE` (0) 和 `PAWN` (1) 的二进制或的结果,也即是 1。
|
||||
|
||||
这样存储的值就是 `WHITE`(0)和 `PAWN`(1)的二进制或的结果,也即是 1。
|
||||
|
||||
```
|
||||
00000000 = 0
|
||||
@ -109,19 +102,16 @@ struct chess_pc {
|
||||
|
||||
在下棋过程中,程序需要知道棋格中的棋子和它的颜色。我们可以使用二进制掩码来分离这部分。
|
||||
|
||||
举个例子,程序可能需要知道棋局中棋盘上特定棋格的内容,例如位于 `board[5][3]` 的数组元素。这个是什么棋子,是黑的还是白的?为了识别棋子,使用二进制和 (AND) 将元素的值与掩码 `PIECE` 结合起来:
|
||||
|
||||
举个例子,程序可能需要知道棋局中棋盘上特定棋格的内容,例如位于 `board[5][3]` 的数组元素。这个是什么棋子,是黑的还是白的?为了识别棋子,使用二进制“与”(`AND`)操作符将元素的值与掩码 `PIECE` 结合起来:
|
||||
|
||||
```
|
||||
int board[8][8];
|
||||
int piece;
|
||||
|
||||
..
|
||||
|
||||
piece = board[5][3] & PIECE;
|
||||
```
|
||||
二进制与 (AND) 操作符 (`&`) 将两个二进制值结合,这样对于任意位,如果两个数字中的那个位**都是** 1,那么结果也是 1。例如,如果 `board[5][3]` 的值是 11(二进制下的 `00001011`),那么 11 和 掩码 `PIECE`(7,二进制下的 `00000111`)二进制与的结果为二进制下的 `00000011`,也即 3。这代表马,马的值是 3。
|
||||
|
||||
二进制“与”(`AND`)操作符(`&`)将两个二进制值结合,这样对于任意位,如果两个数字中的那个位**都是** 1,那么结果也是 1。例如,如果 `board[5][3]` 的值是 11(二进制下的 `00001011`),那么 11 和 掩码 `PIECE`(7,二进制下的 `00000111`)二进制与的结果为二进制下的 `00000011`,也即 3。这代表马,马的值是 3。
|
||||
|
||||
```
|
||||
00001011 = 11
|
||||
@ -129,8 +119,8 @@ AND 00000111 = 7
|
||||
________
|
||||
00000011 = 3
|
||||
```
|
||||
解析棋子的颜色是一个简单的事情,只需要将棋子的值与 `BLACK` 位字段进行二进制与操作。比如,你可以写一个名为 `is_black` 的函数来确定棋子是黑还是白:
|
||||
|
||||
解析棋子的颜色是一个简单的事情,只需要将棋子的值与 `BLACK` 位字段进行二进制与操作。比如,你可以写一个名为 `is_black` 的函数来确定棋子是黑还是白:
|
||||
|
||||
```
|
||||
int
|
||||
@ -139,10 +129,12 @@ is_black(int piece)
|
||||
return (piece & BLACK);
|
||||
}
|
||||
```
|
||||
这样之所以有效,是因为 `BLACK` 的值为 8(二进制下的 `00001000`)。在 C 语言中,任何非零值都被视为 True,零总是 False。所以如果 `5,3` 处的棋子是黑色的,则 `is_black(board[5][3])` 返回 True 值 (8);如果是白色的,则返回 False 值 (0)。
|
||||
|
||||
之所以可以这样,是因为 `BLACK` 的值为 8(二进制下的 `00001000`)。在 C 语言中,任何非零值都被视为 `True`,零总是 `False`。所以如果 `5,3` 处的棋子是黑色的,则 `is_black(board[5][3])` 返回 True 值(8);如果是白色的,则返回 False 值(0)。
|
||||
|
||||
### 位字段
|
||||
使用位字段和掩码是不使用结构组合数据的常用方法。它们值得被程序员收藏到“工具包”中。虽然数据结构对于需要跟踪相关数据的有序编程是一种有价值的工具,但是使用单独的元素来跟踪单个的 On 或 Off 值(例如棋子的颜色)的效率较低。在这些情况下,可以考虑使用位字段和掩码来更高效地组合数据。
|
||||
|
||||
使用位字段和掩码是不使用结构组合数据的常用方法。它们值得被程序员收藏到“工具包”中。虽然数据结构对于需要跟踪相关数据的有序编程是一种有价值的工具,但是使用单独的元素来跟踪单个的开或闭值(例如棋子的颜色)的效率较低。在这些情况下,可以考虑使用位字段和掩码来更高效地组合数据。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -151,7 +143,7 @@ via: https://opensource.com/article/21/8/binary-bit-fields-masks
|
||||
作者:[Jim Hall][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[FYJNEVERFOLLOWS](https://github.com/FYJNEVERFOLLOWS)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -3,16 +3,16 @@
|
||||
[#]: author: "Sirko Kemter https://fedoramagazine.org/author/gnokii/"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "aREversez"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14935-1.html"
|
||||
|
||||
MAKE MORE with Inkscape – Ink/Stitch
|
||||
Inkscape 扩展应用:Ink/Stitch
|
||||
======
|
||||
|
||||
![MAKE more with Inkscape - Ink/Stitch][1]
|
||||
|
||||
Inkscape 是 Fedora 设计团队最喜爱最常用的软件,它的功能可不止于制作精美的矢量图形。矢量图形(也就是 SVG 文件)可以帮助实现更多操作,许多软件也支持这一格式。不过,Inkscape 还有其他功能有待发掘。[本系列][2] 第一篇文章介绍了如何 [使用 Inkscape 生成 GCode 文件][3];本篇文章将探索 Inkscape 的另一项拓展功能:用于绣花设计的 [Ink/Stitch][4]。
|
||||
Inkscape 是 Fedora 设计团队最喜爱最常用的软件,它的功能可不止于制作精美的矢量图形。矢量图形(也就是 SVG 文件)可以帮助实现更多操作,许多软件也支持这一格式。不过,Inkscape 还有其他功能有待发掘。[本系列][2] 第一篇文章介绍了如何 [使用 Inkscape 生成 GCode 文件][3];本篇文章将探索 Inkscape 的另一项扩展功能:用于绣花设计的 [Ink/Stitch][4]。
|
||||
|
||||
### 绣花 DIY
|
||||
|
||||
@ -40,10 +40,10 @@ Inkscape 是 Fedora 设计团队最喜爱最常用的软件,它的功能可不
|
||||
|
||||
* **.10o** – 丰田绣花机
|
||||
* **.100** – 丰田绣花机
|
||||
* **.CSD** – Poem,Huskygram 和胜家家用绣花缝纫机
|
||||
* **.CSD** – Poem、Huskygram 和胜家家用绣花缝纫机
|
||||
* **.DSB** – 百灵达绣花机
|
||||
* **.JEF** – 车乐美 MemoryCraft 10000
|
||||
* **.SEW** – 车乐美 MemoryCraft 5700, 8000, and 9000
|
||||
* **.SEW** – 车乐美 MemoryCraft 5700、8000 和 9000
|
||||
* **.PES** – 兄弟和 Babylock 家用绣花缝纫机
|
||||
* **.PEC** – 兄弟和 Babylock 家用绣花缝纫机
|
||||
* **.HUS** – 好时运家用绣花缝纫机
|
||||
@ -55,8 +55,6 @@ Inkscape 是 Fedora 设计团队最喜爱最常用的软件,它的功能可不
|
||||
* **.XXX** – Compucon 和 胜家家用绣花缝纫机
|
||||
* **.ZSK** – 美国市场的 ZSK 绣花机
|
||||
|
||||
|
||||
|
||||
关于绣花机会用到的文件格式,上面列出来的只是九牛一毛,可 [在此][14] 查看全部格式。如果你想进一步了解这些文件格式,可点击 [此处][15] 获取更多信息。
|
||||
|
||||
#### Ink/Stitch 文件格式
|
||||
@ -67,17 +65,17 @@ Ink/Stitch 最初使用的是 [libembroidery][12] 库,现在则使用 [pyembro
|
||||
|
||||
除了文件格式,绣花缝纫软件还需解决其它一些问题。
|
||||
|
||||
支持繁杂多样的线迹类型是一个难题,绘制工具与缝制工具的搭配使用又是另一个难题。不过,为什么非要从无到有搞出一套新应用?为什么不依赖现有的矢量软件?这样一来,开发者只需要在其基础上增添绣花拓展功能即可。后者就是 [Ink/Stitch 项目][4] 过去四年来的设计理念。
|
||||
支持繁杂多样的线迹类型是一个难题,绘制工具与缝制工具的搭配使用又是另一个难题。不过,为什么非要从无到有搞出一套新应用?为什么不依赖现有的矢量软件?这样一来,开发者只需要在其基础上增添绣花扩展功能即可。后者就是 [Ink/Stitch 项目][4] 过去四年来的设计理念。
|
||||
|
||||
### 安装 Ink/Stitch
|
||||
|
||||
Ink/Stitch 是 [Inkscape 的一个拓展功能][16]。不过,由于 Inkscape 下载安装拓展的新功能还处于测试阶段,在其提供的拓展功能中可能无法找到 Ink/Stitch。因此,你需要自行手动 [下载][17] 该拓展。下载后,将压缩包解压到 Inkscape 拓展所在路径,默认路径为 _~/.config/Inkscape/extensions_(或者放置在系统全局路径:_/usr/share/inkscape/extensions_)。若你改变了默认路径,则需检查 Inkscape 设置选项,找到拓展文件的存放位置。
|
||||
Ink/Stitch 是 [Inkscape 的一个扩展功能][16]。不过,由于 Inkscape 下载安装扩展的新功能还处于测试阶段,在其提供的扩展功能中可能无法找到 Ink/Stitch。因此,你需要自行手动 [下载][17] 该扩展。下载后,将压缩包解压到 Inkscape 扩展所在路径,默认路径为 `~/.config/Inkscape/extensions`(或者放置在系统全局路径:`/usr/share/inkscape/extensions`)。若你改变了默认路径,则需检查 Inkscape 设置选项,找到扩展文件的存放位置。
|
||||
|
||||
### 自定义:为 Ink/Stitch 安装插件
|
||||
|
||||
Ink/Stitch 提供了为 Inkscape 安装插件的功能,用户需首先执行这一功能。
|
||||
|
||||
依次点击如下选项:_<ruby>扩展<rt>Extensions</rt></ruby> > Ink/Stitch > <ruby>线条颜色管理<rt>Thread Color Management</rt></ruby> > <ruby>为 Inkscape 安装线条调色板<rt>Install thread color palettes for Inkscape</rt></ruby>_,之后等待片刻。
|
||||
依次点击如下选项:<ruby>扩展<rt>Extensions</rt></ruby> > Ink/Stitch > <ruby>线条颜色管理<rt>Thread Color Management</rt></ruby> > <ruby>为 Inkscape 安装线条调色板<rt>Install thread color palettes for Inkscape</rt></ruby>,之后等待片刻。
|
||||
|
||||
虽然这一过程不会出现进度条之类的提示,不过也无需着急。
|
||||
|
||||
@ -85,17 +83,17 @@ Ink/Stitch 提供了为 Inkscape 安装插件的功能,用户需首先执行
|
||||
|
||||
![Inkscape with the swatches dialogue open, which shows the Madeira Rayon color palette][18]
|
||||
|
||||
如果你使用的 Ink/Stitch 是从 Github 下载的 2.0.0 版本,那么下载下来的 ZIP 文件里就包括了色板文件。你只需将其解压到正确的路径:_~/.config/inkscape/palettes/_。如果你需要环形模板,可以点击 [此处][19] 下载,并将其保存到 _~/.config/inkscape/templates_ 目录下.
|
||||
如果你使用的 Ink/Stitch 是从 Github 下载的 2.0.0 版本,那么下载下来的 ZIP 文件里就包括了色板文件。你只需将其解压到正确的路径:`~/.config/inkscape/palettes/`。如果你需要环形模板,可以点击 [此处][19] 下载,并将其保存到 `~/.config/inkscape/templates` 目录下。
|
||||
|
||||
重新启动 Inkscape,可在 _<ruby>文件<rt>File</rt></ruby> > <ruby>由模板新建<rt>New From Template</rt></ruby>_ 下找到该模板。
|
||||
重新启动 Inkscape,可在 <ruby>文件<rt>File</rt></ruby> > <ruby>由模板新建<rt>New From Template</rt></ruby> 下找到该模板。
|
||||
|
||||
### Ink/Stitch 绣字
|
||||
|
||||
到目前为止,绣花设计最简单也最常用的方法就是使用 Ink/Stitch 的 _<ruby>文字缝制<rt>Lettering</rt></ruby>_ 功能。该功能位于 _<ruby>拓展<rt>Extensions</rt></ruby> > Ink/Stitch > <ruby>文字缝制<rt>Lettering</rt></ruby>_。绣花文字缝制可不是一件简单事儿,它其实就是所谓的缎面绣字,需要做好特殊的文字设置。
|
||||
到目前为止,绣花设计最简单也最常用的方法就是使用 Ink/Stitch 的 <ruby>文字缝制<rt>Lettering</rt></ruby> 功能。该功能位于 <ruby>扩展<rt>Extensions</rt></ruby> > Ink/Stitch > <ruby>文字缝制<rt>Lettering</rt></ruby>。绣花文字缝制可不是一件简单事儿,它其实就是所谓的缎面绣字,需要做好特殊的文字设置。
|
||||
|
||||
![Inkscape with a “Chopin” glyph for satin stitching defined for the Lettering function][20]
|
||||
|
||||
你可以将路径转换为缎面绣,但是这种方法比使用文字缝制功能还要繁琐许多。多亏了社区的活跃,2021 年 5 月份发布的 Ink/Stitch 2.0 版本预置了更多的字体。2.0 版本还增加了 _<ruby>拓展<rt>Extensions</rt></ruby> > Ink/Stitch > <ruby>字体管理<rt>Font Management</rt></ruby>_ 功能,让用户更方便地管理这些字体。
|
||||
你可以将路径转换为缎面绣,但是这种方法比使用文字缝制功能还要繁琐许多。多亏了社区的活跃,2021 年 5 月份发布的 Ink/Stitch 2.0 版本预置了更多的字体。2.0 版本还增加了 <ruby>扩展<rt>Extensions</rt></ruby> > Ink/Stitch > <ruby>字体管理<rt>Font Management</rt></ruby> 功能,让用户更方便地管理这些字体。
|
||||
|
||||
此外,还有制作字体的功能,但是你需要了解如何使用 Inkscape 设计字体,可在 [此处][21] 浏览相关英文教程。这里只给出大概的介绍:首先创建一个 SVG 字体,接着将其储存在 JSON 文件中,这样便可以在 Ink/Stitch 字体管理功能中使用。
|
||||
|
||||
@ -105,15 +103,15 @@ Ink/Stitch 提供了为 Inkscape 安装插件的功能,用户需首先执行
|
||||
|
||||
### 绣制区域、路径等对象
|
||||
|
||||
Ink/Stitch 最容易实现的就是绣制区域或者路径。你需要做的只是画出路径。如果你使用的是形状,那么你需要将其转换成路径,然后执行如下操作:_<ruby>拓展<rt>Extensions</rt></ruby> > Ink/Stitch > <ruby>填充工具<rt>Fill Tools</rt></ruby> > <ruby>分离填充对象<rt>Break Apart Fill Objects…<ruby><rt>_,将路径分割成若干部分。
|
||||
Ink/Stitch 最容易实现的就是绣制区域或者路径。你需要做的只是画出路径。如果你使用的是形状,那么你需要将其转换成路径,然后执行如下操作:<ruby>扩展<rt>Extensions</rt></ruby> > Ink/Stitch > <ruby>填充工具<rt>Fill Tools</rt></ruby> > <ruby>分离填充对象<rt>Break Apart Fill Objects…</rt></ruby>,将路径分割成若干部分。
|
||||
|
||||
虽然 Inkscape 也有 _<ruby>路径<rt>Path</rt></ruby> > <ruby>分离<rt>Break apart</rt></ruby>_ 功能,但是在这种情况下并不可行。
|
||||
虽然 Inkscape 也有 <ruby>路径<rt>Path</rt></ruby> > <ruby>分离<rt>Break apart</rt></ruby> 功能,但是在这种情况下并不可行。
|
||||
|
||||
接下来,运行 Ink/Stitch 内置模拟器:_<ruby>拓展<rt>Extensions</rt></ruby> > Ink/Stitch > <ruby>可视化并导出<rt>Visualise and Export</rt></ruby> > <ruby>模拟器/实际预览<rt>Simulator/Realistic Preview</rt></ruby>_.
|
||||
接下来,运行 Ink/Stitch 内置模拟器:<ruby>扩展<rt>Extensions</rt></ruby> > Ink/Stitch > <ruby>可视化并导出<rt>Visualise and Export</rt></ruby> > <ruby>模拟器/实际预览<rt>Simulator/Realistic Preview</rt></ruby>。
|
||||
|
||||
![The new Fedora logo as Stitch Plan Preview][23]
|
||||
|
||||
注意,模拟器运行时需要占用大量的系统资源,而且启动时间也比较长。其实,以下功能操作起来会更加简便:_<ruby>拓展<rt>Extensions</rt></ruby> > Ink/Stitch > <ruby>可视化并导出<rt>Visualise and Export</rt></ruby> > <ruby>线迹计划预览<rt>Stitch Plan Preview</rt></ruby>_。该功能会在文件外部对线条进行渲染。
|
||||
注意,模拟器运行时需要占用大量的系统资源,而且启动时间也比较长。其实,以下功能操作起来会更加简便:<ruby>扩展<rt>Extensions</rt></ruby> > Ink/Stitch > <ruby>可视化并导出<rt>Visualise and Export</rt></ruby> > <ruby>线迹计划预览<rt>Stitch Plan Preview</rt></ruby>。该功能会在文件外部对线条进行渲染。
|
||||
|
||||
![Nicubunu’s Fedora hat icon as embroidery. The angles for the stitches of the head part and the brim are different so that it looks more realistic. The outline is done in Satin stitching][24]
|
||||
|
||||
@ -123,11 +121,11 @@ Ink/Stitch 会使用连续的线条(非虚线)将每个笔画转换成之字
|
||||
|
||||
![Parameter setting dialogue and on the right the Fedora logo shape embroidered as Zig-Zag line][25]
|
||||
|
||||
这个方法虽然简单,但绝不是最好的选择。最好的选择是使用缎面工具,该功能可以在 _<ruby>拓展<rt>Extensions</rt></ruby> > <ruby>缎面工具<rt>Satin Tools</rt></ruby>_ 找到。其中,转换功能又是重中之重,它可以将路径转换为缎面笔画。
|
||||
这个方法虽然简单,但绝不是最好的选择。最好的选择是使用缎面工具,该功能可以在 <ruby>扩展<rt>Extensions</rt></ruby> > <ruby>缎面工具<rt>Satin Tools</rt></ruby> 找到。其中,转换功能又是重中之重,它可以将路径转换为缎面笔画。
|
||||
|
||||
![Fedora logo shape as Satin Line embroidery][26]
|
||||
|
||||
通过 _<ruby>拓展<rt>Extensions</rt></ruby> > <ruby>缎面工具<rt>Satin Tools</rt></ruby> > <ruby>旋转缎纹路径<rt>Flip Satin Column Rails</rt></ruby>_,你还可以改变线迹的方向。这样做可以凸显缎面绣的立体感,典型的例子就是泡芙刺绣(一种非常具有立体感的刺绣)。支持这种功能的机器还可以为绣花时产生的多余的连线线迹标记出修剪记号。这些记号正是从 Ink/Stitch 自身符号库里安装得到的符号。
|
||||
通过 <ruby>扩展<rt>Extensions</rt></ruby> > <ruby>缎面工具<rt>Satin Tools</rt></ruby> > <ruby>旋转缎纹路径<rt>Flip Satin Column Rails</rt></ruby>,你还可以改变线迹的方向。这样做可以凸显缎面绣的立体感,典型的例子就是泡芙刺绣(一种非常具有立体感的刺绣)。支持这种功能的机器还可以为绣花时产生的多余的连线线迹标记出修剪记号。这些记号正是从 Ink/Stitch 自身符号库里安装得到的符号。
|
||||
|
||||
### Ink/Stitch 线迹库
|
||||
|
||||
@ -135,33 +133,25 @@ Ink/Stitch 会使用连续的线条(非虚线)将每个笔画转换成之字
|
||||
|
||||
* **平针**:平针用于边缘装饰,沿直线或曲线缝制出一排短小的线迹,由此组成的一条条虚线就是平针。虚线的尺寸可大可小。
|
||||
|
||||
|
||||
|
||||
![A running stitch – each dashed line will be converted in such one][27]
|
||||
![A running stitch – each dashed line will be converted in such one][27]
|
||||
|
||||
* **豆针**:豆针可用于边缘装饰或添加设计细节。使用平针来回缝制就是豆针,这种缝法会增加线迹的厚度。
|
||||
|
||||
|
||||
|
||||
![Bean Stitches – creating a thicker line][28]
|
||||
![Bean Stitches – creating a thicker line][28]
|
||||
|
||||
* **手工针**:在该模式下,Ink/Stitch 会将路径的每个节点当作穿针点;这些节点也正是针穿入的位置。
|
||||
|
||||
|
||||
|
||||
![In manual mode – each node will be the needle penetration point][29]
|
||||
![In manual mode – each node will be the needle penetration point][29]
|
||||
|
||||
* **E 字针**:E 字针是一种简单但十分好用的绷缝线迹,用于贴花织物。这种线迹多用于婴儿装,因为婴儿的皮肤比较敏感。
|
||||
|
||||
|
||||
|
||||
![E-Stitch mostly used for applications on baby cloths, soft but strong connection][30]
|
||||
![E-Stitch mostly used for applications on baby cloths, soft but strong connection][30]
|
||||
|
||||
### 绣花用线列表
|
||||
|
||||
有些绣花机,尤其是商用的绣花机,根据设计的需要,可以提前适配不同的针线。必要时,这类机器会自动切换使用合适的针线。有些绣花文件格式支持这一功能,但有些并不支持。Ink/Stitch 可以将用户设置好的线条列表应用到绣花设计中。
|
||||
|
||||
如果你想在现有的设计上导入线条列表,可执行如下操作:_<ruby>拓展<rt>Extensions</rt></ruby> > Ink/Stitch > <ruby>导入线条列表<rt>Import Threadlist</rt></ruby>_。同样的,线条列表也可以导出:_<ruby>另存为 zip 文件,打包多种不同的文件格式<rt>Save As different file formats as *.zip</rt></ruby>_。当然,也可以将其打印出来:_<ruby>拓展<rt>Extensions</rt></ruby> > Ink/Stitch > <ruby>可视化并导出<rt>Visualise and Export</rt></ruby> > <ruby>打印 PDF<rt>Print PDF</rt></ruby>_。
|
||||
如果你想在现有的设计上导入线条列表,可执行如下操作:<ruby>扩展<rt>Extensions</rt></ruby> > Ink/Stitch > <ruby>导入线条列表<rt>Import Threadlist</rt></ruby>。同样的,线条列表也可以导出:<ruby>另存为<rt>Save As</rt></ruby> 不同的文件格式,如 *.zip。当然,也可以将其打印出来:<ruby>扩展<rt>Extensions</rt></ruby> > Ink/Stitch > <ruby>可视化并导出<rt>Visualise and Export</rt></ruby> > <ruby>打印 PDF<rt>Print PDF</rt></ruby>。
|
||||
|
||||
### 结语
|
||||
|
||||
@ -174,7 +164,7 @@ via: https://fedoramagazine.org/make-more-with-inkscape-ink-stitch/
|
||||
作者:[Sirko Kemter][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[aREversez](https://github.com/aREversez)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
488
published/202208/20210921 3 ways to test your API with Python.md
Normal file
488
published/202208/20210921 3 ways to test your API with Python.md
Normal file
@ -0,0 +1,488 @@
|
||||
[#]: subject: "3 ways to test your API with Python"
|
||||
[#]: via: "https://opensource.com/article/21/9/unit-test-python"
|
||||
[#]: author: "Miguel Brito https://opensource.com/users/miguendes"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "Yufei-Yan"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14944-1.html"
|
||||
|
||||
用 Python 测试 API 的 3 种方式
|
||||
=====
|
||||
|
||||
> 单元测试可能令人生畏,但是这些 Python 模块会使你的生活变得更容易。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/18/180800clp08p82pi838zrs.jpg)
|
||||
|
||||
在这个教程中,你将学到如何对执行 HTTP 请求代码的进行单元测试。也就是说,你将看到用 Python 对 API 进行单元测试的艺术。
|
||||
|
||||
单元测试是指对单个行为的测试。在测试中,一个众所周知的经验法则就是隔离那些需要外部依赖的代码。
|
||||
|
||||
比如,当测试一段执行 HTTP 请求的代码时,建议在测试过程中,把真正的调用替换成一个假的的调用。这种情况下,每次运行测试的时候,就可以对它进行单元测试,而不需要执行一个真正的 HTTP 请求。
|
||||
|
||||
问题就是,_怎样才能隔离这些代码?_
|
||||
|
||||
这就是我希望在这篇博文中回答的问题!我不仅会向你展示如果去做,而且也会权衡不同方法之间的优点和缺点。
|
||||
|
||||
要求:
|
||||
|
||||
* [Python 3.8][2]
|
||||
* pytest-mock
|
||||
* requests
|
||||
* flask
|
||||
* responses
|
||||
* VCR.py
|
||||
|
||||
### 使用一个天气状况 REST API 的演示程序
|
||||
|
||||
为了更好的解决这个问题,假设你正在创建一个天气状况的应用。这个应用使用第三方天气状况 REST API 来检索一个城市的天气信息。其中一个需求是生成一个简单的 HTML 页面,像下面这个图片:
|
||||
|
||||
![web page displaying London weather][3]
|
||||
|
||||
*伦敦的天气,OpenWeatherMap。图片是作者自己制作的。*
|
||||
|
||||
为了获得天气的信息,必须得去某个地方找。幸运的是,通过 [OpenWeatherMap][2] 的 REST API 服务,可以获得一切需要的信息。
|
||||
|
||||
_好的,很棒,但是我该怎么用呢?_
|
||||
|
||||
通过发送一个 `GET` 请求到:`https://api.openweathermap.org/data/2.5/weather?q={city_name}&appid={api_key}&units=metric`,就可以获得你所需要的所有东西。在这个教程中,我会把城市名字设置成一个参数,并确定使用公制单位。
|
||||
|
||||
### 检索数据
|
||||
|
||||
使用 `requests` 模块来检索天气数据。你可以创建一个接收城市名字作为参数的函数,然后返回一个 JSON。JSON 包含温度、天气状况的描述、日出和日落时间等数据。
|
||||
|
||||
下面的例子演示了这样一个函数:
|
||||
|
||||
```
|
||||
def find_weather_for(city: str) -> dict:
|
||||
"""Queries the weather API and returns the weather data for a particular city."""
|
||||
url = API.format(city_name=city, api_key=API_KEY)
|
||||
resp = requests.get(url)
|
||||
return resp.json()
|
||||
```
|
||||
|
||||
这个 URL 是由两个全局变量构成:
|
||||
|
||||
```
|
||||
BASE_URL = "https://api.openweathermap.org/data/2.5/weather"
|
||||
API = BASE_URL + "?q={city_name}&appid={api_key}&units=metric"
|
||||
```
|
||||
|
||||
API 以这个格式返回了一个 JSON:
|
||||
|
||||
```
|
||||
{
|
||||
"coord": {
|
||||
"lon": -0.13,
|
||||
"lat": 51.51
|
||||
},
|
||||
"weather": [
|
||||
{
|
||||
"id": 800,
|
||||
"main": "Clear",
|
||||
"description": "clear sky",
|
||||
"icon": "01d"
|
||||
}
|
||||
],
|
||||
"base": "stations",
|
||||
"main": {
|
||||
"temp": 16.53,
|
||||
"feels_like": 15.52,
|
||||
"temp_min": 15,
|
||||
"temp_max": 17.78,
|
||||
"pressure": 1023,
|
||||
"humidity": 72
|
||||
},
|
||||
"visibility": 10000,
|
||||
"wind": {
|
||||
"speed": 2.1,
|
||||
"deg": 40
|
||||
},
|
||||
"clouds": {
|
||||
"all": 0
|
||||
},
|
||||
"dt": 1600420164,
|
||||
"sys": {
|
||||
"type": 1,
|
||||
"id": 1414,
|
||||
"country": "GB",
|
||||
"sunrise": 1600407646,
|
||||
"sunset": 1600452509
|
||||
},
|
||||
"timezone": 3600,
|
||||
"id": 2643743,
|
||||
"name": "London",
|
||||
"cod": 200
|
||||
```
|
||||
|
||||
当调用 `resp.json()` 的时候,数据是以 Python 字典的形式返回的。为了封装所有细节,可以用 `dataclass` 来表示它们。这个类有一个工厂方法,可以获得这个字典并且返回一个 `WeatherInfo` 实例。
|
||||
|
||||
这种办法很好,因为可以保持这种表示方法的稳定。比如,如果 API 改变了 JSON 的结构,就可以在同一个地方(`from_dict` 方法中)修改逻辑。其他代码不会受影响。你也可以从不同的源获得信息,然后把它们都整合到 `from_dict` 方法中。
|
||||
|
||||
```
|
||||
@dataclass
|
||||
class WeatherInfo:
|
||||
temp: float
|
||||
sunset: str
|
||||
sunrise: str
|
||||
temp_min: float
|
||||
temp_max: float
|
||||
desc: str
|
||||
|
||||
@classmethod
|
||||
def from_dict(cls, data: dict) -> "WeatherInfo":
|
||||
return cls(
|
||||
temp=data["main"]["temp"],
|
||||
temp_min=data["main"]["temp_min"],
|
||||
temp_max=data["main"]["temp_max"],
|
||||
desc=data["weather"][0]["main"],
|
||||
sunset=format_date(data["sys"]["sunset"]),
|
||||
sunrise=format_date(data["sys"]["sunrise"]),
|
||||
)
|
||||
```
|
||||
|
||||
现在来创建一个叫做 `retrieve_weather` 的函数。使用这个函数调用 API,然后返回一个 `WeatherInfo`,这样就可创建你自己的 HTML 页面。
|
||||
|
||||
```
|
||||
def retrieve_weather(city: str) -> WeatherInfo:
|
||||
"""Finds the weather for a city and returns a WeatherInfo instance."""
|
||||
data = find_weather_for(city)
|
||||
return WeatherInfo.from_dict(data)
|
||||
```
|
||||
|
||||
很好,我们的 app 现在有一些基础了。在继续之前,对这些函数进行单元测试。
|
||||
|
||||
### 1、使用 mock 测试 API
|
||||
|
||||
[根据维基百科][4],<ruby>模拟对象<rt>mock object</rt></ruby>是通过模仿真实对象来模拟它行为的一个对象。在 Python 中,你可以使用 `unittest.mock` 库来<ruby>模拟<rt>mock</rt></ruby>任何对象,这个库是标准库中的一部分。为了测试 `retrieve_weather` 函数,可以模拟 `requests.get`,然后返回静态数据。
|
||||
|
||||
#### pytest-mock
|
||||
|
||||
在这个教程中,会使用 `pytest` 作为测试框架。通过插件,`pytest` 库是非常具有扩展性的。为了完成我们的模拟目标,要用 `pytest-mock`。这个插件抽象化了大量 `unittest.mock` 中的设置,也会让你的代码更简洁。如果你感兴趣的话,我在 [另一篇博文中][5] 会有更多的讨论。
|
||||
|
||||
_好的,言归正传,现在看代码。_
|
||||
|
||||
下面是一个 `retrieve_weather` 函数的完整测试用例。这个测试使用了两个 `fixture`:一个是由 `pytest-mock` 插件提供的 `mocker` fixture, 还有一个是我们自己的。就是从之前请求中保存的静态数据。
|
||||
|
||||
```
|
||||
@pytest.fixture()
|
||||
def fake_weather_info():
|
||||
"""Fixture that returns a static weather data."""
|
||||
with open("tests/resources/weather.json") as f:
|
||||
return json.load(f)
|
||||
```
|
||||
|
||||
```
|
||||
def test_retrieve_weather_using_mocks(mocker, fake_weather_info):
|
||||
"""Given a city name, test that a HTML report about the weather is generated
|
||||
correctly."""
|
||||
# Creates a fake requests response object
|
||||
fake_resp = mocker.Mock()
|
||||
# Mock the json method to return the static weather data
|
||||
fake_resp.json = mocker.Mock(return_value=fake_weather_info)
|
||||
# Mock the status code
|
||||
fake_resp.status_code = HTTPStatus.OK
|
||||
|
||||
mocker.patch("weather_app.requests.get", return_value=fake_resp)
|
||||
|
||||
weather_info = retrieve_weather(city="London")
|
||||
assert weather_info == WeatherInfo.from_dict(fake_weather_info)
|
||||
```
|
||||
|
||||
如果运行这个测试,会获得下面的输出:
|
||||
|
||||
```
|
||||
============================= test session starts ==============================
|
||||
...[omitted]...
|
||||
tests/test_weather_app.py::test_retrieve_weather_using_mocks PASSED [100%]
|
||||
============================== 1 passed in 0.20s ===============================
|
||||
Process finished with exit code 0
|
||||
```
|
||||
|
||||
很好,测试通过了!但是...生活并非一帆风顺。这个测试有优点,也有缺点。现在来看一下。
|
||||
|
||||
#### 优点
|
||||
|
||||
好的,有一个之前讨论过的优点就是,通过模拟 API 的返回值,测试变得简单了。将通信和 API 隔离,这样测试就可以预测了。这样总会返回你需要的东西。
|
||||
|
||||
#### 缺点
|
||||
|
||||
对于缺点,问题就是,如果不再想用 `requests` 了,并且决定回到标准库的 `urllib`,怎么办。每次改变 `find_weather_for` 的代码,都得去适配测试。好的测试是,当你修改代码实现的时候,测试时不需要改变的。所以,通过模拟,你最终把测试和实现耦合在了一起。
|
||||
|
||||
而且,另一个不好的方面是你需要在调用函数之前进行大量设置——至少是三行代码。
|
||||
|
||||
```
|
||||
...
|
||||
# Creates a fake requests response object
|
||||
fake_resp = mocker.Mock()
|
||||
# Mock the json method to return the static weather data
|
||||
fake_resp.json = mocker.Mock(return_value=fake_weather_info)
|
||||
# Mock the status code
|
||||
fake_resp.status_code = HTTPStatus.OK
|
||||
...
|
||||
```
|
||||
|
||||
_我可以做的更好吗?_
|
||||
|
||||
是的,请继续看。我现在看看怎么改进一点。
|
||||
|
||||
### 使用 responses
|
||||
|
||||
用 `mocker` 功能模拟 `requests` 有点问题,就是有很多设置。避免这个问题的一个好办法就是使用一个库,可以拦截 `requests` 调用并且给它们 <ruby>打补丁<rt>patch</rt></ruby>。有不止一个库可以做这件事,但是对我来说最简单的是 `responses`。我们来看一下怎么用,并且替换 `mock`。
|
||||
|
||||
```
|
||||
@responses.activate
|
||||
def test_retrieve_weather_using_responses(fake_weather_info):
|
||||
"""Given a city name, test that a HTML report about the weather is generated
|
||||
correctly."""
|
||||
api_uri = API.format(city_name="London", api_key=API_KEY)
|
||||
responses.add(responses.GET, api_uri, json=fake_weather_info, status=HTTPStatus.OK)
|
||||
|
||||
weather_info = retrieve_weather(city="London")
|
||||
assert weather_info == WeatherInfo.from_dict(fake_weather_info)
|
||||
```
|
||||
|
||||
这个函数再次使用了我们的 `fake_weather_info` fixture。
|
||||
|
||||
然后运行测试:
|
||||
|
||||
```
|
||||
============================= test session starts ==============================
|
||||
...
|
||||
tests/test_weather_app.py::test_retrieve_weather_using_responses PASSED [100%]
|
||||
============================== 1 passed in 0.19s ===============================
|
||||
```
|
||||
|
||||
非常好!测试也通过了。但是...并不是那么棒。
|
||||
|
||||
#### 优点
|
||||
|
||||
使用诸如 `responses` 这样的库,好的方面就是不需要再给 `requests` <ruby>打补丁<rt>patch</rt></ruby>。通过将这层抽象交给库,可以减少一些设置。然而,如果你没注意到的话,还是有一些问题。
|
||||
|
||||
#### 缺点
|
||||
|
||||
和 `unittest.mock` 很像,测试和实现再一次耦合了。如果替换 `requests`,测试就不能用了。
|
||||
|
||||
### 2、使用适配器测试 API
|
||||
|
||||
_如果用模拟让测试耦合了,我能做什么?_
|
||||
|
||||
设想下面的场景:假如说你不能再用 `requests` 了,而且必须要用 `urllib` 替换,因为这是 Python 自带的。不仅仅是这样,你了解了不要把测试代码和实现耦合,并且你想今后都避免这种情况。你想替换 `urllib`,也不想重写测试了。
|
||||
|
||||
事实证明,你可以抽象出执行 `GET` 请求的代码。
|
||||
|
||||
_真的吗?怎么做?_
|
||||
|
||||
可以使用<ruby>适配器<rt>adapter</rt></ruby>来抽象它。适配器是一种用来封装其他类的接口,并作为新接口暴露出来的一种设计模式。用这种方式,就可以修改适配器而不需要修改代码了。比如,在 `find_weather_for` 函数中,封装关于 `requests` 的所有细节,然后把这部分暴露给只接受 URL 的函数。
|
||||
|
||||
所以,这个:
|
||||
|
||||
```
|
||||
def find_weather_for(city: str) -> dict:
|
||||
"""Queries the weather API and returns the weather data for a particular city."""
|
||||
url = API.format(city_name=city, api_key=API_KEY)
|
||||
resp = requests.get(url)
|
||||
return resp.json()
|
||||
```
|
||||
|
||||
变成这样:
|
||||
|
||||
```
|
||||
def find_weather_for(city: str) -> dict:
|
||||
"""Queries the weather API and returns the weather data for a particular city."""
|
||||
url = API.format(city_name=city, api_key=API_KEY)
|
||||
return adapter(url)
|
||||
```
|
||||
|
||||
然后适配器变成这样:
|
||||
|
||||
```
|
||||
def requests_adapter(url: str) -> dict:
|
||||
resp = requests.get(url)
|
||||
return resp.json()
|
||||
```
|
||||
|
||||
现在到了重构 `retrieve_weather` 函数的时候:
|
||||
|
||||
```
|
||||
def retrieve_weather(city: str) -> WeatherInfo:
|
||||
"""Finds the weather for a city and returns a WeatherInfo instance."""
|
||||
data = find_weather_for(city, adapter=requests_adapter)
|
||||
return WeatherInfo.from_dict(data)
|
||||
```
|
||||
|
||||
所以,如果你决定改为使用 `urllib` 的实现,只要换一下适配器:
|
||||
|
||||
```
|
||||
def urllib_adapter(url: str) -> dict:
|
||||
"""An adapter that encapsulates urllib.urlopen"""
|
||||
with urllib.request.urlopen(url) as response:
|
||||
resp = response.read()
|
||||
return json.loads(resp)
|
||||
```
|
||||
|
||||
```
|
||||
def retrieve_weather(city: str) -> WeatherInfo:
|
||||
"""Finds the weather for a city and returns a WeatherInfo instance."""
|
||||
data = find_weather_for(city, adapter=urllib_adapter)
|
||||
return WeatherInfo.from_dict(data)
|
||||
```
|
||||
|
||||
_好的,那测试怎么做?_
|
||||
|
||||
为了测试 `retrieve_weather`, 只要创建一个在测试过程中使用的假的适配器:
|
||||
|
||||
```
|
||||
@responses.activate
|
||||
def test_retrieve_weather_using_adapter(
|
||||
fake_weather_info,
|
||||
):
|
||||
def fake_adapter(url: str):
|
||||
return fake_weather_info
|
||||
|
||||
weather_info = retrieve_weather(city="London", adapter=fake_adapter)
|
||||
assert weather_info == WeatherInfo.from_dict(fake_weather_info)
|
||||
```
|
||||
|
||||
如果运行测试,会获得:
|
||||
|
||||
```
|
||||
============================= test session starts ==============================
|
||||
tests/test_weather_app.py::test_retrieve_weather_using_adapter PASSED [100%]
|
||||
============================== 1 passed in 0.22s ===============================
|
||||
```
|
||||
|
||||
#### 优点
|
||||
|
||||
这个方法的优点是可以成功将测试和实现解耦。使用<ruby>[依赖注入][6]<rt>dependency injection</rt></ruby>在测试期间注入一个假的适配器。你也可以在任何时候更换适配器,包括在运行时。这些事情都不会改变任何行为。
|
||||
|
||||
#### 缺点
|
||||
|
||||
缺点就是,因为你在测试中用了假的适配器,如果在实现中往适配器中引入了一个 bug,测试的时候就不会发现。比如说,往 `requests` 传入了一个有问题的参数,像这样:
|
||||
|
||||
```
|
||||
def requests_adapter(url: str) -> dict:
|
||||
resp = requests.get(url, headers=<some broken headers>)
|
||||
return resp.json()
|
||||
```
|
||||
|
||||
在生产环境中,适配器会有问题,而且单元测试没办法发现。但是事实是,之前的方法也会有同样的问题。这就是为什么不仅要单元测试,并且总是要集成测试。也就是说,要考虑另一个选项。
|
||||
|
||||
### 3、使用 VCR.py 测试 API
|
||||
|
||||
现在终于到了讨论我们最后一个选项了。诚实地说,我也是最近才发现这个。我用<ruby>模拟<rt>mock</rt></ruby>也很长时间了,而且总是有一些问题。`VCR.py` 是一个库,它可以简化很多 HTTP 请求的测试。
|
||||
|
||||
它的工作原理是将第一次运行测试的 HTTP 交互记录为一个 YAML 文件,叫做 `cassette`。请求和响应都会被序列化。当第二次运行测试的时候,`VCT.py` 将拦截对请求的调用,并且返回一个响应。
|
||||
|
||||
现在看一下下面如何使用 `VCR.py` 测试 `retrieve_weather`:
|
||||
|
||||
```
|
||||
@vcr.use_cassette()
|
||||
def test_retrieve_weather_using_vcr(fake_weather_info):
|
||||
weather_info = retrieve_weather(city="London")
|
||||
assert weather_info == WeatherInfo.from_dict(fake_weather_info)
|
||||
```
|
||||
|
||||
_天呐,就这样?没有设置?`@vcr.use_cassette()` 是什么?_
|
||||
|
||||
是的,就这样!没有设置,只要一个 `pytest` 标注告诉 VCR 去拦截调用,然后保存 cassette 文件。
|
||||
|
||||
_cassette 文件是什么样?_
|
||||
|
||||
好问题。这个文件里有很多东西。这是因为 VCR 保存了交互中的所有细节。
|
||||
|
||||
```
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Accept:
|
||||
- '*/*'
|
||||
Accept-Encoding:
|
||||
- gzip, deflate
|
||||
Connection:
|
||||
- keep-alive
|
||||
User-Agent:
|
||||
- python-requests/2.24.0
|
||||
method: GET
|
||||
uri: https://api.openweathermap.org/data/2.5/weather?q=London&appid=<YOUR API KEY HERE>&units=metric
|
||||
response:
|
||||
body:
|
||||
string: '{"coord":{"lon":-0.13,"lat":51.51},"weather":[{"id":800,"main":"Clear","description":"clearsky","icon":"01d"}],"base":"stations","main":{"temp":16.53,"feels_like":15.52,"temp_min":15,"temp_max":17.78,"pressure":1023,"humidity":72},"visibility":10000,"wind":{"speed":2.1,"deg":40},"clouds":{"all":0},"dt":1600420164,"sys":{"type":1,"id":1414,"country":"GB","sunrise":1600407646,"sunset":1600452509},"timezone":3600,"id":2643743,"name":"London","cod":200}'
|
||||
headers:
|
||||
Access-Control-Allow-Credentials:
|
||||
- 'true'
|
||||
Access-Control-Allow-Methods:
|
||||
- GET, POST
|
||||
Access-Control-Allow-Origin:
|
||||
- '*'
|
||||
Connection:
|
||||
- keep-alive
|
||||
Content-Length:
|
||||
- '454'
|
||||
Content-Type:
|
||||
- application/json; charset=utf-8
|
||||
Date:
|
||||
- Fri, 18 Sep 2020 10:53:25 GMT
|
||||
Server:
|
||||
- openresty
|
||||
X-Cache-Key:
|
||||
- /data/2.5/weather?q=london&units=metric
|
||||
status:
|
||||
code: 200
|
||||
message: OK
|
||||
version: 1
|
||||
```
|
||||
|
||||
_确实很多!_
|
||||
|
||||
真的!好的方面就是你不需要留意它。`VCR.py` 会为你安排好一切。
|
||||
|
||||
#### 优点
|
||||
|
||||
现在看一下优点,我可以至少列出五个:
|
||||
|
||||
* 没有设置代码。
|
||||
* 测试仍然是分离的,所以很快。
|
||||
* 测试是确定的。
|
||||
* 如果你改了请求,比如说用了错误的 header,测试会失败。
|
||||
* 没有与代码实现耦合,所以你可以换适配器,而且测试会通过。唯一有关系的东西就是请求必须是一样的。
|
||||
|
||||
#### 缺点
|
||||
|
||||
再与模拟相比较,除了避免了错误,还是有一些问题。
|
||||
|
||||
如果 API 提供者出于某种原因修改了数据格式,测试仍然会通过。幸运的是,这种情况并不经常发生,而且在这种重大改变之前,API 提供者通常会给他们的 API 提供不同版本。
|
||||
|
||||
另一个需要考虑的事情是<ruby>就地<rt>in place</rt></ruby><ruby>端到端<rt>end-to-end</rt></ruby>测试。每次服务器运行的时候,这些测试都会调用。顾名思义,这是一个范围更广、更慢的测试。它们会比单元测试覆盖更多。事实上,并不是每个项目都需要使用它们。所以,就我看来,`VCR.py` 对于大多数人的需求来说都绰绰有余。
|
||||
|
||||
### 总结
|
||||
|
||||
就这么多了。我希望今天你了解了一些有用的东西。测试 API 客户端应用可能会有点吓人。然而,当武装了合适的工具和知识,你就可以驯服这个野兽。
|
||||
|
||||
在 [我的 Github][8] 上可以找到这个完整的应用。
|
||||
|
||||
_这篇文章最早发表在 [作者的个人博客][9],授权转载_
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/9/unit-test-python
|
||||
|
||||
作者:[Miguel Brito][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[Yufei-Yan](https://github.com/Yufei-Yan)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/miguendes
|
||||
[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://miguendes.me/how-i-set-up-my-python-workspace
|
||||
[3]: https://opensource.com/sites/default/files/sbzkkiywh.jpeg
|
||||
[4]: https://en.wikipedia.org/wiki/Mock_object
|
||||
[5]: https://miguendes.me/7-pytest-plugins-you-must-definitely-use
|
||||
[6]: https://stackoverflow.com/questions/130794/what-is-dependency-injection
|
||||
[7]: https://api.openweathermap.org/data/2.5/weather?q=London&appid=
|
||||
[8]: https://github.com/miguendes/tutorials/tree/master/testing_http
|
||||
[9]: https://miguendes.me/3-ways-to-test-api-client-applications-in-python
|
@ -0,0 +1,189 @@
|
||||
[#]: subject: "Linux tips for using cron to schedule tasks"
|
||||
[#]: via: "https://opensource.com/article/21/11/cron-linux"
|
||||
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "Veryzzj"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14932-1.html"
|
||||
|
||||
使用 cron 定时任务的小技巧
|
||||
======
|
||||
|
||||
> 通过使用这个简单而强大的 Linux 命令行工具,来安排备份、文件清理以及其他任务。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/15/151143fjdses6bdj2nj1j5.jpg)
|
||||
|
||||
在计算机上让任务按照有规律并且可预测的时间表运行很重要。作为人类,我们有时会因为分心、脑子里想太多,或是度假而记不住要做的事情。计算机真的很擅长按计划做事,但在计算机采取行动之前,人类必须对计算机进行编程。
|
||||
|
||||
在某种程度上,cron 系统是编程的初级简单入门。通过编辑一个文件就可以让计算机做你想让它做的事。你甚至不需要知道文件保存在哪里。只需键入一个简单的命令,输入你希望电脑遵循的 “配方”,并保存。从那时起,计算机会在指定时间执行你的指令,直到被告知停止。
|
||||
|
||||
从设计上来看,cron 不是一个复杂的系统。这里有一些你需要了解的内容。
|
||||
|
||||
### cron 是什么?
|
||||
|
||||
cron 命令在 Linux 和 Unix 中无处不在,而且它经常被模仿和重塑,以至于它几乎成了按计划发生的事情的一个通用术语。它是自动化的一种形式,尽管有不同的实现方式(比如 Dillon's cron、Vixie's cron、chrony 和其他),以及像 anacron 和 systemd 定时器这样的变化,但其语法和工作流程几十年来一直保持着基本一致。
|
||||
|
||||
cron 在一个 “<ruby>假脱机<rt>spool</rt></ruby>” 系统上工作,像打印机和电子邮件一样。如果不你知道打印机和电子邮件使用假脱机也没关系,因为假脱机文件的意义在于,你不需要想太多。在 Linux 系统中,`/var/spool` 目录被设计为重要但低级的文件的中心枢纽,用户不需要直接与之交互。 在 `/var/spool` 中管理的一个假脱机是 cron 表(简称为 “crontab”)。 包括你在内的每个用户在 Linux 系统中都有一个 crontab。用户可以编辑、查看和删除自己的 crontab。除此之外,用户可以使用 crontab 来安排任务。cron 系统监控 crontab,并确保一个 crontab 中列出的任何工作都能在其指定时间执行。
|
||||
|
||||
### 编辑 cron 设置
|
||||
|
||||
你可以使用 `crontab` 命令和 `-e`(代表“编辑”)选项来编辑你的 crontab。默认情况下,大多数系统会调用 `vim` 文本编辑器。如果你和我一样,不使用 Vim,那么你可以在 `~/.bashrc` 文件中为自己设置一个不同的编辑器。我把我的设置为 Emacs,但你也可以试试 [Nano][4]、[Kate][5],或者任何你喜欢的编辑器。`EDITOR` 环境变量定义了你在终端使用的文本编辑器,而 `VISUAL` 变量定义了你在图形模式下使用的编辑器:
|
||||
|
||||
```
|
||||
export EDITOR=nano
|
||||
export VISUAL=kate
|
||||
```
|
||||
|
||||
更新设置后刷新你的 shell 会话:
|
||||
|
||||
```
|
||||
$ source ~/.bashrc
|
||||
```
|
||||
|
||||
现在你可以用喜欢的编辑器编辑 crontab:
|
||||
|
||||
```
|
||||
$ crontab -e
|
||||
```
|
||||
|
||||
#### 为任务执行安排时间
|
||||
|
||||
cron 系统本质上是一个日历系统。可以通过五个不同的属性告诉 cron 需要让一个任务多长时间运行一次:分、时、日、月、星期。这些属性的顺序是固定的,并且不一定是直观的,你可以把它们看作是过滤器或掩码。默认情况下,你可以理解为所有东西都被设置为“总是”或者“每一个”。此命令将在全年的每一天每小时每分钟运行 `touch /tmp/hello`:
|
||||
|
||||
```
|
||||
* * * * * touch /tmp/hello
|
||||
```
|
||||
|
||||
可以通过设置每个属性的具体定义来限制这个包罗万象的时间安排表。使任务在每个小时的 30 分钟时运行,将分钟设置为 `30`:
|
||||
|
||||
```
|
||||
30 * * * * touch /tmp/hello
|
||||
```
|
||||
|
||||
可以通过一个具体的小时来进一步约束这个指令。使任务在每个凌晨 3:30 运行:
|
||||
|
||||
```
|
||||
30 3 * * * touch /tmp/hello
|
||||
```
|
||||
|
||||
你也可以让这个任务只在每个月的第一天运行:
|
||||
|
||||
```
|
||||
30 3 1 * * touch /tmp/hello
|
||||
```
|
||||
|
||||
你可以用 `1` 至 `12` 表示 1 至 12 月来设置月份,用 `0` 至 `6` 表示周日至周六来设置星期。这项任务在 4 月份的周一的 3:15 运行:
|
||||
|
||||
```
|
||||
15 3 * 4 1 touch /tmp/hello
|
||||
```
|
||||
|
||||
### 设置增量
|
||||
|
||||
所有这些设置都与一个固定时间 _完全_ 匹配。使用 cron 符号设置可以在特定时间段后运行任务,例如,每 15 分钟运行一个任务:
|
||||
|
||||
```
|
||||
*/15 * * * * touch /tmp/hello
|
||||
```
|
||||
|
||||
每三天在上午 10 点运行任务:
|
||||
|
||||
```
|
||||
* 10 */3 * * touch /tmp/hello
|
||||
```
|
||||
|
||||
每 6 小时运行一次任务:
|
||||
|
||||
```
|
||||
* */6 * * * touch /tmp/hello
|
||||
```
|
||||
|
||||
### Cron 速记符
|
||||
|
||||
现代的 cron 实现已经为常见的时间安排表添加了方便的速记符,包括:
|
||||
|
||||
* `@hourly`:每小时
|
||||
* `@daily`:每天
|
||||
* `@weekly`:每周
|
||||
* `@monthly`:每月
|
||||
* `@yearly` 或 `@annually`:每年
|
||||
|
||||
### 列出 cron 任务
|
||||
|
||||
使用 `crontab` 命令,查看计划中的 cron 任务列表:
|
||||
|
||||
```
|
||||
$ crontab -l
|
||||
15 3 * 4 1 touch /tmp/hello
|
||||
```
|
||||
|
||||
### 删除一个 crontab
|
||||
|
||||
当一个 crontab 任务不需要时,可以使用 `-r` 选项来删除它:
|
||||
|
||||
```
|
||||
$ crontab -r -i
|
||||
```
|
||||
|
||||
`-i` 选项代表 _交互式_。它在删除文件之前会提示你进行确认。
|
||||
|
||||
### Cron 可以做什么
|
||||
|
||||
知道如何使用 cron 是一回事,但但知道它的用途是另一回事。经典用例就是备份计划。如果你的电脑一天中大部分时间都是开着的,或者整天整夜地开着,那么可以为重要分区进行例行备份。我会在每天凌晨 3 点在主要数据分区上运行一个名为 `rdiff-backup` 的备份程序:
|
||||
|
||||
```
|
||||
$ crontab -l | grep rdiff
|
||||
* 3 * * * rdiff-backup /data/ /vault/
|
||||
```
|
||||
|
||||
另一个常见的用途是系统维护。在我的 Slackware 桌面上,每周五下午会更新本地版本库目录:
|
||||
|
||||
```
|
||||
$ crontab -l | grep slack
|
||||
* 14 * * 5 sudo slackpkg update
|
||||
```
|
||||
|
||||
我还会每 3 天在 15:00 运行一个 Ansible 脚本来 [清理我的下载文件夹][6] :
|
||||
|
||||
```
|
||||
$ crontab -l | grep ansible
|
||||
* 15 */3 * * ansible-playbook /home/seth/Ansible/cleanup.yaml
|
||||
```
|
||||
|
||||
有一些重复数据删除脚本、文件大小和 `/tmp` 目录的监视器、照片调整器、文件移动工具以及很多琐碎的任务,你可以安排在后台运行,以帮助保持系统不受干扰。有了 cron,计算机可以以我希望我的实体公寓能够做到的方式来照顾自己。
|
||||
|
||||
### 记住 cron 的设置
|
||||
|
||||
除了想明白你为什么需要 cron 之外,根据我的经验,cron 最难的事情是记住它的语法。重复这句话给自己听,反反复复,直到你记牢它:
|
||||
|
||||
> 分、时、日、月、星
|
||||
>
|
||||
> 分、时、日、月、星
|
||||
>
|
||||
> 分、时、日、月、星
|
||||
|
||||
更好的做法是,去 [下载我们免费的速查表][7] ,这样当你最需要它时,它触手可及!
|
||||
|
||||
> **[Cron 速查表][7]**
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/11/cron-linux
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[Veryzzj](https://github.com/Veryzzj)
|
||||
校对:[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/linux_keyboard_desktop.png?itok=I2nGw78_ "Linux keys on the keyboard for a desktop computer"
|
||||
[2]: https://opensource.com/article/21/2/linux-automation
|
||||
[3]: https://opensource.com/article/20/7/systemd-timers
|
||||
[4]: https://opensource.com/article/20/12/gnu-nano
|
||||
[5]: https://opensource.com/article/20/12/kate-text-editor
|
||||
[6]: https://opensource.com/article/21/9/keep-folders-tidy-ansible
|
||||
[7]: https://opensource.com/downloads/linux-cron-cheat-sheet
|
@ -0,0 +1,164 @@
|
||||
[#]: subject: "The only Linux command you need to know"
|
||||
[#]: via: "https://opensource.com/article/22/6/linux-cheat-command"
|
||||
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "Donkey-Hao"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14961-1.html"
|
||||
|
||||
“作弊”:只需要知道这一个 Linux 命令就够了
|
||||
======
|
||||
|
||||
> Linux cheat 命令是一个实用程序,可以用来搜索和显示你想要使用的命令的使用示例。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/24/160901xi66t9pe74x7pxqp.jpg)
|
||||
|
||||
互联网上有很多关于 Linux 和开源的信息,但是当你想要深入工作,通常需要一份便捷的文档。早在 Linux 出现之前的 Unix 系统中,就有 `man`(“manual” 的缩写)和 `info` 命令了,二者都会显示命令、配置文件、系统调用等的官方项目文档。
|
||||
|
||||
关于 `man` 和 `info` 页面是对知晓如何使用工具的用户的有用提醒,还是为初次使用的用户提供介绍存在争议。不管怎样,`man` 和 `info` 页面介绍了工具以及如何使用该工具,很少涉及特定任务以及如何完成它们。正是出于这个原因,开发了 `cheat` 命令。
|
||||
|
||||
例如,设想你想不起来如何 [解压 tar 压缩包文件][2] 。`man` 页面会给你展示所有的选项,但需要你将这些信息转换为命令:
|
||||
|
||||
```
|
||||
tar -A [OPTIONS] ARCHIVE ARCHIVE
|
||||
tar -c [-f ARCHIVE] [OPTIONS] [FILE...]
|
||||
tar -d [-f ARCHIVE] [OPTIONS] [FILE...]
|
||||
tar -t [-f ARCHIVE] [OPTIONS] [MEMBER...]
|
||||
tar -r [-f ARCHIVE] [OPTIONS] [FILE...]
|
||||
tar -u [-f ARCHIVE] [OPTIONS] [FILE...]
|
||||
tar -x [-f ARCHIVE] [OPTIONS] [MEMBER...]
|
||||
```
|
||||
|
||||
这确实是一些用户需要的,但是也使一些用户感到困惑。相比之下,`cheat` 命令会罗列常用命令:
|
||||
|
||||
```
|
||||
$ cheat tar
|
||||
|
||||
# To extract an uncompressed archive:
|
||||
tar -xvf /path/to/foo.tar
|
||||
|
||||
# To extract a .tar in specified Directory:
|
||||
tar -xvf /path/to/foo.tar -C /path/to/destination/
|
||||
|
||||
# To create an uncompressed archive:
|
||||
tar -cvf /path/to/foo.tar /path/to/foo/
|
||||
|
||||
# To extract a .tgz or .tar.gz archive:
|
||||
tar -xzvf /path/to/foo.tgz
|
||||
tar -xzvf /path/to/foo.tar.gz
|
||||
[...]
|
||||
```
|
||||
|
||||
这真是雪中送炭!
|
||||
|
||||
### Linux Cheat 命令
|
||||
|
||||
`cheat` 命令是一个实用程序,可以用来搜索和显示你想要使用的命令的使用示例。如大多数 Unix 命令一样,同一个概念有多种不同的实现方式,它包括一个 [使用 Go 编写][3] 的和一个由我帮助维护的 [仅用 100 行 Bash 编写][4] 的两个版本。
|
||||
|
||||
若要安装 Go 版本的,下载 [最新版][5] 并将它放在某个 [路径][6] 中,例如 `~/.local/bin/` 或 `/usr/local/bin` 中。若安装 Bash 版本,下载最新版并运行 `install-cheat.sh` 脚本:
|
||||
|
||||
```
|
||||
$ sh ./install-cheat.sh
|
||||
```
|
||||
|
||||
如需配置后安装,请使用 [自动工具][7](Autotools):
|
||||
|
||||
```
|
||||
$ aclocal ; autoconf
|
||||
$ automake --add-missing ; autoreconf
|
||||
$ ./configure --prefix=$HOME/.local
|
||||
$ make
|
||||
$ make install
|
||||
```
|
||||
|
||||
### 在 Linux 中安装 Cheat 程序
|
||||
|
||||
Cheat 只是包含常用命令的纯文本文件。该程序可以从 [github.com/cheat/cheatsheets][8] 获得。当你第一次运行命令时,Go 版本会自动为你下载支持列表。如果你使用 Bash 版本,用 `--fetch` 选项可以下载支持列表:
|
||||
|
||||
```
|
||||
$ cheat --fetch
|
||||
```
|
||||
|
||||
与 `man` 一样,你的系统上可以有多个备忘单集合。 Go 版本的 `cheat` 使用 [YAML][9] 配置文件来定义每个集合的位置。Bash 版本在安装过程中定义了路径,默认下载 [github.com/cheat/cheatsheets][10] 集合以及 [opensource.com][11] 自己的 [gitlab.com/opensource.com/cheatsheets][12] 集合。
|
||||
|
||||
### 列出 Cheat 支持项目
|
||||
|
||||
使用 `--list` 选项即可查看 `cheat` 支持的项目:
|
||||
|
||||
```
|
||||
$ cheat --list
|
||||
7z
|
||||
ab
|
||||
acl
|
||||
alias
|
||||
ansi
|
||||
ansible
|
||||
ansible-galaxy
|
||||
ansible-vault
|
||||
apk
|
||||
[...]
|
||||
```
|
||||
|
||||
### 使用 Cheat 查看 Linux 命令
|
||||
|
||||
使用 `cheat` 查看命令如同使用 `man` 和 `info` 查看一样简单。只需要输入你需要查询的命令即可:
|
||||
|
||||
```
|
||||
$ cheat alias
|
||||
|
||||
# To show a list of your current shell aliases:
|
||||
alias
|
||||
|
||||
# To alias `ls -l` to `ll`:
|
||||
alias ll='ls -l'
|
||||
```
|
||||
|
||||
默认情况下,`cheat` 命令会使用你的 [环境变量][13] `PAGER` 中指定的分页器。你可以在运行 `cheat` 命令前改写 `PAGER` 变量值,暂时修改环境变量。
|
||||
|
||||
```
|
||||
$ PAGER=most cheat less
|
||||
```
|
||||
|
||||
如果你只是想在没有 `PAGER` 的情况下将 `cheat` [输出][14] 到终端里,在 Bash 版中有 `--cat` 选项可以使用:
|
||||
|
||||
```
|
||||
$ cheat --cat less
|
||||
```
|
||||
|
||||
### 这并不是作弊
|
||||
|
||||
`cheat` 系统抓住了要害,你不必拼凑有关如何使用命令的线索,你只需按照示例进行操作即可。当然,对于复杂的命令,它不是深入研究实际文档的捷径,但为了快速借用,它还是可以的。
|
||||
|
||||
甚至你可以通过将文件放入其中一个备忘单集合中,来创建自己的备忘单。好消息是,因为这些项目是开源的,所以你可以将你的个人备忘单贡献给 GitHub 集合。另一个好消息是,当有新的 opensource.com [备忘单][15] 版本发布时,我们将从现在开始包含纯文本版本,以便你可以将其添加到你的收藏中。
|
||||
|
||||
该命令称为 “<ruby>作弊<rt>cheat</rt></ruby>”,但正如任何 Linux 用户都会向你保证的那样,它实际上并不是作弊。它只是以开源的方式工作得更巧妙。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/6/linux-cheat-command
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[Donkey](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/seth
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/command_line_prompt.png
|
||||
[2]: https://opensource.com/article/17/7/how-unzip-targz-file
|
||||
[3]: https://github.com/cheat/cheat
|
||||
[4]: https://gitlab.com/slackermedia/cheat
|
||||
[5]: https://github.com/cheat/cheat/releases
|
||||
[6]: https://opensource.com/article/17/6/set-path-linux
|
||||
[7]: https://opensource.com/article/19/7/introduction-gnu-autotools
|
||||
[8]: https://github.com/cheat/cheatsheets
|
||||
[9]: https://opensource.com/article/21/9/yaml-cheat-sheet
|
||||
[10]: https://github.com/cheat/cheatsheets
|
||||
[11]: http://Opensource.com
|
||||
[12]: https://gitlab.com/opensource.com/cheatsheets
|
||||
[13]: https://opensource.com/article/19/8/what-are-environment-variables
|
||||
[14]: https://opensource.com/article/19/2/getting-started-cat-command
|
||||
[15]: https://opensource.com/downloads
|
@ -2,45 +2,47 @@
|
||||
[#]: via: "https://www.debugpoint.com/ethernet-splitter-speed/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "MCGA"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: translator: "Yufei-Yan"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14915-1.html"
|
||||
|
||||
以太网分离器会降低网速吗?
|
||||
======
|
||||
|
||||
这批文章详细总结了以太网分离器,以及它们的速度,还有常见问题等信息,来帮助你选择最合适的硬件。
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/10/104845ishhhse3meqzuamd.jpg)
|
||||
|
||||
<ruby>交换机<rt>Switch</rt></ruby>,<ruby>集线器<rt>Hub</rt></ruby>,还有<ruby>以太网分离器<rt>Ethernet Splitter</rt></ruby>是用来帮助扩展网络的网络设备。这其中,最基础的设备就是小巧的以太网分离器了。它们是可以将一个以太网信号分成两个的小型设备。它们简单易用,并且还便宜。这可以算是最简单的网络设备之一了,因为他们不需要提供电源,也不需要特定的按键或者 LED 灯来提示状态。只是在一个小设备上有三个以太网端口,其中两个在一侧,另一个在另一侧。有些品种是在一侧有带着一小段 [RJ45][1] 网线的连接,另一侧是两个以太网端口。
|
||||
> 这篇文章详细总结了以太网分离器,以及它们的速度,还有各种常见问题等信息,来帮助你选择最合适的硬件。
|
||||
|
||||
<ruby>交换机<rt>Switch</rt></ruby>、<ruby>集线器<rt>Hub</rt></ruby>,还有<ruby>以太网分离器<rt>Ethernet Splitter</rt></ruby> 是用来帮助扩展网络的网络设备。这其中,最基础的设备就是小巧的以太网分离器了。它们是一种小型设备,可以将一个以太网信号分成两个。它们简单易用,并且还便宜。这可以算是最简单的网络设备之一了,因为它们不需要提供电源,也没有特定的按键或者 LED 灯来提示状态。只是在一个小设备上有三个以太网端口,其中两个在一侧,另一个在另一侧。有些品种是在一侧有带着一小段 [RJ45][1] 接口的网线,另一侧是两个以太网端口。
|
||||
|
||||
尽管在网络世界中,分离器已经存在了相当长一段时间了,很多人还是不知道如何有效使用它们。与普遍的看法相反的是,以太网分离器应该总是成对购买。直接把分离器的一端和路由器连接,再把两个设备与分离器的两个端口连接,这样是不行的。想让分离器在网络中正常工作,是有一个正确的设置技巧的。
|
||||
|
||||
### 如何使用以太网分离器进行一个基本的设置
|
||||
|
||||
要从主信号源连接两个在不同房间的设备,以太网分离器是非常方便的。大多数情况下,它们可以节约网线、墙上的网络出口,以及提供可靠的连接 。就像之前说的,以太网分离器是成对卖的。一个分离器把信号从设备(通常是路由器)上合并,然后另一个把信号分成两个信道,这样就可以让两个设备通信了。
|
||||
要让不同房间的两个设备连接到主信号源,以太网分离器是非常方便的。大多数情况下,它们可以节约网线、墙上的网络插座,并提供了可靠的连接。就像之前说的,以太网分离器是成对出售的。一个分离器将来自设备(通常是路由器)上的信号合并,然后另一个把信号分成两个信道,这样就可以让两个设备通信了。
|
||||
|
||||
路由器在房间 A,两个 PC 在房间 B,但是每个房间的墙上只有一个以太网接口。这种情况下,就需要一个分离器,两条网线网线连到路由器上,网线的另外一端连到分离器上,然后分离器的另一端连到房间 A 墙上的接口。这样路由器的两个信号就合并到一起了。接下来,另一个分离器只有一个端口的那一端接到房间 B 墙上的接口上。从房间 A 合并的信号现在就会分成两个,这样在房间 B 里面,你就可以有两个以太网端口了。
|
||||
路由器在房间 A,两个 PC 在房间 B,但是每个房间的墙上只有一个以太网插座。这种情况下,就需要一个分离器,两条网线连到路由器上,网线的另外一端连到分离器上,然后分离器的另一端连到房间 A 墙上的接口。这样路由器的两个信号就合并到一起了。接下来,另一个分离器只有一个端口的那一端接到房间 B 墙上的接口上。从房间 A 合并的信号现在就会分成两个,这样在房间 B 里面,你就可以有两个以太网端口了。
|
||||
|
||||
分离器的优势是它可以大量减少墙上的接口,也会大量减少你这种情况下所需的网线。它会帮你避免“网线地狱”,因为这样会以 2 的倍数降低所需要的端口/网线。
|
||||
分离器的优势是它可以大量减少墙上的接口,也会大量减少你这种情况下所需的网线。它会帮你避免“网线地狱”,因为这样会将所需要的端口/网线降低两倍。
|
||||
|
||||
![sample diagram using ethernet splitter][2]
|
||||
|
||||
### 以太网分离器会降低网速吗?
|
||||
|
||||
网络连接会变慢吗?这可能是你想到的常见问题之一。好吧,答案取决于你的网络类型。理想情况下,分离器是 BASE-T 标准,也就是<ruby>快速以太网<rt>Fast Ethernet</rt></ruby>。它们可以支持高达 Mbps 的速度。
|
||||
网络连接会变慢吗?这可能是你想到的常见问题之一。好吧,答案取决于你的网络类型。理想情况下,分离器是 BASE-T 标准,也就是<ruby>快速以太网<rt>Fast Ethernet</rt></ruby>。它们可以支持高达 Mbps 级的速度。
|
||||
|
||||
答案是不,如果分离器在一个 100Mbps 的网络中使用,它是不会降低网速的。然而,如果你的路由器可以传输 1Gbps,然后你在中间用了一个分离器,那么带宽将被限制在 100Mbps。这种情况下,分离器确实会限制速度,连接会变慢。
|
||||
如果分离器在一个 100Mbps 的网络中使用,答案是否定的,它是不会降低网速的。然而,如果你的路由器可以提供 1Gbps 传输速率,然后你在中间用了一个分离器,那么带宽将被限制在 100Mbps。这种情况下,分离器确实会限制速度,连接会变慢。
|
||||
|
||||
### 以太网分离器的优势和劣势
|
||||
|
||||
以太网分离器在一些情况下很有用,但是它们也有一些缺点。对于小白来说,每个以太网端口只能提供最高 100Mbps 的速度。因为这个限制,网络中能够提供高于 100Mbps 的资源就不能被合理优化了。另外,因为你能连接的设备数量被限制在两个,如果你有两个以上的设备,以太网分离器并不是最佳选择。
|
||||
以太网分离器在一些情况下很有用,但是它们也有一些缺点。首先,每个以太网端口只能提供最高 100Mbps 的速度。因为这个限制,网络中能够提供高于 100Mbps 的资源就不能被合理优化了。另外,因为你能连接的设备数量被限制在两个,如果你有两个以上的设备,以太网分离器并不是最佳选择。
|
||||
|
||||
此外,如果路由器只剩下一个以太网端口,使用分离器是不现实的;这时候就只能做一些牺牲了。然后,尽管它们可以减少把两个网络合并所需要的网线,这种方式需要两个分离器才能工作。
|
||||
|
||||
相反的,以太网分离器也有一些优势。它们比起常见的网络设备要便宜,也不需要复杂的设置。不像其他网络设备,它们也不需要软件和其他配置。在设备不多的家庭网络中,比如说一个房间最多两个设备,以太网分离器是一个绝佳的选择。如果你只需要 100Mbps 的网络,只有两个设备要连接,以太网分离器是最好的选项。
|
||||
另一方面,以太网分离器也有一些优势。它们比起传统的网络设备要便宜,也不需要复杂的设置。不像其他网络设备,它们也不需要软件和其他配置。在设备不多的家庭网络中,比如说一个房间最多两个设备,以太网分离器是一个很好的选择。如果你只需要 100Mbps 的网络,只有两个设备要连接,以太网分离器是最好的选项。
|
||||
|
||||
以太网分离器出现已经很长时间了,但是由于非常简单,也没有太多可以改进的空间。它们仍然是基于过时的<ruby>快速以太网<rt>Fast Ethernet</rt></ruby>标准,这也许和今天高速网络的需求有点格格不入。尽管有它们的优势,大多数情况下,它们还真不是一个现实的解决方案。随着现在技术的进步,以太网分离器的前景依然光明。也许某个天才可以让他用在<ruby>千兆以太网<rt>Gigabit Ethernet</rt></ruby>标准上。
|
||||
以太网分离器出现已经很长时间了,但是由于非常简单,也没有太多可以改进的空间。它们仍然是基于过时的 <ruby>快速以太网<rt>Fast Ethernet</rt></ruby> 标准,这也许和今天高速网络的需求有点格格不入。尽管有它们的优势,大多数情况下,它们还真不是一个现实的解决方案。随着现在技术的进步,以太网分离器的前景依然光明。也许某个天才可以让它用在 <ruby>千兆以太网<rt>Gigabit Ethernet</rt></ruby> 标准上。
|
||||
|
||||
现在你已经对以太网分离器有一些了解了,下面是一些常见问题(FAQ)。
|
||||
|
||||
@ -48,7 +50,7 @@
|
||||
|
||||
#### 可以把一条以太网线分到两个设备上吗?
|
||||
|
||||
如果你想把一条以太网线分到两个设备上,这是可以想象的。然而,这就需要买一个以太网线共享分离套件。分离器套件可以让多个设备同时使用同一条网线。如果你想把 PC 和笔记本,或者 PC 和游戏主机,同时连到同一个网线上,这是个不错的选择。
|
||||
如果你想把一条以太网线分到两个设备上,这是很正常的想法。然而,这就需要买一个以太网线共享分离套件。分离器套件可以让多个设备同时使用同一条网线。如果你想把 PC 和笔记本,或者 PC 和游戏主机,同时连到同一个网线上,这是个不错的选择。
|
||||
|
||||
说到连接速度,以太网线会超过其他连接方式。当有些东西需要快速连接,比如说游戏,以太网线通常都是最好的选择。
|
||||
|
||||
@ -58,7 +60,7 @@
|
||||
|
||||
两个设备可以连到一个以太网端口。然而,就像之前说的,你需要使用网线共享套件。这是因为每个以太网连接是为一个单个设备设计的。
|
||||
|
||||
有了以太网线共享套件,你就可以给一个以太网端口连上多个设备了,这对于家庭网络来说是非常方便的。如果你有几个以太网连接可用,然后需要很多的 LAN 连接,这肯定有用。
|
||||
有了以太网线共享套件,你就可以给一个以太网端口连上多个设备了,这对于家庭网络来说是非常方便的。如果你有不多的几个以太网连接可用,然后需要很多的 LAN 连接,这肯定有用。
|
||||
|
||||
还需要说的一点是,如果你有多余的以太网端口可用,如果是这种情况,最好的选择是给每个设备分配一个端口。当这种情况不行的时候,网线共享套件或者分离器是一个完美的备选方案。
|
||||
|
||||
@ -66,17 +68,19 @@
|
||||
|
||||
以太网分离器和交换机工作起来差不多,但是从根本上是不同的。以太网分离器可以在同一根以太网线上运行两个独立的连接。然而,这最多就是两个连接。如果你只想要一个另外的设备连到这个以太网上,这是个不错的选择。但是,再有其他设备就不行了。
|
||||
|
||||
如果你想往一个以太网连接上连很多个设备,就需要买一个以太网交换机。除了可以允许多于两个设备连接外,交换机和以太网分离起相似。如果有很多要连接的设备,但是只有几个以太网端口,交换机是非常方便的,比如说你正在连接很多设备到 LAN。
|
||||
如果你想往一个以太网连接上连很多个设备,就需要买一个以太网交换机。除了可以允许多于两个设备连接外,交换机和以太网分离器相似。如果有很多要连接的设备,但是只有几个以太网端口,交换机是非常方便的,比如说你正在连接很多设备到 LAN。
|
||||
|
||||
在他们支持多个设备的时候,需要记住的是,它们也需要供电。交换机和分离器的另一个不同是,分离器不要供电,可以直接连到以太网端口。
|
||||
虽然它们支持堆叠,但需要记住的是,它们也需要供电。交换机和分离器的另一个不同是,分离器不要供电,可以直接连到以太网端口。
|
||||
|
||||
#### 我需要以太网交换机还是分离器?
|
||||
|
||||
你要连接的设备的数量决定了是需要一个交换机还是分离器。如果只需要连两个设备,可以用以太网分离器,也不用给他供电。
|
||||
|
||||
相反的,如果需要连好几设备,以太网交换机是一个理想的解决方案。它可以连接几个设备到同一个以太网端口,但是它需要供电。
|
||||
相反的,如果需要连几个设备,以太网交换机是一个理想的解决方案。它可以连接几个设备到同一个以太网端口,但是它需要供电。
|
||||
|
||||
我希望这篇指南能帮你了解以太网分离器以及如果使用它们。从网上可以以很低的价格买到。然而,如果需要超过 100Mbps 的速度,也许你需要给你的网络配置一下线路。 *[这篇文章是我们硬件指南的一部分。][5]*
|
||||
我希望这篇指南能帮你了解以太网分离器以及如果使用它们。从网上可以以很低的价格买到。然而,如果需要超过 100Mbps 的速度,也许你需要给你的网络配置一下线路。
|
||||
|
||||
[这篇文章是我们硬件指南的一部分。][5]
|
||||
|
||||
*Featured Photo by Jainath Ponnala on Unsplash*
|
||||
|
||||
@ -86,7 +90,7 @@ via: https://www.debugpoint.com/ethernet-splitter-speed/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[Yufei-Yan](https://github.com/译者ID)
|
||||
译者:[MCGA](https://github.com/Yufei-Yan)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
@ -3,81 +3,57 @@
|
||||
[#]: author: "Jim Hall https://opensource.com/users/jim-hall"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14925-1.html"
|
||||
|
||||
如何使用 LibreOffice Writer 模板
|
||||
======
|
||||
使用 LibreOffice 模板快速开始在 Linux 上写作。
|
||||
|
||||
![Typewriter in the grass][1]
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/13/165957bxrcv4lnxttdtc5c.jpg)
|
||||
|
||||
图片来源:jetheriot 提供原始照片。由 Rikki Endsley 修改。 CC BY-SA 2.0。
|
||||
> 使用 LibreOffice 模板快速开始在 Linux 上写作。
|
||||
|
||||
任何办公软件套件中的主要部件都是文字处理器。无论你的需求是大是小,从记笔记到写书,文字处理器都能完成工作。大多数 Linux 发行版都包含 [LibreOffice][2] 套件,我使用 LibreOffice Writer 作为我的文字处理器。
|
||||
任何办公软件套件中的主要部件都是文字处理器。无论你的需求如何,从记笔记到写书,文字处理器都能完成工作。大多数 Linux 发行版都包含 [LibreOffice][2] 套件,我使用 LibreOffice Writer 作为我的文字处理器。
|
||||
|
||||
LibreOffice Writer 通过其工具栏、键盘快捷键和菜单提供了很大的灵活性。但是,如果你只是想轻松地开始一个文档,你可以使用其中一个预加载的模板。以下是如何使用 LibreOffice Writer 模板让你的工作更轻松。
|
||||
|
||||
### 开始一个新文档
|
||||
|
||||
LibreOffice Writer 从一个空白文档开始。大多数人刚开始写作,但这也是从模板创建新文档的地方。
|
||||
LibreOffice Writer 从一个空白文档开始。大多数人就从这里开始写作,但这也是从模板创建新文档的地方。
|
||||
|
||||
首先,打开**文件**菜单,然后选择**新建**和**模板**。此选项会打开**模板**选项:
|
||||
首先,打开“<ruby>文件<rt>File</rt></ruby>”菜单,然后选择“<ruby>新建<rt>New</rt></ruby>”、“<ruby>模板<rt>Templetes</rt></ruby>”。此选项会打开模板选择对话框:
|
||||
|
||||
![Open templates from the File menu][3]
|
||||
|
||||
图片来源:
|
||||
|
||||
(Jim Hall,CC BY-SA 4.0)
|
||||
|
||||
**模板**选择对话框显示系统上可用的不同模板。默认的 LibreOffice Writer 安装包括用于不同类型的商务信函、简历和其他文档的模板。你可以使用对话框顶部的过滤器选项浏览列表或缩小结果范围。
|
||||
模板选择对话框显示系统上可用的不同模板。默认的 LibreOffice Writer 安装包括用于不同类型的商务信函、简历和其他文档的模板。你可以使用对话框顶部的过滤器选项浏览列表或缩小结果范围。
|
||||
|
||||
![Select a template][4]
|
||||
|
||||
图片来源:
|
||||
|
||||
(Jim Hall,CC BY-SA 4.0)
|
||||
|
||||
Click on the template you want and click **Open** to start a new Writer document using this template. Some templates include boilerplate text or other sample material you can use to get started in your new document. For example, the **Modern business letter** consists of this "lorem ipsum" sample text:
|
||||
单击你想要的模板,然后单击**打开**以使用此模板开始一个新的 Writer 文档。一些模板包括样板文本或其他示例材料,你可以使用这些材料开始编写新文档。例如,**现代商务信函**由以下 “lorem ipsum” 示例文本组成:
|
||||
单击你想要的模板,然后单击“<ruby>打开<rt>Open</rt></ruby>”以使用此模板开始一个新的 Writer 文档。一些模板包括样板文本或其他示例材料,你可以使用这些材料开始编写新文档。例如,**现代商务信函**由以下 “lorem ipsum” 示例文本组成:
|
||||
|
||||
![Modern business letter template][5]
|
||||
|
||||
图片来源:
|
||||
|
||||
(Jim Hall,CC BY-SA 4.0)
|
||||
|
||||
其他文档模板只是为你提供了一个具有一些漂亮默认设置的空文档的起点。例如,**现代**文档模板对文本正文使用无衬线字体(例如 Linux 系统上的 Carlito):
|
||||
其他文档模板只是为你提供了一个具有一些漂亮的默认设置的空文档的起点。例如,**现代**文档模板对文本正文使用无衬线字体(例如 Linux 系统上的 Carlito):
|
||||
|
||||
![Modern template][6]
|
||||
|
||||
图片来源:
|
||||
|
||||
(Jim Hall,CC BY-SA 4.0)
|
||||
|
||||
### 下载模板
|
||||
|
||||
如果你在内置选项中没有找到所需的模板,你可以从 LibreOffice 的网站下载合适的文档模板。进入 [LibreOffice 扩展][7]以开始使用 LibreOffice 扩展和模板库。
|
||||
|
||||
![Templates and extensions options][8]
|
||||
|
||||
图片来源:
|
||||
|
||||
(Jim Hall,CC BY-SA 4.0)
|
||||
|
||||
在框中输入搜索词以查找你需要的文档模板。例如,学生可能会搜索 “APA” 来查找已经为 APA 样式设置的文档模板,这是学术论文的常见样式。
|
||||
在框中输入搜索词以查找你需要的文档模板。例如,学生可能会搜索 “APA” 来查找为 APA 样式设置的文档模板,这是学术论文的常见样式。
|
||||
|
||||
![APA format template][9]
|
||||
|
||||
图片来源:
|
||||
|
||||
(Jim Hall,CC BY-SA 4.0)
|
||||
|
||||
### 总结
|
||||
|
||||
如果你需要编写文档,请浏览 LibreOffice 模板以找到适合你的模板。使用模板意味着你可以花费更少的时间来设置文档以使其具有某种外观,并且可以更快地工作。在支持你的工作的 LibreOffice 扩展和模板库中查找其他文档模板。
|
||||
|
||||
(图片来源:Jim Hall,CC BY-SA 4.0)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/7/libreoffice-writer-templates
|
||||
@ -85,7 +61,7 @@ via: https://opensource.com/article/22/7/libreoffice-writer-templates
|
||||
作者:[Jim Hall][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,142 @@
|
||||
[#]: subject: "How I use Bash to automate tasks on Linux"
|
||||
[#]: via: "https://opensource.com/article/22/7/use-bash-automate-tasks-linux"
|
||||
[#]: author: "Jim Hall https://opensource.com/users/jim-hall"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "Donkey-Hao"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14983-1.html"
|
||||
|
||||
如何在 Linux 上使用 Bash 自动化任务
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/30/181814f4v7ahztuaaxwqwg.jpg)
|
||||
|
||||
> Bash 有一些方便的自动化功能,可以让我在 Linux 上处理文件时更轻松。
|
||||
|
||||
通过 Bash 命令行进行自动化任务是极好的一种方式。不论你使用运行在服务器上的 Linux 进行管理日志文件或其他文件,还是你在个人电脑上整理文件以使桌面保持整洁,使用 Bash 的自动化功能会使你的工作变得更轻松。
|
||||
|
||||
### 自动执行文件任务:for
|
||||
|
||||
如果你对一堆文件要同时处理,并且对每个文件进行相同的操作,请使用 `for` 命令。该命令会遍历文件列表,并执行一个或多个命令。`for` 命令如下所示:
|
||||
|
||||
```
|
||||
for 变量 in 列表
|
||||
do
|
||||
命令
|
||||
done
|
||||
```
|
||||
|
||||
我在示例中添加了额外的空白和换行,来分开 `for` 命令中不同的部分。看起来好像无法在命令行中同时运行多个命令,不过你可以使用 `;` 将所有命令放在同一行中,就像这样:
|
||||
|
||||
```
|
||||
for 变量 in 列表 ; do 命令 ; done
|
||||
```
|
||||
|
||||
让我们看看它的实际效果。我使用 `for` 命令来重命名一些文件。最近,我有一些截图,想要重命名。这些截图名称为 `filemgr.png` 或 `terminal.png`,我想将 `screenshot` 放在每个名称前。我可以使用 `for` 命令一次性将 30 个文件重命名。这是两个文件的示例:
|
||||
|
||||
```
|
||||
$ ls
|
||||
filemgr.png terminal.png
|
||||
$ for f in *.png ; do mv $f screenshot-$f ; done
|
||||
$ ls
|
||||
screenshot-filemgr.png screenshot-terminal.png
|
||||
```
|
||||
|
||||
`for` 命令使得在一系列文件中执行一种或多种操作变得容易。你可以用一些有意义的变量名,比如 `image` 或 `screenshot`,或者你用示例中“缩写的”变量 `f`。当我在使用 `for` 循环写脚本的时候,会选择有意义的变量名。但是当我在命令行中使用 `for`,我通常会选择缩写变量名,比如 `f` 代表文件,`d` 代表目录等。
|
||||
|
||||
不论你选择怎样的变量名,请确保在引用变量时添加 `$` 符号。这会将变量扩展为你正在处理的文件的名称。在 Bash 提示符下键入 `help for` 以了解有关 `for` 命令的更多信息。
|
||||
|
||||
### 按条件执行:if
|
||||
|
||||
当你需要对每个文件执行相同操作时,使用 `for` 循环遍历一些文件很有帮助。但是,如果你需要对某些文件做一些不同的事情怎么办?为此,你需要使用 `if` 语句进行条件执行。`if` 语句如下所示:
|
||||
|
||||
```
|
||||
if 测试
|
||||
then
|
||||
命令
|
||||
fi
|
||||
```
|
||||
|
||||
你也可以使用 `if`、`else` 语句进行判断:
|
||||
|
||||
```
|
||||
if 测试
|
||||
then
|
||||
命令
|
||||
else
|
||||
命令
|
||||
fi
|
||||
```
|
||||
|
||||
你可以使用 `if`、`elif`、` else` 语句来实现更复杂的程序。当我一次性需要自动处理很多文件时,我会在脚本中使用:
|
||||
|
||||
```
|
||||
if 测试1
|
||||
then
|
||||
命令
|
||||
elif 测试2
|
||||
then
|
||||
命令
|
||||
elif 测试3
|
||||
then
|
||||
命令
|
||||
else
|
||||
命令
|
||||
fi
|
||||
```
|
||||
|
||||
`if` 命令可以让你进行各种判断,例如判断一个文件是否是一个文件,或者一个文件是否为空文件(零字节)。在命令行中输入 `help test`,可以立即查看使用 `if` 语句能够进行的各种测试。
|
||||
|
||||
例如,假设我想清理一个包含几十个文件的日志目录。日志管理中的一个常见任务是删除所有空日志文件,并压缩其他日志。解决这个问题的最简单方法是删除空文件。没有可以完全匹配的 `if` 测试,但是我们有 `-s` 选项来判断是否是一个文件,并且判断该文件不是空的(大小不为零)。这与我们想要的相反,但我们可以使用 `!` 来否定测试,以判断某些内容不是文件或为空。
|
||||
|
||||
让我们用一个示例来看看这个过程。我创建了两个测试文件:一个是空的,另一个包含一些数据。我们可以使用 `if` 判断,*如果*文件为空打印消息 `empty`:
|
||||
|
||||
```
|
||||
$ ls
|
||||
datafile emptyfile
|
||||
$ if [ ! -s datafile ] ; then echo "empty" ; fi
|
||||
$ if [ ! -s emptyfile ] ; then echo "empty" ; fi
|
||||
empty
|
||||
```
|
||||
|
||||
我们可以将 `if` 和 `for` 命令结合起来,检查日志文件列表中的空文件并删除:
|
||||
|
||||
```
|
||||
$ ls -l
|
||||
total 20
|
||||
-rw-rw-r--. 1 jhall jhall 2 Jul 1 01:02 log.1
|
||||
-rw-rw-r--. 1 jhall jhall 2 Jul 2 01:02 log.2
|
||||
-rw-rw-r--. 1 jhall jhall 2 Jul 3 01:02 log.3
|
||||
-rw-rw-r--. 1 jhall jhall 0 Jul 4 01:02 log.4
|
||||
-rw-rw-r--. 1 jhall jhall 2 Jul 5 01:02 log.5
|
||||
-rw-rw-r--. 1 jhall jhall 0 Jul 6 01:02 log.6
|
||||
-rw-rw-r--. 1 jhall jhall 2 Jul 7 01:02 log.7
|
||||
$ for f in log.* ; do if [ ! -s $f ] ; then rm -v $f ; fi ; done
|
||||
removed 'log.4'
|
||||
removed 'log.6'
|
||||
$ ls -l
|
||||
total 20
|
||||
-rw-rw-r--. 1 jhall jhall 2 Jul 1 01:02 log.1
|
||||
-rw-rw-r--. 1 jhall jhall 2 Jul 2 01:02 log.2
|
||||
-rw-rw-r--. 1 jhall jhall 2 Jul 3 01:02 log.3
|
||||
-rw-rw-r--. 1 jhall jhall 2 Jul 5 01:02 log.5
|
||||
-rw-rw-r--. 1 jhall jhall 2 Jul 7 01:02 log.7
|
||||
```
|
||||
|
||||
使用 `if` 命令可以在需要时执行一些操作,使脚本变得智能。我经常会在脚本中使用 `if`,当我需要判断文件在我的系统上存在或不存在时,或者判断脚本正在检查的条目是文件或目录时。使用 `if` 使得脚本能够根据需要采取不同的操作。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/7/use-bash-automate-tasks-linux
|
||||
|
||||
作者:[Jim Hall][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/jim-hall
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/bash_command_line.png
|
359
published/202208/20220726 How To Change GRUB Theme In Linux.md
Normal file
359
published/202208/20220726 How To Change GRUB Theme In Linux.md
Normal file
@ -0,0 +1,359 @@
|
||||
[#]: subject: "How To Change GRUB Theme In Linux"
|
||||
[#]: via: "https://ostechnix.com/change-grub-theme-in-linux/"
|
||||
[#]: author: "sk https://ostechnix.com/author/sk/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "robsean"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14978-1.html"
|
||||
|
||||
如何在 Linux 中更改 GRUB 主题
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/29/114710py8bi78opi2t7oop.jpg)
|
||||
|
||||
> 在 Linux 中安装和应用现代的漂亮的 GRUB 主题。
|
||||
|
||||
**GRUB** ,意即 <ruby>大统一引导程序<rt>GRand Unified Bootloader</rt></ruby> ,它是大多数 Linux 操作系统的默认引导加载程序。GRUB 引导加载程序是计算机启动时运行的第一个程序。正如你可能注意到的,GRUB 菜单的默认主题是朴素的。它只有一个黑色的背景和一些白色的字符。你们中的一些人可能不喜欢默认的 GRUB 主题。在这篇教程中,我将演示如何 **更改 GRUB 主题** 或应用华丽的主题,以使你的 GRUB 菜单在 Linux 中更加精美。
|
||||
|
||||
数年前,我们发布了一篇指南,阐释了如何在 Ubuntu 中 [配置 GRUB2 引导加载程序设置][1] 。在这篇文章中,我们将向你展示如何更改 GRUB 背景。
|
||||
|
||||
但是,只更改背景不是真正的自定义。在这篇指南中,我们不仅会更改壁纸,也会更改 GRUB 的字体、主题和整体的设计。
|
||||
|
||||
> **免责声明:** 安装 GRUB 主题可能会破坏你的系统。我强烈建议你在一个虚拟机中尝试和测试一个主题来查看它是否没有正常工作。然后再在实际的系统上安装主题。
|
||||
|
||||
### 介绍
|
||||
|
||||
在互联网上可以找到很多社区开发的 GRUB 主题。然而,它们却散落在不同的网站上。因此,找到一个好的 GRUB 主题可能会事倍功半。
|
||||
|
||||
GRUB 主题的一个重要的贡献者是 **Pling** 网站。但是,Pling 中的大部分主题是非常简单的或过时的。
|
||||
|
||||
幸运的是,我遇到一个名称为 **Gorgeous GRUB** 的项目,它是一个可以找到各种精美的 GRUB 主题的地方。相信我,作者付出了巨大的努力来收集这些主题,肯定会你喜欢的主题。
|
||||
|
||||
### Gorgeous GRUB:一个可以找到很棒的 GRUB 主题的地方
|
||||
|
||||
**Gorgeous GRUB** 是一个由不同用户所创建的质量上乘的 GRUB 社区主题的收藏集合。这个项目的开发者从 **Pling** 、**/r/unixporn** 和其它很多的论坛中手工挑选漂亮的 GRUB 主题,并将它们放置到一起,以便用户可以很容易的浏览它们。
|
||||
|
||||
如上所述,在 Pling 中的很多主题都是粗糙和过时的。Gorgeous GRUB 的作者翻遍了 Pling 和其它一些论坛的整个 GRUB 部分,并将所有令人满意的 GRUB 主题放置到一个地方。
|
||||
|
||||
它们不是一些粗制滥造的主题。他们付出了大量的努力来将定制的背景、字体和颜色等融合在一起。
|
||||
|
||||
请注意,Gorgeous GRUB 并不是一个安装你最喜欢的 GRUB 主题的应用程序。它只是一个良好工作的 GRUB 主题的展览列表。
|
||||
|
||||
这个项目托管在 GitHub 中。如果你有一些很酷的 GRUB 主题,你也可以将其添加到 Gorgeous GRUB 主题列表之中。
|
||||
|
||||
### 如何更改 GRUB 主题
|
||||
|
||||
应用或更改 GRUB 主题并不难。
|
||||
|
||||
转到 [Gorgeous GRUB 的 GitHub 网页][2] ,单击任意你想要应用的主题的标题。接下来,你将会被带到该主题的实际主页。一些主题托管在 **Pling** 之中,一些主题托管在 **GitHub** 之中。我将会看看如何安装来自 Pling 或 GitHub 的 GRUB 主题。
|
||||
|
||||
首先,让我们看看如何应用 “Descent” 主题,它托管在 Pling 中。
|
||||
|
||||
#### 1、从 Pling 安装 GRUB 主题
|
||||
|
||||
如果主题托管在 Pling 网站,遵循这些操作说明。
|
||||
|
||||
在主题主页,单击 <ruby>文件<rt>Files</rt></ruby> 标签页。你将会在图像预览的下方找到这个标签页。单击文件链接来下载它。
|
||||
|
||||
![Download GRUB Theme From Pling][3]
|
||||
|
||||
转到下载位置并提取存档文件:
|
||||
|
||||
```
|
||||
$ tar xzf 173860-20150926\ descent.tar.gz
|
||||
```
|
||||
|
||||
存档文件的内容将被提取到当前工作目录中一个名称为 `descent` 目录中。
|
||||
|
||||
使用下面的命令复制 `descent` 目录到 `/boot/grub/themes/` 目录:
|
||||
|
||||
```
|
||||
$ sudo cp -r descent/ /boot/grub/themes/
|
||||
```
|
||||
|
||||
如果 `themes` 目录不存在,只需要创建它:
|
||||
|
||||
```
|
||||
$ sudo mkdir /boot/grub/themes
|
||||
```
|
||||
|
||||
并给 `themes` 目录分配适当的权限:
|
||||
|
||||
```
|
||||
$ sudo chown $USER /boot/grub/themes/
|
||||
```
|
||||
|
||||
接下来,如上所述复制 `descent` 目录中内容到 `themes` 目录。
|
||||
|
||||
现在,你应该在 `themes` 目录中有一个以主题名称命名的文件夹:
|
||||
|
||||
```
|
||||
$ ls /boot/grub/themes/
|
||||
descent
|
||||
```
|
||||
|
||||
并且,这个主题文件夹(例如 `descent`)应该包含 `theme.txt` 和该主题附带的其它一些相关的文件(例如,背景图像、自定义文件)。
|
||||
|
||||
```
|
||||
$ ls /boot/grub/themes/descent/
|
||||
background1280x800.png descent_score_14.pf2 menu_ne.png menu_s.png progresshigh_c.png scrollframe_c.png scroll_thumb_n.png
|
||||
background_original.jpg descent_score_18.pf2 menu_n.png menu_sw.png progresshigh_e.png scrollframe_n.png scroll_thumb_s.png
|
||||
copyright menu_c.png menu_nw.png menu_w.png progresshigh_w.png scrollframe_s.png select_os.png
|
||||
descent_logo_bold_18.pf2 menu_e.png menu_se.png progressbar_c.png readme scroll_thumb_c.png theme.txt
|
||||
```
|
||||
|
||||
在复制下载的主题到 `/boot/grub/themes/` 目录后,编辑 `/etc/default/grub` 文件:
|
||||
|
||||
在进行任意更改前,请备份 `grub` 文件,以防万一:
|
||||
|
||||
```
|
||||
$ sudo cp /etc/default/grub /etc/default/grub.bak
|
||||
```
|
||||
|
||||
现在,使用你喜欢的编辑器编辑文件:
|
||||
|
||||
```
|
||||
$ sudo nano /etc/default/grub
|
||||
```
|
||||
|
||||
找到 `GRUB_THEME=` 代码行,并添加路径到你想要使用的主题的 `theme.txt` 。并且,也要取消 `GRUB_GFXMODE=` 代码行的注释,输入背景图像的分辨率。通常,背景图像的文件名称包含其分辨率(例如 `background1280x800.png`)。
|
||||
|
||||
```
|
||||
[...]
|
||||
GRUB_THEME=/boot/grub/themes/descent/theme.txt
|
||||
GRUB_GFXMODE=1280x800
|
||||
[...]
|
||||
```
|
||||
|
||||
![Enter Theme Txt File Path And Background Image Resolution][4]
|
||||
|
||||
再强调一次,如果这些代码行不存在,简单地添加它们。按下 `CTRL+O` 组合键 和 `CTRL+X` 组合键(LCTT 校注:这是 nano 中的快捷键,如果你使用 Vi/Vim,请使用相应的快捷键)来保持更改并关闭文件。
|
||||
|
||||
现在,应用更改到 GRUB ,使用命令:
|
||||
|
||||
```
|
||||
$ sudo update-grub
|
||||
```
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
Sourcing file `/etc/default/grub'
|
||||
Sourcing file `/etc/default/grub.d/init-select.cfg'
|
||||
Generating grub configuration file ...
|
||||
Found theme: /boot/grub/themes/descent/theme.txt
|
||||
Found linux image: /boot/vmlinuz-5.15.0-41-generic
|
||||
Found initrd image: /boot/initrd.img-5.15.0-41-generic
|
||||
Found linux image: /boot/vmlinuz-5.15.0-39-generic
|
||||
Found initrd image: /boot/initrd.img-5.15.0-39-generic
|
||||
Found memtest86+ image: /boot/memtest86+.elf
|
||||
Found memtest86+ image: /boot/memtest86+.bin
|
||||
Warning: os-prober will not be executed to detect other bootable partitions.
|
||||
Systems on them will not be added to the GRUB boot configuration.
|
||||
Check GRUB_DISABLE_OS_PROBER documentation entry.
|
||||
done
|
||||
```
|
||||
|
||||
![Update GRUB][5]
|
||||
|
||||
如果你是在基于 RPM 的系统上(例如 Fedora),运行下面的命令来更新 GRUB :
|
||||
|
||||
```
|
||||
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg instead
|
||||
```
|
||||
|
||||
重新启动你的系统。你就会看到更新后的 GRUB 主题。如果 GRUB 菜单没有出现。在打开硬件系统的电源时,立即按下 `ESC` 按键,直到启动菜单出现。
|
||||
|
||||
这是我的 Ubuntu 22.04 LTS 桌面的默认 GRUB 菜单。
|
||||
|
||||
![Ubuntu Default Grub Menu][6]
|
||||
|
||||
这是更新后的带有复古主题的 GRUB 菜单。
|
||||
|
||||
![Updated GRUB Menu With Descent Theme][7]
|
||||
|
||||
很酷,是吧?
|
||||
|
||||
##### 移除 GRUB 主题
|
||||
|
||||
为移除一个主题,简单地删除主题文件夹:
|
||||
|
||||
```
|
||||
$ sudo rm -fr /boot/grub/themes/descent/
|
||||
```
|
||||
|
||||
接下来,编辑 `/etc/default/grub` 文件:
|
||||
|
||||
```
|
||||
$ sudo nano /etc/default/grub
|
||||
```
|
||||
|
||||
移除下面的代码行:
|
||||
|
||||
```
|
||||
[...]
|
||||
GRUB_THEME=/boot/grub/themes/descent/theme.txt
|
||||
GRUB_GFXMODE=1280x800
|
||||
[...]
|
||||
```
|
||||
|
||||
保存文件并关闭它。
|
||||
|
||||
最后,应用更改到 GRUB ,并重新启动你的系统:
|
||||
|
||||
```
|
||||
$ sudo update-grub
|
||||
```
|
||||
|
||||
```
|
||||
$ sudo reboot
|
||||
```
|
||||
|
||||
#### 2、从 GitHub 安装 GRUB 主题
|
||||
|
||||
如果一个 GRUB 主题托管在 GitHub 中,它很可能有安装程序脚本和卸载程序脚本。让我们以 [Modern GRUB Themes][8] 为例。它托管在 GitHub 中。
|
||||
|
||||
使用 Git 复刻项目的 GitHub 存储库:
|
||||
|
||||
```
|
||||
$ git clone https://github.com/vinceliuice/grub2-themes.git
|
||||
```
|
||||
|
||||
转到项目的文件夹:
|
||||
|
||||
```
|
||||
$ cd grub2-themes/
|
||||
```
|
||||
|
||||
运行安装程序脚本:
|
||||
|
||||
```
|
||||
$ sudo ./install.sh
|
||||
```
|
||||
|
||||
选择你喜欢的 GRUB 主题背景(例如 tela)。
|
||||
|
||||
![Choose GRUB Theme Background][9]
|
||||
|
||||
选择图标样式:
|
||||
|
||||
![Choose Icon Style][10]
|
||||
|
||||
选择你的显示分辨率。
|
||||
|
||||
![Choose Display Resolution][11]
|
||||
|
||||
现在选择将会安装和应用的 GRUB 主题。
|
||||
|
||||
```
|
||||
Checking for the existence of themes directory...
|
||||
|
||||
Installing tela color 1080p theme...
|
||||
|
||||
Setting tela as default...
|
||||
|
||||
Updating grub config...
|
||||
|
||||
Sourcing file `/etc/default/grub'
|
||||
Sourcing file `/etc/default/grub.d/init-select.cfg'
|
||||
Generating grub configuration file ...
|
||||
Found theme: /usr/share/grub/themes/tela/theme.txt
|
||||
Found linux image: /boot/vmlinuz-5.15.0-41-generic
|
||||
Found initrd image: /boot/initrd.img-5.15.0-41-generic
|
||||
Found linux image: /boot/vmlinuz-5.15.0-39-generic
|
||||
Found initrd image: /boot/initrd.img-5.15.0-39-generic
|
||||
Found memtest86+ image: /boot/memtest86+.elf
|
||||
Found memtest86+ image: /boot/memtest86+.bin
|
||||
Warning: os-prober will not be executed to detect other bootable partitions.
|
||||
Systems on them will not be added to the GRUB boot configuration.
|
||||
Check GRUB_DISABLE_OS_PROBER documentation entry.
|
||||
done
|
||||
|
||||
* All done!
|
||||
|
||||
* At the next restart of your computer you will see your new Grub theme: 'tela'
|
||||
```
|
||||
|
||||
![Install Tela Modern Grub Theme][12]
|
||||
|
||||
重新启动你的系统来查看更改。
|
||||
|
||||
![Tela GRUB Theme][13]
|
||||
|
||||
这是一个漂亮的 GRUB 主题,前所未见。
|
||||
|
||||
你也可以明确地给定主题的名称和屏幕分辨率,像下面一样。
|
||||
|
||||
```
|
||||
$ sudo ./install.sh -t whitesur -s 1080p
|
||||
```
|
||||
|
||||
这将应用一个名称为 “Whitesur” 的主题,使用 1080p 屏幕分辨率。你可能会提及到其它的分辨率,例如 `2k` 、`4k` 、超宽(`ultrawide`)、超宽 2k(`ultrawide2k`) 。如果你不提及分辨率,将默认采用 `1080p` 。
|
||||
|
||||
安装 Tela 主题到 `/boot/grub/themes` 文件夹:
|
||||
|
||||
```
|
||||
$ sudo ./install.sh -b -t whitesur
|
||||
```
|
||||
|
||||
重新启动你的系统来查看更改。
|
||||
|
||||
![Whitesur GRUB Theme][14]
|
||||
|
||||
##### 移除 GRUB 主题
|
||||
|
||||
为移除已安装的一个主题,转到项目的复刻目录:
|
||||
|
||||
```
|
||||
$ cd grub2-themes/
|
||||
```
|
||||
|
||||
随后,运行:
|
||||
|
||||
```
|
||||
$ sudo ./install.sh -r -t tela
|
||||
```
|
||||
|
||||
使用你已安装的主题的名称来替换 `tela` 。
|
||||
|
||||
请注意,每个主题的安装说明可能有所不同。详细地参考每个项目的 GitHub 页面,并相应地安装主题。
|
||||
|
||||
### 总结
|
||||
|
||||
有些人喜欢使用艺术化的 Linux 发行版。他们以美化其 Linux 发行版而感到高兴和自豪。如果你是他们中的一员,你可以看看 Gorgeous GRUB 项目来美化你的 GRUB 菜单。
|
||||
|
||||
转到 Gorgeous GRUB 主题网站,从列表中选择你最喜欢的主题,并按照每个项目的主页说明来安装和应用 GRUB 主题。
|
||||
|
||||
### 资源
|
||||
|
||||
> **[Gorgeous GRUB 的 GitHub 存储库][15]**
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://ostechnix.com/change-grub-theme-in-linux/
|
||||
|
||||
作者:[sk][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[robsean](https://github.com/robsean)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [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/configure-grub-2-boot-loader-settings-ubuntu-16-04/
|
||||
[2]: https://github.com/jacksaur/Gorgeous-GRUB
|
||||
[3]: https://ostechnix.com/wp-content/uploads/2022/07/Download-GRUB-Theme-From-Pling.png
|
||||
[4]: https://ostechnix.com/wp-content/uploads/2022/07/Enter-Theme-Txt-File-Path-And-Background-Image-Resolution.png
|
||||
[5]: https://ostechnix.com/wp-content/uploads/2022/07/Update-GRUB.png
|
||||
[6]: https://ostechnix.com/wp-content/uploads/2022/07/Ubuntu-Default-Grub-Menu.png
|
||||
[7]: https://ostechnix.com/wp-content/uploads/2022/07/Updated-GRUB-Menu.png
|
||||
[8]: https://github.com/vinceliuice/grub2-themes
|
||||
[9]: https://ostechnix.com/wp-content/uploads/2022/07/Choose-GRUB-Theme-Background.png
|
||||
[10]: https://ostechnix.com/wp-content/uploads/2022/07/Choose-Icon-Style.png
|
||||
[11]: https://ostechnix.com/wp-content/uploads/2022/07/Choose-Display-Resolution.png
|
||||
[12]: https://ostechnix.com/wp-content/uploads/2022/07/Install-Tela-Modern-Grub-Theme.png
|
||||
[13]: https://ostechnix.com/wp-content/uploads/2022/07/Tela-GRUB-Theme.png
|
||||
[14]: https://ostechnix.com/wp-content/uploads/2022/07/Whitesur-GRUB-Theme-1.png
|
||||
[15]: https://github.com/jacksaur/Gorgeous-GRUB
|
@ -0,0 +1,195 @@
|
||||
[#]: subject: "**How I manage files from the Linux command lin**e"
|
||||
[#]: via: "https://opensource.com/article/22/7/manage-files-linux-command-line"
|
||||
[#]: author: "Jim Hall https://opensource.com/users/jim-hall"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "Donkey-Hao"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14930-1.html"
|
||||
|
||||
在 Linux 中如何使用命令行管理文件
|
||||
======
|
||||
|
||||
> 如果你更喜欢用终端与系统交互,请了解一下我最喜欢的管理文件的命令。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/14/172405m2wa2tbiq6qtpw2p.jpg)
|
||||
|
||||
在如 GNOME 或 KDE 等图形桌面中使用鼠标点击管理文件。你点击文件的图标,将它移动到另一个文件夹中,或者移动到回收站里。图形交互使得桌面计算机便于使用。
|
||||
|
||||
但是在 Linux 中,我们并不总是与图形界面交互。如果你在服务器上工作,那么你可能需要使用命令行来解决问题。即使像我这样使用桌面的用户,可能也更喜欢使用终端和命令行和系统交互。我倾向于通过命令行运行命令来管理我的文件:
|
||||
|
||||
### 使用 ls 显示文件
|
||||
|
||||
```
|
||||
ls
|
||||
```
|
||||
|
||||
对任何使用命令行的人来说,如果不知道有什么文件,工作将很难进行下去。[ls 命令][2] 会罗列出文件夹中的文件。例如,要查看 Web 服务器的文档根目录 `/var/www/html` 中的内容,你可以键入:
|
||||
|
||||
```
|
||||
ls /var/www/html
|
||||
```
|
||||
|
||||
大多数情况,我使用 `ls` 命令查看当前文件夹内的文件。只需要输入 `ls` 即可查看所有文件。例如,当我在我的网页项目的根目录时,输入 `ls` 后可以看到这些:
|
||||
|
||||
```
|
||||
$ ls
|
||||
about fontawesome fonts index.php styles
|
||||
docs fontawesome.zip images prism
|
||||
```
|
||||
|
||||
`ls` 命令包含 60 种选项,可以以任意方式显示文件和目录。`-l` 是一个很有用的选项,可以详细的显示文件,包含权限、文件大小以及所有者等信息。
|
||||
|
||||
```
|
||||
$ ls -l
|
||||
|
||||
total 6252
|
||||
drwxrwxr-x. 2 jhall jhall 4096 Jun 22 16:18 about
|
||||
drwxr-xr-x. 2 jhall jhall 4096 Jun 25 16:35 docs
|
||||
drwxr-xr-x. 2 jhall jhall 4096 Jun 7 00:00 fontawesome
|
||||
-rw-r--r--. 1 jhall jhall 6365962 Jun 2 16:26 fontawesome.zip
|
||||
drwxrwxr-x. 2 jhall jhall 4096 Jun 22 16:17 fonts
|
||||
drwxr-xr-x. 2 jhall jhall 4096 Jun 25 13:03 images
|
||||
-rw-rw-r--. 1 jhall jhall 327 Jun 22 16:38 index.php
|
||||
drwxrwxr-x. 2 jhall jhall 4096 Jun 22 16:18 prism
|
||||
drwxrwxr-x. 2 jhall jhall 4096 Jun 22 16:17 styles
|
||||
```
|
||||
|
||||
上方的文件大小是以字节为单位,或许看起来有点吃力。想要以方便我们阅读的格式查看文件大小,只需要添加 `-h` 或 `--human-readable` 选项,能以 `G` 、`M` 、`K` 为单位显示文件大小。
|
||||
|
||||
```
|
||||
$ ls -l --human-readable
|
||||
total 6.2M
|
||||
drwxrwxr-x. 2 jhall jhall 4.0K Jun 22 16:18 about
|
||||
drwxr-xr-x. 2 jhall jhall 4.0K Jun 25 16:35 docs
|
||||
drwxr-xr-x. 2 jhall jhall 4.0K Jun 7 00:00 fontawesome
|
||||
-rw-r--r--. 1 jhall jhall 6.1M Jun 2 16:26 fontawesome.zip
|
||||
drwxrwxr-x. 2 jhall jhall 4.0K Jun 22 16:17 fonts
|
||||
drwxr-xr-x. 2 jhall jhall 4.0K Jun 25 13:03 images
|
||||
-rw-rw-r--. 1 jhall jhall 327 Jun 22 16:38 index.php
|
||||
drwxrwxr-x. 2 jhall jhall 4.0K Jun 22 16:18 prism
|
||||
drwxrwxr-x. 2 jhall jhall 4.0K Jun 22 16:17 styles
|
||||
```
|
||||
|
||||
现在,`ls` 将 zip 文件显示为 `6.1M` 或刚刚超过 6 MB 的文件大小,而不是 `6365962`。
|
||||
|
||||
### 使用 cat、head 和 tail 命令查看文件
|
||||
|
||||
```
|
||||
cat
|
||||
```
|
||||
|
||||
```
|
||||
head
|
||||
```
|
||||
|
||||
```
|
||||
tail
|
||||
```
|
||||
|
||||
当显示出文件后,需要检查文件夹中的内容。使用很少几个命令即可做到。以我的 Web 服务器中的 `docs` 文件夹为例:
|
||||
|
||||
```
|
||||
$ ls docs
|
||||
chapter1.tex chapter4.tex chapter7.tex lorem.txt
|
||||
chapter2.tex chapter5.tex chapter8.tex readme.txt
|
||||
chapter3.tex chapter6.tex chapter9.tex workbook.tex
|
||||
```
|
||||
|
||||
这些文件是什么?我不知道,幸运的是该目录中有一个 `readme.txt` 文件,我猜它包含了这个项目目录中文件的描述。如果该文件不是很长,那我可以使用 `cat` 命令查看它:
|
||||
|
||||
```
|
||||
$ cat docs/readme.txt
|
||||
This is the workbook for the C programming self-paced
|
||||
video series. The main file is the workbook.tex file,
|
||||
which includes the other chapters.
|
||||
```
|
||||
|
||||
如果这个文件很长,则可以使用 `head` 命令查看文件的前几行。该命令通常显示前 10 行的内容,不过你也可以使用 `-n` 或者 `--lines` 选项来指定行数。例如,使用这两个 `head` 命令的选项查看 `lorem.txt` 文件的前三行:
|
||||
|
||||
```
|
||||
$ head -n 3 docs/lorem.txt
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing
|
||||
elit. Nullam at ligula eget nunc feugiat pharetra. Nullam
|
||||
nec vulputate augue. Suspendisse tincidunt aliquet
|
||||
|
||||
$ head --lines=3 docs/lorem.txt
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing
|
||||
elit. Nullam at ligula eget nunc feugiat pharetra. Nullam
|
||||
nec vulputate augue. Suspendisse tincidunt aliquet
|
||||
```
|
||||
|
||||
如果我想要查看文件的最后几行的内容,可以以相同方式使用 `tail` 命令。同样,这两个 `tail` 命令分别显示 `lorem.txt` 文件的最后三行:
|
||||
|
||||
```
|
||||
$ tail -n 3 docs/lorem.txt
|
||||
egestas sodales. Vivamus tincidunt ex sed tellus tincidunt
|
||||
varius. Nunc commodo volutpat risus, vitae luctus lacus
|
||||
malesuada tempor. Nulla facilisi.
|
||||
|
||||
$ tail --lines=3 docs/lorem.txt
|
||||
egestas sodales. Vivamus tincidunt ex sed tellus tincidunt
|
||||
varius. Nunc commodo volutpat risus, vitae luctus lacus
|
||||
malesuada tempor. Nulla facilisi.
|
||||
```
|
||||
|
||||
使用 `head` 和 `tail` 命令在服务器中查看日志文件十分有用。我有一个小型 Web 服务器运行在家庭网络,用于在网站上线前的测试。最近我发现 Web 服务器的日志很长,我好奇它存在多久了。使用 `head` 命令,我只打印第一行,可以看到该日志文件是在 2020 年 12 月创建的:
|
||||
|
||||
```
|
||||
$ ls -l --human-readable /var/log/httpd
|
||||
total 13M
|
||||
-rw-r--r--. 1 root root 13M Jun 25 16:23 access_log
|
||||
-rw-r--r--. 1 root root 45K Jun 2 00:00 error_log
|
||||
|
||||
$ sudo head -n 1 /var/log/httpd/access_log
|
||||
10.0.0.177 - - [05/Dec/2020:14:58:35 -0600] "GET / HTTP/1.1" 403 5564 "-" "Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
|
||||
```
|
||||
|
||||
### 使用 rm 命令删除文件
|
||||
|
||||
```
|
||||
rm
|
||||
```
|
||||
|
||||
在包含示例文本文件的目录中,`lorem.txt` 文件中包含 “<ruby>乱数假文<rt>Lorem Ipsum</rt></ruby>” 文本。这只是印刷行业中使用的虚拟文本,因此 `lorem.txt` 文件并不属于该项目。让我们用 `rm` 命令删除这样的文件:
|
||||
|
||||
```
|
||||
$ ls docs
|
||||
chapter1.tex chapter4.tex chapter7.tex lorem.txt
|
||||
chapter2.tex chapter5.tex chapter8.tex readme.txt
|
||||
chapter3.tex chapter6.tex chapter9.tex workbook.tex
|
||||
|
||||
$ rm docs/lorem.txt
|
||||
|
||||
$ ls docs
|
||||
chapter1.tex chapter4.tex chapter7.tex readme.txt
|
||||
chapter2.tex chapter5.tex chapter8.tex workbook.tex
|
||||
chapter3.tex chapter6.tex chapter9.tex
|
||||
```
|
||||
|
||||
由于用 `rm` 命令删除的文件会直接删除,而不会放入回收站,因此它很危险。安装 `trash` 命令比较安全,例如 [trashy][4] 或 [trash-cli][5] 命令。这样你可以在文件永久删除前,将其放入暂存区。
|
||||
|
||||
```
|
||||
$ rm docs/lorem.txt
|
||||
```
|
||||
|
||||
只需很少的命令即可在命令行中管理文件。使用 `ls` 命令显示目录中的文件,使用 `cat` 、`head` 和 `tail` 命令查看文件中的内容。使用 `rm` 或者安全的 `trash` 命令将不需要的文件删除。这五个命令足以帮你在 Linux 中管理文件。想要了解更多,可以使用 `--help` 选项来查看如何使用这些命令。例如使用 `ls --help` 查看 `ls` 命令如何使用。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/7/manage-files-linux-command-line
|
||||
|
||||
作者:[Jim Hall][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[Donkey](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/jim-hall
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/files_documents_paper_folder.png
|
||||
[2]: https://opensource.com/article/19/7/master-ls-command
|
||||
[3]: https://opensource.com/article/19/2/getting-started-cat-command
|
||||
[4]: https://gitlab.com/trashy/trashy
|
||||
[5]: https://github.com/andreafrancia/trash-cli
|
@ -2,22 +2,25 @@
|
||||
[#]: via: "https://ostechnix.com/automatically-update-running-docker-containers/"
|
||||
[#]: author: "sk https://ostechnix.com/author/sk/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "Donkey"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: translator: "Donkey-Hao"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14926-1.html"
|
||||
|
||||
如何使用 Watchtower 自动更新正在运行的 Docker 容器
|
||||
======
|
||||
使用 Watchtower 自动更新 Docker 容器基础镜像
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/13/171633bitrd5imi953bbbi.jpg)
|
||||
|
||||
> 使用 Watchtower 自动更新 Docker 容器基础镜像
|
||||
|
||||
对开发运维人员来说,保持 Docker 容器为最新版本是重要工作之一。手动更新 Docker 容器是一项耗时的工作。这篇文章解释了 **Watchtower** 是什么,如何安装它,以及在 Linux 中如何 **使用 Watchtower 自动更新正在运行的 Docker 容器** 。
|
||||
|
||||
### Watchtower 是什么?
|
||||
|
||||
**Watchtower** 是一款免费、开源的应用,用来监控运行中的 Docker 容器,并且当它发现基础镜像被更改后,可以自动的更新容器。
|
||||
**Watchtower** 是一款自由开源的应用,用来监控运行中的 Docker 容器,并且当它发现基础镜像被更改后,可以自动的更新容器。
|
||||
|
||||
若 watchtower 发现一个运行中的容器需要更新,它会以发送 SIGTERM 信号的方式,优雅的结束运行中容器的运行。
|
||||
若 Watchtower 发现一个运行中的容器需要更新,它会以发送 SIGTERM 信号的方式,优雅的结束运行中容器的运行。
|
||||
|
||||
它会下载新镜像,然后以最初部署时使用的方式,重启容器。所有文件会在后台自动下载,因此不需要用户的介入。
|
||||
|
||||
@ -27,7 +30,7 @@
|
||||
|
||||
### 在 Linux 中安装 Watchtower
|
||||
|
||||
可以通过 Docker 镜像的方式下载 Watchtower 。因此,部署它小事一桩。在你的 Linux 中安装 Docker 镜像,然后运行 Watchtower 立即开始监控 Docker 容器。
|
||||
可以通过 Docker 镜像的方式下载 Watchtower 。因此,部署它是小事一桩。在你的 Linux 中安装 Docker 镜像,然后运行 Watchtower 立即开始监控 Docker 容器。
|
||||
|
||||
参考下方指导在基于 PRM 和 DEB 包管理系统中安装 Docker
|
||||
|
||||
@ -35,8 +38,7 @@
|
||||
* [如何在 Ubuntu 中安装 Docker][2]
|
||||
* [适用于 Linux 的 Docker 桌面初学者手册][3]
|
||||
|
||||
|
||||
安装 Docker 后,你可以使用以下命令以 **root** 用户身份部署 Watchtower 容器:
|
||||
安装 Docker 后,你可以使用以下命令以 `root` 用户身份部署 Watchtower 容器:
|
||||
|
||||
```
|
||||
# docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
|
||||
@ -48,9 +50,9 @@
|
||||
$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
|
||||
```
|
||||
|
||||
该命令会拉取最新版的 watchtower 镜像,并运行 watchtower 容器。
|
||||
该命令会拉取最新版的 `watchtower` 镜像,并运行 `watchtower` 容器。
|
||||
|
||||
**输出样例:**
|
||||
输出样例:
|
||||
|
||||
```
|
||||
Unable to find image 'containrrr/watchtower:latest' locally
|
||||
@ -67,13 +69,13 @@ Status: Downloaded newer image for containrrr/watchtower:latest
|
||||
|
||||
### 使用 Watchtower 自动更新 Docker 容器
|
||||
|
||||
你系统上,Watchtower 正在和其他容器一起运行。你可以使用一下命令查看运行中的 Docker 容器列表:
|
||||
在你的系统上,Watchtower 正在和其他容器一起运行。你可以使用一下命令查看运行中的 Docker 容器列表:
|
||||
|
||||
```
|
||||
$ docker ps
|
||||
```
|
||||
|
||||
**输出样例:**
|
||||
输出样例:
|
||||
|
||||
```
|
||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||
@ -81,9 +83,9 @@ CONTAINER ID IMAGE COMMAND CREATED
|
||||
f90b462b0712 bitnami/wordpress-nginx:6 "/opt/bitnami/script…" 19 minutes ago Up 19 minutes 0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp ostechnix-wordpress-1
|
||||
```
|
||||
|
||||
正如上方输出所示,watchtower 容器正在和名为 **"ostechnix-wordpress-1"** 的容器一起运行。从现在开始,watchtower 会每隔几分钟会检查该容器。
|
||||
正如上方输出所示,`watchtower` 容器正在和名为 `ostechnix-wordpress-1` 的容器一起运行。从现在开始,`watchtower` 会每隔几分钟会检查该容器。
|
||||
|
||||
如果 watchtower 发现该容器的基础镜像的任何变化,它会优雅的关闭 "ostechnix-wordpress-1" 容器,然后使用与最初启动它时使用的相同方式,启动新的镜像。
|
||||
如果 Watchtower 发现该容器的基础镜像的任何变化,它会优雅的关闭 `ostechnix-wordpress-1` 容器,然后使用与最初启动它时使用的相同方式,启动新的镜像。
|
||||
|
||||
类似的,它会自动地每隔几分钟检查所有的运行中容器,并自动更新它们。
|
||||
|
||||
@ -97,7 +99,7 @@ f90b462b0712 bitnami/wordpress-nginx:6 "/opt/bitnami/script…" 19 minutes
|
||||
$ docker ps
|
||||
```
|
||||
|
||||
**输出样例:**
|
||||
输出样例:
|
||||
|
||||
```
|
||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||
@ -108,27 +110,27 @@ a895f082438a bitnami/mariadb:10.6 "/opt/bitnami/script…" 20 minutes
|
||||
|
||||
![View Running Docker Containers][5]
|
||||
|
||||
正如你看到的,我们正在运行 "ostechnix-wordpress-1" 和 "ostechnix-mariadb-1" 这两个容器。Mariadb 容器链接到 wordpress 容器。
|
||||
正如你看到的,我们正在运行 `ostechnix-wordpress-1` 和 `ostechnix-mariadb-1` 这两个容器。`ostechnix-mariadb-1` 容器链接到 `ostechnix-wordpress-1` 容器。
|
||||
|
||||
如果 Watchtower 发现 "wordpress" 容器有个新版本,它会先关闭与之相连接的 "mariadb" 容器 ,然后才会关闭 "wordpress" 容器。
|
||||
如果 Watchtower 发现 `ostechnix-wordpress-1` 容器有个新版本,它会先关闭与之相连接的 `ostechnix-mariadb-1` 容器 ,然后才会关闭 `ostechnix-wordpress-1` 容器。
|
||||
|
||||
更新 wordpress 容器后,Watchtower 会以正确的顺序,且与最初启动它们时使用的相同方式,重启这两个容器,以便应用程序正确恢复。在我们的例子中,首先启动的是 mariadb 容器,然后是 wordpress 容器,以确保连接能够继续运行。
|
||||
更新 `ostechnix-wordpress-1` 容器后,Watchtower 会以正确的顺序,且与最初启动它们时使用的相同方式,重启这两个容器,以便应用程序正确恢复。在我们的例子中,首先启动的是 `ostechnix-mariadb-1` 容器,然后是 `ostechnix-wordpress-1` 容器,以确保连接能够继续运行。
|
||||
|
||||
### 监控特定容器
|
||||
|
||||
默认情况下,Watchtower 将监控在它所指向的 Docker 守护进程中运行的所有 Docker 容器。
|
||||
|
||||
不过,你可以像下面这样,通过指定容器名称限制 watchtower 监视特定的 Docker 容器。
|
||||
不过,你可以像下面这样,通过指定容器名称限制 Watchtower 监视特定的 Docker 容器。
|
||||
|
||||
```
|
||||
$ docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower ostechnix-wordpress-1
|
||||
```
|
||||
|
||||
在上方的例子中,watchtower 会忽略其他容器,只监视名为 "ostechnix-wordpress-1" 的容器更新情况。
|
||||
在上方的例子中,`watchtower` 会忽略其他容器,只监视名为 `ostechnix-wordpress-1` 的容器更新情况。
|
||||
|
||||
如果你不指定任何参数,watchtower 会照常监视所有运行中的 Docker 容器。
|
||||
如果你不指定任何参数,Watchtower 会照常监视所有运行中的 Docker 容器。
|
||||
|
||||
### 发送提示 Sending Notifications
|
||||
### 发送提示
|
||||
|
||||
或许你想收到容器更新的通知。你可以通过电子邮件、Slack 、MSTeams 以及 Gotify 发送通知。
|
||||
|
||||
@ -151,13 +153,11 @@ docker run -d \
|
||||
|
||||
参考下方 Watchtower Github 仓库和 Watchtower 官方主页获取更多信息:
|
||||
|
||||
**资料**
|
||||
### 资料
|
||||
|
||||
* [Watchtower GitHub][6]
|
||||
* [Watchtower 主页][7]
|
||||
|
||||
> **推荐下载** — [免费电子书: "Docker Containerization Cookbook"][8]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://ostechnix.com/automatically-update-running-docker-containers/
|
||||
@ -165,7 +165,7 @@ via: https://ostechnix.com/automatically-update-running-docker-containers/
|
||||
作者:[sk][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[Donkey](https://github.com/Donkey-Hao)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -3,27 +3,28 @@
|
||||
[#]: author: "Bala Kalavala https://www.opensourceforu.com/author/bala-kalavala/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14918-1.html"
|
||||
|
||||
人工智能、机器学习和深度学习:有什么区别?
|
||||
人工智能(AI)、机器学习(ML)和深度学习(DL):有什么区别?
|
||||
======
|
||||
我们经常交替使用人工智能、机器学习和深度学习这些术语,尽管我们几乎每天都阅读或听到它们。本文解释了这些技术是如何演变的以及它们有何不同。
|
||||
|
||||
> 我们经常交替使用人工智能(AI)、机器学习(ML)和深度学习(DL)这些术语,尽管我们几乎每天都阅读或听到它们。本文解释了这些技术是如何演变的以及它们有何不同。
|
||||
|
||||
![AI ML and DL What’s the Difference][1]
|
||||
|
||||
人工智能 (AI)、机器学习 (ML) 和深度学习 (DL) 通常可以互换使用。但是,它们并不完全相同。人工智能是最广泛的概念,它赋予机器模仿人类行为的能力。机器学习是将人工智能应用到系统或机器中,帮助其自我学习和不断改进。最后,深度学习使用复杂的算法和深度神经网络来重复训练特定的模型或模式。
|
||||
<ruby>人工智能<rt>Artificial Intelligence</rt></ruby>(AI)、<ruby>机器学习<rt>Machine Learning</rt></ruby>(ML)和<ruby>深度学习<rt>Deep Learning</rt></ruby>(DL)通常可以互换使用。但是,它们并不完全相同。人工智能是最广泛的概念,它赋予机器模仿人类行为的能力。机器学习是将人工智能应用到系统或机器中,帮助其自我学习和不断改进。最后,深度学习使用复杂的算法和深度神经网络来重复训练特定的模型或模式。
|
||||
|
||||
让我们看看每个术语的演变和历程,以更好地理解人工智能、机器学习和深度学习实际指的是什么。
|
||||
|
||||
#### 人工智能
|
||||
|
||||
自过去 70 多年以来,人工智能已经取得了长足的进步,它渗透到我们生活的方方面面,无论我们是否知道,也不管喜欢与否。在过去十年中,机器学习和深度学习的进步已经在各种规模的行业和组织中创造了人工智能热潮。云服务提供商通过开发免费的开源服务和提供新的场景来增加势头。
|
||||
自过去 70 多年以来,人工智能已经取得了长足的进步。无论我们是否知道,也不管喜欢与否,,它已经渗透到了我们生活的方方面面。在过去十年中,机器学习和深度学习的进步已经在各种规模的行业和组织中创造了人工智能热潮。云服务提供商通过开发免费的开源服务和提供新的场景进一步推动的这种势头。
|
||||
|
||||
![Figure 1: Overview of AI, ML and DL][2]
|
||||
|
||||
人工智能可能是自 1956 年以来最受关注的概念。到 2015 年,GPU 的广泛使用使并行处理更快、更强大、更便宜。更便宜的选择导致大数据的大量存储(纯文本到图像、映射等)。这产生了对数据分析的需求,更普遍地称为数据科学,导致机器学习发展为实现人工智能的方法。
|
||||
人工智能可能是自 1956 年以来最受关注的概念。到 2015 年,GPU 的广泛使用使并行处理更快、更强大、更便宜。而愈加廉价的存储可以大规模地存储大数据(从纯文本到图像、映射等)。这产生了对数据分析的需求,它被更普遍地称为<ruby>数据科学<rt>data science</rt></ruby>,导致机器学习发展为实现人工智能的方法。
|
||||
|
||||
#### 机器学习
|
||||
|
||||
@ -35,13 +36,13 @@
|
||||
|
||||
#### 深度学习
|
||||
|
||||
深度学习是神经网络和机器学习的进化,是人工智能社区的创意。它了解人类思维在特定场景中的工作方式,然后在这项工作上比人类做得更好!例如,IBM 的 Watson 与自己下国际象棋,并在游戏中取得了很大进步,最终击败了世界冠军。谷歌的 AlphaGo 也学会了如何玩围棋游戏,一遍又一遍地玩它以提高自己,并成为冠军。
|
||||
深度学习是神经网络和机器学习的进化,是人工智能社区的创意。它学习了人类思维在特定场景中的工作方式,然后在这项工作上比人类做得更好!例如,IBM 的 Watson 与自己下国际象棋,并在游戏中取得了很大进步,最终击败了世界冠军。谷歌的 AlphaGo 也学会了如何玩围棋游戏,一遍又一遍地玩它以提高自己,并成为冠军。
|
||||
|
||||
人工智能、机器学习和深度学习正在不断发展。参与数据科学的每个人都希望推进这些概念以改善我们的日常生活。好在开源社区、私营企业、科学家和政府机构都在为此共同努力。
|
||||
人工智能、机器学习和深度学习正在不断发展。参与数据科学的每个人都希望推进这些概念以改善我们的日常生活。而开源社区、私营企业、科学家和政府机构都在为此共同努力。
|
||||
|
||||
![Figure 3: Types of AI, ML and DL][4]
|
||||
|
||||
总而言之,虽然 AI 有助于创建智能机器,但机器学习有助于构建 AI 驱动的应用。 深度学习是机器学习的一个子集。它通过利用复杂算法处理大量数据来训练特定模型。由于狭义 AI 极难开发,机器学习正在通过刚性计算解决这一领域的机遇。 至少对于实现通用 AI,深度学习有助于将 AI 和机器学习结合在一起。
|
||||
总而言之,虽然 AI 有助于创建智能机器,但机器学习有助于构建 AI 驱动的应用。深度学习是机器学习的一个子集。它通过利用复杂算法处理大量数据来训练特定模型。由于狭义 AI 极难开发,机器学习正在通过刚性计算解决这一领域的机遇。至少对于实现通用 AI,深度学习有助于将 AI 和机器学习结合在一起。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -50,7 +51,7 @@ via: https://www.opensourceforu.com/2022/08/ai-ml-and-dl-whats-the-difference/
|
||||
作者:[Bala Kalavala][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/) 荣誉推出
|
||||
|
@ -3,59 +3,62 @@
|
||||
[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14913-1.html"
|
||||
|
||||
Padloc:一个直观的开源密码管理器
|
||||
======
|
||||
简介:探索具有令人愉悦的用户界面、跨平台可用的开源密码管理器。
|
||||
|
||||
有大量适用于个人和团队的免费和高级密码管理器。
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/09/170622fcpzpcjmzxauwexw.jpg)
|
||||
|
||||
> 让我们了解一下这个具有令人愉悦的用户界面、跨平台可用的开源密码管理器。
|
||||
|
||||
有大量适用于个人和团队的免费的和收费的密码管理器。
|
||||
|
||||
然而,当谈到开源方案时,它通常仅限于几个好的方案,如 [Seahorse][1]、[KeePassXC][2] 和 [Bitwarden][3]。
|
||||
|
||||
如果您已阅读我们的 [Linux 最佳密码管理器][4]列表,你可能已经知道其中的一些。
|
||||
如果你已阅读过我们的 [Linux 最佳密码管理器][4]列表,你可能已经知道其中的一些。
|
||||
|
||||
我偶然发现了另一个有趣的开源密码管理器,它可以因其用户体验而进入该列表,即 **Padloc**。
|
||||
我偶然发现了另一个有趣的开源密码管理器 **Padloc**,它可以因其用户体验而进入该列表。
|
||||
|
||||
### Padloc:安全的跨平台密码管理器应用
|
||||
|
||||
![padloc screenshot][5]
|
||||
|
||||
虽然 Padloc 不是超级流行,但它不仅仅是另一个开源密码管理器。
|
||||
虽然 Padloc 并不是特别流行,但它可不仅仅是又一个开源密码管理器。
|
||||
|
||||
你可以通过应用和端到端加密来保护密码,从而获得令人耳目一新的用户体验。它旨在提供一个干净简单的界面来使用。
|
||||
你可以通过该应用和端到端加密来保护密码,从而获得令人耳目一新的用户体验。它旨在提供一个干净简单的界面来使用。
|
||||
|
||||
![padloc light mode][6]
|
||||
|
||||
免费开始,但提供付费订阅以解锁大多数功能。
|
||||
提供免费版本,但提供付费订阅以解锁大多数功能。
|
||||
|
||||
它支持所有主要平台,包括 Linux、Windows、macOS、Android 和 iOS。
|
||||
|
||||
你还可以获得 Mozilla Firefox 和 Google Chrome 的浏览器扩展以及所有可用的应用。因此,你也可以随时选择在网络浏览器上访问/使用它。
|
||||
你还可以获得 Mozilla Firefox 和谷歌 Chrome 的浏览器扩展以及所有可用的应用。因此,你也可以随时选择在浏览器上访问/使用它。
|
||||
|
||||
有趣的是,直到最近,该项目近两年都没有看到任何重大更新。但是,它是一个积极维护的开源项目。
|
||||
有趣的是,直到最近,该项目近两年都没有看到任何重大更新。但是,这个开源项目一直在修修补补。
|
||||
|
||||
### Padloc 的特点
|
||||
|
||||
![padloc active sessions][7]
|
||||
|
||||
Padloc 提供一系列免费和高级功能。根据你的要求,你可以选择使用付费订阅进行升级。
|
||||
Padloc 提供一系列免费和收费功能。根据你的要求,你可以选择升级到付费订阅。
|
||||
|
||||
一些功能包括:
|
||||
|
||||
* 无限保管库项目
|
||||
* 无限设备
|
||||
* 通过电子邮件进行两因素身份验证
|
||||
* 保管库项目无限制
|
||||
* 设备数量无限制
|
||||
* 通过电子邮件进行双因素身份验证
|
||||
* 添加标签
|
||||
* 生成唯一密码
|
||||
* Favicon 支持识别保管库项目
|
||||
* 暗/亮模式主题
|
||||
* 生成独特的密码
|
||||
* 支持使用 Favicon 来识别保管库项目
|
||||
* 深/浅模式主题
|
||||
* 主动会话管理
|
||||
* 导入/导出功能(加密容器/CSV)
|
||||
* 团队支持(付费)
|
||||
* 多重身份验证(付费)
|
||||
* 多因素身份验证(付费)
|
||||
* 记笔记(付费)
|
||||
* 文件附件(付费)
|
||||
* 安全报告(付费)
|
||||
@ -68,17 +71,17 @@ Padloc 提供一系列免费和高级功能。根据你的要求,你可以选
|
||||
|
||||
Padloc 为你提供了多种适用于 Linux 的选项。你可以下载 AppImage、.deb、Snap 或 Flatpak 包。
|
||||
|
||||
此外,你可以下载非 electron 桌面客户端版本,这很好!
|
||||
此外,你可以下载非 electron 的桌面客户端版本,这很好!
|
||||
|
||||
我测试了 AppImage 文件,它运行良好。你可以按照我们的指南[使用 AppImage][9]、[设置 Flatpak][10] 或[安装 deb 包][11]开始使用。
|
||||
我测试了 AppImage 文件,它运行良好。你可以按照我们的指南 [使用 AppImage][9]、[设置 Flatpak][10] 或 [安装 deb 包][11] 开始使用。
|
||||
|
||||
你可以查看其[官方网站][12]或 [GitHub 页面][13]了解更多信息。
|
||||
你可以查看其 [官方网站][12] 或 [GitHub 页面][13] 了解更多信息。
|
||||
|
||||
[Padloc][14]
|
||||
> **[Padloc][14]**
|
||||
|
||||
### 一个略显昂贵的密码管理器带来良好的用户体验
|
||||
|
||||
它的用户界面和你使用它的整体体验给我留下了深刻的印象。
|
||||
它的用户界面和使用它的整体体验给我留下了深刻的印象。
|
||||
|
||||
如果你优先考虑用户界面、极简主义和开源技术,无论你决定免费使用还是付费使用,Padloc 都是一个有用的选择。
|
||||
|
||||
@ -91,7 +94,7 @@ via: https://itsfoss.com/padloc/
|
||||
作者:[Ankush Das][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,52 @@
|
||||
[#]: subject: "What Made Fedora Choose To Use CC0 Licensed Code As The Boot"
|
||||
[#]: via: "https://www.opensourceforu.com/2022/08/what-made-fedora-choose-to-use-cc0-licensed-code-as-the-boot/"
|
||||
[#]: author: "Laveesh Kocher https://www.opensourceforu.com/author/laveesh-kocher/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "yjacks"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14921-1.html"
|
||||
|
||||
为什么 Fedora 一开始允许使用 CC0 许可证
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/12/160739j1eqft2cpw7srssz.png)
|
||||
|
||||
开源是一个具有挑战性的概念。许多人认为,开源意味着可以任意的使用软件,并且可以免费下载。这实际上取决于你如何被许可 —— 开发者分享代码时使用的许可证决定了它。开源软件可以是收费的,也可以限制你如何去使用它,在极少数情况下,甚至让你陷入法律纠纷。
|
||||
|
||||
Fedora 项目最近决定拒绝所有使用 <ruby>知识共享<rt>Creative Commons</rt></ruby> “公共领域专用” CC0 许可证的代码,以避免这种情况的出现。CC0 将从新提交代码中准许使用的许可证列表中剔除,但是,像艺术品一类的贡献仍被允许所以它,甚至可能在个案的情况下对当前的软件包进行逐一的处理。
|
||||
|
||||
如果 Fedora 反对一个软件许可证,通常不会成为新闻。事实上,在那么多的许可证当中,该项目拒绝了许多许可证。这种情况的意外之处在于,CC0 最初被认为是一个有效的许可证,现在只是由于更大的自由及开源(FOSS)社区内的观点转变而被重新分类。
|
||||
|
||||
CC0 是因为什么让 Fedora 决定停止支持它,这又是否意味着你不能在你自己的项目中使用它呢?
|
||||
|
||||
这一段描述让最熟悉知识共享及其许可系列的人惊讶的是,Fedora 最初批准了 CC0 的软件。毕竟,知识共享从一开始的目标是为艺术作品提供一系列明确的许可证。该组织的使命和许可证的要求在其名称“知识共享”中就有所体现。
|
||||
|
||||
为了“克服分享信息和创造力的法律障碍”,提供一个自由的框架来为人们组织分享如音乐、医学或教育材料的资源,知识共享组织的前身——<ruby>开放内容项目<rt>Open Content Project</rt></ruby>,于 2001 年成立。然而,软件从来不是它的组成要素。为什么呢?因为那时,如 MIT、GPL 一类的重要的软件许可证已经出现了十几年。
|
||||
|
||||
很明显,如果一家公司不遗余力地警告你他们制造的东西不适合某种特定用途,你也许应该相信他们。知识共享的 FAQ 列出了一些反对在软件上使用他们的许可证的令人信服的论据,但对于像 Fedora 项目这样的用户来说,其中一个问题特别突出:专利权。
|
||||
|
||||
鉴于 CC0 许可证是为公共领域的作品准备的,而且通过使用它,创作者明确地“放弃了他或她在版权法下对作品的所有权利”,这似乎矛盾的。但是,问题在于,版权法并不适用于专利。事实上,仔细审视许可证的完整措辞后可以发现,它在一个令人担忧的部分解决了这个问题,该部分内容如下:“宣告者拥有的任何商标或专利权都没有被本文本放弃、抛弃、交出、租赁或以其他方式修改。”
|
||||
|
||||
换言之,即使被 CC0 许可的东西的作者可能愿意放弃对它的权力,但他们仍然可以自由的为它申请专利。更糟糕的是,他们仍然保留着以他们认为合适的方式使用该专利的能力。
|
||||
|
||||
理论上来说,这意味着最初在 CC0 下提供的源代码的人在发布了代码之后,他们可能会在之后断言任何使用该代码的人侵犯了他们的专利,并要求支付专利费。
|
||||
|
||||
这显然会让像 Fedora 这样的项目担忧。考虑一下这样的情形:CC0 许可的代码进入到一个系统的核心,然后被提供给数以百万计的用户。突然间,不知道从哪里冒出来的原创作者,声称侵犯了专利权,并要求付款。红帽或 Fedora 的律师可以驳倒这种说法么?也许吧。那么,为了查明真相而使用 CC0 代码值得么?不值得。
|
||||
|
||||
要着重提到的是,这完全不是一个新问题。实际上,早在 2012 年,专利条款就阻止了开源倡议(OSI)许可证的审查委员会,他们无法最终确定 CC0 是否真正符合他们对开源许可证的定义。委员会未能达成一致意见,因为其成员认为将此类条款纳入软件许可将创造一个危险的先例。考虑到 Fedora 动荡的历史,它最初接受 CC0 的决定着实让人费解。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.opensourceforu.com/2022/08/what-made-fedora-choose-to-use-cc0-licensed-code-as-the-boot/
|
||||
|
||||
作者:[Laveesh Kocher][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[yjacks](https://github.com/yjacks)
|
||||
校对:[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/08/fedora-1024x614-1-e1659346500461.jpg
|
@ -0,0 +1,175 @@
|
||||
[#]: subject: "How I use the Linux sed command to automate file edits"
|
||||
[#]: via: "https://opensource.com/article/22/8/automate-file-edits-sed-linux"
|
||||
[#]: author: "Jim Hall https://opensource.com/users/jim-hall"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "perfiffer"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14938-1.html"
|
||||
|
||||
如何使用 Linux sed 命令自动进行文件编辑
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/17/120535by5jfu5dovfesd56.jpg)
|
||||
|
||||
> 以下是从 Linux 命令行自动编辑文件的一些提示和技巧。
|
||||
|
||||
当我使用 Linux 命令行时,无论是在台式机上编写新程序还是在 Web 服务器上管理网站,我经常需要处理文本文件。Linux 提供了强大的工具,我可以利用这些工具来完成我的工作。我经常使用 `sed`,一个可以根据模式修改文本的编辑器。
|
||||
|
||||
`sed` 代表 <ruby>流编辑器<rt>Stream EDitor</rt></ruby>,它编辑文件中的文本并打印结果。使用 `sed` 的一种方法是识别一个字符串在文件中的几次出现,并将它们替换为不同的字符串。使用 `sed` 来处理文本文件的方式似乎是无穷无尽的,但我想分享一些使用 `sed` 来帮助我管理文件的方法。
|
||||
|
||||
### 在 Linux 上搜索和替换文件中的文本
|
||||
|
||||
要使用 `sed`,你需要使用一个*正则表达式*。正则表达式是定义模式的一组特殊字符。我最常使用 `sed` 的例子是替换文件中的文本。替换文本的语法如下:`s/originaltext/newtext`。`s` 告诉 `sed` 执行文本替换或交换出现的文本。在斜线之间提供原始文本和新文本。
|
||||
|
||||
此语法将仅替换每行中第一次出现的 `originaltext`。要替换每个匹配项,即使在一行中原始文本出现了不止一次,要将 `g` 追加到表达式的末尾。例如:`s/originaltext/newtext/g`。
|
||||
|
||||
要在 `sed` 中使用此表达式,请使用 `-e` 选项指定此正则表达式:
|
||||
|
||||
```
|
||||
$ sed -e 's/originaltext/newtext/g'
|
||||
```
|
||||
|
||||
例如,假设我有一个名为 `game` 程序的 Makefile 文件,该程序模拟了康威的《生命游戏》:
|
||||
|
||||
```
|
||||
.PHONY: all run clean
|
||||
|
||||
all: game
|
||||
|
||||
game: game.o
|
||||
$(CC) $(CFLAGS) -o game game.o $(LDFLAGS)
|
||||
|
||||
run: game
|
||||
./game
|
||||
|
||||
clean:
|
||||
$(RM) *~
|
||||
$(RM) *.o
|
||||
$(RM) game
|
||||
```
|
||||
|
||||
`game` 这个名字并不是很有描述性,所以我想会把它改名为 `life`。将 `game.c` 源文件重命名为 `life.c` 非常简单,但现在我需要修改 Makefile 以使用新名称。我可以使用 `sed` 来将所有的 `game` 更改为 `life`:
|
||||
|
||||
```
|
||||
$ sed -e 's/game/life/g' Makefile
|
||||
.PHONY: all run clean
|
||||
|
||||
all: life
|
||||
|
||||
life: life.o
|
||||
$(CC) $(CFLAGS) -o life life.o $(LDFLAGS)
|
||||
|
||||
run: life
|
||||
./life
|
||||
|
||||
clean:
|
||||
$(RM) *~
|
||||
$(RM) *.o
|
||||
$(RM) life
|
||||
```
|
||||
|
||||
`sed` 会将输出打印到屏幕上,这是检查文本替换是否符合你要求的好方法。要对 Makefile 进行这些更改,首先,备份文件,然后运行 `sed` 并将输出保存到原始文件名:
|
||||
|
||||
```
|
||||
$ cp Makefile Makefile.old
|
||||
$ sed -e 's/game/life/g' Makefile.old > Makefile
|
||||
```
|
||||
|
||||
如果你确信你的更改正是你想要的,请使用 `-i` 或 `--in-place` 选项来编辑文件。但是,我建议添加一个备份文件后缀,如 `--in-place=.old`,用来备份原始文件,以备日后需要恢复时使用。它看起来像这样:
|
||||
|
||||
```
|
||||
$ sed --in-place=.old -e 's/game/life/g' Makefile
|
||||
$ ls Makefile*
|
||||
Makefile Makefile.old
|
||||
```
|
||||
|
||||
### 在 Linux 上使用 sed 引用文件
|
||||
|
||||
你可以使用正则表达式的其它功能来匹配特定的文本实例。例如,你可能需要替换出现在行首的文本。使用 `sed`,你可以用上尖号 `^` 来匹配行的开头。
|
||||
|
||||
我使用“行首”来替换文本的一种方式是当我需要在电子邮件中引用一个文件时。假设我想在电子邮件中共享我的 Makefile,但我不想将其作为文件附件包含在内。相反,我更喜欢在电子邮件正文中“引用”文件,在每行之前使用 `>`。我可以使用以下 `sed` 命令将编辑后的版本打印到我的终端,并将其复制粘贴到新的电子邮件中:
|
||||
|
||||
```
|
||||
$ sed -e 's/^/>/' Makefile
|
||||
>.PHONY: all run clean
|
||||
>
|
||||
>all: life
|
||||
>
|
||||
>life: life.o
|
||||
> $(CC) $(CFLAGS) -o life life.o $(LDFLAGS)
|
||||
>
|
||||
>run: life
|
||||
> ./life
|
||||
>
|
||||
>clean:
|
||||
> $(RM) *~
|
||||
> $(RM) *.o
|
||||
> $(RM) life
|
||||
```
|
||||
|
||||
`s/^/>/` 正则表达式匹配每行的开头(`^`),并在那里放置一个 `>`。实际上,这相当于每行都以 `>` 符号开始。
|
||||
|
||||
制表符可能无法在电子邮件中正确显示,但我可以通过添加另一个正则表达式将 Makefile 中的所有制表符替换为几个空格:
|
||||
|
||||
```
|
||||
$ sed -e 's/^/>/' -e 's/\t/ /g' Makefile
|
||||
>.PHONY: all run clean
|
||||
>
|
||||
>all: life
|
||||
>
|
||||
>life: life.o
|
||||
> $(CC) $(CFLAGS) -o life life.o $(LDFLAGS)
|
||||
>
|
||||
>run: life
|
||||
> ./life
|
||||
>
|
||||
>clean:
|
||||
> $(RM) *~
|
||||
> $(RM) *.o
|
||||
> $(RM) life
|
||||
```
|
||||
|
||||
`\t` 表示文字制表符,因此 `s/\t/ /g` 告诉 `sed` 用输出中的两个空格替换输入中的所有制表符。
|
||||
|
||||
如果你需要对文件进行大量编辑,你可以将 `-e` 命令保存在文件中,并使用 `-f` 选项来告诉 `sed` 将该文件用作“脚本”。如果你需要经常进行相同的编辑,这种方法特别有用。我已经准备了 `quotemail.sed` 的脚本文件来在我的电子邮件中引用 Makefile:
|
||||
|
||||
```
|
||||
$ cat quotemail.sed
|
||||
s/^/>/
|
||||
s/\t/ /g
|
||||
$ sed -f quotemail.sed Makefile
|
||||
>.PHONY: all run clean
|
||||
>
|
||||
>all: life
|
||||
>
|
||||
>life: life.o
|
||||
> $(CC) $(CFLAGS) -o life life.o $(LDFLAGS)
|
||||
>
|
||||
>run: life
|
||||
> ./life
|
||||
>
|
||||
>clean:
|
||||
> $(RM) *~
|
||||
> $(RM) *.o
|
||||
> $(RM) life
|
||||
```
|
||||
|
||||
### 学习在 Linux 上使用 sed
|
||||
|
||||
`sed` 是一个很好的工具,可以保存在你的 Linux 命令行工具包中。浏览 `sed` 手册页并了解有关如何使用它的更多信息。在命令行中键入 `man sed` 以获取有关不同命令行选项的完整文档,以及如何使用 `sed` 处理文本文件。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/8/automate-file-edits-sed-linux
|
||||
|
||||
作者:[Jim Hall][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[perfiffer](https://github.com/perfiffer)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/jim-hall
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/features_solutions_command_data.png
|
@ -0,0 +1,74 @@
|
||||
[#]: subject: "3 ways to take screenshots on Linux"
|
||||
[#]: via: "https://opensource.com/article/22/8/screenshots-linux"
|
||||
[#]: author: "Jim Hall https://opensource.com/users/jim-hall"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14943-1.html"
|
||||
|
||||
在 Linux 上截屏的 3 种方法
|
||||
======
|
||||
|
||||
> 使用我最喜欢的工具在 Linux 上截屏,可以节省时间。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/18/172307e5du1dxqd66d66cm.jpg)
|
||||
|
||||
在写开源软件时,我更喜欢展示一些截图来帮助演示我在说什么。古语有云,一图胜千言。如果你能展示一件事,那通常比试图用言语描述它要好。
|
||||
|
||||
有几种方法可以在 Linux 中截图。以下是我在 Linux 上用于捕获截图的三种方法:
|
||||
|
||||
### 1、GNOME
|
||||
|
||||
GNOME 有一个很棒的内置截图工具。只需按下键盘上的 `PrtScr` 键,GNOME 就会显示一个截图对话框:
|
||||
|
||||
![Image of GNOME screenshot tool][2]
|
||||
|
||||
默认操作是抓取区域的截图。这是一种在你制作截图时裁剪截图的非常有用的方法。只需将高亮显示框移动到你需要的位置,然后使用“抓取”角来更改大小。或选择其他图标之一以截取整个屏幕或系统上的单个窗口。点击“圆圈”图标进行截图,类似于手机上的“拍照”按钮。 GNOME 截图工具将截图保存在图片文件夹内的截图文件夹中。
|
||||
|
||||
### 2、GIMP
|
||||
|
||||
如果你需要更多截图选项,你可以使用流行的图像编辑器 GIMP 截图。要进行截图,请选择“<ruby>文件<rt>File</rt></ruby>”并选择“<ruby>创建<rt>Create</rt></ruby>”子菜单,然后选择“<ruby>截图<rt>Screenshot</rt></ruby>”。
|
||||
|
||||
![Image of the GIMP screenshot menu][3]
|
||||
|
||||
该对话框允许你截取单个窗口、整个屏幕或仅一个区域的屏幕截图。我喜欢这个工具可以让你设置一个延迟:选择窗口后多长时间,按下截图后多长时间。当我想截取菜单操作的截图时,我经常使用此功能,因此我有足够的时间去窗口打开菜单。
|
||||
|
||||
GIMP 将截图作为新图像打开,你可以对其进行编辑并保存到你喜欢的位置。
|
||||
|
||||
### 3、Firefox
|
||||
|
||||
如果你需要截取网站的截图,请尝试使用 Firefox 的内置截图程序。右键单击网页正文中的任意位置,然后从菜单中选择“<ruby>截图<rt>Take Screenshot</rt></ruby>”:
|
||||
|
||||
![Image of screenshot utility][4]
|
||||
|
||||
Firefox 切换到模态显示,并提示你单击或拖动页面以选择区域,或使用其中一个图标保存整个页面的副本,或仅在浏览器中可见的内容:
|
||||
|
||||
![Image of Firefox modal display][5]
|
||||
|
||||
当你在屏幕上移动鼠标时,你可能会注意到 Firefox 会高亮显示某些区域。这些是页面上的块元素,例如 `<div>` 或其他块元素。单击该元素以对其进行截图。 Firefox 将截图保存到你的下载文件夹,或你设置为“下载”位置的任何位置。
|
||||
|
||||
如果你尝试记录流程,那么截图可以为你节省大量时间。
|
||||
|
||||
尝试使用其中一种方法在 Linux 上截图。
|
||||
|
||||
(图片来源:Jim Hall,CC BY-SA 40)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/8/screenshots-linux
|
||||
|
||||
作者:[Jim Hall][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/jim-hall
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/browser_web_internet_website.png
|
||||
[2]: https://opensource.com/sites/default/files/2022-07/screenshot-gnome.png
|
||||
[3]: https://opensource.com/sites/default/files/2022-07/gimp-screenshot.png
|
||||
[4]: https://opensource.com/sites/default/files/2022-07/firefox-screenshot_cropped_0.png
|
||||
[5]: https://opensource.com/sites/default/files/2022-07/firefox-screenshot_1.png
|
@ -0,0 +1,161 @@
|
||||
[#]: subject: "Install Spotify on Manjaro and Other Arch Linux Based Distros"
|
||||
[#]: via: "https://itsfoss.com/install-spotify-arch/"
|
||||
[#]: author: "Anuj Sharma https://itsfoss.com/author/anuj/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14965-1.html"
|
||||
|
||||
在 Manjaro 和其他基于 Arch Linux 的发行版上安装 Spotify
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/25/133643nz8h58cl5ly8y6ly.jpg)
|
||||
|
||||
> Spotify 不需要介绍。它是最流行的音乐流媒体服务。
|
||||
|
||||
你可以 [在 Web 浏览器中播放 Spotify][1],但如果你经常使用它,使用桌面应用会是一个更好的选择。
|
||||
|
||||
为什么呢?因为你可以用媒体键控制播放,得到歌曲的通知,而且不需要担心不小心关闭浏览器标签或窗口。桌面客户端给人一种完整的体验。
|
||||
|
||||
Spotify 为 Ubuntu 和 Debian [提供了一个仓库][2]。但在 Arch Linux 上安装 Spotify 呢?
|
||||
|
||||
实际上,在 Arch Linux 上获得 Spotify 的桌面应用更加简单。只需使用这个命令:
|
||||
|
||||
```
|
||||
sudo pacman -Syu spotify-launcher
|
||||
```
|
||||
|
||||
这就是在基于 Arch 的 Linux 发行版上安装 Spotify 的众多方法之一,如 Manjaro、[Endeavour OS][3]、[Garuda Linux][4] 等。
|
||||
|
||||
在本教程中,我将讨论以下安装 Spotify 的方法:
|
||||
|
||||
* 使用 [pacman][5](你已经在上面看到了,但我们会更深入地挖掘)。
|
||||
* 使用 [Pamac][6](Manjaro的软件包管理器)进行安装
|
||||
* 使用 [Flatpak][7](通用打包格式)进行安装
|
||||
* 使用 Snap(Spotify 团队的官方包)。
|
||||
|
||||
### 方法 1:使用 pacman 安装 Spotify
|
||||
|
||||
Spotify 可在 Arch Linux 的社区仓库中 [找到][8]。它实际上是 Spotify 提供的 APT 仓库的 Rust 实现。
|
||||
|
||||
打开你的终端,按以下方式 [使用 pacman 命令][9]:
|
||||
|
||||
```
|
||||
sudo pacman -Syu spotify-launcher
|
||||
```
|
||||
|
||||
安装后,从应用菜单中启动它,并登录开始收听。
|
||||
|
||||
![Spotify on Arch Linux][10]
|
||||
|
||||
输入下面的命令,将其连同其依赖关系和配置文件一起删除。
|
||||
|
||||
```
|
||||
sudo pacman -Rns spotify-launcher
|
||||
```
|
||||
|
||||
### 方法 2:使用 Pamac 安装 Spotify
|
||||
|
||||
如果你使用 Manjaro 或者 [在你的系统中安装了 Pamac][11],你可以用它来图形化安装 Spotify。
|
||||
|
||||
从应用菜单中打开添加/删除软件。点击左上角的搜索图标,搜索 Spotify。然后,选择名为 `spotify-launcher` 的软件包,并点击应用进行安装,如下图所示。
|
||||
|
||||
![Using Pamac to install Spotify][12]
|
||||
|
||||
你也可以在安装后取消选择该软件包,并点击应用来删除它。
|
||||
|
||||
#### 使用 Pamac CLI
|
||||
|
||||
是的,Pamac 也有一个命令行界面,你可以通过以下方式使用它来获得 Spotify。
|
||||
|
||||
```
|
||||
pamac install spotify-launcher
|
||||
```
|
||||
|
||||
要删除,使用:
|
||||
|
||||
```
|
||||
pamac remove spotify-launcher
|
||||
```
|
||||
|
||||
### 方法 3:使用 Flatpak 安装 Spotify
|
||||
|
||||
许多用户喜欢使用 Flatpak 安装专有应用,因为它提供了沙盒。
|
||||
|
||||
在终端输入以下命令来更新你的系统并安装 Flatpak(如果你还没有)。
|
||||
|
||||
```
|
||||
sudo pacman -Syu flatpak
|
||||
```
|
||||
|
||||
然后,使用下面的命令启用 [Flathub 仓库][13]。
|
||||
|
||||
```
|
||||
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||
```
|
||||
|
||||
现在,通过输入下面的命令安装 Spotify。
|
||||
|
||||
```
|
||||
flatpak install spotify
|
||||
```
|
||||
|
||||
要删除 Spotify 的 Flatpak 包,你可以使用下面的命令。
|
||||
|
||||
```
|
||||
flatpak remove spotify
|
||||
```
|
||||
|
||||
### 方法 4:使用 Snap 安装 Spotify
|
||||
|
||||
我知道很多人对 Snap 打包格式的“封闭性”非常反感。然而,Spotify 官方提供了一个 Snap 包。你可以从 Spotify 的开发者那里得到它。
|
||||
|
||||
如果你的系统支持 Snap 包,请使用以下命令:
|
||||
|
||||
```
|
||||
sudo snap install spotify
|
||||
```
|
||||
|
||||
如果你以后想删除它,使用这个命令:
|
||||
|
||||
```
|
||||
sudo snap remove spotify
|
||||
```
|
||||
|
||||
### 总结
|
||||
|
||||
第一个方法中讨论的 Arch 包是由 [kpcyrd][14] 开发和维护的。你可以在 [这里][15] 查看源代码。
|
||||
|
||||
如果你喜欢 Arch Linux 并想支持它,请考虑向该项目捐款。所有的工作都是由社区成员完成的,他们是无偿的志愿者。
|
||||
|
||||
如果你在 Arch 上安装 Spotify 有任何问题,请告诉我。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/install-spotify-arch/
|
||||
|
||||
作者:[Anuj Sharma][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/author/anuj/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://open.spotify.com/
|
||||
[2]: https://www.spotify.com/us/download/linux/
|
||||
[3]: https://endeavouros.com/
|
||||
[4]: https://garudalinux.org/
|
||||
[5]: https://wiki.archlinux.org/title/Pacman
|
||||
[6]: https://wiki.manjaro.org/index.php/Pamac
|
||||
[7]: https://itsfoss.com/what-is-flatpak/
|
||||
[8]: https://archlinux.org/packages/community/x86_64/spotify-launcher/
|
||||
[9]: https://itsfoss.com/pacman-command/
|
||||
[10]: https://itsfoss.com/wp-content/uploads/2022/07/spotify-e1658764973807.png
|
||||
[11]: https://itsfoss.com/install-pamac-arch-linux/
|
||||
[12]: https://itsfoss.com/wp-content/uploads/2022/07/pamac-spotify-e1658764946532.png
|
||||
[13]: https://flathub.org
|
||||
[14]: https://github.com/kpcyrd
|
||||
[15]: https://github.com/kpcyrd/spotify-launcher
|
@ -3,34 +3,30 @@
|
||||
[#]: author: "Agil Antony https://opensource.com/users/agantony"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "Yufei-Yan"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14919-1.html"
|
||||
|
||||
删除 Git 上远程分支的本地引用
|
||||
删除 Git 远程分支的本地引用
|
||||
======
|
||||
|
||||
遵循几个简单的步骤来保持 Git 仓库的整洁
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/11/150612dv5diwgve5k2cobk.jpg)
|
||||
|
||||
![A diagram of a branching process][1]
|
||||
> 遵循几个简单的步骤来保持 Git 仓库的整洁
|
||||
|
||||
Image by: Opensource.com
|
||||
|
||||
图片来源:Opensource.com
|
||||
|
||||
在合并一个 GibLab 或 GitHub 的 pull request 后,通常需要从远程仓库中删掉这个主题分支来保持仓库的整洁。然而,这只会删掉远程仓库的主题分支。本地 Git 仓库也会从例行清理中收益。
|
||||
在合并一个 GibLab 的合并请求(MR)或 GitHub 的拉取请求(PR)后,你通常需要从远程仓库中删掉这个主题分支来保持仓库的整洁。然而,这只会删掉远程仓库的主题分支。本地 Git 仓库也会从例行清理中收益。
|
||||
|
||||
要同步本地仓库和远程仓库的信息,可以执行 `git prune` 命令来删除本地仓库中远程分支的本地引用。
|
||||
|
||||
按照以下三个简单的步骤:
|
||||
|
||||
### 1. 检出仓库中的核心分支(比如 main 或者 master)
|
||||
1、检出仓库中的核心分支(比如 `main` 或者 `master`):
|
||||
|
||||
```
|
||||
$ git checkout <central_branch_name>
|
||||
```
|
||||
|
||||
### 2. 列出所有远程和本地分支
|
||||
2、列出所有远程和本地分支:
|
||||
|
||||
```
|
||||
$ git branch -a
|
||||
@ -48,7 +44,7 @@ $ git branch -a
|
||||
|
||||
在这个例子中,`test-branch` 是从远程仓库中删除的主题分支的名字。
|
||||
|
||||
### 3. 删除远程分支的本地引用
|
||||
3、删除远程分支的本地引用:
|
||||
|
||||
首先,列出所有可以从本地仓库中删除的分支:
|
||||
|
||||
@ -82,9 +78,9 @@ URL: git@example.com:myorg/mydata-4.10.git
|
||||
|
||||
### 维护 Git 仓库
|
||||
|
||||
保持 Git 仓库的整洁,一开始似乎并不紧急,但是随着仓库规模的增长,删除不必要的数据就变得更为重要。不要因为需要从无用的数据中挣脱出来而降低你的节奏。
|
||||
保持 Git 仓库的整洁,一开始似乎并不紧急,但是随着仓库规模的增长,删除不必要的数据就变得更为重要。不要让从无用的数据筛选而拖慢你。
|
||||
|
||||
经常删除远程分支的本地引用,对于维护一个可用的 Git 仓库是一个非常好的习惯。
|
||||
经常删除远程分支的本地引用,是维护一个可用的 Git 仓库是一个好方法。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -92,8 +88,8 @@ via: https://opensource.com/article/22/8/delete-local-reference-remote-branch-gi
|
||||
|
||||
作者:[Agil Antony][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[https://github.com/Yufei-Yan](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
译者:[Yufei-Yan](https://github.com/Yufei-Yan)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,410 @@
|
||||
[#]: subject: "How to Upgrade to Linux Mint 21 [Step by Step Tutorial]"
|
||||
[#]: via: "https://itsfoss.com/upgrade-linux-mint-version/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "robsean"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14975-1.html"
|
||||
|
||||
图解如何升级到 Linux Mint 21
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/28/172913lzqsmfll8snzblbs.jpg)
|
||||
|
||||
> 这是一个周期性的更新指南,主要用于将现有的 Linux Mint 升级安装到一个新的可用版本。
|
||||
|
||||
在这篇文章中有三个部分,分别向你展示 Linux Mint 的不同的主要版本之间的升级步骤:
|
||||
|
||||
* 第 1 部分是关于从 Linux Mint 20.3 升级到 Linux Mint 21(GUI 升级工具)
|
||||
* 第 2 部分是关于从 Linux Mint 19.3 升级到 Linux Mint 20(基于命令行的升级程序)
|
||||
* 第 3 部分是关于从 Linux Mint 18.3 升级到 Linux Mint 19(假设一些人仍然在使用它)
|
||||
|
||||
你可以依据你的当前的 Linux Mint 版本和需要来执行适当的步骤。
|
||||
|
||||
这是一个周期性的更新指南,主要用于将现有的 Linux Mint 升级安装到一个新的可用版本。
|
||||
|
||||
这篇指南已经更新,追加从 Mint 20.3 升级到 Linux Mint 21 的步骤。Linux Mint 现在有一个 GUI 工具来升级到最新的版本。
|
||||
|
||||
### 在你升级到 Linux Mint 21 之前需要知道的事情
|
||||
|
||||
在你继续升级到 Linux Mint 21 之前,你应该考虑下面的事情:
|
||||
|
||||
* 你真的需要升级吗?Linux Mint 20.x 还有好几年的支持期限。
|
||||
* 你将需要高速互联网连接来下载大约 14 GB 的升级数据。
|
||||
* 它可能将花费几个小时的时间来完成升级过程,当然这主要取决于你的互联网速度。你必须有耐心。
|
||||
* 制作一个 Linux Mint 21 的 <ruby>实况 USB<rt>Live USB</rt></ruby> 并在一次<ruby>实况会话<rt>Live session</rt></ruby> 中尝试它是否与你的硬件系统兼容会是一个好主意。较新的内核可能与较旧的硬件系统有兼容性问题,因此在真正升级或安装之前来对其进行测试可能会为你省去很多麻烦。
|
||||
* 全新的安装总是比主要版本升级的更好,但是从零开始安装 Linux Mint 21 可能意味着丢失你的现有的数据。你必须在外部的外部磁盘上进行备份。
|
||||
* 尽管大部分的升级是安全的,但是它也不会是 100% 的成功。你必须要有系统快照和真正的备份。
|
||||
* 你只能从 Linux Mint 20.3 的 Cinnamon 、Xfce 和 MATE 版本升级到 Linux Mint 21 。首先 [检查你的 Linux Mint 版本][1] 。如果你正在使用 Linux Mint 20.2 或 20.1 ,你需要先使用更新管理器来升级到 20.3 。如果你正在使用 Linux Mint 19 ,我建议你选择进行一次的全新安装,而不是选择进行数次的升级 Mint 版本。
|
||||
|
||||
在你知道你将要做什么后,让我们看看如何升级到 Linux Mint 21 。
|
||||
|
||||
### 从 Linux Mint 20.3 升级到 Linux Mint 21
|
||||
|
||||
检查你的 Linux Mint 版本,并确保你正在使用 Mint 20.3 。你不能从 Linux Mint 20.1 或 20.2 升级到 Linux Mint 21 。
|
||||
|
||||
#### 步骤 1: 通过安装任意可用的更新来更新你的系统
|
||||
|
||||
使用 <ruby>菜单<rt>Menu</rt></ruby> -> <ruby>系统管理<rt>Administration</rt></ruby> -> <ruby>更新管理器<rt>Update Manager</rt></ruby> 来启动更新管理器。查看是否有一些可用的软件包更新。如果有可用的更新,先安装所有的软件包更新。
|
||||
|
||||
![Check for Pending Software Updates][2]
|
||||
|
||||
针对这一步骤,你也可用在终端中使用这一个命令:
|
||||
|
||||
```
|
||||
sudo apt update && sudo apt upgrade -y
|
||||
```
|
||||
|
||||
#### 步骤 2: 在外部的磁盘上备份你的文件 [可选,但是建议]
|
||||
|
||||
Timeshift 是一个创建系统快照的好工具,但它却不是一个针对文档、图片和其它那些非系统的、个人文件的理想工具。我建议你在一块外部磁盘上进行备份。它只是为了数据安全。
|
||||
|
||||
当我说在一块外部磁盘上进行一次备份时,我的意思是将你的图片、文档、下载和视频目录简单地复制和粘贴到一块外部的 USB 磁盘上。
|
||||
|
||||
如果你没有那样大的磁盘,至少复制那些你不可丢失的最重要的文件。
|
||||
|
||||
#### 步骤 3: 安装升级工具
|
||||
|
||||
现在,你的系统已经更新,你已经准备好升级到 Linux Mint 21 。Linux Mint 开发组提供一个名称为 [mintupgrade][3] 的 GUI 工具,用于从 Linux Mint 20.3 升级到 Linux Mint 21 。
|
||||
|
||||
你可用使用下面的命令来安装这个工具:
|
||||
|
||||
```
|
||||
sudo apt install mintupgrade
|
||||
```
|
||||
|
||||
#### 步骤 4: 从终端中运行这个 GUI 工具
|
||||
|
||||
你不能在应用程序菜单列表中找到这个新的 GUI 工具。为启动它,你需要在终端中输入下面的命令:
|
||||
|
||||
```
|
||||
sudo mintupgrade
|
||||
```
|
||||
|
||||
这个简单且全面工具将带领你完成升级过程。
|
||||
|
||||
![Mint Upgrade Tool Home Page][4]
|
||||
|
||||
在一些初始化的测试后,它将提示进行一次 Timeshift 备份。如果你已经创建了一次备份,你已经准备好下一步了。
|
||||
|
||||
![Upgrade Tool Prompting No Timeshift Snapshots][5]
|
||||
|
||||
否则,你需要在这里 [创建一个备份][6] ,因为这是强制继续的。
|
||||
|
||||
![Taking Snapshot With Timeshift][7]
|
||||
|
||||
一些 PPA 可能已经适用于 Ubuntu 22.04 ,因此也适用于 Mint 21 。但是,如果 PPA 或存储库不适用于新的版本,它可能会因为依赖关系的打断而影响升级过程。在升级工具中也会同样的提示你。
|
||||
|
||||
![Kazam PPA Does Not Support Jammy][8]
|
||||
|
||||
在这里,我将通过 Kazam 其 PPA 来使用其 [最新版本][9] 。其 PPA 仅被支持到 Impish ,因为 Linux Mint 21 是基于 Jammy 的,所以它会显示错误。
|
||||
|
||||
你可以在升级工具中通过软件源来指定禁用 PPA 的选项。
|
||||
|
||||
![Disable Unsupported PPAs in Software Sources][10]
|
||||
|
||||
在禁用该 PPA 后,该软件包会变成 “<ruby>陌生的<rt>foreign</rt></ruby>”,因为来自存储库中可用版本会与来自 Mnit 存储库中可用版本不匹配。因此,你需要将软件包降级到存储库中一个可用的版本。
|
||||
|
||||
![Downgrade Package to Avoid Conflicts][11]
|
||||
|
||||
升级工具现在列出需要执行更改。
|
||||
|
||||
![List Changes That Need to be Done][12]
|
||||
|
||||
在接受后,该工具将开始下载软件包。
|
||||
|
||||
![Phase 2 – Simulation and Package Download][13]
|
||||
|
||||
![Package Downloading][14]
|
||||
|
||||
![Upgrading Phase][15]
|
||||
|
||||
它将列出孤立的软件包,这可以被移除。你可以通过按下 <ruby>修复<rt>Fix</rt></ruby> 按钮来移除整个建议的软件包,也可以保留某些软件包。
|
||||
|
||||
#### 保留某些孤立的软件包
|
||||
|
||||
为保留来自孤立的软件包列表中软件包,你需要从左上角的汉堡菜单转到 <ruby>首选项<rt>Preferences</rt></ruby>。
|
||||
|
||||
![Selecting Orphan Packages You Want to Keep with Preferences][16]
|
||||
|
||||
在首选项对话框中,你需要转到 “<ruby>孤立的软件包<rt>Orphan Packages</rt></ruby>” 并使用 “+” 符号来通过名称添加软件包。
|
||||
|
||||
![Specify Name of the Package to Keep][17]
|
||||
|
||||
在完成后,它将继续升级,在一段时间后,将会向你提示一条成功更新的通知。
|
||||
|
||||
![Upgrade Successful][18]
|
||||
|
||||
此时,你需要重新启动你的系统。在重新启动后,你将进入到新的 Linux Mint 21 。
|
||||
|
||||
![Neofetch Output Linux Mint 21][19]
|
||||
|
||||
### 如何升级到 Linux Mint 20
|
||||
|
||||
在你继续升级到 Linux Mint 20 之前,你应该考虑下面的事情:
|
||||
|
||||
* 你真的需要升级吗?Linux Mint 19.x 将会支持到 2023 年。
|
||||
* 如果你 [有一款 32 位系统][20],你不能安装或升级到 Mint 20 。
|
||||
* 你将需要高速互联网连接来下载大约 1.4 GB 的升级。
|
||||
* 它可能将花费几个小时的时间来完成升级过程,当然这主要取决于你的互联网速度。你必须有耐心。
|
||||
* 制作一个 Linux Mint 20 的 <ruby>实况 USB<rt>Live USB</rt></ruby> 并在一次实况会话中查看它是否与你的硬件系统兼容会是一个好主意。较新的内核可能与较旧的硬件系统有兼容性问题,因此在真正升级或安装之前来对其进行测试可能会为你省去很多麻烦。
|
||||
* 全新的安装总是比主要版本升级的更好,但是从零开始 [安装 Linux Mint][21] 20 可能意味着丢失你的现有的数据。你必须在外部的外部磁盘上进行备份。
|
||||
* 尽管大部分的升级是安全的,但是它也不会是 100% 的成功。你必须要有系统快照和真正的备份。
|
||||
* 你只能从 Linux Mint 19.3 的 Cinnamon 、Xfce 和 MATE 版本升级到 Linux Mint 20 。首先 [检查你的 Linux Mint 版本][22] 。如果你正在使用 Linux Mint 19.2 或 19.1 ,你需要先使用更新管理器来升级到 19.3 。如果你正在使用 Linux Mint 18 ,我建议你选择进行一次的全新安装,而不是选择进行数次的升级 Mint 版本。
|
||||
* 升级过程是通过命令行实用程序来完成的。如果你不喜欢使用终端和命令,不要升级,并进行一次全新的安装。
|
||||
|
||||
在你知道你将要做什么后,让我们看看如何升级到 Linux Mint 20 。
|
||||
|
||||
#### 步骤 1: 确保你有一款 64 位系统
|
||||
|
||||
Linux Mint 20 是一款仅提供 64 位的操作系统。如果你安装了一款 32 位的 Linux Mint 19 ,你不能升级到 Linux Mint 20 。
|
||||
|
||||
在一个终端中,使用下面的命令来查看你是否正在使用 64 位操作系统。
|
||||
|
||||
```
|
||||
dpkg --print-architecture
|
||||
```
|
||||
|
||||
![Mint 20 Upgrade Check Architecture][25]
|
||||
|
||||
#### 步骤 2: 通过安装一些可用的更新来更新你的系统
|
||||
|
||||
使用 <ruby>菜单<rt>Menu</rt></ruby> -> <ruby>系统管理<rt>Administration</rt></ruby> -> <ruby>更新管理器<rt>Update Manager</rt></ruby> 来启动更新管理器。查看是否有一些可用的软件包更新。如果有可用的更新,先安装所有的软件包更新。
|
||||
|
||||
![Check for pending software updates][26]
|
||||
|
||||
针对这一步骤,你也可用在终端中使用这一个命令:
|
||||
|
||||
```
|
||||
sudo apt update && sudo apt upgrade -y
|
||||
```
|
||||
|
||||
#### 步骤 3: 使用 Timeshift 创建一个系统快照 [可选,但是建议]
|
||||
|
||||
如果你遇到升级过程中断或你遇到其它的一些重大问题,[使用 Timeshift 创建一个系统快照][27] 将会解救你于水火之中。**你甚至可以使用这种方法恢复到 Mint 19.3 。**
|
||||
|
||||
假设你因为意外断电导致升级失败,或因为其它一些原因,你最终得到一个残缺的不稳定的 Linux Mint 19 。你可以插入一个 Linux Mint 实况 USB ,并从该实况环境中运行 Timeshift 。它将会自动地定位你的备份位置,并将允许你恢复你残缺的 Mint 19 系统。
|
||||
|
||||
这也意味着你应该随时携带一个 Linux Mint 19 实况 USB ,以防在极少数升级失败的情况下,你不能用一台工作的计算机创建 Linux Mint 实况 USB 。
|
||||
|
||||
![Create a system snapshot in Linux Mint][28]
|
||||
|
||||
#### 步骤 4: 在一块外部的磁盘上备份你的文件 [可选,但是建议]
|
||||
|
||||
Timeshift 是一个创建系统快照的好工具,但它却不是一个针对文档、图片和其它那些非系统、个人文件的理想工具。我建议你在一块外部磁盘上进行备份。它只是为了数据安全。
|
||||
|
||||
当我说在一块外部磁盘上进行一次备份时,我的意思是将你的图片、文档、下载和视频目录简单地复制和粘贴到一块外部的 USB 磁盘上。
|
||||
|
||||
如果你没有那样大的磁盘,至少复制那些你不可丢失的最重要的文件。
|
||||
|
||||
#### 步骤 5: 禁用 PPA 和第三方存储库 [可选,但是建议]
|
||||
|
||||
不出意外的话,你可能已经使用一些 [PPA][29] 或其它的存储库来安装了一下应用程序。
|
||||
|
||||
一些 PPA 可能已经适用于 Ubuntu 20.04 ,因此也适用于 Mint 20 。但是,如果 PPA 或存储库不适用于新的版本,它可能会因为依赖关系的打断而影响升级过程。
|
||||
|
||||
对此,建议你禁用 PPA 和第三方存储库。你也可以删除通过这样的外部源安装的应用程序,如果你这样做的话,不会导致配置数据的丢失。
|
||||
|
||||
在 <ruby>软件源<rt>Software Sources</rt></ruby> 工具中,禁用附加的存储库、禁用 PPA 。
|
||||
|
||||
![Disable Ppa Mint Upgrade][30]
|
||||
|
||||
你也可以在维护标签页中 **降级** ,**移除可用的外部的软件包** 。
|
||||
|
||||
例如,我使用一个 PPA 来安装 Shutter 。我在禁用它的 PPA 后,现在该软件包会变成 “<ruby>陌生的<rt>foreign</rt></ruby>”,因为来自存储库中可用版本会与来自 Mnit 存储库中可用版本不匹配。
|
||||
|
||||
![Foreign Package Linux Mint][31]
|
||||
|
||||
#### 步骤 6: 安装升级工具
|
||||
|
||||
现在,你的系统已经更新,你已经准备好升级到 Linux Mint 20 。Linux Mint 开发团队提供一个名称为 [mintupgrade][32] 的命令行工具,其唯一的目的是将 Linux Mint 19.3 升级到 Linux Mint 20 。
|
||||
|
||||
你可用使用下面的命令来安装这个工具:
|
||||
|
||||
```
|
||||
sudo apt install mintupgrade
|
||||
```
|
||||
|
||||
#### 步骤 7: 运行一次升级设备健康检查
|
||||
|
||||
`mintupgrade` 工具将会让你通过模拟升级的初始化部分来运行一次设备健康检查。
|
||||
|
||||
你可以运行这次检查来查看对你的系统做出何种更改,哪些软件包将会升级。它也将会显示不能升级和必须移除的软件包。
|
||||
|
||||
```
|
||||
mintupgrade check
|
||||
```
|
||||
|
||||
在这里,它不会在你的系统上做出任何真正的更改(即使感觉上它正在进行做一些更改)。
|
||||
|
||||
这一步骤是非常重要的,有助于准确评估出你的系统是否可以升级到 Mint 20 。
|
||||
|
||||
![Mint Upgrade Check][33]
|
||||
|
||||
如果这一步骤中途失败,输入 `mintupgrade restore-sources` 来返回到你原始的 APT 配置。
|
||||
|
||||
#### 步骤 8: 下载软件包升级
|
||||
|
||||
在你对 `mintupgrade`` 的检查输出感到满意后,你可以下载 Mint 20 升级软件包。
|
||||
|
||||
取决于你的互联网连接速度,它可能会在下载这些升级方面消耗一些时间。确保你的硬件系统接通到强电电源。
|
||||
|
||||
在软件包的下载期间,你可以继续使用你的系统进行常规工作。
|
||||
|
||||
```
|
||||
mintupgrade download
|
||||
```
|
||||
|
||||
![Mint 20 Upgrade Download][34]
|
||||
|
||||
注意,这行命令将把你的操作系统指向 Linux Mint 20 存储库。在使用这行命令后,如果你想降级到 Linux Mint 19.3 ,你仍然可以使用命令 `mintupgrade restore-sources` 来做到。
|
||||
|
||||
#### 步骤 9: 安装升级 [不可回退]
|
||||
|
||||
现在,万事俱备,你可以使用这行命令来升级到 Linux Mint 20 :
|
||||
|
||||
```
|
||||
mintupgrade upgrade
|
||||
```
|
||||
|
||||
给它一些时间来安装新的软件包和升级你的 Mint 到相对较新的版本。在升级过程完成后,它将要求你重新启动。
|
||||
|
||||
![Linux Mint 20 Upgrade Finish][35]
|
||||
|
||||
#### 享受 Linux Mint 20
|
||||
|
||||
在你重新启动你的系统后,你将看到 Mint 20 欢迎屏幕。享受新的版本。
|
||||
|
||||
![Welcome To Linux Mint 20][36]
|
||||
|
||||
### 从 Mint 18 升级到 Mint 19
|
||||
|
||||
从 Linux Mint 18.3 升级到 Linux Mint 19 的步骤与你在升级到 Linux Mint 20 中所看到的步骤非常类似。唯一的变化是检查显示管理器。
|
||||
|
||||
我将在这里快速地提及这些步骤。如果你想要更多的信息,你可以参考 Mint 20 升级过程。
|
||||
|
||||
**步骤 1:** 使用 Timeshift 创建一个系统快照 [可选,但是建议]
|
||||
|
||||
**步骤 2:** 在一块外部的磁盘上备份你的文件 [可选,但是建议]
|
||||
|
||||
**步骤 3:** 确保你正在使用 LightDM
|
||||
|
||||
对于 Mint 19 ,你必须使用 [LightDM 显示管理器][37] 。为检查你正在使用哪种显示管理器,输入命令:
|
||||
|
||||
```
|
||||
cat /etc/X11/default-display-manager
|
||||
```
|
||||
|
||||
如果结果是 `/usr/sbin/lightdm`,那么你就有 LightDM ,你就可以继续前进了。
|
||||
|
||||
![LightDM Display Manager in Linux Mint][38]
|
||||
|
||||
在另一个方面,如果结果是 `/usr/sbin/mdm`,你需要安装 LightDM ,[切换到 LightDM][39] 并移除 MDM 。使用这行命令来安装 LightDM :
|
||||
|
||||
```
|
||||
apt install lightdm lightdm-settings slick-greeter
|
||||
```
|
||||
|
||||
在安装期间,它将要求你选择显示管理器。你需要选择 LightDM 。
|
||||
|
||||
在你设置 LightDM 作为你的显示管理器后,使用下面这些命令来移除 MDM 并重新启动:
|
||||
|
||||
```
|
||||
apt remove --purge mdm mint-mdm-themes*
|
||||
sudo dpkg-reconfigure lightdm
|
||||
sudo reboot
|
||||
```
|
||||
|
||||
**步骤 4: 通过安装一些可用的更新来更新你的系统**
|
||||
|
||||
```
|
||||
sudo apt update && sudo apt upgrade -y
|
||||
```
|
||||
|
||||
**步骤 5: 安装升级工具**
|
||||
|
||||
```
|
||||
sudo apt install mintupgrade
|
||||
```
|
||||
|
||||
**步骤 6: 检查升级**
|
||||
|
||||
```
|
||||
mintupgrade check
|
||||
```
|
||||
|
||||
**步骤 7: 下载软件包升级**
|
||||
|
||||
```
|
||||
mintupgrade download
|
||||
```
|
||||
|
||||
**步骤 8: 应用升级**
|
||||
|
||||
```
|
||||
mintupgrade upgrade
|
||||
```
|
||||
|
||||
享受 Linux Mint 19 。
|
||||
|
||||
### 你升级到 Linux Mint 21 了吗?
|
||||
|
||||
升级到 Linux Mint 20 可能不会是一种友好的体验,但是,使用新的专用 GUI 升级工具来升级到 Mint 21 变得简单多了。
|
||||
|
||||
我希望你发现这篇教程有帮助。你是选择升级到 Linux Mint 21 ?还是现在一次全新的安装?
|
||||
|
||||
如果你遇到一些重要问题,或者你有一些关于升级过程的问题,请在评论区随时询问。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/upgrade-linux-mint-version/
|
||||
|
||||
作者:[Abhishek Prakash][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://itsfoss.com/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://itsfoss.com/check-linux-mint-version/
|
||||
[2]: https://itsfoss.com/wp-content/uploads/2022/08/check-for-pending-software-updates.png
|
||||
[3]: https://github.com/linuxmint/mintupgrade/blob/master/usr/bin/mintupgrade
|
||||
[4]: https://itsfoss.com/wp-content/uploads/2022/08/mint-upgrade-tool-home-page.png
|
||||
[5]: https://itsfoss.com/wp-content/uploads/2022/08/upgrade-tool-prompting-no-timeshift-snapshots.png
|
||||
[6]: https://itsfoss.com/backup-restore-linux-timeshift/
|
||||
[7]: https://itsfoss.com/wp-content/uploads/2022/08/taking-snapshot-with-timeshift.png
|
||||
[8]: https://itsfoss.com/wp-content/uploads/2022/08/kazam-ppa-does-not-support-jammy.png
|
||||
[9]: https://itsfoss.com/kazam-screen-recorder/
|
||||
[10]: https://itsfoss.com/wp-content/uploads/2022/08/disable-unsupported-ppas-in-software-sources.png
|
||||
[11]: https://itsfoss.com/wp-content/uploads/2022/08/downgrade-package-to-avoid-conflicts.png
|
||||
[12]: https://itsfoss.com/wp-content/uploads/2022/08/list-changes-that-need-to-be-done.png
|
||||
[13]: https://itsfoss.com/wp-content/uploads/2022/08/phase-2-simulation-and-package-download-.png
|
||||
[14]: https://itsfoss.com/wp-content/uploads/2022/08/package-downloading.png
|
||||
[15]: https://itsfoss.com/wp-content/uploads/2022/08/upgrading-phase.png
|
||||
[16]: https://itsfoss.com/wp-content/uploads/2022/08/selecting-orphan-packages-you-want-to-keep-with-preferences.png
|
||||
[17]: https://itsfoss.com/wp-content/uploads/2022/08/specify-name-of-the-package-to-keep.png
|
||||
[18]: https://itsfoss.com/wp-content/uploads/2022/08/upgrade-successful-800x494.png
|
||||
[19]: https://itsfoss.com/wp-content/uploads/2022/08/neofetch-output-linux-mint-21.png
|
||||
[20]: https://itsfoss.com/32-bit-64-bit-ubuntu/
|
||||
[21]: https://itsfoss.com/guide-install-linux-mint-16-dual-boot-windows/
|
||||
[22]: https://itsfoss.com/check-linux-mint-version/
|
||||
[23]: https://youtu.be/LYnXEaiAjsk
|
||||
[24]: https://www.youtube.com/c/itsfoss?sub_confirmation=1
|
||||
[25]: https://itsfoss.com/wp-content/uploads/2020/07/mint-20-upgrade-check-architecture.jpg
|
||||
[26]: https://itsfoss.com/wp-content/uploads/2020/07/update-manager-linux-mint.jpg
|
||||
[27]: https://itsfoss.com/backup-restore-linux-timeshift/
|
||||
[28]: https://itsfoss.com/wp-content/uploads/2018/07/snapshot-linux-mint-timeshift.jpeg
|
||||
[29]: https://itsfoss.com/ppa-guide/
|
||||
[30]: https://itsfoss.com/wp-content/uploads/2020/07/disable-ppa-mint-upgrade.jpg
|
||||
[31]: https://itsfoss.com/wp-content/uploads/2020/07/foreign-package-linux-mint.jpg
|
||||
[32]: https://github.com/linuxmint/mintupgrade/blob/master/usr/bin/mintupgrade
|
||||
[33]: https://itsfoss.com/wp-content/uploads/2020/07/mint-upgrade-check.jpg
|
||||
[34]: https://itsfoss.com/wp-content/uploads/2020/07/mint-upgrade-download.jpg
|
||||
[35]: https://itsfoss.com/wp-content/uploads/2020/07/linux-mint-20-upgrade-finish.jpg
|
||||
[36]: https://itsfoss.com/wp-content/uploads/2020/07/welcome-to-linux-mint-20.jpg
|
||||
[37]: https://wiki.archlinux.org/index.php/LightDM
|
||||
[38]: https://itsfoss.com/wp-content/uploads/2018/07/lightdm-linux-mint.jpeg
|
||||
[39]: https://itsfoss.com/switch-gdm-and-lightdm-in-ubuntu-14-04/
|
@ -0,0 +1,157 @@
|
||||
[#]: subject: "List Files and Directories in Style Using lsd and exa"
|
||||
[#]: via: "https://www.debugpoint.com/list-files-directories-style/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14923-1.html"
|
||||
|
||||
重新想象和设计你的文件和目录列表
|
||||
======
|
||||
|
||||
> 使用两个 ls 程序: lsd 和 exa 来重新想象和设计你的文件和目录列表。
|
||||
|
||||
![][0]
|
||||
|
||||
Linux 中的 `ls` 命令是最常用的命令。此命令列出终端中的文件和目录。因此,如你所见,它非常流行,也许每个人都在使用。
|
||||
|
||||
但该命令输出的信息量很大,有时用彩色的方式查看它们会更方便。
|
||||
|
||||
例如,如果你以最基本的方式运行 `ls` 命令,它应该看起来有点像这样:
|
||||
|
||||
![The default list files and directories view via ls command][1]
|
||||
|
||||
这似乎有点乏味,不是吗?如果你可以对其进行一些样式设置,以便在看起来不错的同时变得更具可读性如何?
|
||||
|
||||
### 以样式列出文件和目录
|
||||
|
||||
#### lsd
|
||||
|
||||
我想向你展示的第一个应用叫做 `lsd`,也就是 “LSDeluxe” 的缩写。它是对 GNU `ls` 命令的重写,具有列标题、各种项目的颜色、字体和图标支持等附加功能。
|
||||
|
||||
这是安装后的样子:
|
||||
|
||||
```
|
||||
lsd -l --header
|
||||
```
|
||||
|
||||
![lsd command showing list of files][2]
|
||||
|
||||
正如你所看到的,它看起来非常漂亮,用不同的颜色代码表示权限、文件类型和文件夹,甚至在文件名旁边添加图标。
|
||||
|
||||
该应用充满了诸如树视图(见下文)之类的功能,它甚至可以在单个命令中为你提供文件夹内的文件列表:
|
||||
|
||||
```
|
||||
lsd -l --header --tree
|
||||
```
|
||||
|
||||
![lsd command showing a tree view][3]
|
||||
|
||||
你可以在其 [官方 GitHub 页面][4] 上了解有关其功能的更多信息。
|
||||
|
||||
我相信你很兴奋。让我们看看如何安装它。
|
||||
|
||||
你可以从 [此处下载][11] 用于 Ubuntu 和相关发行版的 deb 文件。之后,只需运行 `dpkg` 即可安装:
|
||||
|
||||
```
|
||||
sudo dpkg -i lsd_vvvv_amd64.deb
|
||||
```
|
||||
|
||||
对于 Fedora Linux,使用以下命令:
|
||||
|
||||
```
|
||||
sudo dnf install lsd
|
||||
```
|
||||
|
||||
Arch Linux 用户可以使用以下命令获取它:
|
||||
|
||||
```
|
||||
pacman -S lsd
|
||||
```
|
||||
|
||||
该应用也可用于其他发行版、macOS、BSD 和 Windows。对于这些说明,你可以 [在此处找到它们][5]。
|
||||
|
||||
为了获得更好的体验,请将其与 [带有 Oh My Zsh 的 Zsh shell][6] 一起使用。
|
||||
|
||||
#### exa
|
||||
|
||||
下一个程序是 `exa`,类似于 `lsd` 但具有更多功能。`exa` 命令可以为你的 `ls` 输出着色,检测 Unix 系统中的各种文件类型、标题、树视图等更多功能。
|
||||
|
||||
`exa` 是一个单一的二进制文件,占用的资源很小。以下是一些示例命令:
|
||||
|
||||
```
|
||||
exa -al
|
||||
```
|
||||
|
||||
```
|
||||
exa -abghHliS
|
||||
```
|
||||
|
||||
```
|
||||
exa -abghHliS --long --tree
|
||||
```
|
||||
|
||||
![Various exa commands][7]
|
||||
|
||||
你可以在 [GitHub][8] 上了解有关 `exa` 参数和选项的更多信息。
|
||||
|
||||
`exa` 的安装很简单,只需要一个命令。对于 Ubuntu 和相关发行版,你可以使用以下命令安装它:
|
||||
|
||||
```
|
||||
sudo apt install exa
|
||||
```
|
||||
|
||||
对于 Fedora 和 Arch Linux,分别使用以下命令:
|
||||
|
||||
```
|
||||
sudo dnf install exa
|
||||
```
|
||||
|
||||
```
|
||||
pacman -S exa
|
||||
```
|
||||
|
||||
同样,所有其他操作系统的安装说明都可以 [在此处找到][9]。
|
||||
|
||||
### 从终端复制为 HTML
|
||||
|
||||
一个有趣的技巧是,以上所有彩色列表都可以通过默认的 Ubuntu 终端复制为 HTML。你可以将它用于你的网页或文档。
|
||||
|
||||
例如,我将上面的示例复制到 LibreOffice Writer 文档中。
|
||||
|
||||
这是最好的功能之一,尽管它取决于终端程序而不是上面的程序。
|
||||
|
||||
![Exporting the command output as HTML][10]
|
||||
|
||||
### 总结
|
||||
|
||||
我解释了两个程序的内部工作 – `lsd` 和 `exa` 以样式列出文件和目录。我希望你能将它们用于不同的需求。
|
||||
|
||||
如果你喜欢它们,或者如果你知道任何此类程序,请在评论栏中告诉我。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/list-files-directories-style/
|
||||
|
||||
作者:[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
|
||||
[0]: https://www.debugpoint.com/wp-content/uploads/2022/08/cool-ls.jpg
|
||||
[1]: https://www.debugpoint.com/wp-content/uploads/2022/08/The-default-list-files-and-directories-view-via-ls-command.jpg
|
||||
[2]: https://www.debugpoint.com/wp-content/uploads/2022/08/lsd-command-showing-list-of-files-2.jpg
|
||||
[3]: https://www.debugpoint.com/wp-content/uploads/2022/08/lsd-command-showing-a-tree-view.jpg
|
||||
[4]: https://github.com/Peltoche/lsd
|
||||
[5]: https://github.com/Peltoche/lsd#installation
|
||||
[6]: https://www.debugpoint.com/install-use-zsh/
|
||||
[7]: https://www.debugpoint.com/wp-content/uploads/2022/08/Various-exa-commands.jpg
|
||||
[8]: https://github.com/ogham/exa#command-line-options
|
||||
[9]: https://github.com/ogham/exa#installation
|
||||
[10]: https://www.debugpoint.com/wp-content/uploads/2022/08/Exporting-the-command-output-as-HTML.jpg
|
||||
[11]: https://github.com/Peltoche/lsd/releases
|
@ -0,0 +1,73 @@
|
||||
[#]: subject: "Fix file permission errors on Linux"
|
||||
[#]: via: "https://opensource.com/article/22/8/fix-file-permission-errors-linux"
|
||||
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14929-1.html"
|
||||
|
||||
修复 Linux 上的文件权限错误
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/14/170711zy6zskat0kj21y2h.jpg)
|
||||
|
||||
> 不要让文件权限拖你后腿。以下是在 Linux 和 macOS 上管理它们的方法。
|
||||
|
||||
如果你通过网络或“跑腿网络”(将文件保存到硬盘,以将其复制到一台计算机)在两个用户之间共享文件,那么在尝试读取或写入文件时可能会遇到权限错误。即使你了解它的概念,你也可能不知道该如何诊断或解决问题。我曾经将数据迁移作为一项服务执行,因此我遇到了相当多的权限错误和所有权冲突。这是我快速修复它们的方法。
|
||||
|
||||
### 1、确定正确的用户
|
||||
|
||||
在修复权限错误之前,你必须确定需要权限的人是谁。你可能认为你已经知道这一点,但你可能没有意识到*用户名*并不是用户身份的最确定属性。你的计算机不会将你视为一个人,而是将你视为一个数字。要了解你的号码,请查看你的用户 ID:
|
||||
|
||||
```
|
||||
$ id --user
|
||||
1005
|
||||
```
|
||||
|
||||
### 2、获取当前所有者
|
||||
|
||||
接下来,确定你无法与之交互的文件的所有者。由于发生了文件权限问题,你可能需要使用 `sudo` 命令查看有关文件的信息:
|
||||
|
||||
```
|
||||
$ sudo ls --numeric-uid-gid
|
||||
-rw------- 1 1000 100 23041 Aug 2 05:26 bar
|
||||
-rw------- 1 1000 100 54281 Aug 2 04:58 baz
|
||||
-rw------- 1 1000 100 822 Aug 2 08:19 foo
|
||||
```
|
||||
|
||||
在此示例中,拥有文件的用户被标识为用户 ID 1000,这就是用户 ID 1005 无法与它们交互的原因。更糟糕的是,这些文件标记为仅由拥有它们的用户可读和可写,因此即使是同一组的成员也不能与这些文件进行交互。
|
||||
|
||||
### 3、更改权限以匹配
|
||||
|
||||
你知道需要权限的用户,因此你可以更改当前所有者以匹配你当前的用户:
|
||||
|
||||
```
|
||||
$ sudo chown 1005 foo
|
||||
```
|
||||
|
||||
你还可以通过更改文件模式授予你的组成员以及系统上可能的其他用户对文件的访问权限。例如,在向组和任何其他用户授予读取权限(4)的同时保持读取和写入权限(7):
|
||||
|
||||
```
|
||||
$ sudo chmod 744 foo
|
||||
```
|
||||
|
||||
### 了解更多
|
||||
|
||||
当你对文件权限不熟悉时,它们似乎很棘手。有关文件所有权如何工作的更多信息,请阅读 [chown 简介][2]。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/8/fix-file-permission-errors-linux
|
||||
|
||||
作者:[Seth Kenlon][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/seth
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/button_push_open_keyboard_file_organize.png
|
||||
[2]: https://opensource.com/article/19/8/linux-chown-command
|
@ -0,0 +1,141 @@
|
||||
[#]: subject: "Sunamu: Display Lyrics for Currently Playing Music on the Desktop in Linux"
|
||||
[#]: via: "https://itsfoss.com/sunamu-music-widget/"
|
||||
[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14939-1.html"
|
||||
|
||||
Sunamu:在 Linux 桌面上显示当前播放音乐的歌词
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/17/153701c3blbrgglfx7cfbr.jpg)
|
||||
|
||||
作为一个吸睛的**音乐小部件**(或控制器) —— 这是 Sunamu 唯一专注的事情,它工作得很好。
|
||||
|
||||
Sunamu 是一个有趣的工具。它不是音乐播放器,但可让你显示正在播放的音乐并对其进行控制。
|
||||
|
||||
我不喜欢在我的主要工作区使用浮动小部件,但 Sunamu 简约而优雅的方法改变了我的想法!
|
||||
|
||||
因此,我将向你介绍它的功能、安装、配置调整以及我的使用经验。
|
||||
|
||||
### Sunamu:开源音乐控制器
|
||||
|
||||
![playing music with sunamu][1]
|
||||
|
||||
正如你在上面的截图中所注意到的,它看起来是一种显示正在播放的音乐的非常好的方式,带有歌词,同时具有基本的控件。
|
||||
|
||||
你可以播放/暂停、转到下一首/上一首曲目、随机播放和启用循环。
|
||||
|
||||
Sunamu 支持多种音频平台,包括 Spotify。它还可以检测本地收藏中的音乐,支持一些可用于 Linux 的 [最佳音乐播放器][2]。
|
||||
|
||||
此外,它还支持 Windows。因此,如果你通过 Windows 上的 Edge 浏览器流式传输某些内容,它应该可以正常工作。
|
||||
|
||||
你可以查看其 GitHub 页面上的 [兼容性列表][3] 以了解有关支持的播放器和浏览器的更多信息。
|
||||
|
||||
幸运的是,你不必受限于它默认提供的功能。它提供了一种调整配置文件的简单方法(在其 [GitHub 页面][4] 上可以了解更多信息)。这使得新手可以调整一些设置并获得乐趣。
|
||||
|
||||
我将在本文的后面部分提到一些关于它的技巧。
|
||||
|
||||
### Sunamu 的特点
|
||||
|
||||
![Sunamu on empty workspace][5]
|
||||
|
||||
Sunamu 具有一些不错的特性,其中一些是:
|
||||
|
||||
* 检测并显示当前正在播放的歌曲。
|
||||
* 从专辑封面中获取配色方案,并使用相同的调色板以获得更好的视觉效果。
|
||||
* 可通过配置文件进行定制。
|
||||
* 与 Discord 完美集成。
|
||||
* 消耗最少的系统资源。
|
||||
|
||||
### 在 Linux 上安装 Sunamu
|
||||
|
||||
![Disable lyrics in sunamu][6]
|
||||
|
||||
它提供 AppImage、deb 和 rpm 包,以便在各种 Linux 发行版中轻松安装。我使用 AppImage 进行测试,并且非常好用。
|
||||
|
||||
如果你是 Linux 新手,你还可以从我们关于 [如何使用 AppImage][7] 或 [安装 deb 包][8]、[rpm 包][9] 的指南中得到帮助。
|
||||
|
||||
有趣的是,Sunamu 是少数为基于 ARM 的机器提供直接支持的开源音乐工具之一。
|
||||
|
||||
访问他们的 [GitHub 发布页面][10]下载包或从源代码构建它。
|
||||
|
||||
**让我通过终端向你展示基于 Debian 的发行版的快速安装方法**。只需按照给定的说明进行操作,你就可以开始使用了:
|
||||
|
||||
首先,让我们使用 `wget` 命令下载 .deb 包,如下所示:
|
||||
|
||||
```
|
||||
wget https://github.com/NyaomiDEV/Sunamu/releases/download/v2.0.0/sunamu_2.0.0_amd64.deb
|
||||
```
|
||||
|
||||
下载完包后,使用给定的命令进行安装:
|
||||
|
||||
```
|
||||
sudo dpkg -i sunamu_2.0.0_amd64.deb
|
||||
```
|
||||
|
||||
![install sunamu in ubuntu][11]
|
||||
|
||||
### 技巧:调整配置文件
|
||||
|
||||
默认情况下,Sunamu 不会从专辑封面中获取颜色,而是显示每首歌曲的歌词。和许多其他人一样,我喜欢不看歌词。
|
||||
|
||||
Sunamu 的配置文件通常位于 `~/.config/sunamu/config.json5`。
|
||||
|
||||
要打开 Sunamu 配置文件,请输入给定的命令:
|
||||
|
||||
```
|
||||
nano ~/.config/sunamu/config.json5
|
||||
```
|
||||
|
||||
如下所示在 `electron` 部分进行更改(启用颜色并禁用歌词):
|
||||
|
||||
```
|
||||
electron: {
|
||||
type: 'electron',
|
||||
widgetMode: true,
|
||||
colors: true,
|
||||
font: '',
|
||||
theme: 'default',
|
||||
showLyrics: false,
|
||||
}
|
||||
```
|
||||
|
||||
这是最终配置文件的样子:
|
||||
|
||||
![modify config file of sunamu][12]
|
||||
|
||||
### 总结
|
||||
|
||||
除非你是避免使用基于 Electron 应用的人,否则 Sunamu 是一款足以增强你在 Linux 上的音乐体验的应用。继 [Amberol][13] 之后,这是我最近喜欢的第二款音乐相关应用。
|
||||
|
||||
如果你尝试过,请不要忘记在评论部分分享你的经验。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/sunamu-music-widget/
|
||||
|
||||
作者:[Sagar Sharma][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/author/sagar/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://itsfoss.com/wp-content/uploads/2022/08/playing-music-with-sunamu.png
|
||||
[2]: https://itsfoss.com/best-music-players-linux/
|
||||
[3]: https://github.com/NyaomiDEV/Sunamu/blob/master/COMPATIBILITY.md
|
||||
[4]: https://github.com/NyaomiDEV/Sunamu/blob/master/assets/config.json5
|
||||
[5]: https://itsfoss.com/wp-content/uploads/2022/08/song-with-no-lyrics-min.png
|
||||
[6]: https://itsfoss.com/wp-content/uploads/2022/08/playing-music-with-sunamu-inclusing-lyrics-min1.png
|
||||
[7]: https://itsfoss.com/use-appimage-linux/
|
||||
[8]: https://itsfoss.com/install-deb-files-ubuntu/
|
||||
[9]: https://itsfoss.com/install-rpm-files-fedora/
|
||||
[10]: https://github.com/NyaomiDEV/Sunamu/releases/tag/v2.0.0
|
||||
[11]: https://itsfoss.com/wp-content/uploads/2022/08/install-sunamu-in-ubuntu.png
|
||||
[12]: https://itsfoss.com/wp-content/uploads/2022/08/modified-config-file-of-sunamu.png
|
||||
[13]: https://itsfoss.com/amberol-music-player/
|
@ -0,0 +1,150 @@
|
||||
[#]: subject: "7 Best Distributions Based on Fedora Linux"
|
||||
[#]: via: "https://itsfoss.com/best-fedora-linux-distributions/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14951-1.html"
|
||||
|
||||
7 个基于 Fedora Linux 的最佳发行版
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/21/154425baqqjmpftz7t7qt7.jpg)
|
||||
|
||||
有几十个基于 Ubuntu 的发行版可用。从 [面向初学者的发行版][1] 到 [漂亮的发行版][2],Ubuntu 主导着 Linux 桌面空间。
|
||||
|
||||
如果通用发行版还不够的话,你还会发现一些 [奇怪的基于 Ubuntu 的发行版][3]。
|
||||
|
||||
我不打算参与 [Ubuntu 与 Fedora][4] 的辩论。我只是说如果你想在 Fedora 领域中尝试一些东西,我可以列出一些选项。
|
||||
|
||||
请记住,我不会列出面向服务器的 Linux 发行版。此处的列表适用于 **桌面 Linux 用户**。
|
||||
|
||||
该列表没有特定的排名顺序,并且提到的选项可能并不总是适合新用户。因此,在第一次安装任何基于 Fedora 的发行版之前,请确保你浏览了文档。
|
||||
|
||||
### 1、Fedora 定制版
|
||||
|
||||
![screenshot fedora cinnamon][5]
|
||||
|
||||
Fedora 有很多<ruby>定制版<rt>spin</rt></ruby>,但没有 Ubuntu 那么多。
|
||||
|
||||
[Fedora 定制版][6] 不是基于 Fedora 的独立发行版,而只是具有 [不同桌面环境][7] 或采用平铺窗口管理器的不同版本的 Fedora。
|
||||
|
||||
如果你不喜欢默认的 GNOME 桌面环境,你可以下载其中一种。
|
||||
|
||||
一些可用的选项是:
|
||||
|
||||
* Fedora KDE Plasma
|
||||
* Fedora i3 平铺窗口管理器
|
||||
* Fedora LXQt
|
||||
* Fedora LXDE
|
||||
* Fedora MATE-COMPIZ
|
||||
* Fedora Cinnamon 版
|
||||
|
||||
### 2、Nobara
|
||||
|
||||
![nobara][8]
|
||||
|
||||
当你在找 [游戏发行版][9] 时,列表将由 Debian 和 Arch 衍生产品占据主导地位。因此,如果你正在寻找基于 Fedora 且具有相同效果的游戏发行版,那么 [Nobara][10] 就是你所需要的。
|
||||
|
||||
Nobara 是由 Proton GE 的维护者制作的游戏发行版,他也是 Lutris 开发团队的成员,因此你可以期待开箱即用的下一代游戏体验!
|
||||
|
||||
为了带来更好的体验,Nobara 在 Fedora 上预先应用了 30 多个补丁程序,以及一组游戏工具,包括 Lutris、GOverlay、Stream 和 ProtonUp。
|
||||
|
||||
### 3、Ultramarine
|
||||
|
||||
![ultramarine][11]
|
||||
|
||||
基于 Fedora 的发行版,开箱即用,适用于普通用户,它就是 [Ultramarine][12]!
|
||||
|
||||
Ultramarine 预装了一堆工具,包括 Flathub、RPM fusion 和该发行版自己的专用仓库。
|
||||
|
||||
你将获得一个预配置的桌面,使其看起来赏心悦目,因此你不再需要花费额外的时间进行调整。
|
||||
|
||||
此外,对于那些在 Fedora 基础上寻求 Pantheon 和 Budgie 桌面环境的微调体验的人来说,Ultramarine 是完美的选择。
|
||||
|
||||
### 4、RisiOS
|
||||
|
||||
![risios][13]
|
||||
|
||||
“一个支持 Web 应用的 Fedora。”
|
||||
|
||||
这是一种描述 [RisiOS][14] 的方式,但等等,不止如此。
|
||||
|
||||
从 Bash 脚本的用户 GUI 到欢迎屏幕,你只需单击几下即可准备好系统,RisiOS 让 Fedora 的使用更加轻松!
|
||||
|
||||
RisiOS 还为你提供与 Linux Mint 相同的 Web 应用管理器,而且非常棒。
|
||||
|
||||
但是在你跳转到下载页面之前,要记住一件事是 RisiOS 仍处于测试阶段(如网站所说的 Big beta),你可能会遇到一些小问题。
|
||||
|
||||
### 5、Qubes OS
|
||||
|
||||
![Qubes Os][15]
|
||||
|
||||
[Qubes OS][16] 是一个有趣的 Linux 发行版,它让你可以自由选择要用作基础的操作系统。它也提供了一个 Fedora 模板,并且他们会定期维护它。
|
||||
|
||||
事实上,Qubes OS 也是一个 [注重隐私的 Linux 发行版][17]。因此,你可以在使用基于 Fedora 的产品时获得最新技术,而且完全自由。
|
||||
|
||||
值得注意的是,Qubes OS 需要大量系统资源和至少 **8-16 GB** 的内存才能使用,并且具有挑战性的学习曲线。
|
||||
|
||||
### 6、Berry Linux
|
||||
|
||||
![berry linux][18]
|
||||
|
||||
[Berry Linux][19] 是一个简单的基于 Fedora 的发行版,你可以直接从 CD 或任何其他介质启动。它支持自动硬件检测,并且似乎定期维护。
|
||||
|
||||
Berry Linux 提供对英语和日语的支持。它预装了一些媒体播放器、照片编辑应用和基本应用。
|
||||
|
||||
### 7、ClearOS
|
||||
|
||||
![clear os community edition][20]
|
||||
|
||||
它不是 [来自 Intel 的 Clear Linux 项目][21],尽管听起来很相似。
|
||||
|
||||
[ClearOS][22] 是基于 Fedora 的发行版,专为服务器环境量身定制,或帮助你在 HP 支持的家庭网络上运行 IT 相关任务和流式传输音乐/视频。你必须根据自己的要求同时购买家庭版/企业版。
|
||||
|
||||
如果你不想购买而想自己管理,还有一个社区版。
|
||||
|
||||
### 你的看法
|
||||
|
||||
长期使用 Linux 的用户可能还记得 Korora 和 Chapeau 发行版。它们曾经在 Fedora 用户中很受欢迎,但从那时起这些项目就停止了。
|
||||
|
||||
虽然 Fedora 本身很棒,但我并不反对衍生发行版。看看 Linux Mint 的成功。它是 Ubuntu 的衍生产品,但已经获得了如此好的用户群。谁知道这些基于 Fedora 的发行版是否会像 Mint 一样流行?
|
||||
|
||||
我缺失了任何基于 Fedora 的活跃发行版吗?你如何看待 Fedora 衍生版及其定制版本? 在下面的评论中告诉我!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/best-fedora-linux-distributions/
|
||||
|
||||
作者:[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/best-linux-beginners/
|
||||
[2]: https://itsfoss.com/beautiful-linux-distributions/
|
||||
[3]: https://itsfoss.com/weird-ubuntu-based-linux-distributions/
|
||||
[4]: https://itsfoss.com/ubuntu-vs-fedora/
|
||||
[5]: https://itsfoss.com/wp-content/uploads/2021/05/screenshot-fedora-cinnamon.jpg
|
||||
[6]: https://spins.fedoraproject.org/
|
||||
[7]: https://itsfoss.com/best-linux-desktop-environments/
|
||||
[8]: https://itsfoss.com/wp-content/uploads/2022/08/nobara.png
|
||||
[9]: https://itsfoss.com/linux-gaming-distributions/
|
||||
[10]: https://nobaraproject.org/
|
||||
[11]: https://itsfoss.com/wp-content/uploads/2022/08/ultramarine.png
|
||||
[12]: https://ultramarine-linux.org/
|
||||
[13]: https://itsfoss.com/wp-content/uploads/2022/08/risios.png
|
||||
[14]: https://risi.io/
|
||||
[15]: https://itsfoss.com/wp-content/uploads/2020/03/qubes-os.jpg
|
||||
[16]: https://www.qubes-os.org/
|
||||
[17]: https://itsfoss.com/privacy-focused-linux-distributions/
|
||||
[18]: https://itsfoss.com/wp-content/uploads/2021/05/berry-linux.png
|
||||
[19]: https://berry-lab.net/eberry.html
|
||||
[20]: https://itsfoss.com/wp-content/uploads/2021/05/clear-os-community-edition.png
|
||||
[21]: https://itsfoss.com/clear-linux/
|
||||
[22]: https://www.clearos.com
|
@ -0,0 +1,41 @@
|
||||
[#]: subject: "Github Takes Action To Prevent Supply Chain Attacks On Open Source"
|
||||
[#]: via: "https://www.opensourceforu.com/2022/08/github-takes-action-to-prevent-supply-chain-attacks-on-open-source/"
|
||||
[#]: author: "Laveesh Kocher https://www.opensourceforu.com/author/laveesh-kocher/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lzx916"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14949-1.html"
|
||||
|
||||
为防止对开源供应链的攻击,GitHub 在行动
|
||||
======
|
||||
|
||||
![](https://www.opensourceforu.com/wp-content/uploads/2022/08/github-cover-1-1068x601.jpg)
|
||||
|
||||
在 2020 年 SolarWinds 网络间谍活动之后,一系列进一步的软件供应链漏洞凸显了确保软件监管链安全的必要性。在这场间谍活动中,俄罗斯黑客渗透到一个广泛使用的 IT 管理平台,并将受污染的升级程序悄悄带入其中。由于开源项目从根本上来说是分散的,而且经常是临时的活动,因此在这种背景下,这个问题尤其紧迫。GitHub 著名的 npm 注册中心广泛使用的 JavaScript 软件包遭到一系列令人不安的黑客攻击后,该公司前不久公布了一项战略,以提供更好的开源安全保护。
|
||||
|
||||
代码签名平台 Sigstore 将由微软旗下的 GitHub 支持,以用于 npm 软件包。代码签名类似于数字蜡封。为了让开源维护者更加容易地确认他们编写的代码是否与全球范围内人们实际下载的软件包中最终包含的代码相同,跨行业协作促成了该工具的创建。
|
||||
|
||||
GitHub 并不是开源生态系统的唯一组成部分,但 Sigstore 的联合开发者、Chainguard 的首席执行官 Dan Lorenc 指出,它是社区的一个重要枢纽,因为绝大多数项目都在这里存储和共享源代码。然而,当开发人员真正想下载开源软件或工具时,他们通常会通过软件包管理进行。
|
||||
|
||||
通过让包管理器可以使用 Sigstore,开发人员可以在 Sigstore 工具的帮助下,在软件通过供应链时处理加密检查和要求。这增加了产品流通过程中每个阶段的透明度。Lorenc 说,许多人在得知这些完整性检查尚未实施时感到震惊,开源生态系统中相当大的一部分长期以来一直依赖于盲目的信心。拜登政府于 2021 年 5 月发布了一项行政命令,主要涉及软件供应链安全问题。
|
||||
|
||||
Linux 基金会、谷歌、红帽、Purdue Universit 和 Chainguard 都对 Sigstore 的开发做出了贡献。现在有了使用 Sigstore 为 Python 包发行版签名的官方软件,而且开发软件的开源环境 Kubernetes 现在也支持它。
|
||||
|
||||
Sigstore 依靠免费和简单易用来鼓励采用,就像主要行业推动 HTTPS 网络加密一样,这在很大程度上是由非营利组织<ruby>互联网安全研究组<rt>Internet Security Research Group</rt></ruby>的 Let's Encrypt 等工具实现的。据 GitHub 称,该项目会首先提出 Sigstore 将如何在 npm 中实现的建议,并在开放评论期征求社区人员对该工具的精确部署策略的意见。然而,最终的目标是让这样的代码签名能够被尽可能多的开源项目使用,从而让对供应链的攻击更加困难。
|
||||
|
||||
GitHub 的 Hutchings 说:“我们希望看到这样一个世界,最终所有的软件工件都被签名并链接回源代码,这就是为什么构建像 Sigstore 这样的开放技术栈是如此重要,其他打包存储库也可以采用这种技术。”
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.opensourceforu.com/2022/08/github-takes-action-to-prevent-supply-chain-attacks-on-open-source/
|
||||
|
||||
作者:[Laveesh Kocher][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lzx916](https://github.com/lzx916)
|
||||
校对:[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
|
233
published/202208/20220810 Create beautiful PDFs in LaTeX.md
Normal file
233
published/202208/20220810 Create beautiful PDFs in LaTeX.md
Normal file
@ -0,0 +1,233 @@
|
||||
[#]: subject: "Create beautiful PDFs in LaTeX"
|
||||
[#]: via: "https://opensource.com/article/22/8/pdf-latex"
|
||||
[#]: author: "Jim Hall https://opensource.com/users/jim-hall"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "Donkey-Hao"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14957-1.html"
|
||||
|
||||
|
||||
使用 LaTeX 创建优美的 PDF 文件
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/23/120339s9ek65lo8cce5jj4.jpg)
|
||||
|
||||
> 使用 LaTeX 标记语言来撰写文档。
|
||||
|
||||
LaTeX 文件准备系统有一段有趣的历史。在 1968 年,程序员 Don Knuth 用一种老式印刷排版方式,撰写了他的第一本书《<ruby>计算机程序设计艺术<rt>The Art of Computer Programming</rt></ruby>》。当他在 1976 年出版第二版时,出版商已经转向现代照相排版技术。
|
||||
|
||||
Knuth 对新版本的外观不满意。他从程序员的角度解决问题,决定创建他自己的文字处理系统,这样以后他出版的书就可以以相同格式排版,拥有相同的外观。因此,Don Knuth 在 1978 年编写了第一版 TeX 。
|
||||
|
||||
几年后,Leslie Lamport 创建了一组宏定义,以便作者更容易编写复杂文档。Lamport 的宏定义扩展,即 LaTeX,有效地扩展了 TeX 能够轻松创建各种文档。例如,许多学术组织使用 LaTeX 出版期刊和论文集。
|
||||
|
||||
### 使用 LaTeX 编写文档
|
||||
|
||||
通过写一些短文就可以很容易掌握 LaTeX 基础。让我们从 [Opensource.com][4] 介绍页面借用一下内容,创建一个示例:
|
||||
|
||||
```
|
||||
$ cat about.tex
|
||||
\documentclass{article}
|
||||
\begin{document}
|
||||
|
||||
Opensource.com is a premier, daily publication focused on
|
||||
open source and Linux tutorials, stories, and resources.
|
||||
|
||||
We're a diverse and inviting group, made up of staff
|
||||
editors, Correspondents, contributors, and readers. We
|
||||
value differences in skills, talents, backgrounds, and
|
||||
experiences. There are a few different ways to get involved
|
||||
as a reader or a writer.
|
||||
|
||||
\end{document}
|
||||
```
|
||||
|
||||
类似其他文档格式程序, LaTeX 会将单词汇集起来,填充成段落 。这意味着你可以在段落中间添加新文本,而不用担心最终文档的段落参差不齐。只要你不在段落中添加空行, LaTeX 就会创建完全对齐的段落。当它找到一个空行时, LaTeX 会开启一个新段落。
|
||||
|
||||
LaTeX 需要一些定义文档的控制语句。任何 LaTeX 文档应当以“文档类别”声明开始。LaTeX 支持多种文档,包括书信、书籍和文章。例如,我使用 `\documentclass{article}` 设置类别为 “文章” 。
|
||||
|
||||
使用 `\begin{document}` 和 `\end{document}` 声明来定义文本的开始和结束。如果你在 `\begin{document}` 前添加了文本,那么 LaTeX 会报错。在 `\end{document}` 之后的文本都会被忽略。
|
||||
|
||||
使用 LaTeX 的 `latex` 命令处理文档:
|
||||
|
||||
```
|
||||
$ latex about.tex
|
||||
This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2021) (preloaded format=latex)
|
||||
restricted \write18 enabled.
|
||||
entering extended mode
|
||||
(./about.tex
|
||||
LaTeX2e <2020-10-01> patch level 4
|
||||
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
|
||||
Document Class: article 2020/04/10 v1.4m Standard LaTeX document class
|
||||
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo))
|
||||
(/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-dvips.def)
|
||||
No file about.aux.
|
||||
[1] (./about.aux) )
|
||||
Output written on about.dvi (1 page, 736 bytes).
|
||||
Transcript written on about.log.
|
||||
```
|
||||
|
||||
LaTeX 会输出许多文本,这样你就可以知道它在干什么。若你的文档包含错误, LaTeX 会报错并提示它可以做什么。大多数情况下,你可以在提示后输入 `exit` 来强制退出 LaTeX 。
|
||||
|
||||
如果用 LaTeX 成功生成一个文档,会生成一个带 `.dvi` 后缀的文件。`DVI` 表示 “<ruby>设备无关<rt>Device Independent</rt></ruby>”,因为你可以使用不同的工具来生成其他格式。例如, `dvipdf` 程序可以将 DVI 文件转换为 PDF 文件。
|
||||
|
||||
```
|
||||
$ dvipdf about.dvi
|
||||
```
|
||||
|
||||
![LaTeX output][5]
|
||||
|
||||
### 添加列表
|
||||
|
||||
LaTeX 支持两种列表:一种以数字开头的 “枚举” 列表,一种 “逐项” 或 “项目符号” 列表。在第二段后添加一个简短的枚举列表,列出人们可以参与 Opensource.com 的方式:
|
||||
|
||||
```
|
||||
\begin{enumerate}
|
||||
\item Be a writer
|
||||
\item Be a reader
|
||||
\end{enumerate}
|
||||
```
|
||||
|
||||
与在文档定义中添加 `\begin` 和 `\end` 声明类似,你也需要在列表前后添加 `\begin` 和 `\end` 声明。在列表中,每个项目以 `\item` 命令开始。当你用 LaTeX 处理该文档并转换为 PDF 格式后,你会看到该列表为数字列表:
|
||||
|
||||
![LaTeX output][6]
|
||||
|
||||
你也可以在列表中嵌套列表。这是一个优雅的功能,如果你需要在列表中为每个条目添加选项。例如,你可以为想要在 Opensource.com 中成为作者的人们提供一些不同的资源。嵌入列表使用单独的 `\begin` 和 `\end` 声明。为了看起来方便,我在示例中添加了空行,但是 LaTeX 会忽略这些空行:
|
||||
|
||||
```
|
||||
\begin{enumerate}
|
||||
\item Be a writer
|
||||
|
||||
\begin{itemize}
|
||||
\item Resources for writers
|
||||
\item Contributor Club
|
||||
\item Correspondent Program
|
||||
\end{itemize}
|
||||
|
||||
\item Be a reader
|
||||
\end{enumerate}
|
||||
```
|
||||
|
||||
作为嵌套列表,新列表嵌入在编号 1 的项目中,因为你在原先的 `\item` 声明之间添加了列表。你可以通过在 `\end{enumerate}` 语句前添加新列表,作为编号 2 项目的嵌套列表。
|
||||
|
||||
![LaTeX output][7]
|
||||
|
||||
### 章节和小节
|
||||
|
||||
你可以将冗长文章分成多个章节,这样更易于阅读。使用 `\section{...}` 语句在大括号内添加章节标题。例如,你可以在文档顶部添加一个标题为 “About Opensource.com” 的新章节:
|
||||
|
||||
```
|
||||
$ head about.tex
|
||||
\documentclass{article}
|
||||
\begin{document}
|
||||
|
||||
\section{About Opensource.com}
|
||||
|
||||
Opensource.com is a premier, daily publication focused on
|
||||
open source and Linux tutorials, stories, and resources.
|
||||
|
||||
We're a diverse and inviting group, made up of staff
|
||||
editors, Correspondents, contributors, and readers. We
|
||||
```
|
||||
|
||||
`article` 文档类会在每个主要章节添加编号,并使字体变大来突出显示。
|
||||
|
||||
![LaTeX output][8]
|
||||
|
||||
你可以使用 `\subsection{...}` 命令来组织文档。就像 `\section{...}` 命令一样,在大括号中输入副标题名称。
|
||||
|
||||
```
|
||||
$ head about.tex
|
||||
\documentclass{article}
|
||||
\begin{document}
|
||||
|
||||
\section{About Opensource.com}
|
||||
|
||||
Opensource.com is a premier, daily publication focused on
|
||||
open source and Linux tutorials, stories, and resources.
|
||||
|
||||
\subsection{Welcome to the Opensource.com community}
|
||||
```
|
||||
|
||||
![LaTeX output][9]
|
||||
|
||||
### 标题和作者
|
||||
|
||||
用于出版的科学类的文章需要标题、作者以及发表日期。LaTeX 提供了通过插入命令的方式来添加这些信息,然后使用单独的 `\maketitle` 命令生成文章的标题。
|
||||
|
||||
将 “About Us” 作为文章标题,作者为 “Opensource.com Editors”,发表日期为 “July 10, 2022” 。你必须在 `\begin{document}` 之后,文章内容前插入这些内容。
|
||||
|
||||
```
|
||||
\title{About Us}
|
||||
\author{Opensource.com Editors}
|
||||
\date{July 10, 2022}
|
||||
\maketitle
|
||||
```
|
||||
|
||||
当你在生成文档时,LaTeX 会将标题、作者和日期添加到文章的顶部:
|
||||
|
||||
![LaTeX output][10]
|
||||
|
||||
### 着重强调
|
||||
|
||||
科学和其他技术类文章通常会突出术语和短语。 LaTeX 提供了几种可以在技术文档中使用的字体效果,包括强调文本(通常以斜体显示)、粗体文本和<ruby>小型大写字母<rt>small caps</rt></ruby>。
|
||||
|
||||
将短语“staff editors, Correspondents, contributors, and readers”放在斜体文本中,并将特定词“reader”和“writer”放在段落后面的强调文本中。你也可以将“skills, talents, backgrounds, and experiences”加粗。虽然这不是正确的样式设置方式,但你可以使用小型大写字母来键入 “Linux” 。
|
||||
|
||||
```
|
||||
$ head -20 about.tex
|
||||
\documentclass{article}
|
||||
\begin{document}
|
||||
|
||||
\title{About Us}
|
||||
\author{Opensource.com Editors}
|
||||
\date{July 10, 2022}
|
||||
\maketitle
|
||||
|
||||
\section{About Opensource.com}
|
||||
|
||||
Opensource.com is a premier, daily publication focused on
|
||||
open source and \textsc{Linux} tutorials, stories, and resources.
|
||||
|
||||
\subsection{Welcome to the Opensource.com community}
|
||||
|
||||
We're a diverse and inviting group, made up of \textit{staff
|
||||
editors, Correspondents, contributors, and readers}. We
|
||||
value differences in \textbf{skills, talents, backgrounds, and
|
||||
experiences}. There are a few different ways to get involved
|
||||
as a \emph{reader} or a \emph{writer}.
|
||||
```
|
||||
|
||||
该示例展示了不同样式的文本的应用方法。当你需要强调时,使用 `\emph{...}` 命令,将强调主题放在大括号内。要以斜体、粗体或小型大写字母显示文本,使用 `\text` 命令的变体:`\textit{...}` 用于斜体,`\textbf{...}` 用于粗体,以及 `\ textsc{...}` 用于小型大写字母。LaTeX 支持许多其他方式来设置文本样式,这些样式有助于你编写科学技术类文章。
|
||||
|
||||
![LaTeX output][11]
|
||||
|
||||
### 使用 LaTeX
|
||||
|
||||
我只是介绍了使用 LaTeX 撰写科学技术文章的几种方式。你也可以在 LaTeX 中添加脚注,进行数学公式和方程的排版,取决于你的需求。你也可以通过阅读 Opensource.com 中的文章 [《在 LaTeX 中创建文档的介绍》][12] ,了解使用 LaTeX 撰写科学技术文章的其他方式。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/8/pdf-latex
|
||||
|
||||
作者:[Jim Hall][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[Donkey](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/jim-hall
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/coffee_tea_laptop_computer_work_desk.png
|
||||
[2]: https://unsplash.com/@jonasleupe?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
||||
[3]: https://unsplash.com/s/photos/tea-cup-computer?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
||||
[4]: https://opensource.com/about
|
||||
[5]: https://opensource.com/sites/default/files/2022-08/latex-output.jpg
|
||||
[6]: https://opensource.com/sites/default/files/2022-08/latex-output-list.jpg
|
||||
[7]: https://opensource.com/sites/default/files/2022-08/latex-output-list-2.jpg
|
||||
[8]: https://opensource.com/sites/default/files/2022-08/latex-output-heading.jpg
|
||||
[9]: https://opensource.com/sites/default/files/2022-08/latex-output-subheading.jpg
|
||||
[10]: https://opensource.com/sites/default/files/2022-08/latex-output-about.jpg
|
||||
[11]: https://opensource.com/sites/default/files/2022-08/latex-output-emphasis.jpg
|
||||
[12]: https://opensource.com/article/17/6/introduction-latex
|
@ -0,0 +1,79 @@
|
||||
[#]: subject: "Cutefish OS Development Restarts with A Revised Vision"
|
||||
[#]: via: "https://www.debugpoint.com/cutefish-development-restarts/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14924-1.html"
|
||||
|
||||
Cutefish OS 开发重启
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/13/123818nek1wzveuzx1iuv6.jpg)
|
||||
|
||||
经过了一个月,可能是在讨论、会谈和对话之后,Cutefish OS 正式重启了开发。
|
||||
|
||||
不久前,我们报道了 [Cutefish OS 停止开发][1],而且 GitHub 上没有任何活动。好吧,看起来开发者在 GitHub 上复活了这个项目,并对该操作系统的未来有了一些设想。
|
||||
|
||||
7 月 31 日,Cutefish OS 的 GitHub 主仓库进行了更新,内容如下:
|
||||
|
||||
> 你喜欢的 CutefishOS 现在回来了!新网站正在建设中(即将推出)
|
||||
|
||||
不仅如此,该团队还简要介绍了这个项目的路线图。
|
||||
|
||||
![Cutefish OS - 应用程序菜单][2]
|
||||
|
||||
### Cutefish OS 的开发:即将到来的里程碑
|
||||
|
||||
首先,主要目标是官方网站的准备工作。
|
||||
|
||||
其次,根据 GitHub 上的说明,下一个版本可能会基于 [Ubuntu 22.04 LTS][3]。Cutefish OS 有不同的桌面定制版,如 Ubuntu 和 Debian。另外,你可以在 [Arch Linux 上只安装Cutefish 桌面][4]。
|
||||
|
||||
第三,该团队旨在评估当前的问题并开始接受拉取请求。完成这项工作后,将更容易确定需要修复的项目的优先次序。最后,为未来版本的新功能进行规划。
|
||||
|
||||
不仅如此,还有一种可能性,即用 openEuler Linux 开发新的 Cutefish 桌面定制版。[openEuler Linux][5] 是华为为商业和企业用途而创建的一个发行版。
|
||||
|
||||
![当前 Cutefish 操作系统计划][6]
|
||||
|
||||
(LCTT 译注:但是从 GitHub 仓库来看,最近并没有任何实质动作。)
|
||||
|
||||
### 一个新的名字?
|
||||
|
||||
当我在寻找更多的信息时,我发现该团队注册了一个新的域名,有一个新的名字,即 [openfish.org][7](LCTT 译注:因无备案,展示无法访问)。桌面环境或整个操作系统将被重新命名为 openfish。在这一点上,我有一个猜测:
|
||||
|
||||
旧的域名 cutefishos.com 可能被别人接管了,因此这样决定。
|
||||
|
||||
但是,在我看来,“openfish” 是一个比 “cutefish” 更好的品牌名称。
|
||||
|
||||
(LCTT 译注:究竟是原班人马中的部分人决定重启,还是整个团队复活,目前不得而知,从改名上看,似乎新的团队并没有 cutefish 相关的品牌控制权。)
|
||||
|
||||
### 下一步是什么
|
||||
|
||||
最新的 0.8 版有几个与键盘、设置窗口、Flatpak 应用程序等有关的问题。最好的办法是在最后的基线上首先解决这些问题。然后可能是带有额外功能的 1.0 版本。
|
||||
|
||||
希望在未来几周内,我们能看到更多关于开发的更新。如果你想发表意见,询问有关期望或功能要求,[在 GitHub 上创建一个帖子][8]。
|
||||
|
||||
欢迎回来,Cutefish OS。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/cutefish-development-restarts/
|
||||
|
||||
作者:[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.debugpoint.com/cutefish-os-development-halts/
|
||||
[2]: https://www.debugpoint.com/wp-content/uploads/2021/11/Cutefish-OS-Application-Menu-1024x582.jpg
|
||||
[3]: https://www.debugpoint.com/web-stories/ubuntu-22-04-review/
|
||||
[4]: https://www.debugpoint.com/cutefish-arch-linux-install/
|
||||
[5]: https://www.openeuler.org/en/
|
||||
[6]: https://www.debugpoint.com/wp-content/uploads/2022/08/Current-Cutefish-OS-Plan.jpg
|
||||
[7]: http://openfish.org/
|
||||
[8]: https://github.com/cutefishos/cutefishos/issues
|
@ -0,0 +1,96 @@
|
||||
[#]: subject: "Kali Linux 2022.3 Introduces a Test Lab Environment and New VirtualBox Image"
|
||||
[#]: via: "https://news.itsfoss.com/kali-linux-2022-3-release/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14933-1.html"
|
||||
|
||||
Kali Linux 2022.3 发布
|
||||
======
|
||||
|
||||
> Kali Linux 2022.3 在引入了新的 VirtualBox 镜像格式的同时,也使测试变得更加方便。不要忘了试试新的工具!
|
||||
|
||||
![](https://news.itsfoss.com/wp-content/uploads/2022/08/kali-2022-3.jpg)
|
||||
|
||||
Kali Linux 在 2022 年的第三次升级中带着激动人心的新内容回来了。
|
||||
|
||||
像往常一样,你可以期待新的工具和全面的改进。此外,还有一些关键的亮点,包括新的 **测试实验室环境** 和 **VirtualBox 镜像**。
|
||||
|
||||
在这里,让我给你介绍一下这个版本的细节。
|
||||
|
||||
### Kali Linux 2022.3 有什么新内容?
|
||||
|
||||
Kali Linux 2022.3 的发布标志着他们开始启用了 **新的 Discord 服务器**,使社区能够聚集在一起,谈论关于 Kali Linux 的事情。
|
||||
|
||||
除了社区有了 Discord 服务器之外,应该引起你对升级的关注的事情包括:
|
||||
|
||||
* 一个便于测试的新测试实验室环境
|
||||
* 开放 kali-tools 资源库,以供社区提交
|
||||
* NetHunter 商店中的新软件
|
||||
* 一个新的 VirtualBox 镜像格式
|
||||
* 大量的新工具
|
||||
|
||||
### 测试实验室环境
|
||||
|
||||
Kali Linux 是为安全研究人员量身定做的,可以用于测试和学习。但是,为了增强体验,使任何人都能毫不费力地建立一个测试实验室,Kali Linux 现在增加了易于安装的软件包,如 [DVWA][1] 和 [Juice Shop][2]。
|
||||
|
||||
开发者还提到,在不久的将来会有更多的软件包。
|
||||
|
||||
### 新工具
|
||||
|
||||
新的升级包括了五个有趣的工具,它们是:
|
||||
|
||||
* BruteShark(网络分析工具)
|
||||
* DefectDojo(开源的应用程序漏洞工具)
|
||||
* phpsploit(隐蔽的破解后应用框架)
|
||||
* shellfire(利用命令注入漏洞)
|
||||
* SprayingToolkit(密码攻击)
|
||||
|
||||
你可以探索这些工具以了解更多信息。
|
||||
|
||||
### 增强的 VirtualBox 支持
|
||||
|
||||
虽然 Kali Linux 已经可以用于 VMware 和 VirtualBox,但现在为 VirtualBox 用户提供了一种新的镜像格式。
|
||||
|
||||
你现在可以下载用于 VirtualBox 的 VDI 磁盘镜像和 .vbox 元数据文件。它是原生的 VirtualBox 镜像格式,具有更好的压缩率,下载速度更快。
|
||||
|
||||
对于希望使用最新和最先进工具的用户,Kali Linux 提供了按周构建的虚拟机镜像,构建自其滚动分支。
|
||||
|
||||
此外,如果你需要构建你的自定义虚拟机镜像,Kali Linux 已经在 [GitLab][3] 上提供了一些脚本。
|
||||
|
||||
### 其他改进
|
||||
|
||||
Kali Linux 2022.3 增加了几个重要的升级。其中包括:
|
||||
|
||||
* 针对树莓派设备的 Linux 内核 5.15 更新。
|
||||
* 针对 ARM 设备的技术改进。
|
||||
* 文档更新,有一些新页面。
|
||||
* 网络存储库的维护工作。
|
||||
* NetHunter 商店的大量更新,以及对即将到来的 Android 12 支持。
|
||||
|
||||
### 下载 Kali Linux 2022.3
|
||||
|
||||
你可以在其 [官方下载页面][4] 找到最新的 Kali Linux 2022.3 ISO,以及新的 VirtualBox 镜像文件和每周更新包。
|
||||
|
||||
> **[Kali Linux 2022.3][5]**
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/kali-linux-2022-3-release/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][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/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.kali.org/tools/dvwa/
|
||||
[2]: https://www.kali.org/tools/juice-shop/
|
||||
[3]: https://gitlab.com/kalilinux/build-scripts/kali-vm
|
||||
[4]: https://www.kali.org/get-kali/
|
||||
[5]: https://www.kali.org/get-kali/#kali-platforms
|
@ -0,0 +1,111 @@
|
||||
[#]: subject: "Create Your Own Custom Light and Dark Wallpaper for GNOME"
|
||||
[#]: via: "https://www.debugpoint.com/custom-light-dark-wallpaper-gnome/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14960-1.html"
|
||||
|
||||
在 GNOME 中创建你自定义的浅色和深色壁纸
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/24/104023a3do33wdizyb3zw4.jpg)
|
||||
|
||||
> 在 GNOME 桌面中创建自定义浅色和深色壁纸的简单指南。
|
||||
|
||||
[GNOME 42][1] 将期待已久的浅色和深色主题引入了 GNOME 桌面。它还带来了浅色和深色版壁纸,当你在浅色和深色主题之间切换时,它会自动改变。
|
||||
|
||||
因此,默认情况下,GNOME 会为你提供几组预配置的浅色和深色壁纸。
|
||||
|
||||
但是,如果你想要在主题更改时可以自动更改的别的壁纸怎么办?
|
||||
|
||||
以下是在 GNOME 中为浅色和深色主题配置和创建自定义壁纸的方法。
|
||||
|
||||
### 如何为 GNOME 创建自定义浅色和深色壁纸
|
||||
|
||||
首先,确保有两个版本的壁纸。通常,它们应该是标准的 PNG 或 JPG 图像。例如,我们在演示中使用了以下两个壁纸。
|
||||
|
||||
![Sample light and dark wallpaper for demo][2]
|
||||
|
||||
但是,如果你没有合适的浅色和深色壁纸,或正在寻找更多壁纸,在本指南的末尾,我会告诉你如何获取它们或准备你自己的。
|
||||
|
||||
跟着我来。
|
||||
|
||||
其次,我们需要为自己创建一个模式文件。壁纸的自动更换由名为 `adwaita.xml` 的 XML 文件处理,该文件定义了特定的浅色和深色背景标签。因此,我们将为壁纸创建 XML 文件。
|
||||
|
||||
为此,从 GitLab 复制 `adwaita.xml` 的内容并创建一个新的 XML 文件(链接在下面)。你应该在这个文件中看到两个标签:`filename` 和 `filename-dark`。这两个 XML 标记包含两个壁纸的完全限定路径。在这两个标签下添加图片的路径,如下所示。
|
||||
|
||||
> **[从这里下载 XML 文件 (adwaita.xml.in)][3]**
|
||||
|
||||
![Change the XML file][4]
|
||||
|
||||
第三步,使用你想要的任何名称将此文件保存到 `/home/YOUR_NAME/.local/share/gnome-background-properties`(请将 `YOUR_NAME` 替换为你的用户名)。如果 `gnome-background-properties` 不存在,请创建它们。对此示例,我使用了 `my_cool_backgrounds.xml`。
|
||||
|
||||
![Save the file][5]
|
||||
|
||||
都准备好了。最后,打开设置并转到外观选项卡,你应该会看到选项中出现新的壁纸。
|
||||
|
||||
选择你的自定义浅色和深色壁纸并享受。
|
||||
|
||||
![The appearance tab now has your custom light and dark wallpaper][6]
|
||||
|
||||
### 如何下载或制作你的动态壁纸
|
||||
|
||||
你一定会想,“谁有时间去寻找和创建深浅版本的壁纸”?一些网站为你提供现成的动态壁纸,你可以轻松下载和安装。
|
||||
|
||||
我推荐的一个网站是 [dynamicwallpaper.club][7],它为 macOS 提供了一些高达 6K 的优秀高质量壁纸。你可以轻松下载它们。
|
||||
|
||||
此外,如果你打算从上述网站下载,请记住该网站的图像是 [heic 格式][8],因为该网站适用于 macOS。高效视频编码(HEIC)是 Apple 的 HEIF(高效图像文件格式)的专有版本。
|
||||
|
||||
你需要一个驱动来查看和转换 Ubuntu 或 Fedora Linux 中的动态 heic 图像。那么,如何将它们转换为适用于 Linux 系统呢?打开终端并运行以下命令来安装驱动。
|
||||
|
||||
Ubuntu 用户:
|
||||
|
||||
```
|
||||
sudo apt install heif-gdk-pixbuf
|
||||
```
|
||||
|
||||
Fedora 用户:
|
||||
|
||||
```
|
||||
sudo dnf install libheif
|
||||
```
|
||||
|
||||
仅适用于带有 KDE Plasma 的 Fedora/Ubuntu(没有此插件,Plasma 应用无法打开 heic 图像):
|
||||
|
||||
```
|
||||
sudo apt install qt-heif-image-plugin
|
||||
sudo dnf install qt-heif-image-plugin
|
||||
```
|
||||
|
||||
最后,使用你喜欢的图像查看器打开 heic 图像并将其保存为 JPG/PNG。
|
||||
|
||||
![Custom Light and Dark wallpaper in GNOME – transition][9]
|
||||
|
||||
最后,别忘了在下面的评论部分告诉我你是否可以为 GNOME 创建自定义深色和浅色壁纸。
|
||||
|
||||
干杯。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/custom-light-dark-wallpaper-gnome/
|
||||
|
||||
作者:[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/2022/03/gnome-42-release/
|
||||
[2]: https://www.debugpoint.com/wp-content/uploads/2022/04/Sample-light-and-dark-wallpaper-for-demo.jpg
|
||||
[3]: https://gitlab.gnome.org/GNOME/gnome-backgrounds/-/tree/main/backgrounds
|
||||
[4]: https://www.debugpoint.com/?attachment_id=9376
|
||||
[5]: https://www.debugpoint.com/?attachment_id=9375
|
||||
[6]: https://www.debugpoint.com/?attachment_id=9374
|
||||
[7]: https://dynamicwallpaper.club
|
||||
[8]: https://en.wikipedia.org/wiki/High_Efficiency_Image_File_Format
|
||||
[9]: https://www.debugpoint.com/wp-content/uploads/2022/04/Custom-Light-and-Dark-wallpaper-in-GNOME-transition.gif
|
@ -0,0 +1,135 @@
|
||||
[#]: subject: "How to Monitor Log Files in Real Time in Linux [Desktop and Server]"
|
||||
[#]: via: "https://www.debugpoint.com/monitor-log-files-real-time/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14947-1.html"
|
||||
|
||||
如何在 Linux 中实时监控日志文件
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/19/194609f1njqu096uhy919i.jpg)
|
||||
|
||||
> 本教程介绍了如何实时监控 Linux 日志文件(桌面、服务器或应用)以进行诊断和故障排除。
|
||||
|
||||
当你在 Linux 桌面、服务器或任何应用中遇到问题时,你首先会查看单独的日志文件。日志文件通常是文本流和来自应用的带有时间戳的消息。它可以帮助你缩小特定问题的范围,并使你能够找到问题的原因。它还可以帮助从网络获得帮助。
|
||||
|
||||
一般来说,所有的日志文件都位于 `/var/log`。此目录包含特定应用和服务的扩展名为 `.log` 的日志文件,它还包含了其他含有日志的独立目录。
|
||||
|
||||
![log files in var-log][1]
|
||||
|
||||
所以,如果你想监控一堆日志文件或特定的一个,这里有一些方法可以做到。
|
||||
|
||||
### Linux 实时监控日志文件
|
||||
|
||||
#### 使用 tail 命令
|
||||
|
||||
`tail` 命令是实时跟踪日志文件的最基本方式。特别是如果你在只有终端而没有 GUI 的服务器中。这很有帮助。
|
||||
|
||||
基本语法如下:
|
||||
|
||||
```
|
||||
tail /path/to/log/file
|
||||
```
|
||||
|
||||
用法:
|
||||
|
||||
![Monitoring multiple log files via tail][2]
|
||||
|
||||
可以使用开关 `-f` 跟踪实时更新的日志文件。例如,如果要关注 syslog,可以使用以下命令。
|
||||
|
||||
```
|
||||
tail -f /var/log/syslog
|
||||
```
|
||||
|
||||
你可以使用单个命令监控多个日志文件:
|
||||
|
||||
```
|
||||
tail -f /var/log/syslog /var/log/dmesg
|
||||
```
|
||||
|
||||
如果要监视 HTTP 或 sftp 或任何服务器,可以在此命令中使用它们各自的日志文件。
|
||||
|
||||
请记住,上述命令需要管理员权限。
|
||||
|
||||
#### 使用 lnav(日志文件浏览器)
|
||||
|
||||
![lnav Running][3]
|
||||
|
||||
`lnav` 是一个出色的程序,你可以用它来用彩色编码的信息以更有条理的方式监控日志文件。在 Linux 系统中,这个工具不是默认安装的。你可以用下面的命令来安装它:
|
||||
|
||||
Ubuntu:
|
||||
|
||||
```
|
||||
sudo apt install lnav
|
||||
```
|
||||
|
||||
Fedora:
|
||||
|
||||
```
|
||||
sudo dnf install lnav
|
||||
```
|
||||
|
||||
lnav 的好处在于,如果你不想安装它,你可以下载其预编译的可执行文件并在任何地方运行它,甚至可以从 U 盘上运行。无需设置,并加载了功能。使用 lnav,你可以通过 SQL 查询日志文件,以及其他很酷的功能,你可以在其[官方网站][4]上学习。
|
||||
|
||||
安装后,你可以在具有管理员权限的终端上运行 `lnav`,它会默认显示 `/var/log` 中的所有日志并开始实时监控。
|
||||
|
||||
#### 关于 systemd 的 journalctl 的一个说明
|
||||
|
||||
当今所有现代 Linux 发行版都主要使用 systemd。 systemd 提供了运行 Linux 操作系统的基本框架和组件。 systemd 通过 `journalctl` 提供日志服务,这有助于管理来自所有 systemd 服务的日志。你还可以使用以下命令实时监控各个 systemd 服务和日志。
|
||||
|
||||
```
|
||||
journalctl -f
|
||||
```
|
||||
|
||||
以下是一些特定的 `journalctl` 命令,可用于多种情况。你可以将这些与上面的 `-f` 选项结合使用以开始实时监控。
|
||||
|
||||
对于紧急系统消息,请使用:
|
||||
|
||||
```
|
||||
journalctl -p 0
|
||||
```
|
||||
|
||||
显示带有解释的错误:
|
||||
|
||||
```
|
||||
journalctl -xb -p 3
|
||||
```
|
||||
|
||||
使用时间控制过滤:
|
||||
|
||||
```
|
||||
journalctl --since "2022-12-04 06:00:00"
|
||||
journalctl --since "2022-12-03" --until "2022-12-05 03:00:00"
|
||||
journalctl --since yesterday
|
||||
journalctl --since 09:00 --until "1 hour ago"
|
||||
```
|
||||
|
||||
如果你想了解更多关于 journalctl 的详细信息,我已经在这写了份 [指南][5]。
|
||||
|
||||
### 结束语
|
||||
|
||||
我希望这些命令和技巧可以帮助你找到桌面或服务器中问题/错误的根本原因。有关更多详细信息,你可以随时参考手册页并使用各种选项。如果你对本文有任何意见或想法,请使用下面的评论栏告诉我。
|
||||
|
||||
干杯。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/monitor-log-files-real-time/
|
||||
|
||||
作者:[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/08/log-files-in-var-log-1024x312.jpeg
|
||||
[2]: https://www.debugpoint.com/wp-content/uploads/2021/08/Monitoring-multiple-log-files-via-tail.jpeg
|
||||
[3]: https://www.debugpoint.com/wp-content/uploads/2021/08/lnav-Running.jpeg
|
||||
[4]: https://lnav.org/features
|
||||
[5]: https://www.debugpoint.com/2020/12/systemd-journalctl/
|
123
published/202208/20220816 A look inside an EPUB file.md
Normal file
123
published/202208/20220816 A look inside an EPUB file.md
Normal file
@ -0,0 +1,123 @@
|
||||
[#]: subject: "A look inside an EPUB file"
|
||||
[#]: via: "https://opensource.com/article/22/8/epub-file"
|
||||
[#]: author: "Jim Hall https://opensource.com/users/jim-hall"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14967-1.html"
|
||||
|
||||
深入了解 EPUB 文件
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/25/223832eo3gq2o32uz0u0ll.jpg)
|
||||
|
||||
> EPUB 文件是使用开放格式发布内容的好方法。
|
||||
|
||||
电子书提供了一种随时随地阅读书籍、杂志和其他内容的好方法。读者可以在长途飞行和乘坐火车时享受电子书打发时间。最流行的电子书文件格式是 EPUB 文件,它是“<ruby>电子出版物<rt>electronic publication</rt></ruby>”的缩写。 EPUB 文件受到各种电子阅读器的支持,并且是当今电子书出版的有效标准。
|
||||
|
||||
EPUB 文件格式基于 XHTML 内容和 XML 元数据的开放标准,包含在 zip 存档中。由于一切都基于开放标准,我们可以使用通用工具来创建或检查 EPUB 文件。让我们探索一个 EPUB 文件以了解更多信息。《[C 编程技巧和窍门指南][2]》,于今年早些时候在 Opensource.com 上发布,提供 PDF 或 EPUB 格式。
|
||||
|
||||
因为 EPUB 文件是放在 zip 文件中的 XHTML 内容和 XML 元数据,所以你可以用 `unzip` 命令在命令行检查 EPUB:
|
||||
|
||||
```
|
||||
$ unzip -l osdc_Jim-Hall_C-Programming-Tips.epub
|
||||
Archive: osdc_Jim-Hall_C-Programming-Tips.epub
|
||||
Length Date Time Name
|
||||
--------- ---------- ----- ----
|
||||
20 06-23-2022 00:20 mimetype
|
||||
8259 06-23-2022 00:20 OEBPS/styles/stylesheet.css
|
||||
1659 06-23-2022 00:20 OEBPS/toc.xhtml
|
||||
4460 06-23-2022 00:20 OEBPS/content.opf
|
||||
44157 06-23-2022 00:20 OEBPS/sections/section0018.xhtml
|
||||
1242 06-23-2022 00:20 OEBPS/sections/section0002.xhtml
|
||||
22429 06-23-2022 00:20 OEBPS/sections/section0008.xhtml
|
||||
[...]
|
||||
9628 06-23-2022 00:20 OEBPS/sections/section0016.xhtml
|
||||
748 06-23-2022 00:20 OEBPS/sections/section0001.xhtml
|
||||
3370 06-23-2022 00:20 OEBPS/toc.ncx
|
||||
8308 06-23-2022 00:21 OEBPS/images/image0011.png
|
||||
6598 06-23-2022 00:21 OEBPS/images/image0009.png
|
||||
[...]
|
||||
14492 06-23-2022 00:21 OEBPS/images/image0005.png
|
||||
239 06-23-2022 00:20 META-INF/container.xml
|
||||
--------- -------
|
||||
959201 41 files
|
||||
```
|
||||
|
||||
这个 EPUB 包含很多文件,但其中大部分是内容。要了解 EPUB 文件是如何组合在一起的,请遵循电子书阅读器的流程:
|
||||
|
||||
1、电子书阅读器需要验证 EPUB 文件是否真的是 EPUB 文件。他们通过检查 EPUB 存档根目录中的 `mimetype` 文件来验证文件。该文件仅包含一行描述 EPUB 文件的 MIME 类型:
|
||||
|
||||
```
|
||||
application/epub+zip
|
||||
```
|
||||
|
||||
2、为了定位内容,电子书阅读器从 `META-INF/container.xml` 文件开始。这是一个简短的 XML 文档,指示在哪里可以找到内容。对于此 EPUB 文件,`container.xml` 文件如下所示:
|
||||
|
||||
```
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container">
|
||||
<rootfiles>
|
||||
<rootfile full-path="OEBPS/content.opf" media-type="application/oebps-package+xml"/>
|
||||
</rootfiles>
|
||||
</container>
|
||||
```
|
||||
|
||||
为了使 `container.xml` 文件更易于阅读,我将单行拆分为多行,并添加了一些间距来缩进每行。XML 文件并不关心新行和空格等额外的空白,因此这种额外的间距不会影响 XML 文件。
|
||||
|
||||
3、`container.xml` 文件表示 EPUB 的根从 `OEBPS` 目录中的 `content.opf` 文件开始。OPF 扩展名是因为 EPUB 基于 “<ruby>开放打包格式<rt>Open Packaging Format</rt></ruby>”,但 `content.opf` 文件实际上只是另一个 XML 文件。
|
||||
|
||||
4、`content.opf` 文件包含一个完整的 EPUB 内容清单,以及一个有序的目录,以及查找每一章或每一节的引用。这个 EPUB 的 `content.opf` 文件很长,因此我将在此仅展示一小部分作为示例。
|
||||
|
||||
XML 数据包含在 `<package>` 块中,该块本身具有 `<metadata>` 块、`<manifest>` 数据和包含电子书目录的 `<spine>` 块:
|
||||
|
||||
```
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<package unique-identifier="unique-identifier" version="3.0" xmlns="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:opf="http://www.idpf.org/2007/opf">
|
||||
<metadata>
|
||||
<dc:identifier id="unique-identifier">osdc002</dc:identifier>
|
||||
<dc:title>Tips and Tricks for C Programming</dc:title>
|
||||
<dc:creator>Jim Hall</dc:creator>
|
||||
<dc:language>English</dc:language>
|
||||
<meta property="dcterms:modified">2022-06-23T12:09:13Z</meta>
|
||||
<meta content="LibreOffice/7.3.0.3$Linux_X86_64 LibreOffice_project/0f246aa12d0eee4a0f7adcefbf7c878fc2238db3 (libepubgen/0.1.1)" name="generator"/>
|
||||
</metadata>
|
||||
<manifest>
|
||||
...
|
||||
<item href="sections/section0001.xhtml" id="section0001" media-type="application/xhtml+xml"/>
|
||||
<item href="images/image0003.png" id="image0003" media-type="image/png"/>
|
||||
<item href="styles/stylesheet.css" id="stylesheet.css" media-type="text/css"/>
|
||||
<item href="toc.ncx" id="toc.ncx" media-type="application/x-dtbncx+xml"/>
|
||||
...
|
||||
</manifest>
|
||||
<spine toc="toc.ncx">
|
||||
<itemref idref="section0001"/>
|
||||
<itemref idref="section0002"/>
|
||||
<itemref idref="section0003"/>
|
||||
...
|
||||
</spine>
|
||||
</package>
|
||||
```
|
||||
|
||||
你可以把数据匹配起来,看看在哪里可以找到每个部分。EPUB 阅读器就是这样做的。例如,目录中的第一项引用了 `section0001`,它在清单中被定义为位于 `sections/section0001.xhtml` 文件中。该文件的名称不需要与 `idref` 条目相同,但 LibreOffice Writer 的自动程序就是这样创建该文件的。(你可以在元数据中看到,这个 EPUB 是在 Linux 上用 LibreOffice 7.3.0.3 版本创建的,它可以将内容导出为 EPUB 文件。)
|
||||
|
||||
### EPUB 格式
|
||||
|
||||
EPUB 文件是一种使用开放格式发布内容的好方法。EPUB 文件格式是 XML 元数据与 XHTML 内容,包含在一个 zip 文件内。虽然大多数技术作家使用工具来创建 EPUB 文件,因为 EPUB 是基于开放标准,意味着你可以使用其他方式创建自己的 EPUB 文件。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/8/epub-file
|
||||
|
||||
作者:[Jim Hall][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/jim-hall
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/find-file-linux-code_magnifying_glass_zero.png
|
||||
[2]: https://opensource.com/downloads/guide-c-programming
|
@ -0,0 +1,135 @@
|
||||
[#]: subject: "Marktext is an Excellent Editor Even for Those Who Don’t Know Markdown"
|
||||
[#]: via: "https://itsfoss.com/marktext-editor/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "Chth0lly"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14986-1.html"
|
||||
|
||||
即使对那些不知道 Markdown 的人来说,Marktext 也是一个绝佳的编辑器
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/31/170837f0kx77ewii4hkih0.jpg)
|
||||
|
||||
又一个 Markdown 编辑器?我们见的 Markdown 编辑器还少吗?
|
||||
|
||||
我明白你的感受,如果你是个 Markdown 爱好者,你可能已经用过很多 Markdown 编辑器了,比如 [Joplin][1] 和 [Zettlr][2]。但如果你不是的话,你可能根本就不在乎。
|
||||
|
||||
Markdown 是一个非常好的标记语言,特别是对那些在网络上写作的人来说。我不想在这里讲太多细节,但如果你有兴趣的话,我们有一篇 [非常棒的 Markdown 初学者教程][3]。
|
||||
|
||||
这次我想推荐给你(另一个)Markdown 编辑器,它叫 [Marktext][4],并且它是用 Electron 制作的(我们都明白这什么意思,先别急着埋怨我)。
|
||||
|
||||
我发现这将是一个很完美的编辑器。它很漂亮,而它运行起来也一样棒。下面是我这几天来的使用体验。
|
||||
|
||||
### Marktext: 人人可用的 Markdown 编辑器
|
||||
|
||||
尽管我很讨厌 [Electron 框架][5],但不得不承认基于 Electron 的应用都有一个干净、现代的界面。
|
||||
|
||||
![Marktext interface][6]
|
||||
|
||||
我更喜欢深色模式主题,除此之外官方还提供了五种其它主题。
|
||||
|
||||
![Marktext dark theme][7]
|
||||
|
||||
打开软件你就可以立刻进行写作,如果你不记得某个语法了,那也没有问题,输入 `@` 就可以得到语法提示,如:
|
||||
|
||||
* 标题
|
||||
* 分隔线
|
||||
* 表格
|
||||
* Latex 数学公式
|
||||
* HTML 块
|
||||
* 代码块
|
||||
* 引用
|
||||
* 列表
|
||||
* 检查清单
|
||||
* 用 Vega-lite.js、Flowchart.js、js-sequence-diagrams 和 PlantUML 制作的图表
|
||||
|
||||
![Use various document elements in the editor by pressing @][8]
|
||||
|
||||
选中文本你会得到一个格式选项框,来改变文本为粗体、斜体、下划线、删除线等。你也可以用黄色背景高亮文本、转换为内联代码、内联公式或插入超链接。
|
||||
|
||||
![Text formatting options][9]
|
||||
|
||||
Marktext 也支持图片。我们都知道图片不是 Markdown 文件的一部分,它们是外部元素,但是你可以选择将图片保存到 .md 文件所在的目录下。
|
||||
|
||||
![Images are supported too][10]
|
||||
|
||||
通过插入菜单来添加图片非常容易。你可以选择文本并且从弹出的格式选项中选择图片来添加,或使用 `Ctrl+Shift+I` 快捷键。但是不能为图片添加替换文本或图片说明,这点确实需要改进。
|
||||
|
||||
我喜欢 Marktext 的表格功能。你可以直接插入预先定义好大小的图表。如有需要,还可以很容易的改变大小。你可以只用鼠标移动列和行,而不用担心底层的代码。
|
||||
|
||||
![Tables are very well supported in Marktext][11]
|
||||
|
||||
你可以启用侧边栏视图。侧边栏有三个功能:你可以打开包含多个 Markdown 文件的文件夹,在打开的文件夹中的所有文件上执行全局搜索,并显示当前打开的文件的大纲目录。大纲目录是根据子标题自动生成的。
|
||||
|
||||
![Sidebar view has three options: Show folder content, global search and table of content][12]
|
||||
|
||||
底部的齿轮按钮是设置功能。你可以改变主题、改变图片设置、视图、开启自动保存等等。
|
||||
|
||||
![Configuration and settings][13]
|
||||
|
||||
### 如何安装 Marktext
|
||||
|
||||
Marktext 是一个跨平台的开源应用程序。所以不止在 Linux 上,你还可以在 Windows 和 macOS 安装。
|
||||
|
||||
在 Linux 上,你可以选择 AppImage 软件包或 Flatpak 软件包。从 [这里][14] 可以得到 Marktext 的 Appimage 软件包。
|
||||
|
||||
我选择了 Flatpak 版本,因为这样可以获得更好的系统集成。它运行良好,Marktext 自动成为我的 Ubuntu 22.04 系统上 .md 文件的默认编辑器。
|
||||
|
||||
请确保你启用了 Flatpak 支持,之后用以下方法添加上 Flathub 仓库:
|
||||
|
||||
```
|
||||
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||
```
|
||||
|
||||
在这之后,用以下命令安装 Marktext 到你的系统上:
|
||||
|
||||
```
|
||||
flatpak install flathub com.github.marktext.marktext
|
||||
```
|
||||
|
||||
如果用了一段时间后你不喜欢 Marktext,可以用以下命令卸载:
|
||||
|
||||
```
|
||||
fkatpak uninstall com.github.marktext.marktext
|
||||
```
|
||||
|
||||
### 总结
|
||||
|
||||
Marktext 有很多小功能,例如字数统计、Latex 数学公式、拼写检查器、复制粘贴为 Markdown/HTML 格式,我留给你们自己去尝试。
|
||||
|
||||
实话实说,尽管多年来一直使用 Markdown 来写文章,但我也总会忘掉一些语法。我能记得常见的标题、列表、代码块等,但如果我必须创建一个表格,我不得不在网上搜索。
|
||||
|
||||
我已经 [尝试了许多 Markdown 编辑器][15],这其中确实有很多不错的。但是,我还是喜欢用 Marktext,它会在我的系统上存在很长时间。
|
||||
|
||||
如果你已经用过了话,请在评论区分享你的经验。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/marktext-editor/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[Chth0lly](https://github.com/Chth0lly)
|
||||
校对:[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/joplin/
|
||||
[2]: https://itsfoss.com/zettlr-markdown-editor/
|
||||
[3]: https://itsfoss.com/markdown-guide/
|
||||
[4]: https://github.com/marktext/marktext/
|
||||
[5]: https://www.electronjs.org/
|
||||
[6]: https://itsfoss.com/wp-content/uploads/2022/08/marktext-interface.png
|
||||
[7]: https://itsfoss.com/wp-content/uploads/2022/08/marktext-dark-theme.png
|
||||
[8]: https://itsfoss.com/wp-content/uploads/2022/08/marktext-insert-options.png
|
||||
[9]: https://itsfoss.com/wp-content/uploads/2022/08/text-formatting-options-marktext.png
|
||||
[10]: https://itsfoss.com/wp-content/uploads/2022/08/images-in-marktext.png
|
||||
[11]: https://itsfoss.com/wp-content/uploads/2022/08/tables-in-marktext.png
|
||||
[12]: https://itsfoss.com/wp-content/uploads/2022/08/sidebar-view-marktext.png
|
||||
[13]: https://itsfoss.com/wp-content/uploads/2022/08/marktext-settings.png
|
||||
[14]: https://github.com/marktext/marktext/releases
|
||||
[15]: https://itsfoss.com/best-markdown-editors-linux/
|
@ -0,0 +1,72 @@
|
||||
[#]: subject: "My practical advice for new programmers"
|
||||
[#]: via: "https://opensource.com/article/22/8/coding-advice-new-programmers"
|
||||
[#]: author: "Sachin Samal https://opensource.com/users/sacsam005"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lkxed"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14952-1.html"
|
||||
|
||||
我给新手程序员的实用建议
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/21/161450vm33z0ex30w4073z.jpg)
|
||||
|
||||
> 做一个高效的、充满好奇心的问题解决者吧!这会帮助你成为一名成功的程序员。
|
||||
|
||||
你是否曾经遇到过这样一种情况:你想解决一个问题,并且你在 YouTube 或 Google 中找到了相关的教程。嗯,你觉得看会了,可真做起来,却止步不前,大脑一片空白。你感觉自己每一行代码都看懂了,可一旦离开了那个教程,就步履维艰。如果你在 HackerRank 或 LeetCode 上看过别人的解题过程,你就能体会到,一个有追求的程序员第一次看到这些挑战时,他会是何种感受。举例来说,假设你正在学习一门新语言,在你刚开始理解这门语言的基础知识的时候,你看了一个教程,摩拳擦掌,结果发现自己无法独立应用学到的知识,这反过来可能会导致你怀疑自己的知识和能力。
|
||||
|
||||
### 把教程付诸于实践
|
||||
|
||||
你应该从头开始吗?如果你这么做,你可能很快就会发现自己重复学习了很多次相同的知识点。虽然从头开始并不一定是种浪费,但是,你该如何变得更高效呢?
|
||||
|
||||
死记硬背在编程中完全是行不通的。话虽如此,但你也不能够忽视熟悉语法的重要性。因为,死记硬背和养成习惯之间是有明显区别的。习惯是很难打破的。要养成多使用编程语言的常规语法、函数、方法、模式、范式和构造的习惯,这样你才能掌握它。掌握一门编程语言需要大量的创造力和练习。练习语法是非常必要的,直到它们能在你的脑海中自然地浮现,就像血液在血管里流动一样。
|
||||
|
||||
### “问题解决”的工作原理
|
||||
|
||||
那么,你该采取什么样的方案呢?这实际上取决于许多因素。这些因素可以是任何东西,下至技术限制,上至用户需要。世界上有无数的问题,每个问题都有许多解决方式。如何选择一个最好的?这就需要<ruby>“问题解决”<rt>problem-solving</rt><ruby>的技巧了。
|
||||
|
||||
下面是一个简单的例子。你需要把两个数**相加**,让它们等于 **6**。显然,你有多种方式可供选择:
|
||||
|
||||
**3 + 3 = 6** 或 **4 + 2 = 6** 或 **5 + 1 = 6**
|
||||
|
||||
同理,如果你需要让两个数字,经过一次减法、乘法或除法运算后,得到的结果为 **6**。你仍然有很多选项,包括:
|
||||
|
||||
**8 - 2 = 6** 或 **12 / 2 = 6** 或 **3 * 2 = 6**
|
||||
|
||||
每种方案都有它固有的限制,且各不相同。当你在现实生活中尝试做出一个高效的方案时,你必须要考虑到所有的限制。这个方案可行吗?有什么障碍吗?有可操作性吗?是否可扩展呢?而如何最小化约束,并做出一个最优方案,就取决于问题类型和业务需要。
|
||||
|
||||
### 练习很重要
|
||||
|
||||
编程的目标不仅仅是解决问题。因此,从工程视角理解代码**如何**工作始终是一个优势。这就是代码审查在企业级开发中发挥作用的地方。编程的最低要求是具备基本的编码知识,包括语言的语法、函数和方法。归根结底,“写代码”是需要你去**写**的,所以练习总是有助于提高你的技能。流畅的写作和复杂方案的开发都来自于持续的学习和训练。
|
||||
|
||||
### 学习编码
|
||||
|
||||
我撰写和分享这篇文章,是为了鼓励新程序员去探寻自己的内心,寻找那个“优秀的问题解决者”。请不要停止相信自己。
|
||||
|
||||
要成功编码,你需要培养许多习惯。下面是我在学习编码时保持高效的方法:
|
||||
|
||||
1. 一个包含语法、方法和函数 [速查手册][1] 总能应付不时之需。
|
||||
2. 将问题分解成更小的部分,便于追踪。
|
||||
3. 尝试理解代码运行的核心概念。
|
||||
4. 构思解决方案时,大可发挥你的创造力 —— 但刚开始还是要注重基础。
|
||||
5. 在练习时,创建尽可能多的应用和组件。
|
||||
6. 永远不要从 Stack Overflow/Exchange 等开放平台上复制/粘贴代码,特别是在不了解上下文的情况下。
|
||||
7. 跟着教程做了一遍后,尝试从头开始构建所有内容。即使你只能独立完成一半,那也仍然是一个成就。
|
||||
|
||||
祝我们所有人好运!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/8/coding-advice-new-programmers
|
||||
|
||||
作者:[Sachin Samal][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lkxed](https://github.com/lkxed)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/sacsam005
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/downloads/cheat-sheets
|
@ -0,0 +1,101 @@
|
||||
[#]: subject: "Deepin 23 is Introducing a New Package Format and Repository, Sounds Interesting!"
|
||||
[#]: via: "https://news.itsfoss.com/deepin-23/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14948-1.html"
|
||||
|
||||
deepin 23 将引入新的软件包格式和存储库
|
||||
======
|
||||
|
||||
> deepin 23 将是一个有趣的升级,有几个基本的变化。
|
||||
|
||||
![deepin 23][1]
|
||||
|
||||
deepin 仍然是目前最 [漂亮的 Linux 发行版][2] 之一。
|
||||
|
||||
虽然整个用户体验可能不是毫无痛点的,但它还是看起来不错的。deepin 的开发者尝试了一些引人关注的定制,以使它从人群中脱颖而出。
|
||||
|
||||
如果你是第一次了解它,你应该知道它是 [基于 Debian Linux 的有趣发行版][3] 之一。
|
||||
|
||||
随着 [deepin 20][4] 和它最近的小版本发布,他们推出了一系列不错的升级。现在,看起来deepin 23 将是下一个主要的升级。
|
||||
|
||||
### deepin 23 预览版中的新内容
|
||||
|
||||
![deepin 23][5]
|
||||
|
||||
deepin 23 预览版已经可以进行测试。与之前的版本不同,deepin 23 包括一些基本的升级,在多个层面上影响用户体验。
|
||||
|
||||
主要的亮点包括:
|
||||
|
||||
* 一个新的软件包格式。
|
||||
* 一个新的系统更新的构想。
|
||||
* 一个新的资源库。
|
||||
* 新的墙纸。
|
||||
* [Linux 内核 5.18][6]。
|
||||
|
||||
### 新的软件包格式:玲珑
|
||||
|
||||
![][7]
|
||||
|
||||
**玲珑** 是 deepin 开发的新软件包格式。
|
||||
|
||||
它的目的是解决 Linux 下传统软件包格式的复杂依赖性所造成的各种兼容性问题。此外,通过支持沙盒以及增量更新和隐私保护来减少安全风险。
|
||||
|
||||
截至目前,你可以在其 [玲珑商店][8] 上找到这些软件包。
|
||||
|
||||
我们需要另一种软件包格式吗?我不这么认为。
|
||||
|
||||
有了 Flatpak 和 Snap 的存在,它听起来并不像以前没有的新东西。
|
||||
|
||||
对我来说,看起来 deepin 只是想拥有自己的软件包格式作为其产品的一部分。
|
||||
|
||||
### 原子式更新
|
||||
|
||||
系统更新将被视为原子操作,也就是说,当软件包被成功安装后,更新就完成了。如果安装失败,系统可以恢复到以前的版本,没有任何变化。
|
||||
|
||||
因此,你在升级后可以得到系统回滚的支持,并可以避免部分升级的困难。
|
||||
|
||||
### 独立的上游
|
||||
|
||||
虽然它是基于 Debian 的,但 deepin 的目标是为核心软件包和一些可选组件建立一个独立的仓库。
|
||||
|
||||
对于预览版,开发者提到,他们打算从上游如 Debian 和 Arch Linux 中学习,以改进他们的仓库。
|
||||
|
||||
### 新的墙纸
|
||||
|
||||
![deepin 23][9]
|
||||
|
||||
像其他主要版本一样,deepin 23 增加了一些令人耳目一新的壁纸和新的默认壁纸。
|
||||
|
||||
### 下载 deepin 23 预览
|
||||
|
||||
请注意,deepin 23稳定版还没有上市。因此,如果你想在你的测试系统上进行实验,并体验一下,请尝试预览版。
|
||||
|
||||
你可以在 [官方公告][10] 中找到 ISO 文件的下载链接。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/deepin-23/
|
||||
|
||||
作者:[Ankush Das][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/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/content/images/size/w2000/wordpress/2022/08/deepin-23-release.jpg
|
||||
[2]: https://itsfoss.com/beautiful-linux-distributions/
|
||||
[3]: https://itsfoss.com/debian-based-distros/
|
||||
[4]: https://itsfoss.com/deepin-20-review/
|
||||
[5]: https://news.itsfoss.com/content/images/wordpress/2022/08/deepin-23-preview-screenshot.jpg
|
||||
[6]: https://news.itsfoss.com/linux-kernel-5-18-release/
|
||||
[7]: https://news.itsfoss.com/content/images/wordpress/2022/08/deepin-23-linglong.png
|
||||
[8]: https://store.linglong.dev/
|
||||
[9]: https://news.itsfoss.com/content/images/wordpress/2022/08/deepin-23-wallpapers-preview.jpg
|
||||
[10]: https://www.deepin.org/en/linux-system-distribution-deepin-23-preview-released/
|
@ -0,0 +1,71 @@
|
||||
[#]: subject: "Desktop Linux Market Share: August 2022"
|
||||
[#]: via: "https://itsfoss.com/linux-market-share/"
|
||||
[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14954-1.html"
|
||||
|
||||
桌面 Linux 市场份额(2022 年 7 月)
|
||||
======
|
||||
|
||||
每年,我们都会讨论 Linux 桌面年。当我们看到操作系统在消费者领域的市场份额有所增加时,却知道是无望的。
|
||||
|
||||
![linux desktop market share][1]
|
||||
|
||||
当然,Linux 主导着整个云行业(Web 托管、云计算、数据仓库等)。在这里,我们只关注桌面 Linux 的市场份额。
|
||||
|
||||
**如果你是 Linux 世界的新手**,可能不知道,Linux 不是一个操作系统,它是一个内核。但是,为了简单起见,我们倾向于将 “Linux” 称为操作系统。你可以在我们的解释文章中了解 [Linux 是什么][2]。
|
||||
|
||||
有朝一日,我们希望 Linux 发行版在未来的桌面操作市场份额中占据主导地位。但是,当前的趋势说明了什么?现在是 Linux 桌面年了吗?
|
||||
|
||||
趋势每个月都在变化。去年,与今年相比,Linux 可能市场份额更多一些。因此,跟踪最新报告至关重要。
|
||||
|
||||
在这里,我们试图以来自不同来源的每月更新报告的形式跟踪最新趋势。
|
||||
|
||||
### 操作系统市场份额:2022 年 7 月
|
||||
|
||||
> 我们每个月都会更新可用信息。请注意,上个月的信息将在下个月发布。因此,例如,当我们在 8 月份更新报告时,它将包括 7 月份的统计数据。
|
||||
|
||||
在可用的桌面操作系统(Windows、macOS 和 Chrome OS)中,Linux 通常倾向于占据**第三位**。
|
||||
|
||||
一些最新的统计数据包括:
|
||||
|
||||
| 报告 | 备注 | Linux | macOS | Windows |
|
||||
| -- | -- | -- | -- | -- |
|
||||
| [Net Marketshare][3] | | 1.68% | 6.09% | 91.40% |
|
||||
| [Statcounter][4] | | 2.76% | 14.51% | 75.21% |
|
||||
| [W3Schools][5] | 最后更新于 2022 年 5 月 | 4.2% | 9.2% | 70% |
|
||||
| [Steam 调查][6] | 在桌面游戏方面 | 1.23% | 1.74% | 97.03% |
|
||||
| [Statista][7] | 最后更新于 2022 年 6 月 | 2.42% | 14.64% | 76.33% |
|
||||
|
||||
另外,参与 [Stack Overflow 调查][8] 的开发者中,40.23% 的用户将基于 Linux 的操作系统用于个人用途,39.89% 的用户将其用于专业用途。
|
||||
|
||||
每个来源都使用不同的数据收集方法。市场份额不断变化,这就是为什么我们决定定期更新此报告,而不是单独发布关于市场份额微小变化的帖子。
|
||||
|
||||
**总体而言**,看起来 Linux 作为桌面操作系统在开发人员中很受欢迎,并最终影响游戏玩家和其他消费者作为替代操作系统。
|
||||
|
||||
*你对这种趋势有何看法?你认为 Linux 会在桌面市场份额方面超过 macOS 吗?在下面的评论中分享你的想法。*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/linux-market-share/
|
||||
|
||||
作者:[Ankush Das][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/author/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://itsfoss.com/wp-content/uploads/2017/09/linux-desktop-market-share.jpg
|
||||
[2]: https://itsfoss.com/what-is-linux/
|
||||
[3]: https://www.netmarketshare.com/operating-system-market-share.aspx?options=%7B%22filter%22%3A%7B%22%24and%22%3A%5B%7B%22deviceType%22%3A%7B%22%24in%22%3A%5B%22Desktop%2Flaptop%22%5D%7D%7D%5D%7D%2C%22dateLabel%22%3A%22Custom%22%2C%22attributes%22%3A%22share%22%2C%22group%22%3A%22platform%22%2C%22sort%22%3A%7B%22share%22%3A-1%7D%2C%22id%22%3A%22platformsDesktop%22%2C%22dateInterval%22%3A%22Monthly%22%2C%22dateStart%22%3A%222021-12%22%2C%22dateEnd%22%3A%222022-07%22%2C%22segments%22%3A%22-1000%22%7D
|
||||
[4]: https://gs.statcounter.com/os-market-share/desktop/worldwide
|
||||
[5]: https://www.w3schools.com/browsers/browsers_os.asp
|
||||
[6]: https://store.steampowered.com/hwsurvey/Steam-Hardware-Software-Survey-Welcome-to-Steam?platform=linux
|
||||
[7]: https://www.statista.com/statistics/218089/global-market-share-of-windows-7/
|
||||
[8]: https://survey.stackoverflow.co/2022/#technology-most-popular-technologies
|
@ -0,0 +1,114 @@
|
||||
[#]: subject: "Convert Docker Run Commands Into Docker-Compose Files"
|
||||
[#]: via: "https://ostechnix.com/convert-docker-run-commands-into-docker-compose-files/"
|
||||
[#]: author: "sk https://ostechnix.com/author/sk/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14970-1.html"
|
||||
|
||||
将 Docker 命令转化为 Docker Compose 文件
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/27/150501vw3eqx2xkexemmkc.jpg)
|
||||
|
||||
> 使用 Composerize 从 `docker run` 命令创建 Docker Compose 文件
|
||||
|
||||
如果你每天在正式或个人系统中使用 Docker,你应该知道有一个有用的应用叫 **Composerize**。在这个简短的指南中,我们将了解什么是 Composerize,以及如何使用 Composerize 在 Linux 中**将 `docker run` 命令转换为 Docker Compose 文件**格式。
|
||||
|
||||
### 什么是 Composerize?
|
||||
|
||||
[Docker Compose][1] 是一个用于定义和运行多容器 Docker 应用的工具。Docker Compose 只是一个 YAML 文件,我们在其中为 Docker 应用定义服务、网络和卷。
|
||||
|
||||
不是每个人都擅长写高效的 Docker Compose 文件。你们中的一些人可能会发现,甚至写一个简单的 Docker Compose 文件都很困难。不用担心! 看下 Composerize,它可以帮助你从 `docker run` 命令中创建 Docker Compose 文件。
|
||||
|
||||
Composerize 是一个命令行和基于网络的工具,可以将 `docker run` 命令转换成 Docker Compose 文件。
|
||||
|
||||
无论 `docker run` 命令是简单、简短还是冗长、复杂,都没有关系。你所要做的就是把命令传给 Conposerize。Composerize 会立即将 `docker run` 命令变成 Docker Compose 文件!
|
||||
|
||||
### 在 Linux 中安装 Composerize
|
||||
|
||||
Composerize 是作为一个网络服务提供的。所以你不需要在你的系统上安装它。如果你因为任何原因想在本地安装它,请继续阅读。
|
||||
|
||||
Composerize 可以用 npm 安装。确保你的系统中已经安装了 Nodejs。如果没有安装,请按照下面的链接来安装 Nodejs。
|
||||
|
||||
* **[如何在 Linux 上安装 NodeJS][2]**
|
||||
|
||||
安装完 Nodejs 后,运行以下命令来安装 Composerize:
|
||||
|
||||
```
|
||||
$ npm install composerize
|
||||
```
|
||||
|
||||
该命令将只为当前用户安装 Composerize。
|
||||
|
||||
如果你想在全局(全系统)安装它,请运行上述命令并加上 `-g` 选项,如下所示。
|
||||
|
||||
```
|
||||
$ npm install composerize -g
|
||||
```
|
||||
|
||||
### 用 Composerize 将 Docker 命令转换为 Docker Compose 文件
|
||||
|
||||
要将 `docker run` 命令转换为 Docker Compose 格式,只需用 Composerize 运行它,如下所示:
|
||||
|
||||
```
|
||||
$ composerize docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
|
||||
```
|
||||
|
||||
它将以 Docker Compose 文件格式生成内容。
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
version: '3.3'
|
||||
services:
|
||||
portainer:
|
||||
ports:
|
||||
- '9000:9000'
|
||||
volumes:
|
||||
- '/var/run/docker.sock:/var/run/docker.sock'
|
||||
image: portainer/portainer
|
||||
```
|
||||
|
||||
![Convert Docker Run Commands Into Docker-Compose Files With Composerize][3]
|
||||
|
||||
现在在你的 `docker-compose.yml` 文件中复制上面几行。就这么简单!
|
||||
|
||||
正如我所说,你也可以使用 Composerize 网络服务将 `docker run` 命令转换成 Docker Compose 格式。
|
||||
|
||||
进入 [https://www.composerize.com/][4],将 `docker run` 命令粘贴到框中,你就会立即得到 `docker-compose.yml` 文件!
|
||||
|
||||
![Turn Docker Run Commands Into Docker-compose Files Using Composerize][5]
|
||||
|
||||
将命令转换为 Docker Compose 文件后,到你保存 `docker-compose.yml` 文件的位置,运行以下命令来启动 Docker 应用:
|
||||
|
||||
```
|
||||
$ docker-compose up
|
||||
```
|
||||
|
||||
Composerize 是对 Docker 用户有用的工具之一。你现在可以安全地告别漫无边际的 Docker 命令了。
|
||||
|
||||
资源:
|
||||
|
||||
* [Composerize GitHub 仓库][6]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://ostechnix.com/convert-docker-run-commands-into-docker-compose-files/
|
||||
|
||||
作者:[sk][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://ostechnix.com/author/sk/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://ostechnix.com/introduction-to-docker-compose/
|
||||
[2]: https://ostechnix.com/install-node-js-linux/
|
||||
[3]: https://ostechnix.com/wp-content/uploads/2022/08/Convert-Docker-Run-Commands-Into-Docker-Compose-Files-With-Composerize.png
|
||||
[4]: https://www.composerize.com/
|
||||
[5]: https://ostechnix.com/wp-content/uploads/2022/08/Turn-Docker-Run-Commands-Into-Docker-compose-Files-Using-Composerize.png
|
||||
[6]: https://github.com/magicmark/composerize
|
@ -0,0 +1,39 @@
|
||||
[#]: subject: "Google Surpasses Microsoft In Terms Of Open Source Contributors, Says A Study"
|
||||
[#]: via: "https://www.opensourceforu.com/2022/08/google-surpasses-microsoft-in-terms-of-open-source-contributors-says-a-study/"
|
||||
[#]: author: "Laveesh Kocher https://www.opensourceforu.com/author/laveesh-kocher/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14955-1.html"
|
||||
|
||||
一项研究显示,谷歌在开源贡献方面超过了微软
|
||||
======
|
||||
|
||||
![](https://www.opensourceforu.com/wp-content/uploads/2022/08/coding-new-1536x864.jpg)
|
||||
|
||||
> 根据 Aiven 的一份新报告,谷歌已经提高了其对开源软件的投入,并在活跃贡献者方面超过了微软。
|
||||
|
||||
根据 Aiven 的报告(LCTT 译注:我没有找到这份报告),谷歌目前的活跃贡献者多于微软,这要归功于对开源代码库 GitHub 的每月提交量同比增长 20%。根据开源贡献者指数(OCSI)的数据,谷歌 7 月份有 5421 名活跃贡献者,而微软的活跃贡献者为 5268 名。
|
||||
|
||||
Aiven 联合创始人兼首席技术官 Heikki Nousiainen 说,谷歌超过微软“特别令人惊讶”。
|
||||
|
||||
“这其中的一个因素是微软对开源项目的提交逐年下降,”Nousiainen 说,“然而,微软对开发者自由和创新的投入是一致的,该公司是开源的主要参与者,甚至在 2018 年收购了 GitHub。”
|
||||
|
||||
Aiven 指出,亚马逊已经开始更加重视开源计划,其对 OpenSearch(ElasticSearch 的复刻)的支持以及 GitHub 上项目数量的增加就是证明。Nousiainen 认为,亚马逊对 OpenSearch 和 ElasticSearch 的支持代表了“该公司方向的重大改变”,以及对重大开源项目掌舵的愿望。据 Aiven 介绍,这些科技巨头正在迅速扩大对开源软件的使用。根据数据,现在来自亚马逊、微软和谷歌的活跃 GitHub 贡献者比六年前多了 300%。
|
||||
|
||||
“这项研究的总体信息是积极的,”Nousiainen 说,“在开源社区有大量的创新在继续发生,其结果使我们所有人受益。数不清的人正在为其他人树立一个榜样。”
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.opensourceforu.com/2022/08/google-surpasses-microsoft-in-terms-of-open-source-contributors-says-a-study/
|
||||
|
||||
作者:[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
|
@ -0,0 +1,106 @@
|
||||
[#]: subject: "3 NES Emulators to Play Old NES Games on Linux"
|
||||
[#]: via: "https://www.debugpoint.com/3-nes-emulators-to-play-old-nes-games-in-linux/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14974-1.html"
|
||||
|
||||
3 个可在 Linux 上玩旧 NES 游戏的 NES 模拟器
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/28/162533h41z1kynkyn5n53q.jpg)
|
||||
|
||||
> 快速了解一下在 Linux 中玩老式 NES 游戏的 3 个 NES 模拟器。此外,我们也提供了安装指南和特性介绍。
|
||||
|
||||
如果你想在最新的 Ubuntu、Linux Mint 版本中玩超级马里奥、口袋妖怪等老式复古游戏,有很多可用的模拟器。如果你想玩老式复古游戏,可以尝试以下三个模拟器。
|
||||
|
||||
### 1、ZSNES
|
||||
|
||||
[ZSNES][1] 是一个 [超级任天堂][2] 模拟器,可以在 Windows、Linux、FreeBSD 和 DOS 上运行。它作为 GUI 界面运行,你可以在其中加载 NES 游戏的 ROM。
|
||||
|
||||
这是在 Ubuntu、Debian 和 Linux Mint 中安装 ZSNES 的方法。从终端运行以下命令:
|
||||
|
||||
```
|
||||
sudo apt install zsnes
|
||||
```
|
||||
|
||||
对于 Fedora,在 [使用这个指南设置 RPM fusion][3] 后运行以下命令进行安装。因为它需要一些 Fedora 官方发行版没有提供的模块。
|
||||
|
||||
```
|
||||
sudo dnf install zsnes
|
||||
```
|
||||
|
||||
安装后,从 Dash 中搜索 ZSNES 或在终端中输入 zsnes。
|
||||
|
||||
![ZSNES Main][4]
|
||||
|
||||
![Play old NES games using ZSNES in Ubuntu][5]
|
||||
|
||||
### 2、Higan
|
||||
|
||||
higan 是 Nintendos SNES、NES、Gameboy、Gameboy Color 和 Gameboy Advance 的模拟器。它以前被称为 bsnes,并且 SNES 仿真特别完整和完善。
|
||||
|
||||
higan 努力提供最忠实的硬件仿真。它专注于准确性和简洁的代码,而不是速度和特殊功能。它旨在作为参考仿真器来记录底层硬件的工作原理。
|
||||
|
||||
这是从命令行安装 higan 的方法。
|
||||
|
||||
```
|
||||
sudo apt install higan
|
||||
```
|
||||
|
||||
![Higan Running in Ubuntu][6]
|
||||
|
||||
### 3、GFCEU
|
||||
|
||||
GNOME FCE Ultra(gfceu)是用于 GNOME 桌面的 FCE Ultra 任天堂娱乐系统的图形前端。 Gfceu 简化了用户的游戏体验,并提供了干净、简单和直观的界面。
|
||||
|
||||
从终端运行以下命令,为 Ubuntu、Linux Mint 和相关发行版安装 gfceu。
|
||||
|
||||
```
|
||||
sudo apt install gfceu
|
||||
```
|
||||
|
||||
对于 Fedora,运行以下命令进行安装。请确保在运行此命令之前 [使用这个指南设置 RPM fusion][7]。因为它需要某些官方 Fedora 发行版未提供的软件包。
|
||||
|
||||
```
|
||||
sudo dnf install gfceu
|
||||
```
|
||||
|
||||
![gfceu running in Ubuntu][8]
|
||||
|
||||
### 下载游戏 ROM
|
||||
|
||||
有数百个网站提供 NES ROM。这里有几个你可以下载 NES ROM 的地方。下载后,解压缩并从模拟器菜单中打开。
|
||||
|
||||
* [https://romsmania.cc/roms/nintendo][9]
|
||||
* [https://romsmode.com/][12]
|
||||
* [www.emuparadise.me][13]
|
||||
|
||||
使用这些模拟器享受和玩旧 NES 游戏。请让我知道你最喜欢哪一个。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/3-nes-emulators-to-play-old-nes-games-in-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]: http://www.zsnes.com/
|
||||
[2]: https://en.wikipedia.org/wiki/Super_Nintendo_Entertainment_System
|
||||
[3]: https://www.debugpoint.com/enable-rpm-fusion-fedora-rhel-centos/
|
||||
[4]: https://www.debugpoint.com/wp-content/uploads/2016/07/ZSNES-Main.png
|
||||
[5]: https://www.debugpoint.com/wp-content/uploads/2016/07/ZSNES-Running-in-Ubuntu.png
|
||||
[6]: https://www.debugpoint.com/wp-content/uploads/2016/07/Higan-Running-in-Ubuntu.png
|
||||
[7]: https://www.debugpoint.com/enable-rpm-fusion-fedora-rhel-centos/
|
||||
[8]: https://www.debugpoint.com/wp-content/uploads/2016/07/gfceu-running-in-Ubuntu.png
|
||||
[9]: https://romsmania.cc/roms/nintendo
|
||||
[12]: https://romsmode.com/
|
||||
[13]: http://www.emuparadise.me/Nintendo_Entertainment_System_ROMs/13
|
@ -0,0 +1,188 @@
|
||||
[#]: subject: "How to List USB Devices Connected to Your Linux System"
|
||||
[#]: via: "https://itsfoss.com/list-usb-devices-linux/"
|
||||
[#]: author: "Anuj Sharma https://itsfoss.com/author/anuj/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14981-1.html"
|
||||
|
||||
如何列出连接到 Linux 系统的 USB 设备
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/30/094927nu106ijzz0iiiwj1.jpg)
|
||||
|
||||
你如何列出 Linux 中的 USB 设备?
|
||||
|
||||
这个问题可以有两种含义。
|
||||
|
||||
* 你的系统上有(检测到)多少个 USB 端口?
|
||||
* 系统安装(插入)了多少个 USB 设备/磁盘?
|
||||
|
||||
大多数情况下,人们有兴趣了解哪些 USB 设备连接到系统。这可能有助于对 USB 设备进行故障排除。
|
||||
|
||||
最可靠的方法是使用这个命令:
|
||||
|
||||
```
|
||||
lsusb
|
||||
```
|
||||
|
||||
它显示了网络摄像头、蓝牙和以太网端口以及 USB 端口和挂载的 USB 驱动器。
|
||||
|
||||
![list usb with lsusb command linux][1]
|
||||
|
||||
但是理解 `lsusb` 的输出并不容易,当你只想查看和访问已挂载的 USB 驱动器时,你可能不需要那么复杂。
|
||||
|
||||
我将向你展示可用于列出连接到系统的 USB 设备的各种工具和命令。
|
||||
|
||||
除非另有说明,在我的例子中连接了一个 2GB 的 U 盘、1TB 的外置硬盘、通过 MTP 连接的 Android 智能手机,以及 USB 鼠标。
|
||||
|
||||
让我从桌面用户最简单的选项开始。
|
||||
|
||||
### 以图形方式检查连接的 USB 设备
|
||||
|
||||
你的发行版的文件管理器可以用来查看连接到你的计算机的 USB 存储设备。正如你在下面的 Nautilus(GNOME 文件管理器)的截图中看到的那样。
|
||||
|
||||
连接的设备显示在边栏中(此处仅显示 USB 存储设备)。
|
||||
|
||||
![Nautilus showing connected USB devices][2]
|
||||
|
||||
你还可以使用 GNOME “<ruby>磁盘<rt>Disks</rt></ruby>” 或 Gparted 等 GUI 应用来查看、格式化和分区连接到计算机的 USB 存储设备。默认情况下,大多数使用 GNOME 桌面环境的发行版都预装了 GNOME “磁盘”。
|
||||
|
||||
这个应用也可以用作一个非常好的 [分区管理器][3]。
|
||||
|
||||
![Use GNOME Disks to list mounted USB devices][4]
|
||||
|
||||
*图形工具足够了*。让我们讨论可用于列出 USB 设备的命令。
|
||||
|
||||
### 使用 mount 命令列出挂载的 USB 设备
|
||||
|
||||
`mount` 命令用于挂载 Linux 中的分区。你还可以使用相同的命令列出 USB 存储设备。
|
||||
|
||||
通常,USB 存储挂载在 `media` 目录中。因此,在媒体上过滤 `mount` 命令的输出将为你提供所需的结果。
|
||||
|
||||
```
|
||||
mount | grep media
|
||||
```
|
||||
|
||||
![][5]
|
||||
|
||||
### 使用 df 命令
|
||||
|
||||
[df 命令][6] 是一个标准的 UNIX 命令,用于了解可用磁盘空间的大小。你还可以使用此命令列出已连接的 USB 存储设备。
|
||||
|
||||
```
|
||||
df -Th | grep media
|
||||
```
|
||||
|
||||
![Use df command to list mounted USB drives][7]
|
||||
|
||||
### 使用 lsblk 命令
|
||||
|
||||
`lsblk` 命令用于列出终端中的块设备。因此,这里也通过过滤包含 `media` 关键字的输出,你可以获得所需的结果,如下面的截图所示。
|
||||
|
||||
```
|
||||
lsblk | grep media
|
||||
```
|
||||
|
||||
![Using lsblk to list connected USb devicesUsing blkid to list connected USb devices][8]
|
||||
|
||||
如果你想知道,也可以使用 `blkid` 命令了解 UUID、标签、块大小等。
|
||||
|
||||
此命令提供更多输出,因为你的内部驱动器也被列出。因此,你必须参考上述命令来识别你希望了解的设备。
|
||||
|
||||
```
|
||||
sudo blkid
|
||||
```
|
||||
|
||||
![Using blkid to list connected USb devices][9]
|
||||
|
||||
### 使用 fdisk
|
||||
|
||||
`fdisk` 是一款不错的老式命令行分区管理器,它还可以列出连接到你计算机的 USB 存储设备。这个命令的输出也很长。因此,通常连接的设备会列在底部,如下所示:
|
||||
|
||||
```
|
||||
sudo fdisk -l
|
||||
```
|
||||
|
||||
![Use fidsk to list usb devices][10]
|
||||
|
||||
### 检查 /proc/mounts
|
||||
|
||||
通过检查 `/proc/mounts` 文件,你可以列出 USB 存储设备。如你所见,它向你显示了文件系统使用的挂载选项以及挂载点。
|
||||
|
||||
```
|
||||
cat /proc/mounts | grep media
|
||||
```
|
||||
|
||||
![][11]
|
||||
|
||||
### 使用 lsusb 命令显示所有 USB 设备
|
||||
|
||||
我们重新审视有名的 `lsusb` 命令。
|
||||
|
||||
Linux 内核开发人员 [Greg Kroah-Hartman][12] 开发了这个方便的 [usbutils][13] 程序。这为我们提供了两个命令,即 `lsusb` 和 `usb-devices` 来列出 Linux 中的 USB 设备。
|
||||
|
||||
`lsusb` 命令列出系统中有关 USB 总线的所有信息。
|
||||
|
||||
```
|
||||
lsusb
|
||||
```
|
||||
|
||||
如你所见,此命令还显示了我已连接的鼠标和智能手机,这与其他命令(只能列出 USB 存储设备)不同。
|
||||
|
||||
![][14]
|
||||
|
||||
第二个命令 `usb-devices` 提供了更多详细信息,但未能列出所有设备,如下所示。
|
||||
|
||||
```
|
||||
usb-devices
|
||||
```
|
||||
|
||||
![][15]
|
||||
|
||||
Greg 还开发了一个名为 [usbview][16] 的小型 GTK 应用。此应用向你显示连接到计算机的所有 USB 设备的列表。
|
||||
|
||||
该应用可在大多数 Linux 发行版的官方仓库中找到。你可以使用发行版的 [包管理器][17] 轻松安装 `usbview` 包。
|
||||
|
||||
安装后,你可以从应用菜单启动它。你可以选择任何列出的设备以获取详细信息,如下面的截图所示。
|
||||
|
||||
![][18]
|
||||
|
||||
### 总结
|
||||
|
||||
这里列出的大多数方法仅限于 USB 存储设备。只有两种方法可以列出其他外围设备; usbview 和 usbutils。 我想我们应该感谢 Linux 内核开发人员 Greg 开发了这些方便的工具。
|
||||
|
||||
我知道还有很多方法可以列出连接到系统的 USB 设备。 欢迎你提出建议。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/list-usb-devices-linux/
|
||||
|
||||
作者:[Anuj Sharma][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/author/anuj/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://itsfoss.com/wp-content/uploads/2022/08/list-usb-with-lsusb-command-linux.png
|
||||
[2]: https://itsfoss.com/wp-content/uploads/2022/08/nautilus-usb.png
|
||||
[3]: https://itsfoss.com/partition-managers-linux/
|
||||
[4]: https://itsfoss.com/wp-content/uploads/2022/08/gnome-disks-usb.png
|
||||
[5]: https://itsfoss.com/wp-content/uploads/2022/08/mount-cmd-usb.png
|
||||
[6]: https://linuxhandbook.com/df-command/
|
||||
[7]: https://itsfoss.com/wp-content/uploads/2022/08/df-cmd-usb.png
|
||||
[8]: https://itsfoss.com/wp-content/uploads/2022/08/blkid-cmd-usb.png
|
||||
[9]: https://itsfoss.com/wp-content/uploads/2022/08/blkid-cmd-usb.png
|
||||
[10]: https://itsfoss.com/wp-content/uploads/2022/08/fdisk-cmd-usb.png
|
||||
[11]: https://itsfoss.com/wp-content/uploads/2022/08/proc-dir-usb.png
|
||||
[12]: https://en.wikipedia.org/wiki/Greg_Kroah-Hartman
|
||||
[13]: https://github.com/gregkh/usbutils
|
||||
[14]: https://itsfoss.com/wp-content/uploads/2022/08/lsusb-cmd.png
|
||||
[15]: https://itsfoss.com/wp-content/uploads/2022/08/usb-devices-cmd.png
|
||||
[16]: https://github.com/gregkh/usbview
|
||||
[17]: https://itsfoss.com/package-manager/
|
||||
[18]: https://itsfoss.com/wp-content/uploads/2022/08/usbview.png
|
@ -0,0 +1,122 @@
|
||||
[#]: subject: "Fedora 37: Top New Features and Release Wiki"
|
||||
[#]: via: "https://www.debugpoint.com/fedora-37/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14968-1.html"
|
||||
|
||||
Fedora 37 新功能披露
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/26/000924lz0vl82vsq2zf0v7.jpg)
|
||||
|
||||
> 关于 Fedora 37 及其新特性、发布细节等等。
|
||||
|
||||
Fedora 37 的开发工作已经结束,Beta 测试版即将来临。在这个阶段,Fedora 37 的功能和软件包已经最终确定。
|
||||
|
||||
在这篇常规的功能指南页面中,我总结了你应该知道的关于 Fedora 37 的基本功能,让你对预期的功能有一个概念。但是在这之前,先看看暂定的时间表:
|
||||
|
||||
* 测试版的发布日期是 2022 年 9 月 13 日。后备日期是 2022 年 9 月 20 日。
|
||||
* Fedora 37 最终版计划于 2022 年 10 月 18 日发布。后备日期是 2022 年 10 月 25 日。
|
||||
|
||||
![Fedora 37 Workstation with GNOME 43][1]
|
||||
|
||||
### Fedora 37 的主要新功能
|
||||
|
||||
#### 内核
|
||||
|
||||
首先是构成核心的关键项目。Fedora 37 采用了 Linux 内核 5.19,这是目前最新的主线内核。Linux 内核 5.19 带来了一些基本功能,比如修复了 Retbleed 漏洞、支持 ARM、支持苹果 M1 NVMe SSD 控制器以及许多此类功能,你可以在我们的 [内核功能指南][2] 中了解更多。
|
||||
|
||||
使用最新内核的好处是,你可以保证你使用的是此时此刻最新、最好的硬件支持。
|
||||
|
||||
其次,桌面环境在这个版本中得到了更新。
|
||||
|
||||
#### 桌面环境
|
||||
|
||||
Fedora 37 是第一个带来令人惊叹的 GNOME 43 桌面的发行版,它带来了一些优秀的功能,比如:
|
||||
|
||||
* [重新改版后的快速设置功能][3],带有药片式按钮
|
||||
* 移植了 GTK4 和 libadwaita 的文件管理器 v43(nautilus)
|
||||
* 带有橡皮筋、徽章、响应式侧边栏等功能的文件管理器
|
||||
* 更新了 GNOME Web,支持 WebExtension API
|
||||
|
||||
还有许多你期待了多年的功能。请查看我的 [GNOME 43 功能指南][4] 以了解更多。
|
||||
|
||||
Fedora 37 带来了 KDE Plasma 5.26 桌面环境,包括大量的新功能、性能改进和错误修复。KDE Plasma 桌面最值得注意的功能包括:
|
||||
|
||||
* 一个更新的概览屏幕
|
||||
* 深色和浅色主题的动态墙纸
|
||||
* 更新的 KDE 框架和应用程序
|
||||
|
||||
由于轻量级桌面 LXQt 更新了稳定版 1.1.0,它来到了 Fedora 37 中。LXQt 1.1.0 为深色主题带来了一个外观统一的默认调色板、应用程序菜单的两个变体(简单和紧凑)和重新排列的 GTK 设置。此外,LXQt 1.1.0 也开始了 Qt 6.0 桌面组件移植的初始工作。所有这些 bug 修复和增强功能都在 Fedora LXQt 版本中出现。
|
||||
|
||||
此外,其他主要的桌面版本由于没有重要的新的更新到来,仍然保持在当前版本,即 Xfce 4.16 和 MATE 1.24 用在各自的 Fedora 定制版中。
|
||||
|
||||
让我们看看这个版本中影响所有 Fedora 定制版的系统级变化是什么。
|
||||
|
||||
#### 系统级的变化
|
||||
|
||||
最重要的变化是对树莓派 4 的正式支持。得益于多年来的努力,你现在可以在最喜欢的树莓派上享受到开箱即用的 Fedora 37 了。
|
||||
|
||||
Fedora Linux 一直是推动技术发展的先锋,在其他发行版之前就采用了最新的功能。因此,现在在 KDE Plasma(和 Kinoite)和不同的定制版中,SDDM 显示管理器默认采用了 Wayland。这样,从 Fedora 发行版方面就完成了 Wayland 各个定制版的过渡。
|
||||
|
||||
正如我 [之前的报道][5],Fedora Linux 37 计划为我们提供 Anaconda 的网页安装程序的预览镜像。它可能不会在发布后立即可用,但它应该在发布后的几天内出现。
|
||||
|
||||
其他值得注意的功能包括将默认的主机名从 `fedora` 改为 `localhost`,以避免一些第三方系统配置检测问题。
|
||||
|
||||
除此之外,Fedora Core OS 被打造为 Fedora 官方版本,现在与服务器版、物联网版和云计算版同列,以便你可以更好地发现和采用它。最小资源占用的 Fedora Core OS 主要用于容器工作负载,并带来了自动更新和额外的功能。
|
||||
|
||||
遵循传统,这个版本也有一个 [全新的墙纸][6],有夜间和白天两个版本。我必须得说,它看起来很棒(见上面的桌面图片)。
|
||||
|
||||
最后,在这个版本中,Fedora 删除了 32 位的 Java 包,包括 JDK 8、11 和 17,因为使用率很低。此外,openssl 1.1 软件包也被弃用。
|
||||
|
||||
工具链、应用程序和编程栈更新如下:
|
||||
|
||||
* Glibc 2.36 和 Binutils 2.38
|
||||
* Node.js 18.x
|
||||
* Perl 5.36
|
||||
* Python 3.11
|
||||
|
||||
### Fedora 37 功能摘要
|
||||
|
||||
那么,这个版本的功能就到此为止了。下面是对 Fedora 37 功能的总结:
|
||||
|
||||
* Linux 内核 5.19
|
||||
* GNOME 43
|
||||
* KDE Plasma 5.26
|
||||
* Xfce 4.16
|
||||
* MATE 1.24
|
||||
* LXQt 1.1.0
|
||||
* 新的基于网页的安装程序的预览镜像
|
||||
* SDDM 显示管理器默认采用 Wayland(在 KDE Plasma 和其他桌面环境中)。
|
||||
* 官方支持树莓派 4
|
||||
* Fedora Core OS 成为官方版本
|
||||
* 一些关键软件包放弃了 32 位支持
|
||||
* 还有相关的工具链和编程语言更新。
|
||||
|
||||
如果你有空闲时间,你可以 [体验一下][7]。虽然,它是非常不稳定的,不推荐运行测试版之前的开发版。
|
||||
|
||||
**那么,这个版本中你最喜欢的功能是什么?请在评论区告诉我**。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/fedora-37/
|
||||
|
||||
作者:[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.debugpoint.com/wp-content/uploads/2022/08/Fedora-37-Workstation-with-GNOME-43-1024x572.jpg
|
||||
[2]: https://www.debugpoint.com/linux-kernel-5-19/
|
||||
[3]: https://www.debugpoint.com/gnome-43-quick-settings/
|
||||
[4]: https://www.debugpoint.com/gnome-43/
|
||||
[5]: https://debugpointnews.com/fedora-37-anaconda-web-ui-installer/
|
||||
[6]: https://debugpointnews.com/fedora-37-wallpaper/
|
||||
[7]: https://dl.fedoraproject.org/pub/fedora/linux/development/37/Workstation/x86_64/iso/
|
@ -0,0 +1,96 @@
|
||||
[#]: subject: "Linux-First AI Image Upscaler Upscayl Released its First Version"
|
||||
[#]: via: "https://news.itsfoss.com/upscayl-version-1-release/"
|
||||
[#]: author: "Abhishek https://news.itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14976-1.html"
|
||||
|
||||
Linux 优先的 AI 图像提升器 Upscayl 发布了第一个版本
|
||||
======
|
||||
|
||||
> 你不是每天都能遇到一个采用 “Linux 优先” 方式的应用程序。
|
||||
|
||||
![Linux-First AI Image Upscaler Upscayl Released its First Version][1]
|
||||
|
||||
你是不是有一张世纪初的像素化、低分辨率的图片?由于人工智能的进步,你可以轻松地将像素化的图像提升为分辨率更好的图像。
|
||||
|
||||
使用普通的图像编辑器需要人工的努力来提升图像。
|
||||
|
||||
有大量的在线人工智能图像提升器,但是你不能信任它们对你的数据的处理。
|
||||
|
||||
一个新的项目试图解决这个问题,为你提供一个简单的桌面应用程序,让你在一次点击中增强低分辨率照片。
|
||||
|
||||
它的第一个版本已经发布。
|
||||
|
||||
### Upscayl 的功能
|
||||
|
||||
[Upscayl][2] 是一个跨平台的应用程序,以 Linux 优先的理念构建。
|
||||
|
||||
这仅仅意味着 Linux 的构建得到优先考虑,但其他平台也会得到支持。
|
||||
|
||||
Upscayl 使用 Python 和 JavaScript 开发,给出了一个简单的界面,你可以选择输入图片和输出文件夹,然后点击 “Upscayl” 按钮来增强图片。
|
||||
|
||||
### 使用 Upscayl
|
||||
|
||||
我的电脑上没有太多模糊的照片。并不是说我是一个优秀的摄影师,只是懒得在成千上万的照片中寻找它们。
|
||||
|
||||
不过,我还是设法弄到了一张 2011 年的模糊的老照片(那是 11 年前的照片,现在可以说是老照片了)。
|
||||
|
||||
![厨房的模糊老照片][4]
|
||||
|
||||
不要因为我随手拍了一张厨房柜台的照片而对我做出评价。一定有一个很好的理由(或者我觉得)。
|
||||
|
||||
无论如何。我试着用 Upscayl 对图片进行放大。
|
||||
|
||||
![使用 Upscayl][5]
|
||||
|
||||
这需要相当大的处理能力,但我的 8 核、第 11 代 i7 处理器和 16GB 内存可以轻松应对。
|
||||
|
||||
![Upscayl 工作时 CPU 的使用情况][6]
|
||||
|
||||
单张图片的处理花了大约 4 分钟,435KB 的图片最终变成了 24MB 的图片。说实话,我几乎没有注意到明显的差异。
|
||||
|
||||
![由 Upscayl 放大的图像][7]
|
||||
|
||||
我想把最后的结果嵌入这里的文章中。但是上传一张 24MB 的图片对我的服务器和你的浏览器来说都有点过分。
|
||||
|
||||
### 安装 Upscayl
|
||||
|
||||
不过,我这个不怎么成功的实验不应该阻止你自己去尝试它。
|
||||
|
||||
目前,该应用程序可用于 Linux。对 Windows 和 macOS 的支持正在计划中。
|
||||
|
||||
你可以得到 Upscayl 的 AppImage 和 Flatpak 软件包。我使用的是 AppImage 版本,你可以使用你喜欢的任何一种。
|
||||
|
||||
这些文件可以在发布页面上找到。
|
||||
|
||||
> **[下载 Upscayl][8]**
|
||||
|
||||
如果你喜欢这个项目,别忘了在 GitHub 上给它加星。
|
||||
|
||||
> **[GitHub - TGS963/upscayl][9]**
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/upscayl-version-1-release/
|
||||
|
||||
作者:[Abhishek][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/abhishek/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/content/images/size/w1200/2022/08/upscayl-image-upscaler.png
|
||||
[2]: https://github.com/TGS963/upscayl
|
||||
[3]: https://news.itsfoss.com/content/media/2022/08/upscayl-in-action.mp4
|
||||
[4]: https://news.itsfoss.com/content/images/2022/08/old-blurry-photo.jpg
|
||||
[5]: https://news.itsfoss.com/content/images/2022/08/Using-Upscayl-for-image-processing.png
|
||||
[6]: https://news.itsfoss.com/content/images/2022/08/Upscayl-CPU-usage.png
|
||||
[7]: https://news.itsfoss.com/content/images/2022/08/Upscayl-final-result.png
|
||||
[8]: https://github.com/TGS963/upscayl/releases
|
||||
[9]: https://github.com/TGS963/upscayl
|
@ -0,0 +1,69 @@
|
||||
[#]: subject: "The 80-Year Computer Scientist Who Termed 'Unix' Adds Unicode Support to AWK Code"
|
||||
[#]: via: "https://news.itsfoss.com/unix-awk-unicode/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14964-1.html"
|
||||
|
||||
80 高龄的计算机科学家曾为 “Unix” 命名,如今为 AWK 代码添加了 Unicode 支持
|
||||
======
|
||||
|
||||
> 布莱恩·克尼汉在 80 岁的时候还在积极为他的原始项目 AWK 增加代码贡献。这真是鼓舞人心!
|
||||
|
||||
![这位 80 岁的计算机科学家曾提出 “Unix” 这一名字,在 AWK 代码中加入了 Unicode 支持][1]
|
||||
|
||||
<ruby>布莱恩·克尼汉<rt>Brian Kernighan</rt></ruby> 因其与 Unix 的创造者 <ruby>肯·汤普森<rt>Ken Thompson</rt></ruby> 和 <ruby>丹尼斯·里奇<rt>Dennis Ritchie</rt></ruby> 一起的工作而广为人知。他对 Unix 的发展做出了重大贡献。
|
||||
|
||||
不仅如此,布莱恩·克尼汉还提出了 “Unix” 这个名字,并创造了 “Hello, world” 作为程序的测试短语。
|
||||
|
||||
他也是《C 编程语言》一书的共同作者(另一位是丹尼斯·里奇)。因此,可以说他是你所知道的关于 Unix、Linux、BSD 和 C 编程语言的演变的重要组成部分。
|
||||
|
||||
而且,作为一位如今已 80 岁的老人家,他似乎投入了一些时间来为 AWK(一种他在上世纪 70 年代共同创造的脚本语言)增加了一个新的功能。
|
||||
|
||||
💙 这真是妙极了,对吗?而且,听起真是鼓舞人心!
|
||||
|
||||
注:AWK 仍然是一个处理文本和提取数据的强大工具,忠实于它的最初目的。如果你感到好奇,你可以在 [freeCodeCamp][2] 上了解更多关于它的信息。
|
||||
|
||||
### 为 AWK 添加 Unicode 支持
|
||||
|
||||
最近,[The Register][3] 通过一篇发表在 YouTube 上的近期采访,发现了这个功能的增加。
|
||||
|
||||
从技术上讲,这项贡献早在几个月前就有了,但现在它才得到人们的关注。
|
||||
|
||||
![和 Brian Kernighan 喝杯咖啡 - Computerphile][4]
|
||||
|
||||
当然,这个功能的增加对很多人来说可能不是什么大事。但是,它背后的努力,以及谁贡献了它,就有了天壤之别。
|
||||
|
||||
此外,有趣的是,他并不完全了解 Git 的工作原理。所以,考虑到这一点,我认为他在这里的提交做得相当好。
|
||||
|
||||
在这个提交 “[附上 BWK 的邮件 - onetrueawk/awk@9ebe940][5]” 中,他提到:
|
||||
|
||||
> 一旦我搞清楚了(并做了一些检查,我将尝试提交一个拉取请求。我希望我更了解 git,但尽管有你的帮助,我仍然没能正确地理解,所以这可能需要一段时间。
|
||||
|
||||
如果你对 Unix 的原始创造者和贡献者以及一路走来的许多重要创新有好奇心,我建议你观看上面链接的采访。
|
||||
|
||||
你也可以在 [普林斯顿大学网站][6] 上查看他的更多工作和最近的书籍。
|
||||
|
||||
💬 那么,你对这位 80 岁的 Unix 传奇人物的代码贡献有何看法?你有什么特别佩服他的地方吗?请在下面的评论中分享你的想法。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/unix-awk-unicode/
|
||||
|
||||
作者:[Ankush Das][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/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/content/images/size/w1200/2022/08/brian-awk-creator.jpg
|
||||
[2]: https://www.freecodecamp.org/news/the-linux-awk-command-linux-and-unix-usage-syntax-examples/
|
||||
[3]: https://www.theregister.com/2022/08/23/universal_unix_tool_awk_gets/
|
||||
[4]: https://youtu.be/GNyQxXw_oMQ
|
||||
[5]: https://github.com/onetrueawk/awk/commit/9ebe940cf3c652b0e373634d2aa4a00b8395b636
|
||||
[6]: https://www.cs.princeton.edu/~bwk/
|
@ -0,0 +1,60 @@
|
||||
[#]: subject: "My open source journey from user to contributor to CTO"
|
||||
[#]: via: "https://opensource.com/article/22/8/my-open-source-career-story"
|
||||
[#]: author: "Jesse White https://opensource.com/users/jwhite-0"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "aftermath0703"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14971-1.html"
|
||||
|
||||
从用户到贡献者到 CTO 的开源之旅
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/27/154503q9yw0rewy2ge2r8f.jpg)
|
||||
|
||||
> 任何考虑在开源领域发展的人都具有无限的可能性。下面是我的故事。
|
||||
|
||||
当人们问我最喜欢开源的什么时,我的回答很简单:那就是 *开放性* 。在开源中,社区开发者和贡献者所做的工作是在公共领域的,所有人都能看到并从中受益。我对这一理念爱不释手。
|
||||
|
||||
有多少人可以对他们的劳动成果这样说?有多少人,也许在 50 年后,可以回过头来说:“看看我那天写的代码,有几百/几千/几万人从中受益。”我觉得这比从事那些对世界上大多数人来说都是隐秘的软件工作更令人无比兴奋。
|
||||
|
||||
我很幸运,我的工作使我置身于一个开源和企业交叉的有趣领域中。如今,我是 [OpenNMS 集团][2] 的首席技术官,这家公司负责维护 [OpenNMS 项目][3]。OpenNMS 是一个领先的开源网络监控和管理平台。
|
||||
|
||||
虽然我现在的角色让我牢牢扎根于开源领域,但我是以用户和贡献者身份开始的。
|
||||
|
||||
2007 年,我得到了我的第一份真正的技术工作,在加拿大蒙特利尔的电信服务提供商 Datavalet 技术公司从事网络分析。在五年的时间内,我成长为解决方案架构师,任务是帮助公司选择网络管理解决方案。我们选择了 OpenNMS,正是通过这次经历,我认识到了开源的真正力量。
|
||||
|
||||
在平台上线时,我们发现了一些缺失的功能,这些功能将有助于优化我们的体验。一位来自 OpenNMS 集团的代表在现场帮助我们进行部署,并建议我参加社区即将举行的 DevJam,与核心开发人员一起建立我们需要的功能。
|
||||
|
||||
在 DevJam 期间,我很快就融入了团队和社区。我们卷起袖子,开始编码,以创建 Datavalet 所需的增强功能。在几天之内,这个附加的功能就准备好了。这是一次令人惊叹的变革性经历,让我真正看到了开源的力量。
|
||||
|
||||
一年后,我离职了,在康科迪亚大学全日制学习数学。正是在那里,我再次有机会与 OpenNMS 团队合作,这一次是在该年的谷歌代码之夏的一个项目上。在这个年度计划中,参与者的目标是成功完成开源软件开发项目。
|
||||
|
||||
代码之夏对我来说是一次改变职业生涯的经历。OpenNMS 的两位负责人参加了我们的项目演示,一年后,OpenNMS 团队邀请我作为一名全栈开发人员加入。
|
||||
|
||||
我努力工作,迅速晋升,并在 2015 年被任命为首席技术官。我认为这是一项个人成就,也再次验证了开源世界的特别之处。如果你喜欢与社区合作,热爱你所做的工作,你的贡献很快就会得到认可。
|
||||
|
||||
开源精神也影响了我从个人贡献者到首席技术官的发展,我现在领导着一个由 50 多人组成的产品开发团队。社区本质上是平等的,我与社区贡献者一起工作的经验教会了我如何在环境中领导,而不是控制。
|
||||
|
||||
我经历了一段奇妙的开源旅程,从用户到贡献者,再到一家开源公司的高管。开源方法超越了技术,因为专有开发环境中经常存在的障碍的进入和增长可以通过协作、透明和社区来克服。因此,对于任何考虑在开源领域工作的人来说,可能性是无限的。我就是证明。
|
||||
|
||||
我们生活在一个人们正在深刻审视自己的生活及其对世界的影响的时代。在开源公司工作特别有意义,因为我可以直接与用户社区互动并影响他们。终端用户和开发人员之间的经典屏障被打破了,我可以确切地看到我的工作如何改变人们的日常生活,或者激励人们为项目做出贡献。通过对一个项目的共同热爱来建立社区,建立持续一生的联系。
|
||||
|
||||
我知道这对我来说都是真实的,这也是为什么我对我的工作如此热情。我是一个彻头彻尾的开源极客,并以此为荣。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/8/my-open-source-career-story
|
||||
|
||||
作者:[Jesse White][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[aftermath0703](https://github.com/aftermath0703)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/jwhite-0
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/career_journey_road_gps_path_map_520.png
|
||||
[2]: https://www.opennms.com/
|
||||
[3]: https://www.opennms.com/
|
@ -0,0 +1,82 @@
|
||||
[#]: subject: "Want to Help Improve GNOME? This New Tool Gives You the Chance!"
|
||||
[#]: via: "https://news.itsfoss.com/gnome-improve-tool/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14972-1.html"
|
||||
|
||||
想帮助改善 GNOME 吗?这个新工具给了你这个机会!
|
||||
======
|
||||
|
||||
> 这个新的工具,使 GNOME 用户能够提供他们的配置和使用意见,以帮助改善用户体验。
|
||||
|
||||
![想帮助改善 GNOME 吗? 这个新工具给了你机会!][1]
|
||||
|
||||
GNOME 带来了一个工具,可以让用户匿名提供他们的配置、扩展和 GNOME 调整设置等方面的意见。
|
||||
|
||||
这应该有助于 GNOME 了解更多的用户偏好,并做出更好的增强用户体验的决定。
|
||||
|
||||
有趣的是,是红帽公司的一名实习生(Vojtech Stanek)创造了这个工具。
|
||||
|
||||
### GNOME 信息收集:准备好安装了吗?
|
||||
|
||||
![gnome info collect terminal][2]
|
||||
|
||||
该工具(`gnome-info-collect`)是一个简单的终端程序,你需要下载、安装并运行它来与 GNOME 分享数据。
|
||||
|
||||
以下是该工具需要从你的 GNOME 系统中收集的内容:
|
||||
|
||||
* 硬件信息(包括制造商和型号)。
|
||||
* 系统设置(包括工作区配置、共享功能、SSH 等)。
|
||||
* 安装并启用的 GNOME shell 扩展。
|
||||
* 应用程序信息(如已安装的应用程序和收藏的应用程序)。
|
||||
* Linux 发行版和版本。
|
||||
* Flatpak 和 Flathub 状态。
|
||||
* 默认浏览器。
|
||||
* 机器 ID + 用户名的 [加盐哈希][3]。
|
||||
|
||||
你可以在其 [GitLab 页面][4] 上找到适合你的发行版的软件包和收集数据的更多细节。
|
||||
|
||||
如果你有一个基于 Ubuntu 的发行版,你可以通过输入以下内容来安装它:
|
||||
|
||||
```
|
||||
sudo snap install --classic gnome-info-collect
|
||||
```
|
||||
|
||||
安装完毕后,在终端使用以下命令将其启动:
|
||||
|
||||
```
|
||||
gnome-info-collect
|
||||
```
|
||||
|
||||
接下来,它会显示它打算与 GNOME 共享的数据。所以,如果你觉得没问题,你可以选择将数据上传到 GNOME 的服务器上。
|
||||
|
||||
![][5]
|
||||
|
||||
考虑到这些数据是匿名的,它应该可以帮助 GNOME 了解他们的用户喜欢什么,并随着时间的推移专注于这些改进。
|
||||
|
||||
> **[下载 gnome-info-collect][6]**
|
||||
|
||||
你对 GNOME 的这个新的数据收集工具有什么看法?请在下面的评论中分享你的想法。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/gnome-improve-tool/
|
||||
|
||||
作者:[Ankush Das][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/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/content/images/size/w1200/2022/08/gnome-improvement-tool.jpg
|
||||
[2]: https://news.itsfoss.com/content/images/2022/08/gnome-info-collect-terminal.png
|
||||
[3]: https://en.wikipedia.org/wiki/Salt_(cryptography)
|
||||
[4]: https://gitlab.gnome.org/vstanek/gnome-info-collect/
|
||||
[5]: https://news.itsfoss.com/content/images/2022/08/gnome-info-collect-sharing.png
|
||||
[6]: https://gitlab.gnome.org/vstanek/gnome-info-collect/
|
@ -0,0 +1,39 @@
|
||||
[#]: subject: "Wii U Emulator Cemu Going Open Source Is Significant For Emulation, Here’s Why"
|
||||
[#]: via: "https://www.opensourceforu.com/2022/08/wii-u-emulator-cemu-going-open-source-is-significant-for-emulation-heres-why/"
|
||||
[#]: author: "Laveesh Kocher https://www.opensourceforu.com/author/laveesh-kocher/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14979-1.html"
|
||||
|
||||
Wii U 模拟器 Cemu 走向开源对仿真技术意义重大
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202208/29/152146nvs93gzs720ftfy8.jpg)
|
||||
|
||||
Wii U 模拟器 Cemu 的开发者上周二宣布了一个重要的 2.0 版本发布,首次交付了 Linux 上的二进制文件,并开源了他们八年的成果。Cemu 是一个 Wii U 模拟器,并于 2017 年创造了历史 —— 每个月可以通过 Patreon 获得支持其发展的数千美元赞助。Cemu 以其在 Patreon 上曾短暂达到 25,000 美元的最高收入而为人所知,这引起了人们对“仿真是否道德”的关注,特别是它被用来换取金钱,而项目却是“闭源的”而不是“开源”的 —— 也就是说源代码没有向公众开放。
|
||||
|
||||
仿真社区保护自己免受法律诉讼的主要方式之一是向公众提供其源代码,允许像任天堂这样的“诉讼公司”检查它,并验证在反向工程过程中没有使用他们的专有代码。
|
||||
|
||||
据 Exzap 称,Cemu 对 Linux 的支持“仍然相当粗糙”,但他相信随着更多的模拟器开发者熟悉 Cemu,并开始为该项目做出贡献,这种情况将迅速改变。Cemu 以前只兼容 Windows,但现在支持 Linux,可以在 Steam Deck 上快速安装。在 Cemu 引入 Flatpak 支持一键安装之前,在 Deck 上使用它并不那么简单,不过这个话题已经在 GitHub 上讨论过了。
|
||||
|
||||
Cemu 的作者利用 2.0 发布公告简要地讨论了该模拟器的历史;在该模拟器的大部分历史中,他们是唯一的开发者,他们声称过去两年对项目的压力特别大。
|
||||
|
||||
Exzap 将继续做出贡献,但预计拥有其他开发者将有助于创建几个重要的功能,如暂停和恢复仿真的能力,以及提高在旧硬件上的性能。
|
||||
|
||||
“我已经在 Cemu 上工作了近 8 年,看着这个项目从一个似乎不可行的实验,发展到在其高峰期有超过一百万人使用的东西,”Exzap 在上周二的公告中写道,“即使在今天,当 Wii U 已经被大部分人遗忘的时候,我们每个月仍然有 25 万次下载。仍然有这么多人在用 Cemu 享受 Wii U 游戏,我将永远感激让我有机会以积极的方式影响这么多人的生活,哪怕只是一丁点。”
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.opensourceforu.com/2022/08/wii-u-emulator-cemu-going-open-source-is-significant-for-emulation-heres-why/
|
||||
|
||||
作者:[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
|
@ -0,0 +1,157 @@
|
||||
[#]: subject: "5 GNOME 43 Features to Keep an Eye On"
|
||||
[#]: via: "https://news.itsfoss.com/gnome-43-features/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14985-1.html"
|
||||
|
||||
5 个需要关注的 GNOME 43 功能
|
||||
======
|
||||
|
||||
> GNOME 43 即将到来。下面是你可以期待在该版本中出现的功能。
|
||||
|
||||
![5 个值得关注的 GNOME 43 功能][1]
|
||||
|
||||
GNOME 43 将于 2022 年 9 月 21 日发布。截至目前,GNOME 43 的测试版已经可供测试。
|
||||
|
||||
我们在 GNOME 43 测试版中发现的功能和变化应该随着最终版本的发布而到来。
|
||||
|
||||
那么,哪些是你最值得期待的 GNOME 43 功能呢?
|
||||
|
||||
让我们来看看一些关键的变化。
|
||||
|
||||
这个列表集中在视觉/交互式变化上。关于技术变化的完整列表,你可以参考文章底部链接的更新日志。
|
||||
|
||||
### 1、改造了快速设置
|
||||
|
||||
![GNOME 快速设置][2]
|
||||
|
||||
GNOME 桌面菜单位于右上角,你可以在这里快速调整音量、访问网络连接,以及开/关电脑,在这个版本中它终于得到了视觉上的更新。
|
||||
|
||||
现在,它看起来更像是安卓的快速切换栏,这应该会增强用户体验,同时减少一些多余的点击。
|
||||
|
||||
![GNOME 快速设置][3]
|
||||
|
||||
你不需要前往设置来打开深色模式和夜光。新的快速切换菜单就可以让你可以访问到它们。
|
||||
|
||||
此外,像选择 Wi-Fi 网络和改变音频设备这样的事情比以前更容易做到。
|
||||
|
||||
### 2、对 Nautilus 文件管理器的改变
|
||||
|
||||
虽然我们已经在之前的报道中提到了 GNOME 43 中对 Nautilus 最重要的改变。
|
||||
|
||||
> **[GNOME 43 中 Nautilus 文件管理器的 6 个新变化][4]**
|
||||
|
||||
有几件事值得再次重申。其中一些包括:
|
||||
|
||||
* 使用 GTK 4 的全新外观。
|
||||
* 拖动和选择文件的能力(橡皮筋选择)。
|
||||
* 紧凑窗口的自适应视图。
|
||||
* 新的文件上下文菜单。
|
||||
|
||||
![Nautilus 文件管理器][6]
|
||||
|
||||
总的来说,在 GNOME 43 中,你会发现 Nautilus 文件管理器有了一些视觉上的调整,并有动画的细微改进。
|
||||
|
||||
你可以点击每一个选项,访问目录的属性等等来探索其中的差异。它应该感觉更直观一些。
|
||||
|
||||
### 3、设备安全信息
|
||||
|
||||
![][7]
|
||||
|
||||
我们之前报道过 GNOME 会在你禁用安全启动时显示警告。
|
||||
|
||||
> **[安全启动已被禁用? GNOME将很快向您发出警告!][8]**
|
||||
|
||||
你会在你的闪屏和锁屏中看到这个警告。
|
||||
|
||||
GNOME 的设置菜单也有一个新的 “设备安全” 选项,在这里你可以看到安全启动状态和其他重要信息,比如:
|
||||
|
||||
* TPM
|
||||
* 英特尔 BootGuard
|
||||
* IOMMU 保护
|
||||
|
||||
### 4、GNOME Web 的扩展支持
|
||||
|
||||
![GNOME Web 扩展][10]
|
||||
|
||||
GNOME Web 在每次更新都会变得更好一些。有了 Web 扩展的支持,它成为了一个有吸引力的选择,可以取代你的日常使用的浏览器。
|
||||
|
||||
> **[有了扩展,GNOME Web 正慢慢成为桌面 Linux 上一个有吸引力的选择][11]**
|
||||
|
||||
在写这篇文章的时候,该支持仍然是 **实验性的**,你必须得手动安装扩展。
|
||||
|
||||
对于初学者来说,你可以在 Mozilla Firefox 附加组件门户上下载 .xpi 扩展文件。
|
||||
|
||||
### 5、GNOME 软件中心的改进
|
||||
|
||||
GNOME 的软件中心目前的体验并不是很好。
|
||||
|
||||
虽然它在提供额外信息方面有所改进,但仍有改进的余地。
|
||||
|
||||
![GNOME 软件][13]
|
||||
|
||||
在 GNOME 43 中,你可以了解到更多关于 Flatpak 应用程序所需的权限。而且,你还可以看到一个 “其他应用程序” 部分,以寻找同一开发者的其它应用程序。
|
||||
|
||||
此外,软件包来源的显示方式也有了细微的视觉调整。
|
||||
|
||||
![GNOME 软件][14]
|
||||
|
||||
### 附加:新的墙纸
|
||||
|
||||
你会得到新的默认壁纸,有深色和浅色的变体。下面是深色壁纸背景的样子:
|
||||
|
||||
![][15]
|
||||
|
||||
而这是浅色版本:
|
||||
|
||||
![][16]
|
||||
|
||||
除了主要的亮点之外,其他一些变化包括:
|
||||
|
||||
* Adwaita 图标主题更新。
|
||||
* GNOME 应用程序的性能改进。
|
||||
* 各种代码的清理。
|
||||
* 对日历的改进。
|
||||
* 改良了“关于”窗口。
|
||||
|
||||
关于完整的技术细节,你可以参考 [GNOME 43 测试版更新日志][17]。
|
||||
|
||||
总的来说,GNOME 43 在很大程度上注重提高可用性和用户体验。
|
||||
|
||||
最初还计划了一些有趣的功能,但它们没有进入 GNOME 43。*也许,GNOME 44 会包括这些?*
|
||||
|
||||
> **[这里是开发者为 GNOME 43 规划的内容][18]**
|
||||
|
||||
*你对 GNOME 43 的功能有何看法?请在下面的评论中告诉我们你的想法。*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/gnome-43-features/
|
||||
|
||||
作者:[Ankush Das][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/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/content/images/size/w1200/2022/08/gnome-43-features.jpg
|
||||
[2]: https://news.itsfoss.com/content/images/2022/08/gnome-toggle-1.png
|
||||
[3]: https://news.itsfoss.com/content/images/2022/08/gnome-toggle-settings.png
|
||||
[4]: https://news.itsfoss.com/gnome-files-43/
|
||||
[6]: https://news.itsfoss.com/content/images/2022/08/nautilus-file.gif
|
||||
[7]: https://news.itsfoss.com/content/images/2022/08/secure-boot-gnome.png
|
||||
[8]: https://news.itsfoss.com/gnome-secure-boot-warning/
|
||||
[10]: https://news.itsfoss.com/content/images/2022/08/gnome-web-extensions-1.png
|
||||
[11]: https://news.itsfoss.com/gnome-web-extensions-dev/
|
||||
[13]: https://news.itsfoss.com/content/images/2022/08/gnome-software-screenshot-1.png
|
||||
[14]: https://news.itsfoss.com/content/images/2022/08/gnome-43-software-center.jpg
|
||||
[15]: https://news.itsfoss.com/content/images/2022/08/gnome-43-dark-wallpaper.jpg
|
||||
[16]: https://news.itsfoss.com/content/images/2022/08/gnome-light-adaitwa.jpg
|
||||
[17]: https://download.gnome.org/core/43/43.beta/NEWS
|
||||
[18]: https://news.itsfoss.com/gnome-43-dev-plans/
|
@ -0,0 +1,189 @@
|
||||
[#]: subject: "20 Facts About Linus Torvalds, the Creator of Linux and Git"
|
||||
[#]: via: "https://itsfoss.com/linus-torvalds-facts/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "gpchn"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15063-1.html"
|
||||
|
||||
关于 Linux 和 Git 的创造者 Linus Torvalds 的 20 件趣事
|
||||
======
|
||||
|
||||
> 一些已知的、或鲜为人知的事情 —— 这里有 20 件关于 Linux 内核创造者 Linus Torvalds 的趣事。
|
||||
|
||||
![Linus Torvalds,Linux 和 Git 的创造者][1]
|
||||
|
||||
[Linus Benedict Torvalds][2](林纳斯·本纳第克特·托瓦兹),在 1991 年还是一名攻读硕士的芬兰学生时,他开发了一个类 Unix 操作系统。从那时起,它引发了一场革命:今天,它为大多数 Web 服务器、许多嵌入式设备和 [500 强超级计算机][3] 中的每一台提供支持。
|
||||
|
||||
我已经写过一些鲜为人知的 [关于 Linux 的事实][4],但这篇文章不是关于 Linux 的,而是关于它的创造者,Linus Torvalds。
|
||||
|
||||
通过阅读他的传记《<ruby>[只是为了好玩][5]<rt>Just for Fun</rt></ruby>》,我了解了有关 Torvalds 的许多事情。如果你有兴趣,你也可以 [订购一本传记][6]。(这是一个 [受益推荐][7] 链接。)
|
||||
|
||||
### 关于 Linus Torvalds 的 20 个有趣事实
|
||||
|
||||
你可能已经知道一些关于 Linus 的事情,但是通过阅读这篇文章,你很有可能会了解一些关于他的新趣事。
|
||||
|
||||
#### 1、以诺贝尔奖获得者的名字命名
|
||||
|
||||
Linus Benedict Torvalds 于 1969 年 12 月 28 日出生于赫尔辛基。他来自一个记者家庭。他的父亲 [Nils Torvalds][11] 是芬兰政治家,可能是未来参加选举的总统候选人。
|
||||
|
||||
他的名字来自于诺贝尔化学与和平奖的双奖获得者 [Linus Pauling][12] 的名字。
|
||||
|
||||
#### 2、世界上所有的 Torvalds 都是亲戚
|
||||
|
||||
虽然你可能会找到几个名字为 Linus 的人,但你不会找到很多姓 Torvalds 的人 —— 因为“正确”的拼写实际上是 Torvald(没有 s)。他的祖父将名字从 Torvald 改为 Torvalds,并在末尾添加了一个“s”。于是,Torvalds 王朝(如果我可以这么称呼它的话)开始了。
|
||||
|
||||
由于这是一个不寻常的姓氏,所以世界上只有不到 30 个 Torvalds,而且他们都是亲戚,这是 Linus Torvalds 在他的传记中说的。
|
||||
|
||||
![年轻的 Linus Torvalds 和他的记者妹妹 Sara Torvalds][13]
|
||||
|
||||
#### 3、他的第一台电脑是 Commodore Vic 20
|
||||
|
||||
10 岁时,Linus 开始在他外祖父的 Commodore Vic 20 上使用 BASIC 编写程序。这使他发现自己对计算机和编程的热爱。
|
||||
|
||||
#### 4、Linus Torwalds 少尉
|
||||
|
||||
尽管他更喜欢花时间在电脑上而不是体育活动上,但他必须参加强制性的军事训练。他的军衔是少尉。
|
||||
|
||||
#### 5、因为他没有钱购买 UNIX,他创造了 Linux
|
||||
|
||||
1991 年初,出于对 [MS-DOS][14] 和 [MINIX][15] 不满意,Torvalds 想购买一套 UNIX 系统。对我们来说幸运的是,他没有足够的钱。因此,他决定从头开始制作自己的 UNIX 复制品。
|
||||
|
||||
#### 6、Linux 可以被称为 Freax
|
||||
|
||||
1991 年 9 月,Linus 发布了 Linux(代表 “Linus's MINIX”)并鼓励他的同好们使用其源代码进行更广泛的分发。
|
||||
|
||||
Linus 认为 Linux 这个名字太自负了。他想把它改成 Freax(基于 free、freak 和 MINIX),但他的朋友 Lemmarke 已经在 FTP 服务器上创建了一个名为 Linux 的目录。因此,Linux 的名称才得以沿用下来。(LCTT 译注:这个故事和我听到的不同。)
|
||||
|
||||
#### 7、Linux 是他在大学的主要项目
|
||||
|
||||
《Linux:一种可移植的操作系统》是他的硕士论文题目。
|
||||
|
||||
#### 8、他娶了他的学生
|
||||
|
||||
1993 年,他在赫尔辛基大学任教时,给学生们布置了一份写电子邮件的作业。是的,当时撰写电子邮件没那么简单。
|
||||
|
||||
一位名叫 Tove Monni 的女学生完成了这项任务,给他发送一封电子邮件,并邀请他出去约会。他接受了,三年后,他们三个女儿中的第一个出生了。
|
||||
|
||||
我应该说他开创了网恋的潮流吗?嗯……不!让我们就此打住 ;)
|
||||
|
||||
![Linus Torvalds 和他的妻子 Tove Monni Torvalds][16]
|
||||
|
||||
#### 9、Linus 有一颗以他的名字命名的小行星
|
||||
|
||||
他的名字获得了无数荣誉,包括一颗名为 [9793 Torvalds][17] 的小行星。
|
||||
|
||||
#### 10、Linus 不得不为 Linux 的商标而战
|
||||
|
||||
Linux 是 Linus Torvalds 的注册商标。Torvalds 最初并不关心这个商标,但在 1994 年 8 月,William R. Della Croce, Jr. 注册了 Linux 商标,并开始向 Linux 开发人员索要版税。作为回应,Torvalds 起诉了他,并于 1997 年解决了此案。
|
||||
|
||||
#### 11、史蒂夫·乔布斯希望他为苹果公司的 macOS 工作
|
||||
|
||||
2000 年,苹果公司的创始人 [史蒂夫·乔布斯邀请他为苹果公司的 macOS 工作][19]。Linus 拒绝了这个报酬丰厚的提议,并继续致力于开发 Linux 内核。
|
||||
|
||||
#### 12、Linus 还创建了 Git
|
||||
|
||||
大多数人都知道 Linus Torvalds 创建 Linux 内核,但他还创建了 [Git][20],这是一个广泛用于全世界的软件开发的版本控制系统。
|
||||
|
||||
直到 2005 年,(当时)专有服务 [BitKeeper][21] 还用于 Linux 内核的开发。而当 Bitkeeper 关闭其免费服务时,Linus Torvalds 自己创建了 Git,因为其他版本控制系统都不能满足他的需求。
|
||||
|
||||
#### 13、如今 Linus 几乎不编程
|
||||
|
||||
尽管 Linus 全职从事 Linux 内核工作,但他几乎不再为它编写任何代码。事实上,Linux 内核中的大部分代码都来自世界各地的贡献者。他在内核维护人员的帮助下,确保每个版本发布都能顺利进行。
|
||||
|
||||
#### 14、Torvalds 讨厌 C++
|
||||
|
||||
Linus Torvalds 极其 [不喜欢 C++ 编程语言][22],并对此直言不讳。他开玩笑说 Linux 内核的编译速度都比 C++ 程序快。
|
||||
|
||||
#### 15、即使是 Linus Torvalds 也发现 Linux 难以安装(现在你可以自我感觉良好了)
|
||||
|
||||
几年前,Linus 说过 [他发现 Debian 难以安装][23]。众所周知,他 [在他的主要工作站上使用 Fedora][24]。
|
||||
|
||||
#### 16、他喜欢水肺潜水
|
||||
|
||||
Linus Torvalds 喜欢水肺潜水。他甚至创造了一种供水肺潜水员使用的潜水记录工具 [Subsurface][25]。你会惊讶地发现,有时他甚至会在论坛上回答一些普通问题。
|
||||
|
||||
![穿着潜水装备的 Linus Torvalds][26]
|
||||
|
||||
#### 17、满嘴脏话的 Torvalds 改善了他的行为
|
||||
|
||||
Torvalds 以在 Linux 内核邮件列表中使用 [轻度脏话][27] 而闻名,这遭到了一些业内人士的批评。但是,很难批评他对 “[F**k you, NVIDIA][28]” 的玩笑,因为它促使英伟达为 Linux 内核提供了更好的适配。
|
||||
|
||||
2018 年,[Torvalds 暂时离开了 Linux 内核开发,以改善他的行为][29]。这是在他签署有争议的 [Linux 内核开发人员行为准则][30] 之前完成的。
|
||||
|
||||
![Linus Torvalds 对英伟达的中指:去你的!英伟达][31]
|
||||
|
||||
#### 18、他太害羞了,不敢在公共场合讲话
|
||||
|
||||
Linus 对公开演讲感到不舒服。他不怎么参加活动。而当他必须参加时,他更喜欢坐下来接受主持人的采访。这是他最喜欢的公开演讲方式。
|
||||
|
||||
#### 19、他不是社交媒体爱好者
|
||||
|
||||
[Google Plus][32] 是他使用过的唯一社交媒体平台。他甚至在空闲时花了一些时间 [点评了小组件][33]。Google Plus 现已停用了,因此他没有其他社交媒体帐户。
|
||||
|
||||
#### 20、Torvalds 定居在美国
|
||||
|
||||
Linus 于 1997 年移居美国,并与他的妻子 Tove 和他们的三个女儿在那里定居。他于 2010 年成为美国公民。目前,作为 [Linux 基金会][34] 的成员,他全职从事 Linux 内核工作。
|
||||
|
||||
很难说 Linus Torvalds 的净资产是多少,或者 Linus Torvalds 的收入是多少,因为这些信息从未公开过。
|
||||
|
||||
![Tove 和 Linus Torvalds 和他们的女儿 Patricia、Daniela 和 Celeste][35]
|
||||
|
||||
如果你有兴趣了解更多有关 Linus Torvalds 早期生活的信息,我建议你阅读他的传记,书名为 《<ruby>[只是为了好玩][5]<rt>Just for Fun</rt></ruby>》。
|
||||
|
||||
*免责声明:这里的一些图片来源于互联网,我没有图像的版权,我也不打算用这篇文章侵犯 Torvalds 家族的隐私。*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/linus-torvalds-facts/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[gpchn](https://github.com/gpchn)
|
||||
校对:[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/2017/12/Linus-Torvalds-featured-800x450.png
|
||||
[2]: https://en.wikipedia.org/wiki/Linus_Torvalds
|
||||
[3]: https://itsfoss.com/linux-runs-top-supercomputers/
|
||||
[4]: https://itsfoss.com/facts-linux-kernel/
|
||||
[5]: https://www.amazon.com/dp/0066620732?tag=AAWP_PLACEHOLDER_TRACKING_ID
|
||||
[6]: https://www.amazon.com/dp/0066620732?tag=AAWP_PLACEHOLDER_TRACKING_ID
|
||||
[7]: https://itsfoss.com/affiliate-policy/
|
||||
[8]: https://www.amazon.com/dp/0066620732?tag=AAWP_PLACEHOLDER_TRACKING_ID
|
||||
[9]: https://www.amazon.com/dp/0066620732?tag=AAWP_PLACEHOLDER_TRACKING_ID
|
||||
[10]: https://www.amazon.com/dp/0066620732?tag=AAWP_PLACEHOLDER_TRACKING_ID
|
||||
[11]: https://en.wikipedia.org/wiki/Nils_Torvalds
|
||||
[12]: https://en.wikipedia.org/wiki/Linus_Pauling
|
||||
[13]: https://itsfoss.com/wp-content/uploads/2017/12/Linus_and_sara_Torvalds.jpg
|
||||
[14]: https://en.wikipedia.org/wiki/MS-DOS
|
||||
[15]: https://www.minix3.org/
|
||||
[16]: https://itsfoss.com/wp-content/uploads/2017/12/Linus_torvalds-wife-800x533.jpg
|
||||
[17]: http://enacademic.com/dic.nsf/enwiki/1928421
|
||||
[18]: https://youtu.be/eE-ovSOQK0Y
|
||||
[19]: https://www.macrumors.com/2012/03/22/steve-jobs-tried-to-hire-linux-creator-linus-torvalds-to-work-on-os-x/
|
||||
[20]: https://en.wikipedia.org/wiki/Git
|
||||
[21]: https://www.bitkeeper.org/
|
||||
[22]: https://lwn.net/Articles/249460/
|
||||
[23]: https://www.youtube.com/watch?v=qHGTs1NSB1s
|
||||
[24]: https://plus.google.com/+LinusTorvalds/posts/Wh3qTjMMbLC
|
||||
[25]: https://subsurface-divelog.org/
|
||||
[26]: https://itsfoss.com/wp-content/uploads/2017/12/Linus_Torvalds_in_SCUBA_gear.jpg
|
||||
[27]: https://www.theregister.co.uk/2016/08/26/linus_torvalds_calls_own_lawyers_nasty_festering_disease/
|
||||
[28]: https://www.youtube.com/watch?v=_36yNWw_07g
|
||||
[29]: https://itsfoss.com/torvalds-takes-a-break-from-linux/
|
||||
[30]: https://itsfoss.com/linux-code-of-conduct/
|
||||
[31]: https://itsfoss.com/wp-content/uploads/2012/09/Linus-Torvalds-Fuck-You-Nvidia.jpg
|
||||
[32]: https://plus.google.com/+LinusTorvalds
|
||||
[33]: https://plus.google.com/collection/4lfbIE
|
||||
[34]: https://www.linuxfoundation.org/
|
||||
[35]: https://itsfoss.com/wp-content/uploads/2017/12/patriciatorvalds.jpg
|
||||
[36]: https://opensource.com/life/15/8/patricia-torvalds-interview
|
||||
[37]: https://www.amazon.com/dp/0066620732?tag=AAWP_PLACEHOLDER_TRACKING_ID
|
||||
[38]: https://www.amazon.com/dp/0066620732?tag=AAWP_PLACEHOLDER_TRACKING_ID
|
||||
[39]: https://www.amazon.com/dp/0066620732?tag=AAWP_PLACEHOLDER_TRACKING_ID
|
||||
[40]: https://www.amazon.com/dp/0066620732?tag=AAWP_PLACEHOLDER_TRACKING_ID
|
@ -0,0 +1,68 @@
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "Veryzzj"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15088-1.html"
|
||||
[#]: subject: "How I prioritize tasks on my to-do list"
|
||||
[#]: via: "https://opensource.com/article/21/1/prioritize-tasks"
|
||||
[#]: author: "Kevin Sonney https://opensource.com/users/ksonney"
|
||||
|
||||
如何确定待办事项上任务的优先级
|
||||
======
|
||||
|
||||
> 使用艾森豪威尔矩阵更好地安排你的待办事项的优先次序。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202209/30/121930xx0jnngx0oa8jl88.jpg)
|
||||
|
||||
在本文中,将研究一种在待办事项上确定任务优先级的策略。想要找到适合你日常工作的开源工具,请查看 [此列表][2]。
|
||||
|
||||
把事情添加到任务或待办事项中很容易。几乎太容易了。而一旦列入清单,挑战就变成了弄清楚先做什么。我们要做清单首位的事情吗?清单首位的事情是最重要的吗?如何弄清楚最重要的事是什么?
|
||||
|
||||
![To-do list][3]
|
||||
|
||||
*要做的事。今天?明天?谁知道呢?(Kevin Sonney, [CC BY-SA 4.0][4])*
|
||||
|
||||
[与电子邮件一样][5],我们可以根据一些事情来确定任务的优先级,这可以让我们弄清楚什么事情需要先做,什么可以等到以后再做。
|
||||
|
||||
我使用一种被称为“<ruby>艾森豪威尔矩阵<rt>Eisenhower Matrix</rt></ruby>” 的方法,它取自美国总统 <ruby>德怀特·戴维·艾森豪威尔<rt>Dwight D. Eisenhower</rt></ruby> 的一句话。画一个水平和垂直分割的方框。在列上标明“紧急”和“不紧急”,在行上标明“重要”和“不重要”。
|
||||
|
||||
![Eisenhower matrix][6]
|
||||
|
||||
*一个艾森豪威尔矩阵。(Kevin Sonney, [CC BY-SA 4.0][4])*
|
||||
|
||||
你可以把待办事项上的任务放在其中一个框里。但如何知道一个任务应该放在哪里?紧迫性和重要性往往是主观的。因此,第一步就是决定什么对你来说是重要的。我的家庭(包括宠物)、工作和爱好都很重要。如果待办事项上的东西与这三件事无关,我可以立即把它放到 “不重要” 行。
|
||||
|
||||
紧迫性是一个比较简单的问题。一件事需要在今天或明天完成吗?那么它可能是 “紧急的”。一件事是否有一个即将到来的最后期限,但离那个时间还有几天/几周/几个月,或者它根本就没有最后期限?当然是 “不急的”。
|
||||
|
||||
现在我们可以将这些框转化为优先级。“紧急/重要” 是最高优先级(即第一优先级),需要首先完成。接下来是 “不紧急/重要”(优先级 2),然后是 “紧急/不重要”(优先级 3),最后是 “不紧急/不重要”(优先级 4 或根本没有优先级)。
|
||||
|
||||
请注意,“紧急/不重要” 是第三位,而不是第二位。这是因为,人们花了很多时间在那些看似重要的事情上,只是因为它们比较紧急,实际上这些事并不是重要的。当我看到这类事项时,我会问自己一些问题。这些任务需要我具体完成吗?这些任务我可以要求其他人去做吗?它们对其他人来说是否重要和紧急?而这是否改变了它们对我的重要性?也许它们需要重新分类,或者我可以要求别人完成,并将它们从我的清单中删除。
|
||||
|
||||
![After prioritizing][7]
|
||||
|
||||
*确定优先级后。(Kevin Sonney, [CC BY-SA 4.0][4])*
|
||||
|
||||
对于“不紧急/不重要”框中的事项,有一个问题要问,那就是 “这些事情到底需不需要放在我的清单上?”说实话,我们经常用那些不紧急或不重要的事情来填满待办事项清单,但其实完全可以将它们从清单上删除。我知道承认 “这事永远不会完成” 是很难的,但在接受这个事实后,把这个事情从清单上删除并且不用再为它担心,是一种解脱。
|
||||
|
||||
经过这一切,看着清单很容易说出:“这是我现在需要做的事情。” 然后完成它。这就是待办事项的作用:为一天提供指导和重点。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/1/prioritize-tasks
|
||||
|
||||
作者:[Kevin Sonney][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[Veryzzj](https://github.com/Veryzzj)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/ksonney
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/todo_checklist_team_metrics_report.png?itok=oB5uQbzf "Team checklist and to dos"
|
||||
[2]: https://opensource.com/article/20/5/alternatives-list
|
||||
[3]: https://opensource.com/sites/default/files/pictures/to-do-list.png "To-do list"
|
||||
[4]: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
[5]: https://opensource.com/article/21/1/email-rules
|
||||
[6]: https://opensource.com/sites/default/files/pictures/eisenhower-matrix.png "Eisenhower matrix"
|
||||
[7]: https://opensource.com/sites/default/files/pictures/after-prioritizing.png "After prioritizing"
|
@ -0,0 +1,68 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (MareDevi)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-15081-1.html)
|
||||
[#]: subject: (How open source builds distributed trust)
|
||||
[#]: via: (https://opensource.com/article/21/1/open-source-distributed-trust)
|
||||
[#]: author: (Mike Bursell https://opensource.com/users/mikecamel)
|
||||
|
||||
开源如何构建分布式信任
|
||||
======
|
||||
|
||||
> 对开源的信任是一个正反馈循环。
|
||||
|
||||
![信任][1]
|
||||
|
||||
这是我即将在 [Wiley][2] 出版的《<ruby>计算和云计算中的信任<rt>Trust in Computing and the Cloud</rt></ruby>》一书中经过编辑的节选,也是我之前写的一篇文章<ruby>[《信任与选择开源》][3]<rt>Trust & choosing open source</rt></ruby>的延伸。
|
||||
|
||||
在那篇文章中,我提出了一个问题。当我们说 “我相信开放源码软件” 时,我们在做什么?作为回答,我认为,我们正在做的是确定有足够多的编写和测试该软件的人与我有类似的要求,而且他们的专业知识加在一起,使我使用该软件的风险可以接受。我同时也介绍了 “<ruby>分布式信任<rt>distributed trust</rt></ruby>” 的概念。
|
||||
|
||||
在社区内分布信任的概念是亚里士多德提出的 “<ruby>人群智慧理论<rt>wisdom of the crowd theory</rt></ruby>” 的应用,其中的假设是,许多人的意见通常比一个人或少数人的意见更有明智。虽然在某些情况下,最简单的形式显然是错误的 —— 最明显的例子是民众对极权主义政权的支持 —— 但这一原则可以为建立某些信息提供一个非常有效的机制。
|
||||
|
||||
我们称这种集体经验的提炼为“分布式信任”,它通过互联网上的许多机制收集。如 TripAdvisor 或 Glassdoor,记录了关于组织或其提供的服务的信息,还有像 UrbanSitter 或 LinkedIn,允许用户添加关于特定人的信息(例如,见 LinkedIn 的推荐和技能与个人档案中的认可部分)。从这些例子中可以获得的利益因网络效应而大大增加,因为随着成员数量的增加,成员之间可能的联系数量也成倍增加。
|
||||
|
||||
分布式信任的例子还包括像 Twitter 这样的平台,一个账户的追随者数量可以被视为衡量其声誉,甚至是衡量其可信度的标准,我们应该以强烈的怀疑态度去看待这种计算。事实上,Twitter 认为它必须解决拥有大量追随者的账户的社会力量问题,并建立了一个为 “验证账户” 机制,让人们知道 “一个具有公共利益的账户是真实的”。但是有趣的是,该公司不得不暂停这项服务,因为用户对 “验证” 的确切含义或暗示的期望出现了问题:这就是不同群体之间对内容理解不同的典型案例。
|
||||
|
||||
那么,开源的相关性在哪里呢?开源的社区方面实际上就是建立分布式信任的一个驱动力。因为一旦你成为一个开源项目周围社区的一部分,你就会承担一个或多个角色,一旦你说你 “信任” 一个开源项目,你就会开始信任这些角色(见我之前的文章)。例如,架构师、设计师、开发人员、审查人员、技术写作、测试人员、部署人员、错误报告者或错误修复者。你对一个项目的参与越多,你就越是社区的一部分,久而久之,这就可以成为一个 “<ruby>实践社区<rt>community of practice</rt></ruby>”。
|
||||
|
||||
Jean Lave 和 Etienne Wenger 在<ruby>[《情境学习:正当的外围参与》][4]<rt>Situated Learning: Legitimate Peripheral Participation</rt></ruby>一书中提出了实践社区的概念,团体在成员热情分享和参与共同活动的过程中演变成社区,导致他们的技能和知识共同提高。这里的核心概念是:当参与者围绕实践社区进行学习时,他们同时也成为社区的成员。
|
||||
|
||||
> “正当的的外围参与既指在实践中知识技能身份的发展,也指实践社区的再生产和转化。”
|
||||
|
||||
Wenger 在 <ruby>[《实践社区:学习、意义和身份》][5]<rt>Communities of Practice: Learning, Meaning, and Identity</rt></ruby> 中进一步探讨了实践社区的概念:它们如何形成、对其健康的要求,以及它们如何鼓励学习。他认为,意义的可协商性(“我们为什么要一起工作,我们要实现什么?”)是实践社区的核心,并指出,如果没有个人的参与、想象力和一致性,实践社区将不会有活力。
|
||||
|
||||
我们可以把这一点与我们对分布式信任如何建立和构建的看法结合起来:当你意识到你对开源的影响可以与其他人的影响相同时,你对社区成员的分布式信任关系就变得不那么具有传递性(第二或第三手甚至更遥远),而是更加直接。你明白,你对你所运行的软件的创建、维护、需求和质量所能产生的影响,可以与所有其他以前匿名的贡献者一样,你现在正在与他们形成一个实践社区,或者你正在加入他们的现有实践社区。然后,你就会成为一个信任关系网络的一部分,这个网络是分布式的,但与你购买和操作专利软件时的经历相差不大。
|
||||
|
||||
这个过程并不会停止:因为开源项目的一个共同属性是“交叉授粉”,即一个项目的开发者也在其他项目上工作。由于多个开源项目之间的网络效应,使得对其他项目的重用和依赖性上升,导致整个项目的吸收量增加。
|
||||
|
||||
这就很容易理解为什么许多开源贡献者会成为开源爱好者或传道者,不仅仅是为单个项目,而是为整个开源项目。事实上,斯坦福大学社会学家 [Mark Granovetter][6] 的工作表明,社区内太多的强关系会导致小团体和停滞不前,但弱关系会使思想和趋势在社区内流动。这种对其他项目和围绕它们存在的社区的认识,以及想法在项目间的灵活性,导致分布式信任能够被扩展(尽管保证比较弱),超越贡献者在他们有直接经验的项目中所经历的直接或短链间接关系,并向其他项目扩展,因为外部观察或外围参与显示贡献者之间存在类似关系。
|
||||
|
||||
简单地说,参与开源项目并通过参与建立信任关系的行为会导致对类似的开源项目或只是对其他类似的开源项目产生更强的分布式信任。
|
||||
|
||||
这对我们每个人来说意味着什么?它意味着我们越是参与开源,我们对开源的信任度就越高,而其他人对开源的参与度也会相应提高,从而对开源的信任度也会提高。对开源的信任不仅仅是一个网络效应:它是一个正反馈循环!
|
||||
|
||||
* * *
|
||||
|
||||
_本文最初发表于 [Alice, Eve, and Bob][7],经作者许可转载。_
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/1/open-source-distributed-trust
|
||||
|
||||
作者:[Mike Bursell][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/mikecamel
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/BUSINESS_trust.png?itok=KMfi0Rdo (Trust)
|
||||
[2]: https://wiley.com/
|
||||
[3]: https://aliceevebob.com/2019/06/18/trust-choosing-open-source/
|
||||
[4]: https://books.google.com/books/about/Situated_Learning.html?id=CAVIOrW3vYAC
|
||||
[5]: https://books.google.com/books?id=Jb8mAAAAQBAJ&dq=Communities%20of%20Practice:%20Learning,%20meaning%20and%20identity&lr=
|
||||
[6]: https://en.wikipedia.org/wiki/Mark_Granovetter
|
||||
[7]: https://aliceevebob.com/2020/11/17/how-open-source-builds-distributed-trust/
|
@ -0,0 +1,107 @@
|
||||
[#]: subject: (5 useful Moodle plugins to engage students)
|
||||
[#]: via: (https://opensource.com/article/21/3/moodle-plugins)
|
||||
[#]: author: (Sergey Zarubin https://opensource.com/users/sergey-zarubin)
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (MareDevi)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-15042-1.html)
|
||||
|
||||
5 款可以吸引学生的有用的 Moodle 插件
|
||||
======
|
||||
|
||||
> 使用插件来赋予你的在线学习平台新的功能来激励学生。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202209/18/165423pkiq74kwzokqzoq7.jpg)
|
||||
|
||||
无论在哪里,优秀的在线学习平台对于教育都非常重要。教师们需要一种途径来开办课堂,学生们需要一个友好的用户界面来促进学习,而管理者也需要一种方法来监控教育系统的有效性。
|
||||
|
||||
Moodle 是一个开源的软件包,允许你创建一个带有互动在线课程的私人网站。它可以帮助人们进行虚拟的在线聚会,互相教授和学习,并在此过程中保持井井有条。
|
||||
|
||||
Moodle 的独特之处在于它的该可用性,利用第三方解决方案可以显著提高可用性。如果你访问 [Moodle 插件目录][2],你将会找到超过 1,700 种由开源社区开发的插件。
|
||||
|
||||
面对如此多的选择,为你的学员挑选出最好的插件可能是一个挑战。为了帮助你开始,这里是我挑选出来的五大插件,你可以将其添加到你的在线学习平台。
|
||||
|
||||
### Level up!
|
||||
|
||||
![Level up Moodle 插件][3]
|
||||
|
||||
> **[Level up! 官网](https://levelup.plus/)**
|
||||
|
||||
激励和吸引学习者是教育工作者最困难的任务之一。[Level up! 插件][4] 允许你将学习体验游戏化,将积分分配给完成任务的学生,并显示进度和等级提升。这会鼓励你的学生在健康的氛围中竞争,并成为一个很好的学习者。
|
||||
|
||||
另外,你可以完全控制学生所获得的积分,并且他们可以在达到一定等级的时候解锁内容。所有的这些功能都是免费提供的。如果你考虑付费,你可以购买一些额外的功能,如个人奖励和团队排行榜。
|
||||
|
||||
### BigBlueButton
|
||||
|
||||
![BigBlueButton Moodle 插件][5]
|
||||
|
||||
|
||||
> **[BigBlueButton 官网](https://bigbluebutton.org/)**
|
||||
|
||||
[BigBlueButton][6] 可能是最知名的 Moodle 插件。这个开源的视频会议解决方案使得教育者能够让学生远程参与实时在线课程和小组协作活动。它提供了一些重要的功能,例如:实时屏幕共享、音视频通话、聊天,发送表情和分组讨论室。这款插件还可以让你记录你的直播课程。
|
||||
|
||||
BigBlueButton 让你能够在任何课程中创建多个活动链接、限制你的学生在你加入之前加入会话、创建自定义欢迎消息、管理你的录音等等。总而言之,BigBlueButton 拥有你教授和参与在线课程所需要的一切。
|
||||
|
||||
### ONLYOFFICE
|
||||
|
||||
![ONLYOFFICE Moodle 插件][7]
|
||||
|
||||
> **[ONLYOFFICE 官网](https://www.onlyoffice.com/)**
|
||||
|
||||
[ONLYOFFICE 插件][8] 允许学习者和教育者在他们的浏览器中直接创建和编辑文本文档、电子表格和演示文档。无需安装任何额外的应用程序,他们就可以处理附在课程中的 .docx、.xlsx、.pptx、.txt 和 .csv 文件;打开 .pdf 文件进行查看;并应用复杂格式和对象,包括自动形状、表格、图表、方程式等等。
|
||||
|
||||
此外,ONLYFFICE 使得实时共同编辑文件成为可能,这意味着几个用户可以同时在同一个文件上工作。不同的权限(完全访问、评论、审查、只读和填表)使你更容易灵活地管理对文档的访问。
|
||||
|
||||
### Global Chat
|
||||
|
||||
![Global Chat Moodle 插件][9]
|
||||
|
||||
> **[Global Chat 官网](https://moodle.org/plugins/block_gchat)**
|
||||
|
||||
[Global Chat 插件][10] 允许教育者和学习者通过 Moodle 进行实时交流。该插件提供了你课程中所有用户的列表,当你点击一个用户的名字时,它会在页面底部打开一个聊天窗口,以便你们进行交流。
|
||||
|
||||
有了这个易于使用的工具,你不需要打开一个单独的窗口来开始在线对话。你可以在网页之间转换,而你的对话将始终保持开放。
|
||||
|
||||
### Custom certificate
|
||||
|
||||
![Custom certificate Moodle 插件][11]
|
||||
|
||||
> **[Custom certificate 官网](https://moodle.org/plugins/mod_customcert)**
|
||||
|
||||
另一个吸引学生的有效方法是提供证书作为完成课程的奖励。颁发结业证书的承诺有助于保持学生的进度和对培训的承诺。
|
||||
|
||||
[Custom certificate 插件][12] 允许你在你的网页浏览器中生成完全可定制的 PDF 证书。重要的是,该插件与 GDPR 要求兼容,而且证书有独特的验证码,所以你可以用它们进行真实认证。
|
||||
|
||||
### 更多丰富的 Moodle 插件
|
||||
|
||||
这些是我最喜欢的五个 Moodle 插件。你可以通过在 Moodle.org 上 [注册一个账户][13] 来试用它们,或者你可以托管你自己的插件(或者与你的系统管理员或 IT 人员商量,为你设置一个托管环境)。
|
||||
|
||||
如果这些插件不符合你的学习目标,可以看看其他可用的插件。如果你找到一个好的插件,请留下评论并告诉大家。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/3/moodle-plugins
|
||||
|
||||
作者:[Sergey Zarubin][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/sergey-zarubin
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/read_book_guide_tutorial_teacher_student_apaper.png?itok=_GOufk6N (阅读书籍的人和数字拷贝)
|
||||
[2]: https://moodle.org/plugins/
|
||||
[3]: https://opensource.com/sites/default/files/uploads/gamification.png (Level up Moodle 插件)
|
||||
[4]: https://moodle.org/plugins/block_xp
|
||||
[5]: https://opensource.com/sites/default/files/uploads/bigbluebutton.png (BigBlueButton Moodle 插件)
|
||||
[6]: https://moodle.org/plugins/mod_bigbluebuttonbn
|
||||
[7]: https://opensource.com/sites/default/files/uploads/onlyoffice_editors.png (ONLYOFFICE Moodle 插件)
|
||||
[8]: https://github.com/logicexpertise/moodle-mod_onlyoffice
|
||||
[9]: https://opensource.com/sites/default/files/uploads/global_chat.png (Global Chat Moodle 插件)
|
||||
[10]: https://moodle.org/plugins/block_gchat
|
||||
[11]: https://opensource.com/sites/default/files/uploads/certificate.png (Custom certificate Moodle 插件)
|
||||
[12]: https://moodle.org/plugins/mod_customcert
|
||||
[13]: https://moodle.com/getstarted/
|
161
published/202209/20210617 Why FreeDOS has 16 colors.md
Normal file
161
published/202209/20210617 Why FreeDOS has 16 colors.md
Normal file
@ -0,0 +1,161 @@
|
||||
[#]: subject: (Why FreeDOS has 16 colors)
|
||||
[#]: via: (https://opensource.com/article/21/6/freedos-sixteen-colors)
|
||||
[#]: author: (Jim Hall https://opensource.com/users/jim-hall)
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (gpchn)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-15054-1.html)
|
||||
|
||||
FreeDOS 的 16 种颜色的由来
|
||||
======
|
||||
|
||||
> 为什么文本只能使用这些有限的颜色显示,为什么 FreeDOS 使用这些颜色和阴影,而不是其他颜色?答案就像技术中的许多事情一样,历史原因。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202209/21/171602vhhj99xkxshxbbvk.jpg)
|
||||
|
||||
如果你仔细了解过 FreeDOS,你可能已经注意到文本使用有限的颜色范围 —— 16 种文本颜色和 8 种背景颜色。这类似于 Linux 显示文本颜色的方式 —— 你或许能够在 Linux 终端中更改 _文本颜色_,但你仍然只能使用 16 种文本颜色和 8 种背景颜色。
|
||||
|
||||
![终端颜色][2]
|
||||
|
||||
*DOS 文本有 16 种颜色和 8 种背景颜色(吉姆·霍尔,[CC-BY SA 4.0][3])*
|
||||
|
||||
为什么文本只能使用这些有限的颜色显示,为什么 FreeDOS 使用这些颜色和阴影,而不是其他颜色?
|
||||
|
||||
答案就像技术中的许多事情一样,历史原因。
|
||||
|
||||
### PC 色彩的由来
|
||||
|
||||
为了解释为什么文本只有 16 种颜色,让我给你讲一个关于第一台 IBM 个人计算机的故事。这个故事的部分内容可能有些杜撰,但基本内容已经足够接近。
|
||||
|
||||
IBM 于 1981 年发布了<ruby>个人计算机<rt>Personal Computer</rt></ruby> 5150(“IBM PC”)。该 PC 使用了一个简单的监视器屏幕,以绿色显示文本。由于此显示器仅适用于一种颜色,因此被称为 <ruby>单色<rt>monochrome</rt></ruby>(“IBM 5151 单色显示器”,搭载 IBM <ruby>单色显示适配器<rt>Monochrome Display Adapter</rt></ruby>,即 MDA)。
|
||||
|
||||
同年,IBM 发布了 PC 的更新版本,带来了惊人的技术成就 —— 颜色!新的 IBM 5153 彩色显示器依赖于新的 IBM <ruby>彩色图形适配器<rt>Color Graphics Adapter</rt></ruby>(CGA)。正是由于这个原始的 CGA,所有的 DOS 文本都继承了它们的颜色。
|
||||
|
||||
但在我们讨论那一部分之前,我们首先需要了解一些关于颜色的东西。当我们谈论计算机屏幕上的颜色时,我们谈论的是混合 _三原色_(红色、绿色和蓝色)的不同值。你可以将不同级别(“亮度”)的红光、绿光和蓝光混合在一起,以创建几乎任何颜色。混合红色和蓝色光,你会得到洋红色。混合蓝色和绿色,你会得到青色或浅绿色。均匀地混合所有颜色,你会得到白色。没有任何浅色,你会看到黑色(没有颜色)。
|
||||
|
||||
![三原色][4]
|
||||
|
||||
*混合红色、绿色和蓝色光以获得不同的颜色(吉姆·霍尔,[CC-BY SA 4.0][3])*
|
||||
|
||||
IBM 5153 彩色显示器通过在<ruby>阴极射线管<rt>cathode ray tube</rt></ruby>(CRT)上点亮微小的红色、绿色和蓝色光点来向用户呈现颜色。这些小点排列得非常紧密,并以红色、绿色和蓝色的三色点组成一个“像素”的模式排列。通过控制同时点亮哪些荧光点,IBM 5153 彩色显示器可以显示不同颜色的像素。
|
||||
|
||||
![CRT 像素][5]
|
||||
|
||||
*每个红色、绿色和蓝色三元组都是一个像素(吉姆·霍尔,[CC-BY SA 4.0][3])*
|
||||
|
||||
顺便说一句,即使是现代显示器也使用这种红色、绿色和蓝色点的组合来表示颜色。现代计算机的不同之处在于,每个像素都使用红色、绿色和蓝色 LED 灯(通常并排排列),而不是微小的荧光点。计算机可以打开或关闭每个 LED 灯,以混合每个像素中的红色、绿色和蓝色。
|
||||
|
||||
![液晶像素][6]
|
||||
|
||||
*每个红色、绿色和蓝色三元组都是一个像素(吉姆·霍尔,[CC-BY SA 4.0][3])*
|
||||
|
||||
### 定义 CGA 颜色
|
||||
|
||||
IBM 工程师意识到他们可以通过混合红色、绿色和蓝色像素来显示多种颜色。在最简单的情况下,你可以假设单个像素中的每个红色、绿色和蓝色点要么“开”,要么“关”。正如任何计算机程序员都会告诉你的那样,你可以将“开”和“关”表示为二进制 —— 1(1 = 开)和 0(0 = 关)。
|
||||
|
||||
用 1 或 0 表示红色、绿色和蓝色意味着你可以组合多达八种颜色,从 000(红色、绿色和蓝色都关闭)到 111(红色、绿色和蓝色都打开)。请注意,位模式类似于“RGB”,因此 RGB=001 是蓝色的(只有蓝色是打开的),RGB=011 是青色的(绿色和蓝色都打开了):
|
||||
|
||||
| 颜色 | 代码 | 名称 |
|
||||
| --- | --- | --- |
|
||||
| <span style="background-color:black;"> </span> | 000 | 黑 |
|
||||
| <span style="background-color:blue;"> </span> | 001 | 蓝 |
|
||||
| <span style="background-color:green;"> </span> | 010 | 绿 |
|
||||
| <span style="background-color:cyan;"> </span> | 011 | 青 |
|
||||
| <span style="background-color:red;"> </span> | 100 | 红 |
|
||||
| <span style="background-color:magenta;"> </span> | 101 | 洋红 |
|
||||
| <span style="background-color:yellow;"> </span> | 110 | 黄 |
|
||||
| <span style="background-color:white;"> </span> | 111 | 白 |
|
||||
|
||||
但这只是最简单的情况。一位特别聪明的 IBM 工程师意识到,只需再添加一点,你就可以将颜色数量从 8 种颜色增加到 16 种。因此,我们可以使用像 iRGB 这样的位模式,而不是像 RGB 这样的位模式。我们将把这个额外的“i”位称为“强度”位,因为如果我们将“强度”位设置为 1(开),那么我们将在全亮度下点亮红色、绿色和蓝色;如果“强度”位为 0(关闭),我们可以使用一些中级亮度。
|
||||
|
||||
有了这个简单的修复程序,现在 CGA 可以显示 16 种颜色!为了简单起见,IBM 工程师将高强度颜色称为常规颜色名称的“明亮”版本。因此,“红色”与“亮红色”配对,“洋红色”与“亮洋红色”配对。
|
||||
|
||||
| 颜色 | 代码 | 名称 | 颜色 | 代码 | 名称 |
|
||||
| :----: | :----: | :----: | :----: | :----: | :----: |
|
||||
| <span style="background-color:#000;"> </span> | 0000 | 黑 | <span style="background-color:#000;"> </span> | 1000 | 亮黑 |
|
||||
| <span style="background-color:#007;"> </span> | 0001 | 蓝 | <span style="background-color:#00F;"> </span> | 1001 | 亮蓝 |
|
||||
| <span style="background-color:#070;"> </span> | 0010 | 绿 | <span style="background-color:#0F0;"> </span> | 1010 | 亮绿 |
|
||||
| <span style="background-color:#077;"> </span> | 0011 | 青 | <span style="background-color:#0FF;"> </span> | 1011 | 亮青 |
|
||||
| <span style="background-color:#700;"> </span> | 0100 | 红 | <span style="background-color:#F00;"> </span> | 1100 | 亮红 |
|
||||
| <span style="background-color:#707;"> </span> | 0101 | 洋红 | <span style="background-color:#F0F;"> </span> | 1101 | 亮洋红 |
|
||||
| <span style="background-color:#770;"> </span> | 0110 | 黄 | <span style="background-color:#FF0;"> </span> | 1110 | 亮黄 |
|
||||
| <span style="background-color:#777;"> </span> | 0111 | 白 | <span style="background-color:#FFF;"> </span> | 1111 | 亮白 |
|
||||
|
||||
哦不,等等!这实际上不是十六种颜色。如果你注意到 iRGB=0000(黑色)和 iRGB=1000(亮黑色),它们都是相同的 _黑色_。没有颜色可以“亮”,所以它们都是普通的黑色。这意味着我们只有 15 种颜色,而不是我们希望的 16 种颜色。
|
||||
|
||||
但 IBM 有聪明的工程师为他们工作,他们意识到如何解决这个问题以获得 16 种颜色。IBM 实际上没有实现直接的 RGB 到 iRGB,而是实现了 _类_ iRGB 方案。随着这一变化,IBM 为每个光点设置了四个亮度级别:完全关闭、三分之一亮度、三分之二亮度和全亮度。如果“亮度”位被关闭,那么每个红色、绿色和蓝色光点将以三分之二的亮度点亮。如果你打开“亮度”位,RGB 颜色中的所有 0 都将以三分之一的亮度点亮,而所有 1 都将以全亮度点亮。
|
||||
|
||||
让我用另一种方式向你描述这一点,使用 Web 颜色代码表示。如果你熟悉 HTML 颜色,你可能知道你可以使用 `#RGB` 表示颜色,其中 RGB 表示红色、绿色和蓝色值的组合,每个值都在十六进制值 0 到 F 之间。因此,使用 IBM 修改后的 iRGB 定义,iRGB=0001 是 #00a(蓝色),iRGB=1001 是 #55f(亮蓝色),因为对于高亮度颜色,RGB=001 中的所有零点都以三分之一的亮度点亮(0 到 F 刻度上的“5”左右),RGB=001 中的所有零点都以三分之二的亮度点亮(0 到 F刻度上的“A”)。
|
||||
|
||||
| 颜色 | 代码 | 名称 | 颜色 | 代码 | 名称 |
|
||||
| :----: | :----: | :----: | :----: | :----: | :----: |
|
||||
| <span style="background-color:#000;"> </span> | 0000 | 黑 | <span style="background-color:#555;"> </span> | 1000 | 亮黑 |
|
||||
| <span style="background-color:#00A;"> </span> | 0001 | 蓝 | <span style="background-color:#55F;"> </span> | 1001 | 亮蓝 |
|
||||
| <span style="background-color:#0A0;"> </span> | 0010 | 绿 | <span style="background-color:#5F5;"> </span> | 1010 | 亮绿 |
|
||||
| <span style="background-color:#0AA;"> </span> | 0011 | 青 | <span style="background-color:#5FF;"> </span> | 1011 | 亮青 |
|
||||
| <span style="background-color:#A00;"> </span> | 0100 | 红 | <span style="background-color:#F55;"> </span> | 1100 | 亮红 |
|
||||
| <span style="background-color:#A0A;"> </span> | 0101 | 洋红 | <span style="background-color:#F5F;"> </span> | 1101 | 亮洋红 |
|
||||
| <span style="background-color:#AA0;"> </span> | 0110 | 黄 | <span style="background-color:#FF5;"> </span> | 1110 | 亮黄 |
|
||||
| <span style="background-color:#AAA;"> </span> | 0111 | 白 | <span style="background-color:#FFF;"> </span> | 1111 | 亮白 |
|
||||
|
||||
有了这些颜色,我们终于完成了!我们拥有从 iRGB=0000(黑色)到 iRGB=1111(亮白色)以及介于两者之间的所有颜色的全光谱。就像彩虹般的颜色,这很漂亮。
|
||||
|
||||
除了……不,等等,这里有问题!我们实际上还不能复制彩虹的所有颜色。我们在小学学到的方便的助记符是 ROYGBIV,它可以帮助我们记住彩虹的颜色有红色、橙色、黄色、绿色、蓝色、靛蓝和紫色。我们修改后的 iRGB 配色方案包括红色、黄色、绿色和蓝色——我们可以将其“伪造”为靛蓝和紫色,但是我们缺少橙色。遭了!
|
||||
|
||||
![彩虹][7]
|
||||
|
||||
*一条美丽的彩虹——不幸的是它含有橙色。([Paweł Fijałkowski][8],公共)*
|
||||
|
||||
为了解决这个问题,聪明的 IBM 工程师对 RGB=110 做了最后的修复。高强度颜色(iRGB=1110)以全亮度点亮红色和绿色荧光粉点以产生黄色,但是在低亮度颜色(iRGB=0110)下,他们以三分之二的亮度点亮红色,以三分之一的亮度点亮绿色。这将 iRGB=0110 变成了橙色——尽管它后来被称为“棕色”,因为 IBM 不得不在某处弄乱标准名称。
|
||||
|
||||
| 颜色 | 代码 | 名称 | 颜色 | 代码 | 名称 |
|
||||
| :----: | :----: | :----: | :----: | :----: | :----: |
|
||||
| <span style="background-color:#000;"> </span> | 0000 | 黑 | <span style="background-color:#555;"> </span> | 1000 | 亮黑 |
|
||||
| <span style="background-color:#00A;"> </span> | 0001 | 蓝 | <span style="background-color:#55F;"> </span> | 1001 | 亮蓝 |
|
||||
| <span style="background-color:#0A0;"> </span> | 0010 | 绿 | <span style="background-color:#5F5;"> </span> | 1010 | 亮绿 |
|
||||
| <span style="background-color:#0AA;"> </span> | 0011 | 青 | <span style="background-color:#5FF;"> </span> | 1011 | 亮青 |
|
||||
| <span style="background-color:#A00;"> </span> | 0100 | 红 | <span style="background-color:#F55;"> </span> | 1100 | 亮红 |
|
||||
| <span style="background-color:#A0A;"> </span> | 0101 | 洋红 | <span style="background-color:#F5F;"> </span> | 1101 | 亮洋红 |
|
||||
| <span style="background-color:#A50;"> </span> | **0110** | **棕** | <span style="background-color:#FF5;"> </span> | 1110 | 黄 |
|
||||
| <span style="background-color:#AAA;"> </span> | 0111 | 白 | <span style="background-color:#FFF;"> </span> | 1111 | 亮白 |
|
||||
|
||||
这就是 CGA 以及扩展的 DOS 获得十六种颜色的方式!如果你好奇,这也是为什么会有“亮黑色”的原因,即使它只是一种灰色阴影。
|
||||
|
||||
### 表示颜色(位和字节)
|
||||
|
||||
但是你可能想知道:为什么 DOS 可以显示 16 种文本颜色,却只能显示 8 种背景颜色?为此,我们需要快速了解计算机如何将颜色信息传递给 CGA 卡。
|
||||
|
||||
简而言之,CGA 卡希望将每个字符的文本颜色和背景颜色编码在一个字节数据包中,一共八位。那么八位是从哪里来的呢?
|
||||
|
||||
我们刚刚了解了 iRGB(四位)如何生成十六种颜色。文本颜色使用 iRGB ,四位,背景颜色仅限于八种低强度颜色(RGB,三位),加起来只有七位。丢失的第八位在哪里?
|
||||
|
||||
最后一个位可能是为 DOS 时代最重要的用户界面元素保留的 —— 闪烁文本。虽然闪烁的文本在如今可能很烦人,但在整个 1980 年代初期,闪烁的文本是表示错误消息等关键信息的友好方式。
|
||||
|
||||
将这个“闪烁”位添加到三个背景颜色位(RGB)和四个文本颜色位(iRGB)中会产生八个位或一个字节!计算机喜欢以完整字节为单位进行计数,这使其成为将颜色(和闪烁)信息传输到计算机的便捷方式。
|
||||
|
||||
因此,表示颜色(和闪烁)的完整字节是 `Bbbbffff`,其中 `ffff` 是文本颜色的 iRGB 位模式(从 0 到 15),`bbb` 是低强度的 RGB 位模式背景颜色(从 0 到 7),而 `B` 是“闪烁”位。
|
||||
|
||||
十六种文本颜色和八种背景颜色的限制一直持续到今天。当然,DOS 坚持使用这种颜色组合,但即使是像 GNOME 终端这样的 Linux 终端仿真器也仍然受限于 16 种文本颜色和 8 种背景颜色。当然,Linux 终端可能允许你更改使用的特定颜色,但你仍然限于十六种文本颜色和八种背景颜色。为此,你要感谢 DOS 和最初的 IBM PC。别客气!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/6/freedos-sixteen-colors
|
||||
|
||||
作者:[Jim Hall][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[gpchn](https://github.com/gpchn)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/jim-hall
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/1980s-computer-yearbook.png?itok=eGOYEKK- (Person typing on a 1980's computer)
|
||||
[2]: https://opensource.com/sites/default/files/uploads/16colors.png (DOS text comes in 16 colors and 8 background colors)
|
||||
[3]: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
[4]: https://opensource.com/sites/default/files/uploads/rgb.svg_.png (Mix red, green, and blue light to get different colors)
|
||||
[5]: https://opensource.com/sites/default/files/uploads/crt.svg_.png (Each red, green, and blue triad is a single pixel)
|
||||
[6]: https://opensource.com/sites/default/files/uploads/lcd.svg_.png (Each red, green, and blue triad is a single pixel)
|
||||
[7]: https://opensource.com/sites/default/files/uploads/rainbow.jpg (A beautiful rainbow - which unfortunately contains orange )
|
||||
[8]: https://www.pexels.com/photo/landscape-photography-of-field-with-wind-mill-with-rainbow-1253748/
|
@ -0,0 +1,91 @@
|
||||
[#]: subject: "Introduce the different Fedora Linux editions"
|
||||
[#]: via: "https://fedoramagazine.org/introduce-the-different-fedora-linux-editions/"
|
||||
[#]: author: "Arman Arisman https://fedoramagazine.org/author/armanwu/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15003-1.html"
|
||||
|
||||
Fedora Linux 的各种版本
|
||||
======
|
||||
|
||||
![Introduce the differenct Fedora Linux editions][1]
|
||||
|
||||
我们在使用 Fedora Linux 时有不同的偏好。例如,有些人选择 Fedora Linux,是因为 Fedora Workstation 默认使用 GNOME 作为其桌面环境。但也有一些人想使用 Fedora Linux 但想使用不同的桌面环境。或者也有一些人使用 Fedora Linux 有特定的需求,但不想被系统配置和应用安装所困扰。甚至有些人想根据自己的需要自由安装 Fedora Linux。因此 Fedora Linux 根据你的需要提供了多个版本。本文将介绍不同的 Fedora Linux 版本。
|
||||
|
||||
### Fedora 官方版本
|
||||
|
||||
我们从 Fedora Linux 的 <ruby>官方版本<rt>Edition</rt></ruby> 开始,即 Fedora Workstation、Fedora Server 和 Fedora IoT。 Fedora Workstation 是 Fedora Linux 的官方版本,可以安装在笔记本电脑和台式电脑上。此版本附带 GNOME 作为默认桌面环境和各种标准应用,因此 Fedora Linux 已为日常使用做好准备。而 Fedora Server 专门用于服务器用途,提供邮件服务器、DNS 等的安装。最后一个是 Fedora IoT,用于物联网和边缘设备生态系统。
|
||||
|
||||
在 Fedora 项目网站主页上,你可以找到另外两个版本:Fedora CoreOS 和 Fedora Silverblue。Fedora CoreOS 是一个自动更新的操作系统,旨在安全、大规模地运行容器化工作负载。而 Fedora Silverblue 是一个不可变的桌面操作系统,旨在支持以容器为中心的工作流。
|
||||
|
||||
![Introduce the different Fedora Linux editions: Fedora Workstation][4]
|
||||
|
||||
更多信息可在此链接获得:
|
||||
|
||||
> **[https://getfedora.org/][5]**
|
||||
|
||||
### Fedora 定制版:可选桌面
|
||||
|
||||
Fedora <ruby>定制版<rt>Spin</rt></ruby> 很受那些非常在意桌面外观的人的欢迎。大多数人都知道 Fedora Linux 只有 GNOME 作为默认桌面环境。即使你真的想使用 GNOME 以外的桌面环境,也有几个替代桌面选项。使用 Fedora 定制版,你可以在安装 Fedora Linux 时立即获得你最喜欢的桌面环境。你可以从 KDE Plasma、XFCE、LXQt、MATE、Cinnamon、LXDE 和 SoaS 中进行选择。此外,对于喜欢平铺窗口管理器的人,Fedora Linux 还提供了 Fedora i3 定制版,其中 i3 作为默认窗口管理器,并附带了几个标准应用。
|
||||
|
||||
![Introduce the different Fedora Linux editions: Fedora Plasma][6]
|
||||
|
||||
![Introduce the different Fedora Linux editions: Fedora Cinnamon][7]
|
||||
|
||||
更多信息可在此链接获得:
|
||||
|
||||
> **[https://spins.fedoraproject.org/][8]**
|
||||
|
||||
### Fedora 实验室:功能包
|
||||
|
||||
Fedora <ruby>实验室<rt>Lab</rt></ruby> 是根据特定需求打包的 Fedora Linux 软件包集合。因此,这些版本的安装包都根据其功能提供了应用和必要的内容。Fedora 实验室提供多种软件包选择,例如<ruby>天文学<rt>Astronomy</rt></ruby>、<ruby>计算神经学<rt>Comp Neuro</rt></ruby>、<ruby>设计套件<rt>Design Suite</rt></ruby>、<ruby>游戏<rt>Games</rt></ruby>、JAM、<ruby>Python 教室<rt>Python Classroom</rt></ruby>、<ruby>安全实验室<rt>Security Lab</rt></ruby>、<ruby>机器人套件<rt>Robotics Suite</rt></ruby> 和 <ruby>科学<rt>Scientific</rt></ruby>。如果你想使用 Fedora Linux 进行设计工作,那么设计套件是你的正确选择。但是如果你喜欢玩游戏,你可以选择游戏版。
|
||||
|
||||
![Introduce the different Fedora Linux editions: Fedora Design Suite][9]
|
||||
|
||||
![Introduce the different Fedora Linux editions: Fedora Games][10]
|
||||
|
||||
更多信息可在此链接获得:
|
||||
|
||||
> **[https://labs.fedoraproject.org/][11]**
|
||||
|
||||
### Fedora 的其它下载
|
||||
|
||||
Fedora 的<ruby>其它下载<rt>Alt Download</rt></ruby> 集合了特定目的的可选 Fedora Linux 安装程序,例如用于测试或用于特定架构。还有其他可选格式,例如网络安装程序或种子下载等格式。在这里你可以找到<ruby>网络安装程序<rt>Network Installer</rt></ruby>、<ruby>种子下载<rt>Torrent Downloads</rt></ruby>、<ruby>可选架构<rt>Alternative Architectures</rt></ruby>、<ruby>云基础镜像<rt>Cloud Base Images</rt></ruby>、<ruby>所有内容<rt>Everything</rt></ruby>、<ruby>测试镜像<rt>Testing Images</rt></ruby> 和 Rawhide。
|
||||
|
||||
更多信息可在此链接获得:
|
||||
|
||||
> **[https://alt.fedoraproject.org/][12]**
|
||||
|
||||
### 总结
|
||||
|
||||
你可以自由选择适合你偏好的 Fedora Linux 版本,而不是官方版本。但是,如果你想获得具有各种桌面外观的 Fedora Linux,那么 Fedora 定制版适合你。如果你希望 Fedora Linux 根据你的需要包含应用和软件包,你可以选择 Fedora 实验室。但是,如果你是专家并且想要更自由地安装 Fedora Linux,你可以在 Fedora 其它下载处浏览替代选项。希望本文可以帮助你选择合适的 Fedora Linux,并请在评论中分享你使用 Fedora Linux 的经验。
|
||||
|
||||
(题图由 [Frédéric Perez][2] 发布在 [Unsplash][3])
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/introduce-the-different-fedora-linux-editions/
|
||||
|
||||
作者:[Arman Arisman][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://fedoramagazine.org/author/armanwu/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2021/11/FedoraMagz-FedoraEditions-Intro-816x345.png
|
||||
[2]: https://unsplash.com/@fredericp?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
||||
[3]: https://unsplash.com/s/photos/blue-abstract?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
||||
[4]: https://fedoramagazine.org/wp-content/uploads/2021/11/g-monitor-overview.png
|
||||
[5]: https://getfedora.org/
|
||||
[6]: https://fedoramagazine.org/wp-content/uploads/2021/11/screenshot-kde-1024x640.jpg
|
||||
[7]: https://fedoramagazine.org/wp-content/uploads/2021/11/screenshot-cinnamon-1024x576.jpg
|
||||
[8]: https://spins.fedoraproject.org/
|
||||
[9]: https://fedoramagazine.org/wp-content/uploads/2021/11/Fedora-Design-1024x792.png
|
||||
[10]: https://fedoramagazine.org/wp-content/uploads/2021/11/Fedora-Games-1024x792.png
|
||||
[11]: https://labs.fedoraproject.org/
|
||||
[12]: https://alt.fedoraproject.org/
|
@ -2,45 +2,44 @@
|
||||
[#]: via: "https://opensource.com/article/22/5/libsoup-gobject-c"
|
||||
[#]: author: "Joël Krähemann https://opensource.com/users/joel2001k"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: " "
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: translator: "Donkey-Hao"
|
||||
[#]: reviewer: " wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15065-1.html"
|
||||
|
||||
Boost the power of C with these open source libraries
|
||||
使用开源库 GObject 和 libsoup 提升 C 语言编程能力
|
||||
======
|
||||
GObject and libsoup do a lot of work for you, so you can turn your attention to inventing amazing applications in C.
|
||||
|
||||
![Why and how to handle exceptions in Python Flask][1]
|
||||
(Image by: Image from Unsplash.com, Creative Commons Zero)
|
||||
![](https://img.linux.net.cn/data/attachment/album/202209/24/145218s1s1xk6s1mm2kg1x.jpg)
|
||||
|
||||
The [GLib Object System (GObject)][2] is a library providing a flexible and extensible object-oriented framework for C. In this article, I demonstrate using the 2.4 version of the library.
|
||||
> 开源库 GObject 和 libsoup 做了很多工作,因此你可以专注于使用 C 语言开发神奇的应用。
|
||||
<ruby>[GLib 对象系统][2]<rt>Object System</rt></ruby>(GObject)是一个为 C 语言提供灵活且可扩展的面向对象框架的库。在这篇文章中,我将使用该库的 2.4 版本进行演示。
|
||||
|
||||
The GObject libraries extend the ANSI C standard, with typedefs for common types such as:
|
||||
GObject 库继承了 ANSI C 标准,拥有一些常见的数据类型,例如:
|
||||
|
||||
* gchar: a character type
|
||||
* guchar: an unsigned character type
|
||||
* gunichar: a fixed 32 bit width unichar type
|
||||
* gboolean: a boolean type
|
||||
* gint8, gint16, gint32, gint64: 8, 16, 32, and 64 bit integers
|
||||
* guint8, guint16, guint32, guint64: unsigned 8, 16, 32, and 64 bit integers
|
||||
* gfloat: an IEEE Standard 754 single precision floating point number
|
||||
* gdouble: an IEEE Standard 754 double precision floating point number
|
||||
* gpointer: a generic pointer type
|
||||
* `gchar`:字符型
|
||||
* `guchar`:无符号字符型
|
||||
* `gunichar`:32 位定宽 Unicode 字符型
|
||||
* `gboolean`:布尔型
|
||||
* `gint8`、`gint16`、`gint32`、`gint64`:有符号 8、16、32 和 64 位整数
|
||||
* `guint8`、`guint16`、`guint32`、`guint64`:无符号 8、16、32 和 64 位整数
|
||||
* `gfloat`:IEEE 754 标准单精度浮点数
|
||||
* `gdouble`:IEEE 754 标准双精度浮点数
|
||||
* `gpointer`:泛指针
|
||||
|
||||
### Function pointers
|
||||
### 函数指针
|
||||
|
||||
GObject also introduces a type and object system with classes and interfaces. This is possible because the ANSI C language understands function pointers.
|
||||
GObject 库还引入了类和接口的类型和对象体系。之所以可以,是因为 ANSI C 语言可以理解函数指针。
|
||||
|
||||
To declare a function pointer, you can do this:
|
||||
你可以这样做来声明函数指针:
|
||||
|
||||
```c
|
||||
```
|
||||
void (*my_callback)(gpointer data);
|
||||
```
|
||||
|
||||
But first, you need to assign the `my_callback` variable:
|
||||
首先,你需要给变量 `my_callback` 赋值:
|
||||
|
||||
```c
|
||||
```
|
||||
void my_callback_func(gpointer data)
|
||||
{
|
||||
//do something
|
||||
@ -49,21 +48,21 @@ void my_callback_func(gpointer data)
|
||||
my_callback = my_callback_func;
|
||||
```
|
||||
|
||||
The function pointer `my_callback` can be invoked like this:
|
||||
函数指针 `my_callback` 可以这样来调用:
|
||||
|
||||
```c
|
||||
```
|
||||
gpointer data;
|
||||
data = g_malloc(512 * sizeof(gint16));
|
||||
my_callback(data);
|
||||
```
|
||||
|
||||
### Object classes
|
||||
### 对象类
|
||||
|
||||
The GObject base class consists of 2 structs (`GObject` and `GObjectClass` ) which you inherit to implement your very own objects.
|
||||
`GObject` 基类由 2 个结构(`GObject` 和 `GObjectClass`)组成,你可以继承它们以实现你自己的对象。
|
||||
|
||||
You embed GObject and GObjectClass as the first struct field:
|
||||
你需要在结构体中先嵌入 `GObject` 和 `GObjectClass`:
|
||||
|
||||
```c
|
||||
```
|
||||
struct _MyObject
|
||||
{
|
||||
GObject gobject;
|
||||
@ -79,11 +78,11 @@ struct _MyObjectClass
|
||||
GType my_object_get_type(void);
|
||||
```
|
||||
|
||||
The object’s implementation contains fields, which might be exposed as properties. GObject provides a solution to private fields, too. This is actually a struct in the C source file, instead of the header file. The class usually contains function pointers only.
|
||||
对象的实现包含了公有成员。GObject 也提供了私有成员的方法。这实际上是 C 源文件中的一个结构,而不是在头文件。该类通常只包含函数指针。
|
||||
|
||||
An interface can’t be derived from another interface and is implemented as following:
|
||||
一个接口不能派生自另一个接口,比如:
|
||||
|
||||
```c
|
||||
```
|
||||
struct _MyInterface
|
||||
{
|
||||
GInterface ginterface;
|
||||
@ -91,9 +90,9 @@ struct _MyInterface
|
||||
};
|
||||
```
|
||||
|
||||
Properties are accessed by `g_object_get()` and `g_object_set()` function calls. To get a property, you must provide the return location of the specific type. It’s recommended that you initialize the return location first:
|
||||
通过调用 `g_object_get()` 和 `g_object_set()` 函数来访问属性。若要获取属性,你必须提供特定类型的返回位置。建议先初始化返回位置:
|
||||
|
||||
```c
|
||||
```
|
||||
gchar *str
|
||||
|
||||
str = NULL;
|
||||
@ -103,19 +102,21 @@ g_object_get(gobject,
|
||||
NULL);
|
||||
```
|
||||
|
||||
Or you might want to set the property:
|
||||
或者你想要设置属性:
|
||||
|
||||
```c
|
||||
```
|
||||
g_object_set(gobject,
|
||||
"my-name", "Anderson",
|
||||
NULL);
|
||||
```
|
||||
|
||||
### The libsoup HTTP library
|
||||
### libsoup HTTP 库
|
||||
|
||||
The `libsoup` project provides an HTTP client and server library for GNOME. It uses GObjects and the glib main loop to integrate with GNOME applications, and also has a synchronous API for use in command-line tools. First, create a `libsoup` session with an authentication callback specified. You can also make use of cookies.
|
||||
`libsoup` 项目为 GNOME 提供了 HTTP 客服端和服务端使用的库。它使用 GObjects 和 glib 主循环与集成到 GNOME 应用,并且还具有用于命令行的同步 API。
|
||||
|
||||
```c
|
||||
首先,创建一个特定身份验证回调的 `libsoup` 会话。你也可以使用 cookie。
|
||||
|
||||
```
|
||||
SoupSession *soup_session;
|
||||
SoupCookieJar *jar;
|
||||
|
||||
@ -131,9 +132,9 @@ g_signal_connect(soup_session, "authenticate",
|
||||
G_CALLBACK(my_authenticate_callback), NULL);
|
||||
```
|
||||
|
||||
Then you can create a HTTP GET request like the following:
|
||||
然后你可以像这样创建一个 HTTP GET 请求:
|
||||
|
||||
```c
|
||||
```
|
||||
SoupMessage *msg;
|
||||
SoupMessageHeaders *response_headers;
|
||||
SoupMessageBody *response_body;
|
||||
@ -176,11 +177,11 @@ if(status == 200){
|
||||
}
|
||||
```
|
||||
|
||||
The authentication callback is called as the web server asks for authentication.
|
||||
当网络服务器进行身份认证时,会调用身份认证回调函数。
|
||||
|
||||
Here’s a function signature:
|
||||
这是一个函数签名:
|
||||
|
||||
```c
|
||||
```
|
||||
#define MY_AUTHENTICATE_LOGIN "my-username"
|
||||
#define MY_AUTHENTICATE_PASSWORD "my-password"
|
||||
|
||||
@ -197,13 +198,13 @@ void my_authenticate_callback(SoupSession *session,
|
||||
}
|
||||
```
|
||||
|
||||
### A libsoup server
|
||||
### 一个 libsoup 服务器
|
||||
|
||||
For basic HTTP authentication to work, you must specify a callback and server context path. Then you add a handler with another callback.
|
||||
想要基础的 HTTP 身份认证能够运行,你需要指定回调函数和服务器上下文路径。然后再添加一个带有另一个回调的处理程序。
|
||||
|
||||
This example listens to any IPv4 address on localhost port 8080:
|
||||
下面这个例子展示了在 8080 端口监听任何 IPv4 地址的消息:
|
||||
|
||||
```c
|
||||
```
|
||||
SoupServer *soup_server;
|
||||
SoupAuthDomain *auth_domain;
|
||||
GSocket *ip4_socket;
|
||||
@ -245,11 +246,11 @@ soup_server_listen_socket(soup_server,
|
||||
ip4_socket, 0, &error);
|
||||
```
|
||||
|
||||
In this example code, there are two callbacks. One handles authentication, and the other handles the request itself.
|
||||
示例代码中,有两个回调函数。一个处理身份认证,另一个处理对它的请求。
|
||||
|
||||
Suppose you want a web server to allow a login with the credentials username **my-username** and the password **my-password**, and to set a session cookie with a random unique user ID (UUID) string.
|
||||
假设你想要网页服务器允许用户名为 `my-username` 和口令为 `my-password` 的凭证登录,并且用一个随机且唯一的用户 ID 字符串设置会话 cookie。
|
||||
|
||||
```c
|
||||
```
|
||||
gboolean my_xmlrpc_server_auth_callback(SoupAuthDomain *domain,
|
||||
SoupMessage *msg,
|
||||
const char *username,
|
||||
@ -284,9 +285,9 @@ gboolean my_xmlrpc_server_auth_callback(SoupAuthDomain *domain,
|
||||
}
|
||||
```
|
||||
|
||||
A handler for the context path **my-xmlrpc**:
|
||||
对上下文路径 `my-xmlrpc` 进行处理的函数:
|
||||
|
||||
```c
|
||||
```
|
||||
void my_xmlrpc_server_callback(SoupServer *soup_server,
|
||||
SoupMessage *msg,
|
||||
const char *path,
|
||||
@ -300,9 +301,9 @@ void my_xmlrpc_server_callback(SoupServer *soup_server,
|
||||
}
|
||||
```
|
||||
|
||||
### A more powerful C
|
||||
### 更加强大的 C 语言
|
||||
|
||||
I hope my examples show how the GObject and libsoup projects give C a very real boost. Libraries like these extend C in a literal sense, and by doing so they make C more approachable. They do a lot of work for you, so you can turn your attention to inventing amazing applications in the simple, direct, and timeless C language.
|
||||
希望我的示例展现了 GObject 和 libsoup 项目给 C 语言带来了真正的提升。像这样在字面意义上扩展 C 语言,可以使 C 语言更易于使用。它们已经为你做了许多工作,这样你可以专注于用 C 语言开发简单、直接的应用程序了。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -310,8 +311,8 @@ via: https://opensource.com/article/22/5/libsoup-gobject-c
|
||||
|
||||
作者:[Joël Krähemann][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
译者:[Donkey-Hao](https://github.com/Donkey-Hao)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,209 @@
|
||||
[#]: subject: "Ubuntu vs Manjaro: Comparing the Different Linux Experiences"
|
||||
[#]: via: "https://itsfoss.com/ubuntu-vs-manjaro/"
|
||||
[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "Return7g"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15006-1.html"
|
||||
|
||||
Ubuntu 和 Manjaro:比较两种不同的 Linux 发行版体验
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202209/06/215515o89v2xu8v05rv759.jpg)
|
||||
|
||||
Ubuntu 是基于 Debian 最流行的桌面和服务器 Linux 发行版。
|
||||
|
||||
Manjaro 是基于 Arch 量身定制的 Linux 发行版。
|
||||
|
||||
两者在用户体验以及功能上都大相径庭。
|
||||
|
||||
然而,将 Manjaro 的 GNOME 版和 Ubuntu 放到一起比较时,其中一个共同点是 [桌面环境][1]。
|
||||
|
||||
但它们到底有什么不同?Manjaro 的包管理器会更好用吗?Ubuntu 和 Manjaro 上的软件生态怎么样?
|
||||
|
||||
接下来,我们来看看两个 Linux 发行版在某些关键问题上的差异。
|
||||
|
||||
### 发行周期
|
||||
|
||||
Ubuntu 根据你选择的版本不同提供了两个发行周期。如果你选择的是<ruby>长期支持版本<rt>Long Term Support</rt></ruby>(LTS),那么你在至少未来五年内都会收到安全维护更新。
|
||||
|
||||
假如你安装了 Ubuntu 22.04 ,那么你在 **2027 年 4 月** 之前都能获取更新。
|
||||
|
||||
![ubuntu22 04 lts about][2]
|
||||
|
||||
因此,我们更推荐普通桌面用户使用 LTS 版本。
|
||||
|
||||
如果你想要更新更好的体验,你可以选择每**九个月**更新一次的非 LTS 版本。例如 Ubuntu 21.04、 Ubuntu 21.10、Ubuntu 22.10。
|
||||
|
||||
需要注意的是,非 LTS 版本涉及的更改可能会影响你的工作流程以及用户体验。因此并不推荐所有人都去使用非 LTS 版本。
|
||||
|
||||
选择 Manjaro Linux 时你将会获得滚动发布的更新,因此你不必担心对你使用版本的支持过期。它会通过定期更新升级到最新的可用版本。
|
||||
|
||||
![manjaro about][3]
|
||||
|
||||
由于滚动发行周期的原因,你可以快速获取到最新的软件包。因此如果你想使用某个软件的历史版本,Manjaro 或许并不适合你。
|
||||
|
||||
### 桌面环境
|
||||
|
||||
Ubuntu 特别提供了一个定制版的 GNOME 桌面。它可能不是最新的,但如果你使用较新的 Ubuntu 版本,它基本上包含的就是最新的 GNOME 桌面环境。
|
||||
|
||||
![ubuntu 22 04 wallpaper][4]
|
||||
|
||||
Canonical(Ubuntu 背后的公司)并不提供其它桌面环境。
|
||||
|
||||
但如果你想在 Ubuntu 上使用其它桌面环境,你可以选择包含了 KDE、Budgie、LXQt、MATE 以及 XFCE 等桌面环境的 Ubuntu 官方 <ruby>[风味版][5]<rt>Flavour</rt></ruby>。与提供了其他桌面环境的非官方版或更新的<ruby>特色版<rt>Spin</rt></ruby>的 Ubuntu 相比,它们是经过良好测试且稳定的 Ubuntu Linux 发行版。
|
||||
|
||||
但是这些 Ubuntu 风味版没有五年的软件支持;相反,你只能受限地得到对 LTS 版本的三年支持。
|
||||
|
||||
如果使用 Manjaro,你可以选择官方提供的三个版本:XFCE、KDE 和 GNOME。 无论桌面环境如何,你都会使用滚动发布模式。
|
||||
|
||||
![manjaro gnome 42][6]
|
||||
|
||||
当然你也可以使用 Manjaro 的一些社区版本,如 Budgie、MATE、LXQt。
|
||||
|
||||
### 包管理器以及软件生态
|
||||
|
||||
在上述这两类发行版中,找到大多数必要的 Linux 应用是没问题的。
|
||||
|
||||
不过,Manjaro Linux 使用 Pamac 作为其包管理器而获得了更快速的体验。
|
||||
|
||||
![manjaro package manager][8]
|
||||
|
||||
与 Ubuntu 上的应用商店相比,Manjaro Linux 在快速安装/更新软件方面提供了更好的体验。而且,它还支持开箱即用的 Flatpak/Snap,如果你只需一键即可启用它们。
|
||||
|
||||
Ubuntu 比较重视 Snap 软件包,你会发现一些应用程序预装为 Snap 软件包(如 Firefox 浏览器)。
|
||||
|
||||
![firefox as snap][9]
|
||||
|
||||
对于 Manjaro Linux 来说,你可以根据自身需求决定是否启用 Flatpak/Snap。
|
||||
|
||||
在使用 Ubuntu 时,其应用商店提供的 Linux 应用并不是最好的。取决于你的系统配置和使用年限,它会变得越来越慢。
|
||||
|
||||
![ubuntu 22 04 software center][10]
|
||||
|
||||
除此之外,Manjaro Linux 还可以访问 [AUR][11],它可以获得你在 Ubuntu 应用商店中可能找不到的几乎所有软件。
|
||||
|
||||
因此,就软件生态系统和包管理器而言,Manjaro Linux 的确要比 Ubuntu 有更多的优势。
|
||||
|
||||
### 易用性和目标用户
|
||||
|
||||
Ubuntu 桌面主要是为了易于使用而量身定制的。它专注于提供最佳的软件和硬件兼容性组合,让所有计算机用户都可以使用 Ubuntu Linux,而无需了解 Linux 世界中的大部分内容。
|
||||
|
||||
即使有人不知道 Linux 上的“包管理器”是什么,在他们使用它时也可以完全把它作为 Windows/macOS 的完美替代品。
|
||||
|
||||
当然,我们也有一个指南来帮助你 [安装最新的 Ubuntu 后要做的事情][12]。
|
||||
|
||||
Manjaro Linux 也是为桌面用户使用量身定制的。但是它并不适合首次使用 Linux 的用户使用。
|
||||
|
||||
它旨在简化 Arch Linux 的操作。因此主要面向想要使用 Arch Linux 的 Linux 用户,但是增加了一些便利性。
|
||||
|
||||
### 稳定性
|
||||
|
||||
![stability tux][13]
|
||||
|
||||
Ubuntu LTS 版本主要关注稳定性和可靠性,因此你也可以在服务器上部署它们。
|
||||
|
||||
相比之下,Manjaro Linux 可能没有提供现成的的稳定性。你在 Manjaro Linux 中安装软件包时需要更加仔细,同时密切注意你的配置,以确保更新不会破坏你的系统。
|
||||
|
||||
对于 Ubuntu 用户来说则无需担心软件更新,尤其是在考虑 LTS 版本时,更新通常不会破坏你的系统。
|
||||
|
||||
### 个性化
|
||||
|
||||
Ubuntu 特别提供了一个由 Canonical 为最终用户设置的定制 GNOME 桌面。虽然你可以自由定制你的 Linux 发行版的各个方面,但 Ubuntu 开箱即用提供定制很少。
|
||||
|
||||
Ubuntu 多年来一直在改进,最近增加了 [在 Ubuntu 22.04 LTS 中添加强调色][14] 的能力。 但是它仍然还有很长的路要走。
|
||||
|
||||
如果你想获得个性化的桌面体验,你只能借助 [GNOME Tweak][15] 等软件来实现。
|
||||
|
||||
对比 Manjaro GNOME,你也只能使用相同的工具来自定义桌面。
|
||||
|
||||
Manjaro 还对外观进行了一些自定义调整。但是它提供了更多组件来更改布局和其他一些选项。
|
||||
|
||||
![manjaro layout][16]
|
||||
|
||||
在个性定制方面,你在 Manjaro 和 Ubuntu 上的体验大致相同。
|
||||
|
||||
如果你想要更多自定义选项,Manjaro Linux 可能是一个不错的选择。但是如果你只想要个性化体验而不需要太多的改变,Ubuntu 应该就足够了。
|
||||
|
||||
### 臃肿的软件
|
||||
|
||||
这对每个人来说可能都不是什么大问题。但如果你不喜欢预装许多应用程序,那么 Ubuntu 可能会令你感到麻烦。
|
||||
|
||||
![ubuntu 22 apps][17]
|
||||
|
||||
虽然可以随时删除不需要的应用程序。但是你会发现随 Ubuntu 一起安装的软件和服务还有很多。
|
||||
|
||||
使用 Manjaro 时,你在安装时只需要安装最基础的内容即可。它们坚持使用最基础的实用程序,最大限度地减少预装的软件包数量。因此,Manjaro 很少会和软件臃肿联系到一起。
|
||||
|
||||
但是你在默认安装的 Manjaro 上可能找不到你最喜欢的 Linux 软件。因此,如果你想在安装后立即使用一些你喜欢的软件,Ubuntu 可能是一个不错的选择。
|
||||
|
||||
### 性能
|
||||
|
||||
![ubuntu 22 04 neofetch lolcat][18]
|
||||
|
||||
虽然 Ubuntu 改进了其系统表现,甚至可以在 2 GB 内存的树莓派上运行,但它仍然不是性能最好的 Linux 发行版。
|
||||
|
||||
当然,性能确实取决于你选择使用的桌面环境。
|
||||
|
||||
但是与 Manjaro 的 GNOME 版本相比,Manjaro 提供了更快捷的体验。
|
||||
|
||||
需要注意的是,性能和动画首选项的用户体验还取决于你的系统配置。例如,Manjaro 的推荐系统要求(1GB 内存和 1GHz 处理器)给了你使用旧电脑的机会。
|
||||
|
||||
但是,对于 Ubuntu,在撰写本文时,你至少需要 4GB 内存 和 2GHz 双核处理器,才能获得理想的桌面体验。
|
||||
|
||||
### 文档
|
||||
|
||||
考虑到 Ubuntu 的受欢迎程度,Ubuntu 更易于使用,并且对新用户来说可能更舒适。
|
||||
|
||||
[Ubuntu 的文档][19] 即使不是最好也足够好了。
|
||||
|
||||
谈到 Manjaro Linux,他们有一个 [维基][20],其中包含基础信息和深入的指南来帮助你入门。
|
||||
|
||||
总的来说,[Arch Linux 的文档][21] 非常细致,几乎每个人(甚至是老手)都会参考它来寻求帮助。
|
||||
|
||||
Arch Linux 的文档在很大程度上也适用于 Manjaro Linux,因此在文档方面,使用 Manjaro Linux 比 Ubuntu 更有优势。
|
||||
|
||||
### 结束语
|
||||
|
||||
作为两个完全不同的 Linux 发行版,它们服务于各种类型的用户。你可以选择你感兴趣的任意一个并尝试去使用它来判断它是否适合你。
|
||||
|
||||
但是,如果你想避免对系统进行任何更改,并专注于你的工作,那么 Ubuntu 应该是一个明智的选择。
|
||||
|
||||
而如果 Ubuntu 的性能对你的体验有相当大的影响,你应该去尝试 Manjaro。 你可以阅读我的 [关于从 Ubuntu 切换到 Manjaro 的初步想法][22]。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/ubuntu-vs-manjaro/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[Return7g](https://github.com/Return7g)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://itsfoss.com/what-is-desktop-environment/
|
||||
[2]: https://itsfoss.com/wp-content/uploads/2022/05/ubuntu22-04-lts-about.png
|
||||
[3]: https://itsfoss.com/wp-content/uploads/2022/05/manjaro-about.png
|
||||
[4]: https://itsfoss.com/wp-content/uploads/2022/04/ubuntu-22-04-wallpaper.jpg
|
||||
[5]: https://itsfoss.com/which-ubuntu-install/
|
||||
[6]: https://itsfoss.com/wp-content/uploads/2022/05/manjaro-gnome-42.png
|
||||
[7]: https://itsfoss.com/essential-linux-applications/
|
||||
[8]: https://itsfoss.com/wp-content/uploads/2022/05/manjaro-package-manager.png
|
||||
[9]: https://itsfoss.com/wp-content/uploads/2022/04/firefox-as-snap.jpg
|
||||
[10]: https://itsfoss.com/wp-content/uploads/2022/04/ubuntu-22-04-software-center.jpg
|
||||
[11]: https://itsfoss.com/aur-arch-linux/
|
||||
[12]: https://itsfoss.com/things-to-do-after-installing-ubuntu-22-04/
|
||||
[13]: https://itsfoss.com/wp-content/uploads/2022/05/stability-tux.png
|
||||
[14]: https://itsfoss.com/accent-color-ubuntu/
|
||||
[15]: https://itsfoss.com/gnome-tweak-tool/
|
||||
[16]: https://itsfoss.com/wp-content/uploads/2022/05/manjaro-layout.png
|
||||
[17]: https://itsfoss.com/wp-content/uploads/2022/05/ubuntu-22-apps.jpg
|
||||
[18]: https://itsfoss.com/wp-content/uploads/2022/04/ubuntu-22-04-neofetch-lolcat-800x445.png
|
||||
[19]: https://help.ubuntu.com/
|
||||
[20]: https://wiki.manjaro.org/index.php/Main_Page
|
||||
[21]: https://wiki.archlinux.org/
|
||||
[22]: https://news.itsfoss.com/manjaro-linux-experience/
|
@ -0,0 +1,182 @@
|
||||
[#]: subject: "The Basic Concepts of Shell Scripting"
|
||||
[#]: via: "https://www.opensourceforu.com/2022/05/the-basic-concepts-of-shell-scripting/"
|
||||
[#]: author: "Sathyanarayanan Thangavelu https://www.opensourceforu.com/author/sathyanarayanan-thangavelu/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "FYJNEVERFOLLOWS"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15012-1.html"
|
||||
|
||||
一些 Shell 脚本的基本概念
|
||||
======
|
||||
|
||||
> 如果你希望自动执行常规任务并使你的生活更轻松,那么使用 Shell 脚本是一个很好的选择。本文将向你介绍一些基本概念,这些概念将帮助你编写高效的 Shell 脚本。
|
||||
|
||||
![Shell-scripting][1]
|
||||
|
||||
Shell 脚本是一种被设计用来运行命令行解释器 UNIX Shell 的计算机程序。Shell 脚本的各类变种被视作脚本语言。Shell 脚本执行的典型操作包括文件操作、程序执行和文本打印。设置环境、运行程序并执行任何必要的清理或日志记录的脚本称为封装。
|
||||
|
||||
### 识别 Shell 命令提示符
|
||||
|
||||
你可以通过查看终端窗口中的提示符符号来识别 Linux 系统的计算机上的 Shell 命令提示符的用户是普通用户还是超级用户。`#` 符号用于超级用户,`$` 符号用于具有标准权限的用户。
|
||||
|
||||
### 基本命令
|
||||
|
||||
脚本附带了很多可以在终端窗口上执行的、用以管理您的计算机的命令。每个命令的详细信息可以在该命令附带的使用手册中找到。你可以使用如下命令来查看手册:
|
||||
|
||||
```
|
||||
man <command>
|
||||
```
|
||||
|
||||
一些常用的命令有:
|
||||
|
||||
```
|
||||
date # 显示当前日期和时间
|
||||
cal # 显示当前月份日历
|
||||
df # 显示磁盘使用情况
|
||||
free # 显示内存使用情况
|
||||
ls # 列出文件和目录
|
||||
mkdir # 创建目录
|
||||
```
|
||||
|
||||
每个命令都附带了几个可以一起使用的选项。你可以参考使用手册以了解更多的细节。`man date` 的输出如图 1 所示。
|
||||
|
||||
![Figure 1: Manual of date command][2]
|
||||
|
||||
### 重定向操作符
|
||||
|
||||
当你希望捕获文件中的命令输出或重定向到文件时,可以使用重定向操作符。
|
||||
|
||||
| 命令 | 描述 |
|
||||
| :- | :- |
|
||||
| `ls -l /usr/bin >file` | 默认标准输出到文件 |
|
||||
| `ls -l /usr/bin 2>file` | 重定向标准错误到文件 |
|
||||
| `ls -l /usr/bin > ls-output 2>&1` | 重定向标准错误和标准输出到文件 |
|
||||
| `ls -l /usr/bin &> ls-output` | 重定向标准错误和标准输出到文件 |
|
||||
| `ls -l /usr/bin 2> /dev/null` | 写入 `/dev/null`,丢弃输出 |
|
||||
|
||||
### 大括号扩展
|
||||
|
||||
大括号扩展是 UNIX 提供的强大选项之一。它有助于在一行指令中使用最少的命令完成大量操作。例如:
|
||||
|
||||
```
|
||||
$echo Front-{A,B,C}-Back
|
||||
Front-A-Back, Front-B-Back, Front-C-Back
|
||||
```
|
||||
|
||||
```
|
||||
$echo {Z..A}
|
||||
Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
|
||||
```
|
||||
|
||||
```
|
||||
$mkdir {2009..2011}-0{1..9} {2009..2011}-{10..12}
|
||||
```
|
||||
|
||||
这条命令会为 2009 到 2011 年里的每个月建立一个目录。
|
||||
|
||||
### 环境变量
|
||||
|
||||
环境变量是一个动态命名的值,它可以影响计算机上运行的进程的行为方式。此变量是进程运行环境的一部分。
|
||||
|
||||
| 命令 | 描述 |
|
||||
| :- | :- |
|
||||
| `printenv` | 打印出所有环境变量的值。 |
|
||||
| `set` | 设置 Shell 选项 |
|
||||
| `export` | 导出环境到随后执行的程序 |
|
||||
| `alias` | 为命令创建别名 |
|
||||
|
||||
### 网络命令
|
||||
|
||||
网络命令对于排查网络问题和检查连接到客户机的特定端口非常有用。
|
||||
|
||||
| 命令 | 描述 |
|
||||
| :- | :- |
|
||||
| `ping` | 发送 ICMP(网际网路控制讯息协定)数据包 |
|
||||
| `traceroute` | 打印数据包在网络中的路径 |
|
||||
| `netstat` | 打印网络连接信息、路由表、接口数据 |
|
||||
| `ftp`/`lftp` | 互联网文件传输程序 |
|
||||
| `wget` | 非交互式网络下载器 |
|
||||
| `ssh` | OpenSSH SSH 客户端 (远程登录程序) |
|
||||
| `scp` | 安全拷贝 |
|
||||
| `sftp` | 安全文件传输程序 |
|
||||
|
||||
### grep 命令
|
||||
|
||||
`grep` 命令用于查找系统和日志中的错误。它是 Shell 拥有的强大工具之一。
|
||||
|
||||
| 命令 | 描述 |
|
||||
| :- | :- |
|
||||
| `grep -h '.zip' file.list` | `.` 表示任意字符 |
|
||||
| `grep -h '^zip' file.list` | 以 `zip` 开头 |
|
||||
| `grep -h 'zip$' file.list` | 以 `zip` 结尾 |
|
||||
| `grep -h '^zip$' file.list` | 只含有 `zip` |
|
||||
| `grep -h '[^bz]zip' file.list` | 不含 `b` 和 `z` |
|
||||
| `grep -h '^[A-Za-z0-9]' file.list` | 所有文件名有效的文件 |
|
||||
|
||||
### 量词
|
||||
|
||||
下面是一些量词的例子:
|
||||
|
||||
| 命令 | 描述 |
|
||||
| :- | :- |
|
||||
| `?` | 匹配出现 0 次或 1 次的元素 |
|
||||
| `*` | 匹配出现 0 次或多次的元素 |
|
||||
| `+` | 匹配出现 1 次或多次的元素 |
|
||||
| `{}` | 匹配出现特定次数的元素 |
|
||||
|
||||
### 文本处理
|
||||
|
||||
文本处理是当今 IT 世界中的另一项重要任务。程序员和管理员可以使用这些命令来切片、剪切和处理文本。
|
||||
|
||||
| 命令 | 描述 |
|
||||
| :- | :- |
|
||||
| `cat -A $FILE` | 显示 `$FILE` 文件的所有内容 |
|
||||
| `sort file1.txt file2.txt file3.txt > final_sorted_list.txt` | 一次性将所有文件排序 |
|
||||
| `ls - l | sort -nr -k 5` | 按指定的第 5 列进行排序 |
|
||||
| `sort --key=1,1 --key=2n distor.txt` | 对第 1 列进行排序(默认按字母表顺序),对第 2 列进行数值排序 |
|
||||
| `sort foo.txt | uniq -c` | 查找重复的行并显示该行重复的次数 |
|
||||
| `cut -f 3 distro.txt` | 剪切第 3 列 |
|
||||
| `cut -c 7-10` | 剪切 7 - 10 字符 |
|
||||
| `cut -d ':' -f 1 /etc/password` | 分隔符 `:` |
|
||||
| `sort -k 3.7nbr -k 3.1nbr -k 3.4nbr distro.txt` | 按第 3 列第 7 个字符、第 3 列第 1 个字符和第 3 列第 4 个字符排序 |
|
||||
| `paste file1.txt file2.txt > newfile.txt` | 合并两个文件 |
|
||||
| `join file1.txt file2.txt` | 按公共字段连接两个文件 |
|
||||
|
||||
### 窍门和技巧
|
||||
|
||||
在 Linux 中,我们可以通过使用简单的命令或控制选项返回到命令的历史记录。
|
||||
|
||||
| 命令 | 描述 |
|
||||
| :- | :- |
|
||||
| `clear` | 清空屏幕 |
|
||||
| `history` | 查看保存命令的历史记录 |
|
||||
| `script filename` | 捕获文件中的所有命令执行 |
|
||||
|
||||
一些历史命令的技巧:
|
||||
|
||||
- `CTRL + R`: 搜索命令历史
|
||||
- `!!number`:执行编号为 `number` 的命令
|
||||
- `!!` :执行上一条命令
|
||||
- `!?string` : 执行包含 `string` 的上一条命令
|
||||
- `!string`:执行以 `string` 开始的上一条命令
|
||||
- `export HISTCONTROL=ignoredups`: 忽略重复条目
|
||||
- `export HISTSIZE=10000`:设置存储的历史行数
|
||||
|
||||
随着你对 Linux 命令逐渐熟悉,你将能够编写封装脚本。所有手动任务,如定期备份、清理文件、监控系统使用情况等,都可以使用脚本自动完成。在学习高级概念之前,本文将帮助您开始编写脚本。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.opensourceforu.com/2022/05/the-basic-concepts-of-shell-scripting/
|
||||
|
||||
作者:[Sathyanarayanan Thangavelu][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://www.opensourceforu.com/author/sathyanarayanan-thangavelu/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.opensourceforu.com/wp-content/uploads/2022/04/Shell-scripting.jpg
|
||||
[2]: https://www.opensourceforu.com/wp-content/uploads/2022/04/Figure-1-Manual-of-date-command.jpg
|
@ -0,0 +1,140 @@
|
||||
[#]: subject: "Rufus for Linux? Here Are the Best Live USB Creating Tools"
|
||||
[#]: via: "https://itsfoss.com/live-usb-creator-linux/"
|
||||
[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "alfred-hong"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15052-1.html"
|
||||
|
||||
U 盘启动盘创建工具 Rufus 在 Linux 上不能使用?这里有 6 个替代品
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202209/20/232656q7qc9vc9r6hn6bz9.jpg)
|
||||
|
||||
Rufus 一个用来创建启动盘的开源工具。它可以按照你的需求进行调整,用起来很简单。不仅用起来很方便,而且制作启动盘的速度也出奇的快。
|
||||
|
||||
遗憾的是,Rufus 不能在 Linux 上使用,它只能在 Windows 上使用。因此大多数在 Windows 上使用过 Rufus 的人,都会在 Linux 上寻找替代软件。
|
||||
|
||||
如果你也是这样,不用着急,我们有一些优秀的替代软件,可以满足不同的使用条件。
|
||||
|
||||
我们来看看一些关于 Rufus 的替代软件:
|
||||
|
||||
### 6 款最佳的 Linux 启动盘创建工具
|
||||
|
||||
列出的所有替代软件都是开源的,并且在 Linux 发行版运行很好。
|
||||
|
||||
**注意:** *下列软件无任何特定排序*
|
||||
|
||||
#### 1、balenaEtcher
|
||||
|
||||
![balena etcher 2022][1]
|
||||
|
||||
balenaEtcher(或 Etcher)对于多平台(Windows、 MacOS)用户是一个很好的选择,也包括 Linux 用户。
|
||||
|
||||
此软件没有任何高级选项。因此十分容易使用。只需要选择 ISO(镜像文件),然后选中目标 U 盘进行写入即可。
|
||||
|
||||
它是完全开源的,并在写入完成后检验你的 U 盘。此外,它还自动选择你插入的 U 盘,以避免你不小心选择了硬盘进行格式化。
|
||||
|
||||
你可以参考这本 [便捷手册][2] 来在 Linux 上安装它。
|
||||
|
||||
> **[balenaEtcher][3]**
|
||||
|
||||
#### 2、Fedora Media Writer
|
||||
|
||||
![fedora media writer][4]
|
||||
|
||||
Fedora Media Writer 是专门用来帮助用户创建 Fedora Linux 启动盘的软件。如果你还没有 ISO 文件,它还能为你下载 ISO。
|
||||
|
||||
当其它的 U 盘启动盘创建软件导致你不能格式化你的 U 盘时,它也是一个优秀的 U 盘启动盘修复程序。
|
||||
|
||||
不用担心,你也可以选择 Fedora Linux 之外的其他镜像来创建启动盘。
|
||||
|
||||
你可以在 Flathub 找到任何 Linux 发行版可用的最新的 [Flatpak][5] 软件包。如果你是新手请参考这篇 [Flatpak 指导][6]
|
||||
|
||||
> **[Fedora Media Writer][7]**
|
||||
|
||||
#### 3、Startup Disk Creator
|
||||
|
||||
![startup disk creator][8]
|
||||
|
||||
如果你使用的是 Ubuntu 系统,在系统上已经预装了一个 U 盘启动盘制作软件,即 Startup Disk Creator。
|
||||
|
||||
你可以用它选择任何需要的 ISO 文件(最好是 Ubuntu 的任何版本),并选择 USB 设备进行下一步。
|
||||
|
||||
当你确认操作后,它就会写入数据来完成制作启动盘。
|
||||
|
||||
#### 4、SUSE Studio Imagewriter
|
||||
|
||||
![imagewriter suse][9]
|
||||
|
||||
SUSE Studio Imagewriter 是一个简单的启动盘制作软件。
|
||||
|
||||
我没有在 Ubuntu 软件中心找到它,但是在 Manjaro 的社区仓库和 AUR 中可以找到。如果它可以适配你的 Linux 发行版,你可以试试它。
|
||||
|
||||
> **[SUSE Studio Imagewriter][10]**
|
||||
|
||||
#### 5、UNetbootin
|
||||
|
||||
![unetbootin][11]
|
||||
|
||||
UNetbootin 是一个支持 Linux、Windows 和 macOS 的 U 盘启动制作软件。有少量的几个可以调整的选项,比如你可以查看所有可用的驱动器,还可以选择一个发行版来自动下载 ISO 文件。
|
||||
|
||||
它与上面的软件不同,它并不是指定用在某些 Linux 发行版。因此,它支持各种各种各样的发行版和系统程序。
|
||||
|
||||
> **[UNetbootin][12]**
|
||||
|
||||
#### 6、Ventoy
|
||||
|
||||
![ventoy screenshot 2022][13]
|
||||
|
||||
Ventoy 是一个有趣的 USB 启动盘解决方案,你只需要复制粘贴镜像文件到 U 盘即可。
|
||||
|
||||
你仅仅需要在 U 盘上安装 Venoy,它会在其上建立两个分区。其中一个用来存储 ISO 镜像,你只需要将镜像文件粘贴到 U 盘即制作成功。
|
||||
|
||||
有趣的是你还可以使用它来 [引导多个系统][14]。
|
||||
|
||||
它可在 Windows 和 Linux 上使用。
|
||||
|
||||
> **[Ventoy][15]**
|
||||
|
||||
### 总结
|
||||
|
||||
如果你需要在 U 盘上放多个 Linux 发行版而不是反复格式化它,Ventoy 似乎是上面所有选项中最好的选择。
|
||||
|
||||
为了简单起见,特定于发行版的工具是个很好的选择,例如:Ubuntu 的 Startup Disk Creator 和 Fedora 的 Fedora Media Writer。
|
||||
|
||||
SUSE Studio Imagewriter 也不错,但可不能不是最方便的。
|
||||
|
||||
如果你没有任何特定的偏好,balenaEtcher 应该是最直接的选择,UNetbootin 是它的一个合适的替代软件。
|
||||
|
||||
你最偏爱哪个 U 盘启动盘创建软件?在下面的评论区中让我了解你的想法。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/live-usb-creator-linux/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[alfred-hong](https://github.com/alfred-hong)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://itsfoss.com/wp-content/uploads/2022/06/balena-etcher-2022-800x537.png
|
||||
[2]: https://itsfoss.com/install-etcher-linux/
|
||||
[3]: https://www.balena.io/etcher/
|
||||
[4]: https://itsfoss.com/wp-content/uploads/2022/06/fedora-media-writer.png
|
||||
[5]: https://itsfoss.com/what-is-flatpak/
|
||||
[6]: https://itsfoss.com/flatpak-guide/
|
||||
[7]: https://flathub.org/apps/details/org.fedoraproject.MediaWriter
|
||||
[8]: https://itsfoss.com/wp-content/uploads/2022/06/startup-disk-creator.png
|
||||
[9]: https://itsfoss.com/wp-content/uploads/2022/06/imagewriter-suse.png
|
||||
[10]: https://software.opensuse.org/package/imagewriter
|
||||
[11]: https://itsfoss.com/wp-content/uploads/2022/06/unetbootin.png
|
||||
[12]: https://unetbootin.github.io/
|
||||
[13]: https://itsfoss.com/wp-content/uploads/2022/06/ventoy-screenshot-2022.png
|
||||
[14]: https://itsfoss.com/multiple-linux-one-usb/
|
||||
[15]: https://www.ventoy.net/
|
@ -0,0 +1,213 @@
|
||||
[#]: subject: "Package a new Python module in 4 steps"
|
||||
[#]: via: "https://opensource.com/article/22/6/package-python-module-rpm"
|
||||
[#]: author: "Sumantro Mukherjee https://opensource.com/users/sumantro"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "Return7g"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15030-1.html"
|
||||
|
||||
4 步打包一个新的 Python 模块
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202209/14/155051kzjuzhzvmllmv2b5.jpg)
|
||||
|
||||
> pyp2rpm 使得创建 RPM 包的过程更加自动化。
|
||||
|
||||
当你安装一个应用程序时,你通常是在安装一个软件包,其中包含应用程序的可执行代码和重要文件,如文档、图标等。在 Linux上,软件一般被打包成 RPM 或 DEB 等格式,用户只要通过 `dnf` 或者 `apt` 等命令就可以进行安装了,这取决于你使用的 Linux 发行版。然而几乎每天都有新的 Python 模块发布,因此你很容易遇到一个尚未打包的 Python 模块。这就是 `pyp2rpm` 存在的意义了。
|
||||
|
||||
最近我在尝试安装一个叫 `python-concentration` 的模块,但是进展并不太顺利:
|
||||
|
||||
```
|
||||
$ sudo dnf install python-concentration
|
||||
Updating Subscription Management repositories.
|
||||
Last metadata expiration check: 1:23:32 ago on Sat 11 Jun 2022 06:37:25.
|
||||
No match for argument: python-concentration
|
||||
Error: Unable to find a match: python-concentration
|
||||
```
|
||||
|
||||
虽然这是一个发布在 PyPi 的包,但它仍不能被打包成 RPM 包。好消息是你可以使用 `pyp2rpm` 以一个相对简单的过程将它打包成 RPM 包。
|
||||
|
||||
首先你需要设置两个目录:
|
||||
|
||||
```
|
||||
$ mkdir rpmbuild
|
||||
$ cd rpmbuild && mkdir SPECS
|
||||
```
|
||||
|
||||
像这样去安装 `pyp2rpm`:
|
||||
|
||||
```
|
||||
$ sudo dnf install pyp2rpm
|
||||
```
|
||||
|
||||
### 1、生成 spec 文件
|
||||
|
||||
RPM 包的基础是一种 spec 文件,这个文件包含你创建这个包的所有信息,如所需的依赖关系、应用的版本号、安装的文件等信息。当指向某个 Python 模块时,`pyp2rpm` 会为它构建一个 spec 文件,你可以用它来创建 RPM 包。
|
||||
|
||||
下面以 `python-concentration` 为例演示如何构建一个 spec 文件:
|
||||
|
||||
```
|
||||
$ pyp2rpm concentration > ~/rpmbuild/SPECS/concentration.spec
|
||||
```
|
||||
|
||||
下面是它生成的文件:
|
||||
|
||||
```
|
||||
# Created by pyp2rpm-3.3.8
|
||||
%global pypi_name concentration
|
||||
%global pypi_version 1.1.5
|
||||
|
||||
Name: python-%{pypi_name}
|
||||
Version: %{pypi_version}
|
||||
Release: 1%{?dist}
|
||||
Summary: Get work done when you need to, goof off when you don't
|
||||
|
||||
License: None
|
||||
URL: None
|
||||
Source0: %{pypi_source}
|
||||
BuildArch: noarch
|
||||
|
||||
BuildRequires: python3-devel
|
||||
BuildRequires: python3dist(setuptools)
|
||||
|
||||
%description
|
||||
Concentration [![PyPI version]( [![Test Status]( [![Lint Status]( [![codecov](
|
||||
|
||||
%package -n python3-%{pypi_name}
|
||||
Summary: %{summary}
|
||||
%{?python_provide:%python_provide python3-%{pypi_name}}
|
||||
|
||||
Requires: (python3dist(hug) >= 2.6.1 with python3dist(hug) < 3~~)
|
||||
Requires: python3dist(setuptools)
|
||||
%description -n python3-%{pypi_name}
|
||||
Concentration [![PyPI version]( [![Test Status]( [![Lint Status]( [![codecov](
|
||||
|
||||
|
||||
%prep
|
||||
%autosetup -n %{pypi_name}-%{pypi_version}
|
||||
|
||||
%build
|
||||
%py3_build
|
||||
|
||||
%install
|
||||
%py3_install
|
||||
|
||||
%files -n python3-%{pypi_name}
|
||||
%license LICENSE
|
||||
%doc README.md
|
||||
%{_bindir}/concentration
|
||||
%{python3_sitelib}/%{pypi_name}
|
||||
%{python3_sitelib}/%{pypi_name}-%{pypi_version}-py%{python3_version}.egg-info
|
||||
|
||||
%changelog
|
||||
* - 1.1.5-1
|
||||
- Initial package.
|
||||
```
|
||||
|
||||
### 2、运行 rpmlint
|
||||
|
||||
为了确保 spec 文件符合标准,你需要对文件使用 `rpmlint` 命令:
|
||||
|
||||
```
|
||||
$ rpmlint ~/rpmbuild/SPEC/concentration.spec
|
||||
error: bad date in %changelog: - 1.1.5-1
|
||||
0 packages and 1 specfiles checked; 0 errors, 0 warnings.
|
||||
```
|
||||
|
||||
看起来更新日志(`%changelog`)需要记录日期。
|
||||
|
||||
```
|
||||
%changelog
|
||||
* Sat Jun 11 2022 Tux <tux@example.com> - 1.1.5-1
|
||||
```
|
||||
|
||||
再次运行 `rpmint`:
|
||||
|
||||
```
|
||||
$ rpmlint ~/rpmbuild/SPEC/concentration.spec
|
||||
0 packages and 1 specfiles checked; 0 errors, 0 warnings.
|
||||
```
|
||||
|
||||
成功!
|
||||
|
||||
### 3、下载源码
|
||||
|
||||
你需要下载好打包的代码才能进一步构建 RPM 包。一种简单的方式是解析你的 spec 文件以获取源码的网址。
|
||||
|
||||
首先,通过 `dnf` 安装 `spectool`:
|
||||
|
||||
```
|
||||
$ sudo dnf install spectool
|
||||
```
|
||||
|
||||
然后通过 `spectool` 来下载源码:
|
||||
|
||||
```
|
||||
$ cd ~/rpmbuild
|
||||
$ spectool -g -R SPEC/concentration.spec
|
||||
Downloading: https://files.pythonhosted.org/...concentration-1.1.5.tar.gz
|
||||
6.0 KiB / 6.0 KiB [=====================================]
|
||||
Downloaded: concentration-1.1.5.tar.gz
|
||||
```
|
||||
|
||||
这样就创建了一个 `SOURCES` 目录并将源码放入其中。
|
||||
|
||||
### 4、构建源软件包
|
||||
|
||||
现在你已经验证过 spec 文件了,接下来就可以通过 `rpmbuild` 构建源软件包了。如果你还没有安装 `rpmbuild`,你也可以通过 `dnf` 安装 `rpm-build` 包(或者在使用 `rpmbuild` 命令时根据终端的的提示进行安装)。
|
||||
|
||||
参数 `-bs` 表示构建源软件包。添加这个参数会产生一个 src.rpm 文件,这是一个用于为特定架构重新构建的通用包:
|
||||
|
||||
```
|
||||
$ rpmbuild -bs SPECS/concentration.spec
|
||||
Wrote: ~/rpmbuild/SRPMS/python-concentration-1.1.5-1.el9.src.rpm
|
||||
```
|
||||
|
||||
为你的系统构建一个可安装的 RPM 文件:
|
||||
|
||||
```
|
||||
$ rpmbuild –rebuild SRPMS/python-concentration-1.1.5-1.el9.src.rpm
|
||||
error: Failed build dependencies:
|
||||
python3-devel is needed by python-concentration-1.1.5-1.el9.noarch
|
||||
```
|
||||
|
||||
看起来这个包需要安装 Python 的开发库才能继续构建。安装它们以继续构建。这一次,构建成功了,并且渲染了更多的输出(为了清楚起见,我在这里简略了输出):
|
||||
|
||||
```
|
||||
$ sudo dnf install python3-devel -y
|
||||
$ rpmbuild –rebuild SRPMS/python-concentration-1.1.5-1.el9.src.rpm
|
||||
[...]
|
||||
Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.TYA7l2
|
||||
+ umask 022
|
||||
+ cd /home/bogus/rpmbuild/BUILD
|
||||
+ rm -rf concentration-1.1.5
|
||||
+ RPM_EC=0
|
||||
++ jobs -p
|
||||
+ exit 0
|
||||
```
|
||||
|
||||
你的 RPM 包现在已经构建在 `RPMS` 子目录下,像平常一样使用 `dnf` 安装它。
|
||||
|
||||
```
|
||||
$ sudo dnf install RPMS/noarch/python3-concentration*rpm
|
||||
```
|
||||
|
||||
### 为什么不使用 PyPi?
|
||||
|
||||
通常情况下我们并不需要将 Python 模块打包成 RPM 包。通过 PyPi 来安装模块也是可以接受的,但是 PyPi 会安装额外的包管理器对你的模块进行检查和更新。当你使用 `dnf` 来安装 RPM 包时,你在安装完成时就能够获取到完整的安装列表。有了 `pyp2rpm` 之后,这个过程就变得快速、简单且自动化了。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/6/package-python-module-rpm
|
||||
|
||||
作者:[Sumantro Mukherjee][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[Return7g](https://github.com/Return7g)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/sumantro
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/python-programming-code-keyboard.png
|
@ -0,0 +1,220 @@
|
||||
[#]: subject: "Turn your Python script into a command-line application"
|
||||
[#]: via: "https://opensource.com/article/22/7/bootstrap-python-command-line-application"
|
||||
[#]: author: "Mark Meyer https://opensource.com/users/ofosos"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "MjSeven"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15061-1.html"
|
||||
|
||||
将你的 Python 脚本转换为命令行程序
|
||||
======
|
||||
|
||||
> 使用 Python 中的 `scaffold` 和 `click` 库,你可以将一个简单的实用程序升级为一个成熟的命令行界面工具。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202209/23/093712jyayyed8x7d8d8yd.jpg)
|
||||
|
||||
在我的职业生涯中,我写过、用过和看到过很多随意的脚本。一些人需要半自动化完成任务,于是它们诞生了。一段时间后,它们变得越来越大。它们在一生中可能转手很多次。我常常希望这些脚本提供更多的**命令行工具式**的感觉。但是,从一次性脚本到合适的工具,真正提高质量水平有多难呢?事实证明这在 Python 中并不难。
|
||||
|
||||
### 搭建骨架脚本
|
||||
|
||||
在本文中,我将从一小段 Python 代码开始。我将把它应用到 `scaffold` 模块中,并使用 `click` 库扩展它以接受命令行参数。
|
||||
|
||||
```
|
||||
#!/usr/bin/python
|
||||
|
||||
from glob import glob
|
||||
from os.path import join, basename
|
||||
from shutil import move
|
||||
from datetime import datetime
|
||||
from os import link, unlink
|
||||
|
||||
LATEST = 'latest.txt'
|
||||
ARCHIVE = '/Users/mark/archive'
|
||||
INCOMING = '/Users/mark/incoming'
|
||||
TPATTERN = '%Y-%m-%d'
|
||||
|
||||
def transmogrify_filename(fname):
|
||||
bname = basename(fname)
|
||||
ts = datetime.now().strftime(TPATTERN)
|
||||
return '-'.join([ts, bname])
|
||||
|
||||
def set_current_latest(file):
|
||||
latest = join(ARCHIVE, LATEST)
|
||||
try:
|
||||
unlink(latest)
|
||||
except:
|
||||
pass
|
||||
link(file, latest)
|
||||
|
||||
def rotate_file(source):
|
||||
target = join(ARCHIVE, transmogrify_filename(source))
|
||||
move(source, target)
|
||||
set_current_latest(target)
|
||||
|
||||
def rotoscope():
|
||||
file_no = 0
|
||||
folder = join(INCOMING, '*.txt')
|
||||
print(f'Looking in {INCOMING}')
|
||||
for file in glob(folder):
|
||||
rotate_file(file)
|
||||
print(f'Rotated: {file}')
|
||||
file_no = file_no + 1
|
||||
print(f'Total files rotated: {file_no}')
|
||||
|
||||
if __name__ == '__main__':
|
||||
print('This is rotoscope 0.4.1. Bleep, bloop.')
|
||||
rotoscope()
|
||||
```
|
||||
|
||||
本文所有没有在这里插入显示的代码示例,你都可以在 [https://codeberg.org/ofosos/rotoscope][2] 中找到特定版本的代码。该仓库中的每个提交都描述了本文操作过程中一些有意义的步骤。
|
||||
|
||||
这个片段做了几件事:
|
||||
|
||||
* 检查 `INCOMING` 指定的路径中是否有文本文件
|
||||
* 如果存在,则使用当前时间戳创建一个新文件名,并将其移动到 `ARCHIVE`
|
||||
* 删除当前的 `ARCHIVE/latest.txt` 链接,并创建一个指向刚刚添加文件的新链接
|
||||
|
||||
作为一个示例,它很简单,但它会让你理解这个过程。
|
||||
|
||||
### 使用 Pyscaffold 创建应用程序
|
||||
|
||||
首先,你需要安装 `scaffold`、`click` 和 `tox` [Python 库][3]。
|
||||
|
||||
```
|
||||
$ python3 -m pip install scaffold click tox
|
||||
```
|
||||
|
||||
安装 `scaffold` 后,切换到示例的 `rotoscope` 项目所在的目录,然后执行以下命令:
|
||||
|
||||
```
|
||||
$ putup rotoscope -p rotoscope \
|
||||
--force --no-skeleton -n rotoscope \
|
||||
-d 'Move some files around.' -l GLWT \
|
||||
-u http://codeberg.org/ofosos/rotoscope \
|
||||
--save-config --pre-commit --markdown
|
||||
```
|
||||
|
||||
Pyscaffold 会重写我的 `README.md`,所以从 Git 恢复它:
|
||||
|
||||
```
|
||||
$ git checkout README.md
|
||||
```
|
||||
|
||||
Pyscaffold 在文档中说明了如何设置一个完整的示例项目,我不会在这里介绍,你之后可以探索。除此之外,Pyscaffold 还可以在项目中为你提供持续集成(CI)模板:
|
||||
|
||||
* 打包: 你的项目现在启用了 PyPi,所以你可以将其上传到一个仓库并从那里安装它。
|
||||
* 文档: 你的项目现在有了一个完整的文档文件夹层次结构,它基于 Sphinx,包括一个 readthedocs.org 构建器。
|
||||
* 测试: 你的项目现在可以与 tox 一起使用,测试文件夹包含运行基于 pytest 的测试所需的所有样板文件。
|
||||
* 依赖管理: 打包和测试基础结构都需要一种管理依赖关系的方法。`setup.cfg` 文件解决了这个问题,它包含所有依赖项。
|
||||
* 预提交钩子: 包括 Python 源代码格式工具 black 和 Python 风格检查器 flake8。
|
||||
|
||||
查看测试文件夹并在项目目录中运行 `tox` 命令,它会立即输出一个错误:打包基础设施无法找到相关库。
|
||||
|
||||
现在创建一个 `Git` 标记(例如 `v0.2`),此工具会将其识别为可安装版本。在提交更改之前,浏览一下自动生成的 `setup.cfg` 并根据需要编辑它。对于此示例,你可以修改 `LICENSE` 和项目描述,将这些更改添加到 Git 的暂存区,我必须禁用预提交钩子,然后提交它们。否则,我会遇到错误,因为 Python 风格检查器 flake8 会抱怨糟糕的格式。
|
||||
|
||||
```
|
||||
$ PRE_COMMIT_ALLOW_NO_CONFIG=1 git commit
|
||||
```
|
||||
|
||||
如果这个脚本有一个入口点,用户可以从命令行调用,那就更好了。现在,你只能通过找 `.py` 文件并手动执行它来运行。幸运的是,Python 的打包基础设施有一个很好的“罐装”方式,可以轻松地进行配置更改。将以下内容添加到 `setup.cfg` 的 `options.entry_points` 部分:
|
||||
|
||||
```
|
||||
console_scripts =
|
||||
roto = rotoscope.rotoscope:rotoscope
|
||||
```
|
||||
|
||||
这个更改会创建一个名为 `roto` 的 shell 命令,你可以使用它来调用 rotoscope 脚本,使用 `pip` 安装 rotoscope 后,可以使用 `roto` 命令。
|
||||
|
||||
就是这样,你可以从 Pyscaffold 免费获得所有打包、测试和文档设置。你还获得了一个预提交钩子来保证(大部分情况下)你按照设定规则提交。
|
||||
|
||||
### CLI 工具化
|
||||
|
||||
现在,一些值会硬编码到脚本中,它们作为命令 [参数][4] 会更方便。例如,将 `INCOMING` 常量作为命令行参数会更好。
|
||||
|
||||
首先,导入 [click][5] 库,使用 Click 提供的命令装饰器对 `rotoscope()` 方法进行装饰,并添加一个 Click 传递给 `rotoscope` 函数的参数。Click 提供了一组验证器,因此要向参数添加一个路径验证器。Click 还方便地使用函数的内嵌字符串作为命令行文档的一部分。所以你最终会得到以下方法签名:
|
||||
|
||||
```
|
||||
@click.command()
|
||||
@click.argument('incoming', type=click.Path(exists=True))
|
||||
def rotoscope(incoming):
|
||||
"""
|
||||
Rotoscope 0.4 - Bleep, blooop.
|
||||
Simple sample that move files.
|
||||
"""
|
||||
```
|
||||
|
||||
主函数会调用 `rotoscope()`,它现在是一个 Click 命令,不需要传递任何参数。
|
||||
|
||||
选项也可以使用 [环境变量][6] 自动填充。例如,将 `ARCHIVE` 常量改为一个选项:
|
||||
|
||||
```
|
||||
@click.option('archive', '--archive', default='/Users/mark/archive', envvar='ROTO_ARCHIVE', type=click.Path())
|
||||
```
|
||||
|
||||
使用相同的路径验证器。这一次,让 Click 填充环境变量,如果环境变量没有提供任何内容,则默认为旧常量的值。
|
||||
|
||||
Click 可以做更多的事情,它有彩色的控制台输出、提示和子命令,可以让你构建复杂的 CLI 工具。浏览 Click 文档会发现它的更多功能。
|
||||
|
||||
现在添加一些测试。
|
||||
|
||||
### 测试
|
||||
|
||||
Click 对使用 CLI 运行器 [运行端到端测试][7] 提供了一些建议。你可以用它来实现一个完整的测试(在 [示例项目][8] 中,测试在 `tests` 文件夹中。)
|
||||
|
||||
测试位于测试类的一个方法中。大多数约定与我在其他 Python 项目中使用的非常接近,但有一些细节,因为 rotoscope 使用 `click`。在 `test` 方法中,我创建了一个 `CliRunner`。测试使用它在一个隔离的文件系统中运行此命令。然后测试在隔离的文件系统中创建 `incoming` 和 `archive` 目录和一个虚拟的 `incoming/test.txt` 文件,然后它调用 CliRunner,就像你调用命令行应用程序一样。运行完成后,测试会检查隔离的文件系统,并验证 `incoming` 为空,并且 `archive` 包含两个文件(最新链接和存档文件)。
|
||||
|
||||
```
|
||||
from os import listdir, mkdir
|
||||
from click.testing import CliRunner
|
||||
from rotoscope.rotoscope import rotoscope
|
||||
|
||||
class TestRotoscope:
|
||||
def test_roto_good(self, tmp_path):
|
||||
runner = CliRunner()
|
||||
|
||||
with runner.isolated_filesystem(temp_dir=tmp_path) as td:
|
||||
mkdir("incoming")
|
||||
mkdir("archive")
|
||||
with open("incoming/test.txt", "w") as f:
|
||||
f.write("hello")
|
||||
|
||||
result = runner.invoke(rotoscope, ["incoming", "--archive", "archive"])
|
||||
assert result.exit_code == 0
|
||||
|
||||
print(td)
|
||||
incoming_f = listdir("incoming")
|
||||
archive_f = listdir("archive")
|
||||
assert len(incoming_f) == 0
|
||||
assert len(archive_f) == 2
|
||||
```
|
||||
|
||||
要在控制台上执行这些测试,在项目的根目录中运行 `tox`。
|
||||
|
||||
在执行测试期间,我在代码中发现了一个错误。当我进行 Click 转换时,`rotoscope` 只是取消了最新文件的链接,无论它是否存在。测试从一个新的文件系统(不是我的主文件夹)开始,很快就失败了。我可以通过在一个很好的隔离和自动化测试环境中运行来防止这种错误。这将避免很多“它在我的机器上正常工作”的问题。
|
||||
|
||||
### 搭建骨架脚本和模块
|
||||
|
||||
本文到此结束,我们可以使用 `scaffold` 和 `click` 完成一些高级操作。有很多方法可以升级一个普通的 Python 脚本,甚至可以将你的简单实用程序变成成熟的 CLI 工具。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/7/bootstrap-python-command-line-application
|
||||
|
||||
作者:[Mark Meyer][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://opensource.com/users/ofosos
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/python_linux_tux_penguin_programming.png
|
||||
[2]: https://codeberg.org/ofosos/rotoscope
|
||||
[3]: https://opensource.com/article/19/5/python-tox
|
||||
[4]: https://opensource.com/article/21/8/linux-terminal#argument
|
||||
[5]: https://click.palletsprojects.com
|
||||
[6]: https://opensource.com/article/19/8/what-are-environment-variables
|
||||
[7]: https://click.palletsprojects.com/en/8.1.x/testing
|
||||
[8]: https://codeberg.org/ofosos/rotoscope/commit/dfa60c1bfcb1ac720ad168e5e98f02bac1fde17d
|
@ -0,0 +1,290 @@
|
||||
[#]: subject: "What is the Difference Between macOS and Linux?"
|
||||
[#]: via: "https://itsfoss.com/mac-linux-difference/"
|
||||
[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "Donkey-Hao"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15010-1.html"
|
||||
|
||||
macOS 和 Linux 有什么区别?
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202209/08/164354illke77oz64k4smf.jpg)
|
||||
|
||||
我们经常对比 [Linux 和 Windows][1],那 macOS 和 Linux 有什么区别呢?
|
||||
|
||||
Linux 和 Windows 的差异很明显,但 Linux 和 macOS 在很多人看起来却很相似。
|
||||
|
||||
二者都可以在命令行中运行 Unix 命令,并且与用户在 Windows 中的体验大相径庭。同时,并不是所有 Windows 上的应用和游戏可以在 macOS 和Linux 上运行。
|
||||
|
||||
这就是为什么一些人认为苹果公司的 macOS 是基于 Linux 的系统。**但事实并非如此。** 尽管有相似之处,但 macOS 并不是 Linux。
|
||||
|
||||
这两个类 Unix 的操作系统有很多不同之处,我将在这篇文章中指出二者的异同之处。
|
||||
|
||||
就让我们来比较一下苹果和~~橙子~~企鹅吧。
|
||||
|
||||
### 起源
|
||||
|
||||
macOS 有一段迷人的历史。它的基础是由史蒂夫·乔布斯的 NeXT 计算机公司所开发的,那时候乔布斯不在苹果公司工作。从技术上讲,它是基于 [Mach 内核][2] 和 Unix 派生的 BSD。
|
||||
|
||||
那时候,**NeXT** 开发了 [NeXTSTEP][3] 操作系统来驱动它设计的设备和电脑。虽然它得到了一些关注,但是它并没有大获成功。之后,苹果公司恢复了史蒂夫在董事会的席位,作为交易的一部分,收购了 NeXT 公司,使得 NeXTSTEP 操作系统成为了 macOS 的基础。
|
||||
|
||||
这就是为什么 macOS 是结合了 Unix 组件和苹果公司的专有技术的操作系统。
|
||||
|
||||
**相反**,Linux(内核)是 Unix 的自由并开源的替代品。
|
||||
|
||||
Linux 不是一个操作系统,它需要一些组件比如 [桌面环境][4] 才能成为一个操作系统。有许多 [基于 Linux 的操作系统][5],称之为发行版。
|
||||
|
||||
简单起见,我们将这些操作系统称为 **Linux** 操作系统而不是特定的发行版。
|
||||
|
||||
### macOS 内核 vs. Linux 内核
|
||||
|
||||
macOS 内核的官方名称为 XNU。该 [缩写][6] 代表 “<ruby>XNU 不是 Unix<rt>XNU is Not Unix</rt></ruby>”(LCTT 校注:典型的 GNU 式回文缩写)。根据 [苹果公司的 GitHub 页面][7] 所说,XNU 是“将卡内基梅隆大学开发的 Mach 内核,与来自 FreeBSD 的组件,和用于编写驱动程序的 C++ API 相结合的一个混合内核”。其代码的 BSD 子系统部分是 [“通常在微内核系统中作为用户空间服务器实现”][8]。Mach 部分负责底层工作,例如多任务处理、受保护内存、虚拟内存管理、内核调试支持和控制台 I/O。
|
||||
|
||||
macOS 内核结合了<ruby>微内核<rt>micro kernel</rt></ruby>([Mach][9])和<ruby>宏内核<rt>monolithic kernel</rt></ruby>([BSD][10])的特性,而 Linux 只是一个宏内核。[宏内核][11] 负责管理 CPU、内存、进程间通信、设备驱动程序、文件系统和系统服务器调用。
|
||||
|
||||
### 二者共同之处
|
||||
|
||||
macOS 利用了 Unix 组件,而 Linux 是作为 Unix 的替代品而构建的。那么,二者有什么共同点呢?
|
||||
|
||||
二者都可以使用 **Unix 命令、bash/zsh、以及其他 shell**。或许 [默认 shell][12] 会有所不同,但是你可以根据你的喜好进行设置。除此之外,我想不到二者还有什么相似之处。
|
||||
|
||||
大概在十年前,我们可以说 Linux/macOS 提供的应用程序都比较少。但时过境迁。多年来,二者的软件生态和游戏支持都在不断发展,我们将在本文后面讨论。
|
||||
|
||||
### 代码库:闭源与开源
|
||||
|
||||
![open source proprietary illustration][13]
|
||||
|
||||
macOS 是一个闭源的操作系统,意味着你无法看到完整的操作系统源码。
|
||||
|
||||
当然,可以获得 [部分 macOS(大多为 GNU)库的源码][14]。还有用来开发 macOS 和 iOS 操作系统的 [XNU 内核代码][15]。但是 [你不能只用这些代码构建出一个 macOS 的克隆版][16],并安装在任何硬件上。
|
||||
|
||||
没有源码并不不是世界末日,但你会因为苹果公司保护和增强你使用电脑体验的主张和实践,而获得 **更少的透明度**。
|
||||
|
||||
一些人认为出于安全的原因而应该保持闭源。然而,不论开源还是闭源都面临安全威胁。
|
||||
|
||||
**二者的不同** 是:相对于员工数量有限的苹果公司来说,由于有很多开发者在开源社区中,所以开源软件会很快得到修复。
|
||||
|
||||
除非你毫无保留的相信苹果,不然 Linux 的开源模式更胜一筹。
|
||||
|
||||
### 目的和用途
|
||||
|
||||
macOS 专为台式机和笔记本电脑使用而设计。它非常适合于 **视频编辑、图形设计和音频编辑**。
|
||||
|
||||
当谈到 Linux ,你可以做很多事情。你可以将 Linux 用于:
|
||||
|
||||
* 客户端
|
||||
* Toaster(希望你了解 [物联网 IoT][17])
|
||||
* 单板机
|
||||
* 服务器
|
||||
|
||||
当然,在各种平台上使用它的体验并不相同,但 Linux 可以针对各种用例运行。
|
||||
|
||||
所以,如果你喜欢 Linux,你可以选择在其他平台上也使用 Linux,以获得舒适的体验。
|
||||
|
||||
### 用户体验
|
||||
|
||||
当谈到用户体验,这取决于个人喜好。
|
||||
|
||||
macOS 提供了 **令人愉悦的用户界面**。细致的动画和高分辨率的壁纸、图标,这在视觉上很有吸引力。
|
||||
|
||||
![macOS Monterey][18]
|
||||
|
||||
你可以期待在整个平台上获得轻松和无缝的体验。
|
||||
|
||||
使用 Linux,你可以获得同样令人愉悦且易于使用的用户界面。
|
||||
|
||||
![Zorin OS 16 Pro][19]
|
||||
|
||||
**不幸的是**,用户体验随着不同发行版所安装的桌面环境而不同。
|
||||
|
||||
你可以查看 [最好的桌面环境][20] 列表。你甚至还可以选择 [类似 macOS 的 Linux 发行版][21]。
|
||||
|
||||
例如,如果你使用 **Pop!_OS、Ubuntu、Zorin OS 或者 elementary OS** ,你将获得超棒的体验。
|
||||
|
||||
![Pop!_OS 22.04 LTS][22]
|
||||
|
||||
如果你使用类似于 MX Linux 或者其他的发行版,用户体验可能无法与 macOS 相提并论。
|
||||
|
||||
![MX Linux][23]
|
||||
|
||||
总的来说,Linux 的开箱即用体验是不一致的,但如果你知道自己在做什么,它就足够了。
|
||||
|
||||
如果你之前使用的是 Windows,刚开始会对 Linux 的界面感到困惑。
|
||||
|
||||
### 可定制性
|
||||
|
||||
![customizability][24]
|
||||
|
||||
如果你想要一个可以让你对它的各个方面进行改动的操作系统,那 macOS 不适合你。
|
||||
|
||||
尽管大多情况下苹果的设计在美学上会令人愉悦,但并不是每个人都喜欢它们。
|
||||
|
||||
如果你想要个性化、控制,并大量定制操作系统的具体细节,Linux 应该是完美的选择。
|
||||
|
||||
你可以根据需要选择自定义用户界面,使用各种不同元素,并根据你的喜好尽情发挥。请查看我们的 [KDE 定制][25] 指南以探索可能性。
|
||||
|
||||
虽然这很好,但在 Linux 系统上自定义内容时可能会适得其反,把它搞乱。因此,你需要学习、探索你想要自定义的内容。
|
||||
|
||||
### 运行硬件要求
|
||||
|
||||
![hardware illustration][26]
|
||||
|
||||
硬件是 macOS 遭受“重创”的地方。
|
||||
|
||||
如果你想获得 macOS 并有良好的体验,那需要购买昂贵的苹果硬件。
|
||||
|
||||
例如,支持 macOS 的笔记本电脑的基本配置从 **8 GB 内存** 和 **256 GB 存储空间** 开始,价格为 **$1200** 或更多。
|
||||
|
||||
除非你想经常使用交换空间进行多任务处理,并且已经拥有云存储空间,否则买苹果设备将是一个糟糕的主意。
|
||||
|
||||
相比之下,如果你不想花很多钱,但仍希望为你的系统(PC/笔记本电脑)配置一个不错的配置,那么以 800 美元左右的价格购买一台配备 16 GB 内存 + 512 GB SSD 的设备来运行 Linux 是很容易的。
|
||||
|
||||
**个人说明**:我习惯了 32 G 的内存 + 500 GB 的 SSD 存储。为了获得这种多任务处理空间(不使用交换空间),我将不得不向苹果公司支付溢价。
|
||||
|
||||
一些熟练的“修补匠”尝试在非苹果公司的硬件上运行 macOS。这样的系统被称为 <ruby>[黑苹果][27]<rt>Hackintosh</rt></ruby>,但它肯定远不及在普通计算机上运行 Linux 的舒适度。
|
||||
|
||||
### 软件生态
|
||||
|
||||
通过苹果公司为 macOS 制作的专属应用程序或工具,可以在 macOS 上获得 **一流的原生体验**。
|
||||
|
||||
是的,你可能必须购买这些应用程序。但是,与某些订阅选项不同的是,你可以通过 macOS 获得一次性购买选项。
|
||||
|
||||
![Final Cut Pro on macOS][28]
|
||||
|
||||
对于想要设计、编辑视频、编辑照片并拥有创意的用户,如果你不介意投资的话,macOS 的软件套件应该是一个不错的选择。
|
||||
|
||||
免费的苹果工具(如 iMovie、Keynote 等)本身就很好。将它们与 Final Cut Pro、Affinity Designer 等高级工具结合使用,你将获得世界级的编辑体验。别忘了,在 macOS 上也可以使用 Adobe 等创意工具。
|
||||
|
||||
此外,苹果公司对其平台上的应用程序有严格的指导方针,以增强第三方应用程序(免费或付费)的原生体验。
|
||||
|
||||
这就是为什么许多设计师和编辑更喜欢使用 macOS 而不是其他操作系统的原因。
|
||||
|
||||
对于 Linux 平台,你可以使用 **很棒的自由及开源软件** 来替代一些仅限于 macOS 的应用程序。除非你喜欢或有使用 macOS 特定应用程序的经验,否则你应该不会在使用适用于 Linux 的软件方面遇到问题。
|
||||
|
||||
![kdenlive editor][29]
|
||||
|
||||
原生应用的体验基于你使用的 Linux 发行版。
|
||||
|
||||
![Planner (To-do list app for Linux)][30]
|
||||
|
||||
它可能不像 macOS 那样完美,但如果你不是专业级的视频、图形编辑人员,应该没有任何问题。
|
||||
|
||||
### 在 Linux 和 macOS 上游戏
|
||||
|
||||
![gaming illustration][31]
|
||||
|
||||
虽然苹果公司在使其新的 M1/M2 芯片尽可能强大方面取得了不错的进展,但 macOS 目前对游戏的支持很差。
|
||||
|
||||
少数游戏可以正常工作,并且大多数都不受官方支持。说实话,为游戏而买台 Mac 并不是它的目的。
|
||||
|
||||
关于 Linux,许多 AAA 级游戏和独立游戏运行良好。当然,某些游戏存在一些问题。但是,随着 Valve 推动游戏对 Steam Deck 的官方支持,即使是像 **《蜘蛛侠:重制》** 这样的最新版本,都得到了 Steam Deck 的认可。
|
||||
|
||||
最终,这会帮助改善 Linux 平台对游戏的支持。
|
||||
|
||||
此外,考虑到 PC 显卡市场几乎恢复正常(接近或低于建议零售价),你可以获得不错的 PC 版本或笔记本电脑,而不必担心性能瓶颈。
|
||||
|
||||
你会花 **1800 美元以上购买配备 16 GB 内存和 512 GB SSD 的 Mac**,还是购买配备 32 GB 内存(或更多)和至少 1 TB SSD(或更多)的 PC/笔记本电脑?
|
||||
|
||||
那由你来决定。
|
||||
|
||||
### 软件包管理
|
||||
|
||||
![package manager illustration new][32]
|
||||
|
||||
软件包管理器能够让你很快地找到、安装或卸载你的操作系统中的软件。
|
||||
|
||||
与现有的任何系统相比,Linux 一直在包管理方面占据优势。
|
||||
|
||||
你可以获得 [Flatpak][33]、[Snap][34]、[Synaptic][35] 等开箱即用的选项。
|
||||
|
||||
但是,在默认情况下,Mac 用户没有任何可依赖的软件包管理器。幸运的是,像 [Homebrew][36] 这样的选项极大的方便了 macOS 用户。
|
||||
|
||||
当然,它还支持 Linux。因此,你可以在多个设备上使用它来简化操作。
|
||||
|
||||
### 系统升级
|
||||
|
||||
![software update illustration][37]
|
||||
|
||||
苹果公司不会发布其操作系统更新的具体计划。
|
||||
|
||||
例如,**macOS Ventura**(在撰写本文时即将进行版本升级)突然抛弃了 2017 年之前的所有 Mac 设备。
|
||||
|
||||
有趣的是,以前的操作系统版本平均支持 **七年左右**,但随着更新的变化,现在似乎是 **五年左右**。
|
||||
|
||||
对于苹果公司设计的芯片,这或许不是一个简单的答案。但是,至少 4 到 5 年的软件支持是安全的。
|
||||
|
||||
Linux 为你提供了选择。如果你想要一个没有功能升级,只专注于维护和安全性的稳定操作系统,Linux 发行版的 [LTS 版本][38] 可以免费为你提供 **五年** 的更新。这主要适用于 [Ubuntu][39] 或基于 Ubuntu 的发行版,如 Linux Mint。
|
||||
|
||||
此外,有一个 Ubuntu 订阅项目,你可以持续 **十年** 得到安全更新。
|
||||
|
||||
而且,不止于此,你还可以选择 [滚动发行的版本][40],来获得没有结束时间的持续的前沿更新。只要你的硬件能够胜任,你应该就能毫无问题地更新操作系统。
|
||||
|
||||
### macOS vs. Linux: 你应该选择哪一个?
|
||||
|
||||
如果你需要的话,macOS 可以说是物有所值。
|
||||
|
||||
不建议只需要上网、发送电子邮件,以及执行一些在任何平台上都可以执行的任务的用户购买 macOS。
|
||||
|
||||
macOS 仍然是一个小众的选择。
|
||||
|
||||
然而,随着 Linux 的改进,它已经成为先前是 Windows/macOS 的用户、计算机专业学生、开发人员、创意专业人士(如我们)以及广泛潜在用户的有用的选择。
|
||||
|
||||
选择 Linux 而不是 macOS (而不是反之)的原因有很多,但这是我的看法。
|
||||
|
||||
你对 macOS 与 Linux 有何看法?欢迎在下面的评论中分享你的想法。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/mac-linux-difference/
|
||||
|
||||
作者:[Ankush Das][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://itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://itsfoss.com/linux-better-than-windows/
|
||||
[2]: https://en.wikipedia.org/wiki/Mach_(kernel)
|
||||
[3]: https://en.wikipedia.org/wiki/NeXTSTEP
|
||||
[4]: https://itsfoss.com/what-is-desktop-environment/
|
||||
[5]: https://itsfoss.com/what-is-linux/
|
||||
[6]: https://github.com/apple/darwin-xnu
|
||||
[7]: https://github.com/apple/darwin-xnu
|
||||
[8]: http://osxbook.com/book/bonus/ancient/whatismacosx/arch_xnu.html
|
||||
[9]: https://en.wikipedia.org/wiki/Mach_(kernel)
|
||||
[10]: https://en.wikipedia.org/wiki/FreeBSD
|
||||
[11]: https://www.howtogeek.com/howto/31632/what-is-the-linux-kernel-and-what-does-it-do/
|
||||
[12]: https://linuxhandbook.com/change-shell-linux/
|
||||
[13]: https://itsfoss.com/wp-content/uploads/2022/08/open-source-proprietary-illustration.jpg
|
||||
[14]: https://opensource.apple.com/releases/
|
||||
[15]: https://github.com/apple/darwin-xnu
|
||||
[16]: https://www.techrepublic.com/article/why-apple-open-sourcing-mac-os-x-isnt-terribly-exciting/
|
||||
[17]: https://www.ibm.com/blogs/internet-of-things/what-is-the-iot/
|
||||
[18]: https://itsfoss.com/wp-content/uploads/2022/08/macos-monterey-screenshot.jpg
|
||||
[19]: https://itsfoss.com/wp-content/uploads/2021/12/zorin-os-16-mac.png
|
||||
[20]: https://itsfoss.com/best-linux-desktop-environments/
|
||||
[21]: https://itsfoss.com/macos-like-linux-distros/
|
||||
[22]: https://itsfoss.com/wp-content/uploads/2022/08/pop-os-screenshot-2022.png
|
||||
[23]: https://itsfoss.com/wp-content/uploads/2022/07/10.-MX-Linux.jpg
|
||||
[24]: https://itsfoss.com/wp-content/uploads/2022/08/customizability-illustration.jpg
|
||||
[25]: https://itsfoss.com/kde-customization/
|
||||
[26]: https://itsfoss.com/wp-content/uploads/2022/08/hardware-illustration-800x450.jpg
|
||||
[27]: https://www.freecodecamp.org/news/build-a-hackintosh/
|
||||
[28]: https://itsfoss.com/wp-content/uploads/2022/08/final-cut-pro-mac.jpg
|
||||
[29]: https://itsfoss.com/wp-content/uploads/2022/08/kdenlive-editor.jpg
|
||||
[30]: https://itsfoss.com/wp-content/uploads/2021/08/planner-board-view.png
|
||||
[31]: https://itsfoss.com/wp-content/uploads/2022/08/gaming-illustration.jpg
|
||||
[32]: https://itsfoss.com/wp-content/uploads/2022/08/package-manager-illustration-new.jpg
|
||||
[33]: https://itsfoss.com/what-is-flatpak/
|
||||
[34]: https://itsfoss.com/use-snap-packages-ubuntu-16-04/
|
||||
[35]: https://itsfoss.com/synaptic-package-manager/
|
||||
[36]: https://itsfoss.com/homebrew-linux/
|
||||
[37]: https://itsfoss.com/wp-content/uploads/2022/07/software-update-illustration.jpg
|
||||
[38]: https://itsfoss.com/long-term-support-lts/
|
||||
[39]: https://itsfoss.com/getting-started-with-ubuntu/
|
||||
[40]: https://itsfoss.com/best-rolling-release-distros/
|
@ -0,0 +1,84 @@
|
||||
[#]: subject: "How to Apply Accent Colour in Ubuntu Desktop"
|
||||
[#]: via: "https://www.debugpoint.com/ubuntu-accent-colour/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "yjacks"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15025-1.html"
|
||||
|
||||
如何在 Ubuntu 桌面中应用强调色
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202209/13/075753yoi4j2ozozkkxmmk.jpg)
|
||||
|
||||
> 得益于开发者们最近的贡献,在 Ubuntu 中使用自己的强调色是很简单的。
|
||||
|
||||
每个 Linux 发行版都有它们默认的主题,具有各自的主色调。强调色用于在各个设置中突出主色调。通常,主色调和强调色应该形成对比和补充。
|
||||
|
||||
在最近的 GNOME 桌面的更新之后,Ubuntu 桌面在 22.04 LTS 版本中引入了强调色。
|
||||
|
||||
尽管如何应用它们是显而易见的,但是为了 Linux 的新手,我将解释如何在 Ubuntu 桌面中使用强调色。
|
||||
|
||||
### 在 Ubuntu 桌面中应用强调色
|
||||
|
||||
1. 从应用菜单中打开 <ruby>系统设置<rt>System Settings</rt></ruby>
|
||||
2. 进入 <ruby>外观<rt>Appearance</rt></ruby> 菜单
|
||||
3. 在 <ruby>风格<rt>Style</rt></ruby> 菜单下,你应该见到一套预设的颜色。
|
||||
4. 选择其中的一个来改变强调色。
|
||||
|
||||
一旦更改,强调色将被应用到 GTK 应用程序中的选区和 GTK 控件中,如切换按钮和文件夹的默认外观。
|
||||
|
||||
默认的强调色是橙色,有十种颜色可供选择,具体如下:
|
||||
|
||||
* 橙色
|
||||
* 树皮色
|
||||
* 鼠尾草色
|
||||
* 橄榄绿
|
||||
* 铬绿
|
||||
* 普鲁士绿
|
||||
* 蓝色
|
||||
* 紫色
|
||||
* 品红色
|
||||
* 红色
|
||||
|
||||
![Accent Colour in Ubuntu][1]
|
||||
|
||||
(LCTT 译注:树皮色是一种棕色,鼠尾草色是一种灰绿色。)
|
||||
|
||||
你应该记住一点,深色和浅色的主题的强调色组合可能改变你的桌面的整体外观。
|
||||
|
||||
以上的特性只是只适用于目前使用 GNOME 桌面的 Ubuntu,而不适用于其它提供原生 GNOME 的发行版,例如 Fedora Workstation。因为有一些内容是由 Ubuntu 团队开发的,并且并没有合并到 GNOME 上游。
|
||||
|
||||
### Kubuntu 中的强调色
|
||||
|
||||
使用带有 KDE Plasma 桌面的 Kubuntu,你可以简单地使用强调色。KDE Plasma 提供了预设的颜色,也有自定义的颜色选择器选项。另外,自 KDE Plasma 5.25 起,强调色可以根据壁纸来改变。
|
||||
|
||||
为了在 Kubuntu 中改变它,跟着下面的步骤走:
|
||||
|
||||
* 在应用菜单中打开 <ruby>系统设置<rt>System Settings</rt></ruby>
|
||||
* 进入 <ruby>外观<rt>Appearance</rt></ruby> > <ruby>全局主题<rt>Global Theme</rt></ruby> > <ruby>颜色<rt>Colours</rt></ruby> 标签
|
||||
* 选择你的强调色
|
||||
|
||||
![KDE Plasma 5.25 - Accent Colour Change Based on wallpaper][2]
|
||||
|
||||
我知道 Lubuntu 与 Xubuntu 并没有这个特性。而且它不太可能很快到来。
|
||||
|
||||
使用愉快。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/ubuntu-accent-colour/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[yjacks](https://github.com/yjacks)
|
||||
校对:[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/08/Accent-Colour-in-Ubuntu.jpg
|
||||
[2]: https://www.debugpoint.com/wp-content/uploads/2022/05/KDE-Plasma-5.25-Accent-Colour-Change-Based-on-wallpaper-1024x611.jpg
|
||||
[3]: https://t.me/debugpoint
|
88
published/202209/20220819 5 note-taking apps for Linux.md
Normal file
88
published/202209/20220819 5 note-taking apps for Linux.md
Normal file
@ -0,0 +1,88 @@
|
||||
[#]: subject: "5 note-taking apps for Linux"
|
||||
[#]: via: "https://opensource.com/article/22/8/note-taking-apps-linux"
|
||||
[#]: author: "Don Watkins https://opensource.com/users/don-watkins"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14990-1.html"
|
||||
|
||||
5 款适用于 Linux 的笔记应用
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202209/01/173456nfc42fnqkiwfkh90.jpg)
|
||||
|
||||
> 使用这些开源工具来记笔记。
|
||||
|
||||
笔记是任何作者生活的一部分。我的大部分文章都是从笔记应用开始的,这对我来说通常是 [Joplin][2]。有大量适用于 Linux 的笔记应用,你可能使用的不是我最喜欢的应用。最近的一篇博客文章让我想起了其中的六个,所以我整理了一份我最喜欢的列表。
|
||||
|
||||
### Joplin
|
||||
|
||||
![Joplin][3]
|
||||
|
||||
[Joplin][4] 适用于 Linux、Windows、macOS、Android 和 iOS。我喜欢 Joplin,因为它会自动保存你添加的任何内容。笔记可以上传到 NextCloud、OwnCloud、Joplin Cloud,甚至是 OneDrive、Dropbox 或任何 WebDav 应用等闭源服务。Joplin 还支持加密。
|
||||
|
||||
以各种格式导出笔记也很容易。它带有八个不同的主题,可让你定制其外观。
|
||||
|
||||
Joplin 采用 MIT 许可证。最初于 2017 年发布,Joplin 正在与大量贡献者社区一起持续开发。
|
||||
|
||||
### Xournal
|
||||
|
||||
![Xournal][5]
|
||||
|
||||
[Xournal][6] 适用于 Linux、Windows、macOS 和 Android。它的目的是让你创建包含几乎任何你可以想象的媒体类型的笔记。它支持压敏手写笔和绘图板,因此你可以创建 [涂鸦笔记][7]。你可以在里面打字、绘制简单的矢量、导入图形、录制音频等等。你还可以使用 Xournal 来注释 PDF,这就是我使用它的方式。它以 GPLv2 许可证发布,你可以以多种格式导出笔记。
|
||||
|
||||
### Trillium
|
||||
|
||||
![Trillium][8]
|
||||
|
||||
[Trillium][9] 是一个层级笔记应用,专注于知识构建库。它具有丰富的所见即所得编辑功能,支持表格、图像和 Markdown。它支持使用语法高亮编辑源代码中的注释。它是在 AGPL 许可证下发布的。
|
||||
|
||||
Trilium 可用作 Linux 和 Windows 的桌面应用,以及你可以在自己的 Linux 服务器上托管的 Web 应用。
|
||||
|
||||
### Gnote
|
||||
|
||||
![Gnote][10]
|
||||
|
||||
[Gnote][11] 是一个为 Linux 编写的开源笔记应用。它是由 Hubert Figuière 从一个名为 [Tomboy][12] 的项目中克隆出来的。与 Tomboy 一样,Gnote 使用类似 Wiki 的链接系统来允许你将笔记链接在一起。
|
||||
|
||||
GNote 的源代码可在 [GitLab][13] 上找到。该软件是 GPLv3 许可。
|
||||
|
||||
### CherryTree
|
||||
|
||||
![CherryTree][14]
|
||||
|
||||
CherryTree 支持层级笔记。在 CherryTree 中,所有东西都是一个节点。节点可以是纯文本、富文本、各种编程语言的语法高亮。每个节点可以有子节点,每个子节点有不同的格式。
|
||||
|
||||
CherryTree 具有富文本和语法高亮的特点,并可以将数据存储在一个 XML 或 [SQLite][15] 文件中。CherryTree 可以从各种格式导入,包括 Markdown、HTML、纯文本、Gnote、Tomboy 和其他格式。它可以将文件导出为 PDF、HTML、纯文本和它自己的 CherryTree 格式。
|
||||
|
||||
CherryTree 使用 GPLv3 许可,可以安装在 Linux、Windows 和 macOS 上。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/8/note-taking-apps-linux
|
||||
|
||||
作者:[Don Watkins][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/don-watkins
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/write-hand_0.jpg
|
||||
[2]: https://opensource.com/article/21/1/notes-joplin
|
||||
[3]: https://opensource.com/sites/default/files/2022-08/joplin.png
|
||||
[4]: https://joplinapp.org/
|
||||
[5]: https://opensource.com/sites/default/files/2022-08/xournal.png
|
||||
[6]: https://xournalpp.github.io/
|
||||
[7]: https://opensource.com/article/22/6/open-source-sketchnotes
|
||||
[8]: https://opensource.com/sites/default/files/2022-08/trillium.png
|
||||
[9]: https://github.com/zadam/trilium
|
||||
[10]: https://opensource.com/sites/default/files/2022-08/gnote.png
|
||||
[11]: https://wiki.gnome.org/Apps/Gnote
|
||||
[12]: https://wiki.gnome.org/Apps/Tomboy
|
||||
[13]: https://gitlab.gnome.org/GNOME/gnote
|
||||
[14]: https://opensource.com/sites/default/files/2022-08/cherrytree.png
|
||||
[15]: https://opensource.com/article/21/2/sqlite3-cheat-sheet
|
@ -0,0 +1,87 @@
|
||||
[#]: subject: "How to Create and Switch Workspaces in Linux Mint"
|
||||
[#]: via: "https://itsfoss.com/workspaces-linux-mint/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15009-1.html"
|
||||
|
||||
如何在 Linux Mint 中创建和切换工作区
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202209/08/103250exm22bu2jtbsyjjj.jpg)
|
||||
|
||||
工作区是组织工作的好方法。
|
||||
|
||||
假设你打开了太多应用。你的任务栏会很混乱,你可能很难在不同的程序之间查找/移动。
|
||||
|
||||
在这种情况下,工作区会派上用场。你可以对不同工作区中的应用进行分组。假设你打开了许多与编程相关的应用,而同时你也在处理文档。
|
||||
|
||||
你可以将它们组织在单独的工作区中。单击并拖动应用窗口,它应该显示将应用移动到不同工作区的选项。
|
||||
|
||||
这将以更有条理的方式简化你的工作,并节省一些时间和挫败感。
|
||||
|
||||
听起来不错?让我向你展示如何在带 [Cinnamon][1] 桌面环境的 Linux Mint 中创建工作区并在它们之间切换。
|
||||
|
||||
### 创建新工作区
|
||||
|
||||
在 Linux Mint 中创建或访问工作区很容易。只需按 `CTRL + ALT+ ↑`。它将向你显示如下所示的屏幕。
|
||||
|
||||
只需单击右侧的 `+` 号即可在默认的 4 个工作区之外添加的新工作区。
|
||||
|
||||
![Workspace Overview in Linux Mint][2]
|
||||
|
||||
Linux Mint 中的工作区是持久的。创建后,这些工作区将始终存在,即使在下次启动后也是如此。
|
||||
|
||||
### 在工作区之间切换
|
||||
|
||||
有两种方法可以访问工作区并在它们之间切换。
|
||||
|
||||
* 使用 `CTRL + ALT+ ↑`,将显示出所有工作区,然后使用箭头键或鼠标在它们之间移动。
|
||||
* 使用热角并在左上角移动鼠标。
|
||||
|
||||
默认情况下,最新版本的 Linux Mint 中禁用了热角功能。
|
||||
|
||||
要启用热角在工作区之间切换,你应该进入 <ruby>系统设置<rt>System Settings</rt></ruby> 并选择 <ruby>热角<rt>Hot Corners</rt></ruby> 选项。
|
||||
|
||||
![Hot Corners Option in System Settings][3]
|
||||
|
||||
现在,通过切换按钮启用左上角。默认情况下,此角专用于显示所有工作区(你也可以更改它)。
|
||||
|
||||
![Show All Workspaces in Top Left Corner][4]
|
||||
|
||||
你现在可以通过将鼠标悬停在左上角来访问工作区网格。
|
||||
|
||||
此外,如果需要,你可以按右侧的 `+` 符号添加新工作区。或根据需要通过单击名称来重命名现有工作区。
|
||||
|
||||
![Workspace Overview Accessible from Top Left Corner][5]
|
||||
|
||||
### 删除工作区
|
||||
|
||||
实际上,你可以通过单击 `+` 号来创建多个工作区。如果你想删除工作区,请将鼠标悬停在该工作区上,单击工作区右上角的 `X` 号。
|
||||
|
||||
![Delete a Workspace][6]
|
||||
|
||||
我希望这篇快速文章能帮助你在 Linux Mint 中创建工作区。你经常使用工作空间吗?让我们知道你对工作空间的看法。同时,你还可以查看 [安装 Linux Mint 20 后要做的事情][7] 的帖子。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/workspaces-linux-mint/
|
||||
|
||||
作者:[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/quickly-fix-broken-unity-installing-cinnamon-20-ubuntu-1310/
|
||||
[2]: https://itsfoss.com/wp-content/uploads/2022/08/workspace-overview-in-linux-mint.png
|
||||
[3]: https://itsfoss.com/wp-content/uploads/2022/08/hot-corners-option-in-system-settings.png
|
||||
[4]: https://itsfoss.com/wp-content/uploads/2022/08/show-all-workspaces-in-top-left-corner.png
|
||||
[5]: https://itsfoss.com/wp-content/uploads/2022/08/workspace-overview-accessible-from-top-left-corner-1.png
|
||||
[6]: https://itsfoss.com/wp-content/uploads/2022/08/delete-a-workspace.png
|
||||
[7]: https://itsfoss.com/things-to-do-after-installing-linux-mint-20/
|
@ -0,0 +1,151 @@
|
||||
[#]: subject: "What if a Lifelong Linux User Tried Windows or macOS for the First Time?"
|
||||
[#]: via: "https://news.itsfoss.com/linux-user-trying-windows-macos/"
|
||||
[#]: author: "Abhishek https://news.itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "Kira-Pgr"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15000-1.html"
|
||||
|
||||
用惯 Linux 的人第一次用 Windows 或 macOS 会怎样?
|
||||
======
|
||||
|
||||
> Windows 用户在转换到 Linux 的过程中会遇到很多问题。如果反过来,一个一直用 Linux 的用户第一次用 Windows 或 macOS 会遇到什么问题呢?
|
||||
|
||||
![一直用 Linux 的人第一次用 Windows 或 macOS 会怎样?][1]
|
||||
|
||||
还记得 YouTube 频道 Linus Tech Tips 中 Linus Sebastian [尝试在 Linux 上玩游戏][2] 的场面吗? 尽管终端显示了明显的警告, 他最后还是把他的桌面环境删掉了。
|
||||
|
||||
![Linus Sebastian 弄坏了他的 Linux 系统][3]
|
||||
|
||||
考虑到 Sebastian 日常用 Windows 玩游戏, 换到 Linux 肯定需要一定的时间。
|
||||
|
||||
所以,这是 Linux 的问题吗? 还是 Sebastian 搞错了?
|
||||
|
||||
难道说,任何对操作系统不熟悉的用户在第一次尝试使用该系统的时候都会遇到问题?
|
||||
|
||||
接下来,你可以从不同的角度去了解 Linux 用户第一次使用 Windows 或者 macOS 的感受。
|
||||
|
||||
Linux 用户第一次用 Windows 或 macOS 会非常容易?还是会和 Sebastian 用 Linux 时一样感觉糟糕?
|
||||
|
||||
这肯定是非常有趣的话题……
|
||||
|
||||
一位 DevOps 高级工程师 **Scott Williams** 在一系列推文中假想了 Linux 用户第一次用 Windows 或 macOS 的场面。
|
||||
|
||||
### 在 Windows 11 上怎么启用 TPM 2.0?
|
||||
|
||||
如何安装 Windows 的最新版本 Windows 11?
|
||||
|
||||
> [Scott Williams][5]:\
|
||||
> 今晚,看我在能不能在这台用了 4 年的笔记本电脑上启用 TPM2.0 并运行 Windows 11。这台电脑支持 Intel PTT,所以应该会很顺利吧?
|
||||
|
||||
怎样启用 TPM 2.0? 如何在 BIOS 菜单中找到它? 启用 TPM 2.0 安全吗? 我是否需要刷一个更新的 BIOS? 更新 BIOS 的过程中是否会弄坏我的主版?
|
||||
|
||||
这些就是些每个 Linux 用户(甚至是 macOS/Windows 用户)将系统升级到 Windows 11 时都会遇到的一些问题。
|
||||
|
||||
Linux 用户从来没有必要做如此奇怪的事情来让系统正常工作。即使是在 2022 年。但是 Windows 11 需要你在升级前了解 BIOS 设置和 TPM 芯片的情况。
|
||||
|
||||
虽然 Scott 提到的是旧笔记本电脑,但值得注意的是,即使是最新的主板(比如 Z590),你可能也需要调整 BIOS 设置或者刷一个版本更高的 BIOS 版本才能支持 Windows 11。
|
||||
|
||||
由于更新 BIOS 有一定的风险,这种事情即使是对于懂技术的用户也是很不方便。
|
||||
|
||||
### 我需要用杀毒软件吗?用哪个?
|
||||
|
||||
虽说苹果的 XProtect 和 Windows Defender 能提供基本保护,但对于想要更好保护的用户来说,在杀毒软件方面有几个选择:
|
||||
|
||||
> [Scott Williams][6]:\
|
||||
> 所以我究竟需不需要装杀毒软件?装哪个?
|
||||
|
||||
网上有那么多选择和软文,用户很难确定那个杀毒软件最好,已经为之付费是否值得。
|
||||
|
||||
而 Linux 用户就会这么想: *我竟然还要安装这个? 不会很浪费性能吗? 我需要这么多安全防护功能吗? Windows 不是一个安全的操作系统吗?*
|
||||
|
||||
### macOS 和 iCloud:一个爱情故事?
|
||||
|
||||
> [Scott Williams][7]:\
|
||||
> iCloud 是什么?我怎么把它删掉?
|
||||
|
||||
Linux 用户们并不喜欢集成的云服务。他们宁愿挂载一个网盘(或网络存储器)。
|
||||
|
||||
即使他们选择了网盘,也应该按照用户的意图来工作。但是,在 macOS 上,你会经常被提示要使用 iCloud,同时 Siri 还会跳出来捣乱。
|
||||
|
||||
### Linux 用户清理注册表
|
||||
|
||||
原先使用 Linux 的新手 Windows 用户为了能优化系统性能去清理注册表,但在面对那么多清理注册表和优化系统以提高性能的工具和选项时,可能会以一个没有反应的 Windows 而告终。
|
||||
|
||||
> [Scott Williams][8]:\
|
||||
> Reddit上有些人说需要“清理注册表”,我按照几个教程删除了一些东西,然后现在我的 Windows 变得很奇怪。
|
||||
|
||||
即使在 2022 年,对于应该在什么时候手动或者用工具清理注册表还是没有明确的规定。
|
||||
|
||||
虽说资深 Linux 用户喜欢在尝试新东西前关注细节。但如果 GUI 中没有恰当的警告或提示,还怎么知道所有的注意事项呢。
|
||||
|
||||
### 经常需要重启
|
||||
|
||||
虽说不像 Linux 的重启那样,Windows 的重启可以修复问题。不过,我到底要在更新 Windows 或者安装软件后重启多少次啊?
|
||||
|
||||
> [Scott Williams][9]:\
|
||||
> 第一次尝试 Windows 或 macOS 的 Linux 用户是这样的:\
|
||||
> “究竟需要安装多少个版本的 .NET? 已经重启了多少次了?” \
|
||||
> “为什么我的 Adobe 版本不支持这个版本的 macOS? 难怪那么多人在用 macOS 时会遇到麻烦。苹果公司需要修复这个问题了。”
|
||||
|
||||
每次我重启的时候后台运行的程序都被干掉了。
|
||||
|
||||
为什么 Windows 就不能在检测新安装的程序或者更新的时候简单地刷新一下,而不是重启呢。Windows 为什么反着来呢。
|
||||
|
||||
### 这些东西还需要花钱? 我有 Windows 许可证还不够?
|
||||
|
||||
Linux 主要是自由和开源软件构成的,因此预装的工具也是免费的。
|
||||
|
||||
所以, 一个用惯那些工具的用户就不得不突然需要花钱买一个 Windows 许可证,而且还要支付软件费用。
|
||||
|
||||
微软是不是太贪婪了呢?
|
||||
|
||||
### 默认就缺少必须的软件包
|
||||
|
||||
在安装完 Windows 后我连压缩包都解压不了?Windows 真的是现代操作系统吗?
|
||||
|
||||
### macOS 配置多显示器
|
||||
|
||||
> [Scott Williams][10]:\
|
||||
> 怎样让我的显示器在 macOS 上工作呢?
|
||||
|
||||
在 Linux 上配置多显示器非常轻松。但在 macOS 上完全不是那回事。
|
||||
|
||||
### 总结
|
||||
|
||||
归根到底,这要看用户的标准和你熟悉的内容。Windows 和 macOS 经常被看作标准的桌面系统。
|
||||
|
||||
然而相比之下,大多数人除了知道 Linux 很难用外,对有关 Linux 的东西了解甚少。
|
||||
|
||||
不过,你只要掌握使用 Linux 的要领,就像你掌握 Windows、macOS 那样,用 Linux 桌面环境就很轻松了。
|
||||
|
||||
只不过在用 Linux 的过程会遇到各种各样的问题,但你只要有耐心就能享受整个过程了。
|
||||
|
||||
Linux 本身没有什么问题,是其他系统用户未能熟悉 Linux 的问题。我们并不希望 Linux 变成 Windows,也不希望 Windows 表现得像 Linux,任何操作系统都应该“做它自己”。
|
||||
|
||||
但话又说回来,不应该因为一个长期使用 Windows 的用户在最初使用时没有良好的体验就把 Linux 排除在外,因为同样的情况也可能发生在一个长期使用 Linux 的用户尝试 Windows/MacOS 时。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/linux-user-trying-windows-macos/
|
||||
|
||||
作者:[Abhishek][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[Kira-Pgr](https://github.com/Kira-Pgr)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/content/images/size/w1200/2022/08/linux-windows.png
|
||||
[2]: https://www.youtube.com/watch?v=0506yDSgU7M&t=788s
|
||||
[3]: https://news.itsfoss.com/content/images/2022/08/linus-sebastian-nukes-pop-os-while-installing-steam-os.webp
|
||||
[4]: https://news.itsfoss.com/more-linux-distros-become-linus-proof/
|
||||
[5]: https://twitter.com/vwbusguy/status/1463543535630569473
|
||||
[6]: https://twitter.com/vwbusguy/status/1463556939728572419
|
||||
[7]: https://twitter.com/vwbusguy/status/1463579003504136192
|
||||
[8]: https://twitter.com/vwbusguy/status/1463595769051549697
|
||||
[9]: https://twitter.com/vwbusguy/status/1463538368956887043
|
||||
[10]: https://twitter.com/vwbusguy/status/1463606807906029570
|
@ -0,0 +1,284 @@
|
||||
[#]: subject: "Become A Pro Flatpak User By Learning These Commands"
|
||||
[#]: via: "https://www.debugpoint.com/flatpak-commands/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15007-1.html"
|
||||
|
||||
如何成为专业的 Flatpak 用户
|
||||
======
|
||||
|
||||
> 在这篇文章中,我将向你展示各种 Flatpak 命令,使你成为 Flatpak 的专业用户。
|
||||
|
||||
![][1]
|
||||
|
||||
Flatpak 沙盒技术是 Linux 应用分发的未来。如今,几乎所有重要的发行版都预装了 Flatpak,因为采用它很容易,维护它也更直接。
|
||||
|
||||
如果你每天都使用 Flatpak,你可能知道这些命令。但如果你还在考虑把每一个应用程序都转到 Flatpak,那么你应该通过这个命令列表来了解如何轻松管理 Flatpak 应用程序。
|
||||
|
||||
因此,为了帮助你做到这一点,我列出了一些易于使用的 Flatpak 命令供你参考,这些命令是从文档中的大量命令集中筛选出来的。
|
||||
|
||||
### Flatpak 命令参考
|
||||
|
||||
首先,我们来谈谈一些基本的命令。
|
||||
|
||||
#### 1、安装 Flatpak
|
||||
|
||||
自从上次我检查过后,如今所有重要的发行版都预装了 Flatpak。因此,你可能不需要安装它。
|
||||
|
||||
然而,安装 Flatpak 就像在这两个主要发行版中运行以下命令一样简单:
|
||||
|
||||
```
|
||||
sudo apt install flatpak // 用于 Ubuntu 和相关发行版
|
||||
```
|
||||
|
||||
```
|
||||
sudo dnf install flatpak // 适用于 Fedora 和基于 RPM 的发行版
|
||||
```
|
||||
|
||||
如果你正在运行其他发行版,你可以查看我们关于 Flatpak 安装的 [详细指南][2]。
|
||||
|
||||
#### 2、设置 Flatpak 远程仓库
|
||||
|
||||
接下来,你需要在安装后设置与 <ruby>远程仓库<rt>remote</rt></ruby>的连接。远程仓库就像是一个存储库(参考 PPA),用来分发 Flatpak 应用程序。
|
||||
|
||||
主要的仓库是 Flathub,你可以用下面的命令来设置它。这个命令对所有发行版都是一样的。完成后,重新启动你的系统,你就可以安装 Flatpak 应用程序了。
|
||||
|
||||
```
|
||||
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||
```
|
||||
|
||||
**提示**:如果你有别的远程仓库,你可以使用相同的命令来添加该仓库。在一个系统中设置多个远程仓库是正常的。
|
||||
|
||||
**提示**:另外,你可以指定 `--user` 或 `--system` 开关来安装特定于你的用户 ID 或整个系统的 Flatpak 远程仓库。
|
||||
|
||||
```
|
||||
flatpak remote-add --if-not-exists --user https://flathub.org/repo/flathub.flatpakrepo
|
||||
```
|
||||
|
||||
```
|
||||
flatpak remote-add --if-not-exists --system https://flathub.org/repo/flathub.flatpakrepo
|
||||
```
|
||||
|
||||
#### 3、从 Flathub 安装 Flatpak 应用程序
|
||||
|
||||
Linux 中大多数重要的基于 GUI 的软件商店都默认允许安装 Flatpak 应用程序。例如,如果你正在使用“<ruby>软件<rt>Software</rt></ruby>”(适用于 Ubuntu 或 Fedora GNOME 版),你可以找到应用程序并点击安装按钮进行安装。
|
||||
|
||||
或者,在 KDE Plasma 的 “<ruby>发现<rt>Discover</rt></ruby>” 中:
|
||||
|
||||
![KDE “发现”可以从 Flathub 拉取 Flatpak 应用程序][3]
|
||||
|
||||
但是,最简单的方法是复制 [Flathub 商店][4] 中的安装命令(可在每个应用程序信息页面的底部找到)并将其粘贴到终端。这是安装 Flatpak 应用程序的最快方法。
|
||||
|
||||
```
|
||||
flatpak install org.kde.kdenlive
|
||||
```
|
||||
|
||||
#### 4、运行一个应用程序
|
||||
|
||||
有两种方法来运行你安装的 Flatpak 应用程序。你可以在图形化桌面环境的应用程序菜单中找到它。或者,你可以使用简单的运行(`run`)参数来启动。
|
||||
|
||||
你可以从 Flathub 应用程序页面找到运行命令。
|
||||
|
||||
```
|
||||
flatpak run org.kde.kdenlive
|
||||
```
|
||||
|
||||
现在,你已经学会了如何设置、安装和运行 Flatpak 应用程序。现在是时候深入了解一下了。
|
||||
|
||||
#### 5、找出已安装的 Flatpak 应用程序列表
|
||||
|
||||
经过几年,你可能已经安装和删除了许多 Flatpak 应用程序。但是,你怎么找出安装了多少 Flatpak 应用程序?或者你可能想知道系统所安装的 Flatpak 应用是什么。
|
||||
|
||||
这里有一些 Flatpak 命令(通过终端运行),可以在这方面帮助你。
|
||||
|
||||
一个简单的 `flatpak` 命令可以列出所有安装的应用程序。这包括系统应用和你的应用:
|
||||
|
||||
```
|
||||
flatpak list
|
||||
```
|
||||
|
||||
只显示你的应用程序:
|
||||
|
||||
```
|
||||
flatpak --user list
|
||||
```
|
||||
|
||||
更详细一点,你可以在上述两个命令中使用额外的列(如名称、大小等)进行过滤:
|
||||
|
||||
```
|
||||
flatpak --columns=app,name,size,installation list
|
||||
```
|
||||
|
||||
```
|
||||
flatpak --columns=name,size --user list
|
||||
```
|
||||
|
||||
![flatpak 带有额外列的列出命令][5]
|
||||
|
||||
#### 6、找出已安装应用程序的更多信息
|
||||
|
||||
现在,你已经通过上述 Flatpak 命令安装了一个应用程序。但是,如果你想知道架构、版本、分支、许可证和其他信息,该怎么办呢?你可以使用 `info` 参数来实现。这个命令需要 Flatpak 的 “应用 ID”,你可以通过上面的 `flatpak list` 命令得到它。
|
||||
|
||||
例如:
|
||||
|
||||
```
|
||||
flatpak info org.kde.kdenlive
|
||||
```
|
||||
|
||||
![flatpak info 命令][6]
|
||||
|
||||
#### 7、找出 flatpak 命令在你系统中的全部历史记录
|
||||
|
||||
`flatpak` 命令中的 `histroy` 开关会列出在你的系统中发生的活动,包括安装、更新、卸载和日期时间戳。如果你想调查一些事情,这非常有用。
|
||||
|
||||
```
|
||||
flatpak history
|
||||
```
|
||||
|
||||
#### 8、更新 Flatpak 应用程序
|
||||
|
||||
`flatpak` 命令中的 `update` 参数可以更新所有的应用程序和运行时。当你运行这个命令时,它会显示可用的更新,并要求你确认是否继续。
|
||||
|
||||
```
|
||||
flatpak update
|
||||
```
|
||||
|
||||
如果你想更新一个特定的应用程序而不是整个系统,请使用 `--app` 或 `--runtime` 开关,分别用于应用程序和运行时。
|
||||
|
||||
例如,如果我想在我的系统中只更新 kdenlive,我将运行以下命令:
|
||||
|
||||
```
|
||||
flatpak update --app org.kde.kdenlive
|
||||
```
|
||||
|
||||
**提示**:`update` 参数通常会更新到任何程序的分支顶端。然而,使用 `update` 参数中的 `--commit` 开关,你可以更新到 Flatpak 中的某个特定分支(升级或降级)。例如:
|
||||
|
||||
```
|
||||
flatpak update --app org.kde.kdenlive --commit 37103f4ee56361a73d20cf6957d88f3cab802909a5966c27a6e81d69795a15
|
||||
```
|
||||
|
||||
如果你想使用同一个应用程序的多个版本,这个 `--commit` 开关是非常有用的。
|
||||
|
||||
![flatpak 带有提交开关的更新命令示例][7]
|
||||
|
||||
#### 9、管理 Flatpak 应用程序的权限
|
||||
|
||||
不同的应用程序需要不同的权限,如摄像头、麦克风、屏幕等等。通过命令来管理这些单独的权限有点让人不知所措。因此,管理 Flatpak 权限的最好方法是使用另一个叫做 Flatseal 的 Flatpak 应用程序。它为你提供了一个漂亮的 GUI,有切换按钮来启用/禁用/审查已安装的 Flatpak 应用程序的权限。
|
||||
|
||||
你可以在 [这里][8] 阅读 Flatseal 的更多信息。
|
||||
|
||||
#### 10、卸载 Flatpak 应用程序的命令
|
||||
|
||||
卸载 Flatpak 应用程序有不同的使用情况。所以,这里是快速指南。
|
||||
|
||||
要卸载单个应用程序,使用 `uninstall` 参数和应用程序 ID。例如:
|
||||
|
||||
```
|
||||
flatpak uninstall org.kde.kdenlive
|
||||
```
|
||||
|
||||
要卸载所有应用程序,使用 `—all` 开关:
|
||||
|
||||
```
|
||||
flatpak uninstall --all
|
||||
```
|
||||
|
||||
要卸载未使用的应用程序,请使用以下方法:
|
||||
|
||||
```
|
||||
flatpak uninstall --unused
|
||||
```
|
||||
|
||||
#### 11、删除并去除 Flatpak 应用程序的所有痕迹
|
||||
|
||||
**使用以下命令时要特别小心,因为它将删除一切。**
|
||||
|
||||
即使你卸载了 Flatpak 应用程序,一些应用程序的数据仍然保留在你的系统中,除非你在运行卸载程序时增加一些开关。在你可能想删除所有东西并重新开始使用 Flatpak 的情况下,这是必要的。
|
||||
|
||||
要卸载和删除特定应用程序的数据,请使用以下命令。例如:
|
||||
|
||||
```
|
||||
flatpak uninstall -y --delete-data org.kde.kdenlive
|
||||
```
|
||||
|
||||
要卸载和删除所有与 Flatpak 相关的东西,请使用下面的命令:
|
||||
|
||||
```
|
||||
flatpak uninstall --all --delete-data
|
||||
```
|
||||
|
||||
#### 12、清理和磁盘空间的使用
|
||||
|
||||
默认情况下,Flatpak 被安装在 `/var/lib/flatpak`。这个目录包含所有与 Flatpak 相关的数据和元数据以及运行时文件。而用户特定的安装目录是 `~/.local/share/flatpak`。
|
||||
|
||||
你可以用以下命令找出 Flatpak 应用程序使用的磁盘空间。
|
||||
|
||||
```
|
||||
du -h /var/lib/flatpak
|
||||
```
|
||||
|
||||
要清理,你可以使用上面提到的 `--unused` 或 `--uninstall` 开关。详情请访问我们的 [Flatpak 清理指南][9]。
|
||||
|
||||
### 总结
|
||||
|
||||
为了便于你随时参考,这里是对上面解释的 `flatpak` 命令的一个总结。把这个页面收藏起来,以便于参考。
|
||||
|
||||
```
|
||||
# 安装和运行
|
||||
flatpak install org.kde.kdenlive
|
||||
flatpak run org.kde.kdenlive
|
||||
|
||||
# 列出已安装的 Flatpak 应用程序
|
||||
flatpak list
|
||||
flatpak --user list
|
||||
flatpak --columns=app,name,size,installation list
|
||||
flatpak --columns=name,size --user list
|
||||
|
||||
# 找出应用 ID 和命令历史
|
||||
flatpak info org.kde.kdenlive
|
||||
flatpak history
|
||||
|
||||
# 更新 Flatpak 应用程序
|
||||
flatpak update
|
||||
flatpak update --app org.kde.kdenlive
|
||||
|
||||
# 删除 Flatpak 应用程序
|
||||
flatpak uninstall org.kde.kdenlive
|
||||
flatpak uninstall --unused
|
||||
|
||||
# 删除应用及数据(小心使用)
|
||||
flatpak uninstall --all
|
||||
flatpak uninstall -y --delete-data org.kde.kdenlive
|
||||
flatpak uninstall --all --delete-data
|
||||
```
|
||||
|
||||
最后,请在评论框中告诉我,你认为还有哪些 Flatpak 命令也应该包括在这个列表中。
|
||||
|
||||
[一些例子来自官方参考资料][10]。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/flatpak-commands/
|
||||
|
||||
作者:[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.debugpoint.com/wp-content/uploads/2022/08/fpref-1024x576.jpg
|
||||
[2]: https://www.debugpoint.com/how-to-install-flatpak-apps-ubuntu-linux/
|
||||
[3]: https://www.debugpoint.com/?attachment_id=10760
|
||||
[4]: https://flathub.org/apps
|
||||
[5]: https://www.debugpoint.com/?attachment_id=10758
|
||||
[6]: https://www.debugpoint.com/?attachment_id=10757
|
||||
[7]: https://www.debugpoint.com/wp-content/uploads/2022/08/Example-of-flatpak-commands-update-with-commit-1024x576.jpg
|
||||
[8]: https://www.debugpoint.com/manage-flatpak-permission-flatseal/
|
||||
[9]: https://www.debugpoint.com/clean-up-flatpak/
|
||||
[10]: https://docs.flatpak.org/en/latest/flatpak-command-reference.html
|
@ -0,0 +1,144 @@
|
||||
[#]: subject: "Blackbox is an Aesthetically Pleasing Terminal for Minimalists Linux Users"
|
||||
[#]: via: "https://itsfoss.com/blackbox-terminal/"
|
||||
[#]: author: "Anuj Sharma https://itsfoss.com/author/anuj/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14992-1.html"
|
||||
|
||||
Blackbox:极简主义 Linux 用户的美观终端
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202209/01/230823b2n8vhe6jn5vz5uq.jpg)
|
||||
|
||||
有 [许多可用于 Linux 的终端仿真器][1]。从 Terminator 到 Tilix,你有多种终端可供选择。
|
||||
|
||||
但这并没有阻止新终端应用的到来。你最近已经见过了 [GNOME Console][2] 吧,今天,我将向你介绍 Blackbox。
|
||||
|
||||
### Blackbox 终端:概述和功能
|
||||
|
||||
Blackbox 是一个支持 GTK4 的终端仿真器。开发者为了他可以在 Linux 上使用外观优美的终端应用而创建了这个项目。
|
||||
|
||||
所以,不要指望它有很多功能。它只是一个使用 GTK4 工具包并支持主题的终端仿真器。
|
||||
|
||||
换句话说,它更多注重的是关于外观而不是功能。
|
||||
|
||||
以下是 Blackbox 的主要亮点:
|
||||
|
||||
* 可设置主题(支持 [Tilix][3] 兼容的配色方案)
|
||||
* 主题与窗口装饰的融合
|
||||
* 自定义字体
|
||||
* 各种可自定义的 UI 设置
|
||||
* 标签
|
||||
* 可切换的标题栏
|
||||
* 点击打开链接
|
||||
* 文件拖放支持
|
||||
|
||||
谈到外观,让我们来看看它提供的不同外观。默认窗口将类似于下面的截图。
|
||||
|
||||
![Default look of Blackbox terminal][4]
|
||||
|
||||
#### 没有标题栏
|
||||
|
||||
你也可以取消标题栏,如下所示。这是 GTK4 应用程序中最“流行”的功能之一。
|
||||
|
||||
![Blackbox without header bar][5]
|
||||
|
||||
你还可以在无标题栏模式下启用浮动控件。
|
||||
|
||||
![Floating controls with no header bar mode][6]
|
||||
|
||||
#### 轻松复制和粘贴(不要抗拒)
|
||||
|
||||
`Ctrl+C` 和 `Ctrl+V` 就像复制粘贴的通用键盘快捷键。
|
||||
|
||||
但是古老的 Unix 在宇宙之前就存在了,因此它使用 [Ctrl+C 键来终止终端中正在运行的程序][7]。
|
||||
|
||||
但是,有些人发现不能使用他们最喜欢的快捷键来 [在终端中复制粘贴][8] 有点不方便。
|
||||
|
||||
Blackbox 允许你通过启用“轻松复制和粘贴”设置来更改它。启用此设置后,你可以使用 `Ctrl+C` 和 `Ctrl+v` 进行复制粘贴操作。
|
||||
|
||||
不用担心。`Ctrl+C` 仍可用于停止正在运行的命令。
|
||||
|
||||
![Easy copy-paste mode allows using Ctrl+C and Ctrl+V keys][9]
|
||||
|
||||
#### 主题
|
||||
|
||||
你还可以从设置中选择不同的主题。有几个浅色和深色主题可供选择。你还可以使用 Tilix 风格的主题。
|
||||
|
||||
![Available themes for Blackbox][10]
|
||||
|
||||
让我们看看它在 Yaru 主题和不扩展选项卡的情况下的外观,这与默认的 Blackbox 行为不同。
|
||||
|
||||
![Blackbox with a changed theme][11]
|
||||
|
||||
#### 重置为默认
|
||||
|
||||
还有一些更方便的功能,例如记住窗口大小、按像素滚动等。
|
||||
|
||||
好消息是,如果你对设置进行了太多更改,你可以将它们全部还原并重置为默认设置。
|
||||
|
||||
该选项在“<ruby>首选项<rt>Preferences</rt></ruby>”的“<ruby>高级<rt>Advance</rt></ruby>”选项卡中可用。
|
||||
|
||||
![reset blackbox settings to default][12]
|
||||
|
||||
### 安装 Blackbox 终端
|
||||
|
||||
请记住,**Blackbox 处于开发的早期阶段**。我在切换主题时出现过崩溃。
|
||||
|
||||
要安装 Blackbox 终端,你应该在系统中安装 [Flatpak 并启用 Flathub 仓库][13]。
|
||||
|
||||
使用此命令在你的系统上安装 Blackbox:
|
||||
|
||||
```
|
||||
flatpak install flathub com.raggesilver.BlackBox
|
||||
```
|
||||
|
||||
在 Fedora 和其他一些与 Flatpak 集成的发行版上,你可以从软件中心安装 Blackbox。
|
||||
|
||||
![Blackbox can also be installed in GNOME Software Center][14]
|
||||
|
||||
安装后,你可以从应用菜单启动它。
|
||||
|
||||
#### 卸载 Blackbox 终端
|
||||
|
||||
如果你不喜欢 Blackbox 并想将其删除,请输入以下命令将其删除。
|
||||
|
||||
```
|
||||
flatpak uninstall flathub com.raggesilver.BlackBox
|
||||
```
|
||||
|
||||
### 结论
|
||||
|
||||
在我看来,Blackbox 是一个不错的终端模拟器。在不支持 GTK4 的发行版上,你可以获得 GTK4 所能提供的所有精彩内容。它提供的功能足以应付日常工作。
|
||||
|
||||
最后,这一切都取决于个人喜好。你可能会喜欢它,也可能不喜欢它。如果你喜欢体验,请尝试一下,并在评论栏与我们分享你的经验。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/blackbox-terminal/
|
||||
|
||||
作者:[Anuj Sharma][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/author/anuj/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://itsfoss.com/linux-terminal-emulators/
|
||||
[2]: https://itsfoss.com/gnome-console/
|
||||
[3]: https://github.com/gnunn1/tilix
|
||||
[4]: https://itsfoss.com/wp-content/uploads/2022/08/blackbox-default.png
|
||||
[5]: https://itsfoss.com/wp-content/uploads/2022/08/blackbox-noheader.png
|
||||
[6]: https://itsfoss.com/wp-content/uploads/2022/08/blackbox-floating-controls.png
|
||||
[7]: https://itsfoss.com/stop-program-linux-terminal/
|
||||
[8]: https://itsfoss.com/copy-paste-linux-terminal/
|
||||
[9]: https://itsfoss.com/wp-content/uploads/2022/08/blackbox-easy-copy-paste.png
|
||||
[10]: https://itsfoss.com/wp-content/uploads/2022/08/blackbox-theme-selection.png
|
||||
[11]: https://itsfoss.com/wp-content/uploads/2022/08/blackbox-yaru.png
|
||||
[12]: https://itsfoss.com/wp-content/uploads/2022/08/blackbox-reset.png
|
||||
[13]: https://itsfoss.com/flatpak-guide/
|
||||
[14]: https://itsfoss.com/wp-content/uploads/2022/08/blackbox-install.png
|
@ -0,0 +1,149 @@
|
||||
[#]: subject: "sudo apt update vs upgrade: What’s the Difference?"
|
||||
[#]: via: "https://itsfoss.com/apt-update-vs-upgrade/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "Yufei-Yan"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14994-1.html"
|
||||
|
||||
apt 的 update 和 upgrade 命令的区别是什么?
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202209/02/224416uecz5x75yalc0axc.jpg)
|
||||
|
||||
如果想让你的 Ubuntu 或者 Debian 系统保持更新,要用 `sudo apt update` 和 `sudo apt upgrade` 命令组合。
|
||||
|
||||
一些以前的教程也会提到 `sudo apt-get update` 和 `sudo apt-get upgrade`。
|
||||
|
||||
`apt` 和 `apt-get` 命令运行起来几乎一样,除了一些细微的差别,后面我会讨论。
|
||||
|
||||
我们首先讨论一下 `update` 和 `upgrade` 的区别。这两个难道不是一样的吗?
|
||||
|
||||
### apt 的 update 和 upgrade 的区别
|
||||
|
||||
尽管听上去运行 `apt update` 可以给你一个包的最新版本,然而这并不正确。`update` 命令只会获得系统上所有包的最新信息,并不会下载或者安装任何一个包。而是 `apt upgrade` 命令来把这些包下载和升级到最新版本。
|
||||
|
||||
还是有点困惑?让我来接着解释。我建议阅读 [包管理器的概念][1]。这个会帮你更好的理解这些东西。
|
||||
|
||||
![Linux Package Manager Explanation][2]
|
||||
|
||||
基本上,你的系统围绕着一个所有可用包的数据库(缓存)工作。注意,这个缓存(或者数据库)并不包含这些包本身,仅仅是关于包的元数据(版本、仓库、依赖等)。
|
||||
|
||||
如果你不更新这个数据库,系统就不会知道是否有更新的版本。
|
||||
|
||||
当你运行 `apt update` 或者 `apt-get update` 命令,它会获取这些包的最新元数据(包的版本等)。
|
||||
|
||||
![apt update][3]
|
||||
|
||||
这时候本地缓存就被更新了,有一些包可以升级。用 `sudo apt upgrade` 可以升级所有(可升级的)包。
|
||||
|
||||
它会显示要升级的包,并且通过回车(默认选择是 `Y`)或者按下 `Y` 键进行确认。要在这个阶段取消升级,可以按下 `N`。
|
||||
|
||||
![apt upgrade][4]
|
||||
|
||||
下面这些可能会帮助你记忆:
|
||||
|
||||
* `apt update`:更新包缓存(可以知道包的哪些版本可以被安装或升级)
|
||||
* `apt upgrade`:升级包到最新版本
|
||||
|
||||
因为有一些管理员命令,需要作为 root 运行。因此需要使用 `sudo` 配合其他命令。`sudo` 使你能够作为 root 在 Ubuntu 和 Debian 上运行命令。
|
||||
|
||||
既然理解了 `update` 和 `upgrade` 是如何一起运行的,我们接下来来讨论一下 `apt` 和 `apt-get` 的用法。
|
||||
|
||||
### apt 还是 apt-get?应该用哪个?
|
||||
|
||||
Debian 和 Ubuntu 使用的是 APT 包管理系统。不要和 `apt` 命令弄混了。
|
||||
|
||||
有许多和 APT 包管理交互的命令;`apt-get`、`apt`、`dpkg`、`aptitude` 等。
|
||||
|
||||
这里面最受欢迎的就是 `apt-get` 命令。它是一个<ruby>低层级<rt>low-level</rt></ruby>且功能丰富的命令。`apt` 是 `apt-get` 命令的一个更新而更简单的版本。
|
||||
|
||||
可以读一下这篇文章来 [了解 atp 和 apt-get 命令的不同][5]。下面重点讨论这些命令中 `update` 和 `upgrade` 选项的区别。
|
||||
|
||||
#### apt update vs apt-get update
|
||||
|
||||
`apt-get update` 和 `apt update` 做的是同样的事,都是更新本地包缓存,这样的话你的系统就知道有哪些包的版本是可用的。
|
||||
|
||||
从技术上讲,其实并没有区别。然而,`apt update` 在一个方面比 `apt-get update` 做的好,**它会告诉你可升级的包的数量**。
|
||||
|
||||
```
|
||||
Hit:15 https://ppa.launchpadcontent.net/slimbook/slimbook/ubuntu jammy InRelease
|
||||
Fetched 213 kB in 4s (55.8 kB/s)
|
||||
Reading package lists... Done
|
||||
Building dependency tree... Done
|
||||
Reading state information... Done
|
||||
6 packages can be upgraded. Run 'apt list --upgradable' to see them.
|
||||
```
|
||||
|
||||
`apt-get update` 甚至不会告诉你包是否可以升级。
|
||||
|
||||
![apt get update][6]
|
||||
|
||||
![apt update output][7]
|
||||
|
||||
从 `apt` 中可以看到 [列出可升级的包][8],而 `apt-get` 甚至没有这个选项。
|
||||
|
||||
```
|
||||
# apt list --upgradable
|
||||
Listing... Done
|
||||
fprintd/jammy-updates 1.94.2-1ubuntu0.22.04.1 amd64 [upgradable from: 1.94.2-1]
|
||||
gnome-control-center-data/jammy-updates,jammy-updates 1:41.7-0ubuntu0.22.04.4 all [upgradable from: 1:41.7-0ubuntu0.22.04.1]
|
||||
gnome-control-center-faces/jammy-updates,jammy-updates 1:41.7-0ubuntu0.22.04.4 all [upgradable from: 1:41.7-0ubuntu0.22.04.1]
|
||||
gnome-control-center/jammy-updates 1:41.7-0ubuntu0.22.04.4 amd64 [upgradable from: 1:41.7-0ubuntu0.22.04.1]
|
||||
libpam-fprintd/jammy-updates 1.94.2-1ubuntu0.22.04.1 amd64 [upgradable from: 1.94.2-1]
|
||||
vivaldi-stable/stable 5.4.2753.40-1 amd64 [upgradable from: 5.4.2753.37-1]
|
||||
```
|
||||
|
||||
现在来比较一下两个命令中 `upgrade` 的选项。
|
||||
|
||||
#### apt upgrade vs apt-get upgrade
|
||||
|
||||
`apt-get upgrade` 和 `apt upgrade` 命令根据本地包缓存(通过 `update` 命令更新)的数据,安装可升级包的最新版本。
|
||||
|
||||
然而,`apt upgrade` 命令会做两件与 `apt-get upgrade` 不同的事情。
|
||||
|
||||
`apt upgrade` 命令可以升级 Linux 内核版本,`apt-get upgrade` 不能。`apt-get` 命令需要使用 [apt-get dist-upgrade][9] 来升级内核版本。
|
||||
|
||||
![apt-get upgrade command cannot upgrade Linux kernel version][10]
|
||||
|
||||
这是因为升级内核版本意味着安装一个全新的包。`apt-get upgrade` 命令不能安装一个新的包。它只能升级现有的包。
|
||||
|
||||
`apt upgrade` 比 `apt-get` 做的好的另一件小事是,它会在底部**显示一个进度条**。
|
||||
|
||||
![apt upgrade progress bar][11]
|
||||
|
||||
### 总结
|
||||
|
||||
`update` 和 `upgrade` 两个词很相似,这就是为什么很多新用户会感到困惑。有时候,我觉得 `apt update` 命令应该和 `apt upgrade` 命令合并。
|
||||
|
||||
我意思是 `upgrade`(所有已安装的包)和 `update`(本地包元数据缓存)一起完成工作。为什么要有两个分开的命令呢?把这两个领命合成一个 `upgrade` 命令吧。Fedora 就是这样对 DNF 命令进行了改进。不过这只是我的观点。
|
||||
|
||||
我希望这篇文章可以解释一些关于 `apt-get update`、`apt-get upgrade` 和 `apt update` 以及 `apt upgrade` 命令的问题。
|
||||
|
||||
如果有任何问题,请与我联系。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/apt-update-vs-upgrade/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[Yufei-Yan](https://github.com/Yufei-Yan)
|
||||
校对:[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/package-manager/
|
||||
[2]: https://itsfoss.com/wp-content/uploads/2020/10/linux-package-manager-explanation.png
|
||||
[3]: https://itsfoss.com/wp-content/uploads/2022/08/apt-update.png
|
||||
[4]: https://itsfoss.com/wp-content/uploads/2022/08/apt-upgrade.png
|
||||
[5]: https://itsfoss.com/apt-get-upgrade-vs-dist-upgrade/
|
||||
[6]: https://itsfoss.com/wp-content/uploads/2022/08/apt-get-update.png
|
||||
[7]: https://itsfoss.com/wp-content/uploads/2022/08/apt-update-output.png
|
||||
[8]: https://itsfoss.com/apt-list-upgradable/
|
||||
[9]: https://itsfoss.com/apt-get-upgrade-vs-dist-upgrade/
|
||||
[10]: https://itsfoss.com/wp-content/uploads/2022/08/apt-get-upgrade.png
|
||||
[11]: https://itsfoss.com/wp-content/uploads/2022/08/apt-upgrade-progress-bar.png
|
@ -0,0 +1,118 @@
|
||||
[#]: subject: "How to Get KDE Plasma 5.25 in Kubuntu 22.04 Jammy Jellyfish"
|
||||
[#]: via: "https://www.debugpoint.com/kde-plasma-5-25-kubuntu-22-04/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14997-1.html"
|
||||
|
||||
如何在 Kubuntu 22.04 中安装 KDE Plasma 5.25
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202209/03/233812h11u1b18p8j0u8ct.jpg)
|
||||
|
||||
KDE 开发人员现在启用了流行的向后移植 PPA,并对 KDE Plasma 5.25 进行了必要的更新,你现在可以将其安装在 Kubuntu 22.04 Jammy Jellyfish 中。下面是方法。
|
||||
|
||||
KDE Plasma 5.25 于不久前的 2022 年 6 月 14 日发布,其中包含一些令人振奋的更新。在此版本中,你将获得**动态强调色**、改进的登录头像、**浮动面板**以及我们在 [功能亮点文章][1] 中介绍的许多功能。
|
||||
|
||||
但是,如果你正在运行早在 2022 年 4 月发布的 [Kubuntu 22.04 Jammy Jellyfish][2],那么你使用的是带有 KDE Framework 5.92 的 KDE Plasma 5.24。
|
||||
|
||||
你可能正在稳定的 Kubuntu 22.04 版本中等待享受新功能,现在可以通过著名的向后移植 PPA 在 Kubuntu 22.04 中安装它。
|
||||
|
||||
### 如何在 Kubuntu 22.04 中安装 KDE Plasma 5.25
|
||||
|
||||
这是使用最新的 KDE Plasma 5.25 升级 Kubuntu 22.04 的方法。
|
||||
|
||||
#### GUI 方式
|
||||
|
||||
如果你惯于使用 KDE 的软件应用 “<ruby>发现<rt>Discover</rt></ruby>”,请打开该应用。然后进入 “<ruby>设置<rt>Settings</rt></ruby>” > “<ruby>软件源<rt>Sources</rt></ruby>” 并添加 PPA:`ppa:kubuntu-ppa/backports-extra`。然后单击“<ruby>更新<rt>Updates</rt></ruby>”。
|
||||
|
||||
#### 终端方法(推荐)
|
||||
|
||||
我建议你打开一个终端并进行此升级以更快地执行和安装。
|
||||
|
||||
打开 Konsole 并运行以下命令以添加 [向后移植 PPA][3]。
|
||||
|
||||
```
|
||||
sudo add-apt-repository ppa:kubuntu-ppa/backports-extra
|
||||
```
|
||||
|
||||
![Upgrade Kubuntu 22.04 with KDE Plasma 5.25][4]
|
||||
|
||||
现在,通过运行以下命令刷新包列表。然后验证 5.25 包是否可用。
|
||||
|
||||
```
|
||||
sudo apt update
|
||||
```
|
||||
|
||||
```
|
||||
apt list --upgradable | grep 5.25
|
||||
```
|
||||
|
||||
![KDE Plasma 5.25 packages are available now][5]
|
||||
|
||||
最后,运行最后一个命令来启动升级。
|
||||
|
||||
```
|
||||
sudo apt full-upgrade
|
||||
```
|
||||
|
||||
总共下载大约 200 MB 的软件包。根据你的互联网连接速度,整个过程大约需要 10 分钟。
|
||||
|
||||
上述命令完成后,重新启动系统。
|
||||
|
||||
重启后,你应该会在 Kubuntu 22.04 LTS 中看到新的 KDE Plasma 5.25。
|
||||
|
||||
![KDE Plasma 5.25 in Kubuntu 22.04 LTS][6]
|
||||
|
||||
### 其他向后移植 PPA
|
||||
|
||||
请注意,[另外的向后移植 PPA][7] `ppa:kubuntu-ppa/backports` 目前提供的是 Plasma 5.24。因此,请勿使用与上面不同的 PPA。我不确定这个 PPA 是否会得到更新。
|
||||
|
||||
```
|
||||
sudo add-apt-repository ppa:kubuntu-ppa/backports // 不要使用这个
|
||||
```
|
||||
|
||||
### 如何卸载
|
||||
|
||||
在任何时候,如果你想回到 KDE Plasma 桌面的原始版本,那么你可以安装 `ppa-purge` 并删除该 PPA,然后刷新包。
|
||||
|
||||
打开终端,依次执行以下命令:
|
||||
|
||||
```
|
||||
sudo apt install ppa-purge
|
||||
sudo ppa-purge ppa:kubuntu-ppa/backports-extra
|
||||
sudo apt update
|
||||
```
|
||||
|
||||
完成上述命令后,重启系统。
|
||||
|
||||
### 结束语
|
||||
|
||||
这就是全部了。一个漂亮而简单的步骤,将 Jammy Jellyfish 中的 KDE Plasma 升级到 Plasma 5.25。我希望你升级顺利。
|
||||
|
||||
如果你遇到任何错误,请在评论栏告诉我。
|
||||
|
||||
干杯。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/kde-plasma-5-25-kubuntu-22-04/
|
||||
|
||||
作者:[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/kde-plasma-5-25/
|
||||
[2]: https://www.debugpoint.com/kubuntu-22-04-lts/
|
||||
[3]: https://launchpad.net/~kubuntu-ppa/+archive/ubuntu/backports-extra
|
||||
[4]: https://www.debugpoint.com/wp-content/uploads/2022/08/Upgrade-Kubuntu-22.04-with-KDE-Plasma-5.25.jpg
|
||||
[5]: https://www.debugpoint.com/wp-content/uploads/2022/08/KDE-Plasma-5.25-packages-are-available-now.jpg
|
||||
[6]: https://www.debugpoint.com/wp-content/uploads/2022/08/KDE-Plasma-5.25-in-Kubuntu-22.04-LTS-1024x575.jpg
|
||||
[7]: https://launchpad.net/~kubuntu-ppa/+archive/ubuntu/backports
|
@ -0,0 +1,131 @@
|
||||
[#]: subject: "How I analyze my music directory with Groovy"
|
||||
[#]: via: "https://opensource.com/article/22/8/groovy-script-java-music"
|
||||
[#]: author: "Chris Hermansen https://opensource.com/users/clhermansen"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15004-1.html"
|
||||
|
||||
我如何使用 Groovy 分析我的音乐目录
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202209/06/091157xsta20az0az0ws0k.jpg)
|
||||
|
||||
> 为了简化 Java 的繁琐,我制作了一个 Groovy 工具来分析我的音乐目录。
|
||||
|
||||
最近,我一直在研究 Groovy 是如何简化略微繁琐的 Java 的。在这篇文章中,我开始了一个简短的系列,通过创建一个分析我的音乐目录的工具来演示 Groovy 脚本。
|
||||
|
||||
在本文中,我将演示 `groovy.File` 类如何扩展和精简 `java.File` 并简化其使用。这为查看音乐文件夹的内容提供了一个框架,以确保预期的内容(例如,`cover.jpg` 文件)就位。我使用 [JAudiotagger 库][2] 来分析音乐文件的标签。
|
||||
|
||||
### 安装 Java 和 Groovy
|
||||
|
||||
Groovy 基于 Java,需要安装 Java。 Java 和 Groovy 的最新和稳定的版本可能都在你的 Linux 发行版的仓库中。 Groovy 也可以直接从 [Apache Foundation 网站][3] 安装。对于 Linux 用户来说,一个不错的选择是 [SDKMan][4],它可用于获取 Java、Groovy 和许多其他相关工具的多个版本。对于本文,我使用以下 SDK 版本:
|
||||
|
||||
* Java:版本 11.0.12-open 的 OpenJDK 11
|
||||
* Groovy:版本 3.0.8
|
||||
|
||||
### 音乐元数据
|
||||
|
||||
最近,我重整了我的音乐消费方式。我决定使用优秀的开源 [Cantata][5] 音乐播放器,它是开源 [MPD 音乐播放器][6] 的一个前端。我所有的电脑的音乐都存储在 `/var/lib/mpd/music` 目录下。在该音乐目录下有艺术家子目录,在每个艺术家子目录下有专辑子目录,包含音乐文件、`cover.jpg`,偶尔还有 PDF 格式的内页说明。
|
||||
|
||||
我绝大部分的音乐文件都是 FLAC 格式的,有一些是 MP3 格式,可能还有一小部分是 OGG 格式。我选择 JAudiotagger 库的一个原因是它可以透明地处理不同的标签格式。当然,JAudiotagger 是开源的!
|
||||
|
||||
那么查看音频标签有什么意义呢?以我的经验,音频标签的管理极差。(提到音频标签,)我的脑海中浮现出“粗心”这个词。这是标签本身真正存在的问题,也可能是出于我自己的学究倾向。无论如何,这是一个可以通过使用 Groovy 和 JAudiotagger 解决的重要问题。不过,它不仅适用于音乐收藏。许多其他现实世界的问题也适用,如需要下沉到文件系统中的目录树来处理在那里找到的内容。
|
||||
|
||||
### 使用 Groovy 脚本
|
||||
|
||||
这是此任务所需的基本代码。我在脚本中加入了注释,这些注释反映了我通常留给自己的(相对简写的)“注释提醒”:
|
||||
|
||||
```
|
||||
// 定义音乐库目录
|
||||
def musicLibraryDirName = '/var/lib/mpd/music'
|
||||
// 输出 CSV 文件标题行
|
||||
println "artistDir|albumDir|contentFile"
|
||||
// 迭代音乐库目录中的每个目录
|
||||
// 这一层应该是艺术家目录
|
||||
new File(musicLibraryDirName).eachDir { artistDir ->
|
||||
// 迭代艺术家目录中的每个目录
|
||||
// 这一层应该是专辑目录
|
||||
artistDir.eachDir { albumDir ->
|
||||
// 迭代专辑目录中的每个目录
|
||||
// 这里应该是内容
|
||||
// 或相关内容(如 `cover.jpg`,PDF 格式的内页说明)
|
||||
albumDir.eachFile { contentFile ->
|
||||
println "$artistDir.name|$albumDir.name|$contentFile.name"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
如上所述,我使用 `groovy.File` 在目录树中移动。具体来说:
|
||||
|
||||
第 7 行创建一个新的 `groovy.File` 对象并在其上调用 `groovy.File.eachDir()`,第 7 行的 `{` 和第 18 行的结尾的 `}` 之间的代码是传给 `eachDir()` 的 `groovy.Colsue` 参数。
|
||||
|
||||
这意味着 `eachDir()` 为目录中找到的每个子目录执行该代码。这类似于 Java *lambda*(也称为“匿名函数”)。 Groovy 闭包不会像 lambda 那样限制对调用环境的访问(在最新版本的 Groovy 中,如果你愿意,也可以使用 Java lambda)。如上所述,音乐库目录中的子目录应该是艺术家目录(例如,“Iron Butterfly” 或 “Giacomo Puccini”),因此 `artistDir` 是 `eachDir()` 传递给闭包的参数。
|
||||
|
||||
第 10 行对每个 `artistDir` 调用 `eachDir()`,第 10 行的 `{` 和第 17 行的 `}` 之间的代码形成另一个处理 `albumDir` 的闭包。
|
||||
|
||||
第 14 行,在每个 `albumDir` 上调用 `eachFile()`,第 14 行的 `{` 和第 16 行的 `}` 之间的代码形成了处理专辑内容的第三级闭包。
|
||||
|
||||
在本文的范围内,我对每个文件唯一需要做的就是开始构建信息表,我将其创建为一个以竖线分隔的 CSV 文件,它可以导入 [LibreOffice][7] 或 [OfficeOnly][8] 或任何其他电子表格。现在,代码输出前三列:艺术家目录名、专辑目录名和内容文件名(同样,第 2 行输出 CSV 标题行)。
|
||||
|
||||
在我的 Linux 笔记本电脑上运行它会产生以下输出:
|
||||
|
||||
```
|
||||
$ groovy TagAnalyzer.groovy | head
|
||||
artistDir|albumDir|contentFile
|
||||
Habib Koite & Bamada|Afriki|02 - Ntesse.flac
|
||||
Habib Koite & Bamada|Afriki|08 - NTeri.flac
|
||||
Habib Koite & Bamada|Afriki|01 - Namania.flac
|
||||
Habib Koite & Bamada|Afriki|07 - Barra.flac
|
||||
Habib Koite & Bamada|Afriki|playlist.m3u
|
||||
Habib Koite & Bamada|Afriki|04 - Fimani.flac
|
||||
Habib Koite & Bamada|Afriki|10 - Massake.flac
|
||||
Habib Koite & Bamada|Afriki|11 - Titati.flac
|
||||
Habib Koite & Bamada|Afriki|03 – Africa.flac
|
||||
[...]
|
||||
Richard Crandell|Spring Steel|04-Japanese Lullaby [Richard Crandell].flac
|
||||
Richard Crandell|Spring Steel|Spring Steel.pdf
|
||||
Richard Crandell|Spring Steel|03-Zen Dagger [Richard Crandell].flac
|
||||
Richard Crandell|Spring Steel|cover.jpg
|
||||
$
|
||||
```
|
||||
|
||||
在性能方面:
|
||||
|
||||
```
|
||||
$ time groovy TagAnalyzer.groovy | wc -l
|
||||
9870
|
||||
|
||||
real 0m1.482s
|
||||
user 0m4.392s
|
||||
sys 0m0.230s
|
||||
$
|
||||
```
|
||||
|
||||
又好又快。它在一秒半内处理近 10,000 个文件!对我来说足够快。可观的性能、紧凑且可读的代码,还有什么不喜欢的?
|
||||
|
||||
在我的下一篇文章中,我会打开 JAudiotagger 并查看每个文件中的标签。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/8/groovy-script-java-music
|
||||
|
||||
作者:[Chris Hermansen][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/clhermansen
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/programming-code-keyboard-laptop-music-headphones.png
|
||||
[2]: http://www.jthink.net/jaudiotagger/examples_read.jsp
|
||||
[3]: https://groovy.apache.org/download.html
|
||||
[4]: https://opensource.com/article/22/3/manage-java-versions-sdkman
|
||||
[5]: https://opensource.com/article/17/8/cantata-music-linux
|
||||
[6]: https://www.musicpd.org/
|
||||
[7]: https://opensource.com/tags/libreoffice
|
||||
[8]: https://opensource.com/article/20/7/nextcloud
|
@ -0,0 +1,75 @@
|
||||
[#]: subject: "Debian Finally Starts a General Resolution to Consider a Non-Free Firmware Image"
|
||||
[#]: via: "https://news.itsfoss.com/debian-non-free/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14988-1.html"
|
||||
|
||||
Debian 终于开始讨论非自由固件镜像了
|
||||
======
|
||||
|
||||
> Debian 终于开始考虑将非自由固件纳入一般决议中了。那么,将会如何呢?
|
||||
|
||||
![Debian 终于开始考虑非自由固件映像的一般决议][1]
|
||||
|
||||
由于其稳定性和新功能之间的平衡的做法,Debian 是最受欢迎的 Linux 发行版之一。
|
||||
|
||||
但是,它并没有配备任何非自由固件。
|
||||
|
||||
对于想在新硬件上使用 Debian 的用户来说,这已经成为一个问题。
|
||||
|
||||
大多数最新的设备和配置都需要非自由固件来使其工作,这包括 Wi-Fi、图形显示等等。
|
||||
|
||||
为了解决这个问题,前 Debian 项目负责人、开发者 Steve McIntyre 已经对此积极讨论了一段时间。最近在 DebConf 22 会议上,正如 [Geeker's Digest][2] 所发现的那样,Steve 谈到了修复固件的混乱局面,更好地向用户和开发者表明了这一点。
|
||||
|
||||
现在社区中讨论的进展是,看起来 Debian 已经启动了一项一般决议,让其利益相关者投票决定如何处理非自由固件的问题。
|
||||
|
||||
### Debian 的一般决议提案
|
||||
|
||||
这个一般决议案有四个提案(LCTT 译注:原文和官方提案说明不够清晰,我根据理解重新梳理了):
|
||||
|
||||
* 提案 A:改变原有的官方镜像集(安装镜像和实况镜像),Debian 将在官方镜像中包含非自由固件包。包含的固件将在检测到需求时默认启用。然而,它也将包括让用户在启动时禁用的方法。(截止本文发表时的提案支持人数:17)
|
||||
* 提案 B:不改变原有的镜像集,保留原来的不包含非自由固件的镜像,另外单独提供包含非自由固件的官方镜像。新的镜像下载链接将更醒目以方便新用户找到它们,而原来的镜像的视觉优先级将变低。(截止本文发表时的提案支持人数:10)
|
||||
* 提案 C:和提案 B 类似,在用户下载不包含自由固件的镜像时,提醒他们还有包含非自由固件的镜像可供下载。(截止本文发表时的提案支持人数:6)
|
||||
* 提案 D:继续遵守《<ruby>Debian 社会契约<rt>Debian Social Contract</rt></ruby>》第 1 节和第 5 节的精神,继续保持现状,不在 Debian 中包含任何非自由软件,但支持它们的使用,并欢迎其他人分发这样的作品。(截止本文发表时的提案支持人数:6)
|
||||
|
||||
这些是一些有趣的建议。我认为提案 A 对所有人都很方便,同时给高级用户禁用非自由固件的机会。
|
||||
|
||||
你可以在 [官方网页][3] 中了解更多关于一般决议的信息。
|
||||
|
||||
你怎么看?
|
||||
|
||||
### 将非自由固件纳入官方发行版中
|
||||
|
||||
至于目前的情况,你可以找到带有非自由固件的“**非官方**”的 Debian 镜像。
|
||||
|
||||
然而,并不是每个用户都知道它,即使它在 Debian 的下载页面上被宣传,“**非官方**”的说法也不会让用户比推荐的镜像更喜欢。
|
||||
|
||||
此外,当用户可以选择任何基于 Ubuntu 的发行版或 Ubuntu 作为替代品时,期望他们安装非自由固件是违反直觉的。
|
||||
|
||||
不仅仅限于这些问题,Steve 在他的 [博客][4] 中还提到了其他一些问题,包括:
|
||||
|
||||
* 维护独立的非自由镜像是很耗时的。
|
||||
* 由于缺乏非自由固件,许多用户不喜欢官方镜像。
|
||||
|
||||
*那么,你认为 Debian 的一般决议的投票结果是什么?一个单独的介质镜像?还是把它包括在官方镜像中?*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/debian-non-free/
|
||||
|
||||
作者:[Ankush Das][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/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/content/images/size/w1200/wordpress/2022/07/debian-non-free-firmware.jpg
|
||||
[2]: https://www.geekersdigest.com/debian-on-the-verge-to-include-non-free-firmware-in-official-releases/
|
||||
[3]: https://www.debian.org/vote/2022/vote_003#timeline
|
||||
[4]: https://blog.einval.com/2022/04/19#firmware-what-do-we-do
|
@ -0,0 +1,115 @@
|
||||
[#]: subject: "Some ways to get better at debugging"
|
||||
[#]: via: "https://jvns.ca/blog/2022/08/30/a-way-to-categorize-debugging-skills/"
|
||||
[#]: author: "Julia Evans https://jvns.ca/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "aftermath0703"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14991-1.html"
|
||||
|
||||
提高调试能力的一些方法
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202209/01/222854m78u44otl68yxbyu.jpg)
|
||||
|
||||
你们好!我一直在编写一本关于调试的杂志(这是 [目录的初稿][1])。
|
||||
|
||||
作为其中的一部分,我认为阅读一些关于调试的学术论文可能会很有趣,上周 [Greg Wilson][2] 给我发了一些关于调试学术研究的论文。
|
||||
|
||||
其中一篇论文(《[建立一个调试教学的框架[付费墙]][3]》)对我们有效调试所需的不同种类的知识/技能进行了分类,我非常喜欢。它来自另一篇关于故障排除的更一般性的论文:《[学会排错:一个新的基于理论的设计架构][4]》。
|
||||
|
||||
我认为这个分类对于思考如何更好地进行调试是一个非常有用的结构,所以我把论文中的五个类别重新规划为你可以采取的行动,以提高调试的效率。
|
||||
|
||||
以下是这些行动:
|
||||
|
||||
#### 1、学习代码库
|
||||
|
||||
要调试一些代码,你需要了解你正在使用的代码库。
|
||||
|
||||
这似乎有点显而易见(当然,不了解代码的工作原理,你就无法调试代码!)
|
||||
|
||||
这种学习随着时间的推移会很自然地发生,而且实际上调试也是 *学习* 一个新的代码库如何工作的最好方法之一——
|
||||
看到一些代码是如何崩溃的,有助于你了解它是如何工作的。
|
||||
|
||||
该论文将此称为“系统知识”。
|
||||
|
||||
#### 2、学习系统
|
||||
|
||||
论文中提到,你需要了解编程语言,但我认为不止于此 —— 为了修复 bug,往往你需要学习很多更广泛的环境,而不仅仅是语言。
|
||||
|
||||
举个例子,如果你是后端 Web 开发者,你可能需要的一些“系统”知识包括:
|
||||
|
||||
* HTTP 缓存如何工作
|
||||
* CORS
|
||||
* 数据库事务是如何工作的
|
||||
|
||||
我发现我经常需要更有意识地去学习像这样的系统性的东西 —— 我需要真正花时间去查找和阅读它们。
|
||||
|
||||
该论文将此称为“领域知识”。
|
||||
|
||||
#### 3、学习你的工具
|
||||
|
||||
现在有很多工具,例如:
|
||||
|
||||
* 调试器(GDB 等)
|
||||
* 浏览器开发工具
|
||||
* <ruby>剖析器<rt>profiler</rt></ruby>
|
||||
* `strace` / `ltrace`
|
||||
* `tcpdump` / `wireshark`
|
||||
* 核心转储
|
||||
* 甚至像错误信息这样的基本东西(如何正确阅读它们)
|
||||
|
||||
我在这个博客上写了很多关于调试工具的文章,并且肯定学习这些工具给我带来了巨大的变化。
|
||||
|
||||
该论文将此称为“处理性知识”。
|
||||
|
||||
#### 4、学习策略
|
||||
|
||||
这是最模糊的一类,在如何高效调试的过程中,我们都有很多策略和启发式方法。比如说:
|
||||
|
||||
* 写一个单元测试
|
||||
* 写一个小的独立程序来重现这个错误
|
||||
* 找到一个能工作的版本的代码,看看有什么变化
|
||||
* 打印出无数的东西
|
||||
* 增加额外的日志记录
|
||||
* 休息一下
|
||||
* 向朋友解释这个错误,然后在中途发现问题所在
|
||||
* 查看 GitHub 上的问题,看看是否有匹配的问题
|
||||
|
||||
在写这本杂志的时候,我一直在思考这个类别,但我想让这篇文章简短,所以我不会在这里多说。
|
||||
|
||||
该论文将此称为“战略知识”。
|
||||
|
||||
#### 5、获得经验
|
||||
|
||||
最后一个类别是“经验”。这篇论文对此有一个非常有趣的评论:
|
||||
|
||||
> 他们的研究结果并没有显示出新手和专家所采用的策略有什么明显的区别。专家只是形成了更多正确的假设,并且在寻找故障方面更有效率。作者怀疑这个结果是由于新手和专家之间的编程经验不同造成的。
|
||||
|
||||
这真的引起了我的共鸣 —— 我遇到过很多第一次遇到时非常令人沮丧和困难的 bug,而在第五次、第十次或第二十次时就非常简单了。
|
||||
|
||||
对我来说,这也是最直接的知识类别之一 —— 你需要做的就是调查一百万个 bug,反正这就是我们作为程序员的全部生活 : ) 。这需要很长的时间,但我觉得它发生得很自然。
|
||||
|
||||
本文将此称为“经验知识”。
|
||||
|
||||
#### 就这样吧!
|
||||
|
||||
我打算把这篇文章写得很短,我只是非常喜欢这个分类,想把它分享出来。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://jvns.ca/blog/2022/08/30/a-way-to-categorize-debugging-skills/
|
||||
|
||||
作者:[Julia Evans][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[aftermath0703](https://github.com/aftermath0703)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://jvns.ca/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://twitter.com/b0rk/status/1562480240240525314?s=20&t=BwKd6i0mVCTaCud2HDEUBA
|
||||
[2]: https://third-bit.com/
|
||||
[3]: https://dl.acm.org/doi/abs/10.1145/3286960.3286970
|
||||
[4]: https://www.researchgate.net/profile/Woei-Hung/publication/225547853_Learning_to_Troubleshoot_A_New_Theory-Based_Design_Architecture/links/556f471c08aec226830a74e7/Learning-to-Troubleshoot-A-New-Theory-Based-Design-Architecture.pdf
|
@ -0,0 +1,596 @@
|
||||
[#]: subject: "21 Basic Linux Networking Commands You Should Know"
|
||||
[#]: via: "https://itsfoss.com/basic-linux-networking-commands/"
|
||||
[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15013-1.html"
|
||||
|
||||
你应该知道的 22 个基本的 Linux 网络命令
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202209/09/151623qbizibbrzfrffrpc.jpg)
|
||||
|
||||
我们并不是每天都会谈论 Linux 的命令行。但正如一些读者指出的那样,你们也想学习一些命令行的技巧。
|
||||
|
||||
因此,我整理了一份基本的 Linux 网络命令清单,这些命令在我的大学时代帮助了我,让我对如何在网络方面使用 Linux 有了坚定的认识。
|
||||
|
||||
这些命令将帮助你设置网络,以及解决你在 Linux 系统中可能遇到的各种网络问题。
|
||||
|
||||
### Linux 中的基本网络命令
|
||||
|
||||
这个汇编包括了 CLI 实用程序,它们将帮助你排除网络问题、监控数据包和连接的设备,以及更多。
|
||||
|
||||
在我展示这些命令的一些细节之前,让我分享一下我今天要讨论的所有命令的简要概述。
|
||||
|
||||
| 命令 | 说明 |
|
||||
| :- | :- |
|
||||
| `ip` | 操纵路由来分配和配置网络参数 |
|
||||
| `traceroute` | 识别数据包到达主机的路径 |
|
||||
| `tracepath` | 在追踪网络主机的路径时,获取最大传输单元 |
|
||||
| `ping` | 通常用于检查主机和服务器之间的连接情况 |
|
||||
| `ss` | 获得有关网络套接字的详细信息 |
|
||||
| `dig` | 给出所有关于 DNS 名称服务器的必要信息 |
|
||||
| `host` | 输出特定域和主机的 IP 地址 |
|
||||
| `hostname` | 主要用于输出和更改主机名 |
|
||||
| `curl` | 在网络上通过各种协议传输数据 |
|
||||
| `mtr` | `ping` 和 `traceroute` 的组合,用于诊断网络 |
|
||||
| `whois` | 获取有关注册的域名、IP 地址、名称服务器等信息 |
|
||||
| `ifplugstatus` | 检测本地以太网设备的链接状态 |
|
||||
| `iftop` | 监视与带宽有关的统计信息 |
|
||||
| `tcpdump` | 数据包嗅探和分析工具,用于捕获、分析和过滤网络流量 |
|
||||
| `ethtool` | 允许用户配置以太网设备 |
|
||||
| `nmcli` | 用于网络连接的故障排除工具 |
|
||||
| `nmap` | 主要用于审计网络安全 |
|
||||
| `bmon` | 开源工具,用于监控实时带宽 |
|
||||
| `firewalld` | 配置防火墙规则的 CLI 工具 |
|
||||
| `iperf` | 测量网络性能和调整的工具 |
|
||||
| `speedtest-cli` | speedtest.net 的 CLI 工具,用于检查网速 |
|
||||
| `vnstat` | 主要用于监控网络流量和带宽消耗 |
|
||||
|
||||
现在,让我们用例子和更深入的方式讨论它们。
|
||||
|
||||
请注意,并不是所有的命令都会预装。我已经添加了针对 Debian/Ubuntu 的说明。对于其他发行版,请使用你的软件包管理器进行安装。
|
||||
|
||||
#### 1、ip 命令
|
||||
|
||||
`ip` 命令是最基本的,但也是最重要的,你会发现系统管理员经常使用它,其用于从操纵路由到分配和配置网络参数。
|
||||
|
||||
虽然用例可能无穷无尽,但让我向你展示 `ip` 命令的最基本用例(寻找 IP 地址)。
|
||||
|
||||
```
|
||||
ip address
|
||||
```
|
||||
|
||||
![ip address][1]
|
||||
|
||||
同样,你也可以使用 `ip` 命令来持续监控设备的状态,请使用 `monitor` 参数而不是我们之前用来获取 IP 地址的 `address` 参数:
|
||||
|
||||
```
|
||||
ip monitor
|
||||
```
|
||||
|
||||
![ip monitor][2]
|
||||
|
||||
#### 2、traceroute
|
||||
|
||||
使用 `traceroute` 命令,你可以确定数据包到达主机的路线。而且,当你想询问数据包的传输情况和数据包所走的跳数时,它可能相当有用。
|
||||
|
||||
默认情况下,你的系统可能没有安装 `traceroute`,如果你使用的是 Debian 及派生的发行版(包括 Ubuntu),安装时只需使用一个命令:
|
||||
|
||||
```
|
||||
sudo apt install traceroute
|
||||
```
|
||||
|
||||
例如,追踪到 google.com 的数据包:
|
||||
|
||||
```
|
||||
traceroute google.com
|
||||
```
|
||||
|
||||
![traceroute google.com][3]
|
||||
|
||||
默认情况下,`traceroute` 会使用 IPv4,但是你可以通过使用 `-6` 选项来改变这一行为,该选项将指示 `traceroute` 使用 IPv6。让我告诉你怎么做:
|
||||
|
||||
![traceroute -6 google.com][4]
|
||||
|
||||
#### 3、tracepath
|
||||
|
||||
`tracepath` 命令用于发现 MTU(最大传输单元),同时追踪到网络主机的路径。它与我上面讨论的 `traceroute` 很相似,但它不需要 `sudo` 权限,而且也没有像它那么多功能。
|
||||
|
||||
但是,首先什么是 MTU?
|
||||
|
||||
MTU 就是可以在网络上传输或接收的最大帧或数据包。
|
||||
|
||||
现在,让我们看一下 google.com 的 `tracepath` 的基本例子:
|
||||
|
||||
```
|
||||
tracepath google.com
|
||||
```
|
||||
|
||||
![tracepath google.com][5]
|
||||
|
||||
同样,你可以使用 `-b` 选项同时打印出 IP 地址和主机名。
|
||||
|
||||
```
|
||||
tracepath -b google.com
|
||||
```
|
||||
|
||||
![tracepath -b google.com][6]
|
||||
|
||||
#### 4、ping
|
||||
|
||||
[ping 命令][7](<ruby>数据包网络飞龙探云手<rt>Packet Internet Groper</rt></ruby> 🤣) 可以说是在排除网络故障时最重要的命令之一,因为它是检查主机和服务器之间连接情况的最常用方法。
|
||||
|
||||
例如,我 `ping` 谷歌:
|
||||
|
||||
```
|
||||
ping google.com
|
||||
```
|
||||
|
||||
![ping google.com][8]
|
||||
|
||||
这里,最后一行(`min/avg/max`)表示从指定的服务器获得响应的时间。
|
||||
|
||||
如果你得到一个错误提示 `bash: ping: command not found` (LCTT 译注:不会吧?),你可以查看我们的指南 [如何在 Ubuntu 上安装 Ping][9]。
|
||||
|
||||
#### 5、ss
|
||||
|
||||
`ss`(<ruby>套接字统计<rt>socket statistics</rt></ruby>)命令用于详细了解网络套接字(在网络上发送和接收数据的端点)。
|
||||
|
||||
要列出所有监听和非监听的 TCP 连接,你必须使用 `-at` 选项,如下所示:
|
||||
|
||||
```
|
||||
ss -at
|
||||
```
|
||||
|
||||
![ss -at][10]
|
||||
|
||||
同样,你可以使用 `-au` 选项对 UDP 端口进行同样的操作:
|
||||
|
||||
```
|
||||
ss -au
|
||||
```
|
||||
|
||||
![ss -au][11]
|
||||
|
||||
#### 6、dig
|
||||
|
||||
[dig 命令][12](<ruby>域信息龙爪手<rt>Domain Information Groper</rt></ruby> 😜)用于获取有关域名的所有必要信息。
|
||||
|
||||
要在基于 Ubuntu 的发行版上安装 `dig` 工具,请按照给出的命令进行:
|
||||
|
||||
```
|
||||
sudo apt install dnsutils
|
||||
```
|
||||
|
||||
现在,让我告诉你如何获取一个特定主机的信息,在这个例子中,我将获取 itsfoss.com 的信息:
|
||||
|
||||
```
|
||||
dig itsfoss.com
|
||||
```
|
||||
|
||||
![dig itsfoss.com][13]
|
||||
|
||||
#### 7、host
|
||||
|
||||
`host` 命令主要用于获取一个特定主机的 IP 地址,或者你可以从一个特定的 IP 地址获取主机名。换句话说,它是一个 DNS 查询工具。
|
||||
|
||||
要找到主机的 IP,你只需要在 `host` 命令中附加主机名。让我告诉你怎么做:
|
||||
|
||||
```
|
||||
host itsfoss.com
|
||||
```
|
||||
|
||||
![host itsfoss.com][14]
|
||||
|
||||
同样,你可以用一个 IP 地址来获取主机名:
|
||||
|
||||
```
|
||||
host 8.8.4.4
|
||||
```
|
||||
|
||||
![host 8.8.4.4][15]
|
||||
|
||||
#### 8、hostname
|
||||
|
||||
如果你已经使用了一段时间的 Linux,你一定很熟悉这个命令,因为这主要是用来 [改变你的系统的主机名][16] 和 NIS(网络信息系统)的主机名。
|
||||
|
||||
当不使用任何选项时,它可以得到系统当前的主机名。
|
||||
|
||||
```
|
||||
hostname
|
||||
```
|
||||
|
||||
![hostname][17]
|
||||
|
||||
从包含所需主机名的文件中改变主机名是这个工具的另一个有趣的功能:
|
||||
|
||||
```
|
||||
sudo hostname -F <filename>
|
||||
```
|
||||
|
||||
![sudo hostname -F][18]
|
||||
|
||||
#### 9、curl
|
||||
|
||||
`curl`(<ruby>客户端 URL<rt>Client URL</rt></ruby>)命令主要用于在网络上传输数据,支持各种协议,包括 HTTP、FTP、IMAP 和许多其他协议。
|
||||
|
||||
这个工具是首选的自动化工具,因为它是在没有任何人类互动的情况下工作的,也可以用于端点测试、调试和错误记录。
|
||||
|
||||
`curl` 工具没有预装,如果你在任何 Debian 及其派生发行版上,你只需要使用以下命令进行安装:
|
||||
|
||||
```
|
||||
sudo apt install curl
|
||||
```
|
||||
|
||||
使用 `curl` 命令 [下载文件][19] 非常容易,你只需在 URL 中使用 `-O` 选项,就可以开始了。
|
||||
|
||||
```
|
||||
curl -O [URL]
|
||||
```
|
||||
|
||||
![curl -o url][20]
|
||||
|
||||
在下载大文件时,进度条会很方便,你可以用 `curl` 的 `-#` 选项来显示进度条。
|
||||
|
||||
![curl -# -O][21]
|
||||
|
||||
#### 10、mtr
|
||||
|
||||
它是 `ping` 和 `traceroute` 工具的组合,主要用于网络诊断,并提供网络响应和连接的实时情况。
|
||||
|
||||
使用 `mtr` 的最简单方法是用它跟上一个主机名或 IP 地址,它将给出一个实时的 `traceroute` 报告。
|
||||
|
||||
```
|
||||
mtr [URL/IP]
|
||||
```
|
||||
|
||||
![mtr google.com][22]
|
||||
|
||||
如果你想让 `mtr` 同时显示主机名和 IP 地址,你可以把它和 `-b` 选项配对,如下图:
|
||||
|
||||
```
|
||||
mtr -b [URL]
|
||||
```
|
||||
|
||||
![mtr -b][23]
|
||||
|
||||
#### 11、whois
|
||||
|
||||
`whois` 可以帮助你找到有关注册的域名、IP 地址、名称服务器等信息,因为它是 whois 目录服务的客户端。
|
||||
|
||||
这个工具可能没有预装在你的设备上,要在基于 Debian/Ubuntu 的发行版上安装,你可以使用给出的命令:
|
||||
|
||||
```
|
||||
sudo apt install whois
|
||||
```
|
||||
|
||||
一般来说,`whois` 命令是与给出的域名配对使用的:
|
||||
|
||||
```
|
||||
whois [DomainName]
|
||||
```
|
||||
|
||||
![whois google.com][24]
|
||||
|
||||
另外,你也可以用一个 IP 地址来代替域名,你会得到同样的细节。
|
||||
|
||||
#### 12、ifplugstatus
|
||||
|
||||
`ifplugstatus` 是一个最基本的,但也是最有用的工具,足以在基本水平上排除连接问题。它用于检测本地以太网的链接状态,其工作方式与 `mii-diag`、`mii-tool` 和 `ethtool` 类似,支持所有三个 API。
|
||||
|
||||
在基于 Debian/Ubuntu 的发行版上安装,你可以按照给出的命令进行:
|
||||
|
||||
```
|
||||
sudo apt install ifplugd
|
||||
```
|
||||
|
||||
这个工具没有任何花哨的选项,经常不需要与任何配对选项而使用:
|
||||
|
||||
```
|
||||
ifplugstatus
|
||||
```
|
||||
|
||||
![ifplugstatus][25]
|
||||
|
||||
#### 13、iftop
|
||||
|
||||
`iftop`(<ruby>接口的 top<rt>Interface TOP</rt></ruby>)经常被管理员用来监控与带宽有关的统计数据,当你遇到网络问题时,也可以作为诊断工具使用。
|
||||
|
||||
这个工具需要手动安装,可以通过给出的命令在运行 Debian/Ubuntu 的机器上轻松安装。
|
||||
|
||||
```
|
||||
sudo apt install iftop
|
||||
```
|
||||
|
||||
当 `iftop` 在没有任何选项的情况下使用时,它会显示默认接口的带宽统计。
|
||||
|
||||
```
|
||||
sudo iftop
|
||||
```
|
||||
|
||||
![iftop][26]
|
||||
|
||||
你也可以通过在设备名称后面加上 `-i` 选项来指定网络设备。
|
||||
|
||||
```
|
||||
sudo iftop -i <DeviceName>.
|
||||
```
|
||||
|
||||
在我的例子中,是 `enp1s0`,所以我的输出将是如下:
|
||||
|
||||
![sudo iftop -i enp1s0][27]
|
||||
|
||||
#### 14、tcpdump
|
||||
|
||||
`tcpdump` 是一个数据包嗅探和分析工具,用于捕获、分析和过滤网络流量。它也可以作为一个安全工具使用,因为它将捕获的数据保存在可以 [通过 Wireshark 访问][28] 的 pcap 文件中。
|
||||
|
||||
像许多其他工具一样,`tcpdump` 没有预装,如果你是在Debian/Ubuntu 上,你可以按照下面的命令进行安装:
|
||||
|
||||
```
|
||||
sudo apt install tcpdump
|
||||
```
|
||||
|
||||
一旦你完成了安装,你可以获得当前接口的捕获数据包,如下所示:
|
||||
|
||||
```
|
||||
sudo tcpdump
|
||||
```
|
||||
|
||||
![sudo tcpdump][29]
|
||||
|
||||
那么如何将捕获的数据包保存在 pcap 文件中呢?让我告诉你怎么做:
|
||||
|
||||
```
|
||||
sudo tcpdump -w Captured_Packets.cap -i < networkdevice >
|
||||
```
|
||||
|
||||
![sudo tcpdump -w][30]
|
||||
|
||||
要访问保存的文件,你需要使用 `-r` 选项加上文件名。
|
||||
|
||||
```
|
||||
sudo tcpdump -r Captured_Packets.pcap
|
||||
```
|
||||
|
||||
![sudo tcpdump -r filename][31]
|
||||
|
||||
#### 15、ethtool
|
||||
|
||||
顾名思义,`ethtool` 工具主要涉及管理以太网设备。使用这个工具,你可以调整网卡速度、自动协商特性等。
|
||||
|
||||
但它可能没有预装在你的机器上,可以通过利用给出的命令安装在 Debian/Ubuntu 机器上:
|
||||
|
||||
```
|
||||
sudo apt install ethtool
|
||||
```
|
||||
|
||||
要获取接口的详细信息,你只需在命令后面加上设备名称,如下所示:
|
||||
|
||||
```
|
||||
sudo ethtool <InterfaceName>
|
||||
```
|
||||
|
||||
![sudo ethtool enp1s0][32]
|
||||
|
||||
#### 16、nmcli
|
||||
|
||||
作为一个简单而强大的网络故障排除工具,它是任何系统管理员在排除网络故障时首先使用的工具之一,也可以在脚本中使用。
|
||||
|
||||
你可以使用 `nmcli` 命令来监控设备的连接状态:
|
||||
|
||||
```
|
||||
nmcli dev status
|
||||
```
|
||||
|
||||
![nmcli dev status][33]
|
||||
|
||||
当不使用任何选项时,它将带来你系统中所有现有设备的信息:
|
||||
|
||||
```
|
||||
nmcli
|
||||
```
|
||||
|
||||
![nmcli][34]
|
||||
|
||||
#### 17、nmap
|
||||
|
||||
`nmap` 是一个探索和审计网络安全的工具。它经常被黑客和安全爱好者使用,因为它允许你获得网络的实时信息、连接到你的网络的 IP 的详细信息、端口扫描,以及更多。
|
||||
|
||||
要在基于 Debian/Ubuntu 的发行版上安装 `nmap` 工具,请使用给出的命令:
|
||||
|
||||
```
|
||||
sudo apt install nmap
|
||||
```
|
||||
|
||||
让我们开始扫描主机名:
|
||||
|
||||
```
|
||||
nmap itsfoss.com
|
||||
```
|
||||
|
||||
![nmap itsfoss.com][35]
|
||||
|
||||
#### 18、bmon
|
||||
|
||||
`bmon` 是一个开源的工具,用于监测实时带宽和调试问题,以更人性化的方式呈现统计数据。这个工具最好的部分是图形显示,甚至可以在 HTML 中得到你的输出!
|
||||
|
||||
安装非常简单,因为 `bmon` 存在于流行的 Linux 发行版的默认仓库中,这也包括 Debian/Ubuntu。
|
||||
|
||||
```
|
||||
sudo apt install bmon
|
||||
```
|
||||
|
||||
现在,你只需要启动 `bmon`,就可以用眼睛愉快地监控带宽了:
|
||||
|
||||
```
|
||||
bmon
|
||||
```
|
||||
|
||||
![bmon][36]
|
||||
|
||||
#### 19、firewalld
|
||||
|
||||
管理防火墙可以说是网络安全的核心部分,这个工具允许你添加、配置和删除防火墙的规则。
|
||||
|
||||
但是 firewalld 需要手动安装,如果你使用的是基于 Debian/Ubuntu 的发行版,你可以利用给出的命令进行安装:
|
||||
|
||||
```
|
||||
sudo apt install firewalld
|
||||
```
|
||||
|
||||
例如,我将向你展示,如何为公共区域永久地打开 80 端口:
|
||||
|
||||
```
|
||||
sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
|
||||
```
|
||||
|
||||
![sudo firewall-cmd --permanent --zone=public][37]
|
||||
|
||||
同样,要删除最近添加的规则,你必须使用 `-remove` 选项,如下所示:
|
||||
|
||||
```
|
||||
sudo firewall-cmd --zone=public --remove-port=80/tcp
|
||||
```
|
||||
|
||||
![sudo firewall-cmd --zone=public --remove][38]
|
||||
|
||||
#### 20、iperf
|
||||
|
||||
`iperf` 是一个用 C 语言编写的开源工具,允许用户进行网络性能测量和调整。
|
||||
|
||||
这个工具存在于 Debian/Ubuntu 的默认资源库中,可以通过给出的命令安装:
|
||||
|
||||
```
|
||||
sudo apt install iperf
|
||||
```
|
||||
|
||||
要开始监控网络,用户必须通过给出的命令在服务器上启动这个客户端:
|
||||
|
||||
```
|
||||
iperf -s -u
|
||||
```
|
||||
|
||||
其中,`-s` 选项表示服务器,`-u` 选项为 UDP 格式。
|
||||
|
||||
![iperf -s -u][39]
|
||||
|
||||
现在,你可以通过提供首选协议的 IP 地址有效载荷连接到你的服务器(使用 `-c` 选项表示客户端)。在这个例子中,我选择了 UDP(使用 `-u` 选项),有效载荷为 100:
|
||||
|
||||
```
|
||||
iperf -c 10.0.2.15 -u 100
|
||||
```
|
||||
|
||||
![iperf -c][40]
|
||||
|
||||
#### 21、speedtest-cli
|
||||
|
||||
顾名思义,这是 speedtest.net 网站的 CLI 工具。这个在 Apache 2.0 许可下发布的开源工具,当你想从 CLI 获得一个可靠的 [检查网速][41] 的来源时,会有很大帮助。
|
||||
|
||||
安装非常简单,如果你是在 Debian/Ubuntu 上,可以利用给出的命令轻松安装:
|
||||
|
||||
```
|
||||
sudo apt install speedtest-cli
|
||||
```
|
||||
|
||||
一旦你完成了安装部分,你只需要使用一行命令即可测试你的速度:
|
||||
|
||||
```
|
||||
speedtest-cli
|
||||
```
|
||||
|
||||
![speedtest-cli][42]
|
||||
|
||||
#### 22、vnstat
|
||||
|
||||
`vnstat` 工具主要被系统管理员用来监控网络流量和带宽消耗(大部分情况下),因为这个工具可以监控你系统的网络接口的流量。
|
||||
|
||||
和其他网络工具一样,你可以在默认的软件库中找到 `vnstat`,如果你在 Debian/Ubuntu 上,可以通过给出的命令进行安装:
|
||||
|
||||
```
|
||||
sudo apt install vnstat
|
||||
```
|
||||
|
||||
你可以使用 `vnstat` 命令,不需要任何选项,它将带来你系统所有可用接口的基本统计信息:
|
||||
|
||||
```
|
||||
vnstat
|
||||
```
|
||||
|
||||
![vnstat][43]
|
||||
|
||||
对于实时监控,你可以将 `vnstat` 命令与 `-l` 选项配对。
|
||||
|
||||
![vnstat -l][44]
|
||||
|
||||
### 一个长长的清单,对吗?
|
||||
|
||||
这个汇编连冰山一角都算不上,只是分享了每个命令的目的和基本例子,因为增加更多的命令会使这个清单变得更长。
|
||||
|
||||
流行的但 [已废弃的 Linux 命令][45],如 `ipconfig`,已被故意排除在这个列表之外。
|
||||
|
||||
如果你很好奇,你可以学习 [如何最大限度地利用手册页][46],这将教会你如何使用任何实用程序的最大潜力。
|
||||
|
||||
如果我忘了提到任何你喜欢的东西,请在评论中告诉我。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/basic-linux-networking-commands/
|
||||
|
||||
作者:[Sagar Sharma][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://itsfoss.com/author/sagar/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://itsfoss.com/wp-content/uploads/2022/08/ip-address-1.png
|
||||
[2]: https://itsfoss.com/wp-content/uploads/2022/08/ip-monitor.png
|
||||
[3]: https://itsfoss.com/wp-content/uploads/2022/08/traceroute-google.com_.png
|
||||
[4]: https://itsfoss.com/wp-content/uploads/2022/08/traceroute-6-google.com_.png
|
||||
[5]: https://itsfoss.com/wp-content/uploads/2022/08/tracepath-google.com_.png
|
||||
[6]: https://itsfoss.com/wp-content/uploads/2022/08/tracepath-b-google.com_.png
|
||||
[7]: https://linuxhandbook.com/ping-command-ubuntu/
|
||||
[8]: https://itsfoss.com/wp-content/uploads/2022/08/ping-google.com_.png
|
||||
[9]: https://linuxhandbook.com/ping-command-ubuntu/
|
||||
[10]: https://itsfoss.com/wp-content/uploads/2022/08/ss-at.png
|
||||
[11]: https://itsfoss.com/wp-content/uploads/2022/08/ss-au.png
|
||||
[12]: https://linuxhandbook.com/dig-command/
|
||||
[13]: https://itsfoss.com/wp-content/uploads/2022/08/dig-itsfoss.com_.png
|
||||
[14]: https://itsfoss.com/wp-content/uploads/2022/08/host-itsfoss.com_.png
|
||||
[15]: https://itsfoss.com/wp-content/uploads/2022/08/host-8.8.4.4.png
|
||||
[16]: https://itsfoss.com/change-hostname-ubuntu/
|
||||
[17]: https://itsfoss.com/wp-content/uploads/2022/08/hostname.png
|
||||
[18]: https://itsfoss.com/wp-content/uploads/2022/08/sudo-hostname-f.png
|
||||
[19]: https://linuxhandbook.com/curl-command-examples/
|
||||
[20]: https://itsfoss.com/wp-content/uploads/2022/08/curl-o-url.png
|
||||
[21]: https://itsfoss.com/wp-content/uploads/2022/08/curl-o.png
|
||||
[22]: https://itsfoss.com/wp-content/uploads/2022/08/mtr-google.com_.png
|
||||
[23]: https://itsfoss.com/wp-content/uploads/2022/08/mtr-b.png
|
||||
[24]: https://itsfoss.com/wp-content/uploads/2022/08/whois-google.com_.png
|
||||
[25]: https://itsfoss.com/wp-content/uploads/2022/08/ifplugstatus.png
|
||||
[26]: https://itsfoss.com/wp-content/uploads/2022/08/iftop.png
|
||||
[27]: https://itsfoss.com/wp-content/uploads/2022/08/sudo-iftop-i-enp1s0.png
|
||||
[28]: https://itsfoss.com/install-wireshark-ubuntu/
|
||||
[29]: https://itsfoss.com/wp-content/uploads/2022/08/sudo-tcpdump.png
|
||||
[30]: https://itsfoss.com/wp-content/uploads/2022/08/sudo-tcpdump-w-.png
|
||||
[31]: https://itsfoss.com/wp-content/uploads/2022/08/sudo-tcpdump-r-filename.png
|
||||
[32]: https://itsfoss.com/wp-content/uploads/2022/08/sudo-ethtool-enp1s0.png
|
||||
[33]: https://itsfoss.com/wp-content/uploads/2022/08/nmcli-dev-status.png
|
||||
[34]: https://itsfoss.com/wp-content/uploads/2022/08/nmcli.png
|
||||
[35]: https://itsfoss.com/wp-content/uploads/2022/08/nmap-itsfoss.com_.png
|
||||
[36]: https://itsfoss.com/wp-content/uploads/2022/08/bmon-800x591.png
|
||||
[37]: https://itsfoss.com/wp-content/uploads/2022/08/sudo-firewall-cmd-permanent-zonepublic.png
|
||||
[38]: https://itsfoss.com/wp-content/uploads/2022/08/sudo-firewall-cmd-zonepublic-remove.png
|
||||
[39]: https://itsfoss.com/wp-content/uploads/2022/08/iperf-s-u.png
|
||||
[40]: https://itsfoss.com/wp-content/uploads/2022/08/iperf-c-.png
|
||||
[41]: https://itsfoss.com/network-speed-monitor-linux/
|
||||
[42]: https://itsfoss.com/wp-content/uploads/2022/08/speedtest-cli.png
|
||||
[43]: https://itsfoss.com/wp-content/uploads/2022/08/vnstat.png
|
||||
[44]: https://itsfoss.com/wp-content/uploads/2022/08/vnstat-l.png
|
||||
[45]: https://itsfoss.com/deprecated-linux-commands/
|
||||
[46]: https://linuxhandbook.com/man-pages/
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user