2019年10月

你在 Linux 上是怎么玩游戏的呢? 让我猜猜,要不就是从软件中心直接安装,要不就选 Steam、GOG、Humble Bundle 等平台,对吧?但是,如果你有多个游戏启动器和客户端,又要如何管理呢?好吧,对我来说这简直令人头疼 —— 这也是我发现 GameHub 这个应用之后,感到非常高兴的原因。

GameHub 是为 Linux 发行版设计的一个桌面应用,它能让你“集中管理你的所有游戏”。这听起来很有趣,是不是?下面让我来具体说明一下。

集中管理不同平台 Linux 游戏的 GameHub

让我们看看,对玩家来说,让 GameHub 成为一个不可或缺的 Linux 应用的功能,都有哪些。

Steam、GOG & Humble Bundle 支持

它支持 Steam、GOGHumble Bundle 账户整合。你可以登录你的 GameHub 账号,从而在你的库管理器中管理所有游戏。

对我来说,我在 Steam 上有很多游戏,Humble Bundle 上也有一些。我不能确保它支持所有平台,但可以确信的是,主流平台游戏是没有问题的。

支持原生游戏

有很多网站专门推荐 Linux 游戏,并支持下载。你可以通过下载安装包,或者添加可执行文件,从而管理原生游戏。

可惜的是,现在无法在 GameHub 内搜索 Linux 游戏。如上图所示,你需要分别下载游戏,随后再将其添加到 GameHub 中。

模拟器支持

用模拟器,你可以在 Linux 上玩复古游戏。正如上图所示,你可以添加模拟器(并导入模拟的镜像)。

你可以在 RetroArch 查看已有的模拟器,但也能根据需求添加自定义模拟器。

用户界面

Gamehub 界面选项

当然,用户体验很重要。因此,探究下用户界面都有些什么,也很有必要。

我个人觉得,这一应用很容易使用,并且黑色主题是一个加分项。

手柄支持

如果你习惯在 Linux 系统上用手柄玩游戏 —— 你可以轻松在设置里添加,启用或禁用它。

多个数据提供商

因为它需要获取你的游戏信息(或元数据),也意味着它需要一个数据源。你可以看到下图列出的所有数据源。

Data Providers Gamehub

这里你什么也不用做 —— 但如果你使用的是 steam 之外的其他平台,你需要为 IDGB 生成一个 API 密钥

我建议只有出现 GameHub 中的提示/通知,或有些游戏在 GameHub 上没有任何描述/图片/状态时,再这么做。

兼容性选项

你有不支持在 Linux 上运行的游戏吗?

不用担心,GameHub 上提供了多种兼容工具,如 Wine/Proton,你可以利用它们来玩游戏。

我们无法确定具体哪个兼容工具适用于你 —— 所以你需要自己亲自测试。然而,对许多游戏玩家来说,这的确是个很有用的功能。

GameHub: 如何安装它呢?

首先,你可以直接在软件中心或者应用商店内搜索。 它在 “Pop!\_Shop” 之下。所以,它在绝大多数官方源中都能找到。

如果你在这些地方都没有找到,你可以手动添加源,并从终端上安装它,你需要输入以下命令:

sudo add-apt-repository ppa:tkashkin/gamehub
sudo apt update
sudo apt install com.github.tkashkin.gamehub

如果你遇到了 “add-apt-repository command not found” 这个错误,你可以看看,add-apt-repository not found error.这篇文章,它能帮你解决这一问题。

这里还提供 AppImage 和 FlatPak 版本。 在官网 上,你可以针对找到其他 Linux 发行版的安装手册。

同时,你还可以从它的 GitHub 页面下载之前版本的安装包.

GameHub

如何在 GameHub 上管理你的游戏?

在启动程序后,你可以将自己的 Steam/GOG/Humble Bundle 账号添加进来。

对于 Steam,你需要在 Linux 发行版上安装 Steam 客户端。一旦安装完成,你可以轻松将账号中的游戏导入 GameHub。

对于 GOG & Humble Bundle,登录后,就能直接在 GameHub 上管理游戏了。

如果你想添加模拟器或者本地安装文件,点击窗口右上角的 “+” 按钮进行添加。

如何安装游戏?

对于 Steam 游戏,它会自动启动 Steam 客户端,从而下载/安装游戏(我希望之后安装游戏,可以不用启动 Steam!)

但对于 GOG/Humble Bundle,登录后就能直接、下载安装游戏。必要的话,对于那些不支持在 Linux 上运行的游戏,你可以使用兼容工具。

无论是模拟器游戏,还是本地游戏,只需添加安装包或导入模拟器镜像就可以了。这里没什么其他步骤要做。

注意

GameHub 是相当灵活的一个集中游戏管理应用。 用户界面和选项设置也相当直观。

你之前是否使用过这一应用呢?如果有,请在评论里写下你的感受。

而且,如果你想尝试一些与此功能相似的工具/应用,请务必告诉我们。


via: https://itsfoss.com/gamehub/

作者:Ankush Das 选题:lujun9972 译者:wenwensnow 校对:wxy

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

你应该已经注意到,在 Linux 中使用 ls 命令 列出的目录内容中,目录的大小仅显示 4KB。这个大小正确吗?如果不正确,那它代表什么,又该如何获取 Linux 中的目录或文件夹大小?这是一个默认的大小,是用来存储磁盘上存储目录的元数据的大小。

Linux 上有一些应用程序可以 获取目录的实际大小。其中,磁盘使用率(du)命令已被 Linux 管理员广泛使用。

我将向您展示如何使用各种选项获取文件夹大小。

什么是 du 命令?

du 命令 表示 磁盘使用率 Disk Usage 。这是一个标准的 Unix 程序,用于估计当前工作目录中的文件空间使用情况。

它使用递归方式总结磁盘使用情况,以获取目录及其子目录的大小。

如同我说的那样, 使用 ls 命令时,目录大小仅显示 4KB。参见下面的输出。

$ ls -lh | grep ^d

