mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-01-16 22:42:21 +08:00
commit
3af2205f58
@ -0,0 +1,619 @@
|
||||
数码文件与文件夹收纳术(以照片为例)
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/201910/05/000950xsxopomsrs55rrb5.jpg)
|
||||
|
||||
- 更新 2014-05-14:增加了一些具体实例
|
||||
- 更新 2015-03-16:根据照片的 GPS 坐标过滤图片
|
||||
- 更新 2016-08-29:以新的 `filetags --filter` 替换已经过时的 `show-sel.sh` 脚本
|
||||
- 更新 2017-08-28: geeqier 视频缩略图的邮件评论
|
||||
- 更新 2018-03-06:增加了 Julian Kahnert 的链接
|
||||
- 更新 2018-05-06:增加了作者在 2018 Linuxtage Graz 大会上 45 分钟演讲的视频
|
||||
- 更新 2018-06-05:关于 metadata 的邮件回复
|
||||
- 更新 2018-07-22:移动文件夹结构的解释到一篇它自己的文章中
|
||||
- 更新 2019-07-09:关于在文件名中避免使用系谱和字符的邮件回复
|
||||
|
||||
每当度假或去哪游玩时我就会化身为一个富有激情的摄影师。所以,过去的几年中我积累了许多的 [JPEG][1] 文件。这篇文章中我会介绍我是如何避免 [供应商锁定][2](LCTT 译注:<ruby>供应商锁定<rt>vendor lock-in</rt></ruby>,原为经济学术语,这里引申为避免过于依赖某一服务平台)造成受限于那些临时性的解决方案及数据丢失。相反,我更倾向于使用那些可以让我**投入时间和精力打理,并能长久使用**的解决方案。
|
||||
|
||||
这一(相当长的)攻略 **并不仅仅适用于图像文件**:我将进一步阐述像是文件夹结构、文件的命名规则等等许多领域的事情。因此,这些规范适用于我所能接触到的所有类型的文件。
|
||||
|
||||
在我开始传授我的方法之前,我们应该先就我将要介绍方法的达成一个共识,那就是我们是否有相同的需求。如果你对 [raw 图像格式][3]十分推崇,将照片存储在云端或其他你信赖的地方(对我而言可能不会),那么你可能不会认同这篇文章将要描述的方式了。请根据你的情况来灵活做出选择。
|
||||
|
||||
### 我的需求
|
||||
|
||||
对于 **将照片(或视频)从我的数码相机中导出到电脑里**,我只需要将 SD 卡插到我的电脑里并调用 `fetch-workflow` 软件。这一步也完成了**图像软件的预处理**以适用于我的文件命名规范(下文会具体论述),同时也可以将图片旋转至正常的方向(而不是横着)。
|
||||
|
||||
这些文件将会被存入到我的摄影收藏文件夹 `$HOME/tmp/digicam/`。在这一文件夹中我希望能**遍历我的图像和视频文件**,以便于**整理/删除、重命名、添加/移除标签,以及将一系列相关的文件移动到相应的文件夹中**。
|
||||
|
||||
在完成这些以后,我将会**浏览包含图像/电影文件集的文件夹**。在极少数情况下,我希望**在独立的图像处理工具**(比如 [GIMP][4])中打开一个图像文件。如果仅是为了**旋转 JPEG 文件**,我想找到一个快速的方法,不需要图像处理工具,并且是[以无损的方式][5]旋转 JPEG 图像。
|
||||
|
||||
我的数码相机支持用 [GPS][6] 坐标标记图像。因此,我需要一个方法来**对单个文件或一组文件可视化 GPS 坐标**来显示我走过的路径。
|
||||
|
||||
我想拥有的另一个好功能是:假设你在威尼斯度假时拍了几百张照片。每一个都很漂亮,所以你每张都舍不得删除。另一方面,你可能想把一组更少的照片送给家里的朋友。而且,在他们嫉妒的爆炸之前,他们可能只希望看到 20 多张照片。因此,我希望能够**定义并显示一组特定的照片子集**。
|
||||
|
||||
就独立性和**避免锁定效应**而言,我不想使用那种一旦公司停止产品或服务就无法使用的工具。出于同样的原因,由于我是一个注重隐私的人,**我不想使用任何基于云的服务**。为了让自己对新的可能性保持开放的心态,我不希望只在一个特定的操作系统平台才可行的方案上倾注全部的精力。**基本的东西必须在任何平台上可用**(查看、导航、……),而**全套需求必须可以在 GNU/Linux 上运行**,对我而言,我选择 Debian GNU/Linux。
|
||||
|
||||
在我传授当前针对上述大量需求的解决方案之前,我必须解释一下我的一般文件夹结构和文件命名约定,我也使用它来命名数码照片。但首先,你必须认清一个重要的事实:
|
||||
|
||||
#### iPhoto、Picasa,诸如此类应被认为是有害的
|
||||
|
||||
管理照片集的软件工具确实提供了相当酷的功能。它们提供了一个良好的用户界面,并试图为你提供满足各种需求的舒适的工作流程。
|
||||
|
||||
对它们我确实遇到了很多大问题。它们几乎对所有东西都使用专有的存储格式:图像文件、元数据等等。当你打算在几年内换一个不同的软件,这是一个大问题。相信我:总有一天你会因为多种原因而**更换软件**。
|
||||
|
||||
如果你现在正打算更换相应的工具,你会意识到 iPhoto 或 Picasa 是分别存储原始图像文件和你对它们所做的所有操作的(旋转图像、向图像文件添加描述/标签、裁剪等等)。如果你不能导出并重新导入到新工具,那么**所有的东西都将永远丢失**。而无损的进行转换和迁移几乎是不可能的。
|
||||
|
||||
我不想在一个会锁住我工作的工具上投入任何精力。**我也拒绝把自己绑定在任何专有工具上**。我是一个过来人,希望你们吸取我的经验。
|
||||
|
||||
这就是我在文件名中保留时间戳、图像描述或标记的原因。文件名是永久性的,除非我手动更改它们。当我把照片备份或复制到 U 盘或其他操作系统时,它们不会丢失。每个人都能读懂。任何未来的系统都能够处理它们。
|
||||
|
||||
### 我的文件命名规范
|
||||
|
||||
这里有一个我在 [2018 Linuxtage Graz 大会][44]上做的[演讲][45],其中详细阐述了我的在本文中提到的想法和工作流程。
|
||||
|
||||
- [Grazer Linuxtage 2018 - The Advantages of File Name Conventions and Tagging](https://youtu.be/rckSVmYCH90)
|
||||
- [备份视频托管在 media.CCC.de](https://media.ccc.de/v/GLT18_-_321_-_en_-_g_ap147_004_-_201804281550_-_the_advantages_of_file_name_conventions_and_tagging_-_karl_voit)
|
||||
|
||||
我所有的文件都与一个特定的日期或时间有关,根据所采用的 [ISO 8601][7] 规范,我采用的是**日期戳**或**时间戳**
|
||||
|
||||
带有日期戳和两个标签的示例文件名:`2014-05-09 Budget export for project 42 -- finance company.csv`。
|
||||
|
||||
带有时间戳(甚至包括可选秒)和两个标签的示例文件名:`2014-05-09T22.19.58 Susan presenting her new shoes -- family clothing.jpg`。
|
||||
|
||||
由于我使用的 ISO 时间戳冒号不适用于 Windows [NTFS 文件系统][8],因此,我用点代替冒号,以便将小时与分钟(以及可选的秒)区别开来。
|
||||
|
||||
如果是**持续的一段日期或时间**,我会将两个日期戳或时间戳用两个减号分开:`2014-05-09--2014-05-13 Jazz festival Graz -- folder tourism music.pdf`。
|
||||
|
||||
文件名中的时间/日期戳的优点是,除非我手动更改它们,否则它们保持不变。当通过某些不处理这些元数据的软件进行处理时,包含在文件内容本身中的元数据(如 [Exif][9])往往会丢失。此外,使用这样的日期/时间戳开始的文件名可以确保文件按时间顺序显示,而不是按字母顺序显示。字母表是一种[完全人工的排序顺序][10],对于用户定位文件通常不太实用。
|
||||
|
||||
当我想将**标签**关联到文件名时,我将它们放在原始文件名和[文件名扩展名][11]之间,中间用空格、两个减号和两端额外的空格分隔 ` -- `。我的标签是小写的英文单词,不包含空格或特殊字符。有时,我可能会使用 `quantifiedself` 或 `usergenerated` 这样的连接词。我[倾向于选择一般类别][12],而不是太过具体的描述标签。我在 Twitter [hashtags][13]、文件名、文件夹名、书签、诸如此类的博文等诸如此类地地方重用这些标签。
|
||||
|
||||
标签作为文件名的一部分有几个优点。通过使用常用的桌面搜索引擎,你可以在标签的帮助下定位文件。文件名称中的标签不会因为复制到不同的存储介质上而丢失。当系统使用与文件名之外的存储位置(如:元数据数据库、[点文件][14]、[备用数据流][15]等)存储元信息通常会发生丢失。
|
||||
|
||||
当然,通常在文件和文件夹名称中,**请避免使用特殊字符**、变音符、冒号等。尤其是在不同操作系统平台之间同步文件时。
|
||||
|
||||
我的**文件夹名命名约定**与文件的相应规范相同。
|
||||
|
||||
注意:由于 [Memacs][17] 的 [filenametimestamp][16] 模块的聪明之处,所有带有日期/时间戳的文件和文件夹都出现在我的 Org 模式的日历(日程)上的同一天/同一时间。这样,我就能很好地了解当天发生了什么,包括我拍的所有照片。
|
||||
|
||||
### 我的一般文件夹结构
|
||||
|
||||
在本节中,我将描述我的主文件夹中最重要的文件夹。注意:这可能在将来的被移动到一个独立的页面。或许不是。让我们等着瞧 :-) (LCTT 译注:后来这一节已被作者扩展并移动到另外一篇[文章](https://karl-voit.at/folder-hierarchy/)。)
|
||||
|
||||
很多东西只有在一定的时间内才会引起人们的兴趣。这些内容包括快速浏览其内容的下载、解压缩文件以检查包含的文件、一些有趣的小内容等等。对于**临时的东西**,我有 `$HOME/tmp/` 子层次结构。新照片放在 `$HOME/tmp/digicam/` 中。我从 CD、DVD 或 USB 记忆棒临时复制的东西放在 `$HOME/tmp/fromcd/` 中。每当软件工具需要用户文件夹层次结构中的临时数据时,我就使用 `$HOME/tmp/Tools/`作为起点。我经常使用的文件夹是 `$HOME/tmp/2del/`:`2del` 的意思是“随时可以删除”。例如,我所有的浏览器都使用这个文件夹作为默认的下载文件夹。如果我需要在机器上腾出空间,我首先查看这个 `2del` 文件夹,用于删除内容。
|
||||
|
||||
与上面描述的临时文件相比,我当然也想将文件**保存更长的时间**。这些文件被移动到我的 `$HOME/archive/` 子层次结构中。它有几个子文件夹用于备份、我想保留的 web 下载类、我要存档的二进制文件、可移动媒体(CD、DVD、记忆棒、外部硬盘驱动器)的索引文件,和一个稍后(寻找一个合适的的目标文件夹)存档的文件夹。有时,我太忙或没有耐心的时候将文件妥善整理。是的,那就是我,我甚至有一个名为“现在不要烦我”的文件夹。这对你而言是否很怪?:-)
|
||||
|
||||
我的归档中最重要的子层次结构是 `$HOME/archive/events_memories/` 及其子文件夹 `2014/`、`2013/`、`2012/` 等等。正如你可能已经猜到的,每个年份有一个**子文件夹**。其中每个文件中都有单个文件和文件夹。这些文件是根据我在前一节中描述的文件名约定命名的。文件夹名称以 [ISO 8601][7] 日期标签 “YYYY-MM-DD” 开头,后面跟着一个具有描述性的名称,如 `$HOME/archive/events_memories/2014/2014-05-08 Business marathon with/`。在这些与日期相关的文件夹中,我保存着各种与特定事件相关的文件:照片、(扫描的)pdf 文件、文本文件等等。
|
||||
|
||||
对于**共享数据**,我设置一个 `$HOME/share/` 子层次结构。这是我的 Dropbox 文件夹,我用各种各样的方法(比如 [unison][18])来分享数据。我也在我的设备之间共享数据:家里的 Mac Mini、家里的 GNU/Linux 笔记本、Android 手机,root-server(我的个人云),工作用的 Windows 笔记本。我不想在这里详细说明我的同步设置。如果你想了解相关的设置,可以参考另一篇相关的文章。:-)
|
||||
|
||||
在我的 `$HOME/templates_tags/` 子层次结构中,我保存了各种**模板文件**([LaTeX][19]、脚本、…),插图和**徽标**,等等。
|
||||
|
||||
我的 **Org 模式** 文件,主要是保存在 `$HOME/org/`。我练习记忆力,不会解释我有多喜欢 [Emacs/Org 模式][20] 以及我从中获益多少。你可能读过或听过我详细描述我用它做的很棒的事情。具体可以在我的博客上查找 [我的 Emacs 标签][21],在 Twitter 上查找 [hashtag #orgmode][22]。
|
||||
|
||||
以上就是我最重要的文件夹子层次结构设置方式。
|
||||
|
||||
### 我的工作流程
|
||||
|
||||
哒哒哒,在你了解了我的文件夹结构和文件名约定之后,下面是我当前的工作流程和工具,我使用它们来满足我前面描述的需求。
|
||||
|
||||
请注意,**你必须知道你在做什么**。我这里的示例及文件夹路径和更多**只适用我的机器或我的环境**。**你必须采用相应的**路径、文件名等来满足你的需求!
|
||||
|
||||
#### 工作流程:将文件从 SD 卡移动到笔记本电脑、旋转人像图像,并重命名文件
|
||||
|
||||
当我想把数据从我的数码相机移到我的 GNU/Linux 笔记本上时,我拿出它的 mini SD 存储卡,把它放在我的笔记本上。然后它会自动挂载在 `/media/digicam` 上。
|
||||
|
||||
然后,调用 [getdigicamdata][23]。它做了如下几件事:它将文件从 SD 卡移动到一个临时文件夹中进行处理。原始文件名会转换为小写字符。所有的人像照片会使用 [jhead][24] 旋转。同样使用 jhead,我从 Exif 头的时间戳中生成文件名称中的时间戳。使用 [date2name][25],我也将时间戳添加到电影文件中。处理完所有这些文件后,它们将被移动到新的数码相机文件的目标文件夹: `$HOME/tmp/digicam/tmp/`。
|
||||
|
||||
#### 工作流程:文件夹索引、查看、重命名、删除图像文件
|
||||
|
||||
为了快速浏览我的图像和电影文件,我喜欢使用 GNU/Linux 上的 [geeqie][26]。这是一个相当轻量级的图像浏览器,它具有其他文件浏览器所缺少的一大优势:我可以添加通过键盘快捷方式调用的外部脚本/工具。通过这种方式,我可以通过任意外部命令扩展这个图像浏览器的特性。
|
||||
|
||||
基本的图像管理功能是内置在 geeqie:浏览我的文件夹层次结构、以窗口模式或全屏查看图像(快捷键 `f`)、重命名文件名、删除文件、显示 Exif 元数据(快捷键 `Ctrl-e`)。
|
||||
|
||||
在 OS X 上,我使用 [Xee][27]。与 geeqie 不同,它不能通过外部命令进行扩展。不过,基本的浏览、查看和重命名功能也是可用的。
|
||||
|
||||
#### 工作流程:添加和删除标签
|
||||
|
||||
我创建了一个名为 [filetags][28] 的 Python 脚本,用于向单个文件以及一组文件添加和删除标记。
|
||||
|
||||
对于数码照片,我使用标签,例如,`specialL` 用于我认为适合桌面背景的风景图片,`specialP` 用于我想展示给其他人的人像照片,`sel` 用于筛选,等等。
|
||||
|
||||
##### 使用 geeqie 初始设置 filetags
|
||||
|
||||
向 geeqie 添加 `filetags` 是一个手动步骤:“Edit > Preferences > Configure Editors ...”,然后创建一个附加条目 `New`。在这里,你可以定义一个新的桌面文件,如下所示:
|
||||
|
||||
```
|
||||
[Desktop Entry]
|
||||
Name=filetags
|
||||
GenericName=filetags
|
||||
Comment=
|
||||
Exec=/home/vk/src/misc/vk-filetags-interactive-adding-wrapper-with-gnome-terminal.sh %F
|
||||
Icon=
|
||||
Terminal=true
|
||||
Type=Application
|
||||
Categories=Application;Graphics;
|
||||
hidden=false
|
||||
MimeType=image/*;video/*;image/mpo;image/thm
|
||||
Categories=X-Geeqie;
|
||||
```
|
||||
|
||||
*add-tags.desktop*
|
||||
|
||||
封装脚本 `vk-filetags-interactive-adding-wrapper-with-gnome-terminal.sh` 是必须的,因为我想要弹出一个新的终端,以便添加标签到我的文件:
|
||||
|
||||
```
|
||||
#!/bin/sh
|
||||
|
||||
/usr/bin/gnome-terminal \
|
||||
--geometry=85x15+330+5 \
|
||||
--tab-with-profile=big \
|
||||
--hide-menubar \
|
||||
-x /home/vk/src/filetags/filetags.py --interactive "${@}"
|
||||
|
||||
#end
|
||||
```
|
||||
|
||||
*vk-filetags-interactive-adding-wrapper-with-gnome-terminal.sh*
|
||||
|
||||
在 geeqie 中,你可以在 “Edit > Preferences > Preferences ... > Keyboard”。我将 `t` 与 `filetags` 命令相关联。
|
||||
|
||||
这个 `filetags` 脚本还能够从单个文件或一组文件中删除标记。它基本上使用与上面相同的方法。唯一的区别是 `filetags` 脚本额外的 `--remove` 参数:
|
||||
|
||||
```
|
||||
[Desktop Entry]
|
||||
Name=filetags-remove
|
||||
GenericName=filetags-remove
|
||||
Comment=
|
||||
Exec=/home/vk/src/misc/vk-filetags-interactive-removing-wrapper-with-gnome-terminal.sh %F
|
||||
Icon=
|
||||
Terminal=true
|
||||
Type=Application
|
||||
Categories=Application;Graphics;
|
||||
hidden=false
|
||||
MimeType=image/*;video/*;image/mpo;image/thm
|
||||
Categories=X-Geeqie;
|
||||
```
|
||||
|
||||
*remove-tags.desktop*
|
||||
|
||||
```
|
||||
#!/bin/sh
|
||||
|
||||
/usr/bin/gnome-terminal \
|
||||
--geometry=85x15+330+5 \
|
||||
--tab-with-profile=big \
|
||||
--hide-menubar \
|
||||
-x /home/vk/src/filetags/filetags.py --interactive --remove "${@}"
|
||||
|
||||
#end
|
||||
```
|
||||
|
||||
*vk-filetags-interactive-removing-wrapper-with-gnome-terminal.sh*
|
||||
|
||||
为了删除标签,我创建了一个键盘快捷方式 `T`。
|
||||
|
||||
##### 在 geeqie 中使用 filetags
|
||||
|
||||
当我在 geeqie 文件浏览器中浏览图像文件时,我选择要标记的文件(一到多个)并按 `t`。然后,一个小窗口弹出,要求我提供一个或多个标签。用回车确认后,这些标签被添加到文件名中。
|
||||
|
||||
删除标签也是一样:选择多个文件,按下 `T`,输入要删除的标签,然后按回车确认。就是这样。几乎没有[给文件添加或删除标签的更简单的方法了][29]。
|
||||
|
||||
#### 工作流程:改进的使用 appendfilename 重命名文件
|
||||
|
||||
##### 不使用 appendfilename
|
||||
|
||||
重命名一组大型文件可能是一个冗长乏味的过程。对于 `2014-04-20T17.09.11_p1100386.jpg` 这样的原始文件名,在文件名中添加描述的过程相当烦人。你将按 `Ctrl-r` (重命名)在 geeqie 中打开文件重命名对话框。默认情况下,原始名称(没有文件扩展名的文件名称)被标记。因此,如果不希望删除/覆盖文件名(但要追加),则必须按下光标键 `→`。然后,光标放在基本名称和扩展名之间。输入你的描述(不要忘记以空格字符开始),并用回车进行确认。
|
||||
|
||||
##### 在 geeqie 使中用 appendfilename
|
||||
|
||||
使用 [appendfilename][30],我的过程得到了简化,可以获得将文本附加到文件名的最佳用户体验:当我在 geeqie 中按下 `a`(附加)时,会弹出一个对话框窗口,询问文本。在回车确认后,输入的文本将放置在时间戳和可选标记之间。
|
||||
|
||||
例如,当我在 `2014-04-20T17.09.11_p1100386.jpg` 上按下 `a`,然后键入`Pick-nick in Graz` 时,文件名变为 `2014-04-20T17.09.11_p1100386 Pick-nick in Graz.jpg`。当我再次按下 `a` 并输入 `with Susan` 时,文件名变为 `2014-04-20T17.09.11_p1100386 Pick-nick in Graz with Susan.jpg`。当文件名添加标记时,附加的文本前将附加标记分隔符。
|
||||
|
||||
这样,我就不必担心覆盖时间戳或标记。重命名的过程对我来说变得更加有趣!
|
||||
|
||||
最好的部分是:当我想要将相同的文本添加到多个选定的文件中时,也可以使用 `appendfilename`。
|
||||
|
||||
##### 在 geeqie 中初始设置 appendfilename
|
||||
|
||||
添加一个额外的编辑器到 geeqie: “Edit > Preferences > Configure Editors ... > New”。然后输入桌面文件定义:
|
||||
|
||||
```
|
||||
[Desktop Entry]
|
||||
Name=appendfilename
|
||||
GenericName=appendfilename
|
||||
Comment=
|
||||
Exec=/home/vk/src/misc/vk-appendfilename-interactive-wrapper-with-gnome-terminal.sh %F
|
||||
Icon=
|
||||
Terminal=true
|
||||
Type=Application
|
||||
Categories=Application;Graphics;
|
||||
hidden=false
|
||||
MimeType=image/*;video/*;image/mpo;image/thm
|
||||
Categories=X-Geeqie;
|
||||
```
|
||||
|
||||
*appendfilename.desktop*
|
||||
|
||||
同样,我也使用了一个封装脚本,它将为我打开一个新的终端:
|
||||
|
||||
```
|
||||
#!/bin/sh
|
||||
|
||||
/usr/bin/gnome-terminal \
|
||||
--geometry=90x5+330+5 \
|
||||
--tab-with-profile=big \
|
||||
--hide-menubar \
|
||||
-x /home/vk/src/appendfilename/appendfilename.py "${@}"
|
||||
|
||||
#end
|
||||
```
|
||||
|
||||
*vk-appendfilename-interactive-wrapper-with-gnome-terminal.sh*
|
||||
|
||||
#### 工作流程:播放电影文件
|
||||
|
||||
在 GNU/Linux 上,我使用 [mplayer][31] 回放视频文件。由于 geeqie 本身不播放电影文件,所以我必须创建一个设置,以便在 mplayer 中打开电影文件。
|
||||
|
||||
##### 在 geeqie 中初始设置 mplayer
|
||||
|
||||
我已经使用 [xdg-open][32] 将电影文件扩展名关联到 mplayer。因此,我只需要为 geeqie 创建一个通用的“open”命令,让它使用 `xdg-open` 打开任何文件及其关联的应用程序。
|
||||
|
||||
在 geeqie 中,再次访问 “Edit > Preferences > Configure Editors ...” 添加“open”的条目:
|
||||
|
||||
```
|
||||
[Desktop Entry]
|
||||
Name=open
|
||||
GenericName=open
|
||||
Comment=
|
||||
Exec=/usr/bin/xdg-open %F
|
||||
Icon=
|
||||
Terminal=true
|
||||
Type=Application
|
||||
hidden=false
|
||||
NOMimeType=*;
|
||||
MimeType=image/*;video/*
|
||||
Categories=X-Geeqie;
|
||||
```
|
||||
|
||||
*open.desktop*
|
||||
|
||||
当你也将快捷方式 `o` (见上文)与 geeqie 关联时,你就能够打开与其关联的应用程序的视频文件(和其他文件)。
|
||||
|
||||
##### 使用 xdg-open 打开电影文件(和其他文件)
|
||||
|
||||
在上面的设置过程之后,当你的 geeqie 光标位于文件上方时,你只需按下 `o` 即可。就是如此简洁。
|
||||
|
||||
#### 工作流程:在外部图像编辑器中打开
|
||||
|
||||
我不太希望能够在 GIMP 中快速编辑图像文件。因此,我添加了一个快捷方式 `g`,并将其与外部编辑器 “"GNU Image Manipulation Program" (GIMP)” 关联起来,geeqie 已经默认创建了该外部编辑器。
|
||||
|
||||
这样,只需按下 `g` 就可以在 GIMP 中打开当前图像。
|
||||
|
||||
#### 工作流程:移动到存档文件夹
|
||||
|
||||
现在我已经在我的文件名中添加了注释,我想将单个文件移动到 `$HOME/archive/events_memories/2014/`,或者将一组文件移动到这个文件夹中的新文件夹中,如 `$HOME/archive/events_memories/2014/2014-05-08 business marathon after show - party`。
|
||||
|
||||
通常的方法是选择一个或多个文件,并用快捷方式 `Ctrl-m` 将它们移动到文件夹中。
|
||||
|
||||
何等繁复无趣之至!
|
||||
|
||||
因此,我(再次)编写了一个 Python 脚本,它为我完成了这项工作:[move2archive][33](简写为:` m2a `),需要一个或多个文件作为命令行参数。然后,出现一个对话框,我可以在其中输入一个可选文件夹名。当我不输入任何东西而是按回车,文件被移动到相应年份的文件夹。当我输入一个类似 `Business-Marathon After-Show-Party` 的文件夹名称时,第一个图像文件的日期戳被附加到该文件夹(`$HOME/archive/events_memories/2014/2014-05-08 Business-Marathon After-Show-Party`),然后创建该文件夹,并移动文件。
|
||||
|
||||
再一次,我在 geeqie 中选择一个或多个文件,按 `m`(移动),或者只按回车(没有特殊的子文件夹),或者输入一个描述性文本,这是要创建的子文件夹的名称(可选不带日期戳)。
|
||||
|
||||
**没有一个图像管理工具像我的带有 appendfilename 和 move2archive 的 geeqie 一样可以通过快捷键快速且有趣的完成工作。**
|
||||
|
||||
##### 在 geeqie 里初始化 m2a 的相关设置
|
||||
|
||||
同样,向 geeqie 添加 `m2a` 是一个手动步骤:“Edit > Preferences > Configure Editors ...”,然后创建一个附加条目“New”。在这里,你可以定义一个新的桌面文件,如下所示:
|
||||
|
||||
```
|
||||
[Desktop Entry]
|
||||
Name=move2archive
|
||||
GenericName=move2archive
|
||||
Comment=Moving one or more files to my archive folder
|
||||
Exec=/home/vk/src/misc/vk-m2a-interactive-wrapper-with-gnome-terminal.sh %F
|
||||
Icon=
|
||||
Terminal=true
|
||||
Type=Application
|
||||
Categories=Application;Graphics;
|
||||
hidden=false
|
||||
MimeType=image/*;video/*;image/mpo;image/thm
|
||||
Categories=X-Geeqie;
|
||||
```
|
||||
|
||||
*m2a.desktop*
|
||||
|
||||
封装脚本 `vk-m2a-interactive-wrapper-with-gnome-terminal.sh` 是必要的,因为我想要弹出一个新的终端窗口,以便我的文件进入我指定的目标文件夹:
|
||||
|
||||
```
|
||||
#!/bin/sh
|
||||
|
||||
/usr/bin/gnome-terminal \
|
||||
--geometry=157x56+330+5 \
|
||||
--tab-with-profile=big \
|
||||
--hide-menubar \
|
||||
-x /home/vk/src/m2a/m2a.py --pauseonexit "${@}"
|
||||
|
||||
#end
|
||||
```
|
||||
|
||||
*vk-m2a-interactive-wrapper-with-gnome-terminal.sh*
|
||||
|
||||
在 geeqie 中,你可以在 “Edit > Preferences > Preferences ... > Keyboard” 将 `m` 与 `m2a` 命令相关联。
|
||||
|
||||
#### 工作流程:旋转图像(无损)
|
||||
|
||||
通常,我的数码相机会自动将人像照片标记为人像照片。然而,在某些特定的情况下(比如从装饰图案上方拍照),我的相机会出错。在那些**罕见的情况下**,我必须手动修正方向。
|
||||
|
||||
你必须知道,JPEG 文件格式是一种有损格式,应该只用于照片,而不是计算机生成的东西,如屏幕截图或图表。以傻瓜方式旋转 JPEG 图像文件通常会解压/可视化图像文件、旋转生成新的图像,然后重新编码结果。这将导致生成的图像[比原始图像质量差得多][5]。
|
||||
|
||||
因此,你应该使用无损方法来旋转 JPEG 图像文件。
|
||||
|
||||
再一次,我添加了一个“外部编辑器”到 geeqie:“Edit > Preferences > Configure Editors ... > New”。在这里,我添加了两个条目:使用 [exiftran][34],一个用于旋转 270 度(即逆时针旋转 90 度),另一个用于旋转 90 度(顺时针旋转 90 度):
|
||||
|
||||
```
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Name=Losslessly rotate JPEG image counterclockwise
|
||||
|
||||
# call the helper script
|
||||
TryExec=exiftran
|
||||
Exec=exiftran -p -2 -i -g %f
|
||||
|
||||
# Desktop files that are usable only in Geeqie should be marked like this:
|
||||
Categories=X-Geeqie;
|
||||
OnlyShowIn=X-Geeqie;
|
||||
|
||||
# Show in menu "Edit/Orientation"
|
||||
X-Geeqie-Menu-Path=EditMenu/OrientationMenu
|
||||
|
||||
MimeType=image/jpeg;
|
||||
```
|
||||
|
||||
*rotate-270.desktop*
|
||||
|
||||
```
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Name=Losslessly rotate JPEG image clockwise
|
||||
|
||||
# call the helper script
|
||||
TryExec=exiftran
|
||||
Exec=exiftran -p -9 -i -g %f
|
||||
|
||||
# Desktop files that are usable only in Geeqie should be marked like this:
|
||||
Categories=X-Geeqie;
|
||||
OnlyShowIn=X-Geeqie;
|
||||
|
||||
# Show in menu "Edit/Orientation"
|
||||
X-Geeqie-Menu-Path=EditMenu/OrientationMenu
|
||||
|
||||
# It can be made verbose
|
||||
# X-Geeqie-Verbose=true
|
||||
|
||||
MimeType=image/jpeg;
|
||||
```
|
||||
|
||||
*rotate-90.desktop*
|
||||
|
||||
我创建了 geeqie 快捷键 `[`(逆时针方向)和 `]`(顺时针方向)。
|
||||
|
||||
#### 工作流程:可视化 GPS 坐标
|
||||
|
||||
我的数码相机有一个 GPS 传感器,它在 JPEG 文件的 Exif 元数据中存储当前的地理位置。位置数据以 [WGS 84][35] 格式存储,如 `47, 58, 26.73; 16, 23, 55.51`(纬度;经度)。这一方式可读性较差,我期望:要么是地图,要么是位置名称。因此,我向 geeqie 添加了一些功能,这样我就可以在 [OpenStreetMap][36] 上看到单个图像文件的位置: `Edit > Preferences > Configure Editors ... > New`。
|
||||
|
||||
```
|
||||
[Desktop Entry]
|
||||
Name=vkphotolocation
|
||||
GenericName=vkphotolocation
|
||||
Comment=
|
||||
Exec=/home/vk/src/misc/vkphotolocation.sh %F
|
||||
Icon=
|
||||
Terminal=true
|
||||
Type=Application
|
||||
Categories=Application;Graphics;
|
||||
hidden=false
|
||||
MimeType=image/bmp;image/gif;image/jpeg;image/jpg;image/pjpeg;image/png;image/tiff;image/x-bmp;image/x-gray;image/x-icb;image/x-ico;image/x-png;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-xbitmap;image/x-xpixmap;image/x-pcx;image/svg+xml;image/svg+xml-compressed;image/vnd.wap.wbmp;
|
||||
```
|
||||
|
||||
*photolocation.desktop*
|
||||
|
||||
这调用了我的名为 `vkphotolocation.sh` 的封装脚本,它使用 [ExifTool][37] 以 [Marble][38] 能够读取和可视化的适当格式提取该坐标:
|
||||
|
||||
```
|
||||
#!/bin/sh
|
||||
|
||||
IMAGEFILE="${1}"
|
||||
IMAGEFILEBASENAME=`basename ${IMAGEFILE}`
|
||||
|
||||
COORDINATES=`exiftool -c %.6f "${IMAGEFILE}" | awk '/GPS Position/ { print $4 " " $6 }'`
|
||||
|
||||
if [ "x${COORDINATES}" = "x" ]; then
|
||||
zenity --info --title="${IMAGEFILEBASENAME}" --text="No GPS-location found in the image file."
|
||||
else
|
||||
/usr/bin/marble --latlon "${COORDINATES}" --distance 0.5
|
||||
fi
|
||||
|
||||
#end
|
||||
```
|
||||
|
||||
*vkphotolocation.sh*
|
||||
|
||||
映射到键盘快捷键 `G`,我可以快速地得到**单个图像文件的位置的地图定位**。
|
||||
|
||||
当我想将多个 JPEG 图像文件的**位置可视化为路径**时,我使用 [GpsPrune][39]。我无法挖掘出 GpsPrune 将一组文件作为命令行参数的方法。正因为如此,我必须手动启动 GpsPrune,用 “File > Add photos”选择一组文件或一个文件夹。
|
||||
|
||||
通过这种方式,我可以为每个 JPEG 位置在 OpenStreetMap 地图上获得一个点(如果配置为这样)。通过单击这样一个点,我可以得到相应图像的详细信息。
|
||||
|
||||
如果你恰好在国外拍摄照片,可视化 GPS 位置对**在文件名中添加描述**大有帮助!
|
||||
|
||||
#### 工作流程:根据 GPS 坐标过滤照片
|
||||
|
||||
这并非我的工作流程。为了完整起见,我列出该工作流对应工具的特性。我想做的就是从一大堆图片中寻找那些在一定区域内(范围或点 + 距离)的照片。
|
||||
|
||||
到目前为止,我只找到了 [DigiKam][40],它能够[根据矩形区域进行过滤][41]。如果你知道其他工具,请将其添加到下面的评论或给我写一封电子邮件。
|
||||
|
||||
#### 工作流程:显示给定集合的子集
|
||||
|
||||
如上面的需求所述,我希望能够对一个文件夹中的文件定义一个子集,以便将这个小集合呈现给其他人。
|
||||
|
||||
工作流程非常简单:我向选择的文件添加一个标记(通过 `t`/`filetags`)。为此,我使用标记 `sel`,它是 “selection” 的缩写。在标记了一组文件之后,我可以按下 `s`,它与一个脚本相关联,该脚本只显示标记为 `sel` 的文件。
|
||||
|
||||
当然,这也适用于任何标签或标签组合。因此,用同样的方法,你可以得到一个适当的概述,你的婚礼上的所有照片都标记着“教堂”和“戒指”。
|
||||
|
||||
很棒的功能,不是吗?:-)
|
||||
|
||||
##### 初始设置 filetags 以根据标签和 geeqie 过滤
|
||||
|
||||
你必须定义一个额外的“外部编辑器”,“ Edit > Preferences > Configure Editors ... > New”:
|
||||
|
||||
```
|
||||
[Desktop Entry]
|
||||
Name=filetag-filter
|
||||
GenericName=filetag-filter
|
||||
Comment=
|
||||
Exec=/home/vk/src/misc/vk-filetag-filter-wrapper-with-gnome-terminal.sh
|
||||
Icon=
|
||||
Terminal=true
|
||||
Type=Application
|
||||
Categories=Application;Graphics;
|
||||
hidden=false
|
||||
MimeType=image/*;video/*;image/mpo;image/thm
|
||||
Categories=X-Geeqie;
|
||||
```
|
||||
|
||||
*filter-tags.desktop*
|
||||
|
||||
再次调用我编写的封装脚本:
|
||||
|
||||
```
|
||||
#!/bin/sh
|
||||
|
||||
/usr/bin/gnome-terminal \
|
||||
--geometry=85x15+330+5 \
|
||||
--hide-menubar \
|
||||
-x /home/vk/src/filetags/filetags.py --filter
|
||||
|
||||
#end
|
||||
```
|
||||
|
||||
*vk-filetag-filter-wrapper-with-gnome-terminal.sh*
|
||||
|
||||
带有参数 `--filter` 的 `filetags` 基本上完成的是:用户被要求输入一个或多个标签。然后,当前文件夹中所有匹配的文件都使用[符号链接][42]链接到 `$HOME/.filetags_tagfilter/`。然后,启动了一个新的 geeqie 实例,显示链接的文件。
|
||||
|
||||
在退出这个新的 geeqie 实例之后,你会看到进行选择的旧的 geeqie 实例。
|
||||
|
||||
#### 用一个真实的案例来总结
|
||||
|
||||
哇哦, 这是一篇很长的博客文章。你可能已经忘了之前的概述。总结一下我在(扩展了标准功能集的) geeqie 中可以做的事情,我有一个很酷的总结:
|
||||
|
||||
快捷键 | 功能
|
||||
--- | ---
|
||||
`m` | 移到归档(m2a)
|
||||
`o` | 打开(针对非图像文件)
|
||||
`a` | 在文件名里添加字段
|
||||
`t` | 文件标签(添加)
|
||||
`T` | 文件标签(删除)
|
||||
`s` | 文件标签(排序)
|
||||
`g` | gimp
|
||||
`G` | 显示 GPS 信息
|
||||
`[` | 无损的逆时针旋转
|
||||
`]` | 无损的顺时针旋转
|
||||
`Ctrl-e` | EXIF 图像信息
|
||||
`f` | 全屏显示
|
||||
|
||||
文件名(包括它的路径)的部分及我用来操作该部分的相应工具:
|
||||
|
||||
```
|
||||
/this/is/a/folder/2014-04-20T17.09 Picknick in Graz -- food graz.jpg
|
||||
[ move2archive ] [ date2name ] [appendfilename] [ filetags ]
|
||||
```
|
||||
|
||||
在实践中,我按照以下步骤将照片从相机保存到存档:我将 SD 存储卡放入计算机的 SD 读卡器中。然后我运行 [getdigicamdata.sh][23]。完成之后,我在 geeqie 中打开 `$HOME/tmp/digicam/tmp/`。我浏览了一下照片,把那些不成功的删除了。如果有一个图像的方向错误,我用 `[` 或 `]` 纠正它。
|
||||
|
||||
在第二步中,我向我认为值得评论的文件添加描述 (`a`)。每当我想添加标签时,我也这样做:我快速地标记所有应该共享相同标签的文件(`Ctrl + 鼠标点击`),并使用 [filetags][28](`t`)进行标记。
|
||||
|
||||
要合并来自给定事件的文件,我选中相应的文件,将它们移动到年度归档文件夹中的 `event-folder`,并通过在 [move2archive][33](`m`)中键入事件描述,其余的(非特殊的文件夹)无需声明事件描述由 `move2archive` (`m`)直接移动到年度归档中。
|
||||
|
||||
结束我的工作流程,我删除了 SD 卡上的所有文件,把它从操作系统上弹出,然后把它放回我的数码相机里。
|
||||
|
||||
以上。
|
||||
|
||||
因为这种工作流程几乎不需要任何开销,所以评论、标记和归档照片不再是一项乏味的工作。
|
||||
|
||||
### 最后
|
||||
|
||||
所以,这是一个详细描述我关于照片和电影的工作流程的叙述。你可能已经发现了我可能感兴趣的其他东西。所以请不要犹豫,请使用下面的链接留下评论或电子邮件。
|
||||
|
||||
我也希望得到反馈,如果我的工作流程适用于你。并且,如果你已经发布了你的工作流程或者找到了其他人工作流程的描述,也请留下评论!
|
||||
|
||||
及时行乐,莫让错误的工具或低效的方法浪费了我们的人生!
|
||||
|
||||
### 其他工具
|
||||
|
||||
阅读关于[本文中关于 gThumb 的部分][43]。
|
||||
|
||||
当你觉得你以上文中所叙述的符合你的需求时,请根据相关的建议来选择对应的工具。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: http://karl-voit.at/managing-digital-photographs/
|
||||
|
||||
作者:[Karl Voit][a]
|
||||
译者:[qfzy1233](https://github.com/qfzy1233)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]:http://karl-voit.at
|
||||
[1]:https://en.wikipedia.org/wiki/Jpeg
|
||||
[2]:http://en.wikipedia.org/wiki/Vendor_lock-in
|
||||
[3]:https://en.wikipedia.org/wiki/Raw_image_format
|
||||
[4]:http://www.gimp.org/
|
||||
[5]:http://petapixel.com/2012/08/14/why-you-should-always-rotate-original-jpeg-photos-losslessly/
|
||||
[6]:https://en.wikipedia.org/wiki/Gps
|
||||
[7]:https://en.wikipedia.org/wiki/Iso_date
|
||||
[8]:https://en.wikipedia.org/wiki/Ntfs
|
||||
[9]:https://en.wikipedia.org/wiki/Exif
|
||||
[10]:http://www.isisinform.com/reinventing-knowledge-the-medieval-controversy-of-alphabetical-order/
|
||||
[11]:https://en.wikipedia.org/wiki/File_name_extension
|
||||
[12]:http://karl-voit.at/tagstore/en/papers.shtml
|
||||
[13]:https://en.wikipedia.org/wiki/Hashtag
|
||||
[14]:https://en.wikipedia.org/wiki/Dot-file
|
||||
[15]:https://en.wikipedia.org/wiki/NTFS#Alternate_data_streams_.28ADS.29
|
||||
[16]:https://github.com/novoid/Memacs/blob/master/docs/memacs_filenametimestamps.org
|
||||
[17]:https://github.com/novoid/Memacs
|
||||
[18]:http://www.cis.upenn.edu/~bcpierce/unison/
|
||||
[19]:https://github.com/novoid/LaTeX-KOMA-template
|
||||
[20]:http://orgmode.org/
|
||||
[21]:http://karl-voit.at/tags/emacs
|
||||
[22]:https://twitter.com/search?q%3D%2523orgmode&src%3Dtypd
|
||||
[23]:https://github.com/novoid/getdigicamdata.sh
|
||||
[24]:http://www.sentex.net/%3Ccode%3Emwandel/jhead/
|
||||
[25]:https://github.com/novoid/date2name
|
||||
[26]:http://geeqie.sourceforge.net/
|
||||
[27]:http://xee.c3.cx/
|
||||
[28]:https://github.com/novoid/filetag
|
||||
[29]:http://karl-voit.at/tagstore/
|
||||
[30]:https://github.com/novoid/appendfilename
|
||||
[31]:http://www.mplayerhq.hu
|
||||
[32]:https://wiki.archlinux.org/index.php/xdg-open
|
||||
[33]:https://github.com/novoid/move2archive
|
||||
[34]:http://manpages.ubuntu.com/manpages/raring/man1/exiftran.1.html
|
||||
[35]:https://en.wikipedia.org/wiki/WGS84#A_new_World_Geodetic_System:_WGS_84
|
||||
[36]:http://www.openstreetmap.org/
|
||||
[37]:http://www.sno.phy.queensu.ca/~phil/exiftool/
|
||||
[38]:http://userbase.kde.org/Marble/Tracking
|
||||
[39]:http://activityworkshop.net/software/gpsprune/
|
||||
[40]:https://en.wikipedia.org/wiki/DigiKam
|
||||
[41]:https://docs.kde.org/development/en/extragear-graphics/digikam/using-kapp.html#idp7659904
|
||||
[42]:https://en.wikipedia.org/wiki/Symbolic_link
|
||||
[43]:http://karl-voit.at/2017/02/19/gthumb
|
||||
[44]:https://glt18.linuxtage.at
|
||||
[45]:https://glt18-programm.linuxtage.at/events/321.html
|
277
published/20180906 What a shell dotfile can do for you.md
Normal file
277
published/20180906 What a shell dotfile can do for you.md
Normal file
@ -0,0 +1,277 @@
|
||||
Shell 点文件可以为你做点什么
|
||||
======
|
||||
|
||||
> 了解如何使用配置文件来改善你的工作环境。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/201910/03/123528x3skwqwb8sz8qo8s.jpg)
|
||||
|
||||
不要问你可以为你的 shell <ruby>点文件<rt>dotfile</rt></ruby>做什么,而是要问一个 shell 点文件可以为你做什么!
|
||||
|
||||
我一直在操作系统领域里面打转,但是在过去的几年中,我的日常使用的一直是 Mac。很长一段时间,我都在使用 Bash,但是当几个朋友开始把 [zsh][1] 当成宗教信仰时,我也试试了它。我没用太长时间就喜欢上了它,几年后,我越发喜欢它做的许多小事情。
|
||||
|
||||
我一直在使用 zsh(通过 [Homebrew][2] 提供,而不是由操作系统安装的)和 [Oh My Zsh 增强功能][3]。
|
||||
|
||||
本文中的示例是我的个人 `.zshrc`。大多数都可以直接用在 Bash 中,我觉得不是每个人都依赖于 Oh My Zsh,但是如果不用的话你的工作量可能会有所不同。曾经有一段时间,我同时为 zsh 和 Bash 维护一个 shell 点文件,但是最终我还是放弃了我的 `.bashrc`。
|
||||
|
||||
### 不偏执不行
|
||||
|
||||
如果你希望在各个操作系统上使用相同的点文件,则需要让你的点文件聪明点。
|
||||
|
||||
```
|
||||
### Mac 专用
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
# Mac 专用内容在此
|
||||
```
|
||||
|
||||
例如,我希望 `Alt + 箭头键` 将光标按单词移动而不是单个空格。为了在 [iTerm2][4](我的首选终端)中实现这一目标,我将此代码段添加到了 `.zshrc` 的 Mac 专用部分:
|
||||
|
||||
```
|
||||
### Mac 专用
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
### Mac 用于 iTerm2 的光标命令;映射 ctrl+arrows 或 alt+arrows 来快速移动
|
||||
bindkey -e
|
||||
bindkey '^[[1;9C' forward-word
|
||||
bindkey '^[[1;9D' backward-word
|
||||
bindkey '\e\e[D' backward-word
|
||||
bindkey '\e\e[C' forward-word
|
||||
fi
|
||||
```
|
||||
|
||||
(LCTT 译注:标题 “We're all mad here” 是电影《爱丽丝梦游仙境》中,微笑猫对爱丽丝讲的一句话:“我们这儿全都是疯的”。)
|
||||
|
||||
### 在家不工作
|
||||
|
||||
虽然我开始喜欢我的 Shell 点文件了,但我并不总是想要家用计算机上的东西与工作的计算机上的东西一样。解决此问题的一种方法是让补充的点文件在家中使用,而不是在工作中使用。以下是我的实现方式:
|
||||
|
||||
```
|
||||
if [[ `egrep 'dnssuffix1|dnssuffix2' /etc/resolv.conf` ]]; then
|
||||
if [ -e $HOME/.work ]
|
||||
source $HOME/.work
|
||||
else
|
||||
echo "This looks like a work machine, but I can't find the ~/.work file"
|
||||
fi
|
||||
fi
|
||||
```
|
||||
|
||||
在这种情况下,我根据我的工作 dns 后缀(或多个后缀,具体取决于你的情况)来提供(`source`)一个可以使我的工作环境更好的单独文件。
|
||||
|
||||
(LCTT 译注:标题 “What about Bob?” 是 1991 年的美国电影《天才也疯狂》。)
|
||||
|
||||
### 你该这么做
|
||||
|
||||
现在可能是放弃使用波浪号(`~`)表示编写脚本时的主目录的好时机。你会发现在某些上下文中无法识别它。养成使用环境变量 `$HOME` 的习惯,这将为你节省大量的故障排除时间和以后的工作。
|
||||
|
||||
如果你愿意,合乎逻辑的扩展是应该包括特定于操作系统的点文件。
|
||||
|
||||
(LCTT 译注:标题 “That thing you do” 是 1996 年由汤姆·汉克斯执导的喜剧片《挡不住的奇迹》。)
|
||||
|
||||
### 别指望记忆
|
||||
|
||||
我写了那么多 shell 脚本,我真的再也不想写脚本了。并不是说 shell 脚本不能满足我大部分时间的需求,而是我发现写 shell 脚本,可能只是拼凑了一个胶带式解决方案,而不是永久地解决问题。
|
||||
|
||||
同样,我讨厌记住事情,在我的整个职业生涯中,我经常不得不在一天之中就彻彻底底地改换环境。实际的结果是这些年来,我不得不一再重新学习很多东西。(“等等……这种语言使用哪种 for 循环结构?”)
|
||||
|
||||
因此,每隔一段时间我就会觉得自己厌倦了再次寻找做某事的方法。我改善生活的一种方法是添加别名。
|
||||
|
||||
对于任何一个使用操作系统的人来说,一个常见的情况是找出占用了所有磁盘的内容。不幸的是,我从来没有记住过这个咒语,所以我做了一个 shell 别名,创造性地叫做 `bigdirs`:
|
||||
|
||||
```
|
||||
alias bigdirs='du --max-depth=1 2> /dev/null | sort -n -r | head -n20'
|
||||
```
|
||||
|
||||
虽然我可能不那么懒惰,并实际记住了它,但是,那不太 Unix ……
|
||||
|
||||
(LCTT 译注:标题 “Memory, all alone in the moonlight” 是一手英文老歌。)
|
||||
|
||||
### 输错的人们
|
||||
|
||||
使用 shell 别名改善我的生活的另一种方法是使我免于输入错误。我不知道为什么,但是我已经养成了这种讨厌的习惯,在序列 `ea` 之后输入 `w`,所以如果我想清除终端,我经常会输入 `cleawr`。不幸的是,这对我的 shell 没有任何意义。直到我添加了这个小东西:
|
||||
|
||||
```
|
||||
alias cleawr='clear'
|
||||
```
|
||||
|
||||
在 Windows 中有一个等效但更好的命令 `cls`,但我发现自己会在 Shell 也输入它。看到你的 shell 表示抗议真令人沮丧,因此我添加:
|
||||
|
||||
```
|
||||
alias cls='clear'
|
||||
```
|
||||
|
||||
是的,我知道 `ctrl + l`,但是我从不使用它。
|
||||
|
||||
(LCTT 译注:标题 “Typos, and the people who love them” 可能来自某部电影。)
|
||||
|
||||
### 要自娱自乐
|
||||
|
||||
工作压力很大。有时你需要找点乐子。如果你的 shell 不知道它显然应该执行的命令,则可能你想直接让它耸耸肩!你可以使用以下功能执行此操作:
|
||||
|
||||
```
|
||||
shrug() { echo "¯\_(ツ)_/¯"; }
|
||||
```
|
||||
|
||||
如果还不行,也许你需要掀桌不干了:
|
||||
|
||||
```
|
||||
fliptable() { echo "(╯°□°)╯ ┻━┻"; } # 掀桌,用法示例: fsck -y /dev/sdb1 || fliptable
|
||||
```
|
||||
|
||||
想想看,当我想掀桌子时而我不记得我给它起了个什么名字,我会有多沮丧和失望,所以我添加了更多的 shell 别名:
|
||||
|
||||
```
|
||||
alias flipdesk='fliptable'
|
||||
alias deskflip='fliptable'
|
||||
alias tableflip='fliptable'
|
||||
```
|
||||
|
||||
而有时你需要庆祝一下:
|
||||
|
||||
```
|
||||
disco() {
|
||||
echo "(•_•)"
|
||||
echo "<) )╯"
|
||||
echo " / \ "
|
||||
echo ""
|
||||
echo "\(•_•)"
|
||||
echo " ( (>"
|
||||
echo " / \ "
|
||||
echo ""
|
||||
echo " (•_•)"
|
||||
echo "<) )>"
|
||||
echo " / \ "
|
||||
}
|
||||
```
|
||||
|
||||
通常,我会将这些命令的输出通过管道传递到 `pbcopy`,并将其粘贴到我正在使用的相关聊天工具中。
|
||||
|
||||
我从一个我关注的一个叫 “Command Line Magic” [@ climagic][5] 的 Twitter 帐户得到了下面这个有趣的函数。自从我现在住在佛罗里达州以来,我很高兴看到我这一生中唯一的一次下雪:
|
||||
|
||||
```
|
||||
snow() {
|
||||
clear;while :;do echo $LINES $COLUMNS $(($RANDOM%$COLUMNS));sleep 0.1;done|gawk '{a[$3]=0;for(x in a) {o=a[x];a[x]=a[x]+1;printf "\033[%s;%sH ",o,x;printf "\033[%s;%sH*\033[0;0H",a[x],x;}}'
|
||||
}
|
||||
```
|
||||
|
||||
(LCTT 译注:标题 “Amuse yourself” 是 1936 年的美国电影《自娱自乐》)
|
||||
|
||||
### 函数的乐趣
|
||||
|
||||
我们已经看到了一些我使用的函数示例。由于这些示例中几乎不需要参数,因此可以将它们作为别名来完成。 当比一个短句更长时,我出于个人喜好使用函数。
|
||||
|
||||
在我职业生涯的很多时期我都运行过 [Graphite][6],这是一个开源、可扩展的时间序列指标解决方案。 在很多的情况下,我需要将度量路径(用句点表示)转换到文件系统路径(用斜杠表示),反之亦然,拥有专用于这些任务的函数就变得很有用:
|
||||
|
||||
```
|
||||
# 在 Graphite 指标和文件路径之间转换很有用
|
||||
function dottoslash() {
|
||||
echo $1 | sed 's/\./\//g'
|
||||
}
|
||||
function slashtodot() {
|
||||
echo $1 | sed 's/\//\./g'
|
||||
}
|
||||
```
|
||||
|
||||
在我的另外一段职业生涯里,我运行了很多 Kubernetes。如果你对运行 Kubernetes 不熟悉,你需要编写很多 YAML。不幸的是,一不小心就会编写了无效的 YAML。更糟糕的是,Kubernetes 不会在尝试应用 YAML 之前对其进行验证,因此,除非你应用它,否则你不会发现它是无效的。除非你先进行验证:
|
||||
|
||||
```
|
||||
function yamllint() {
|
||||
for i in $(find . -name '*.yml' -o -name '*.yaml'); do echo $i; ruby -e "require 'yaml';YAML.load_file(\"$i\")"; done
|
||||
}
|
||||
```
|
||||
|
||||
因为我厌倦了偶尔破坏客户的设置而让自己感到尴尬,所以我写了这个小片段并将其作为提交前挂钩添加到我所有相关的存储库中。在持续集成过程中,类似的内容将非常有帮助,尤其是在你作为团队成员的情况下。
|
||||
|
||||
(LCTT 译注:哦抱歉,我不知道这个标题的出处。)
|
||||
|
||||
### 手指不听话
|
||||
|
||||
我曾经是一位出色的盲打打字员。但那些日子已经一去不回。我的打字错误超出了我的想象。
|
||||
|
||||
在各种时期,我多次用过 Chef 或 Kubernetes。对我来说幸运的是,我从未同时使用过这两者。
|
||||
|
||||
Chef 生态系统的一部分是 Test Kitchen,它是加快测试的一组工具,可通过命令 `kitchen test` 来调用。Kubernetes 使用 CLI 工具 `kubectl` 进行管理。这两个命令都需要几个子命令,并且这两者都不会特别顺畅地移动手指。
|
||||
|
||||
我没有创建一堆“输错别名”,而是将这两个命令别名为 `k`:
|
||||
|
||||
```
|
||||
alias k='kitchen test $@'
|
||||
```
|
||||
|
||||
或
|
||||
|
||||
```
|
||||
alias k='kubectl $@'
|
||||
```
|
||||
|
||||
(LCTT 译注:标题 “Oh, fingers, where art thou?” 演绎自《O Brother, Where Art Thou?》,这是 2000 年美国的一部电影《逃狱三王》。)
|
||||
|
||||
### 分裂与合并
|
||||
|
||||
我职业生涯的后半截涉及与其他人一起编写更多代码。我曾在许多环境中工作过,在这些环境中,我们在帐户中复刻了存储库副本,并将拉取请求用作审核过程的一部分。当我想确保给定存储库的复刻与父版本保持最新时,我使用 `fetchupstream`:
|
||||
|
||||
```
|
||||
alias fetchupstream='git fetch upstream && git checkout master && git merge upstream/master && git push'
|
||||
```
|
||||
|
||||
(LCTT 译注:标题 “Timesplitters” 是一款视频游戏《时空分裂者》。)
|
||||
|
||||
### 颜色之荣耀
|
||||
|
||||
我喜欢颜色。它可以使 `diff` 之类的东西更易于使用。
|
||||
|
||||
```
|
||||
alias diff='colordiff'
|
||||
```
|
||||
|
||||
我觉得彩色的手册页是个巧妙的技巧,因此我合并了以下函数:
|
||||
|
||||
```
|
||||
# 彩色化手册页,来自:
|
||||
# http://boredzo.org/blog/archives/2016-08-15/colorized-man-pages-understood-and-customized
|
||||
man() {
|
||||
env \
|
||||
LESS_TERMCAP_md=$(printf "\e[1;36m") \
|
||||
LESS_TERMCAP_me=$(printf "\e[0m") \
|
||||
LESS_TERMCAP_se=$(printf "\e[0m") \
|
||||
LESS_TERMCAP_so=$(printf "\e[1;44;33m") \
|
||||
LESS_TERMCAP_ue=$(printf "\e[0m") \
|
||||
LESS_TERMCAP_us=$(printf "\e[1;32m") \
|
||||
man "$@"
|
||||
}
|
||||
```
|
||||
|
||||
我喜欢命令 `which`,但它只是告诉你正在运行的命令在文件系统中的位置,除非它是 Shell 函数才能告诉你更多。在多个级联的点文件之后,有时会不清楚函数的定义位置或作用。事实证明,`whence` 和 `type` 命令可以帮助解决这一问题。
|
||||
|
||||
```
|
||||
# 函数定义在哪里?
|
||||
whichfunc() {
|
||||
whence -v $1
|
||||
type -a $1
|
||||
}
|
||||
```
|
||||
|
||||
(LCTT 译注:标题“Mine eyes have seen the glory of the coming of color” 演绎自歌曲 《Mine Eyes Have Seen The Glory Of The Coming Of The Lord》)
|
||||
|
||||
### 总结
|
||||
|
||||
希望本文对你有所帮助,并能激发你找到改善日常使用 Shell 的方法。这些方法不必庞大、新颖或复杂。它们可能会解决一些微小但频繁的摩擦、创建捷径,甚至提供减少常见输入错误的解决方案。
|
||||
|
||||
欢迎你浏览我的 [dotfiles 存储库][7],但我要警示你,这样做可能会花费很多时间。请随意使用你认为有帮助的任何东西,并互相取长补短。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/18/9/shell-dotfile
|
||||
|
||||
作者:[H.Waldo Grunenwald][a]
|
||||
选题:[lujun9972](https://github.com/lujun9972)
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/gwaldo
|
||||
[1]: http://www.zsh.org/
|
||||
[2]: https://brew.sh/
|
||||
[3]: https://github.com/robbyrussell/oh-my-zsh
|
||||
[4]: https://www.iterm2.com/
|
||||
[5]: https://twitter.com/climagic
|
||||
[6]: https://github.com/graphite-project/
|
||||
[7]: https://github.com/gwaldo/dotfiles
|
@ -0,0 +1,101 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (wxy)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-11420-1.html)
|
||||
[#]: subject: (The Earliest Linux Distros: Before Mainstream Distros Became So Popular)
|
||||
[#]: via: (https://itsfoss.com/earliest-linux-distros/)
|
||||
[#]: author: (Avimanyu Bandyopadhyay https://itsfoss.com/author/avimanyu/)
|
||||
|
||||
主流发行版之前的那些最早的 Linux 发行版
|
||||
======
|
||||
|
||||
> 在这篇回溯历史的文章中,我们尝试回顾一些最早的 Linux 发行版是如何演变的,并形成我们今天所知道的发行版的。
|
||||
|
||||
![][1]
|
||||
|
||||
在这里,我们尝试探讨了第一个 Linux 内核问世后,诸如 Red Hat、Debian、Slackware、SUSE、Ubuntu 等诸多流行的发行版的想法是如何产生的。
|
||||
|
||||
随着 1991 年 Linux 最初以内核的形式发布,今天我们所知道的发行版在世界各地众多合作者的帮助下得以创建 shell、库、编译器和相关软件包,从而使其成为一个完整的操作系统。
|
||||
|
||||
### 1、第一个已知的“发行版”是由 HJ Lu 创建的
|
||||
|
||||
Linux 发行版这种方式可以追溯到 1992 年,当时可以用来访问 Linux 的第一个已知的类似发行版的工具是由 HJ Lu 发布的。它由两个 5.25 英寸软盘组成:
|
||||
|
||||
![Linux 0.12 Boot and Root Disks | Photo Credit][2]
|
||||
|
||||
* LINUX 0.12 BOOT DISK:“启动”磁盘用来先启动系统。
|
||||
* LINUX 0.12 ROOT DISK:第二个“根”磁盘,用于在启动后获取命令提示符以访问 Linux 文件系统。
|
||||
|
||||
要在硬盘上安装 LINUX 0.12,必须使用十六进制编辑器来编辑其主启动记录(MBR),这是一个非常复杂的过程,尤其是在那个时代。
|
||||
|
||||
> 感觉太怀旧了?
|
||||
>
|
||||
> 你可以[安装 cool-retro-term 应用程序][3],它可以为你提供 90 年代计算机的复古外观的 Linux 终端。
|
||||
|
||||
### 2、MCC Interim Linux
|
||||
|
||||
![MCC Linux 0.99.14, 1993 | Image Credit][4]
|
||||
|
||||
MCC Interim Linux 最初由英格兰曼彻斯特计算中心的 Owen Le Blanc 与 “LINUX 0.12” 同年发布,它是针对普通用户的第一个 Linux 发行版,它具有菜单驱动的安装程序和最终用户/编程工具。它也是以软盘集的形式,可以将其安装在系统上以提供基于文本的基本环境。
|
||||
|
||||
MCC Interim Linux 比 0.12 更加易于使用,并且在硬盘驱动器上的安装过程更加轻松和类似于现代方式。它不需要使用十六进制编辑器来编辑 MBR。
|
||||
|
||||
尽管它于 1992 年 2 月首次发布,但自当年 11 月以来也可以通过 FTP 下载。
|
||||
|
||||
### 3、TAMU Linux
|
||||
|
||||
![TAMU Linux | Image Credit][5]
|
||||
|
||||
TAMU Linux 由 Texas A&M 的 Aggies 与 Texas A&M Unix & Linux 用户组于 1992 年 5 月开发,被称为 TAMU 1.0A。它是第一个提供 X Window System 的 Linux 发行版,而不仅仅是基于文本的操作系统。
|
||||
|
||||
### 4、Softlanding Linux System (SLS)
|
||||
|
||||
![SLS Linux 1.05, 1994 | Image Credit][6]
|
||||
|
||||
他们的口号是“DOS 伞降的温柔救援”!SLS 由 Peter McDonald 于 1992 年 5 月发布。SLS 在其时代得到了广泛的使用和流行,并极大地推广了 Linux 的思想。但是由于开发人员决定更改发行版中的可执行格式,因此用户停止使用它。
|
||||
|
||||
当今社区最熟悉的许多流行发行版是通过 SLS 演变而成的。其中两个是:
|
||||
|
||||
* Slackware:它是最早的 Linux 发行版之一,由 Patrick Volkerding 于 1993 年创建。Slackware 基于 SLS,是最早的 Linux 发行版之一。
|
||||
* Debian:由 Ian Murdock 发起,Debian 在从 SLS 模型继续发展之后于 1993 年发布。我们今天知道的非常流行的 Ubuntu 发行版基于 Debian。
|
||||
|
||||
### 5、Yggdrasil
|
||||
|
||||
![LGX Yggdrasil Fall 1993 | Image Credit][7]
|
||||
|
||||
Yggdrasil 于 1992 年 12 月发行,是第一个产生 Live Linux CD 想法的发行版。它是由 Yggdrasil 计算公司开发的,该公司由位于加利福尼亚州伯克利的 Adam J. Richter 创立。它可以在系统硬件上自动配置自身,即“即插即用”功能,这是当今非常普遍且众所周知的功能。Yggdrasil 后来的版本包括一个用于在 Linux 中运行任何专有 MS-DOS CD-ROM 驱动程序的黑科技。
|
||||
|
||||
![Yggdrasil’s Plug-and-Play Promo | Image Credit][8]
|
||||
|
||||
他们的座右铭是“我们其余人的免费软件”。
|
||||
|
||||
### 6、Mandriva
|
||||
|
||||
在 90 年代后期,有一个非常受欢迎的发行版 [Mandriva][9],该发行版于 1998 年首次发行,是通过将法国的 Mandrake Linux 发行版与巴西的 Conectiva Linux 发行版统一起来形成的。它的发布寿命为 18 个月,会对 Linux 和系统软件进行更新,并且每年都会发布基于桌面的更新。它还有带有 5 年支持的服务器版本。现在是 [Open Mandriva][10]。
|
||||
|
||||
如果你在 Linux 发行之初就用过更多的怀旧发行版,请在下面的评论中与我们分享。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/earliest-linux-distros/
|
||||
|
||||
作者:[Avimanyu Bandyopadhyay][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://itsfoss.com/author/avimanyu/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/02/earliest-linux-distros.png?resize=800%2C450&ssl=1
|
||||
[2]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/01/Linux-0.12-Floppies.jpg?ssl=1
|
||||
[3]: https://itsfoss.com/cool-retro-term/
|
||||
[4]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/01/MCC-Interim-Linux-0.99.14-1993.jpg?fit=800%2C600&ssl=1
|
||||
[5]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/01/TAMU-Linux.jpg?ssl=1
|
||||
[6]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/01/SLS-1.05-1994.jpg?ssl=1
|
||||
[7]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/01/LGX_Yggdrasil_CD_Fall_1993.jpg?fit=781%2C800&ssl=1
|
||||
[8]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/01/Yggdrasil-Linux-Summer-1994.jpg?ssl=1
|
||||
[9]: https://en.wikipedia.org/wiki/Mandriva_Linux
|
||||
[10]: https://www.openmandriva.org/
|
125
published/20190320 Move your dotfiles to version control.md
Normal file
125
published/20190320 Move your dotfiles to version control.md
Normal file
@ -0,0 +1,125 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (wxy)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-11419-1.html)
|
||||
[#]: subject: (Move your dotfiles to version control)
|
||||
[#]: via: (https://opensource.com/article/19/3/move-your-dotfiles-version-control)
|
||||
[#]: author: (Matthew Broberg https://opensource.com/users/mbbroberg)
|
||||
|
||||
把“点文件”放到版本控制中
|
||||
======
|
||||
|
||||
> 通过在 GitLab 或 GitHub 上分享你的点文件,可以在整个系统上备份或同步你的自定义配置。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/201910/03/205222yzo1rbck6accccvo.jpg)
|
||||
|
||||
通过隐藏文件集(称为<ruby>点文件<rt>dotfile</rt></ruby>)来定制操作系统是个非常棒的想法。在这篇 [Shell 点文件可以为你做点什么][1]中,H. "Waldo" Grunenwald 详细介绍了为什么以及如何设置点文件的细节。现在让我们深入探讨分享它们的原因和方式。
|
||||
|
||||
### 什么是点文件?
|
||||
|
||||
“<ruby>点文件<rt>dotfile</rt></ruby>”是指我们计算机中四处漂泊的配置文件。这些文件通常在文件名的开头以 `.` 开头,例如 `.gitconfig`,并且操作系统通常在默认情况下将其隐藏。例如,当我在 MacOS 上使用 `ls -a` 时,它才会显示所有可爱的点文件,否则就不会显示这些点文件。
|
||||
|
||||
```
|
||||
dotfiles on master
|
||||
➜ ls
|
||||
README.md Rakefile bin misc profiles zsh-custom
|
||||
|
||||
dotfiles on master
|
||||
➜ ls -a
|
||||
. .gitignore .oh-my-zsh README.md zsh-custom
|
||||
.. .gitmodules .tmux Rakefile
|
||||
.gemrc .global_ignore .vimrc bin
|
||||
.git .gvimrc .zlogin misc
|
||||
.gitconfig .maid .zshrc profiles
|
||||
```
|
||||
|
||||
如果看一下用于 Git 配置的 `.gitconfig`,我能看到大量的自定义配置。我设置了帐户信息、终端颜色首选项和大量别名,这些别名可以使我的命令行界面看起来就像我的一样。这是 `[alias]` 块的摘录:
|
||||
|
||||
```
|
||||
87 # Show the diff between the latest commit and the current state
|
||||
88 d = !"git diff-index --quiet HEAD -- || clear; git --no-pager diff --patch-with-stat"
|
||||
89
|
||||
90 # `git di $number` shows the diff between the state `$number` revisions ago and the current state
|
||||
91 di = !"d() { git diff --patch-with-stat HEAD~$1; }; git diff-index --quiet HEAD -- || clear; d"
|
||||
92
|
||||
93 # Pull in remote changes for the current repository and all its submodules
|
||||
94 p = !"git pull; git submodule foreach git pull origin master"
|
||||
95
|
||||
96 # Checkout a pull request from origin (of a github repository)
|
||||
97 pr = !"pr() { git fetch origin pull/$1/head:pr-$1; git checkout pr-$1; }; pr"
|
||||
```
|
||||
|
||||
由于我的 `.gitconfig` 有 200 多行的自定义设置,我无意于在我使用的每一台新计算机或系统上重写它,其他人肯定也不想这样。这是分享点文件变得越来越流行的原因之一,尤其是随着社交编码网站 GitHub 的兴起。正式提倡分享点文件的文章是 Zach Holman 在 2008 年发表的《[点文件意味着被复刻][2]》。其前提到今天依然如此:我想与我自己、与点文件新手,以及那些分享了他们的自定义配置从而教会了我很多知识的人分享它们。
|
||||
|
||||
### 分享点文件
|
||||
|
||||
我们中的许多人拥有多个系统,或者知道硬盘变化无常,因此我们希望备份我们精心策划的自定义设置。那么我们如何在环境之间同步这些精彩的文件?
|
||||
|
||||
我最喜欢的答案是分布式版本控制,最好是可以为我处理繁重任务的服务。我经常使用 GitHub,随着我对 GitLab 的使用经验越来越丰富,我肯定会一如既往地继续喜欢它。任何一个这样的服务都是共享你的信息的理想场所。要自己设置的话可以这样做:
|
||||
|
||||
1. 登录到你首选的基于 Git 的服务。
|
||||
2. 创建一个名为 `dotfiles` 的存储库。(将其设置为公开!分享即关爱。)
|
||||
3. 将其克隆到你的本地环境。(你可能需要设置 Git 配置命令来克隆存储库。GitHub 和 GitLab 都会提示你需要运行的命令。)
|
||||
4. 将你的点文件复制到该文件夹中。
|
||||
5. 将它们符号链接回到其目标文件夹(最常见的是 `$HOME`)。
|
||||
6. 将它们推送到远程存储库。
|
||||
|
||||
![](https://opensource.com/sites/default/files/uploads/gitlab-new-project.png)
|
||||
|
||||
上面的步骤 4 是这项工作的关键,可能有些棘手。无论是使用脚本还是手动执行,工作流程都是从 `dotfiles` 文件夹符号链接到点文件的目标位置,以便对点文件的任何更新都可以轻松地推送到远程存储库。要对我的 `.gitconfig` 文件执行此操作,我要输入:
|
||||
|
||||
```
|
||||
$ cd dotfiles/
|
||||
$ ln -nfs .gitconfig $HOME/.gitconfig
|
||||
```
|
||||
|
||||
添加到符号链接命令的标志还具有其他一些用处:
|
||||
|
||||
* `-s` 创建符号链接而不是硬链接。
|
||||
* `-f` 在发生错误时继续做其他符号链接(此处不需要,但在循环中很有用)
|
||||
* `-n` 避免符号链接到一个符号链接文件(等同于其他版本的 `ln` 的 `-h` 标志)
|
||||
|
||||
如果要更深入地研究可用参数,可以查看 IEEE 和开放小组的 [ln 规范][3]以及 [MacOS 10.14.3] [4] 上的版本。自从其他人的点文件中拉取出这些标志以来,我才发现了这些标志。
|
||||
|
||||
你还可以使用一些其他代码来简化更新,例如我从 [Brad Parbs][6] 复刻的 [Rakefile][5]。另外,你也可以像 Jeff Geerling [在其点文件中][7]那样,使它保持极其简单的状态。他使用[此 Ansible 剧本][8]对文件进行符号链接。这样使所有内容保持同步很容易:你可以从点文件的文件夹中进行 cron 作业或偶尔进行 `git push`。
|
||||
|
||||
### 简单旁注:什么不能分享
|
||||
|
||||
在继续之前,值得注意的是你不应该添加到共享的点文件存储库中的内容 —— 即使它以点开头。任何有安全风险的东西,例如 `.ssh/` 文件夹中的文件,都不是使用此方法分享的好选择。确保在在线发布配置文件之前仔细检查配置文件,并再三检查文件中没有 API 令牌。
|
||||
|
||||
### 我应该从哪里开始?
|
||||
|
||||
如果你不熟悉 Git,那么我[有关 Git 术语的文章][9]和常用命令[备忘清单][10]将会帮助你继续前进。
|
||||
|
||||
还有其他超棒的资源可帮助你开始使用点文件。多年前,我就发现了 [dotfiles.github.io][11],并继续使用它来更广泛地了解人们在做什么。在其他人的点文件中隐藏了许多秘传知识。花时间浏览一些,大胆地将它们添加到自己的内容中。
|
||||
|
||||
我希望这是让你在计算机上拥有一致的点文件的快乐开端。
|
||||
|
||||
你最喜欢的点文件技巧是什么?添加评论或在 Twitter 上找我 [@mbbroberg][12]。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/3/move-your-dotfiles-version-control
|
||||
|
||||
作者:[Matthew Broberg][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://opensource.com/users/mbbroberg
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://linux.cn/article-11417-1.html
|
||||
[2]: https://zachholman.com/2010/08/dotfiles-are-meant-to-be-forked/
|
||||
[3]: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ln.html
|
||||
[4]: https://www.unix.com/man-page/FreeBSD/1/ln/
|
||||
[5]: https://github.com/mbbroberg/dotfiles/blob/master/Rakefile
|
||||
[6]: https://github.com/bradp/dotfiles
|
||||
[7]: https://github.com/geerlingguy/dotfiles
|
||||
[8]: https://github.com/geerlingguy/mac-dev-playbook
|
||||
[9]: https://opensource.com/article/19/2/git-terminology
|
||||
[10]: https://opensource.com/downloads/cheat-sheet-git
|
||||
[11]: http://dotfiles.github.io/
|
||||
[12]: https://twitter.com/mbbroberg?lang=en
|
@ -1,48 +1,50 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: translator: (wxy)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-11429-1.html)
|
||||
[#]: subject: (Learn how to Record and Replay Linux Terminal Sessions Activity)
|
||||
[#]: via: (https://www.linuxtechi.com/record-replay-linux-terminal-sessions-activity/)
|
||||
[#]: author: (Pradeep Kumar https://www.linuxtechi.com/author/pradeep/)
|
||||
|
||||
Learn how to Record and Replay Linux Terminal Sessions Activity
|
||||
在 Linux 上记录和重放终端会话活动
|
||||
======
|
||||
|
||||
Generally, all Linux administrators use **history** command to track which commands were executed in previous sessions, but there is one limitation of history command is that it doesn’t store the command’s output. There can be some scenarios where we want to check commands output of previous session and want to compare it with current session. Apart from this, there are some situations where we are troubleshooting the issues on Linux production boxes and want to save all terminal session activities for future reference, so in such cases script command become handy.
|
||||
通常,Linux 管理员们都使用 `history` 命令来跟踪在先前的会话中执行过哪些命令,但是 `history` 命令的局限性在于它不存储命令的输出。在某些情况下,我们要检查上一个会话的命令输出,并希望将其与当前会话进行比较。除此之外,在某些情况下,我们正在对 Linux 生产环境中的问题进行故障排除,并希望保存所有终端会话活动以供将来参考,因此在这种情况下,`script` 命令就变得很方便。
|
||||
|
||||
<https://www.linuxtechi.com/wp-content/uploads/2019/06/Record-linux-terminal-session-activity.jpg>
|
||||
![](https://img.linux.net.cn/data/attachment/album/201910/06/122659mmi64z8ryr4z2n8a.jpg)
|
||||
|
||||
Script is a command line tool which is used to capture or record your Linux server terminal sessions activity and later the recorded session can be replayed using scriptreplay command. In this article we will demonstrate how to install script command line tool and how to record Linux server terminal session activity and then later we will see how the recorded session can be replayed using **scriptreplay** command.
|
||||
`script` 是一个命令行工具,用于捕获/记录你的 Linux 服务器终端会话活动,以后可以使用 `scriptreplay` 命令重放记录的会话。在本文中,我们将演示如何安装 `script` 命令行工具以及如何记录 Linux 服务器终端会话活动,然后,我们将看到如何使用 `scriptreplay` 命令来重放记录的会话。
|
||||
|
||||
### Installation of Script tool on RHEL 7/ CentOS 7
|
||||
### 安装 script 工具
|
||||
|
||||
Script command is provided by the rpm package “**util-linux**”, in case it is not installed on your CentOS 7 / RHEL 7 system , run the following yum command,
|
||||
#### 在 RHEL 7/ CentOS 7 上安装 script 工具
|
||||
|
||||
`script` 命令由 RPM 包 `util-linux` 提供,如果你没有在你的 CentOS 7 / RHEL 7 系统上安装它,运行下面的 `yum` 安装它:
|
||||
|
||||
```
|
||||
[root@linuxtechi ~]# yum install util-linux -y
|
||||
```
|
||||
|
||||
**On RHEL 8 / CentOS 8**
|
||||
#### 在 RHEL 8 / CentOS 8 上安装 script 工具
|
||||
|
||||
Run the following dnf command to install script utility on RHEL 8 and CentOS 8 system,
|
||||
运行下面的 `dnf` 命令来在 RHEL 8 / CentOS 8 上安装 `script` 工具:
|
||||
|
||||
```
|
||||
[root@linuxtechi ~]# dnf install util-linux -y
|
||||
```
|
||||
|
||||
**Installation of Script tool on Debian based systems (Ubuntu / Linux Mint)**
|
||||
#### 在基于 Debian 的系统(Ubuntu / Linux Mint)上安装 script 工具
|
||||
|
||||
Execute the beneath apt-get command to install script utility
|
||||
运行下面的 `apt-get` 命令来安装 `script` 工具:
|
||||
|
||||
```
|
||||
root@linuxtechi ~]# apt-get install util-linux -y
|
||||
```
|
||||
|
||||
### How to Use script utility
|
||||
### 如何使用 script 工具
|
||||
|
||||
Use of script command is straight forward, type script command on terminal then hit enter, it will start capturing your current terminal session activities inside a file called “**typescript**”
|
||||
直接使用 `script` 命令,在终端上键入 `script` 命令,然后按回车,它将开始在名为 `typescript` 的文件中捕获当前的终端会话活动。
|
||||
|
||||
```
|
||||
[root@linuxtechi ~]# script
|
||||
@ -50,7 +52,7 @@ Script started, file is typescript
|
||||
[root@linuxtechi ~]#
|
||||
```
|
||||
|
||||
To stop recording the session activities, type exit command and hit enter.
|
||||
要停止记录会话活动,请键入 `exit` 命令,然后按回车:
|
||||
|
||||
```
|
||||
[root@linuxtechi ~]# exit
|
||||
@ -59,23 +61,23 @@ Script done, file is typescript
|
||||
[root@linuxtechi ~]#
|
||||
```
|
||||
|
||||
Syntax of Script command:
|
||||
`script` 命令的语法格式:
|
||||
|
||||
```
|
||||
~ ] # script {options} {file_name}
|
||||
~] # script {options} {file_name}
|
||||
```
|
||||
|
||||
Different options used in script command,
|
||||
能在 `script` 命令中使用的不同选项:
|
||||
|
||||
![options-script-command][1]
|
||||
|
||||
Let’s start recording of your Linux terminal session by executing script command and then execute couple of command like ‘**w**’, ‘**route -n**’ , ‘[**df -h**][2]’ and ‘**free-h**’, example is shown below
|
||||
让我们开始通过执行 `script` 命令来记录 Linux 终端会话,然后执行诸如 `w`,`route -n`,`df -h` 和 `free -h`,示例如下所示:
|
||||
|
||||
![script-examples-linux-server][3]
|
||||
|
||||
As we can see above, terminal session logs are saved in the file “typescript”
|
||||
正如我们在上面看到的,终端会话日志保存在文件 `typescript` 中:
|
||||
|
||||
Now view the contents of typescript file using [cat][4] / vi command,
|
||||
现在使用 `cat` / `vi` 命令查看 `typescript` 文件的内容,
|
||||
|
||||
```
|
||||
[root@linuxtechi ~]# ls -l typescript
|
||||
@ -85,11 +87,11 @@ Now view the contents of typescript file using [cat][4] / vi command,
|
||||
|
||||
![typescript-file-content-linux][5]
|
||||
|
||||
Above confirms that whatever commands we execute on terminal that have been saved inside the file “typescript”
|
||||
以上内容确认了我们在终端上执行的所有命令都已保存在 `typescript` 文件中。
|
||||
|
||||
### Use Custom File name in script command
|
||||
### 在 script 命令中使用定制文件名
|
||||
|
||||
Let’s assume we want to use our customize file name to script command, so specify the file name after script command, in the below example we are using a file name “session-log-(current-date-time).txt”
|
||||
假设我们要使用自定义文件名来执行 `script` 命令,可以在 `script` 命令后指定文件名。在下面的示例中,我们使用的文件名为 `session-log-(当前日期时间).txt`。
|
||||
|
||||
```
|
||||
[root@linuxtechi ~]# script sessions-log-$(date +%d-%m-%Y-%T).txt
|
||||
@ -97,7 +99,7 @@ Script started, file is sessions-log-21-06-2019-01:37:39.txt
|
||||
[root@linuxtechi ~]#
|
||||
```
|
||||
|
||||
Now run the commands and then type exit,
|
||||
现在运行该命令并输入 `exit`:
|
||||
|
||||
```
|
||||
[root@linuxtechi ~]# exit
|
||||
@ -106,9 +108,9 @@ Script done, file is sessions-log-21-06-2019-01:37:39.txt
|
||||
[root@linuxtechi ~]#
|
||||
```
|
||||
|
||||
### Append the commands output to script file
|
||||
### 附加命令输出到 script 记录文件
|
||||
|
||||
Let assume script command had already recorded the commands output to a file called session-log.txt file and now we want to append output of new sessions commands output to this file, then use “**-a**” command in script command
|
||||
假设 `script` 命令已经将命令输出记录到名为 `session-log.txt` 的文件中,现在我们想将新会话命令的输出附加到该文件中,那么可以在 `script` 命令中使用 `-a` 选项。
|
||||
|
||||
```
|
||||
[root@linuxtechi ~]# script -a sessions-log.txt
|
||||
@ -129,11 +131,11 @@ Script done, file is sessions-log.txt
|
||||
[root@linuxtechi ~]#
|
||||
```
|
||||
|
||||
To view updated session’s logs, use “cat session-log.txt ”
|
||||
要查看更新的会话记录,使用 `cat session-log.txt` 命令。
|
||||
|
||||
### Capture commands output to script file without interactive shell
|
||||
### 无需 shell 交互而捕获命令输出到 script 记录文件
|
||||
|
||||
Let’s assume we want to capture commands output to a script file, then use **-c** option, example is shown below,
|
||||
假设我们要捕获命令的输出到会话记录文件,那么使用 `-c` 选项,示例如下所示:
|
||||
|
||||
```
|
||||
[root@linuxtechi ~]# script -c "uptime && hostname && date" root-session.txt
|
||||
@ -145,9 +147,9 @@ Script done, file is root-session.txt
|
||||
[root@linuxtechi ~]#
|
||||
```
|
||||
|
||||
### Run script command in quiet mode
|
||||
### 以静默模式运行 script 命令
|
||||
|
||||
To run script command in quiet mode use **-q** option, this option will suppress the script started and script done message, example is shown below,
|
||||
要以静默模式运行 `script` 命令,请使用 `-q` 选项,该选项将禁止 `script` 的启动和完成消息,示例如下所示:
|
||||
|
||||
```
|
||||
[root@linuxtechi ~]# script -c "uptime && date" -q root-session.txt
|
||||
@ -156,11 +158,13 @@ Fri Jun 21 02:01:10 EDT 2019
|
||||
[root@linuxtechi ~]#
|
||||
```
|
||||
|
||||
Record Timing information to a file and capture commands output to a separate file, this can be achieved in script command by passing timing file (**–timing**) , example is shown below,
|
||||
要将时序信息记录到文件中并捕获命令输出到单独的文件中,这可以通过在 `script` 命令中传递时序文件(`-timing`)实现,示例如下所示:
|
||||
|
||||
Syntax:
|
||||
语法格式:
|
||||
|
||||
~ ]# script -t <timing-file-name> {file_name}
|
||||
```
|
||||
~ ]# script -t <timing-file-name> {file_name}
|
||||
```
|
||||
|
||||
```
|
||||
[root@linuxtechi ~]# script --timing=timing.txt session.log
|
||||
@ -185,23 +189,23 @@ Script done, file is session.log
|
||||
[root@linuxtechi ~]#
|
||||
```
|
||||
|
||||
### Replay recorded Linux terminal session activity
|
||||
### 重放记录的 Linux 终端会话活动
|
||||
|
||||
Now replay the recorded terminal session activities using scriptreplay command,
|
||||
现在,使用 `scriptreplay` 命令重放录制的终端会话活动。
|
||||
|
||||
**Note:** Scriptreplay is also provided by rpm package “**util-linux**”. Scriptreplay command requires timing file to work.
|
||||
注意:`scriptreplay` 也由 RPM 包 `util-linux` 提供。`scriptreplay` 命令需要时序文件才能工作。
|
||||
|
||||
```
|
||||
[root@linuxtechi ~]# scriptreplay --timing=timing.txt session.log
|
||||
```
|
||||
|
||||
Output of above command would be something like below,
|
||||
上面命令的输出将如下所示,
|
||||
|
||||
<https://www.linuxtechi.com/wp-content/uploads/2019/06/scriptreplay-linux.gif>
|
||||
![](https://www.linuxtechi.com/wp-content/uploads/2019/06/scriptreplay-linux.gif)
|
||||
|
||||
### Record all User’s Linux terminal session activities
|
||||
### 记录所有用户的 Linux 终端会话活动
|
||||
|
||||
There are some business critical Linux servers where we want keep track on all users activity, so this can be accomplished using script command, place the following content in /etc/profile file ,
|
||||
在某些关键业务的 Linux 服务器上,我们希望跟踪所有用户的活动,这可以使用 `script` 命令来完成,将以下内容放在 `/etc/profile` 文件中,
|
||||
|
||||
```
|
||||
[root@linuxtechi ~]# vi /etc/profile
|
||||
@ -218,22 +222,22 @@ fi
|
||||
……………………………………………………
|
||||
```
|
||||
|
||||
Save & exit the file.
|
||||
保存文件并退出。
|
||||
|
||||
Create the session directory under /var/log folder,
|
||||
在 `/var/log` 文件夹下创建 `session` 目录:
|
||||
|
||||
```
|
||||
[root@linuxtechi ~]# mkdir /var/log/session
|
||||
```
|
||||
|
||||
Assign the permissions to session folder,
|
||||
给该文件夹指定权限:
|
||||
|
||||
```
|
||||
[root@linuxtechi ~]# chmod 777 /var/log/session/
|
||||
[root@linuxtechi ~]#
|
||||
```
|
||||
|
||||
Now verify whether above code is working or not. Login to ordinary user to linux server, in my I am using pkumar user,
|
||||
现在,验证以上代码是否有效。在我正在使用 `pkumar` 用户的情况下,登录普通用户到 Linux 服务器:
|
||||
|
||||
```
|
||||
~ ] # ssh root@linuxtechi
|
||||
@ -263,13 +267,13 @@ Login as root and view user’s linux terminal session activity
|
||||
|
||||
![Session-output-file-linux][6]
|
||||
|
||||
We can also use scriptreplay command to replay user’s terminal session activities,
|
||||
我们还可以使用 `scriptreplay` 命令来重放用户的终端会话活动:
|
||||
|
||||
```
|
||||
[root@linuxtechi session]# scriptreplay --timing session.pkumar.19785.21-06-2019-04\:34\:05.timing session.pkumar.19785.21-06-2019-04\:34\:05
|
||||
```
|
||||
|
||||
That’s all from this tutorial, please do share your feedback and comments in the comments section below.
|
||||
以上就是本教程的全部内容,请在下面的评论部分中分享你的反馈和评论。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -277,8 +281,8 @@ via: https://www.linuxtechi.com/record-replay-linux-terminal-sessions-activity/
|
||||
|
||||
作者:[Pradeep Kumar][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -1,24 +1,26 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (geekpi)
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-11414-1.html)
|
||||
[#]: subject: (A Raspberry Pi Based Open Source Tablet is in Making and it’s Called CutiePi)
|
||||
[#]: via: (https://itsfoss.com/cutiepi-open-source-tab/)
|
||||
[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
|
||||
|
||||
基于树莓派的开源平板正在制造,它名叫 CutiePi
|
||||
CutiePi:正在开发中的基于树莓派的开源平板
|
||||
======
|
||||
|
||||
CutiePi 是一款 8 英寸的构建在树莓派上的开源平板。官方人员在[树莓派论坛][1]上宣布:现在,它只是一台原型机。
|
||||
![](https://img.linux.net.cn/data/attachment/album/201910/02/125301wkbvgz1n7zv7j55e.jpg)
|
||||
|
||||
CutiePi 是一款 8 英寸的构建在树莓派上的开源平板。他们在[树莓派论坛][1]上宣布:现在,它只是一台原型机。
|
||||
|
||||
在本文中,你将了解有关 CutiePi 的规格、价格和可用性的更多详细信息。
|
||||
|
||||
它们使用一款定制的计算模块版(CM3)来制造平板。[官网][2]提到使用定制 CM3 板的目的是:
|
||||
它们使用一款定制的计算模块载版(CM3)来制造平板。[官网][2]提到使用定制 CM3 载板的目的是:
|
||||
|
||||
> 定制 CM3/CM3+板是专为便携使用而设计,拥有增强的电源管理和锂电池电量监控功能。还可与指定的 HDMI 或 MIPI DSI 显示器配合使用。
|
||||
> 定制 CM3/CM3+ 载板是专为便携使用而设计,拥有增强的电源管理和锂聚合物电池电量监控功能。还可与指定的 HDMI 或 MIPI DSI 显示器配合使用。
|
||||
|
||||
因此,这使得平板足够薄而且便携。
|
||||
因此,这使得该平板足够薄而且便携。
|
||||
|
||||
### CutiePi 规格
|
||||
|
||||
@ -36,19 +38,17 @@ CutiePi 是一款 8 英寸的构建在树莓派上的开源平板。官方人员
|
||||
|
||||
### CutiePi 源码
|
||||
|
||||
你可以通过分析所用材料的清单来猜测此平板的定价。CutiePi 遵循 100% 的开源硬件设计。因此,如果你觉得好奇,可以查看它的 GitHub 页面,了解有关硬件设计和内容的详细信息。
|
||||
|
||||
[CutiePi on GitHub][7]
|
||||
你可以通过分析所用材料的清单来猜测此平板的定价。CutiePi 遵循 100% 的开源硬件设计。因此,如果你觉得好奇,可以查看它的 [GitHub 页面][7],了解有关硬件设计和内容的详细信息。
|
||||
|
||||
### CutiePi 价格、发布日期和可用性
|
||||
|
||||
CutiePi 计划在 8 月处理进行[设计验证测试][8]批量的 PCB。他们的目标是在 2019 年底推出最终产品。
|
||||
CutiePi 计划在 8 月进行[设计验证测试][8]批量 PCB。他们的目标是在 2019 年底推出最终产品。
|
||||
|
||||
官方预计,发售价大约在 $150-$250 左右。这只是一个近似的范围,还应该保有怀疑。
|
||||
|
||||
显然,即使产品听上去挺有希望,但价格将是它成功的一个主要因素。
|
||||
|
||||
**总结**
|
||||
### 总结
|
||||
|
||||
CutiePi 并不是第一个使用[像树莓派这样的单板计算机][9]来制作平板的项目。我们有即将推出的 [PineTab][10],它基于 Pine64 单板电脑。Pine 还有一种笔记本电脑,名为 [Pinebook][11]。
|
||||
|
||||
@ -63,7 +63,7 @@ via: https://itsfoss.com/cutiepi-open-source-tab/
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][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,212 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (LuuMing)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-11427-1.html)
|
||||
[#]: subject: (How to compile a Linux kernel in the 21st century)
|
||||
[#]: via: (https://opensource.com/article/19/8/linux-kernel-21st-century)
|
||||
[#]: author: (Seth Kenlon https://opensource.com/users/seth)
|
||||
|
||||
在 21 世纪该怎样编译 Linux 内核
|
||||
======
|
||||
|
||||
> 也许你并不需要编译 Linux 内核,但你能通过这篇教程快速上手。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/201910/06/113927vrs6rurljyuza8cy.jpg)
|
||||
|
||||
在计算机世界里,<ruby>内核<rt>kernel</rt></ruby>是处理硬件与一般系统之间通信的<ruby>低阶软件<rt>low-level software</rt></ruby>。除过一些烧录进计算机主板的初始固件,当你启动计算机时,内核让系统意识到它有一个硬盘驱动器、屏幕、键盘以及网卡。分配给每个部件相等时间(或多或少)使得图像、音频、文件系统和网络可以流畅甚至并行地运行。
|
||||
|
||||
然而,对于硬件的需求是源源不断的,随着发布的硬件越多,内核就必须纳入更多代码来保证那些硬件正常工作。得到具体的数字很困难,但是 Linux 内核无疑是硬件兼容性方面的顶级内核之一。Linux 操作着无数的计算机和移动电话、工业用途和爱好者使用的板级嵌入式系统(SoC)、RAID 卡、缝纫机等等。
|
||||
|
||||
回到 20 世纪(甚至是 21 世纪初期),对于 Linux 用户来说,在刚买到新的硬件后就需要下载最新的内核代码并编译安装才能使用这是不可理喻的。而现在你也很难见到 Linux 用户为了好玩而编译内核或通过高度专业化定制的硬件的方式赚钱。现在,通常已经不需要再编译 Linux 内核了。
|
||||
|
||||
这里列出了一些原因以及快速编译内核的教程。
|
||||
|
||||
### 更新当前的内核
|
||||
|
||||
无论你买了配备新显卡或 Wifi 芯片集的新品牌电脑还是给家里配备一个新的打印机,你的操作系统(称为 GNU+Linux 或 Linux,它也是该内核的名字)需要一个驱动程序来打开新部件(显卡、芯片集、打印机和其他任何东西)的信道。有时候当你插入某些新的设备时而你的电脑表示发现了它,这具有一定的欺骗性。别被骗到了,有时候那就够了,但更多的情况是你的操作系统仅仅是使用了通用的协议检测到安装了新的设备。
|
||||
|
||||
例如,你的计算机也许能够鉴别出新的网络打印机,但有时候那仅仅是因为打印机的网卡被设计成为了获得 DHCP 地址而在网络上标识自己。它并不意味着你的计算机知道如何发送文档给打印机进行打印。事实上,你可以认为计算机甚至不“知道”那台设备是一个打印机。它也许仅仅是显示网络有个设备在一个特定的地址上,并且该设备以一系列字符 “p-r-i-n-t-e-r” 标识自己而已。人类语言的便利性对于计算机毫无意义。计算机需要的是一个驱动程序。
|
||||
|
||||
内核开发者、硬件制造商、技术支持和爱好者都知道新的硬件会不断地发布。它们大多数都会贡献驱动程序,直接提交给内核开发团队以包含在 Linux 中。例如,英伟达显卡驱动程序通常都会写入 [Nouveau][2] 内核模块中,并且因为英伟达显卡很常用,它的代码都包含在任一个日常使用的发行版内核中(例如当下载 [Fedora][3] 或 [Ubuntu][4] 得到的内核)。英伟达也有不常用的地方,例如嵌入式系统中 Nouveau 模块通常被移除。对其他设备来说也有类似的模块:打印机得益于 [Foomatic][5] 和 [CUPS][6],无线网卡有 [b43、ath9k、wl][7] 模块等等。
|
||||
|
||||
发行版往往会在它们 Linux 内核的构建中包含尽可能多合理的驱动程序,因为他们想让你在接入新设备时不用安装驱动程序能够立即使用。对于大多数情况来说就是这样的,尤其是现在很多设备厂商都在资助自己售卖硬件的 Linux 驱动程序开发,并且直接将这些驱动程序提交给内核团队以用在通常的发行版上。
|
||||
|
||||
有时候,或许你正在运行六个月之前安装的内核,并配备了上周刚刚上市令人兴奋的新设备。在这种情况下,你的内核也许没有那款设备的驱动程序。好消息是经常会出现那款设备的驱动程序已经存在于最近版本的内核中,意味着你只要更新运行的内核就可以了。
|
||||
|
||||
通常,这些都是通过安装包管理软件完成的。例如在 RHEL、CentOS 和 Fedora 上:
|
||||
|
||||
```
|
||||
$ sudo dnf update kernel
|
||||
```
|
||||
|
||||
在 Debian 和 Ubuntu 上,首先获取你当前内核的版本:
|
||||
|
||||
```
|
||||
$ uname -r
|
||||
4.4.186
|
||||
```
|
||||
|
||||
搜索新的版本:
|
||||
|
||||
```
|
||||
$ sudo apt update
|
||||
$ sudo apt search linux-image
|
||||
```
|
||||
|
||||
安装找到的最新版本。在这个例子中,最新的版本是 5.2.4:
|
||||
|
||||
```
|
||||
$ sudo apt install linux-image-5.2.4
|
||||
```
|
||||
|
||||
内核更新后,你必须 [reboot][8] (除非你使用 kpatch 或 kgraft)。这时,如果你需要的设备驱动程序包含在最新的内核中,你的硬件就会正常工作。
|
||||
|
||||
### 安装内核模块
|
||||
|
||||
有时候一个发行版没有预计到用户会使用某个设备(或者该设备的驱动程序至少不足以包含在 Linux 内核中)。Linux 对于驱动程序采用模块化方式,因此尽管驱动程序没有编译进内核,但发行版可以推送单独的驱动程序包让内核去加载。尽管有些复杂但是非常有用,尤其是当驱动程序没有包含进内核中而是在引导过程中加载,或是内核中的驱动程序相比模块化的驱动程序过期时。第一个问题可以用 “initrd” 解决(初始化 RAM 磁盘),这一点超出了本文的讨论范围,第二点通过 “kmod” 系统解决。
|
||||
|
||||
kmod 系统保证了当内核更新后,所有与之安装的模块化驱动程序也得到更新。如果你手动安装一个驱动程序,你就体验不到 kmod 提供的自动化,因此只要能用 kmod 安装包,就应该选择它。例如,尽管英伟达驱动程序以 Nouveau 模块构建在内核中,但官方的驱动程序仅由英伟达发布。你可以去网站上手动安装英伟达旗下的驱动程序,下载 “.run” 文件,并运行提供的 shell 脚本,但在安装了新的内核之后你必须重复相同的过程,因为没有任何东西告诉包管理软件你手动安装了一个内核驱动程序。英伟达驱动着你的显卡,手动更新英伟达驱动程序通常意味着你需要通过终端来执行更新,因为没有显卡驱动程序将无法显示。
|
||||
|
||||
![Nvidia configuration application][9]
|
||||
|
||||
然而,如果你通过 kmod 包安装英伟达驱动程序,更新你的内核也会更新你的英伟达驱动程序。在 Fedora 和相关的发行版中:
|
||||
|
||||
```
|
||||
$ sudo dnf install kmod-nvidia
|
||||
```
|
||||
|
||||
在 Debian 和相关发行版上:
|
||||
|
||||
```
|
||||
$ sudo apt update
|
||||
$ sudo apt install nvidia-kernel-common nvidia-kernel-dkms nvidia-glx nvidia-xconfig nvidia-settings nvidia-vdpau-driver vdpau-va-driver
|
||||
```
|
||||
|
||||
这仅仅是一个例子,但是如果你真的要安装英伟达驱动程序,你也必须屏蔽掉 Nouveau 驱动程序。参考你使用发行版的文档获取最佳的步骤吧。
|
||||
|
||||
### 下载并安装驱动程序
|
||||
|
||||
不是所有的东西都包含在内核中,也不是所有的东西都可以作为内核模块使用。在某些情况下,你需要下载一个由供应商编写并绑定好的特殊驱动程序,还有一些情况,你有驱动程序,但是没有配置驱动程序的前端界面。
|
||||
|
||||
有两个常见的例子是 HP 打印机和 [Wacom][10] 数位板。如果你有一台 HP 打印机,你可能有能够和打印机通信的通用的驱动程序,甚至能够打印出东西。但是通用的驱动程序却不能为特定型号的打印机提供定制化的选项,例如双面打印、校对、纸盒选择等等。[HPLIP][11](HP Linux 成像和打印系统)提供了选项来进行任务管理、调整打印设置、选择可用的纸盒等等。
|
||||
|
||||
HPLIP 通常包含在包管理软件中;只要搜索“hplip”就行了。
|
||||
|
||||
![HPLIP in action][12]
|
||||
|
||||
同样的,电子艺术家主要使用的数位板 Wacom 的驱动程序通常也包含在内核中,但是例如调整压感和按键功能等设置只能通过默认包含在 GNOME 的图形控制面板访问。但也可以作为 KDE 上额外的程序包“kde-config-tablet”来访问。
|
||||
|
||||
这里也有几个类似的个别例子,例如内核中没有驱动程序,但是以 RPM 或 DEB 文件提供了可供下载并且通过包管理软件安装的 kmod 版本的驱动程序。
|
||||
|
||||
### 打上补丁并编译你的内核
|
||||
|
||||
即使在 21 世纪的未来主义乌托邦里,仍有厂商不够了解开源,没有提供可安装的驱动程序。有时候,一些公司为驱动程序提供开源代码,而需要你下载代码、修补内核、编译并手动安装。
|
||||
|
||||
这种发布方式和在 kmod 系统之外安装打包的驱动程序拥有同样的缺点:对内核的更新会破坏驱动程序,因为每次更换新的内核时都必须手动将其重新集成到内核中。
|
||||
|
||||
令人高兴的是,这种事情变得少见了,因为 Linux 内核团队在呼吁公司们与他们交流方面做得很好,并且公司们最终接受了开源不会很快消失的事实。但仍有新奇的或高度专业的设备仅提供了内核补丁。
|
||||
|
||||
官方上,对于你如何编译内核以使包管理器参与到升级系统如此重要的部分中,发行版有特定的习惯。这里有太多的包管理器,所以无法一一涵盖。举一个例子,当你使用 Fedora 上的工具例如 `rpmdev` 或 `build-essential`,Debian 上的 `devscripts`。
|
||||
|
||||
首先,像通常那样,找到你正在运行内核的版本:
|
||||
|
||||
```
|
||||
$ uname -r
|
||||
```
|
||||
|
||||
在大多数情况下,如果你还没有升级过内核那么可以试试升级一下内核。搞定之后,也许你的问题就会在最新发布的内核中解决。如果你尝试后发现不起作用,那么你应该下载正在运行内核的源码。大多数发行版提供了特定的命令来完成这件事,但是手动操作的话,可以在 [kernel.org][13] 上找到它的源代码。
|
||||
|
||||
你必须下载内核所需的任何补丁。有时候,这些补丁对应具体的内核版本,因此请谨慎选择。
|
||||
|
||||
通常,或至少在人们习惯于编译内核的那时,都是拿到源代码并对 `/usr/src/linux` 打上补丁。
|
||||
|
||||
解压内核源码并打上需要的补丁:
|
||||
|
||||
```
|
||||
$ cd /usr/src/linux
|
||||
$ bzip2 --decompress linux-5.2.4.tar.bz2
|
||||
$ cd linux-5.2.4
|
||||
$ bzip2 -d ../patch*bz2
|
||||
```
|
||||
|
||||
补丁文件也许包含如何使用的教程,但通常它们都设计成在内核源码树的顶层可用来执行。
|
||||
|
||||
```
|
||||
$ patch -p1 < patch*example.patch
|
||||
```
|
||||
|
||||
当内核代码打上补丁后,你可以继续使用旧的配置来对打了补丁的内核进行配置。
|
||||
|
||||
```
|
||||
$ make oldconfig
|
||||
```
|
||||
|
||||
`make oldconfig` 命令有两个作用:它继承了当前的内核配置,并且允许你配置补丁带来的新的选项。
|
||||
|
||||
你或许需要运行 `make menuconfig` 命令,它启动了一个基于 ncurses 的菜单界面,列出了新的内核所有可能的选项。整个菜单可能看不过来,但是它是以旧的内核配置为基础的,你可以遍历菜单并且禁用掉你没有或不需要的硬件模块。另外,如果你知道自己有一些硬件没有包含在当前的配置中,你可以选择构建它,当作模块或者直接嵌入内核中。理论上,这些并不是必要的,因为你可以猜想,当前的内核运行良好只是缺少了补丁,当使用补丁的时候可能已经激活了所有设备所必要的选项。
|
||||
|
||||
下一步,编译内核和它的模块:
|
||||
|
||||
```
|
||||
$ make bzImage
|
||||
$ make modules
|
||||
```
|
||||
|
||||
这会产生一个叫作 `vmlinuz` 的文件,它是你的可引导内核的压缩版本。保存旧的版本并在 `/boot` 文件夹下替换为新的。
|
||||
|
||||
```
|
||||
$ sudo mv /boot/vmlinuz /boot/vmlinuz.nopatch
|
||||
$ sudo cat arch/x86_64/boot/bzImage > /boot/vmlinuz
|
||||
$ sudo mv /boot/System.map /boot/System.map.stock
|
||||
$ sudo cp System.map /boot/System.map
|
||||
```
|
||||
|
||||
到目前为止,你已经打上了补丁并且编译了内核和它的模块,你安装了内核,但你并没有安装任何模块。那就是最后的步骤:
|
||||
|
||||
```
|
||||
$ sudo make modules_install
|
||||
```
|
||||
|
||||
新的内核已经就位,并且它的模块也已经安装。
|
||||
|
||||
最后一步是更新你的引导程序,为了让你的计算机在加载 Linux 内核之前知道它的位置。GRUB 引导程序使这一过程变得相当简单:
|
||||
|
||||
```
|
||||
$ sudo grub2-mkconfig
|
||||
```
|
||||
|
||||
### 现实生活中的编译
|
||||
|
||||
当然,现在没有人手动执行这些命令。相反的,参考你的发行版,寻找发行版维护人员使用的开发者工具集修改内核的说明。这些工具集可能会创建一个集成所有补丁的可安装软件包,告诉你的包管理器来升级并更新你的引导程序。
|
||||
|
||||
### 内核
|
||||
|
||||
操作系统和内核都是玄学,但要理解构成它们的组件并不难。下一次你看到某个技术无法应用在 Linux 上时,深呼吸,调查可用的驱动程序,寻找一条捷径。Linux 比以前简单多了——包括内核。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/8/linux-kernel-21st-century
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[LuMing](https://github.com/LuuMing)
|
||||
校对:[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/migration_innovation_computer_software.png?itok=VCFLtd0q (and old computer and a new computer, representing migration to new software or hardware)
|
||||
[2]: https://nouveau.freedesktop.org/wiki/
|
||||
[3]: http://fedoraproject.org
|
||||
[4]: http://ubuntu.com
|
||||
[5]: https://wiki.linuxfoundation.org/openprinting/database/foomatic
|
||||
[6]: https://www.cups.org/
|
||||
[7]: https://wireless.wiki.kernel.org/en/users/drivers
|
||||
[8]: https://opensource.com/article/19/7/reboot-linux
|
||||
[9]: https://opensource.com/sites/default/files/uploads/nvidia.jpg (Nvidia configuration application)
|
||||
[10]: https://linuxwacom.github.io
|
||||
[11]: https://developers.hp.com/hp-linux-imaging-and-printing
|
||||
[12]: https://opensource.com/sites/default/files/uploads/hplip.jpg (HPLIP in action)
|
||||
[13]: https://www.kernel.org/
|
131
published/20190826 Introduction to the Linux chown command.md
Normal file
131
published/20190826 Introduction to the Linux chown command.md
Normal file
@ -0,0 +1,131 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (wxy)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-11416-1.html)
|
||||
[#]: subject: (Introduction to the Linux chown command)
|
||||
[#]: via: (https://opensource.com/article/19/8/linux-chown-command)
|
||||
[#]: author: (Alan Formy-Duval https://opensource.com/users/alanfdoss)
|
||||
|
||||
chown 命令简介
|
||||
======
|
||||
|
||||
> 学习如何使用 chown 命令更改文件或目录的所有权。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/201910/03/000014mfrxrxi5rej75mjs.jpg)
|
||||
|
||||
Linux 系统上的每个文件和目录均由某个人拥有,拥有者可以完全控制更改或删除他们拥有的文件。除了有一个*拥有用户*外,文件还有一个*拥有组*。
|
||||
|
||||
你可以使用 `ls -l` 命令查看文件的所有权:
|
||||
|
||||
```
|
||||
[pablo@workstation Downloads]$ ls -l
|
||||
total 2454732
|
||||
-rw-r--r--. 1 pablo pablo 1934753792 Jul 25 18:49 Fedora-Workstation-Live-x86_64-30-1.2.iso
|
||||
```
|
||||
|
||||
该输出的第三和第四列是拥有用户和组,它们一起称为*所有权*。上面的那个 ISO 文件这两者都是 `pablo`。
|
||||
|
||||
所有权设置由 [chmod 命令][2]进行设置,控制允许谁可以执行读取、写入或运行的操作。你可以使用 `chown` 命令更改所有权(一个或两者)。
|
||||
|
||||
所有权经常需要更改。文件和目录一直存在在系统中,但用户不断变来变去。当文件和目录在系统中移动时,或从一个系统移动到另一个系统时,所有权也可能需要更改。
|
||||
|
||||
我的主目录中的文件和目录的所有权是我的用户和我的主要组,以 `user:group` 的形式表示。假设 Susan 正在管理 Delta 组,该组需要编辑一个名为 `mynotes` 的文件。你可以使用 `chown` 命令将该文件的用户更改为 `susan`,组更改为 `delta`:
|
||||
|
||||
```
|
||||
$ chown susan:delta mynotes
|
||||
ls -l
|
||||
-rw-rw-r--. 1 susan delta 0 Aug 1 12:04 mynotes
|
||||
```
|
||||
|
||||
当给该文件设置好了 Delta 组时,它可以分配回给我:
|
||||
|
||||
```
|
||||
$ chown alan mynotes
|
||||
$ ls -l mynotes
|
||||
-rw-rw-r--. 1 alan delta 0 Aug 1 12:04 mynotes
|
||||
```
|
||||
|
||||
给用户后添加冒号(`:`),可以将用户和组都分配回给我:
|
||||
|
||||
```
|
||||
$ chown alan: mynotes
|
||||
$ ls -l mynotes
|
||||
-rw-rw-r--. 1 alan alan 0 Aug 1 12:04 mynotes
|
||||
```
|
||||
|
||||
通过在组前面加一个冒号,可以只更改组。现在,`gamma` 组的成员可以编辑该文件:
|
||||
|
||||
```
|
||||
$ chown :gamma mynotes
|
||||
$ ls -l
|
||||
-rw-rw-r--. 1 alan gamma 0 Aug 1 12:04 mynotes
|
||||
```
|
||||
|
||||
`chown` 的一些附加参数都能用在命令行和脚本中。就像许多其他 Linux 命令一样,`chown` 有一个递归参数(`-R`),它告诉该命令进入目录以对其中的所有文件进行操作。没有 `-R` 标志,你就只能更改文件夹的权限,而不会更改其中的文件。在此示例中,假定目的是更改目录及其所有内容的权限。这里我添加了 `-v`(详细)参数,以便 `chown` 报告其工作情况:
|
||||
|
||||
```
|
||||
$ ls -l . conf
|
||||
.:
|
||||
drwxrwxr-x 2 alan alan 4096 Aug 5 15:33 conf
|
||||
|
||||
conf:
|
||||
-rw-rw-r-- 1 alan alan 0 Aug 5 15:33 conf.xml
|
||||
|
||||
$ chown -vR susan:delta conf
|
||||
changed ownership of 'conf/conf.xml' from alan:alan to susan:delta
|
||||
changed ownership of 'conf' from alan:alan to susan:delta
|
||||
```
|
||||
|
||||
根据你的角色,你可能需要使用 `sudo` 来更改文件的所有权。
|
||||
|
||||
在更改文件的所有权以匹配特定配置时,或者在你不知道所有权时(例如运行脚本时),可以使用参考文件(`--reference=RFILE`)。例如,你可以复制另一个文件(`RFILE`,称为参考文件)的用户和组,以撤消上面所做的更改。回想一下,点(`.`)表示当前的工作目录。
|
||||
|
||||
```
|
||||
$ chown -vR --reference=. conf
|
||||
```
|
||||
|
||||
### 报告更改
|
||||
|
||||
大多数命令都有用于控制其输出的参数。最常见的是 `-v`(`--verbose`)以启用详细信息,但是 `chown` 还具有 `-c`(`--changes`)参数来指示 `chown` 仅在进行更改时报告。`chown` 还会报告其他情况,例如不允许进行的操作。
|
||||
|
||||
参数 `-f`(`--silent`、`--quiet`)用于禁止显示大多数错误消息。在下一节中,我将使用 `-f` 和 `-c`,以便仅显示实际更改。
|
||||
|
||||
### 保持根目录
|
||||
|
||||
Linux 文件系统的根目录(`/`)应该受到高度重视。如果命令在此层级上犯了一个错误,则后果可能会使系统完全无用。尤其是在运行一个会递归修改甚至删除的命令时。`chown` 命令具有一个可用于保护和保持根目录的参数,它是 `--preserve-root`。如果在根目录中将此参数和递归一起使用,那么什么也不会发生,而是会出现一条消息:
|
||||
|
||||
```
|
||||
$ chown -cfR --preserve-root alan /
|
||||
chown: it is dangerous to operate recursively on '/'
|
||||
chown: use --no-preserve-root to override this failsafe
|
||||
```
|
||||
|
||||
如果不与 `--recursive` 结合使用,则该选项无效。但是,如果该命令由 `root` 用户运行,则 `/` 本身的权限将被更改,但其下的其他文件或目录的权限则不会更改:
|
||||
|
||||
```
|
||||
$ chown -c --preserve-root alan /
|
||||
chown: changing ownership of '/': Operation not permitted
|
||||
[root@localhost /]# chown -c --preserve-root alan /
|
||||
changed ownership of '/' from root to alan
|
||||
```
|
||||
|
||||
### 所有权即安全
|
||||
|
||||
文件和目录所有权是良好的信息安全性的一部分,因此,偶尔检查和维护文件所有权以防止不必要的访问非常重要。`chown` 命令是 Linux 安全命令集中最常见和最重要的命令之一。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/8/linux-chown-command
|
||||
|
||||
作者:[Alan Formy-Duval][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://opensource.com/users/alanfdoss
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/yearbook-haff-rx-linux-file-lead_0.png?itok=-i0NNfDC (Hand putting a Linux file folder into a drawer)
|
||||
[2]: https://opensource.com/article/19/8/introduction-linux-chmod-command
|
@ -0,0 +1,386 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (heguangzhi)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-11411-1.html)
|
||||
[#]: subject: (Best Linux Distributions For Everyone in 2019)
|
||||
[#]: via: (https://itsfoss.com/best-linux-distributions/)
|
||||
[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
|
||||
|
||||
2019 年最好的 Linux 发行版
|
||||
======
|
||||
|
||||
> 哪个是最好的 Linux 发行版呢?这个问题是没有明确的答案的。这就是为什么我们按各种分类汇编了这个最佳 Linux 列表的原因。
|
||||
|
||||
有许多 Linux 发行版,我甚至想不出一个确切的数量,因为你会发现很多不同的 Linux 发行版。
|
||||
|
||||
其中有些只是另外一个的复制品,而有些往往是独一无二的。这虽然有点混乱——但这也是 Linux 的优点。
|
||||
|
||||
不用担心,尽管有成千上万的发行版,在这篇文章中,我已经列出了目前最好的 Linux 发行版。当然,这个列表是主观的。但是,在这里,我们试图对发行版进行分类——每个发行版本都有自己的特点的。
|
||||
|
||||
* 面向初学者的 Linux 用户的最佳发行版
|
||||
* 最佳 Linux 服务器发行版
|
||||
* 可以在旧计算机上运行的最佳 Linux 发行版
|
||||
* 面向高级 Linux 用户的最佳发行版
|
||||
* 最佳常青树 Linux 发行版
|
||||
|
||||
**注:** 该列表没有特定的排名顺序。
|
||||
|
||||
### 面向初学者的最佳 Linux 发行版
|
||||
|
||||
在这个分类中,我们的目标是列出开箱即用的易用发行版。你不需要深度学习,你可以在安装后马上开始使用,不需要知道任何命令或技巧。
|
||||
|
||||
#### Ubuntu
|
||||
|
||||
![][6]
|
||||
|
||||
Ubuntu 无疑是最流行的 Linux 发行版之一。你甚至可以发现它已经预装在很多笔记本电脑上了。
|
||||
|
||||
用户界面很容易适应。如果你愿意,你可以根据自己的要求轻松定制它的外观。无论哪种情况,你都可以选择安装一个主题。你可以从了解更多关于[如何在 Ubuntu 安装主题的][7]的信息来起步。
|
||||
|
||||
除了它本身提供的功能外,你会发现一个巨大的 Ubuntu 用户在线社区。因此,如果你有问题——可以去任何论坛(或版块)寻求帮助。如果你想直接寻找解决方案,你应该看看我们对 [Ubuntu][8] 的报道(我们有很多关于 Ubuntu 的教程和建议)。
|
||||
|
||||
- [Ubuntu][9]
|
||||
|
||||
#### Linux Mint
|
||||
|
||||
![][10]
|
||||
|
||||
Linux Mint Cinnamon 是另一个受初学者欢迎的 Linux 发行版。默认的 Cinnamon 桌面类似于 Windows XP,这就是为什么当 Windows XP 停止维护时许多用户选择它的原因。
|
||||
|
||||
Linux Mint 基于 Ubuntu,因此它具有适用于 Ubuntu 的所有应用程序。简单易用是它成为 Linux 新用户首选的原因。
|
||||
|
||||
- [Linux Mint][11]
|
||||
|
||||
#### elementary OS
|
||||
|
||||
![][12]
|
||||
|
||||
elementary OS 是我用过的最漂亮的 Linux 发行版之一。用户界面类似于苹果操作系统——所以如果你已经使用了苹果系统,则很容易适应。
|
||||
|
||||
该发行版基于 Ubuntu,致力于提供一个用户友好的 Linux 环境,该环境在考虑性能的同时尽可能美观。如果你选择安装 elementary OS,这份[在安装 elementary OS 后要做的 11 件事的清单][13]会派上用场。
|
||||
|
||||
- [elementary OS][14]
|
||||
|
||||
#### MX Linux
|
||||
|
||||
![][15]
|
||||
|
||||
大约一年前,MX Linux 成为众人瞩目的焦点。现在(在发表这篇文章的时候),它是 [DistroWatch.com][16] 上最受欢迎的 Linux 发行版。如果你还没有使用过它,那么当你开始使用它时,你会感到惊讶。
|
||||
|
||||
与 Ubuntu 不同,MX Linux 是一个基于 Debian 的日益流行的发行版,采用 Xfce 作为其桌面环境。除了无与伦比的稳定性之外,它还配备了许多图形用户界面工具,这使得任何习惯了 Windows/Mac 的用户易于使用它。
|
||||
|
||||
此外,软件包管理器还专门针对一键安装进行了量身定制。你甚至可以搜索 [Flatpak][18] 软件包并立即安装它(默认情况下,Flathub 在软件包管理器中是可用的来源之一)。
|
||||
|
||||
- [MX Linux][19]
|
||||
|
||||
#### Zorin OS
|
||||
|
||||
![][20]
|
||||
|
||||
Zorin OS 是又一个基于 Ubuntu 的发行版,它又是桌面上最漂亮、最直观的操作系统之一。尤其是在[Zorin OS 15 发布][21]之后——我绝对会向没有任何 Linux 经验的用户推荐它。它也引入了许多基于图形用户界面的应用程序。
|
||||
|
||||
你也可以将其安装在旧电脑上,但是,请确保选择“Lite”版本。此外,你还有“Core”、“Education”和 “Ultimate”版本可以选择。你可以选择免费安装 Core 版,但是如果你想支持开发人员并帮助改进 Zorin,请考虑获得 Ultimate 版。
|
||||
|
||||
Zorin OS 是由两名爱尔兰的青少年创建的。你可以[在这里阅读他们的故事][22]。
|
||||
|
||||
- [Zorin OS][23]
|
||||
|
||||
#### Pop!_OS
|
||||
|
||||
![](https://i0.wp.com/itsfoss.com/wp-content/uploads/2018/04/pop-1.jpg?w=800&ssl=1)
|
||||
|
||||
Sytem76 的 Pop!_OS 是开发人员或计算机科学专业人员的理想选择。当然,不仅限于编码人员,如果你刚开始使用 Linux,这也是一个很好的选择。它基于 Ubuntu,但是其 UI 感觉更加直观和流畅。除了 UI 外,它还强制执行全盘加密。
|
||||
|
||||
你可以通过文章下面的评论看到,我们的许多读者似乎都喜欢(并坚持使用)它。如果你对此感到好奇,也应该查看一下我们关于 Phillip Prado 的 [Pop!_OS 的动手实践](https://itsfoss.com/pop-os-linux-review/)的文章。
|
||||
|
||||
(LCTT 译注:这段推荐是原文后来补充的,因为原文下面很多人在评论推荐。)
|
||||
|
||||
- [Pop!_OS](https://system76.com/pop)
|
||||
|
||||
#### 其他选择
|
||||
|
||||
[深度操作系统][24] 和其他的 Ubuntu 变种(如 Kubuntu、Xubuntu)也是初学者的首选。如果你想寻求更多的选择,你可以看看。(LCTT 译注:我知道你们肯定对将深度操作系统列入其它不满意——这个锅归原作者。)
|
||||
|
||||
如果你想要挑战自己,你可以试试 Ubuntu 之外的 Fedora —— 但是一定要看看我们关于 [Ubuntu 和 Fedora 对比][25]的文章,从桌面的角度做出更好的选择。
|
||||
|
||||
### 最好的服务器发行版
|
||||
|
||||
对于服务器来说,选择 Linux 发行版取决于稳定性、性能和企业级支持。如果你只是尝试,则可以尝试任何你想要的发行版。
|
||||
|
||||
但是,如果你要为 Web 服务器或任何重要的组件安装它,你应该看看我们的一些建议。
|
||||
|
||||
#### Ubuntu 服务器
|
||||
|
||||
根据你的需要,Ubuntu 为你的服务器提供了不同的选项。如果你正在寻找运行在 AWS、Azure、谷歌云平台等平台上的优化解决方案,[Ubuntu Cloud][26] 是一个很好的选择。
|
||||
|
||||
无论是哪种情况,你都可以选择 Ubuntu 服务器包,并将其安装在你的服务器上。然而,Ubuntu 在云上部署时也是最受欢迎的 Linux 发行版(根据数字判断——[来源1][27]、[来源2][28])。
|
||||
|
||||
请注意,除非你有特殊要求,我们建议你选择 LTS 版。
|
||||
|
||||
- [Ubuntu Server][29]
|
||||
|
||||
#### 红帽企业版 Linux(RHEL)
|
||||
|
||||
红帽企业版 Linux(RHEL)是面向企业和组织的顶级 Linux 平台。如果我们按数字来看,红帽可能不是服务器领域最受欢迎的。但是,有相当一部分企业用户依赖于 RHEL (比如联想)。
|
||||
|
||||
从技术上讲,Fedora 和红帽企业版是相关联的。无论红帽要支持什么——在出现在 RHEL 之前,都要在 Fedora 上进行测试。我不是定制需求的服务器发行版专家,所以你一定要查看他们的[官方文档][30]以了解它是否适合你。
|
||||
|
||||
- [RHEL][31]
|
||||
|
||||
#### SUSE Linux 企业服务器(SLES)
|
||||
|
||||
![][32]
|
||||
|
||||
别担心,不要把这和 OpenSUSE 混淆。一切都以一个共同的品牌 “SUSE” 命名 —— 但是 OpenSUSE 是一个开源发行版,目标是社区,并且由社区维护。
|
||||
|
||||
SUSE Linux 企业服务器(SLES)是基于云的服务器最受欢迎的解决方案之一。为了获得管理开源解决方案的优先支持和帮助,你必须选择订阅。
|
||||
|
||||
- [SLES][33]
|
||||
|
||||
#### CentOS
|
||||
|
||||
![][34]
|
||||
|
||||
正如我提到的,对于 RHEL 你需要订阅。而 CentOS 更像是 RHEL 的社区版,因为它是从 RHEL 的源代码中派生出来的。而且,它是开源的,也是免费的。尽管与过去几年相比,使用 CentOS 的托管提供商数量明显减少,但这仍然是一个很好的选择。
|
||||
|
||||
CentOS 可能没有加载最新的软件包,但它被认为是最稳定的发行版之一,你可以在各种云平台上找到 CentOS 镜像。如果没有,你可以选择 CentOS 提供的自托管镜像。
|
||||
|
||||
- [CentOS][35]
|
||||
|
||||
#### 其他选择
|
||||
|
||||
你也可以尝试 [Fedora Server][36]或[Debian][37]作为上述发行版的替代品。
|
||||
|
||||
### 旧电脑的最佳 Linux 发行版
|
||||
|
||||
如果你有一台旧电脑,或者你真的不需要升级你的系统,你仍然可以尝试一些最好的 Linux 发行版。
|
||||
|
||||
我们已经详细讨论了一些[最好的轻量级 Linux 发行版][42]。在这里,我们将只提到那些真正突出的东西(以及一些新的补充)。
|
||||
|
||||
#### Puppy Linux
|
||||
|
||||
![][43]
|
||||
|
||||
Puppy Linux 实际上是最小的发行版本之一。刚开始使用 Linux 时,我的朋友建议我尝试一下 Puppy Linux,因为它可以轻松地在较旧的硬件配置上运行。
|
||||
|
||||
如果你想在你的旧电脑上享受一次爽快的体验,那就值得去看看。多年来,随着一些新的有用特性的增加,用户体验得到了改善。
|
||||
|
||||
- [Puppy Linux][44]
|
||||
|
||||
#### Solus Budgie
|
||||
|
||||
![][45]
|
||||
|
||||
在最近的一个主要版本——[Solus 4 Fortitude][46] 之后,它是一个令人印象深刻的轻量级桌面操作系统。你可以选择像 GNOME 或 MATE 这样的桌面环境。然而,Solus Budgie 恰好是我的最爱之一,它是一款适合初学者的功能齐全的 Linux发行版,同时对系统资源要求很少。
|
||||
|
||||
- [Solus][47]
|
||||
|
||||
#### Bodhi
|
||||
|
||||
![][48]
|
||||
|
||||
Bodhi Linux 构建于 Ubuntu 之上。然而,与Ubuntu不同,它在较旧的配置上运行良好。
|
||||
|
||||
这个发行版的主要亮点是它的 [Moksha 桌面][49](这是 Enlightenment 17 桌面的延续)。用户体验直观且反应极快。即使我个人不用它,你也应该在你的旧系统上试一试。
|
||||
|
||||
- [Bodhi Linux][50]
|
||||
|
||||
#### antiX
|
||||
|
||||
![][51]
|
||||
|
||||
antiX 部分担起了 MX Linux 的责任,它是一个轻量级的 Linux 发行版,为新的或旧的计算机量身定制。其用户界面并不令人印象深刻——但它可以像预期的那样工作。
|
||||
|
||||
它基于 Debian,可以作为一个现场版 CD 发行版使用,而不需要安装它。antiX 还提供现场版引导加载程序。与其他发行版相比,你可以保存设置,这样就不会在每次重新启动时丢失设置。不仅如此,你还可以通过其“持久保留”功能将更改保存到根目录中。
|
||||
|
||||
因此,如果你正在寻找一个可以在旧硬件上提供快速用户体验的现场版 USB 发行版,antiX 是一个不错的选择。
|
||||
|
||||
- [antiX][52]
|
||||
|
||||
#### Sparky Linux
|
||||
|
||||
![][53]
|
||||
|
||||
Sparky Linux 基于 Debian,它是理想的低端系统 Linux 发行版。伴随着超快的用户体验,Sparky Linux 为不同的用户提供了几个特殊版本(或变种)。
|
||||
|
||||
例如,它提供了针对一组用户的稳定版本(和变种)和滚动版本。Sparky Linux GameOver 版非常受游戏玩家欢迎,因为它包含了一堆预装的游戏。你可以查看我们的[最佳 Linux 游戏发行版][54] —— 如果你也想在你的系统上玩游戏。
|
||||
|
||||
#### 其他选择
|
||||
|
||||
你也可以尝试 [Linux Lite][55]、[Lubuntu][56]、[Peppermint][57] 等轻量级 Linux 发行版。
|
||||
|
||||
### 面向高级用户的最佳 Linux 发行版
|
||||
|
||||
一旦你习惯了各种软件包管理器和命令来帮助你解决任何问题,你就可以开始找寻只为高级用户量身定制的 Linux 发行版。
|
||||
|
||||
当然,如果你是专业人士,你会有一套具体的要求。然而,如果你已经作为普通用户使用了一段时间——以下发行版值得一试。
|
||||
|
||||
#### Arch Linux
|
||||
|
||||
![][58]
|
||||
|
||||
Arch Linux 本身是一个简单而强大的发行版,具有陡峭的学习曲线。不像其系统,你不会一次就把所有东西都预先安装好。你必须配置系统并根据需要添加软件包。
|
||||
|
||||
此外,在安装 Arch Linux 时,必须按照一组命令来进行(没有图形用户界面)。要了解更多信息,你可以按照我们关于[如何安装 Arch Linux][59] 的指南进行操作。如果你要安装它,你还应该知道在[安装 Arch Linux 后需要做的一些基本事情][60]。这会帮助你快速入门。
|
||||
|
||||
除了多才多艺和简便性之外,值得一提的是 Arch Linux 背后的社区非常活跃。所以,如果你遇到问题,你不用担心。
|
||||
|
||||
- [Arch Linux][61]
|
||||
|
||||
#### Gentoo
|
||||
|
||||
![][62]
|
||||
|
||||
如果你知道如何编译源代码,Gentoo Linux 是你必须尝试的版本。这也是一个轻量级的发行版,但是,你需要具备必要的技术知识才能使它发挥作用。
|
||||
|
||||
当然,[官方手册][63]提供了许多你需要知道的信息。但是,如果你不确定自己在做什么——你需要花很多时间去想如何充分利用它。
|
||||
|
||||
- [Gentoo Linux][64]
|
||||
|
||||
#### Slackware
|
||||
|
||||
![][65]
|
||||
|
||||
Slackware 是仍然重要的最古老的 Linux 发行版之一。如果你愿意编译或开发软件来为自己建立一个完美的环境 —— Slackware 是一个不错的选择。
|
||||
|
||||
如果你对一些最古老的 Linux 发行版感到好奇,我们有一篇关于[最早的 Linux 发行版][66]可以去看看。
|
||||
|
||||
尽管使用它的用户/开发人员的数量已经显著减少,但对于高级用户来说,它仍然是一个极好的选择。此外,最近有个新闻是 [Slackware 有了一个 Patreon 捐赠页面][67],我们希望 Slackware 继续作为最好的 Linux 发行版之一存在。
|
||||
|
||||
- [Slackware][68]
|
||||
|
||||
### 最佳多用途 Linux 发行版
|
||||
|
||||
有些 Linux 发行版既可以作为初学者友好的桌面又可以作为高级操作系统的服务器。因此,我们考虑为这样的发行版编辑一个单独的部分。
|
||||
|
||||
如果你不同意我们的观点(或者有建议要补充),请在评论中告诉我们。我们认为,这对于每个用户都可以派上用场:
|
||||
|
||||
#### Fedora
|
||||
|
||||
![][69]
|
||||
|
||||
Fedora 提供两个独立的版本:一个用于台式机/笔记本电脑(Fedora 工作站),另一个用于服务器(Fedora 服务器)。
|
||||
|
||||
因此,如果你正在寻找一款时髦的桌面操作系统,有点学习曲线,又对用户友好,那么 Fedora 是一个选择。无论是哪种情况,如果你正在为你的服务器寻找一个 Linux 操作系统,这也是一个不错的选择。
|
||||
|
||||
- [Fedora][70]
|
||||
|
||||
#### Manjaro
|
||||
|
||||
![][71]
|
||||
|
||||
Manjaro 基于 [Arch Linux][72]。不用担心,虽然 Arch Linux 是为高级用户量身定制的,但Manjaro 让新手更容易上手。这是一个简单且对初学者友好的 Linux 发行版。用户界面足够好,并且内置了一系列有用的图形用户界面应用程序。
|
||||
|
||||
下载时,你可以为 Manjaro 选择[桌面环境][73]。就个人而言,我喜欢 Manjaro 的 KDE 桌面。
|
||||
|
||||
- [Manjaro Linux][74]
|
||||
|
||||
#### Debian
|
||||
|
||||
![][75]
|
||||
|
||||
嗯,Ubuntu 是基于 Debian 的——所以它本身是一个非常好的发行版本。Debian 是台式机和服务器的理想选择。
|
||||
|
||||
这可能不是对初学者最友好的操作系统——但你可以通过阅读[官方文档][76]轻松开始。[Debian 10 Buster][77] 的最新版本引入了许多变化和必要的改进。所以,你必须试一试!
|
||||
|
||||
### 总结
|
||||
|
||||
总的来说,这些是我们推荐你去尝试的最好的 Linux 发行版。是的,还有许多其他的 Linux 发行版值得一提,但是根据个人喜好,对每个发行版来说,取决于个人喜好,这种选择是主观的。
|
||||
|
||||
但是,我们也为 [Windows 用户][78]、[黑客和脆弱性测试人员][41]、[游戏玩家][54]、[程序员][39]和[偏重隐私者][79]提供了单独的发行版列表所以,如果你感兴趣的话请仔细阅读。
|
||||
|
||||
如果你认为我们遗漏了你最喜欢的 Linux 发行版,请在下面的评论中告诉我们你的想法,我们将更新这篇文章。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/best-linux-distributions/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[heguangzhi](https://github.com/heguangzhi)
|
||||
校对:[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/lujun9972
|
||||
[1]: tmp.NoRXbIWHkg#for-beginners
|
||||
[2]: tmp.NoRXbIWHkg#for-servers
|
||||
[3]: tmp.NoRXbIWHkg#for-old-computers
|
||||
[4]: tmp.NoRXbIWHkg#for-advanced-users
|
||||
[5]: tmp.NoRXbIWHkg#general-purpose
|
||||
[6]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/01/install-google-chrome-ubuntu-10.jpg?ssl=1
|
||||
[7]: https://itsfoss.com/install-themes-ubuntu/
|
||||
[8]: https://itsfoss.com/tag/ubuntu/
|
||||
[9]: https://ubuntu.com/download/desktop
|
||||
[10]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/08/linux-Mint-19-desktop.jpg?ssl=1
|
||||
[11]: https://www.linuxmint.com/
|
||||
[12]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/08/elementary-os-juno-feat.jpg?ssl=1
|
||||
[13]: https://itsfoss.com/things-to-do-after-installing-elementary-os-5-juno/
|
||||
[14]: https://elementary.io/
|
||||
[15]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/08/mx-linux.jpg?ssl=1
|
||||
[16]: https://distrowatch.com/
|
||||
[17]: https://en.wikipedia.org/wiki/Linux_distribution#Rolling_distributions
|
||||
[18]: https://flatpak.org/
|
||||
[19]: https://mxlinux.org/
|
||||
[20]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/08/zorin-os-15.png?ssl=1
|
||||
[21]: https://itsfoss.com/zorin-os-15-release/
|
||||
[22]: https://itsfoss.com/zorin-os-interview/
|
||||
[23]: https://zorinos.com/
|
||||
[24]: https://www.deepin.org/en/
|
||||
[25]: https://itsfoss.com/ubuntu-vs-fedora/
|
||||
[26]: https://ubuntu.com/download/cloud
|
||||
[27]: https://w3techs.com/technologies/details/os-linux/all/all
|
||||
[28]: https://thecloudmarket.com/stats
|
||||
[29]: https://ubuntu.com/download/server
|
||||
[30]: https://developers.redhat.com/products/rhel/docs-and-apis
|
||||
[31]: https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux
|
||||
[32]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/08/SUSE-Linux-Enterprise.jpg?ssl=1
|
||||
[33]: https://www.suse.com/products/server/
|
||||
[34]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/08/centos.png?ssl=1
|
||||
[35]: https://www.centos.org/
|
||||
[36]: https://getfedora.org/en/server/
|
||||
[37]: https://www.debian.org/distrib/
|
||||
[38]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/08/coding.jpg?ssl=1
|
||||
[39]: https://itsfoss.com/best-linux-distributions-progammers/
|
||||
[40]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/08/hacking.jpg?ssl=1
|
||||
[41]: https://itsfoss.com/linux-hacking-penetration-testing/
|
||||
[42]: https://itsfoss.com/lightweight-linux-beginners/
|
||||
[43]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/08/puppy-linux-bionic.jpg?ssl=1
|
||||
[44]: http://puppylinux.com/
|
||||
[45]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/solus-4-featured.jpg?resize=800%2C450&ssl=1
|
||||
[46]: https://itsfoss.com/solus-4-release/
|
||||
[47]: https://getsol.us/home/
|
||||
[48]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/08/bodhi-linux.png?fit=800%2C436&ssl=1
|
||||
[49]: http://www.bodhilinux.com/moksha-desktop/
|
||||
[50]: http://www.bodhilinux.com/
|
||||
[51]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2017/10/antix-linux-screenshot.jpg?ssl=1
|
||||
[52]: https://antixlinux.com/
|
||||
[53]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/08/sparky-linux.jpg?ssl=1
|
||||
[54]: https://itsfoss.com/linux-gaming-distributions/
|
||||
[55]: https://www.linuxliteos.com/
|
||||
[56]: https://lubuntu.me/
|
||||
[57]: https://peppermintos.com/
|
||||
[58]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/08/arch_linux_screenshot.jpg?ssl=1
|
||||
[59]: https://itsfoss.com/install-arch-linux/
|
||||
[60]: https://itsfoss.com/things-to-do-after-installing-arch-linux/
|
||||
[61]: https://www.archlinux.org
|
||||
[62]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/08/gentoo-linux.png?ssl=1
|
||||
[63]: https://wiki.gentoo.org/wiki/Handbook:Main_Page
|
||||
[64]: https://www.gentoo.org
|
||||
[65]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/08/slackware-screenshot.jpg?ssl=1
|
||||
[66]: https://itsfoss.com/earliest-linux-distros/
|
||||
[67]: https://distrowatch.com/dwres.php?resource=showheadline&story=8743
|
||||
[68]: http://www.slackware.com/
|
||||
[69]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/08/fedora-overview.png?ssl=1
|
||||
[70]: https://getfedora.org/
|
||||
[71]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/08/manjaro-gnome.jpg?ssl=1
|
||||
[72]: https://www.archlinux.org/
|
||||
[73]: https://itsfoss.com/glossary/desktop-environment/
|
||||
[74]: https://manjaro.org/
|
||||
[75]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/08/debian-screenshot.png?ssl=1
|
||||
[76]: https://www.debian.org/releases/stable/installmanual
|
||||
[77]: https://itsfoss.com/debian-10-buster/
|
||||
[78]: https://itsfoss.com/windows-like-linux-distributions/
|
||||
[79]: https://itsfoss.com/privacy-focused-linux-distributions/
|
@ -0,0 +1,386 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (heguangzhi)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-11411-1.html)
|
||||
[#]: subject: (Best Linux Distributions For Everyone in 2019)
|
||||
[#]: via: (https://itsfoss.com/best-linux-distributions/)
|
||||
[#]: author: (Ankush Das https://itsfoss.com/author/ankush/)
|
||||
|
||||
2019 年最好的 Linux 发行版
|
||||
======
|
||||
|
||||
> 哪个是最好的 Linux 发行版呢?这个问题是没有明确的答案的。这就是为什么我们按各种分类汇编了这个最佳 Linux 列表的原因。
|
||||
|
||||
有许多 Linux 发行版,我甚至想不出一个确切的数量,因为你会发现很多不同的 Linux 发行版。
|
||||
|
||||
其中有些只是另外一个的复制品,而有些往往是独一无二的。这虽然有点混乱——但这也是 Linux 的优点。
|
||||
|
||||
不用担心,尽管有成千上万的发行版,在这篇文章中,我已经列出了目前最好的 Linux 发行版。当然,这个列表是主观的。但是,在这里,我们试图对发行版进行分类——每个发行版本都有自己的特点的。
|
||||
|
||||
* 面向初学者的 Linux 用户的最佳发行版
|
||||
* 最佳 Linux 服务器发行版
|
||||
* 可以在旧计算机上运行的最佳 Linux 发行版
|
||||
* 面向高级 Linux 用户的最佳发行版
|
||||
* 最佳常青树 Linux 发行版
|
||||
|
||||
**注:** 该列表没有特定的排名顺序。
|
||||
|
||||
### 面向初学者的最佳 Linux 发行版
|
||||
|
||||
在这个分类中,我们的目标是列出开箱即用的易用发行版。你不需要深度学习,你可以在安装后马上开始使用,不需要知道任何命令或技巧。
|
||||
|
||||
#### Ubuntu
|
||||
|
||||
![][6]
|
||||
|
||||
Ubuntu 无疑是最流行的 Linux 发行版之一。你甚至可以发现它已经预装在很多笔记本电脑上了。
|
||||
|
||||
用户界面很容易适应。如果你愿意,你可以根据自己的要求轻松定制它的外观。无论哪种情况,你都可以选择安装一个主题。你可以从了解更多关于[如何在 Ubuntu 安装主题的][7]的信息来起步。
|
||||
|
||||
除了它本身提供的功能外,你会发现一个巨大的 Ubuntu 用户在线社区。因此,如果你有问题——可以去任何论坛(或版块)寻求帮助。如果你想直接寻找解决方案,你应该看看我们对 [Ubuntu][8] 的报道(我们有很多关于 Ubuntu 的教程和建议)。
|
||||
|
||||
- [Ubuntu][9]
|
||||
|
||||
#### Linux Mint
|
||||
|
||||
![][10]
|
||||
|
||||
Linux Mint Cinnamon 是另一个受初学者欢迎的 Linux 发行版。默认的 Cinnamon 桌面类似于 Windows XP,这就是为什么当 Windows XP 停止维护时许多用户选择它的原因。
|
||||
|
||||
Linux Mint 基于 Ubuntu,因此它具有适用于 Ubuntu 的所有应用程序。简单易用是它成为 Linux 新用户首选的原因。
|
||||
|
||||
- [Linux Mint][11]
|
||||
|
||||
#### elementary OS
|
||||
|
||||
![][12]
|
||||
|
||||
elementary OS 是我用过的最漂亮的 Linux 发行版之一。用户界面类似于苹果操作系统——所以如果你已经使用了苹果系统,则很容易适应。
|
||||
|
||||
该发行版基于 Ubuntu,致力于提供一个用户友好的 Linux 环境,该环境在考虑性能的同时尽可能美观。如果你选择安装 elementary OS,这份[在安装 elementary OS 后要做的 11 件事的清单][13]会派上用场。
|
||||
|
||||
- [elementary OS][14]
|
||||
|
||||
#### MX Linux
|
||||
|
||||
![][15]
|
||||
|
||||
大约一年前,MX Linux 成为众人瞩目的焦点。现在(在发表这篇文章的时候),它是 [DistroWatch.com][16] 上最受欢迎的 Linux 发行版。如果你还没有使用过它,那么当你开始使用它时,你会感到惊讶。
|
||||
|
||||
与 Ubuntu 不同,MX Linux 是一个基于 Debian 的日益流行的发行版,采用 Xfce 作为其桌面环境。除了无与伦比的稳定性之外,它还配备了许多图形用户界面工具,这使得任何习惯了 Windows/Mac 的用户易于使用它。
|
||||
|
||||
此外,软件包管理器还专门针对一键安装进行了量身定制。你甚至可以搜索 [Flatpak][18] 软件包并立即安装它(默认情况下,Flathub 在软件包管理器中是可用的来源之一)。
|
||||
|
||||
- [MX Linux][19]
|
||||
|
||||
#### Zorin OS
|
||||
|
||||
![][20]
|
||||
|
||||
Zorin OS 是又一个基于 Ubuntu 的发行版,它又是桌面上最漂亮、最直观的操作系统之一。尤其是在[Zorin OS 15 发布][21]之后——我绝对会向没有任何 Linux 经验的用户推荐它。它也引入了许多基于图形用户界面的应用程序。
|
||||
|
||||
你也可以将其安装在旧电脑上,但是,请确保选择“Lite”版本。此外,你还有“Core”、“Education”和 “Ultimate”版本可以选择。你可以选择免费安装 Core 版,但是如果你想支持开发人员并帮助改进 Zorin,请考虑获得 Ultimate 版。
|
||||
|
||||
Zorin OS 是由两名爱尔兰的青少年创建的。你可以[在这里阅读他们的故事][22]。
|
||||
|
||||
- [Zorin OS][23]
|
||||
|
||||
#### Pop!_OS
|
||||
|
||||
![](https://i0.wp.com/itsfoss.com/wp-content/uploads/2018/04/pop-1.jpg?w=800&ssl=1)
|
||||
|
||||
Sytem76 的 Pop!_OS 是开发人员或计算机科学专业人员的理想选择。当然,不仅限于编码人员,如果你刚开始使用 Linux,这也是一个很好的选择。它基于 Ubuntu,但是其 UI 感觉更加直观和流畅。除了 UI 外,它还强制执行全盘加密。
|
||||
|
||||
你可以通过文章下面的评论看到,我们的许多读者似乎都喜欢(并坚持使用)它。如果你对此感到好奇,也应该查看一下我们关于 Phillip Prado 的 [Pop!_OS 的动手实践](https://itsfoss.com/pop-os-linux-review/)的文章。
|
||||
|
||||
(LCTT 译注:这段推荐是原文后来补充的,因为原文下面很多人在评论推荐。)
|
||||
|
||||
- [Pop!_OS](https://system76.com/pop)
|
||||
|
||||
#### 其他选择
|
||||
|
||||
[深度操作系统][24] 和其他的 Ubuntu 变种(如 Kubuntu、Xubuntu)也是初学者的首选。如果你想寻求更多的选择,你可以看看。(LCTT 译注:我知道你们肯定对将深度操作系统列入其它不满意——这个锅归原作者。)
|
||||
|
||||
如果你想要挑战自己,你可以试试 Ubuntu 之外的 Fedora —— 但是一定要看看我们关于 [Ubuntu 和 Fedora 对比][25]的文章,从桌面的角度做出更好的选择。
|
||||
|
||||
### 最好的服务器发行版
|
||||
|
||||
对于服务器来说,选择 Linux 发行版取决于稳定性、性能和企业级支持。如果你只是尝试,则可以尝试任何你想要的发行版。
|
||||
|
||||
但是,如果你要为 Web 服务器或任何重要的组件安装它,你应该看看我们的一些建议。
|
||||
|
||||
#### Ubuntu 服务器
|
||||
|
||||
根据你的需要,Ubuntu 为你的服务器提供了不同的选项。如果你正在寻找运行在 AWS、Azure、谷歌云平台等平台上的优化解决方案,[Ubuntu Cloud][26] 是一个很好的选择。
|
||||
|
||||
无论是哪种情况,你都可以选择 Ubuntu 服务器包,并将其安装在你的服务器上。然而,Ubuntu 在云上部署时也是最受欢迎的 Linux 发行版(根据数字判断——[来源1][27]、[来源2][28])。
|
||||
|
||||
请注意,除非你有特殊要求,我们建议你选择 LTS 版。
|
||||
|
||||
- [Ubuntu Server][29]
|
||||
|
||||
#### 红帽企业版 Linux(RHEL)
|
||||
|
||||
红帽企业版 Linux(RHEL)是面向企业和组织的顶级 Linux 平台。如果我们按数字来看,红帽可能不是服务器领域最受欢迎的。但是,有相当一部分企业用户依赖于 RHEL (比如联想)。
|
||||
|
||||
从技术上讲,Fedora 和红帽企业版是相关联的。无论红帽要支持什么——在出现在 RHEL 之前,都要在 Fedora 上进行测试。我不是定制需求的服务器发行版专家,所以你一定要查看他们的[官方文档][30]以了解它是否适合你。
|
||||
|
||||
- [RHEL][31]
|
||||
|
||||
#### SUSE Linux 企业服务器(SLES)
|
||||
|
||||
![][32]
|
||||
|
||||
别担心,不要把这和 OpenSUSE 混淆。一切都以一个共同的品牌 “SUSE” 命名 —— 但是 OpenSUSE 是一个开源发行版,目标是社区,并且由社区维护。
|
||||
|
||||
SUSE Linux 企业服务器(SLES)是基于云的服务器最受欢迎的解决方案之一。为了获得管理开源解决方案的优先支持和帮助,你必须选择订阅。
|
||||
|
||||
- [SLES][33]
|
||||
|
||||
#### CentOS
|
||||
|
||||
![][34]
|
||||
|
||||
正如我提到的,对于 RHEL 你需要订阅。而 CentOS 更像是 RHEL 的社区版,因为它是从 RHEL 的源代码中派生出来的。而且,它是开源的,也是免费的。尽管与过去几年相比,使用 CentOS 的托管提供商数量明显减少,但这仍然是一个很好的选择。
|
||||
|
||||
CentOS 可能没有加载最新的软件包,但它被认为是最稳定的发行版之一,你可以在各种云平台上找到 CentOS 镜像。如果没有,你可以选择 CentOS 提供的自托管镜像。
|
||||
|
||||
- [CentOS][35]
|
||||
|
||||
#### 其他选择
|
||||
|
||||
你也可以尝试 [Fedora Server][36]或[Debian][37]作为上述发行版的替代品。
|
||||
|
||||
### 旧电脑的最佳 Linux 发行版
|
||||
|
||||
如果你有一台旧电脑,或者你真的不需要升级你的系统,你仍然可以尝试一些最好的 Linux 发行版。
|
||||
|
||||
我们已经详细讨论了一些[最好的轻量级 Linux 发行版][42]。在这里,我们将只提到那些真正突出的东西(以及一些新的补充)。
|
||||
|
||||
#### Puppy Linux
|
||||
|
||||
![][43]
|
||||
|
||||
Puppy Linux 实际上是最小的发行版本之一。刚开始使用 Linux 时,我的朋友建议我尝试一下 Puppy Linux,因为它可以轻松地在较旧的硬件配置上运行。
|
||||
|
||||
如果你想在你的旧电脑上享受一次爽快的体验,那就值得去看看。多年来,随着一些新的有用特性的增加,用户体验得到了改善。
|
||||
|
||||
- [Puppy Linux][44]
|
||||
|
||||
#### Solus Budgie
|
||||
|
||||
![][45]
|
||||
|
||||
在最近的一个主要版本——[Solus 4 Fortitude][46] 之后,它是一个令人印象深刻的轻量级桌面操作系统。你可以选择像 GNOME 或 MATE 这样的桌面环境。然而,Solus Budgie 恰好是我的最爱之一,它是一款适合初学者的功能齐全的 Linux发行版,同时对系统资源要求很少。
|
||||
|
||||
- [Solus][47]
|
||||
|
||||
#### Bodhi
|
||||
|
||||
![][48]
|
||||
|
||||
Bodhi Linux 构建于 Ubuntu 之上。然而,与Ubuntu不同,它在较旧的配置上运行良好。
|
||||
|
||||
这个发行版的主要亮点是它的 [Moksha 桌面][49](这是 Enlightenment 17 桌面的延续)。用户体验直观且反应极快。即使我个人不用它,你也应该在你的旧系统上试一试。
|
||||
|
||||
- [Bodhi Linux][50]
|
||||
|
||||
#### antiX
|
||||
|
||||
![][51]
|
||||
|
||||
antiX 部分担起了 MX Linux 的责任,它是一个轻量级的 Linux 发行版,为新的或旧的计算机量身定制。其用户界面并不令人印象深刻——但它可以像预期的那样工作。
|
||||
|
||||
它基于 Debian,可以作为一个现场版 CD 发行版使用,而不需要安装它。antiX 还提供现场版引导加载程序。与其他发行版相比,你可以保存设置,这样就不会在每次重新启动时丢失设置。不仅如此,你还可以通过其“持久保留”功能将更改保存到根目录中。
|
||||
|
||||
因此,如果你正在寻找一个可以在旧硬件上提供快速用户体验的现场版 USB 发行版,antiX 是一个不错的选择。
|
||||
|
||||
- [antiX][52]
|
||||
|
||||
#### Sparky Linux
|
||||
|
||||
![][53]
|
||||
|
||||
Sparky Linux 基于 Debian,它是理想的低端系统 Linux 发行版。伴随着超快的用户体验,Sparky Linux 为不同的用户提供了几个特殊版本(或变种)。
|
||||
|
||||
例如,它提供了针对一组用户的稳定版本(和变种)和滚动版本。Sparky Linux GameOver 版非常受游戏玩家欢迎,因为它包含了一堆预装的游戏。你可以查看我们的[最佳 Linux 游戏发行版][54] —— 如果你也想在你的系统上玩游戏。
|
||||
|
||||
#### 其他选择
|
||||
|
||||
你也可以尝试 [Linux Lite][55]、[Lubuntu][56]、[Peppermint][57] 等轻量级 Linux 发行版。
|
||||
|
||||
### 面向高级用户的最佳 Linux 发行版
|
||||
|
||||
一旦你习惯了各种软件包管理器和命令来帮助你解决任何问题,你就可以开始找寻只为高级用户量身定制的 Linux 发行版。
|
||||
|
||||
当然,如果你是专业人士,你会有一套具体的要求。然而,如果你已经作为普通用户使用了一段时间——以下发行版值得一试。
|
||||
|
||||
#### Arch Linux
|
||||
|
||||
![][58]
|
||||
|
||||
Arch Linux 本身是一个简单而强大的发行版,具有陡峭的学习曲线。不像其系统,你不会一次就把所有东西都预先安装好。你必须配置系统并根据需要添加软件包。
|
||||
|
||||
此外,在安装 Arch Linux 时,必须按照一组命令来进行(没有图形用户界面)。要了解更多信息,你可以按照我们关于[如何安装 Arch Linux][59] 的指南进行操作。如果你要安装它,你还应该知道在[安装 Arch Linux 后需要做的一些基本事情][60]。这会帮助你快速入门。
|
||||
|
||||
除了多才多艺和简便性之外,值得一提的是 Arch Linux 背后的社区非常活跃。所以,如果你遇到问题,你不用担心。
|
||||
|
||||
- [Arch Linux][61]
|
||||
|
||||
#### Gentoo
|
||||
|
||||
![][62]
|
||||
|
||||
如果你知道如何编译源代码,Gentoo Linux 是你必须尝试的版本。这也是一个轻量级的发行版,但是,你需要具备必要的技术知识才能使它发挥作用。
|
||||
|
||||
当然,[官方手册][63]提供了许多你需要知道的信息。但是,如果你不确定自己在做什么——你需要花很多时间去想如何充分利用它。
|
||||
|
||||
- [Gentoo Linux][64]
|
||||
|
||||
#### Slackware
|
||||
|
||||
![][65]
|
||||
|
||||
Slackware 是仍然重要的最古老的 Linux 发行版之一。如果你愿意编译或开发软件来为自己建立一个完美的环境 —— Slackware 是一个不错的选择。
|
||||
|
||||
如果你对一些最古老的 Linux 发行版感到好奇,我们有一篇关于[最早的 Linux 发行版][66]可以去看看。
|
||||
|
||||
尽管使用它的用户/开发人员的数量已经显著减少,但对于高级用户来说,它仍然是一个极好的选择。此外,最近有个新闻是 [Slackware 有了一个 Patreon 捐赠页面][67],我们希望 Slackware 继续作为最好的 Linux 发行版之一存在。
|
||||
|
||||
- [Slackware][68]
|
||||
|
||||
### 最佳多用途 Linux 发行版
|
||||
|
||||
有些 Linux 发行版既可以作为初学者友好的桌面又可以作为高级操作系统的服务器。因此,我们考虑为这样的发行版编辑一个单独的部分。
|
||||
|
||||
如果你不同意我们的观点(或者有建议要补充),请在评论中告诉我们。我们认为,这对于每个用户都可以派上用场:
|
||||
|
||||
#### Fedora
|
||||
|
||||
![][69]
|
||||
|
||||
Fedora 提供两个独立的版本:一个用于台式机/笔记本电脑(Fedora 工作站),另一个用于服务器(Fedora 服务器)。
|
||||
|
||||
因此,如果你正在寻找一款时髦的桌面操作系统,有点学习曲线,又对用户友好,那么 Fedora 是一个选择。无论是哪种情况,如果你正在为你的服务器寻找一个 Linux 操作系统,这也是一个不错的选择。
|
||||
|
||||
- [Fedora][70]
|
||||
|
||||
#### Manjaro
|
||||
|
||||
![][71]
|
||||
|
||||
Manjaro 基于 [Arch Linux][72]。不用担心,虽然 Arch Linux 是为高级用户量身定制的,但Manjaro 让新手更容易上手。这是一个简单且对初学者友好的 Linux 发行版。用户界面足够好,并且内置了一系列有用的图形用户界面应用程序。
|
||||
|
||||
下载时,你可以为 Manjaro 选择[桌面环境][73]。就个人而言,我喜欢 Manjaro 的 KDE 桌面。
|
||||
|
||||
- [Manjaro Linux][74]
|
||||
|
||||
#### Debian
|
||||
|
||||
![][75]
|
||||
|
||||
嗯,Ubuntu 是基于 Debian 的——所以它本身是一个非常好的发行版本。Debian 是台式机和服务器的理想选择。
|
||||
|
||||
这可能不是对初学者最友好的操作系统——但你可以通过阅读[官方文档][76]轻松开始。[Debian 10 Buster][77] 的最新版本引入了许多变化和必要的改进。所以,你必须试一试!
|
||||
|
||||
### 总结
|
||||
|
||||
总的来说,这些是我们推荐你去尝试的最好的 Linux 发行版。是的,还有许多其他的 Linux 发行版值得一提,但是根据个人喜好,对每个发行版来说,取决于个人喜好,这种选择是主观的。
|
||||
|
||||
但是,我们也为 [Windows 用户][78]、[黑客和脆弱性测试人员][41]、[游戏玩家][54]、[程序员][39]和[偏重隐私者][79]提供了单独的发行版列表所以,如果你感兴趣的话请仔细阅读。
|
||||
|
||||
如果你认为我们遗漏了你最喜欢的 Linux 发行版,请在下面的评论中告诉我们你的想法,我们将更新这篇文章。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/best-linux-distributions/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[heguangzhi](https://github.com/heguangzhi)
|
||||
校对:[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/lujun9972
|
||||
[1]: tmp.NoRXbIWHkg#for-beginners
|
||||
[2]: tmp.NoRXbIWHkg#for-servers
|
||||
[3]: tmp.NoRXbIWHkg#for-old-computers
|
||||
[4]: tmp.NoRXbIWHkg#for-advanced-users
|
||||
[5]: tmp.NoRXbIWHkg#general-purpose
|
||||
[6]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/01/install-google-chrome-ubuntu-10.jpg?ssl=1
|
||||
[7]: https://itsfoss.com/install-themes-ubuntu/
|
||||
[8]: https://itsfoss.com/tag/ubuntu/
|
||||
[9]: https://ubuntu.com/download/desktop
|
||||
[10]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/08/linux-Mint-19-desktop.jpg?ssl=1
|
||||
[11]: https://www.linuxmint.com/
|
||||
[12]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/08/elementary-os-juno-feat.jpg?ssl=1
|
||||
[13]: https://itsfoss.com/things-to-do-after-installing-elementary-os-5-juno/
|
||||
[14]: https://elementary.io/
|
||||
[15]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/08/mx-linux.jpg?ssl=1
|
||||
[16]: https://distrowatch.com/
|
||||
[17]: https://en.wikipedia.org/wiki/Linux_distribution#Rolling_distributions
|
||||
[18]: https://flatpak.org/
|
||||
[19]: https://mxlinux.org/
|
||||
[20]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/08/zorin-os-15.png?ssl=1
|
||||
[21]: https://itsfoss.com/zorin-os-15-release/
|
||||
[22]: https://itsfoss.com/zorin-os-interview/
|
||||
[23]: https://zorinos.com/
|
||||
[24]: https://www.deepin.org/en/
|
||||
[25]: https://itsfoss.com/ubuntu-vs-fedora/
|
||||
[26]: https://ubuntu.com/download/cloud
|
||||
[27]: https://w3techs.com/technologies/details/os-linux/all/all
|
||||
[28]: https://thecloudmarket.com/stats
|
||||
[29]: https://ubuntu.com/download/server
|
||||
[30]: https://developers.redhat.com/products/rhel/docs-and-apis
|
||||
[31]: https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux
|
||||
[32]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/08/SUSE-Linux-Enterprise.jpg?ssl=1
|
||||
[33]: https://www.suse.com/products/server/
|
||||
[34]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/08/centos.png?ssl=1
|
||||
[35]: https://www.centos.org/
|
||||
[36]: https://getfedora.org/en/server/
|
||||
[37]: https://www.debian.org/distrib/
|
||||
[38]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/08/coding.jpg?ssl=1
|
||||
[39]: https://itsfoss.com/best-linux-distributions-progammers/
|
||||
[40]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/08/hacking.jpg?ssl=1
|
||||
[41]: https://itsfoss.com/linux-hacking-penetration-testing/
|
||||
[42]: https://itsfoss.com/lightweight-linux-beginners/
|
||||
[43]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/08/puppy-linux-bionic.jpg?ssl=1
|
||||
[44]: http://puppylinux.com/
|
||||
[45]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/03/solus-4-featured.jpg?resize=800%2C450&ssl=1
|
||||
[46]: https://itsfoss.com/solus-4-release/
|
||||
[47]: https://getsol.us/home/
|
||||
[48]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/08/bodhi-linux.png?fit=800%2C436&ssl=1
|
||||
[49]: http://www.bodhilinux.com/moksha-desktop/
|
||||
[50]: http://www.bodhilinux.com/
|
||||
[51]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2017/10/antix-linux-screenshot.jpg?ssl=1
|
||||
[52]: https://antixlinux.com/
|
||||
[53]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/08/sparky-linux.jpg?ssl=1
|
||||
[54]: https://itsfoss.com/linux-gaming-distributions/
|
||||
[55]: https://www.linuxliteos.com/
|
||||
[56]: https://lubuntu.me/
|
||||
[57]: https://peppermintos.com/
|
||||
[58]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/08/arch_linux_screenshot.jpg?ssl=1
|
||||
[59]: https://itsfoss.com/install-arch-linux/
|
||||
[60]: https://itsfoss.com/things-to-do-after-installing-arch-linux/
|
||||
[61]: https://www.archlinux.org
|
||||
[62]: https://i0.wp.com/itsfoss.com/wp-content/uploads/2019/08/gentoo-linux.png?ssl=1
|
||||
[63]: https://wiki.gentoo.org/wiki/Handbook:Main_Page
|
||||
[64]: https://www.gentoo.org
|
||||
[65]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/08/slackware-screenshot.jpg?ssl=1
|
||||
[66]: https://itsfoss.com/earliest-linux-distros/
|
||||
[67]: https://distrowatch.com/dwres.php?resource=showheadline&story=8743
|
||||
[68]: http://www.slackware.com/
|
||||
[69]: https://i2.wp.com/itsfoss.com/wp-content/uploads/2019/08/fedora-overview.png?ssl=1
|
||||
[70]: https://getfedora.org/
|
||||
[71]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/08/manjaro-gnome.jpg?ssl=1
|
||||
[72]: https://www.archlinux.org/
|
||||
[73]: https://itsfoss.com/glossary/desktop-environment/
|
||||
[74]: https://manjaro.org/
|
||||
[75]: https://i1.wp.com/itsfoss.com/wp-content/uploads/2019/08/debian-screenshot.png?ssl=1
|
||||
[76]: https://www.debian.org/releases/stable/installmanual
|
||||
[77]: https://itsfoss.com/debian-10-buster/
|
||||
[78]: https://itsfoss.com/windows-like-linux-distributions/
|
||||
[79]: https://itsfoss.com/privacy-focused-linux-distributions/
|
@ -0,0 +1,101 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (wxy)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-11415-1.html)
|
||||
[#]: subject: (Copying large files with Rsync, and some misconceptions)
|
||||
[#]: via: (https://fedoramagazine.org/copying-large-files-with-rsync-and-some-misconceptions/)
|
||||
[#]: author: (Daniel Leite de Abreu https://fedoramagazine.org/author/dabreu/)
|
||||
|
||||
使用 rsync 复制大文件的一些误解
|
||||
======
|
||||
|
||||
![][1]
|
||||
|
||||
有一种观点认为,在 IT 行业工作的许多人经常从网络帖子里复制和粘贴。我们都干过,复制粘贴本身不是问题。问题是当我们在不理解它们的情况下这样干。
|
||||
|
||||
几年前,一个曾经在我团队中工作的朋友需要将虚拟机模板从站点 A 复制到站点 B。他们无法理解为什么复制的文件在站点 A 上为 10GB,但是在站点 B 上却变为 100GB。
|
||||
|
||||
这位朋友认为 `rsync` 是一个神奇的工具,应该仅“同步”文件本身。但是,我们大多数人所忘记的是了解 `rsync` 的真正含义、用法,以及我认为最重要的是它原本是用来做什么的。本文提供了有关 `rsync` 的更多信息,并解释了那件事中发生了什么。
|
||||
|
||||
### 关于 rsync
|
||||
|
||||
`rsync` 是由 Andrew Tridgell 和 Paul Mackerras 创建的工具,其动机是以下问题:
|
||||
|
||||
假设你有两个文件,`file_A` 和 `file_B`。你希望将 `file_B` 更新为与 `file_A` 相同。显而易见的方法是将 `file_A` 复制到 `file_B`。
|
||||
|
||||
现在,假设这两个文件位于通过慢速通信链接(例如,拨号 IP 链接)连接的两个不同的服务器上。如果`file_A` 大,将其复制到 `file_B` 将会很慢,有时甚至是不可能完成的。为了提高效率,你可以在发送前压缩 `file_A`,但这通常只会获得 2 到 4 倍的效率提升。
|
||||
|
||||
现在假设 `file_A` 和 `file_B` 非常相似,并且为了加快处理速度,你可以利用这种相似性。一种常见的方法是仅通过链接发送 `file_A` 和 `file_B` 之间的差异,然后使用这个差异列表在远程端重建文件。
|
||||
|
||||
问题在于,用于在两个文件之间创建一组差异的常规方法依赖于能够读取两个文件。因此,它们要求链接的一端预先提供两个文件。如果它们在同一台计算机上不是同时可用的,则无法使用这些算法。(一旦将文件复制过来,就不需要做对比差异了)。而这是 `rsync` 解决的问题。
|
||||
|
||||
`rsync` 算法有效地计算源文件的哪些部分与现有目标文件的部分匹配。这样,匹配的部分就不需要通过链接发送了;所需要的只是对目标文件部分的引用。只有源文件中不匹配的部分才需要发送。
|
||||
|
||||
然后,接收者可以使用对现有目标文件各个部分的引用和原始素材来构造源文件的副本。
|
||||
|
||||
另外,可以使用一系列常用压缩算法中的任何一种来压缩发送到接收器的数据,以进一步提高速度。
|
||||
|
||||
我们都知道,`rsync` 算法以一种漂亮的方式解决了这个问题。
|
||||
|
||||
在 `rsync` 的介绍之后,回到那件事!
|
||||
|
||||
### 问题 1:自动精简配置
|
||||
|
||||
有两件事可以帮助那个朋友了解正在发生的事情。
|
||||
|
||||
该文件在其他地方的大小变得越来越大的问题是由源系统上启用了<ruby>自动精简配置<rt>Thin Provisioning</rt></ruby>(TP)引起的,这是一种优化存储区域网络(SAN)或网络连接存储(NAS)中可用空间效率的方法。
|
||||
|
||||
由于启用了 TP,源文件只有 10GB,并且在不使用任何其他配置的情况下使用 `rsync` 进行传输时,目标位置将接收到全部 100GB 的大小。`rsync` 无法自动完成该(TP)操作,必须对其进行配置。
|
||||
|
||||
进行此工作的选项是 `-S`(或 `–sparse`),它告诉 `rsync` 有效地处理稀疏文件。它会按照它说的做!它只会发送该稀疏数据,因此源和目标将有一个 10GB 的文件。
|
||||
|
||||
### 问题 2:更新文件
|
||||
|
||||
当发送一个更新的文件时会出现第二个问题。现在目标仅接收 10GB 了,但始终传输的是整个文件(包含虚拟磁盘),即使只是在该虚拟磁盘上更改了一个配置文件。换句话说,只是该文件的一小部分发生了更改。
|
||||
|
||||
用于此传输的命令是:
|
||||
|
||||
```
|
||||
rsync -avS vmdk_file syncuser@host1:/destination
|
||||
```
|
||||
|
||||
同样,了解 `rsync` 的工作方式也将有助于解决此问题。
|
||||
|
||||
上面是关于 `rsync` 的最大误解。我们许多人认为 `rsync` 只会发送文件的增量更新,并且只会自动更新需要更新的内容。**但这不是 `rsync` 的默认行为**。
|
||||
|
||||
如手册页所述,`rsync` 的默认行为是在目标位置创建文件的新副本,并在传输完成后将其移动到正确的位置。
|
||||
|
||||
要更改 `rsync` 的默认行为,你必须设置以下标志,然后 `rsync` 将仅发送增量:
|
||||
|
||||
```
|
||||
--inplace 原地更新目标文件
|
||||
--partial 保留部分传输的文件
|
||||
--append 附加数据到更短的文件
|
||||
--progress 在传输时显示进度条
|
||||
```
|
||||
|
||||
因此,可以确切地执行我那个朋友想要的功能的完整命令是:
|
||||
|
||||
```
|
||||
rsync -av --partial --inplace --append --progress vmdk_file syncuser@host1:/destination
|
||||
```
|
||||
|
||||
注意,出于两个原因,这里必须删除稀疏选项 `-S`。首先是通过网络发送文件时,不能同时使用 `–sparse` 和 `–inplace`。其次,当你以前使用过 `–sparse` 发送文件时,就无法再使用 `–inplace` 进行更新。请注意,低于 3.1.3 的 `rsync` 版本将拒绝 `–sparse` 和 `–inplace` 的组合。
|
||||
|
||||
因此,即使那个朋友最终通过网络复制了 100GB,那也只需发生一次。以下所有更新仅复制差异,从而使复制非常高效。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/copying-large-files-with-rsync-and-some-misconceptions/
|
||||
|
||||
作者:[Daniel Leite de Abreu][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://fedoramagazine.org/author/dabreu/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2019/08/rsync-816x345.jpg
|
@ -0,0 +1,363 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (way-ww)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-11422-1.html)
|
||||
[#]: subject: (Linux commands to display your hardware information)
|
||||
[#]: via: (https://opensource.com/article/19/9/linux-commands-hardware-information)
|
||||
[#]: author: (Howard Fosdick https://opensource.com/users/howtechhttps://opensource.com/users/sethhttps://opensource.com/users/sethhttps://opensource.com/users/seth)
|
||||
|
||||
用 Linux 命令显示硬件信息
|
||||
======
|
||||
|
||||
> 通过命令行获取计算机硬件详细信息。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/201910/04/120618q2k1fflrsy1bgbwp.jpg)
|
||||
|
||||
你可能会有很多的原因需要查清计算机硬件的详细信息。例如,你需要修复某些问题并在论坛上发出请求,人们可能会立即询问你的计算机具体的信息。或者当你想要升级计算机配置时,你需要知道现有的硬件型号和能够升级的型号。这些都需要查询你的计算机具体规格信息。
|
||||
|
||||
最简单的方法是使用标准的 Linux GUI 程序之一:
|
||||
|
||||
* [i-nex][2] 收集硬件信息,并且类似于 Windows 下流行的 [CPU-Z][3] 的显示。
|
||||
* [HardInfo][4] 显示硬件具体信息,甚至包括一组八个的流行的性能基准程序,你可以用它们评估你的系统性能。
|
||||
* [KInfoCenter][5] 和 [Lshw][6] 也能够显示硬件的详细信息,并且可以从许多软件仓库中获取。
|
||||
|
||||
或者,你也可以拆开计算机机箱去查看硬盘、内存和其他设备上的标签信息。或者你可以在系统启动时,按下[相应的按键][7]进入 UEFI 和 BIOS 界面获得信息。这两种方式都会向你显示硬件信息但省略软件信息。
|
||||
|
||||
你也可以使用命令行获取硬件信息。等一下… 这听起来有些困难。为什么你会要这样做?
|
||||
|
||||
有时候通过使用一条针对性强的命令可以很轻松的找到特定信息。也可能你没有可用的 GUI 程序或者只是不想安装这样的程序。
|
||||
|
||||
使用命令行的主要原因可能是编写脚本。无论你是使用 Linux shell 还是其他编程语言来编写脚本通常都需要使用命令行。
|
||||
|
||||
很多检测硬件信息的命令行都需要使用 root 权限。所以要么切换到 root 用户,要么使用 `sudo` 在普通用户状态下发出命令:
|
||||
|
||||
```
|
||||
sudo <the_line_command>
|
||||
```
|
||||
|
||||
并按提示输入你的密码。
|
||||
|
||||
这篇文章介绍了很多用于发现系统信息的有用命令。文章最后的快速查询表对它们作出了总结。
|
||||
|
||||
### 硬件概述
|
||||
|
||||
下面几条命令可以全面概述计算机硬件信息。
|
||||
|
||||
`inxi` 命令能够列出包括 CPU、图形、音频、网络、驱动、分区、传感器等详细信息。当论坛里的人尝试帮助其他人解决问题的时候,他们常常询问此命令的输出。这是解决问题的标准诊断程序:
|
||||
|
||||
```
|
||||
inxi -Fxz
|
||||
```
|
||||
|
||||
`-F` 参数意味着你将得到完整的输出,`x` 增加细节信息,`z` 参数隐藏像 MAC 和 IP 等私人身份信息。
|
||||
|
||||
`hwinfo` 和 `lshw` 命令以不同的格式显示大量相同的信息:
|
||||
|
||||
```
|
||||
hwinfo --short
|
||||
```
|
||||
|
||||
或
|
||||
|
||||
```
|
||||
lshw -short
|
||||
```
|
||||
|
||||
这两条命令的长格式输出非常详细,但也有点难以阅读:
|
||||
|
||||
```
|
||||
hwinfo
|
||||
```
|
||||
|
||||
或
|
||||
|
||||
```
|
||||
lshw
|
||||
```
|
||||
|
||||
### CPU 详细信息
|
||||
|
||||
通过命令你可以了解关于你的 CPU 的任何信息。使用 `lscpu` 命令或与它相近的 `lshw` 命令查看 CPU 的详细信息:
|
||||
|
||||
```
|
||||
lscpu
|
||||
```
|
||||
|
||||
或
|
||||
|
||||
```
|
||||
lshw -C cpu
|
||||
```
|
||||
|
||||
在这两个例子中,输出的最后几行都列出了所有 CPU 的功能。你可以查看你的处理器是否支持特定的功能。
|
||||
|
||||
使用这些命令的时候,你可以通过使用 `grep` 命令过滤复杂的信息,并缩小所需信息范围。例如,只查看 CPU 品牌和型号:
|
||||
|
||||
```
|
||||
lshw -C cpu | grep -i product
|
||||
```
|
||||
|
||||
仅查看 CPU 的速度(兆赫兹):
|
||||
|
||||
```
|
||||
lscpu | grep -i mhz
|
||||
```
|
||||
|
||||
或其 [BogoMips][8] 额定功率:
|
||||
|
||||
```
|
||||
lscpu | grep -i bogo
|
||||
```
|
||||
|
||||
`grep` 命令的 `-i` 参数代表搜索结果忽略大小写。
|
||||
|
||||
### 内存
|
||||
|
||||
Linux 命令行使你能够收集关于你的计算机内存的所有可能的详细信息。你甚至可以不拆开计算机机箱就能确定是否可以为计算机添加额外的内存条。
|
||||
|
||||
使用 `dmidecode` 命令列出每根内存条和其容量:
|
||||
|
||||
```
|
||||
dmidecode -t memory | grep -i size
|
||||
```
|
||||
|
||||
使用以下命令获取系统内存更多的信息,包括类型、容量、速度和电压:
|
||||
|
||||
```
|
||||
lshw -short -C memory
|
||||
```
|
||||
|
||||
你肯定想知道的一件事是你的计算机可以安装的最大内存:
|
||||
|
||||
```
|
||||
dmidecode -t memory | grep -i max
|
||||
```
|
||||
|
||||
现在检查一下计算机是否有空闲的插槽可以插入额外的内存条。你可以通过使用命令在不打开计算机机箱的情况下就做到:
|
||||
|
||||
```
|
||||
lshw -short -C memory | grep -i empty
|
||||
```
|
||||
|
||||
输出为空则意味着所有的插槽都在使用中。
|
||||
|
||||
确定你的计算机拥有多少显卡内存需要下面的命令。首先使用 `lspci` 列出所有设备信息然后过滤出你想要的显卡设备信息:
|
||||
|
||||
```
|
||||
lspci | grep -i vga
|
||||
```
|
||||
|
||||
视频控制器的设备号输出信息通常如下:
|
||||
|
||||
```
|
||||
00:02.0 VGA compatible controller: Intel Corporation 82Q35 Express Integrated Graphics Controller (rev 02)
|
||||
```
|
||||
|
||||
现在再加上视频设备号重新运行 `lspci` 命令:
|
||||
|
||||
```
|
||||
lspci -v -s 00:02.0
|
||||
```
|
||||
|
||||
输出信息中 `prefetchable` 那一行显示了系统中的显卡内存大小:
|
||||
|
||||
```
|
||||
...
|
||||
Memory at f0100000 (32-bit, non-prefetchable) [size=512K]
|
||||
I/O ports at 1230 [size=8]
|
||||
Memory at e0000000 (32-bit, prefetchable) [size=256M]
|
||||
Memory at f0000000 (32-bit, non-prefetchable) [size=1M]
|
||||
...
|
||||
```
|
||||
|
||||
最后使用下面的命令展示当前内存使用量(兆字节):
|
||||
|
||||
```
|
||||
free -m
|
||||
```
|
||||
|
||||
这条命令告诉你多少内存是空闲的,多少命令正在使用中以及交换内存的大小和是否正在使用。例如,输出信息如下:
|
||||
|
||||
```
|
||||
total used free shared buff/cache available
|
||||
Mem: 11891 1326 8877 212 1687 10077
|
||||
Swap: 1999 0 1999
|
||||
```
|
||||
|
||||
`top` 命令为你提供内存使用更加详细的信息。它显示了当前全部内存和 CPU 使用情况并按照进程 ID、用户 ID 及正在运行的命令细分。同时这条命令也是全屏输出:
|
||||
|
||||
```
|
||||
top
|
||||
```
|
||||
|
||||
### 磁盘文件系统和设备
|
||||
|
||||
你可以轻松确定有关磁盘、分区、文件系统和其他设备信息。
|
||||
|
||||
显示每个磁盘设备的描述信息:
|
||||
|
||||
```
|
||||
lshw -short -C disk
|
||||
```
|
||||
|
||||
通过以下命令获取任何指定的 SATA 磁盘详细信息,例如其型号、序列号以及支持的模式和扇区数量等:
|
||||
|
||||
```
|
||||
hdparm -i /dev/sda
|
||||
```
|
||||
|
||||
当然,如果需要的话你应该将 `sda` 替换成 `sdb` 或者其他设备号。
|
||||
|
||||
要列出所有磁盘及其分区和大小,请使用以下命令:
|
||||
|
||||
```
|
||||
lsblk
|
||||
```
|
||||
|
||||
使用以下命令获取更多有关扇区数量、大小、文件系统 ID 和 类型以及分区开始和结束扇区:
|
||||
|
||||
```
|
||||
fdisk -l
|
||||
```
|
||||
|
||||
要启动 Linux,你需要确定 [GRUB][9] 引导程序的可挂载分区。你可以使用 `blkid` 命令找到此信息。它列出了每个分区的唯一标识符(UUID)及其文件系统类型(例如 ext3 或 ext4):
|
||||
|
||||
```
|
||||
blkid
|
||||
```
|
||||
|
||||
使用以下命令列出已挂载的文件系统和它们的挂载点,以及已用的空间和可用的空间(兆字节为单位):
|
||||
|
||||
```
|
||||
df -m
|
||||
```
|
||||
|
||||
最后,你可以列出所有的 USB 和 PCI 总线以及其他设备的详细信息:
|
||||
|
||||
```
|
||||
lsusb
|
||||
```
|
||||
|
||||
或
|
||||
|
||||
```
|
||||
lspci
|
||||
```
|
||||
|
||||
### 网络
|
||||
|
||||
Linux 提供大量的网络相关命令,下面只是几个例子。
|
||||
|
||||
查看你的网卡硬件详细信息:
|
||||
|
||||
```
|
||||
lshw -C network
|
||||
```
|
||||
|
||||
`ifconfig` 是显示网络接口的传统命令:
|
||||
|
||||
```
|
||||
ifconfig -a
|
||||
```
|
||||
|
||||
但是现在很多人们使用:
|
||||
|
||||
```
|
||||
ip link show
|
||||
```
|
||||
|
||||
或
|
||||
|
||||
```
|
||||
netstat -i
|
||||
```
|
||||
|
||||
在阅读输出时,了解常见的网络缩写十分有用:
|
||||
|
||||
缩写 | 含义
|
||||
---|---
|
||||
`lo` | 回环接口
|
||||
`eth0` 或 `enp*` | 以太网接口
|
||||
`wlan0` | 无线网接口
|
||||
`ppp0` | 点对点协议接口(由拨号调制解调器、PPTP VPN 连接或者 USB 调制解调器使用)
|
||||
`vboxnet0` 或 `vmnet*` | 虚拟机网络接口
|
||||
|
||||
表中的星号是通配符,代表不同系统的任意字符。
|
||||
|
||||
使用以下命令显示默认网关和路由表:
|
||||
|
||||
```
|
||||
ip route | column -t
|
||||
```
|
||||
|
||||
或
|
||||
|
||||
```
|
||||
netstat -r
|
||||
```
|
||||
|
||||
### 软件
|
||||
|
||||
让我们以显示最底层软件详细信息的两条命令来结束。例如,如果你想知道是否安装了最新的固件该怎么办?这条命令显示了 UEFI 或 BIOS 的日期和版本:
|
||||
|
||||
```
|
||||
dmidecode -t bios
|
||||
```
|
||||
|
||||
内核版本是多少,以及它是 64 位的吗?网络主机名是什么?使用下面的命令查出结果:
|
||||
|
||||
```
|
||||
uname -a
|
||||
```
|
||||
|
||||
### 快速查询表
|
||||
|
||||
用途 | 命令
|
||||
--- | ---
|
||||
显示所有硬件信息 | `inxi -Fxz` 或 `hwinfo --short` 或 `lshw -short`
|
||||
CPU 信息 | `lscpu` 或 `lshw -C cpu`
|
||||
显示 CPU 功能(例如 PAE、SSE2) | `lshw -C cpu | grep -i capabilities`
|
||||
报告 CPU 位数 | `lshw -C cpu | grep -i width`
|
||||
显示当前内存大小和配置 | `dmidecode -t memory | grep -i size` 或 `lshw -short -C memory`
|
||||
显示硬件支持的最大内存 | `dmidecode -t memory | grep -i max`
|
||||
确定是否有空闲内存插槽 | `lshw -short -C memory | grep -i empty`(输出为空表示没有可用插槽)
|
||||
确定显卡内存数量 | `lspci | grep -i vga` 然后指定设备号再次使用;例如:`lspci -v -s 00:02.0` 显卡内存数量就是 `prefetchable` 的值
|
||||
显示当前内存使用情况 | `free -m` 或 `top`
|
||||
列出磁盘驱动器 | `lshw -short -C disk`
|
||||
显示指定磁盘驱动器的详细信息 | `hdparm -i /dev/sda`(需要的话替换掉 `sda`)
|
||||
列出磁盘和分区信息 | `lsblk`(简单) 或 `fdisk -l`(详细)
|
||||
列出分区 ID(UUID)| `blkid`
|
||||
列出已挂载文件系统挂载点以及已用和可用空间 | `df -m`
|
||||
列出 USB 设备 | `lsusb`
|
||||
列出 PCI 设备 | `lspci`
|
||||
显示网卡详细信息 | `lshw -C network`
|
||||
显示网络接口 | `ifconfig -a` 或 `ip link show` 或 `netstat -i`
|
||||
显示路由表 | `ip route | column -t` 或 `netstat -r`
|
||||
显示 UEFI/BIOS 信息 | `dmidecode -t bios`
|
||||
显示内核版本网络主机名等 | `uname -a`
|
||||
|
||||
你有喜欢的命令被我忽略掉的吗?请添加评论分享给大家。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/9/linux-commands-hardware-information
|
||||
|
||||
作者:[Howard Fosdick][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[way-ww](https://github.com/way-ww)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/howtechhttps://opensource.com/users/sethhttps://opensource.com/users/sethhttps://opensource.com/users/seth
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/features_solutions_command_data.png?itok=4_VQN3RK (computer screen )
|
||||
[2]: http://sourceforge.net/projects/i-nex/
|
||||
[3]: https://www.cpuid.com/softwares/cpu-z.html
|
||||
[4]: http://sourceforge.net/projects/hardinfo.berlios/
|
||||
[5]: https://userbase.kde.org/KInfoCenter
|
||||
[6]: http://www.binarytides.com/linux-lshw-command/
|
||||
[7]: http://www.disk-image.com/faq-bootmenu.htm
|
||||
[8]: https://en.wikipedia.org/wiki/BogoMips
|
||||
[9]: https://www.dedoimedo.com/computers/grub.html
|
190
published/20190918 Adding themes and plugins to Zsh.md
Normal file
190
published/20190918 Adding themes and plugins to Zsh.md
Normal file
@ -0,0 +1,190 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (amwps290)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-11426-1.html)
|
||||
[#]: subject: (Adding themes and plugins to Zsh)
|
||||
[#]: via: (https://opensource.com/article/19/9/adding-plugins-zsh)
|
||||
[#]: author: (Seth Kenlon https://opensource.com/users/seth)
|
||||
|
||||
给 Zsh 添加主题和插件
|
||||
======
|
||||
|
||||
> 通过 Oh My Zsh 安装的主题和插件来扩展 Zsh 的功能。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/201910/05/120457r49mk2l9oelv94bi.jpg)
|
||||
|
||||
在我的[前文][2]中,我向大家展示了如何安装并使用 [Z-Shell][2] (Zsh)。对于某些用户来说,Zsh 最令人激动的是它可以安装主题。Zsh 安装主题非常容易,一方面是因为有非常活跃的社区为 Z-Shell 设计主题,另一方面是因为有 [Oh My Zsh][3] 这个项目。这使得安装主题变得轻而易举。
|
||||
|
||||
主题的变化可能会立刻吸引你的注意力,因此如果你安装了 Zsh 并且将默认的 Shell 替换为 Zsh 时,你可能不喜欢 Shell 默认主题的样子,那么你可以立即更换 Oh My Zsh 自带的 100 多个主题。Oh My Zsh 不仅拥有大量精美的主题,同时还有数以百计的扩展 Zsh 功能的插件。
|
||||
|
||||
### 安装 Oh My Zsh
|
||||
|
||||
Oh My Zsh 的[官网][3]建议你使用一个脚本在有网络的情况下来安装这个包。尽管 Oh My Zsh 项目几乎是可以令人信服的,但是盲目地在你的电脑上运行一个脚本这是一个糟糕的建议。如果你想运行这个脚本,你可以把它下载下来,看一下它实现了什么功能,在你确信你已经了解了它的所作所为之后,你就可以运行它了。
|
||||
|
||||
如果你下载了脚本并且阅读了它,你就会发现安装过程仅仅只有三步:
|
||||
|
||||
#### 1、克隆 oh-my-zsh
|
||||
|
||||
第一步,克隆 oh-my-zsh 库到 `~/.oh-my-zsh` 目录:
|
||||
|
||||
```
|
||||
% git clone http://github.com/robbyrussell/oh-my-zsh ~/.oh-my-zsh
|
||||
```
|
||||
|
||||
#### 2、切换配置文件
|
||||
|
||||
下一步,备份你已有的 `.zshrc` 文件,然后将 oh-my-zsh 自带的配置文件移动到这个地方。这两步操作可以一步完成,只需要你的 `mv` 命令支持 `-b` 这个选项。
|
||||
|
||||
```
|
||||
% mv -b \
|
||||
~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc
|
||||
```
|
||||
|
||||
#### 3、编辑配置文件
|
||||
|
||||
默认情况下,Oh My Zsh 自带的配置文件是非常简陋的。如果你想将你自己的 `~/.zshrc` 文件合并到 `.oh-my-zsh` 的配置文件中。你可以使用 [cat][4] 命令将你的旧的配置文件添加到新文件的末尾。
|
||||
|
||||
```
|
||||
% cat ~/.zshrc~ >> ~/.zshrc
|
||||
```
|
||||
|
||||
看一下默认的配置文件以及它提供的一些选项。用你最喜欢的编辑器打开 `~/.zshrc` 文件。这个文件有非常良好的注释。这是了解它的一个非常好的方法。
|
||||
|
||||
例如,你可以更改 `.oh-my-zsh` 目录的位置。在安装的时候,它默认是位于你的家目录。但是,根据 [Free Desktop][5] 所定义的现代 Linux 规范。这个目录应当放置于 `~/.local/share` 。你可以在配置文件中进行修改。如下所示:
|
||||
|
||||
```
|
||||
# Path to your oh-my-zsh installation.
|
||||
export ZSH=$HOME/.local/share/oh-my-zsh
|
||||
```
|
||||
|
||||
然后将 .oh-my-zsh 目录移动到你新配置的目录下:
|
||||
|
||||
```
|
||||
% mv ~/.oh-my-zsh $HOME/.local/share/oh-my-zsh
|
||||
```
|
||||
|
||||
如果你使用的是 MacOS,这个目录可能会有点含糊不清,但是最合适的位置可能是在 `$HOME/Library/Application\ Support`。
|
||||
|
||||
### 重新启动 Zsh
|
||||
|
||||
编辑配置文件之后,你必须重新启动你的 Shell。在这之前,你必须确定你的任何操作都已正确完成。例如,在你修改了 `.oh-my-zsh` 目录的路径之后。不要忘记将目录移动到新的位置。如果你不想重新启动你的 Shell。你可以使用 `source` 命令来使你的配置文件生效。
|
||||
|
||||
```
|
||||
% source ~/.zshrc
|
||||
➜ .oh-my-zsh git:(master) ✗
|
||||
```
|
||||
|
||||
你可以忽略任何丢失更新文件的警告;他们将会在重启的时候再次进行解析。
|
||||
|
||||
### 更换你的主题
|
||||
|
||||
安装好 oh-my-zsh 之后。你可以将你的 Zsh 的主题设置为 `robbyrussell`,这是一个该项目维护者的主题。这个主题的更改是非常小的,仅仅是改变了提示符的颜色。
|
||||
|
||||
你可以通过列出 `.oh-my-zsh` 目录下的所有文件来查看所有安装的主题:
|
||||
|
||||
```
|
||||
➜ .oh-my-zsh git:(master) ✗ ls ~/.local/share/oh-my-zsh/themes
|
||||
3den.zsh-theme
|
||||
adben.zsh-theme
|
||||
af-magic.zsh-theme
|
||||
afowler.zsh-theme
|
||||
agnoster.zsh-theme
|
||||
[...]
|
||||
```
|
||||
|
||||
想在切换主题之前查看一下它的样子,你可以查看 Oh My Zsh 的 [wiki][6] 页面。要查看更多主题,可以查看 [外部主题][7] wiki 页面。
|
||||
|
||||
大部分的主题是非常易于安装和使用的,仅仅需要改变 `.zshrc` 文件中的配置选项然后重新载入配置文件。
|
||||
|
||||
```
|
||||
➜ ~ sed -i 's/_THEME=\"robbyrussel\"/_THEME=\"linuxonly\"/g' ~/.zshrc
|
||||
➜ ~ source ~/.zshrc
|
||||
seth@darkstar:pts/0->/home/skenlon (0) ➜
|
||||
```
|
||||
|
||||
其他的主题可能需要一些额外的配置。例如,为了使用 `agnoster` 主题,你必须先安装 Powerline 字体。这是一个开源字体,如果你使用 Linux 操作系统的话,这个字体很可能在你的软件库中存在。使用下面的命令安装这个字体:
|
||||
|
||||
```
|
||||
➜ ~ sudo dnf install powerline-fonts
|
||||
```
|
||||
|
||||
在配置文件中更改你的主题:
|
||||
|
||||
```
|
||||
➜ ~ sed -i 's/_THEME=\"linuxonly\"/_THEME=\"agnoster\"/g' ~/.zshrc
|
||||
```
|
||||
|
||||
重新启动你的 Sehll(一个简单的 `source` 命令并不会起作用)。一旦重启,你就可以看到新的主题:
|
||||
|
||||
![agnoster theme][8]
|
||||
|
||||
### 安装插件
|
||||
|
||||
Oh My Zsh 有超过 200 的插件,你可以在 `.oh-my-zsh/plugins` 中看到它们。每一个扩展目录下都有一个 `README` 文件解释了这个插件的作用。
|
||||
|
||||
一些插件相当简单。例如,`dnf`、`ubuntu`、`brew` 和 `macports` 插件仅仅是为了简化与 DNF、Apt、Homebres 和 MacPorts 的交互操作而定义的一些别名。
|
||||
|
||||
而其他的一些插件则较为复杂,`git` 插件默认是被激活使用的。当你的目录是一个 git 仓库的时候,这个扩展就会更新你的 Shell 提示符,以显示当前的分支和是否有未合并的更改。
|
||||
|
||||
为了激活这个扩展,你可以将这个扩展添加到你的配置文件 `~/.zshrc` 中。例如,你可以添加 `dnf` 和 `pass` 插件,按照如下的方式更改:
|
||||
|
||||
```
|
||||
plugins=(git dnf pass)
|
||||
```
|
||||
|
||||
保存修改,重新启动你的 Shell。
|
||||
|
||||
```
|
||||
% source ~/.zshrc
|
||||
```
|
||||
|
||||
这个扩展现在就可以使用了。你可以通过使用 `dnf` 提供的别名来测试一下:
|
||||
|
||||
```
|
||||
% dnfs fop
|
||||
====== Name Exactly Matched: fop ======
|
||||
fop.noarch : XSL-driven print formatter
|
||||
```
|
||||
|
||||
不同的插件做不同的事,因此你可以一次安装一两个插件来帮你学习新的特性和功能。
|
||||
|
||||
### 兼容性
|
||||
|
||||
一些 Oh My Zsh 插件具有通用性。如果你看到一个插件声称它可以与 Bash 兼容,那么它就可以在你自己的 Bash 中使用。另一些插件需要 Zsh 提供的特定功能。因此,它们并不是所有都能工作。但是你可以添加一些其他的插件,例如 `dnf`、`ubuntu`、`firewalld`,以及其他的一些插件。你可以使用 `source` 使你的选择生效。例如:
|
||||
|
||||
```
|
||||
if [ -d $HOME/.local/share/oh-my-zsh/plugins ]; then
|
||||
source $HOME/.local/share/oh-my-zsh/plugins/dnf/dnf.plugin.zsh
|
||||
fi
|
||||
```
|
||||
|
||||
### 选择或者不选择 Zsh
|
||||
|
||||
Z-shell 的内置功能和它由社区贡献的扩展功能都非常强大。你可以把它当成你的主 Shell 使用,你也可以在你休闲娱乐的时候尝试一下。这取决于你的爱好。
|
||||
|
||||
什么是你最喜爱的主题和扩展可以在下方的评论告诉我们!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/9/adding-plugins-zsh
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[amwps290](https://github.com/amwps290)
|
||||
校对:[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/build_structure_tech_program_code_construction.png?itok=nVsiLuag (Someone wearing a hardhat and carrying code )
|
||||
[2]: https://linux.cn/article-11378-1.html
|
||||
[3]: https://ohmyz.sh/
|
||||
[4]: https://opensource.com/article/19/2/getting-started-cat-command
|
||||
[5]: http://freedesktop.org
|
||||
[6]: https://github.com/robbyrussell/oh-my-zsh/wiki/Themes
|
||||
[7]: https://github.com/robbyrussell/oh-my-zsh/wiki/External-themes
|
||||
[8]: https://opensource.com/sites/default/files/uploads/zsh-agnoster.jpg (agnoster theme)
|
||||
[9]: https://opensource.com/resources/what-is-git
|
||||
[10]: https://opensource.com/article/19/7/make-linux-stronger-firewalls
|
70
published/20190924 Fedora and CentOS Stream.md
Normal file
70
published/20190924 Fedora and CentOS Stream.md
Normal file
@ -0,0 +1,70 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (wxy)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-11412-1.html)
|
||||
[#]: subject: (Fedora and CentOS Stream)
|
||||
[#]: via: (https://fedoramagazine.org/fedora-and-centos-stream/)
|
||||
[#]: author: (Matthew Miller https://fedoramagazine.org/author/mattdm/)
|
||||
|
||||
Fedora 和 CentOS Stream
|
||||
======
|
||||
|
||||
![][1]
|
||||
|
||||
*一封来自 Fedora 项目负责人办公室的信件:*
|
||||
|
||||
(LCTT 译注:背景介绍 —— 红帽宣布与 CentOS 同步构建一个 CentOS Stream 滚动构建版。我们知道 Fedora 是红帽企业版 Linux [RHEL] 的上游,经过 Fedora 验证的特性才会放入 RHEL;而 RHEL 发布后,其源代码开放出来形成了 CentOS。而新的 CentOS Stream 则位于 Fedora 和 RHEL 之间,会滚动添加新的实验特性、更新的软件包等。)
|
||||
|
||||
嗨,大家好!你可能已经看到有关 [CentOS 项目变更][3]的[公告][2]。(如果没有,请花一些时间阅读它,我等你看完回来!)现在你可能想知道:如果 CentOS 现在位于 RHEL 的上游,那么 Fedora 会发生什么?那不是 Fedora 在 Red Hat 生态系统中的角色吗?
|
||||
|
||||
首先,不用担心。整体有一些变化,但是一切都变得更好。
|
||||
|
||||
![][4]
|
||||
|
||||
如果你一直在关注 RHEL 领导者关于 Fedora、CentOS 和 RHEL 之间关系的会议讨论,那么你就听说过 “<ruby>[彭罗斯三角][5]<rt>Penrose Triangle</rt></ruby>”。形状就像 M. C. Escher 绘图中的形状:在现实生活中这是不可能的!
|
||||
|
||||
我们已经思考了一段时间,*也许*几何不可能实际上是最好的模型。
|
||||
|
||||
一方面,想象中的流向最终的贡献会流回 Fedora 并以“良性循环”增长,但这种流从来没有真正起作用过。 真可惜,因为有一个庞大而强大的 CentOS 社区,并且有很多伟大的人在为此工作,而且 Fedora 社区也有很多重叠之处。我们错失了。
|
||||
|
||||
但是,这个缺口并不是唯一的空隙:在该项目与产品之间并没有真正一致的流程。到目前为止,该过程如下:
|
||||
|
||||
1. 在上一版 RHEL 发布之后的某个时间,红帽突然会比以往更加关注 Fedora。
|
||||
2. 几个月后,红帽将分拆出一个内部开发的 RHEL 新版本。
|
||||
3. 几个月后,它便被带到了世界各地,成为所有包括 CentOS 在内的下游发行版的来源。
|
||||
4. 这些源持续向下更新,有时这些更新包括 Fedora 中的修补程序,但没有明确的路径。
|
||||
|
||||
这里的每个步骤都有其问题:间歇性注意力、闭门开发、盲目下发以及几乎没有持续的透明度。但是现在红帽和 CentOS 项目正在解决此问题,这对 Fedora 也是个好消息。
|
||||
|
||||
**Fedora 仍将是 RHEL 的[第一个][6]上游**。这是每个 RHEL 的来源,也是 RHEL 9 的来源。但是在 RHEL 分支之后,*CentOS* 将成为上游,以继续进行那些 RHEL 版本的工作。我喜欢称其为“中游”,但营销人员却不这样称呼,因此将其称为 “CentOS Stream”。
|
||||
|
||||
我们(Fedora、CentOS 和红帽)仍需要解决各种技术细节,但是我们的想法是这些分支将存在于同一软件包源存储库中。(目前的计划是制作一个 “src.centos.org”,它具有与 [src.fedoraproject.org][7] 相同数据的并行视图)。这项更改使公众可以看到已经发布的 RHEL 上正在进行的工作,并为开发人员和红帽合作伙伴在该级别进行协作提供了场所。
|
||||
|
||||
[CentOS SIG][8](虚拟化、存储、配置管理等特殊兴趣小组)将在 Fedora 分支旁边的共享空间中开展工作。这将使项目之间的协作和共享更加容易,我希望我们甚至能够合并一些类似的 SIG,以直接协同工作。在有用的情况下,可以将 Fedora 软件包中的修补程序挑选到 CentOS “中游”中,反之亦然。
|
||||
|
||||
最终,Fedora、CentOS 和 RHEL 属于同一大型项目家族。这种新的、更自然的流程为协作提供了可能性,这些协作被锁定在人为(和超维度!)障碍的后面。我们现在可以一起做,我感到非常兴奋!
|
||||
|
||||
*—— Matthew Miller, Fedora 项目负责人*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/fedora-and-centos-stream/
|
||||
|
||||
作者:[Matthew Miller][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://fedoramagazine.org/author/mattdm/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2019/09/centos-stream-816x345.jpg
|
||||
[2]: http://redhat.com/en/blog/transforming-development-experience-within-centos
|
||||
[3]: https://wiki.centos.org/Manuals/ReleaseNotes/CentOSStream
|
||||
[4]: https://lh3.googleusercontent.com/5XMDU29DYPsFKIVLCexK46n9DqWZEa0nTjAnJcouzww-RSAzNshGW3yIxXBSBsd6KfAyUAGpxX9y0Dsh1hj21ygcAn5a7h55LrneKROkxsipdXO2gq8cgoFqz582ojOh8NU9Ix0X
|
||||
[5]: https://www.youtube.com/watch?v=1JmgOkEznjw
|
||||
[6]: https://docs.fedoraproject.org/en-US/project/#_first
|
||||
[7]: https://src.fedoraproject.org/
|
||||
[8]: https://wiki.centos.org/SpecialInterestGroup
|
56
published/20191004 In Fedora 31, 32-bit i686 is 86ed.md
Normal file
56
published/20191004 In Fedora 31, 32-bit i686 is 86ed.md
Normal file
@ -0,0 +1,56 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (wxy)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-11424-1.html)
|
||||
[#]: subject: (In Fedora 31, 32-bit i686 is 86ed)
|
||||
[#]: via: (https://fedoramagazine.org/in-fedora-31-32-bit-i686-is-86ed/)
|
||||
[#]: author: (Justin Forbes https://fedoramagazine.org/author/jforbes/)
|
||||
|
||||
Fedora 31 将放弃 32 位 i686 支持
|
||||
======
|
||||
|
||||
![][1]
|
||||
|
||||
Fedora 31 中[丢弃了][2] 32 位 i686 内核及其可启动镜像。虽然可能有一些用户仍然拥有无法与 64 位 x86_64 内核一起使用的硬件,但数量很少。本文为你提供了这次更改背后的整个事情,以及在 Fedora 31 中仍然可以找到的 32 位元素。
|
||||
|
||||
### 发生了什么?
|
||||
|
||||
i686 架构实质上从 [Fedora 27 版本][3]就进入了社区支持阶段(LCTT 译注:不再由官方支持)。不幸的是,社区中没有足够的成员愿意做维护该体系结构的工作。不过请放心,Fedora 不会删除所有 32 位软件包,仍在构建许多 i686 软件包,以确保诸如 multilib、wine 和 Steam 之类的东西可以继续工作。
|
||||
|
||||
尽管该存储库不再构建和镜像输出,但存在一个 koji i686 存储库,该库可与 mock 一起使用以构建 32 位程序包,并且可以在紧要关头安装不属于 x86_64 multilib 存储库的 32 位版本。当然,维护人员希望这样做解决有限的使用场景。只是需要运行一个 32 位应用程序的用户应该可以在 64 位系统上使用 multilib 来运行。
|
||||
|
||||
### 如果你要运行 32 位应用需要做什么?
|
||||
|
||||
如果你仍在运行 32 位 i686 系统,则会在 Fedora 30 生命周期中继续收到受支持的 Fedora 更新。直到大约 2020 年 5 月或 6 月。到那时,如果硬件支持,你可以将其重新安装为 64 位 x86_64,或者如果可能的话,将其替换为支持 64 位的硬件。
|
||||
|
||||
社区中有一个用户已经成功地从 32 位 Fedora “升级” 到了 64 位 x86 Fedora。虽然这不是预期或受支持的升级路径,但应该也可行。该项目希望可以为具有 64 位功能的硬件的用户提供一些文档,以在 Fedora 30 使用寿命终止之前说明该升级过程。
|
||||
|
||||
如果有 64 位的 CPU,但由于内存不足而运行 32 位 Fedora,请尝试[备用桌面流派][4]之一。LXDE 和其他产品在内存受限的环境中往往表现良好。对于仅在旧的可以扔掉的 32 位硬件上运行简单服务器的用户,请考虑使用较新的 ARM 板之一。在许多情况下,仅节能一项就可以支付新硬件的费用。如果以上皆不可行,[CentOS 7][5] 提供了一个 32 位镜像,并对该平台提供长期支持。
|
||||
|
||||
### 安全与你
|
||||
|
||||
尽管有些用户可能会在生命周期结束后继续运行旧版本的 Fedora,但强烈建议不要这样做。人们不断研究软件的安全问题。通常,他们发现这些问题已经存在多年了。
|
||||
|
||||
一旦 Fedora 维护人员知道了此类问题,他们通常会为它们打补丁,并为支持的发行版提供更新,而不会给使用寿命已终止的发行版提供。当然,一旦这些漏洞公开,就会有人尝试利用它们。如果你在生命周期结束时运行了较旧的发行版,则安全风险会随着时间的推移而增加,从而使你的系统面临不断增长的风险。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/in-fedora-31-32-bit-i686-is-86ed/
|
||||
|
||||
作者:[Justin Forbes][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://fedoramagazine.org/author/jforbes/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2019/09/i686-86-816x345.jpg
|
||||
[2]: https://fedoraproject.org/wiki/Changes/Stop_Building_i686_Kernels
|
||||
[3]: https://fedoramagazine.org/announcing-fedora-27/
|
||||
[4]: https://spins.fedoraproject.org
|
||||
[5]: https://centos.org
|
||||
[6]: https://unsplash.com/@alexkixa?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
||||
[7]: https://unsplash.com/s/photos/motherboard?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
77
sources/news/20191002 Fedora projects for Hacktoberfest.md
Normal file
77
sources/news/20191002 Fedora projects for Hacktoberfest.md
Normal file
@ -0,0 +1,77 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Fedora projects for Hacktoberfest)
|
||||
[#]: via: (https://fedoramagazine.org/fedora-projects-for-hacktoberfest/)
|
||||
[#]: author: (Ben Cotton https://fedoramagazine.org/author/bcotton/)
|
||||
|
||||
Fedora projects for Hacktoberfest
|
||||
======
|
||||
|
||||
![][1]
|
||||
|
||||
It’s October! That means its time for the annual [Hacktoberfest][2] presented by DigitalOcean and DEV. Hacktoberfest is a month-long event that encourages contributions to open source software projects. Participants who [register][3] and submit at least four pull requests to GitHub-hosted repositories during the month of October will receive a free t-shirt.
|
||||
|
||||
In a recent Fedora Magazine article, I listed some areas where would-be contributors could [get started contributing to Fedora][4]. In this article, I highlight some specific projects that provide an opportunity to help Fedora while you participate in Hacktoberfest.
|
||||
|
||||
### Fedora infrastructure
|
||||
|
||||
* [Bodhi][5] — When a package maintainer builds a new version of a software package to fix bugs or add new features, it doesn’t go out to users right away. First it spends time in the updates-testing repository where in can receive some real-world usage. Bodhi manages the flow of updates from the testing repository into the updates repository and provides a web interface for testers to provide feedback.
|
||||
* [the-new-hotness][6] — This project listens to [release-monitoring.org][7] (which is also on [GitHub][8]) and opens a Bugzilla issue when a new upstream release is published. This allows package maintainers to be quickly informed of new upstream releases.
|
||||
* [koschei][9] — koschei enables continuous integration for Fedora packages. It is software for running a service for scratch-rebuilding RPM packages in Koji instance when their build-dependencies change or after some time elapses.
|
||||
* [MirrorManager2][10] — Distributing Fedora packages to a global user base requires a lot of bandwidth. Just like developing Fedora, distributing Fedora is a collaborative effort. MirrorManager2 tracks the hundreds of public and private mirrors and routes each user to the “best” one.
|
||||
* [fedora-messaging][11] — Actions within the Fedora community—from source code commits to participating in IRC meetings to…lots of things—generate messages that can be used to perform automated tasks or send notifications. fedora-messaging is the tool set that makes sending and receiving these messages possible.
|
||||
* [fedocal][12] — When is that meeting? Which IRC channel was it in again? Fedocal is the calendar system used by teams in the Fedora community to coordinate meetings. Not only is it a good Hacktoberfest project, it’s also [looking for a new maintainer][13] to adopt it.
|
||||
|
||||
|
||||
|
||||
In addition to the projects above, the Fedora Infrastructure team has highlighted [good Hacktoberfest issues][14] across all of their GitHub projects.
|
||||
|
||||
### Community projects
|
||||
|
||||
* [bodhi-rs][15] — This project provides Rust bindings for Bodhi.
|
||||
* [koji-rs][16] — Koji is the system used to build Fedora packages. Koji-rs provides bindings for Rust applications.
|
||||
* [fedora-rs][17] — This project provides a Rust library for interacting with Fedora services like other languages like Python have.
|
||||
* [feedback-pipeline][18] — One of the current Fedora Council objectives is [minimization][19]: work to reduce the installation and patching footprint of Fedora releases. feedback-pipeline is a tool developed by this team to generate reports of RPM sizes and dependencies.
|
||||
|
||||
|
||||
|
||||
### And many more
|
||||
|
||||
The projects above are only a small sample focused on software used to build Fedora. Many Fedora packages have upstreams hosted on GitHub—too many to list here. The best place to start is with a project that’s important to you. Any contributions you make help improve the entire open source ecosystem. If you’re looking for something in particular, the [Join Special Interest Group][20] can help. Happy hacking!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/fedora-projects-for-hacktoberfest/
|
||||
|
||||
作者:[Ben Cotton][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://fedoramagazine.org/author/bcotton/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2019/09/hacktoberfest-816x345.jpg
|
||||
[2]: https://hacktoberfest.digitalocean.com/
|
||||
[3]: https://hacktoberfest.digitalocean.com/register
|
||||
[4]: https://fedoramagazine.org/how-to-contribute-to-fedora/
|
||||
[5]: https://github.com/fedora-infra/bodhi
|
||||
[6]: https://github.com/fedora-infra/the-new-hotness
|
||||
[7]: https://release-monitoring.org/
|
||||
[8]: https://github.com/release-monitoring/anitya
|
||||
[9]: https://github.com/fedora-infra/koschei
|
||||
[10]: https://github.com/fedora-infra/mirrormanager2
|
||||
[11]: https://github.com/fedora-infra/fedora-messaging
|
||||
[12]: https://github.com/fedora-infra/fedocal
|
||||
[13]: https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/GH4N3HYJ4ARFRP666O6EQCHDIQMXVUJB/
|
||||
[14]: https://github.com/orgs/fedora-infra/projects/4
|
||||
[15]: https://github.com/ironthree/bodhi-rs
|
||||
[16]: https://github.com/ironthree/koji-rs
|
||||
[17]: https://github.com/ironthree/fedora-rs
|
||||
[18]: https://github.com/minimization/feedback-pipeline
|
||||
[19]: https://docs.fedoraproject.org/en-US/minimization/
|
||||
[20]: https://fedoraproject.org/wiki/SIGs/Join
|
@ -0,0 +1,77 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (How Open Source Software Lets Us Push It to the Limit)
|
||||
[#]: via: (https://opensourceforu.com/2019/09/how-open-source-software-lets-us-push-it-to-the-limit/)
|
||||
[#]: author: (Ebbe Kernel https://opensourceforu.com/author/ebbe-kernel/)
|
||||
|
||||
How Open Source Software Lets Us Push It to the Limit
|
||||
======
|
||||
|
||||
[![best text editors for web development][1]][2]
|
||||
|
||||
_Here is a conversation with Johan, a leading developer of an advanced proxy network. As his team tackles complex load-balancing problems, they are constantly forced to push their solutions beyond what the original developers imagined. He says that the decision to use an open source load-balancer HAProxy has made it possible to do what would not be possible with other solutions._
|
||||
|
||||
**Ebbe: Tell us a bit about why you chose HAProxy for load-balancing.**
|
||||
|
||||
**Johan: **Even though we use both open source and private source solutions for our network, I am a real ambassador for open source in our team. I think HAProxy is a perfect example of a great solution for a particular problem that can be adapted in unforeseen ways precisely because it is open sourced.
|
||||
|
||||
Ever since we started work developing our proxy network, I looked into using an open source solution for load-balancing. We tried Nginx and Squid, but we soon realized that HAProxy is an indisputable industry standard and the only option for our product.
|
||||
|
||||
**Ebbe: What made it exemplary?**
|
||||
|
||||
**Johan: **What I’ve found with great open source software is that it must be constantly evolving, updated and managed. And in the case of HAProxy, we get minor updates every month. At first we liked the quick bug fixes. But now we jumped the waggon on the new major release, as it offered new features we were aching to implement.
|
||||
|
||||
Everyone knows that you do not update any working solutions until the last minute to make sure that early bugs are fixed, but good software [_offers features you can’t resist_][3]. We trust it because it is transparent and has a strong community that has proven it can tackle most issues quickly.
|
||||
|
||||
**Ebbe: You mentioned the community, which often accompanies great open source solutions. Does it really have that much of an impact for your business?**
|
||||
|
||||
**Johan:** Of course. In terms of scale, everything pales in comparison to the community that HAProxy has mustered over the years. Every issue we encounter is usually solved or already escalated, and, as more and more companies use HAProxy, the community becomes vaster and more intelligent.
|
||||
|
||||
What we’ve found with other services we use, even enterprise solutions might not offer the freedom and flexibility we need. In our case, an active community is what makes it possible to adapt software in previously untested ways.
|
||||
|
||||
**Ebbe: What in particular does it let you do?**
|
||||
|
||||
**Johan: **Since we chose HAProxy to use in our network, we found that creating ‘add-ons’ with Lua let us fully customize it to our own logic and integrate it with all of the other services that make the network work. This was extremely important, as we have a lot of services that need to work together, including some that are not open source.
|
||||
|
||||
Another great thing is that the community is always solving problems and bugs, so we do not really encounter stuff we couldn’t handle. Over the years, I’ve found that this is only possible for open source software.
|
||||
|
||||
What makes it a truly exceptional open source solution is the documentation. Even though I’ve been working closely with HAProxy for over two years, I still find new things almost every month.
|
||||
|
||||
I know it sounds like a lot of praise, but I really love HAProxy for its resilience to our constant attempts to break it.
|
||||
|
||||
**Ebbe: What do you mean by ‘break it’?**
|
||||
|
||||
**Johan: **Originally, HAProxy works great as [_a load balancer for a couple of dozen servers_][4], usually 10 to 20. But, since our network is several orders of magnitude larger, we’ve constantly pushed it to its limits.
|
||||
|
||||
It’s not uncommon for our HAProxy instances to load-balance over 10,000 servers, and we are certain that the original developers haven’t thought about optimizing it for these kind of loads. Due to this, it sometimes fails, but we are constantly optimizing our own solutions to make everything work. And, thanks to HAProxy’s developers and community, we are able to solve most of the issues we encounter easily.
|
||||
|
||||
**Ebbe: Doesn’t this downtime impact your product negatively?**
|
||||
|
||||
**Johan: **First of all, our product would not work without HAProxy. At least not as successfully as it has over the years. As I’ve said, all other solutions on the market are less optimized for what we do than HAProxy.
|
||||
|
||||
Also, ‘breaking’ a service is nothing bad in and of itself. We always have backup services in place to handle the network. Testing in production is what we do for a simple reason: since we ‘break’ the HAProxy so much, we cannot really test any updates before launching something on our network. We need the full scale of our network to run HAProxy instances and all the millions of servers to be available, and creating such a testing environment seems like a huge waste of resources.
|
||||
|
||||
**Ebbe: Do you have anything to add to the community of OpenSourceForU.com?**
|
||||
|
||||
**Johan: **My team and I want to thank everyone for supporting open source principles and making the world a better place!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensourceforu.com/2019/09/how-open-source-software-lets-us-push-it-to-the-limit/
|
||||
|
||||
作者:[Ebbe Kernel][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensourceforu.com/author/ebbe-kernel/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://i2.wp.com/opensourceforu.com/wp-content/uploads/2017/07/developer-blog.jpg?resize=696%2C433&ssl=1 (text editor)
|
||||
[2]: https://i2.wp.com/opensourceforu.com/wp-content/uploads/2017/07/developer-blog.jpg?fit=750%2C467&ssl=1
|
||||
[3]: https://smartproxy.com/what-is-a-proxy
|
||||
[4]: https://opensourceforu.com/2016/09/github-open-sources-internal-load-balancer/
|
@ -0,0 +1,90 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (Earning, spending, saving: The currency of influence in open source)
|
||||
[#]: via: (https://opensource.com/open-organization/19/10/gaining-influence-open-community)
|
||||
[#]: author: (ldimaggi https://opensource.com/users/ldimaggi)
|
||||
|
||||
Earning, spending, saving: The currency of influence in open source
|
||||
======
|
||||
In open organizations, people gain influence primarily through
|
||||
contribution—not formal title or position in a hierarchy. To make an
|
||||
impact in yours, start here.
|
||||
![Bees on a hive, connected by dots][1]
|
||||
|
||||
The acquisition and application of influence is a vital aspect of any organization. But the manner in which people acquire influence can vary widely. In traditional, hierarchical organizations, for example, someone might acquire influence by virtue of their title or position in a hierarchy. In government organizations, someone might acquire influence by virtue of being elected. On social media, someone might acquire influence through endless self-promotion. Or someone might acquire influence through inheritance or wealth.
|
||||
|
||||
In open source communities, influence operates differently. It can't be bought, inherited, elected through a ballot, bestowed through a job title, or gained through celebrity. In this world, influence must be _earned_ through the merit of the contributions one makes to a team, organization, or community.
|
||||
|
||||
In [open organizations][2]—which often look to open source communities as models for a more dynamic, inclusive, and innovative way to operate, as Jim Whitehurst explains in _The Open Organization_—[influence operates the same way][3]. "Everyone has the ability to earn influence and to get his or her ideas heard," Whitehurst writes. "It simply related to how effective you are at presenting and getting people behind your ideas, throughout the organization." So anyone hoping to succeed in an open organization must understand how to acquire, manage, and leverage influence in ways that may not come naturally to them.
|
||||
|
||||
In this two-part series, we'll draw on our experiences in open source software development to examine the mechanics of influence in open organizations. In this installment, we'll explain how influence is acquired in an open organization. We'll also offer advice on ways one might _earn_ influence in these organizations—and some tips on behaviors to avoid.
|
||||
|
||||
### The currency of influence
|
||||
|
||||
Even though you can't buy it, influence behaves like a form of virtual currency in an open source community: a scarce resource, always needed, but also always in short supply. One must earn it through contributions to an open source project or community. In contrast to monetary currency, however, influence is not _transferable_. You must earn it for yourself. You can neither give nor receive it as a gift.
|
||||
|
||||
In traditional organizational structures, influence follows an organization's top-down, command and control pattern—and influence is largely the result of one's position in a hierarchy. People at the top of those hierarchical structures make decisions, and those decisions flow downward to everyone else. The model is relatively stable, frequently rigid, and [can encounter difficulties when conditions change][4].
|
||||
|
||||
But as Eric Raymond argues in _The Cathedral and the Bazaar,_ open source communities don't operate in this "cathedral"-style manner. They work more like "bazaars," where act activity, power, and influence cut across formal lines of command and control. In an open organization therefore, influence _must be earned_. Influence _not_ earned can be corrosive in an open organization.
|
||||
|
||||
That's because open organizations [are more communal][2]. The modern word "community" has as its root the Latin word "communitas," which has as part of its definition "public spirit, a sense of duty and willingness to serve one's community." This definition (and how it relates to your motivation for being involved in a community) is an important place to begin thinking about what it means to have influence in an open organization—and how you can acquire that influence.
|
||||
|
||||
### Acquiring influence
|
||||
|
||||
In open source communities, influence operates differently. It can't be bought, inherited, elected through a ballot, bestowed through a job title, or gained through celebrity.
|
||||
|
||||
When starting out—in an open source community or an open organization—you'll need a level of interest in and an honest commitment to the goals and mission of the community.
|
||||
|
||||
Note our careful and intentional choice of the word "honest." Your intentions for acquiring influence must have at their root the goal of furthering the mission of the community. Your commitment must be to the _community itself_—not to the community insofar as it functions like a vehicle for self-promotion or padding your resume. Any attempts to use the community as a stepping stone will probably fail, as other members of the community will quickly discover your true motives. The open nature of an open source community means that insincerity has no place to hide, and when found, will be exposed. The "glue" that holds an open source community together is a commitment to the community's goals, the value that the community's projects provide, and ultimately, the community's output (most notably, the code it creates). The same is true in any open organization, no matter what it aims to produce.
|
||||
|
||||
As with any durable and meaningful relationship, making a commitment to a community takes time. In order to acquire influence in a community, you'll need to _invest_ in that community. You cannot "parachute into" a community and acquire influence overnight.
|
||||
|
||||
So how _can_ you begin?
|
||||
|
||||
In open source communities, before you start churning out code and documentation, you have to _watch, listen, and learn_ before you act. You don't want to act in such a way that community members will think of you as an uninvited guest. Successful contributors are those that study a project and understand its goals, accomplishments, and challenges. They watch how the community _functions_. They figure out who the most active members are. They understand the types of contributions that accepted and which get rejected. Only then can they be ready to contribute.
|
||||
|
||||
When preparing to attain influence in an open organization, look for problems that need solving. That way, your contributions take the form of _solutions_ as opposed to unwanted *additions (*new features, etc., in software communities). Occasionally you can make progress faster by moving _slowly_—easing into the community, as opposed to jumping into the pool and trying to make a big splash (you end up just spilling water into everyone's drinks).
|
||||
|
||||
The level of influence that you can earn is directly proportional to the scope and value of the contributions that you make to the community. By becoming a _contributor_ to an open community, you also earn the _credibility_ you'll need to achieve some level of influence in that community and on its projects.
|
||||
|
||||
Having your contributions noticed in and embraced by the community is always nice. When this happens, you will receive some notoriety (in open source code communities, for example, this can come in the form of pull request comments, recognition in blog posts, or other online acknowledgements and thanks). While it's fine for you to publicize these accomplishments and the growing influence in the community that these that these represent, refrain from public self-congratulations and self-promotion. The community should remain the center of attention.
|
||||
|
||||
### Meritocracy != democracy
|
||||
|
||||
When acquiring influence in an open community, always pay attention to that community's governance model. Most open source coding communities, for example, aren't democracies; [they're meritocracies][5]. Ideas presented to the teams must be vetted and critically reviewed by the team in order to ensure that they provide value to the community. Changes do not take place in a vacuum, as they can affect many other people's work.
|
||||
|
||||
Practically speaking, this means that in open organizations everyone and anyone has the ability to voice an opinion. Transparency rules, and it's the key to giving everyone a fair opportunity to express opinions and thoughts. In an open source software project, for instance, anyone can open issues, respond to issues, provide code for features, influence new features, and so on. "Open" means, anyone and everyone can see the code, comment on it, raise issues against it, and provide fixes and features. Leaders in open source software communities derive their leadership capabilities from the merit of their contributions and respect these have garnered them from the community.
|
||||
|
||||
When preparing to attain influence in an open organization, look for problems that need solving. That way, your contributions take the form of solutions as opposed to unwanted additions.
|
||||
|
||||
However, these leaders don't _command_ the open source software communities or impose arbitrary rules or opinions—mainly because everyone would ignore their commands and leave if they tried to do so. Transparency and partnership is what attracts community members to a project and grows a community successfully.
|
||||
|
||||
In the end, a leader in an open organization would fail miserably if he or she had to deliver everything personally. In fact, it's a mistake for a leader to attempt to do this. Contributions from the community are not a luxury "extra" for an open organization; they're vital to its success.
|
||||
|
||||
### Patience and perseverance
|
||||
|
||||
Think of a world-class athlete, someone born with an innate skill may quickly rise to the top of his or her sport at a young age. Overcoming a serious injury might force that athlete to learn patience (and perhaps some humility, too) during a long rehabilitation, where even small steps forwards are painful and time-consuming.
|
||||
|
||||
Likewise, building credibility in an open source community is a long process. Influence can take years to develop. So patience and persistence are _crucial_. Early on, the process can seem daunting; the whole world is available to be influenced, yet you deploy patience by taking a step by step approach to starting small and thinking big. Like ripples in a pond when you drop a stone, your influence in your immediate circle of connections can grow through those connections to other people too and spread over time. In the second installment, then, we'll explain how influence, once acquired, can be applied in an open organization.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/open-organization/19/10/gaining-influence-open-community
|
||||
|
||||
作者:[ldimaggi][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/ldimaggi
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/OSDC_bees_network.png?itok=NFNRQpJi (Bees on a hive, connected by dots)
|
||||
[2]: https://opensource.com/open-organization/resources/open-org-definition
|
||||
[3]: https://opensource.com/open-organization/16/8/how-make-meritocracy-work
|
||||
[4]: https://opensource.com/open-organization/16/3/fastest-result-isnt-always-best-result
|
||||
[5]: https://opensource.com/open-organization/17/2/new-perspective-meritocracy
|
@ -0,0 +1,100 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: ( )
|
||||
[#]: reviewer: ( )
|
||||
[#]: publisher: ( )
|
||||
[#]: url: ( )
|
||||
[#]: subject: (How to keep your messages private with an open source app)
|
||||
[#]: via: (https://opensource.com/article/19/10/secure-private-messaging)
|
||||
[#]: author: (Chris Hermansen https://opensource.com/users/clhermansen)
|
||||
|
||||
How to keep your messages private with an open source app
|
||||
======
|
||||
Even encrypted messaging apps are leveraging your private data to sell
|
||||
you things.
|
||||
![Chat via email][1]
|
||||
|
||||
Messaging apps have changed how we communicate. Where would we be today without [SMS][2]? Can you imagine returning to a world where near-instant communication is not pervasive?
|
||||
|
||||
We have lots of messaging options in addition to SMS and [MMS][3]. There are [Skype][4], [iMessage][5], [Facebook Messenger][6], [Twitter][7] (with and without direct messages), [WeChat][8], [WhatsApp][9], [SnapChat][10], and more. Many of them are encrypted, and many people presume that their communications on these apps are private and secure. But are they really? Cloud-hosted applications that are harvesting metadata from your conversations, then using it to sell you products that support their services, may not be your friends after all.
|
||||
|
||||
### Risks of using messaging systems
|
||||
|
||||
Fellow Opensource.com Community Moderator [Chris Hermansen][11] shares my concern about the growing invasion of our privacy by online communication tools. Chris says, "in my household, it's safe to say that we're not comfortable with commercial interests recording our every online move and using every possible gap to promote goods, services, points of view, and so on, or to promote themselves to others based on using our data."
|
||||
|
||||
[Employers are using social media account information][12] within their hiring and firing decision-making process, he says. And it's not just to check whether the candidate's or employee's online personality conflicts with company values; in many cases, candidates who don't have a social media presence are unlikely to get an interview.
|
||||
|
||||
He is also concerned about certain apps that allow message senders to see when recipients open their messages. He says, "I did not opt into that kind of sharing, and it seems the only way to opt out is to use software that is specifically designed to block this kind of unauthorized abuse, which may, in turn, block me from other, legitimate web content."
|
||||
|
||||
### Hide those prying eyes
|
||||
|
||||
Chris recently told me about [Signal][13], which ticks all the right boxes for those of us who have had enough of these prying eyes. The organization behind Signal is open, so we can know what it's doing with our data. (The answer? [Not very much at all][14].) Moreover, the organization is dedicated to broadening the use of Signal without harvesting user data, and all communications are encrypted end-to-end with the keys stored on users' devices.
|
||||
|
||||
In addition, the mobile app is robust and reliable and enables users to make video and voice calls over the internet. [Chris' family has been using Signal for the past 18 months][15] or so to communicate around the world, and he says that "the call quality is far, far better than with the competition." I also find that Signal provides extremely high voice and video call quality, even over long-distance connections that often bamboozle other communications applications.
|
||||
|
||||
"I prefer to have Signal also manage my SMS traffic," says Chris, "and I'll often open my Signal app to make a call to a fellow Signal user rather than telephoning."
|
||||
|
||||
Chris and I aren't the only ones who like using Signal. In 2017, the U.S. Senate Sergeant-at-Arms [approved][16] the app for lawmakers and their staffs to use.
|
||||
|
||||
Chris has only a couple of complaints about Signal. The first is that the desktop application (in Linux, anyway) isn't as full-featured as the mobile application. For instance, the desktop app can't make video or voice calls nor send or receive SMS. This isn't a show-stopper, but it would surely be nice when your cellphone battery is low or when it's easier to use your big screen and headset than a small mobile device.
|
||||
|
||||
### Using Signal
|
||||
|
||||
It is easy to [install Signal][17] on [Android][18], [iOS][19], Windows, MacOS, and Debian-based Linux distributions, and it offers excellent support [documentation][20] with detailed installation instructions for each operating system. You can also link devices, like laptops and desktops, that run one of the supported operating systems.
|
||||
|
||||
Signal uses your existing mobile number, provided it can send and receive SMS and phone calls. The first time you set Signal up on your mobile phone, the application can search your address book for any of your contacts who use it.
|
||||
|
||||
Signal is openly licensed with the [GNU Public License 3.0][21], and you can inspect the source code on [GitHub][22].
|
||||
|
||||
### Signal's future
|
||||
|
||||
In early 2018, Signal received $50 million in funding from WhatsApp co-founder [Brian Acton][23]. With that cash infusion, Signal founder [Moxie Marlinspike][24] and Acton founded a new non-profit, 501(c)(3) organization named the [Signal Foundation][25].
|
||||
|
||||
Marlinspike says Signal plans to use Acton's investment to "increase the size of our team, our capacity, and our ambitions. This means reduced uncertainty on the path to sustainability, and the strengthening of our long-term goals and values. Perhaps most significantly, the addition of Brian brings an incredibly talented engineer and visionary with decades of experience building successful products to our team."
|
||||
|
||||
Signal is currently looking for [developers][26] who have skills with iOS, Rust, Android, and more, as well as people interested in supporting it with financial [donations][27].
|
||||
|
||||
To learn more, you can follow Signal on [Twitter][28], [Instagram][29], and its [blog][30].
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/19/10/secure-private-messaging
|
||||
|
||||
作者:[Chris Hermansen][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/clhermansen
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/email_chat_communication_message.png?itok=LKjiLnQu (Chat via email)
|
||||
[2]: https://en.wikipedia.org/wiki/SMS
|
||||
[3]: https://en.wikipedia.org/wiki/Multimedia_Messaging_Service
|
||||
[4]: https://www.skype.com/en/
|
||||
[5]: https://en.wikipedia.org/wiki/IMessage
|
||||
[6]: https://www.messenger.com/
|
||||
[7]: https://twitter.com/?lang=en
|
||||
[8]: https://play.google.com/store/apps/details?id=com.tencent.mm&hl=en
|
||||
[9]: https://www.whatsapp.com/
|
||||
[10]: https://www.snapchat.com/
|
||||
[11]: https://opensource.com/users/clhermansen
|
||||
[12]: https://www.businessnewsdaily.com/2377-social-media-hiring.html
|
||||
[13]: https://signal.org/
|
||||
[14]: https://en.wikipedia.org/wiki/Signal_(software)
|
||||
[15]: https://opensource.com/article/19/3/open-messenger-client
|
||||
[16]: https://thehill.com/policy/cybersecurity/333802-sen-staff-can-use-signal-for-encrypted-chat
|
||||
[17]: https://signal.org/download/
|
||||
[18]: https://play.google.com/store/apps/details?id=org.thoughtcrime.securesms&referrer=utm_source%3DOWS%26utm_medium%3DWeb%26utm_campaign%3DNav
|
||||
[19]: https://apps.apple.com/us/app/signal-private-messenger/id874139669
|
||||
[20]: https://support.signal.org
|
||||
[21]: https://github.com/signalapp/Signal-iOS/blob/master/LICENSE
|
||||
[22]: https://github.com/signalapp
|
||||
[23]: https://en.wikipedia.org/wiki/Brian_Acton
|
||||
[24]: https://moxie.org/
|
||||
[25]: https://signal.org/blog/signal-foundation/
|
||||
[26]: https://signal.org/workworkwork/
|
||||
[27]: https://signal.org/donate/
|
||||
[28]: https://twitter.com/signalapp
|
||||
[29]: https://www.instagram.com/signal_app/
|
||||
[30]: https://signal.org/blog/
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user