drwxr-xr-x  3 daygeek daygeek 4.0K Aug  2 13:57 Bank_Details
drwxr-xr-x  2 daygeek daygeek 4.0K Mar 15  2019 daygeek
drwxr-xr-x  6 daygeek daygeek 4.0K Feb 16  2019 drive-2daygeek
drwxr-xr-x 13 daygeek daygeek 4.0K Jan  6  2019 drive-mageshm
drwxr-xr-x 15 daygeek daygeek 4.0K Sep 29 21:32 Thanu_Photos

1) 在 Linux 上如何只获取父目录的大小

使用以下 du 命令格式获取给定目录的总大小。在该示例中,我们将得到 /home/daygeek/Documents 目录的总大小。

$ du -hs /home/daygeek/Documents
或
$ du -h --max-depth=0 /home/daygeek/Documents/
20G    /home/daygeek/Documents

详细说明:

  • du – 这是一个命令
  • -h – 以易读的格式显示大小 (例如 1K 234M 2G)
  • -s – 仅显示每个参数的总数
  • --max-depth=N – 目录的打印深度

2) 在 Linux 上如何获取每个目录的大小

使用以下 du 命令格式获取每个目录(包括子目录)的总大小。

在该示例中,我们将获得每个 /home/daygeek/Documents 目录及其子目录的总大小。

$ du -h /home/daygeek/Documents/ | sort -rh | head -20

20G    /home/daygeek/Documents/
9.6G    /home/daygeek/Documents/drive-2daygeek
6.3G    /home/daygeek/Documents/Thanu_Photos
5.3G    /home/daygeek/Documents/Thanu_Photos/Camera
5.3G    /home/daygeek/Documents/drive-2daygeek/Thanu-videos
3.2G    /home/daygeek/Documents/drive-mageshm
2.3G    /home/daygeek/Documents/drive-2daygeek/Thanu-Photos
2.2G    /home/daygeek/Documents/drive-2daygeek/Thanu-photos-by-month
916M    /home/daygeek/Documents/drive-mageshm/Tanisha
454M    /home/daygeek/Documents/drive-mageshm/2g-backup
415M    /home/daygeek/Documents/Thanu_Photos/WhatsApp Video
300M    /home/daygeek/Documents/drive-2daygeek/Thanu-photos-by-month/Jan-2017
288M    /home/daygeek/Documents/drive-2daygeek/Thanu-photos-by-month/Oct-2017
226M    /home/daygeek/Documents/drive-2daygeek/Thanu-photos-by-month/Sep-2017
219M    /home/daygeek/Documents/Thanu_Photos/WhatsApp Documents
213M    /home/daygeek/Documents/drive-mageshm/photos
163M    /home/daygeek/Documents/Thanu_Photos/WhatsApp Video/Sent
161M    /home/daygeek/Documents/Thanu_Photos/WhatsApp Images
154M    /home/daygeek/Documents/drive-2daygeek/Thanu-photos-by-month/June-2017
150M    /home/daygeek/Documents/drive-2daygeek/Thanu-photos-by-month/Nov-2016

3) 在 Linux 上如何获取每个目录的摘要

使用如下 du 命令格式仅获取每个目录的摘要。

$ du -hs /home/daygeek/Documents/* | sort -rh | head -10

9.6G    /home/daygeek/Documents/drive-2daygeek
6.3G    /home/daygeek/Documents/Thanu_Photos
3.2G    /home/daygeek/Documents/drive-mageshm
756K    /home/daygeek/Documents/Bank_Details
272K    /home/daygeek/Documents/user-friendly-zorin-os-15-has-been-released-TouchInterface1.png
172K    /home/daygeek/Documents/user-friendly-zorin-os-15-has-been-released-NightLight.png
164K    /home/daygeek/Documents/ConfigServer Security and Firewall (csf) Cheat Sheet.pdf
132K    /home/daygeek/Documents/user-friendly-zorin-os-15-has-been-released-Todo.png
112K    /home/daygeek/Documents/user-friendly-zorin-os-15-has-been-released-ZorinAutoTheme.png
96K    /home/daygeek/Documents/distro-info.xlsx

4) 在 Linux 上如何获取每个目录的不含子目录的大小

使用如下 du 命令格式来展示每个目录的总大小,不包括子目录。

$ du -hS /home/daygeek/Documents/ | sort -rh | head -20

5.3G    /home/daygeek/Documents/Thanu_Photos/Camera
5.3G    /home/daygeek/Documents/drive-2daygeek/Thanu-videos
2.3G    /home/daygeek/Documents/drive-2daygeek/Thanu-Photos
1.5G    /home/daygeek/Documents/drive-mageshm
831M    /home/daygeek/Documents/drive-mageshm/Tanisha
454M    /home/daygeek/Documents/drive-mageshm/2g-backup
300M    /home/daygeek/Documents/drive-2daygeek/Thanu-photos-by-month/Jan-2017
288M    /home/daygeek/Documents/drive-2daygeek/Thanu-photos-by-month/Oct-2017
253M    /home/daygeek/Documents/Thanu_Photos/WhatsApp Video
226M    /home/daygeek/Documents/drive-2daygeek/Thanu-photos-by-month/Sep-2017
219M    /home/daygeek/Documents/Thanu_Photos/WhatsApp Documents
213M    /home/daygeek/Documents/drive-mageshm/photos
163M    /home/daygeek/Documents/Thanu_Photos/WhatsApp Video/Sent
154M    /home/daygeek/Documents/drive-2daygeek/Thanu-photos-by-month/June-2017
150M    /home/daygeek/Documents/drive-2daygeek/Thanu-photos-by-month/Nov-2016
127M    /home/daygeek/Documents/drive-2daygeek/Thanu-photos-by-month/Dec-2016
100M    /home/daygeek/Documents/drive-2daygeek/Thanu-photos-by-month/Oct-2016
94M    /home/daygeek/Documents/drive-2daygeek/Thanu-photos-by-month/Nov-2017
92M    /home/daygeek/Documents/Thanu_Photos/WhatsApp Images
90M    /home/daygeek/Documents/drive-2daygeek/Thanu-photos-by-month/Dec-2017

5) 在 Linux 上如何仅获取一级子目录的大小

如果要获取 Linux 上给定目录的一级子目录(包括其子目录)的大小,请使用以下命令格式。

$ du -h --max-depth=1 /home/daygeek/Documents/

3.2G    /home/daygeek/Documents/drive-mageshm
4.0K    /home/daygeek/Documents/daygeek
756K    /home/daygeek/Documents/Bank_Details
9.6G    /home/daygeek/Documents/drive-2daygeek
6.3G    /home/daygeek/Documents/Thanu_Photos
20G    /home/daygeek/Documents/

6) 如何在 du 命令输出中获得总计

如果要在 du 命令输出中获得总计,请使用以下 du 命令格式。

$ du -hsc /home/daygeek/Documents/* | sort -rh | head -10

20G    total
9.6G    /home/daygeek/Documents/drive-2daygeek
6.3G    /home/daygeek/Documents/Thanu_Photos
3.2G    /home/daygeek/Documents/drive-mageshm
756K    /home/daygeek/Documents/Bank_Details
272K    /home/daygeek/Documents/user-friendly-zorin-os-15-has-been-released-TouchInterface1.png
172K    /home/daygeek/Documents/user-friendly-zorin-os-15-has-been-released-NightLight.png
164K    /home/daygeek/Documents/ConfigServer Security and Firewall (csf) Cheat Sheet.pdf
132K    /home/daygeek/Documents/user-friendly-zorin-os-15-has-been-released-Todo.png
112K    /home/daygeek/Documents/user-friendly-zorin-os-15-has-been-released-ZorinAutoTheme.png

via: https://www.2daygeek.com/find-get-size-of-directory-folder-linux-disk-usage-du-command/

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

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

当你想要争论代码复杂性时,Pylint 是你的朋友。

 title= in VIM")

Pylint 是更高层级的 Python 样式强制程序。而 flake8black 检查的是“本地”样式:换行位置、注释的格式、发现注释掉的代码或日志格式中的错误做法之类的问题。

默认情况下,Pylint 非常激进。它将对每样东西都提供严厉的意见,从检查是否实际实现声明的接口到重构重复代码的可能性,这对新用户来说可能会很多。一种温和地将其引入项目或团队的方法是先关闭所有检查器,然后逐个启用检查器。如果你已经在使用 flake8、black 和 mypy,这尤其有用:Pylint 有相当多的检查器和它们在功能上重叠。

但是,Pylint 独有之处之一是能够强制执行更高级别的问题:例如,函数的行数或者类中方法的数量。

这些数字可能因项目而异,并且可能取决于开发团队的偏好。但是,一旦团队就参数达成一致,使用自动工具强制化这些参数非常有用。这是 Pylint 闪耀的地方。

配置 Pylint

要以空配置开始,请将 .pylintrc 设置为

[MESSAGES CONTROL]

disable=all

这将禁用所有 Pylint 消息。由于其中许多是冗余的,这是有道理的。在 Pylint 中,message 是一种特定的警告。

你可以通过运行 pylint 来确认所有消息都已关闭:

$ pylint <my package>

通常,向 pylint 命令行添加参数并不是一个好主意:配置 pylint 的最佳位置是 .pylintrc。为了使它做一些有用的事,我们需要启用一些消息。

要启用消息,在 .pylintrc 中的 [MESSAGES CONTROL] 下添加

enable=<message>,
       ...

对于看起来有用的“消息”(Pylint 称之为不同类型的警告)。我最喜欢的包括 too-many-linestoo-many-argumentstoo-many-branches。所有这些会限制模块或函数的复杂性,并且无需进行人工操作即可客观地进行代码复杂度测量。

检查器消息的来源:每条消息只属于一个检查器。许多最有用的消息都在设计检查器下。默认数字通常都不错,但要调整最大值也很简单:我们可以在 .pylintrc 中添加一个名为 DESIGN 的段。

[DESIGN]
max-args=7
max-locals=15

另一个有用的消息来源是“重构”检查器。我已启用一些最喜欢的消息有 consider-using-dict-comprehensionstop-iteration-return(它会查找正确的停止迭代的方式是 return 而使用了 raise StopIteration 的迭代器)和 chained-comparison,它将建议使用如 1 <= x < 5,而不是不太明显的 1 <= x && 5 > 5 的语法。

最后是一个在性能方面消耗很大的检查器,但它非常有用,就是 similarities。它会查找不同部分代码之间的复制粘贴来强制执行“不要重复自己”(DRY 原则)。它只启用一条消息:duplicate-code。默认的 “最小相似行数” 设置为 4。可以使用 .pylintrc 将其设置为不同的值。

[SIMILARITIES]
min-similarity-lines=3

Pylint 使代码评审变得简单

如果你厌倦了需要指出一个类太复杂,或者两个不同的函数基本相同的代码评审,请将 Pylint 添加到你的持续集成配置中,并且只需要对项目复杂性准则的争论一次就行。


via: https://opensource.com/article/19/10/python-pylint-introduction

作者:Moshe Zadka 选题:lujun9972 译者:geekpi 校对:wxy

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

BREAKING NEWS!!!

就在 1024 将将过去的深夜,突然,有人在 QQ 群内丢了一个链接和一句话“Linux QQ 发布了”,顿时在静悄悄的 QQ 群内,大家纷纷冒了出来。一时间,群内就和开了锅一样热闹,大家纷纷抄起心爱的土琵琶 Linux,各种截屏与测试消息齐飞,臭虫共吐槽一色。

为什么这么热闹?因为 Linux 桌面在中国得不到日常用户的青睐的一个主要吐槽点就是,“没有 QQ 啊!”,自从 10 年前——没错,就是 10 年前——据说是一位实习生随手做的 Linux QQ 停更并停用后,在 Linux 中使用 QQ 就成了一件麻烦事。这十年来,中国的 Linux 社区们有过种种努力和尝试,如,被封杀的 libqq,也有逐渐摸索和改善后的 Wine QQ 方案,各路 Linux 爱好者们在入门 Linux 之后大都会总结或整理一份 Linux QQ 秘籍,当然,随着各路国内的 Linux 操作系统的成熟,也纷纷提供了各种成熟的 Linux QQ 解决方案——至少能用吧。但是,这些都总有隔靴挠痒之憾。

好了,我想你肯定已经等急了,那么下面是 Linux QQ 的下载链接:

https://im.qq.com/linuxqq/download.html

在下载安装时,我们继续聊聊 Linux QQ。

官方的消息,这次是 “Linux QQ全新回归”,并且支持“支持x64、ARM64、MIPS64三种架构”,“每种架构支持Debian系、红帽系、Arch Linux系、其它发行版中的一种或几种”,也“优化消息体验,完善消息收发能力”,版本则是明晃晃的“Linux QQ 2.0.0 Beta”,而在十年前,最后一个公开发布的版本是“QQ for Linux 1.0 Beta1”(据闻有未公示的 Beta2 版本)。

之所以支持 ARM64、MIPS64,我想这应该是对龙芯(mips64el)、飞腾(arm64)的额外支持吧。

据大家的反馈,这次的更新作为十年后第一次发布,亮点略有,但是大致还是沿袭了之前的版本,也存在一些 bug,有的同学经过几次重启、输入法适配,还是可以完成 QQ 基本功能的体验。

新版 Linux QQ 的发布,让不少极客们大呼“有生之年”。对于开发者来说,Linux 是他们所推崇的,但一直以来,因为中国办公习惯等历史原因,QQ 和微信的 Linux 版本很难获得新的用户。毕竟,一旦老板要给你发一个文件时,你发现你没有办法方便的传递到电脑上,或者在更多的场景下存在问题,都会让 Linux 的新用户们望而却步。

成也萧何败萧何

在 10 月 24 日这个程序员节上发布了 Linux QQ 2.0 版本让人觉得有点无厘头,甚至让人觉得可能仅仅是一个快闪活动,频繁的断线都让人担心是不是到了 25 日,可能 Linux QQ 就又不能用了。在 1024 程序员节的释出,使得 Linux QQ 可以以一个怀旧的形态重新出现在人们的眼前。但是,同样的,在这个节日的释出,也让人觉得这件事似乎并没有相信中的那么重视,对于 Linux QQ 的前景蒙上了一层阴影。

而且,腾讯并非一个慈善组织,对于腾讯这样的一个企业,是否会长期为一个很难产生现金流,而且小众的操作系统提供长期维护还尚未可知,更是让人无法相信 Linux QQ 的未来。

生态决定了操作系统的一切

近两年来,自主研发的操作系统不断的刷屏,我们也一次次为自主研发的操作系统而欢呼。但是,高潮之后,还能剩下来的是什么?

我一直强调,操作系统卖的不是系统本身,而是卖因其产生的生态,由生态倒逼用户为系统本身付费。就如同我尝试很多次从 iPhone 转回 Andorid ,从 macOS 转回 Windows,但是,也正如我自己每次失败后的总结一样,我没有办法完全抛弃掉 iPhone 、macOS,因为其所带来的生态是我无法迁移到 Android 上的,被操作系统所挟裹,不得不去面对的现实是:最终,我还是回到了 iPhone 所构建的生态。

对于 Linux 也是一样的,Linux 的服务端的用户诉求是明确的、简单直接的、绝大多数场景都可以被覆盖掉的。而桌面端的产品可能会有数万种不同类型的需求,这使得产品经理在进行设计时预见不了需求的问题,也就很正常的问题。

我们回过头去看,Linux 想要占领桌面市场还需要什么呢?需要的不仅仅是一个 Linux QQ,我们需要给更多人提供 Linux 上的微信、办公套件等等一系列软件。没有这些软件,我们就很难让用户迈过入门的第一关:我如何登录 QQ /微信和我的同事、家人沟通。如果他发现,我用了 Linux ,但是我却没有办法使用 QQ /微信进行沟通,那么我用 Linux 还有什么意义呢?

对于 Linux 来说,除了去适配这些我们所熟悉的软件以外,更是需要有厂商能够面向 Linux 开发出独占的杀手级用户,这样,才能够更好的去推动一个操作系统的发展。

Linux 距离成为流行操作系统,还差多少个 QQ 微信

如果 Linux QQ 仍然继续更新,那对于 Linux 来说,是一大利好消息,一些做的好的、做的不好的应用,都可能会重新考虑创建自己的 Linux 版本。而过去,可能没有这样的机会。

你怎么看呢?

如果你是一名写作者,你也能从使用 Git 中受益。在我们的系列文章中了解有关 Git 鲜为人知的用法。

Git 是一个少有的能将如此多的现代计算封装到一个程序之中的应用程序,它可以用作许多其他应用程序的计算引擎。虽然它以跟踪软件开发中的源代码更改而闻名,但它还有许多其他用途,可以让你的生活更轻松、更有条理。在这个 Git 系列中,我们将分享七种鲜为人知的使用 Git 的方法。

今天我们来看看写作者如何使用 Git 更好的地完成工作。

写作者的 Git

有些人写小说,也有人撰写学术论文、诗歌、剧本、技术手册或有关开源的文章。许多人都在做一些各种写作。相同的是,如果你是一名写作者,或许能从使用 Git 中受益。尽管 Git 是著名的计算机程序员所使用的高度技术性工具,但它也是现代写作者的理想之选,本文将向你演示如何改变你的书写方式以及为什么要这么做的原因。

但是,在谈论 Git 之前,重要的是先谈谈“副本”(或者叫“内容”,对于数字时代而言)到底是什么,以及为什么它与你的交付媒介不同。这是 21 世纪,大多数写作者选择的工具是计算机。尽管计算机看似擅长将副本的编辑和布局等过程结合在一起,但写作者还是(重新)发现将内容与样式分开是一个好主意。这意味着你应该在计算机上像在打字机上而不是在文字处理器中进行书写。以计算机术语而言,这意味着以纯文本形式写作。

以纯文本写作

这个假设曾经是毫无疑问的:你知道自己的写作所要针对的市场,你可以为书籍、网站或软件手册等不同市场编写内容。但是,近来各种市场趋于扁平化:你可能决定在纸质书中使用为网站编写的内容,并且纸质书可能会在以后发布 EPUB 版本。对于你的内容的数字版本,读者才是最终控制者:他们可以在你发布内容的网站上阅读你的文字,也可以点击 Firefox 出色的阅读视图,还可能会打印到纸张上,或者可能会使用 Lynx 将网页转储到文本文件中,甚至可能因为使用屏幕阅读器而根本看不到你的内容。

你只需要逐字写下你的内容,而将交付工作留给发布者。即使你是自己发布,将字词作为写作作品的一种源代码也是一种更聪明、更有效的工作方式,因为在发布时,你可以使用相同的源(你的纯文本)生成适合你的目标输出(用于打印的 PDF、用于电子书的 EPUB、用于网站的 HTML 等)。

用纯文本编写不仅意味着你不必担心布局或文本样式,而且也不再需要专门的工具。无论是手机或平板电脑上的基本的记事本应用程序、计算机附带的文本编辑器,还是从互联网上下载的免费编辑器,任何能够产生文本内容的工具对你而言都是有效的“文字处理器”。无论你身在何处或在做什么,几乎可以在任何设备上书写,并且所生成的文本可以与你的项目完美集成,而无需进行任何修改。

而且,Git 专门用来管理纯文本。

Atom 编辑器

当你以纯文本形式书写时,文字处理程序会显得过于庞大。使用文本编辑器更容易,因为文本编辑器不会尝试“有效地”重组输入内容。它使你可以将脑海中的单词输入到屏幕中,而不会受到干扰。更好的是,文本编辑器通常是围绕插件体系结构设计的,这样应用程序本身很基础(它用来编辑文本),但是你可以围绕它构建一个环境来满足你的各种需求。

Atom 编辑器就是这种设计理念的一个很好的例子。这是一个具有内置 Git 集成的跨平台文本编辑器。如果你不熟悉纯文本格式,也不熟悉 Git,那么 Atom 是最简单的入门方法。

安装 Git 和 Atom

首先,请确保你的系统上已安装 Git。如果运行 Linux 或 BSD,则 Git 在软件存储库或 ports 树中可用。你使用的命令将根据你的发行版而有所不同。例如在 Fedora 上:

$ sudo dnf install git

你也可以下载并安装适用于 MacWindows 的 Git。

你不需要直接使用 Git,因为 Atom 会充当你的 Git 界面。下一步是安装 Atom。

如果你使用的是 Linux,请通过软件安装程序或适当的命令从软件存储库中安装 Atom,例如:

$ sudo dnf install atom

Atom 当前没有在 BSD 上构建。但是,有很好的替代方法,例如 GNU Emacs。对于 Mac 和 Windows 用户,可以在 Atom 网站上找到安装程序。

安装完成后,启动 Atom 编辑器。

快速指导

如果要使用纯文本和 Git,则需要适应你的编辑器。Atom 的用户界面可能比你习惯的更加动态。实际上,你可以将它视为 Firefox 或 Chrome,而不是文字处理程序,因为它具有可以根据需要打开或关闭的选项卡和面板,甚至还可以安装和配置附件。尝试全部掌握 Atom 如许之多的功能是不切实际的,但是你至少可以知道有什么功能。

当打开 Atom 时,它将显示一个欢迎屏幕。如果不出意外,此屏幕很好地介绍了 Atom 的选项卡式界面。你可以通过单击 Atom 窗口顶部选项卡上的“关闭”图标来关闭欢迎屏幕,并使用“文件 > 新建文件”创建一个新文件。

使用纯文本格式与使用文字处理程序有点不同,因此这里有一些技巧,以人可以理解的方式编写内容,并且 Git 和计算机可以解析,跟踪和转换。

用 Markdown 书写

如今,当人们谈论纯文本时,大多是指 Markdown。Markdown 与其说是格式,不如说是样式,这意味着它旨在为文本提供可预测的结构,以便计算机可以检测自然的模式并智能地转换文本。Markdown 有很多定义,但是最好的技术定义和备忘清单在 CommonMark 的网站上。

# Chapter 1

This is a paragraph with an *italic* word and a **bold** word in it.
And it can even reference an image.

![An image will render here.](drawing.jpg)

从示例中可以看出,Markdown 读起来感觉不像代码,但可以将其视为代码。如果你遵循 CommonMark 定义的 Markdown 规范,那么一键就可以可靠地将 Markdown 的文字转换为 .docx、.epub、.html、MediaWiki、.odt、.pdf、.rtf 和各种其他的格式,而不会失去格式。

你可以认为 Markdown 有点像文字处理程序的样式。如果你曾经为出版社撰写过一套样式来控制章节标题及其样式,那基本上就是一回事,除了不是从下拉菜单中选择样式以外,你需要给你的文字添加一些小记号。对于任何习惯“以文字交谈”的现代阅读者来说,这些表示法都是很自然的,但是在呈现文本时,它们会被精美的文本样式替换掉。实际上,这就是文字处理程序在后台秘密进行的操作。文字处理器显示粗体文本,但是如果你可以看到使文本变为粗体的生成代码,则它与 Markdown 很像(实际上,它是更复杂的 XML)。使用 Markdown 可以消除这种代码和样式之间的阻隔,一方面看起来更可怕一些,但另一方面,你可以在几乎所有可以生成文本的东西上书写 Markdown 而不会丢失任何格式信息。

Markdown 文件流行的文件扩展名是 .md。如果你使用的平台不知道 .md 文件是什么,则可以手动将该扩展名与 Atom 关联,或者仅使用通用的 .txt 扩展名。文件扩展名不会更改文件的性质。它只会改变你的计算机决定如何处理它的方式。Atom 和某些平台足够聪明,可以知道该文件是纯文本格式,无论你给它以什么扩展名。

实时预览

Atom 具有 “Markdown 预览” 插件,该插件可以向你显示正在编写的纯文本 Markdown 及其(通常)呈现的方式。

 title=

要激活此预览窗格,请选择“包 > Markdown 预览 > 切换预览” 或按 Ctrl + Shift + M

此视图为你提供了两全其美的方法。无需承担为你的文本添加样式的负担就可以写作,而你也可以看到一个通用的示例外观,至少是以典型的数字化格式显示文本的外观。当然,关键是你无法控制文本的最终呈现方式,因此不要试图调整 Markdown 来强制以某种方式显示呈现的预览。

每行一句话

你的高中写作老师不会看你的 Markdown。

一开始它不那么自然,但是在数字世界中,保持每行一个句子更有意义。Markdown 会忽略单个换行符(当你按下 ReturnEnter 键时),并且只在单个空行之后才会创建一个新段落。

 title=

每行写一个句子的好处是你的工作更容易跟踪。也就是说,假如你在段落的开头更改了一个单词,如果更改仅限于一行而不是一个长的段落中的一个单词,那么 Atom、Git 或任何应用程序很容易以有意义的方式突出显示该更改。换句话说,对一个句子的更改只会影响该句子,而不会影响整个段落。

你可能会想:“许多文字处理器也可以跟踪更改,它们可以突出显示已更改的单个单词。”但是这些修订跟踪器绑定在该字处理器的界面上,这意味着你必须先打开该字处理器才能浏览修订。在纯文本工作流程中,你可以以纯文本形式查看修订,这意味着无论手头有什么,只要该设备可以处理纯文本(大多数都可以),就可以进行编辑或批准编辑。

诚然,写作者通常不会考虑行号,但它对于计算机有用,并且通常是一个很好的参考点。默认情况下,Atom 为文本文档的行进行编号。按下 Enter 键或 Return 键后,一就是一行。

 title=

如果(在 Atom 的)一行的行号中有一个点而不是一个数字,则表示它是上一行折叠的一部分,因为它超出了你的屏幕。

主题

如果你是一个在意视觉形象的人,那么你可能会非常注重自己的写作环境。即使你使用普通的 Markdown 进行编写,也并不意味着你必须使用程序员的字体或在使你看起来像码农的黑窗口中进行书写。修改 Atom 外观的最简单方法是使用主题包。主题设计人员通常将深色主题与浅色主题区分开,因此你可以根据需要使用关键字“Dark”或“Light”进行搜索。

要安装主题,请选择“编辑 > 首选项”。这将在 Atom 界面中打开一个新标签页。是的,标签页可以用于处理文档用于配置及控制面板。在“设置”标签页中,单击“安装”类别。

在“安装”面板中,搜索要安装的主题的名称。单击搜索字段右侧的“主题”按钮,以仅搜索主题。找到主题后,单击其“安装”按钮。

 title=

要使用已安装的主题或根据喜好自定义主题,请导航至“设置”标签页中的“主题”类别中。从下拉菜单中选择要使用的主题。更改会立即进行,因此你可以准确了解主题如何影响你的环境。

你也可以在“设置”标签的“编辑器”类别中更改工作字体。Atom 默认采用等宽字体,程序员通常首选这种字体。但是你可以使用系统上的任何字体,无论是衬线字体、无衬线字体、哥特式字体还是草书字体。无论你想整天盯着什么字体都行。

作为相关说明,默认情况下,Atom 会在其屏幕上绘制一条垂直线,以提示编写代码的人员。程序员通常不想编写太长的代码行,因此这条垂直线会提醒他们不要写太长的代码行。不过,这条竖线对写作者而言毫无意义,你可以通过禁用 “wrap-guide” 包将其删除。

要禁用 “wrap-guide” 软件包,请在“设置”标签中选择“折行”类别,然后搜索 “wrap-guide”。找到该程序包后,单击其“禁用”按钮。

动态结构

创建长文档时,我发现每个文件写一个章节比在一个文件中写整本书更有意义。此外,我不会以明显的语法 chapter-1.md1.example.md 来命名我的章节,而是以章节标题或关键词(例如 example.md)命名。为了将来为自己提供有关如何编写本书的指导,我维护了一个名为 toc.md (用于“目录”)的文件,其中列出了各章的(当前)顺序。

我这样做是因为,无论我多么相信第 6 章都不可能出现在第 1 章之前,但在我完成整本书之前,几乎难以避免我会交换一两个章节的顺序。我发现从一开始就保持动态变化可以帮助我避免重命名混乱,也可以帮助我避免僵化的结构。

在 Atom 中使用 Git

每位写作者的共同点是两件事:他们为流传而写作,而他们的写作是一段旅程。你不能一坐下来写作就完成了最终稿件。顾名思义,你有一个初稿。该草稿会经过修订,你会仔细地将每个修订保存一式两份或三份的备份,以防万一你的文件损坏了。最终,你得到了所谓的最终草稿,但很有可能你有一天还会回到这份最终草稿,要么恢复好的部分,要么修改坏的部分。

Atom 最令人兴奋的功能是其强大的 Git 集成。无需离开 Atom,你就可以与 Git 的所有主要功能进行交互,跟踪和更新项目、回滚你不喜欢的更改、集成来自协作者的更改等等。最好的学习方法就是逐步学习,因此这是在一个写作项目中从始至终在 Atom 界面中使用 Git 的方法。

第一件事:通过选择 “视图 > 切换 Git 标签页” 来显示 Git 面板。这将在 Atom 界面的右侧打开一个新标签页。现在没什么可看的,所以暂时保持打开状态就行。

建立一个 Git 项目

你可以认为 Git 被绑定到一个文件夹。Git 目录之外的任何文件夹都不知道 Git,而 Git 也不知道外面。Git 目录中的文件夹和文件将被忽略,直到你授予 Git 权限来跟踪它们为止。

你可以通过在 Atom 中创建新的项目文件夹来创建 Git 项目。选择 “文件 > 添加项目文件夹”,然后在系统上创建一个新文件夹。你创建的文件夹将出现在 Atom 窗口的左侧“项目面板”中。

Git 添加文件

右键单击你的新项目文件夹,然后选择“新建文件”以在项目文件夹中创建一个新文件。如果你要导入文件到新项目中,请右键单击该文件夹,然后选择“在文件管理器中显示”,以在系统的文件查看器中打开该文件夹(Linux 上为 Dolphin 或 Nautilus,Mac 上为 Finder,在 Windows 上是 Explorer),然后拖放文件到你的项目文件夹。

在 Atom 中打开一个项目文件(你创建的空文件或导入的文件)后,单击 Git 标签中的 “ 创建存储库 Create Repository ” 按钮。在弹出的对话框中,单击 “ 初始化 Init ” 以将你的项目目录初始化为本地 Git 存储库。 Git 会将 .git 目录(在系统的文件管理器中不可见,但在 Atom 中可见)添加到项目文件夹中。不要被这个愚弄了:.git 目录是 Git 管理的,而不是由你管理的,因此一般你不要动它。但是在 Atom 中看到它可以很好地提醒你正在由 Git 管理的项目中工作。换句话说,当你看到 .git 目录时,就有了修订历史记录。

在你的空文件中,写一些东西。你是写作者,所以输入一些单词就行。你可以随意输入任何一组单词,但要记住上面的写作技巧。

Ctrl + S 保存文件,该文件将显示在 Git 标签的 “ 未暂存的改变 Unstaged Changes ” 部分中。这意味着该文件存在于你的项目文件夹中,但尚未提交给 Git 管理。通过单击 Git 选项卡右上方的 “ 暂存全部 Stage All ” 按钮,以允许 Git 跟踪这些文件。如果你使用过带有修订历史记录的文字处理器,则可以将此步骤视为允许 Git 记录更改。

Git 提交

你的文件现在已暂存。这意味着 Git 知道该文件存在,并且知道自上次 Git 知道该文件以来,该文件已被更改。

Git 的 提交 commit 会将你的文件发送到 Git 的内部和永久存档中。如果你习惯于文字处理程序,这就类似于给一个修订版命名。要创建一个提交,请在 Git 选项卡底部的“ 提交 Commit ”消息框中输入一些描述性文本。你可能会感到含糊不清或随意写点什么,但如果你想在将来知道进行修订的原因,那么输入一些有用的信息会更有用。

第一次提交时,必须创建一个 分支 branch 。Git 分支有点像另外一个空间,它允许你从一个时间轴切换到另一个时间轴,以进行你可能想要也可能不想要永久保留的更改。如果最终喜欢该更改,则可以将一个实验分支合并到另一个实验分支,从而统一项目的不同版本。这是一个高级过程,不需要先学会,但是你仍然需要一个活动分支,因此你必须为首次提交创建一个分支。

单击 Git 选项卡最底部的“ 分支 Branch ”图标,以创建新的分支。

 title=

通常将第一个分支命名为 master,但不是必须如此;你可以将其命名为 firstdraft 或任何你喜欢的名称,但是遵守当地习俗有时会使谈论 Git(和查找问题的答案)变得容易一些,因为你会知道有人提到 “master” 时,它们的真正意思是“主干”而不是“初稿”或你给分支起的什么名字。

在某些版本的 Atom 上,UI 也许不会更新以反映你已经创建的新分支。不用担心,做了提交之后,它会创建分支(并更新 UI)。按下 “ 提交 Commit ” 按钮,无论它显示的是 “ 创建脱离的提交 Create detached commit ” 还是 “ 提交到主干 Commit to master

提交后,文件的状态将永久保留在 Git 的记忆之中。

历史记录和 Git 差异

一个自然而然的问题是你应该多久做一次提交。这并没有正确的答案。使用 Ctrl + S 保存文件和提交到 Git 是两个单独的过程,因此你会一直做这两个过程。每当你觉得自己已经做了重要的事情或打算尝试一个可能会被干掉的疯狂的新想法时,你可能都会想要做次提交。

要了解提交对工作流程的影响,请从测试文档中删除一些文本,然后在顶部和底部添加一些文本。再次提交。 这样做几次,直到你在 Git 标签的底部有了一小段历史记录,然后单击其中一个提交以在 Atom 中查看它。

 title=

查看过去的提交时,你会看到三种元素:

  1. 绿色文本是该提交中已被添加到文档中的内容。
  2. 红色文本是该提交中已从文档中删除的内容。
  3. 其他所有文字均未做更改。

远程备份

使用 Git 的优点之一是,按照设计它是分布式的,这意味着你可以将工作提交到本地存储库,并将所做的更改推送到任意数量的服务器上进行备份。你还可以从这些服务器中拉取更改,以便你碰巧正在使用的任何设备始终具有最新更改。

为此,你必须在 Git 服务器上拥有一个帐户。有几种免费的托管服务,其中包括 GitHub,这个公司开发了 Atom,但奇怪的是 GitHub 不是开源的;而 GitLab 是开源的。相比私有软件,我更喜欢开源,在本示例中,我将使用 GitLab。

如果你还没有 GitLab 帐户,请注册一个帐户并开始一个新项目。项目名称不必与 Atom 中的项目文件夹匹配,但是如果匹配,则可能更有意义。你可以将项目保留为私有,在这种情况下,只有你和任何一个你给予了明确权限的人可以访问它,或者,如果你希望该项目可供任何互联网上偶然发现它的人使用,则可以将其公开。

不要将 README 文件添加到项目中。

创建项目后,它将为你提供有关如何设置存储库的说明。如果你决定在终端中或通过单独的 GUI 使用 Git,这是非常有用的信息,但是 Atom 的工作流程则有所不同。

单击 GitLab 界面右上方的 “ 克隆 Clone ” 按钮。这显示了访问 Git 存储库必须使用的地址。复制 “SSH” 地址(而不是 “https” 地址)。

在 Atom 中,点击项目的 .git 目录,然后打开 config 文件。将下面这些配置行添加到该文件中,调整 url 值的 seth/example.git 部分以匹配你自己独有的地址。

[remote "origin"]
  url = [email protected]:seth/example.git
  fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
  remote = origin
  merge = refs/heads/master

在 Git 标签的底部,出现了一个新按钮,标记为 “ 提取 Fetch ”。由于你的服务器是全新的服务器,因此没有可供你提取的数据,因此请右键单击该按钮,然后选择“ 推送 Push ”。这会将你的更改推送到你的 GitLab 帐户,现在你的项目已备份到 Git 服务器上。

你可以在每次提交后将更改推送到服务器。它提供了即刻的异地备份,并且由于数据量通常很少,因此它几乎与本地保存一样快。

撰写而 Git

Git 是一个复杂的系统,不仅对修订跟踪和备份有用。它还支持异步协作并鼓励实验。本文介绍了一些基础知识,但还有更多关于 Git 的文章和整本的书,以及如何使用它使你的工作更高效、更具弹性和更具活力。 从使用 Git 完成小任务开始,使用的次数越多,你会发现自己提出的问题就越多,最终你将学到的技巧越多。


via: https://opensource.com/article/19/4/write-git

作者:Seth Kenlon 选题:lujun9972 译者:wxy 校对:wxy

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

打破信息孤岛,成为网络安全的拥护者,这对你、对你的职业、对你的公司都会有所帮助。

安全是 DevOps 中一个被误解了的部分,一些人认为它不在 DevOps 的范围内,而另一些人认为它太过重要(并且被忽视),建议改为使用 DevSecOps。无论你同意哪一方的观点,网络安全都会影响到我们每一个人,这是很明显的事实。

每年,黑客行为的统计数据 都会更加令人震惊。例如,每 39 秒就有一次黑客行为发生,这可能会导致你为公司写的记录、身份和专有项目被盗。你的安全团队可能需要花上几个月(也可能是永远找不到)才能发现这次黑客行为背后是谁,目的是什么,人在哪,什么时候黑进来的。

运维专家面对这些棘手问题应该如何是好?呐我说,现在是时候成为网络安全的拥护者,变为解决方案的一部分了。

孤岛势力范围的战争

在我和我本地的 IT 安全(ITSEC)团队一起肩并肩战斗的岁月里,我注意到了很多事情。一个很大的问题是,安全团队和 DevOps 之间关系紧张,这种情况非常普遍。这种紧张关系几乎都是来源于安全团队为了保护系统、防范漏洞所作出的努力(例如,设置访问控制或者禁用某些东西),这些努力会中断 DevOps 的工作并阻碍他们快速部署应用程序。

你也看到了,我也看到了,你在现场碰见的每一个人都有至少一个和它有关的故事。一小撮的怨恨最终烧毁了信任的桥梁,要么是花费一段时间修复,要么就是两个团体之间开始一场小型的地盘争夺战,这个结果会使 DevOps 实现起来更加艰难。

一种新观点

为了打破这些孤岛并结束势力战争,我在每个安全团队中都选了至少一个人来交谈,了解我们组织日常安全运营里的来龙去脉。我开始做这件事是出于好奇,但我持续做这件事是因为它总是能带给我一些有价值的、新的观点。例如,我了解到,对于每个因为失败的安全性而被停止的部署,安全团队都在疯狂地尝试修复 10 个他们看见的其他问题。他们反应的莽撞和尖锐是因为他们必须在有限的时间里修复这些问题,不然这些问题就会变成一个大问题。

考虑到发现、识别和撤销已完成操作所需的大量知识,或者指出 DevOps 团队正在做什么(没有背景信息)然后复制并测试它。所有的这些通常都要由人手配备非常不足的安全团队完成。

这就是你的安全团队的日常生活,并且你的 DevOps 团队看不到这些。ITSEC 的日常工作意味着超时加班和过度劳累,以确保公司,公司的团队,团队里工作的所有人能够安全地工作。

成为安全拥护者的方法

这些是你成为你的安全团队的拥护者之后可以帮到它们的。这意味着,对于你做的所有操作,你必须仔细、认真地查看所有能够让其他人登录的方式,以及他们能够从中获得什么。

帮助你的安全团队就是在帮助你自己。将工具添加到你的工作流程里,以此将你知道的要干的活和他们知道的要干的活结合到一起。从小事入手,例如阅读公共漏洞披露(CVE),并将扫描模块添加到你的 CI/CD 流程里。对于你写的所有代码,都会有一个开源扫描工具,添加小型开源工具(例如下面列出来的)在长远看来是可以让项目更好的。

容器扫描工具:

代码扫描工具:

Kubernetes 安全工具:

保持你的 DevOps 态度

如果你的工作角色是和 DevOps 相关的,那么学习新技术和如何运用这项新技术创造新事物就是你工作的一部分。安全也是一样。我在 DevOps 安全方面保持到最新,下面是我的方法的列表。

  • 每周阅读一篇你工作的方向里和安全相关的文章.
  • 每周查看 CVE 官方网站,了解出现了什么新漏洞.
  • 尝试做一次黑客马拉松。一些公司每个月都要这样做一次;如果你觉得还不够、想了解更多,可以访问 Beginner Hack 1.0 网站。
  • 每年至少一次和那你的安全团队的成员一起参加安全会议,从他们的角度来看事情。

成为拥护者是为了变得更好

你应该成为你的安全的拥护者,下面是我们列出来的几个理由。首先是增长你的知识,帮助你的职业发展。第二是帮助其他的团队,培养新的关系,打破对你的组织有害的孤岛。在你的整个组织内建立由很多好处,包括设置沟通团队的典范,并鼓励人们一起工作。你同样能促进在整个组织中分享知识,并给每个人提供一个在安全方面更好的内部合作的新契机。

总的来说,成为一个网络安全的拥护者会让你成为你整个组织的拥护者。


via: https://opensource.com/article/19/9/devops-security-champions

作者:Jessica Repka 选题:lujun9972 译者:hopefully2333 校对:wxy

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