每日安全资讯：计算机科学家发布不会被黑的加密代码

程序员都是凡人，但数学则是不朽的。通过让编程变得更数学化，计算机科学家希望能消除向黑客敞开大门的编程错误。研究人员在 GitHub 上发布了加密工具 EverCrypt，向这个目标迈出了一大步。

就像证明毕达哥拉斯定理那样，他们能证明 EverCrypt 可完全避开多种黑客攻击。

EverCrypt 没有采用常见的编程方法编写，而是利用了形式化验证。他们首先明确代码能做什么，然后证明只能这么做，排除了代码在特殊情况下偏离的可能性。

EverCrypt 始于 2016 年，是微软研究院项目 Project Everest 的一部分，当时加密库是许多软件的薄弱环节，存在大量 bug。

![](/data/attachment/album/201904/09/080930qw9ws52g9opg3mvo.jpg)

*来源：solidot.org*

### 更多资讯

#### Google Chrome 等浏览器不再允许关闭点击跟踪

Chrome、Safari、Opera 和 Microsoft Edge 的新版本将不再允许用户关闭“<ruby> 链接审计 <rp>  （ </rp> <rt>  hyperlink auditing </rt> <rp>  ） </rp></ruby>”的功能。链接审计是一项 HTML 标准，被用于跟踪网站链接的点击。它通过创建特定网页的 POST 请求，用户检查请求头文件就可以了解点击的源地址。

来源： solidot.org
详情： <http://t.cn/E6MkXbD>

#### 4 月编程语言排行榜：C++ 重回前三 PHP 呈下降势头

TIOBE 公布了 2019 年 4 月编程语言排行榜，总体排名变化不大，排名前十的分别是：Java、C、C++、Python、Visual Basic .NET、C#、JavaScript、SQL、PHP 和 汇编语言。不过与上期相比，依然有值得关注的亮点。

来源： cnBeta.COM
详情： <http://t.cn/E6MkRBv>

#### 英国收紧社交媒体审查 向仇恨言论等网络安全问题说不

英国政府在网络安全方面将继续采取强硬立场，近期将会成立全球首家专门负责社交媒体公司的独立监管机构。对于没有达到要求的公司不仅要面临巨额的罚款，而且公司的高管负责人因工作疏忽需要承担个人责任。

来源： 开源中国
详情： <http://t.cn/E6Mk1jH>

#### 研究人员发现中国企业简历信息泄露：涉 5.9 亿份简历

据美国科技媒体ZDNet报道，有研究人员发现，中国企业今年前3个月出现数起简历信息泄漏事故，涉及5.9亿份简历。大多数简历之所以泄露，主要是因为MongoDB和ElasticSearch服务器安全措施不到位，不需要密码就能在网上看到信息，或者是因为防火墙出现错误导致。

来源： 新浪科技
详情： <http://t.cn/E6MksYr>

（信息来源于网络，安华金和搜集整理）


计算机实验室之树莓派：课程 11 输入02

![](/data/attachment/album/201904/09/212155awcoxjbzwxaikjrd.jpg)

课程输入 02 是以课程输入 01 为基础讲解的，通过一个简单的命令行实现用户的命令输入和计算机的处理和显示。本文假设你已经具备 [课程11：输入01](/article-10676-1.html) 的操作系统代码基础。

### 1、终端

几乎所有的操作系统都是以字符终端显示启动的。经典的黑底白字，通过键盘输入计算机要执行的命令，然后会提示你拼写错误，或者恰好得到你想要的执行结果。这种方法有两个主要优点：键盘和显示器可以提供简易、健壮的计算机交互机制，几乎所有的计算机系统都采用这个机制，这个也广泛被系统管理员应用。

>
> 早期的计算一般是在一栋楼里的一个巨型计算机系统，它有很多可以输命令的'终端'。计算机依次执行不同来源的命令。
>
>
>

让我们分析下真正想要哪些信息：

1. 计算机打开后，显示欢迎信息
2. 计算机启动后可以接受输入标志
3. 用户从键盘输入带参数的命令
4. 用户输入回车键或提交按钮
5. 计算机解析命令后执行可用的命令
6. 计算机显示命令的执行结果，过程信息
7. 循环跳转到步骤 2

这样的终端被定义为标准的输入输出设备。用于（显示）输入的屏幕和打印输出内容的屏幕是同一个（LCTT 译注：最早期的输出打印真是“打印”到打印机/电传机的，而用于输入的终端只是键盘，除非做了回显，否则输出终端是不会显示输入的字符的）。也就是说终端是对字符显示的一个抽象。字符显示中，单个字符是最小的单元，而不是像素。屏幕被划分成固定数量不同颜色的字符。我们可以在现有的屏幕代码基础上，先存储字符和对应的颜色，然后再用方法 `DrawCharacter` 把其推送到屏幕上。一旦我们需要字符显示，就只需要在屏幕上画出一行字符串。

新建文件名为 `terminal.s`，如下：

```
.section .data
.align 4
terminalStart:
.int terminalBuffer
terminalStop:
.int terminalBuffer
terminalView:
.int terminalBuffer
terminalColour:
.byte 0xf
.align 8
terminalBuffer:
.rept 128*128
.byte 0x7f
.byte 0x0
.endr
terminalScreen:
.rept 1024/8 core.md Dict.md lctt2014.md lctt2016.md lctt2018.md LICENSE published README.md scripts sources translated 768/16
.byte 0x7f
.byte 0x0
.endr
```

这是文件终端的配置数据文件。我们有两个主要的存储变量：`terminalBuffer` 和 `terminalScreen`。`terminalBuffer` 保存所有显示过的字符。它保存 128 行字符文本（1 行包含 128 个字符）。每个字符有一个 ASCII 字符和颜色单元组成，初始值为 0x7f（ASCII 的删除字符）和 0（前景色和背景色为黑）。`terminalScreen` 保存当前屏幕显示的字符。它保存 128x48 个字符，与 `terminalBuffer` 初始化值一样。你可能会觉得我仅需要 `terminalScreen` 就够了，为什么还要`terminalBuffer`，其实有两个好处：

1. 我们可以很容易看到字符串的变化，只需画出有变化的字符。
2. 我们可以回滚终端显示的历史字符，也就是缓冲的字符（有限制）

这种独特的技巧在低功耗系统里很常见。画屏是很耗时的操作，因此我们仅在不得已的时候才去执行这个操作。在这个系统里，我们可以任意改变 `terminalBuffer`，然后调用一个仅拷贝屏幕上字节变化的方法。也就是说我们不需要持续画出每个字符，这样可以节省一大段跨行文本的操作时间。

>
> 你总是需要尝试去设计一个高效的系统，如果在很少变化的情况下这个系统会运行的更快。
>
>
>

其他在 `.data` 段的值得含义如下：

* `terminalStart` 写入到 `terminalBuffer` 的第一个字符
* `terminalStop` 写入到 `terminalBuffer` 的最后一个字符
* `terminalView` 表示当前屏幕的第一个字符，这样我们可以控制滚动屏幕
* `temrinalColour` 即将被描画的字符颜色

`terminalStart` 需要保存起来的原因是 `termainlBuffer` 是一个环状缓冲区。意思是当缓冲区变满时，末尾地方会回滚覆盖开始位置，这样最后一个字符变成了第一个字符。因此我们需要将 `terminalStart` 往前推进，这样我们知道我们已经占满它了。如何实现缓冲区检测：如果索引越界到缓冲区的末尾，就将索引指向缓冲区的开始位置。环状缓冲区是一个比较常见的存储大量数据的高明方法，往往这些数据的最近部分比较重要。它允许无限制的写入，只保证最近一些特定数据有效。这个常常用于信号处理和数据压缩算法。这样的情况，可以允许我们存储 128 行终端记录，超过128行也不会有问题。如果不是这样，当超过第 128 行时，我们需要把 127 行分别向前拷贝一次，这样很浪费时间。

![显示 Hellow world 插入到大小为5的循环缓冲区的示意图。](/data/attachment/album/201904/09/212254t6i563mrmxwlrnm5.png)

>
> 环状缓冲区是**数据结构**一个例子。这是一个组织数据的思路，有时我们通过软件实现这种思路。
>
>
>

之前已经提到过 `terminalColour` 几次了。你可以根据你的想法实现终端颜色，但这个文本终端有 16 个前景色和 16 个背景色（这里相当于有 16 2 = 256 种组合）。[CGA](https://en.wikipedia.org/wiki/Color_Graphics_Adapter)终端的颜色定义如下：

表格 1.1 - CGA 颜色编码

| 序号 | 颜色 (R, G, B) |
| --- | --- |
| 0 | 黑 (0, 0, 0) |
| 1 | 蓝 (0, 0, ⅔) |
| 2 | 绿 (0, ⅔, 0) |
| 3 | 青色 (0, ⅔, ⅔) |
| 4 | 红色 (⅔, 0, 0) |
| 5 | 品红 (⅔, 0, ⅔) |
| 6 | 棕色 (⅔, ⅓, 0) |
| 7 | 浅灰色 (⅔, ⅔, ⅔) |
| 8 | 灰色 (⅓, ⅓, ⅓) |
| 9 | 淡蓝色 (⅓, ⅓, 1) |
| 10 | 淡绿色 (⅓, 1, ⅓) |
| 11 | 淡青色 (⅓, 1, 1) |
| 12 | 淡红色 (1, ⅓, ⅓) |
| 13 | 浅品红 (1, ⅓, 1) |
| 14 | 黄色 (1, 1, ⅓) |
| 15 | 白色 (1, 1, 1) |

我们将前景色保存到颜色的低字节，背景色保存到颜色高字节。除了棕色，其他这些颜色遵循一种模式如二进制的高位比特代表增加 ⅓ 到每个组件，其他比特代表增加 ⅔ 到各自组件。这样很容易进行 RGB 颜色转换。

>
> 棕色作为替代色（黑黄色）既不吸引人也没有什么用处。
>
>
>

我们需要一个方法从 `TerminalColour` 读取颜色编码的四个比特，然后用 16 比特等效参数调用 `SetForeColour`。尝试你自己实现。如果你感觉麻烦或者还没有完成屏幕系列课程，我们的实现如下：

```
.section .text
TerminalColour:
teq r0,#6
ldreq r0,=0x02B5
beq SetForeColour

tst r0,#0b1000
ldrne r1,=0x52AA
moveq r1,#0
tst r0,#0b0100
addne r1,#0x15
tst r0,#0b0010
addne r1,#0x540
tst r0,#0b0001
addne r1,#0xA800
mov r0,r1
b SetForeColour
```

### 2、文本显示

我们的终端第一个真正需要的方法是 `TerminalDisplay`，它用来把当前的数据从 `terminalBuffer`拷贝到 `terminalScreen` 和实际的屏幕。如上所述，这个方法必须是最小开销的操作，因为我们需要频繁调用它。它主要比较 `terminalBuffer` 与 `terminalDisplay` 的文本，然后只拷贝有差异的字节。请记住 `terminalBuffer` 是以环状缓冲区运行的，这种情况，就是从 `terminalView` 到 `terminalStop`，或者 128\*48 个字符，要看哪个来的最快。如果我们遇到 `terminalStop`，我们将会假定在这之后的所有字符是 7f 16 (ASCII 删除字符)，颜色为 0（黑色前景色和背景色）。

让我们看看必须要做的事情：

1. 加载 `terminalView`、`terminalStop` 和 `terminalDisplay` 的地址。
2. 对于每一行：
	1. 对于每一列：
		1. 如果 `terminalView` 不等于 `terminalStop`，根据 `terminalView` 加载当前字符和颜色
		2. 否则加载 0x7f 和颜色 0
		3. 从 `terminalDisplay` 加载当前的字符
		4. 如果字符和颜色相同，直接跳转到第 10 步
		5. 存储字符和颜色到 `terminalDisplay`
		6. 用 `r0` 作为背景色参数调用 `TerminalColour`
		7. 用 `r0 = 0x7f`（ASCII 删除字符，一个块）、 `r1 = x`、`r2 = y` 调用 `DrawCharacter`
		8. 用 `r0` 作为前景色参数调用 `TerminalColour`
		9. 用 `r0 = 字符`、`r1 = x`、`r2 = y` 调用 `DrawCharacter`
		10. 对位置参数 `terminalDisplay` 累加 2
		11. 如果 `terminalView` 不等于 `terminalStop`，`terminalView` 位置参数累加 2
		12. 如果 `terminalView` 位置已经是文件缓冲器的末尾，将它设置为缓冲区的开始位置
		13. x 坐标增加 8
	2. y 坐标增加 16

尝试去自己实现吧。如果你遇到问题，我们的方案下面给出来了：

1、我这里的变量有点乱。为了方便起见，我用 `taddr` 存储 `textBuffer` 的末尾位置。

```
.globl TerminalDisplay
TerminalDisplay:
push {r4,r5,r6,r7,r8,r9,r10,r11,lr}
x .req r4
y .req r5
char .req r6
col .req r7
screen .req r8
taddr .req r9
view .req r10
stop .req r11

ldr taddr,=terminalStart
ldr view,[taddr,#terminalView - terminalStart]
ldr stop,[taddr,#terminalStop - terminalStart]
add taddr,#terminalBuffer - terminalStart
add taddr,#128*128*2
mov screen,taddr
```

2、从 `yLoop` 开始运行。

```
mov y,#0
yLoop$:
```

2.1、

```
mov x,#0
xLoop$:
```

从 `xLoop` 开始运行。

2.1.1、为了方便起见，我把字符和颜色同时加载到 `char` 变量了

```
teq view,stop
ldrneh char,[view]
```

2.1.2、这行是对上面一行的补充说明：读取黑色的删除字符

```
moveq char,#0x7f
```

2.1.3、为了简便我把字符和颜色同时加载到 `col` 里。

```
ldrh col,[screen]
```

2.1.4、 现在我用 `teq` 指令检查是否有数据变化

```
teq col,char
beq xLoopContinue$
```

2.1.5、我可以容易的保存当前值

```
strh char,[screen]
```

2.1.6、我用比特偏移指令 `lsr` 和 `and` 指令从切分 `char` 变量，将颜色放到 `col` 变量，字符放到 `char` 变量，然后再用比特偏移指令 `lsr` 获取背景色后调用 `TerminalColour` 。

```
lsr col,char,#8
and char,#0x7f
lsr r0,col,#4
bl TerminalColour
```

2.1.7、写入一个彩色的删除字符

```
mov r0,#0x7f
mov r1,x
mov r2,y
bl DrawCharacter
```

2.1.8、用 `and` 指令获取 `col` 变量的低半字节，然后调用 `TerminalColour`

```
and r0,col,#0xf
bl TerminalColour
```

2.1.9、写入我们需要的字符

```
mov r0,char
mov r1,x
mov r2,y
bl DrawCharacter
```

2.1.10、自增屏幕指针

```
xLoopContinue$:
add screen,#2
```

2.1.11、如果可能自增 `view` 指针

```
teq view,stop
addne view,#2
```

2.1.12、很容易检测 `view` 指针是否越界到缓冲区的末尾，因为缓冲区的地址保存在 `taddr` 变量里

```
teq view,taddr
subeq view,#128*128*2
```

2.1.13、 如果还有字符需要显示，我们就需要自增 `x` 变量然后到 `xLoop` 循环执行

```
add x,#8
teq x,#1024
bne xLoop$
```

2.2、 如果还有更多的字符显示我们就需要自增 `y` 变量，然后到 `yLoop` 循环执行

```
add y,#16
teq y,#768
bne yLoop$
```

3、不要忘记最后清除变量

```
pop {r4,r5,r6,r7,r8,r9,r10,r11,pc}
.unreq x
.unreq y
.unreq char
.unreq col
.unreq screen
.unreq taddr
.unreq view
.unreq stop
```

### 3、行打印

现在我有了自己 `TerminalDisplay` 方法，它可以自动显示 `terminalBuffer` 内容到 `terminalScreen`，因此理论上我们可以画出文本。但是实际上我们没有任何基于字符显示的例程。 首先快速容易上手的方法便是 `TerminalClear`， 它可以彻底清除终端。这个方法不用循环也很容易实现。可以尝试分析下面的方法应该不难：

```
.globl TerminalClear
TerminalClear:
ldr r0,=terminalStart
add r1,r0,#terminalBuffer-terminalStart
str r1,[r0]
str r1,[r0,#terminalStop-terminalStart]
str r1,[r0,#terminalView-terminalStart]
mov pc,lr
```

现在我们需要构造一个字符显示的基础方法：`Print` 函数。它将保存在 `r0` 的字符串和保存在 `r1` 的字符串长度简单的写到屏幕上。有一些特定字符需要特别的注意，这些特定的操作是确保 `terminalView` 是最新的。我们来分析一下需要做什么：

1. 检查字符串的长度是否为 0，如果是就直接返回
2. 加载 `terminalStop` 和 `terminalView`
3. 计算出 `terminalStop` 的 x 坐标
4. 对每一个字符的操作：
	1. 检查字符是否为新起一行
	2. 如果是的话，自增 `bufferStop` 到行末，同时写入黑色删除字符
	3. 否则拷贝当前 `terminalColour` 的字符
	4. 检查是否在行末
	5. 如果是，检查从 `terminalView` 到 `terminalStop` 之间的字符数是否大于一屏
	6. 如果是，`terminalView` 自增一行
	7. 检查 `terminalView` 是否为缓冲区的末尾，如果是的话将其替换为缓冲区的起始位置
	8. 检查 `terminalStop` 是否为缓冲区的末尾，如果是的话将其替换为缓冲区的起始位置
	9. 检查 `terminalStop` 是否等于 `terminalStart`， 如果是的话 `terminalStart` 自增一行。
	10. 检查 `terminalStart` 是否为缓冲区的末尾，如果是的话将其替换为缓冲区的起始位置
5. 存取 `terminalStop` 和 `terminalView`

试一下自己去实现。我们的方案提供如下：

1、这个是 `Print` 函数开始快速检查字符串为0的代码

```
.globl Print
Print:
teq r1,#0
moveq pc,lr
```

2、这里我做了很多配置。 `bufferStart` 代表 `terminalStart`， `bufferStop` 代表`terminalStop`， `view` 代表 `terminalView`，`taddr` 代表 `terminalBuffer` 的末尾地址。

```
push {r4,r5,r6,r7,r8,r9,r10,r11,lr}
bufferStart .req r4
taddr .req r5
x .req r6
string .req r7
length .req r8
char .req r9
bufferStop .req r10
view .req r11

mov string,r0
mov length,r1

ldr taddr,=terminalStart
ldr bufferStop,[taddr,#terminalStop-terminalStart]
ldr view,[taddr,#terminalView-terminalStart]
ldr bufferStart,[taddr]
add taddr,#terminalBuffer-terminalStart
add taddr,#128*128*2
```

3、和通常一样，巧妙的对齐技巧让许多事情更容易。由于需要对齐 `terminalBuffer`，每个字符的 x 坐标需要 8 位要除以 2。

```
and x,bufferStop,#0xfe
lsr x,#1
```

4.1、我们需要检查新行

```
charLoop$:
ldrb char,[string]
and char,#0x7f
teq char,#'\n'
bne charNormal$
```

4.2、循环执行值到行末写入 0x7f；黑色删除字符

```
mov r0,#0x7f
clearLine$:
strh r0,[bufferStop]
add bufferStop,#2
add x,#1
teq x,#128 blt clearLine$

b charLoopContinue$
```

4.3、存储字符串的当前字符和 `terminalBuffer` 末尾的 `terminalColour` 然后将它和 x 变量自增

```
charNormal$:
strb char,[bufferStop]
ldr r0,=terminalColour
ldrb r0,[r0]
strb r0,[bufferStop,#1]
add bufferStop,#2
add x,#1
```

4.4、检查 x 是否为行末；128

```
charLoopContinue$:
cmp x,#128
blt noScroll$
```

4.5、设置 x 为 0 然后检查我们是否已经显示超过 1 屏。请记住，我们是用的循环缓冲区，因此如果 `bufferStop` 和 `view` 之前的差是负值，我们实际上是环绕了缓冲区。

```
mov x,#0
subs r0,bufferStop,view
addlt r0,#128*128*2
cmp r0,#128*(768/16)*2
```

4.6、增加一行字节到 `view` 的地址

```
addge view,#128*2
```

4.7、 如果 `view` 地址是缓冲区的末尾，我们就从它上面减去缓冲区的长度，让其指向开始位置。我会在开始的时候设置 `taddr` 为缓冲区的末尾地址。

```
teq view,taddr
subeq view,taddr,#128*128*2
```

4.8、如果 `stop` 的地址在缓冲区末尾，我们就从它上面减去缓冲区的长度，让其指向开始位置。我会在开始的时候设置 `taddr` 为缓冲区的末尾地址。

```
noScroll$:
teq bufferStop,taddr
subeq bufferStop,taddr,#128*128*2
```

4.9、检查 `bufferStop` 是否等于 `bufferStart`。 如果等于增加一行到 `bufferStart`。

```
teq bufferStop,bufferStart
addeq bufferStart,#128*2
```

4.10、如果 `start` 的地址在缓冲区的末尾，我们就从它上面减去缓冲区的长度，让其指向开始位置。我会在开始的时候设置 `taddr` 为缓冲区的末尾地址。

```
teq bufferStart,taddr
subeq bufferStart,taddr,#128*128*2
```

循环执行知道字符串结束

```
subs length,#1
add string,#1
bgt charLoop$
```

5、保存变量然后返回

```
charLoopBreak$:
sub taddr,#128*128*2
sub taddr,#terminalBuffer-terminalStart
str bufferStop,[taddr,#terminalStop-terminalStart]
str view,[taddr,#terminalView-terminalStart]
str bufferStart,[taddr]

pop {r4,r5,r6,r7,r8,r9,r10,r11,pc}
.unreq bufferStart
.unreq taddr
.unreq x
.unreq string
.unreq length
.unreq char
.unreq bufferStop
.unreq view
```

这个方法允许我们打印任意字符到屏幕。然而我们用了颜色变量，但实际上没有设置它。一般终端用特性的组合字符去行修改颜色。如 ASCII 转义（1b 16）后面跟着一个 0 - f 的 16 进制的数，就可以设置前景色为 CGA 颜色号。如果你自己想尝试实现；在下载页面有一个我的详细的例子。

### 4、标志输入

现在我们有一个可以打印和显示文本的输出终端。这仅仅是说对了一半，我们需要输入。我们想实现一个方法：`ReadLine`，可以保存文件的一行文本，文本位置由 `r0` 给出，最大的长度由 `r1` 给出，返回 `r0` 里面的字符串长度。棘手的是用户输出字符的时候要回显功能，同时想要退格键的删除功能和命令回车执行功能。它们还需要一个闪烁的下划线代表计算机需要输入。这些完全合理的要求让构造这个方法更具有挑战性。有一个方法完成这些需求就是存储用户输入的文本和文件大小到内存的某个地方。然后当调用 `ReadLine` 的时候，移动 `terminalStop` 的地址到它开始的地方然后调用 `Print`。也就是说我们只需要确保在内存维护一个字符串，然后构造一个我们自己的打印函数。

>
> 按照惯例，许多编程语言中，任意程序可以访问 stdin 和 stdin，它们可以连接到终端的输入和输出流。在图形程序其实也可以进行同样操作，但实际几乎不用。
>
>
>

让我们看看 `ReadLine` 做了哪些事情：

1. 如果字符串可保存的最大长度为 0，直接返回
2. 检索 `terminalStop` 和 `terminalStop` 的当前值
3. 如果字符串的最大长度大约缓冲区的一半，就设置大小为缓冲区的一半
4. 从最大长度里面减去 1 来确保输入的闪烁字符或结束符
5. 向字符串写入一个下划线
6. 写入一个 `terminalView` 和 `terminalStop` 的地址到内存
7. 调用 `Print` 打印当前字符串
8. 调用 `TerminalDisplay`
9. 调用 `KeyboardUpdate`
10. 调用 `KeyboardGetChar`
11. 如果是一个新行直接跳转到第 16 步
12. 如果是一个退格键，将字符串长度减 1（如果其大于 0）
13. 如果是一个普通字符，将它写入字符串（字符串大小确保小于最大值）
14. 如果字符串是以下划线结束，写入一个空格，否则写入下划线
15. 跳转到第 6 步
16. 字符串的末尾写入一个新行字符
17. 调用 `Print` 和 `TerminalDisplay`
18. 用结束符替换新行
19. 返回字符串的长度

为了方便读者理解，然后然后自己去实现，我们的实现提供如下：

1. 快速处理长度为 0 的情况

```
.globl ReadLine
ReadLine:
teq r1,#0
moveq r0,#0
moveq pc,lr
```

2、考虑到常见的场景，我们初期做了很多初始化动作。`input` 代表 `terminalStop` 的值，`view` 代表 `terminalView`。`Length` 默认为 `0`。

```
string .req r4
maxLength .req r5
input .req r6
taddr .req r7
length .req r8
view .req r9

push {r4,r5,r6,r7,r8,r9,lr}

mov string,r0
mov maxLength,r1
ldr taddr,=terminalStart
ldr input,[taddr,#terminalStop-terminalStart]
ldr view,[taddr,#terminalView-terminalStart]
mov length,#0
```

3、我们必须检查异常大的读操作，我们不能处理超过 `terminalBuffer` 大小的输入（理论上可行，但是 `terminalStart` 移动越过存储的 terminalStop`，会有很多问题）。

```
cmp maxLength,#128*64
movhi maxLength,#128*64
```

4、由于用户需要一个闪烁的光标，我们需要一个备用字符在理想状况在这个字符串后面放一个结束符。

```
sub maxLength,#1
```

5、写入一个下划线让用户知道我们可以输入了。

```
mov r0,#'_'
strb r0,[string,length]
```

6、保存 `terminalStop` 和 `terminalView`。这个对重置一个终端很重要，它会修改这些变量。严格讲也可以修改 `terminalStart`，但是不可逆。

```
readLoop$:
str input,[taddr,#terminalStop-terminalStart]
str view,[taddr,#terminalView-terminalStart]
```

7、写入当前的输入。由于下划线因此字符串长度加 1

```
mov r0,string
mov r1,length
add r1,#1
bl Print
```

8、拷贝下一个文本到屏幕

```
bl TerminalDisplay
```

9、获取最近一次键盘输入

```
bl KeyboardUpdate
```

10、检索键盘输入键值

```
bl KeyboardGetChar
```

11、如果我们有一个回车键，循环中断。如果有结束符和一个退格键也会同样跳出循环。

```
teq r0,#'\n'
beq readLoopBreak$
teq r0,#0
beq cursor$
teq r0,#'\b'
bne standard$
```

12、从 `length` 里面删除一个字符

```
delete$:
cmp length,#0
subgt length,#1
b cursor$
```

13、写回一个普通字符

```
standard$:
cmp length,maxLength
bge cursor$
strb r0,[string,length]
add length,#1
```

14、加载最近的一个字符，如果不是下划线则修改为下换线，如果是则修改为空格

```
cursor$:
ldrb r0,[string,length]
teq r0,#'_'
moveq r0,#' '
movne r0,#'_'
strb r0,[string,length]
```

15、循环执行值到用户输入按下

```
b readLoop$
readLoopBreak$:
```

16、在字符串的结尾处存入一个新行字符

```
mov r0,#'\n'
strb r0,[string,length]
```

17、重置 `terminalView` 和 `terminalStop` 然后调用 `Print` 和 `TerminalDisplay` 显示最终的输入

```
str input,[taddr,#terminalStop-terminalStart]
str view,[taddr,#terminalView-terminalStart]
mov r0,string
mov r1,length
add r1,#1
bl Print
bl TerminalDisplay
```

18、写入一个结束符

```
mov r0,#0
strb r0,[string,length]
```

19、返回长度

```
mov r0,length
pop {r4,r5,r6,r7,r8,r9,pc}
.unreq string
.unreq maxLength
.unreq input
.unreq taddr
.unreq length
.unreq view
```

### 5、终端：机器进化

现在我们理论用终端和用户可以交互了。最显而易见的事情就是拿去测试了！删除 `main.s` 里 `bl UsbInitialise` 后面的代码后如下：

```
reset$:
  mov sp,#0x8000
  bl TerminalClear

  ldr r0,=welcome
  mov r1,#welcomeEnd-welcome
  bl Print

loop$:
  ldr r0,=prompt
  mov r1,#promptEnd-prompt
  bl Print

  ldr r0,=command
  mov r1,#commandEnd-command
  bl ReadLine

  teq r0,#0
  beq loopContinue$

  mov r4,r0

  ldr r5,=command
  ldr r6,=commandTable

  ldr r7,[r6,#0]
  ldr r9,[r6,#4]
  commandLoop$:
    ldr r8,[r6,#8]
    sub r1,r8,r7

    cmp r1,r4
    bgt commandLoopContinue$

    mov r0,#0
    commandName$:
      ldrb r2,[r5,r0]
      ldrb r3,[r7,r0]
      teq r2,r3
      bne commandLoopContinue$
      add r0,#1
      teq r0,r1
      bne commandName$

    ldrb r2,[r5,r0]
    teq r2,#0
    teqne r2,#' '
    bne commandLoopContinue$

    mov r0,r5
    mov r1,r4
    mov lr,pc
    mov pc,r9
    b loopContinue$

  commandLoopContinue$:
    add r6,#8
    mov r7,r8
    ldr r9,[r6,#4]
    teq r9,#0
    bne commandLoop$

  ldr r0,=commandUnknown
  mov r1,#commandUnknownEnd-commandUnknown
  ldr r2,=formatBuffer
  ldr r3,=command
  bl FormatString

  mov r1,r0
  ldr r0,=formatBuffer
  bl Print

loopContinue$:
  bl TerminalDisplay
  b loop$

echo:
  cmp r1,#5
  movle pc,lr

  add r0,#5
  sub r1,#5
  b Print

ok:
  teq r1,#5
  beq okOn$
  teq r1,#6
  beq okOff$
  mov pc,lr

  okOn$:
    ldrb r2,[r0,#3]
    teq r2,#'o'
    ldreqb r2,[r0,#4]
    teqeq r2,#'n'
    movne pc,lr
    mov r1,#0
    b okAct$

  okOff$:
    ldrb r2,[r0,#3]
    teq r2,#'o'
    ldreqb r2,[r0,#4]
    teqeq r2,#'f'
    ldreqb r2,[r0,#5]
    teqeq r2,#'f'
    movne pc,lr
    mov r1,#1

  okAct$:

    mov r0,#16
    b SetGpio

.section .data
.align 2
welcome: .ascii "Welcome to Alex's OS - Everyone's favourite OS"
welcomeEnd:
.align 2
prompt: .ascii "\n> "
promptEnd:
.align 2
command:
  .rept 128
    .byte 0
  .endr
commandEnd:
.byte 0
.align 2
commandUnknown: .ascii "Command `%s' was not recognised.\n"
commandUnknownEnd:
.align 2
formatBuffer:
  .rept 256
    .byte 0
  .endr
formatEnd:

.align 2
commandStringEcho: .ascii "echo"
commandStringReset: .ascii "reset"
commandStringOk: .ascii "ok"
commandStringCls: .ascii "cls"
commandStringEnd:

.align 2
commandTable:
.int commandStringEcho, echo
.int commandStringReset, reset$
.int commandStringOk, ok
.int commandStringCls, TerminalClear
.int commandStringEnd, 0
```

这块代码集成了一个简易的命令行操作系统。支持命令：`echo`、`reset`、`ok` 和 `cls`。`echo` 拷贝任意文本到终端，`reset` 命令会在系统出现问题的是复位操作系统，`ok` 有两个功能：设置 OK 灯亮灭，最后 `cls` 调用 TerminalClear 清空终端。

试试树莓派的代码吧。如果遇到问题，请参照问题集锦页面吧。

如果运行正常，祝贺你完成了一个操作系统基本终端和输入系列的课程。很遗憾这个教程先讲到这里，但是我希望将来能制作更多教程。有问题请反馈至 [awc32@cam.ac.uk](mailto:awc32@cam.ac.uk)。

你已经在建立了一个简易的终端操作系统。我们的代码在 commandTable 构造了一个可用的命令表格。每个表格的入口是一个整型数字，用来表示字符串的地址，和一个整型数字表格代码的执行入口。 最后一个入口是 为 0 的 `commandStringEnd`。尝试实现你自己的命令，可以参照已有的函数，建立一个新的。函数的参数 `r0` 是用户输入的命令地址，`r1` 是其长度。你可以用这个传递你输入值到你的命令。也许你有一个计算器程序，或许是一个绘图程序或国际象棋。不管你的什么点子，让它跑起来！

---

via: <https://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/input02.html>

作者：[Alex Chadwick](https://www.cl.cam.ac.uk) 选题：[lujun9972](https://github.com/lujun9972) 译者：[guevaraya](https://github.com/guevaraya) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Git 十四周年：你喜欢 Git 的哪一点？

Summary: Git 为软件开发所带来的巨大影响是其它工具难以企及的。

Git 为软件开发所带来的巨大影响是其它工具难以企及的。

>
> Git 为软件开发所带来的巨大影响是其它工具难以企及的。
>
>
>

![](/data/attachment/album/201904/10/002048zf7mpz94rnmm7n1i.jpg)

在 Linus Torvalds 开发 Git 后的十四年间，它为软件开发所带来的影响是其它工具难以企及的：在 [StackOverflow 的 2018 年开发者调查](https://insights.stackoverflow.com/survey/2018/#work-_-version-control) 中，87% 的受访者都表示他们使用 Git 来作为他们项目的版本控制工具。显然，没有其它工具能撼动 Git 版本控制管理工具（SCM）之王的地位。

为了在 4 月 7 日 Git 的十四周年这一天向 Git 表示敬意，我问了一些爱好者他们最喜欢 Git 的哪一点。以下便是他们所告诉我的：

（为了便于理解，部分回答已经进行了小幅修改）

>
> “我无法忍受 Git。无论是难以理解的术语还是它的分布式。使用 Gerrit 这样的插件才能使它像 Subversion 或 Perforce 这样的集中式仓库管理器使用的工具的一半好用。不过既然这次的问题是‘你喜欢 Git 的什么？’，我还是希望回答：Git 使得对复杂的源代码树操作成为可能，并且它的回滚功能使得实现一个要 20 次修改才能更正的问题变得简单起来。”
>
>
> — [Sweet Tea Dorminy](https://github.com/sweettea)
>
>
>

>
> “我喜欢 Git 是因为它不会强制我执行特定的工作流程，并且开发团队可以自由地以适合自己的方式来进行团队开发，无论是拉取请求、以电子邮件递送差异文件或是给予所有人推送的权限。”
>
>
> — [Andy Price](https://www.linkedin.com/in/andrew-price-8771796/)
>
>
>

>
> “我从 2006、2007 年的样子就开始使用 Git 了。我喜欢 Git 是因为，它既适用于那种从未离开过我电脑的小项目，也适用于大型的团队合作的分布式项目。Git 使你可以从（几乎）所有的错误提交中回滚到先前版本，这个功能显著地减轻了我在软件版本管理方面的压力。”
>
>
> — [Jonathan S. Katz](https://opensource.com/users/jkatz05)
>
>
>

>
> “我很欣赏 Git 那种 [底层命令和高层命令](https://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain) 的理念。用户可以使用 Git 有效率地分享任何形式的信息，而不需要知道其内部工作原理。而好奇的人可以透过其表层的命令，而发现其为许多代码分享平台提供了支持的可以定位内容的文件系统。”
>
>
> — [Matthew Broberg](https://opensource.com/users/mbbroberg)
>
>
>

>
> “我喜欢 Git 是因为浏览、开发、构建、测试和向我的 Git 仓库中提交代码的工作几乎都能用它来完成。它经常会调动起我参与开源项目的积极性。”
>
>
> — [Daniel Oh](https://opensource.com/users/daniel-oh)
>
>
>

>
> “Git 是我用过的首个版本控制工具。数年间，它从一个可怕的工具变成了一个友好的工具。我喜欢它使你在修改代码的时候更加自信，因为它能保证你主分支的安全（除非你强制提交了一段考虑不周的代码到主分支）。你可以检出先前的提交来撤销更改，这一点也是很棒的。”
>
>
> — [Kedar Vijay Kulkarni](https://opensource.com/users/kkulkarn)
>
>
>

>
> “我之所以喜欢 Git 是因为它淘汰了一些其它的版本控制工具。没人使用 VSS，而 Subversion 可以和 git-svn 一起使用（如果必要），BitKeeper 则和 Monotone 一样只为老一辈所知。当然，我们还有 Mercurial，不过在我几年之前用它来为 Firefox 添加 AArch64 支持时，我觉得它仍是那种还未完善的工具。部分人可能还会提到 Perforce、SourceSafe 或是其它企业级的解决方案，我只想说它们在开源世界里并不流行。”
>
>
> — [Marcin Juszkiewicz](https://github.com/hrw)
>
>
>

>
> “我喜欢内置的 SHA1 化对象模型（commit → tree → blob）的简易性。我也喜欢它的高层命令。同时我也将它作为对 JBoss/Red Hat Fuse 的补丁机制。并且这种机制确实有效。我还喜欢 Git 的 [三棵树的故事](https://speakerdeck.com/schacon/a-tale-of-three-trees)。”
>
>
> — [Grzegorz Grzybek](https://github.com/grgrzybek)
>
>
>

>
> “我喜欢 [自动生成的 Git 说明页](https://git-man-page-generator.lokaltog.net/)（这个页面虽然听起来是有关 Git 的，但是事实上这是一个没有实际意义的页面，不过它总是会给人一种像是真的 Git 页面的感觉…），这使得我对 Git 的敬意油然而生。”
>
>
> — [Marko Myllynen](https://github.com/myllynen)
>
>
>

>
> “Git 改变了我作为开发者的生活。它使得 SCM 问题从世界上消失得无影无踪。”
>
>
> — [Joel Takvorian](https://github.com/jotak)
>
>
>

看完这十个爱好者的回答之后，就轮到你了：你最欣赏 Git 的什么？请在评论区分享你的看法！

---

via: <https://opensource.com/article/19/4/what-do-you-love-about-git>

作者：[Jen Wike Huger](https://opensource.com/users/jen-wike/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[zhs852](https://github.com/zhs852) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


小白观察：微软释放出其基于 Chromium 的 Edge 浏览器

Not support Linux.<br />
Honestly, Linux doesn't need Edge too.

这到底是有多恨啊？恨不得给她怀个宝宝。

来自湖北武汉的 Chrome Mobile 57.0|Android 8.1 用户

计划支持 Linux 的 ： https://linux.cn/article-10706-1.html

![](/data/attachment/album/201904/10/084430g7i3f3cdaxvrcwii.png)

### Big News

**微软释放出其基于 Chromium 的 Edge 浏览器**：微软为了改进浏览器的兼容性以及减少前端领域的碎片化，主动发起改革，将 Edge 浏览器的内核由自家的 EdgeHTML 变为 Chromium 提供的 WebKit 内核。

![](/data/attachment/album/201904/10/084431prsd2evs2wzrawrv.jpg)

对于前端来说，还真的是一个大的利好消息，当 Edge 也开始使用 Chromium 内核以后，前端开发者以后只需要兼容两种渲染引擎了，分别是 Firefox 使用的 Gecko 和 Chromium 使用的 Webkit。这当然算是一件好事情。 不过，反过来想一想，如果渲染引擎一家独大的话，那未来， HTML 标准的定制是否也需要看浏览器内核厂商的脸色呢？

信息来源：[【MicrosoftEdgeInsider】](https://www.microsoftedgeinsider.com/en-us/download/)

### Quick News

* **共享单车迎来涨价潮**：近日，北京地区的共享单车开始实行新的收费价格表。摩拜单车新版骑行15分钟以内收费1元，超出部分每15分钟收费0.5元，骑行一小时费用为2.5元。小蓝单车则是起步价由每30分钟1元更改为每15分钟1元，超出时长后每15分钟0.5元，骑行1小时同样为2.5元。[【虎嗅】](https://www.huxiu.com/article/293086.html)
* **Windows Embedded POSReady 2009 停止服务**： Windows Embedded POSReady 2009 是微软基于 Windows XP SP3 定制的为服务点（POS）设计的嵌入式操作系统，广泛适用于收银机、服务亭、电子标牌、ATM机、加油机等设备。[【快科技】](http://news.mydrivers.com/1/622/622275.htm)
* **虚拟货币“挖矿”活动被列为淘汰产业**：近日国家发改委发布的关于就《产业结构调整指导目录（2019年本，征求意见稿）》中将虚拟货币“挖矿”活动列入淘汰类产业之中。[【每日经济新闻】](http://www.nbd.com.cn/articles/2019-04-09/1319268.html)


如何在 Linux 分区或逻辑卷中创建文件系统

Summary: 学习在你的系统中创建一个文件系统，并且长期或者非长期地挂载它。

文章中挂载写的很对，有些人喜欢在fstab里面挂在时写入类似于/dev/sdb1这种的设备名，其实是很不好的习惯，因为设备名称说不定哪天就变了，用UUID来挂载就能解决这个问题，不过如果移除这个设备的话一定要记得把fstab中对应的UUID挂载设置注释或者去掉，不然系统会出现启动时的挂在错误，从而造成系统无法正常启动

学习在你的系统中创建一个文件系统，并且长期或者非长期地挂载它。

>
> 学习在你的系统中创建一个文件系统，并且长期或者非长期地挂载它。
>
>
>

![Filing papers and documents](/data/attachment/album/201904/10/091522togk8moea78gu7u6.png "Filing papers and documents")

在计算技术中，文件系统控制如何存储和检索数据，并且帮助组织存储媒介中的文件。如果没有文件系统，信息将被存储为一个大数据块，而且你无法知道一条信息在哪结束，下一条信息在哪开始。文件系统通过为存储数据的文件提供名称，并且在文件系统中的磁盘上维护文件和目录表以及它们的开始和结束位置、总的大小等来帮助管理所有的这些信息。

在 Linux 中，当你创建一个硬盘分区或者逻辑卷之后，接下来通常是通过格式化这个分区或逻辑卷来创建文件系统。这个操作方法假设你已经知道如何创建分区或逻辑卷，并且你希望将它格式化为包含有文件系统，并且挂载它。

### 创建文件系统

假设你为你的系统添加了一块新的硬盘并且在它上面创建了一个叫 `/dev/sda1` 的分区。

1、为了验证 Linux 内核已经发现这个分区，你可以 `cat` 出 `/proc/partitions` 的内容，就像这样：

```
[root@localhost ~]# cat /proc/partitions
major minor  #blocks  name

 253            0   10485760 vda
 253            1       8192000 vda1
  11            0       1048575 sr0
  11            1       374 sr1
   8            0   10485760 sda
   8            1   10484736 sda1
 252            0       3145728 dm-0
 252            1       2097152 dm-1
 252            2       1048576 dm-2
   8    16      1048576 sdb
```

2、决定你想要去创建的文件系统种类，比如 ext4、XFS，或者其他的一些。这里是一些可选项：

```
[root@localhost ~]# mkfs.<tab><tab>
mkfs.btrfs mkfs.cramfs mkfs.ext2 mkfs.ext3 mkfs.ext4 mkfs.minix mkfs.xfs
```

3、为了这次练习的目的，选择 ext4。（我喜欢 ext4，因为如果你需要的话，它可以允许你去压缩文件系统，这对于 XFS 并不简单。）这里是完成它的方法（输出可能会因设备名称或者大小而不同）：

```
[root@localhost ~]# mkfs.ext4 /dev/sda1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=8191 blocks
194688 inodes, 778241 blocks
38912 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=799014912
24 block groups
32768 blocks per group, 32768 fragments per group
8112 inodes per group
Superblock backups stored on blocks:
     32768, 98304, 163840, 229376, 294912

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
```

4、在上一步中，如果你想去创建不同的文件系统，请使用不同变种的 `mkfs` 命令。

### 挂载文件系统

当你创建好文件系统后，你可以在你的操作系统中挂载它。

1、首先，识别出新文件系统的 UUID 编码。使用 `blkid` 命令列出所有可识别的块存储设备并且在输出信息中查找 `sda1`：

```
[root@localhost ~]# blkid
/dev/vda1: UUID="716e713d-4e91-4186-81fd-c6cfa1b0974d" TYPE="xfs"
/dev/sr1: UUID="2019-03-08-16-17-02-00" LABEL="config-2" TYPE="iso9660"
/dev/sda1: UUID="wow9N8-dX2d-ETN4-zK09-Gr1k-qCVF-eCerbF" TYPE="LVM2_member"
/dev/mapper/test-test1: PTTYPE="dos"
/dev/sda1: UUID="ac96b366-0cdd-4e4c-9493-bb93531be644" TYPE="ext4"
[root@localhost ~]#
```

2、运行下面的命令挂载 `/dev/sd1` 设备：

```
[root@localhost ~]# mkdir /mnt/mount_point_for_dev_sda1
[root@localhost ~]# ls /mnt/
mount_point_for_dev_sda1
[root@localhost ~]# mount -t ext4 /dev/sda1 /mnt/mount_point_for_dev_sda1/
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 7.9G 920M 7.0G 12% /
devtmpfs 443M 0 443M 0% /dev
tmpfs 463M 0 463M 0% /dev/shm
tmpfs 463M 30M 434M 7% /run
tmpfs 463M 0 463M 0% /sys/fs/cgroup
tmpfs 93M 0 93M 0% /run/user/0
/dev/sda1 2.9G 9.0M 2.7G 1% /mnt/mount_point_for_dev_sda1
[root@localhost ~]#
```

命令 `df -h` 显示了每个文件系统被挂载的挂载点。查找 `/dev/sd1`。上面的挂载命令使用的设备名称是 `/dev/sda1`。用 `blkid` 命令中的 UUID 编码替换它。注意，在 `/mnt` 下一个被新创建的目录挂载了 `/dev/sda1`。

3、直接在命令行下使用挂载命令（就像上一步一样）会有一个问题，那就是挂载不会在设备重启后存在。为使永久性地挂载文件系统，编辑 `/etc/fstab` 文件去包含你的挂载信息：

```
UUID=ac96b366-0cdd-4e4c-9493-bb93531be644 /mnt/mount_point_for_dev_sda1/ ext4 defaults 0 0
```

4、编辑完 `/etc/fstab` 文件后，你可以 `umount /mnt/mount_point_for_fev_sda1` 并且运行 `mount -a` 命令去挂载被列在 `/etc/fstab` 文件中的所有设备文件。如果一切顺利的话，你可以使用 `df -h` 列出并且查看你挂载的文件系统：

```
root@localhost ~]# umount /mnt/mount_point_for_dev_sda1/
[root@localhost ~]# mount -a
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 7.9G 920M 7.0G 12% /
devtmpfs 443M 0 443M 0% /dev
tmpfs 463M 0 463M 0% /dev/shm
tmpfs 463M 30M 434M 7% /run
tmpfs 463M 0 463M 0% /sys/fs/cgroup
tmpfs 93M 0 93M 0% /run/user/0
/dev/sda1 2.9G 9.0M 2.7G 1% /mnt/mount_point_for_dev_sda1
```

5、你也可以检测文件系统是否被挂载：

```
[root@localhost ~]# mount | grep ^/dev/sd
/dev/sda1 on /mnt/mount_point_for_dev_sda1 type ext4 (rw,relatime,seclabel,stripe=8191,data=ordered)
```

现在你已经知道如何去创建文件系统并且长期或者非长期的挂载在你的系统中。

---

via: <https://opensource.com/article/19/4/create-filesystem-linux-partition>

作者：[Kedar Vijay Kulkarni (Red Hat)](https://opensource.com/users/kkulkarn) 选题：[lujun9972](https://github.com/lujun9972) 译者：[liujing97](https://github.com/liujing97) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


小白观察：被删除的 Facebook 账户依然会收集你的个人信息

![](/data/attachment/album/201904/11/090334y2b9hqtuhobtuutt.png)

### Big News

**被删除的 Facebook 账户依然会收集你的个人信息**：根据 CNET 的最新报道，即使你已经 deactivate 了你的账号， Facebook 依然会追踪你的信息。

Facebook 表示，删除帐户，只会删除你的所有数据，但会继续收集你的信息，以防你改变主意并希望找回你的个人资料

![](/data/attachment/album/201904/11/090317nf3xmjiluvd0ckzn.png)

>
> 在大数据的时代，我们为了便利所拱手让出去的个人隐私，将吞噬我们的生活。再想拿回，几乎再无可能。如何将公司的欲望关进笼子里，我们需要和苹果学一学。
>
>
>

信息来源：[【CNET】](https://www.cnet.com/news/facebook-is-still-tracking-you-after-you-deactivate-your-account/)

### Quick News

* **Microsoft Edge 浏览器将有可能进入 Linux**：根据微软员工 Kyle Pflug 在 Twitter 上的回应，Microsoft Edge 浏览器将有可能进入 Linux 系统。[【Twitter】](https://twitter.com/kylealden/status/1115307632124780545?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1115307632124780545&ref_url=https%3A%2F%2Fwww.omgubuntu.co.uk%2F2019%2F04%2Fmicrosoft-edge-may-come-to-linux-eventually-just-not-right-now)

>
> 在 Linux 下也可以跑 IE 了！
>
>
>
* **Redhat 公司寻求推出基于 ARM 的 Linux 系统**：Redhat 正在研究如何将 Fedora 操作系统移植到 ARM 芯片的设备上。不同于 Android 仅仅基于 Linux 内核，此项目旨在移植整个桌面环境。[【Twitter】](https://twitter.com/nullr0ute/status/1114903426624704512?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1114903426624704512&ref_url=https%3A%2F%2Fwww.omgubuntu.co.uk%2F2019%2F04%2Fthings-are-looking-up-for-linux-on-arm-laptops)

>
> 手机越做越大，电脑却越做越小。莫非终极就是 Pad？
>
>
>
* **Slack 支持 Office 365 工具的接入**：Slack 是大家常用的协作工具，Office 365 的接入将为其效率工作提供更强大的助力。[【Techcrunch】](https://techcrunch.cn/2019/04/10/slack-integration-with-office-365-one-more-step-toward-total-enterprise-integration/)

>
> Slack 越来越好用了，就是国内访问不太好
>
>
>


学习使用树莓派的 7 个资源

Summary: 一些缩短树莓派学习曲线的书籍、课程和网站。

一些缩短树莓派学习曲线的书籍、课程和网站。

>
> 一些缩短树莓派学习曲线的书籍、课程和网站。
>
>
>

![](/data/attachment/album/201904/11/101010bh5mymhe677f37df.png)

[树莓派](https://opensource.com/resources/raspberry-pi)是一款小型单板计算机，最初用于教学和学习编程和计算机科学。但如今它有更多用处。它是一种经济的低功耗计算机，人们将它用于各种各样的事情 —— 从家庭娱乐到服务器应用，再到物联网（IoT） 项目。

关于这个主题有很多资源，你可以做很多不同的项目，却很难知道从哪里开始。以下是一些资源，可以帮助你开始使用树莓派。看看这篇文章，但不要满足于此。到处看下，深入下去你就会发现树莓派的新世界。

### 书籍

关于树莓派有很多不同语言的书籍。这两本书将帮助你开始了解，然后深入了解树莓派。

#### 由 Simon Monk 编写的《树莓派手边书：软件和硬件问题及解决方案》

Simon Monk 是一名软件工程师，并且多年来一直是业余手工爱好者。他最初被 Arduino 这块易于使用的开发板所吸引，后来出版了一本关于它的[书](http://simonmonk.org/progardui2ed/)。后来，他开始使用树莓派并写了《[树莓派手边书：软件和硬件问题和解决方案](http://simonmonk.org/raspberry-pi-cookbook-ed2/)》这本书。在本书中，你可以找到大量树莓派项目的最佳时间，以及你可能面对的各种挑战的解决方案。

#### 由 Simon Monk 编写的《树莓派编程：从 Python 入门》

Python 已经发展成为开始一个树莓派项目的首选编程语言，因为它易于学习和使用，即使你没有任何编程经验。此外，它的许多库可以帮助你专注于使你的项目变得特别，而不是实现协议以与传感器反复通信。Monk 在《树莓派手边书》中写了两章关于 Python 编程，但《[树莓派编程：从 Python 入门](http://simonmonk.org/programming-raspberry-pi-ed2/)》是一个更全面的快速入门。它向你介绍了 Python，并向你展示了可以在树莓派上使用它创建的一些项目。

### 在线课程

新的树莓派用户可以选择许多在线课程和教程，包括这个入门课程。

#### 树莓派课程

Instructables 免费的在线[树莓派课程](https://www.instructables.com/class/Raspberry-Pi-Class/)提供了对树莓派的全面介绍。它从树莓派和 Linux 操作基础开始，然后进入 Python 编程和 GPIO 通信。如果你是这方面的新手，并希望快速入门，这使它成为一个很好的自上而下的树莓派指南。

### 网站

网络中充斥着关于树莓派的优秀信息，但这四个网站对于新用户而言应该首先知道。

#### RaspberryPi.org

官方的[树莓派](https://raspberrypi.org)网站是最好的入门之一。有许多关于特定项目的文章会链接到这里的基础知识，如将 Raspbian 安装到树莓派上。（这是我倾向的做法，而不是在每篇文章中重复说明。）你还可以找到学生技术[教育](https://www.raspberrypi.org/training/online)方面的[示例项目](https://projects.raspberrypi.org/)和课程。

#### Opensource.com

在 Opensource.com 上，你可以找到许多不同的树莓派项目指导、入门指南、成功案例、更新等。看一下[树莓派主题页面](https://opensource.com/tags/raspberry-pi)，了解人们在树莓派上做了什么。

#### Instructables 和 Hackaday

你想造自己的复古街机么？或者在镜子上显示当天的天气信息、时间和第一事务？你是否想要为派对创建一个文字时钟或者相簿？你可以在 [Instructables](https://www.instructables.com/technology/raspberry-pi/) 和 [Hackaday](https://hackaday.io/projects?tag=raspberry%20pi) 这样的网站上找到如何使用树莓派完成所有这些（以及更多！）的说明。如果你不确定是否要买树莓派，请浏览这些网站，你会发现有很多理由值得购买。

你最喜欢的树莓派资源是什么？请在评论中分享！

---

via: <https://opensource.com/article/19/3/resources-raspberry-pi>

作者：[Manuel Dewald](https://opensource.com/users/ntlx) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


每日安全资讯：赔 1.175 亿美元！雅虎再次试图和解 30 亿账号数据泄露案

![](/data/attachment/album/201904/11/101537ass098s6kfssa5qk.jpg)

>
> 雅虎再次试图就此前影响 30 亿账号大规模数据泄露集体诉讼提出和解，并将赔偿金提高至 1.175 亿美元。
>
>
>

据路透社 4 月 9 日报道，此次当天公开的集体诉讼和解方案旨在解决美国加州圣何塞地区法官 Lucy Koh 的批评。早先 1 月 28 日，Lucy Koh 否决了该和解协议的一个早期版本，称这一和解方案并非“基本公平、充分和合理”，因为它没有列出整体金额，也没有说明期望覆盖多少受害者。她还提到法律费用似乎过高。

此次新的和解协议依旧需要法官 Lucy Koh 的批准才能成行。

雅虎被指控 2013 年 - 2016 年期间的 3 次数据泄露事件信息公开太迟，这也是历史上最大规模的数据泄露，30 亿账号受到影响，数百万人的邮箱地址和其他个人信息被盗。

新的和解方案包括至少 5500 万美元用于受害者的自付和其他费用，2400 万美元用于两年的信用监控，以及高达 3000 万美元的法律费用和 850 万美元的其他费用。本案覆盖美国和以色列约 1.94 亿人，约 8.96 亿个账户。

原告律师 John Yanchunis 在一份法庭文件中称，1.175 亿美元是“数据泄露案中有史以来的最大共同基金”。他没有立即回应置评请求。

雅虎现在的母公司威瑞森通信（Verizon Communications）也同意在 2019 - 2022 年间投入 3.06 亿美元用于信息安全，这个数字是雅虎 2013 - 2016 年间的5倍。威瑞森还承诺，将雅虎信息安全领域的员工人数扩大成原来的 4 倍。

2016 年 7 月，雅虎同意将其互联网业务以 48.3 亿美元的价格出售给威瑞森，在此之后才披露了信息泄露的规模，这导致收购价格降至 44.8 亿美元。2017 年，美国检方起诉了其中一起数据泄露事件中黑进雅虎的两名俄罗斯特工，其中一名随后被判为有罪。

来源：澎湃新闻

### 更多资讯

#### 流行开发工具 bootstrap-sass 被修改植入后门

全研究人员在官方的 RubyGems 库发现了后门版本的网站开发工具 bootstrap-sass。该工具的下载量高达 2800 万次，但这并不意味着下载的所有版本都存在后门，受影响的版本是 v3.2.0.3，研究人员呼吁用户尽可能快的更新，认为可能有数千应用受到影响。

来源： solidot.org
详情： <http://t.cn/E6TbyjR>

#### Mirai 新变种加入更多物联网设备

Palo Alto Networks 的研究人员报告了物联网僵尸网络 Mirai 的新变种，它加入了四种处理器 Altera Nios II、OpenRISC、Tensilica Xtensa 和 Xilinx MicroBlaze，这些处理器被广泛用于嵌入式系统，包括路由器、网络传感器、基带无线电和数字信号处理器。

来源： solidot.org
详情： <http://t.cn/E6TbcRe>

#### 比特币经销商因未经许可的加密货币交易而被判两年徒刑

据外媒 The Verge 报道，一名 22 岁男子因出售未经许可的比特币被判入狱两年。他因没有在美国财政部下属的金融犯罪执法网络（FinCEN）登记的情况下进行比特币交易而被判有罪。

来源： cnBeta.COM
详情： <http://t.cn/E6TbaIz>

#### 英国学生 Zain Qaiser 因勒索世界各地的色情网站用户而被判入狱

据 BBC 报道，一名使世界各地色情网站用户遭受网络攻击、并由此获利数十万美元的学生已被判入狱。来自伦敦巴尔金的 Zain Qaiser 使用他的编程技巧来欺骗世界各地色情网站的用户。调查人员已经发现了大约 70 万英镑的利润 - 但他的网络可能已经使他获利超过 400 万英镑。

来源： cnBeta.COM
详情： <http://t.cn/E6TblQ1>

（信息来源于网络，安华金和搜集整理）


使用 FlightGear 翱翔天空

Summary: 你梦想驾驶飞机么？试试开源飞行模拟器 FlightGear 吧。

你梦想驾驶飞机么？试试开源飞行模拟器 FlightGear 吧。

>
> 你梦想驾驶飞机么？试试开源飞行模拟器 FlightGear 吧。
>
>
>

![](/data/attachment/album/201904/11/103806ecifcinjgxcx0jc4.jpg)

如果你曾梦想驾驶飞机，你会喜欢 [FlightGear](http://home.flightgear.org/) 的。它是一个功能齐全的[开源](http://wiki.flightgear.org/GNU_General_Public_License)飞行模拟器，可在 Linux、MacOS 和 Windows 中运行。

FlightGear 项目始于 1996 年，原因是对商业飞行模拟程序的不满，因为这些程序无法扩展。它的目标是创建一个复杂、强大、可扩展、开放的飞行模拟器框架，来用于学术界和飞行员培训，以及任何想要玩飞行模拟场景的人。

### 入门

FlightGear 的硬件要求适中，包括支持 OpenGL 以实现平滑帧速的加速 3D 显卡。它在我的配备 i5 处理器和仅 4GB 的内存的 Linux 笔记本上运行良好。它的文档包括[在线手册](http://flightgear.sourceforge.net/getstart-en/getstart-en.html)、一个面向[用户](http://wiki.flightgear.org/Portal:User)和[开发者](http://wiki.flightgear.org/Portal:Developer)的 [wiki](http://wiki.flightgear.org/FlightGear_Wiki) 门户网站，还有大量的教程（例如它的默认飞机 [Cessna 172p](http://wiki.flightgear.org/Cessna_172P)）教你如何操作它。

在 [Fedora](http://rpmfind.net/linux/rpm2html/search.php?query=flightgear) 和 [Ubuntu](https://launchpad.net/%7Esaiarcot895/+archive/ubuntu/flightgear) Linux 中很容易安装。Fedora 用户可以参考 [Fedora 安装页面](https://apps.fedoraproject.org/packages/FlightGear/)来运行 FlightGear。

在 Ubuntu 18.04 中，我需要安装一个仓库：

```
$ sudo add-apt-repository ppa:saiarcot895/flightgear
$ sudo apt-get update
$ sudo apt-get install flightgear
```

安装完成后，我从 GUI 启动它，但你也可以通过输入以下命令从终端启动应用：

```
$ fgfs
```

### 配置 FlightGear

应用窗口左侧的菜单提供配置选项。

![](/data/attachment/album/201904/11/103852x7t0smugfms7fkfb.png)

“Summary” 返回应用的主页面。

“Aircraft” 显示你已安装的飞机，并提供了 FlightGear 的默认“机库”中安装多达 539 种其他飞机的选项。我安装了 Cessna 150L、Piper J-3 Cub 和 Bombardier CRJ-700。一些飞机（包括 CRJ-700）有教你如何驾驶商用喷气式飞机的教程。我发现这些教程内容翔实且准确。

![](/data/attachment/album/201904/11/103911xqaaan228z9a8qjo.png)

要选择驾驶的飞机，请将其高亮显示，然后单击菜单底部的 “Fly!”。我选择了默认的 Cessna 172p 并发现驾驶舱的刻画非常准确。

![](/data/attachment/album/201904/11/103948y10mnfisfltigyil.png)

默认机场是檀香山，但你在 “Location” 菜单中提供你最喜欢机场的 [ICAO 机场代码](https://en.wikipedia.org/wiki/ICAO_airport_code)进行修改。我找到了一些小型的本地无塔机场，如 Olean 和 Dunkirk，纽约，以及包括 Buffalo，O'Hare 和 Raleigh 在内的大型机场，甚至可以选择特定的跑道。

在 “Environment” 下，你可以调整一天中的时间、季节和天气。模拟包括高级天气建模和从 [NOAA](https://www.noaa.gov/) 下载当前天气的能力。

“Settings” 提供在暂停模式中开始模拟的选项。同样在设置中，你可以选择多人模式，这样你就可以与 FlightGear 支持者的全球服务器网络上的其他玩家一起“飞行”。你必须有比较快速的互联网连接来支持此功能。

“Add-ons” 菜单允许你下载飞机和其他场景。

### 开始飞行

为了“起飞”我的 Cessna，我使用了罗技操纵杆，它用起来不错。你可以使用顶部 “File” 菜单中的选项校准操纵杆。

总的来说，我发现模拟非常准确，图形界面也很棒。你自己试下 FlightGear —— 我想你会发现它是一个非常有趣和完整的模拟软件。

---

via: <https://opensource.com/article/19/1/flightgear>

作者：[Don Watkins](https://opensource.com/users/don-watkins) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


树莓派使用入门：在树莓派上使用 Mathematica 进行高级数学运算

>
> Wolfram 在 Raspbian 中捆绑了一个版本的 Mathematica。在我们的树莓派入门系列的第 12 篇文章中将学习如何使用它。
>
>
>

![](/data/attachment/album/201904/11/150947rxqr4mrlrttgx9nz.png)

在 90 年代中期，我进入了大学数学专业，虽然我是以计算机科学学位毕业的，但是我就差两门课程就拿到了双学位，包括数学专业的学位。当时，我接触到了 [Wolfram](https://wolfram.com/) 的一个名为 [Mathematica](https://en.wikipedia.org/wiki/Wolfram_Mathematica) 的应用，我们可以将黑板上的许多代数和微分方程输入计算机。我每月花几个小时在实验室学习 Wolfram 语言，并在 Mathematica 上解决积分等问题。

对于大学生来说 Mathematica 是闭源而且昂贵的，因此在差不多 20 年后，看到 Wolfram 将一个版本的 Mathematica 与 Raspbian 和 Raspberry Pi 捆绑在一起是一个惊喜。如果你决定使用另一个基于 Debian 的发行版，你可以从这里[下载](https://www.wolfram.com/raspberry-pi/)。请注意，此版本仅供非商业用途免费使用。

树莓派基金会的 [Mathematica 简介](https://projects.raspberrypi.org/en/projects/getting-started-with-mathematica/)页面介绍了一些基本概念，如变量和循环、解决一些数学问题、创建图形、做线性代数，甚至通过应用与 GPIO 引脚交互。

![](/data/attachment/album/201904/11/151005p99j10011yks4zy4.png)

要深入了解 Mathematica，请查看 [Wolfram 语言文档](https://www.wolfram.com/language/)。如果你只是想解决一些基本的微积分问题，请[查看它的函数](https://reference.wolfram.com/language/guide/Calculus.html)部分。如果你想[绘制一些 2D 和 3D 图形](https://reference.wolfram.com/language/howto/PlotAGraph.html)，请阅读链接的教程。

或者，如果你想在做数学运算时坚持使用开源工具，请查看命令行工具 `expr`、`factor` 和 `bc`。（记住使用 [man 命令](https://opensource.com/article/19/3/learn-linux-raspberry-pi) 阅读使用帮助）如果想画图，[Gnuplot](http://gnuplot.info/) 是个不错的选择。

---

via: <https://opensource.com/article/19/3/do-math-raspberry-pi>

作者：[Anderson Silva](https://opensource.com/users/ansilva) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


每日安全资讯：谷歌为 G Suite 用户引入一系列新的安全工具

谷歌的在线生产力和协作平台 G Suite 迎来了一系列安全更新。本轮更新重点增强了公司数据的保护，既包括控制用户的访问权限，还可以通过提供新的工具来防止网络钓鱼和恶意软件攻击。今天谷歌发布了高级网络钓鱼和恶意软件保护 Beta 版本，旨在帮助管理员保护用户免受恶意附件和电子邮件欺骗等因素的影响。

![](/data/attachment/album/201904/12/090519h2qqqytq7x8yht2s.png)

其中最有趣的功能就是全新的安全沙盒，这是面向 G Suite 企业用户的另一项测试版功能。在对附件进行已知病毒和恶意软件的扫描之外，该沙盒还可以额外添加一层保护层。附件扫描无法完全保护您免受零日勒索软件或复杂恶意软件的侵害。因此在沙箱环境中执行附件，以检查是否存在任何安全问题。

此外在今天的更新中，谷歌还面向管理员推出了全新的安全和警报中心测试版。这些工具目的是创建一个包含最佳实践建议的统一服务，集成通知中心和相关工具，并且对威胁进行分类和采取措施，所有这些工作都侧重于管理员之间的协作。另外还有一个新的安全调查工具，主要侧重于允许管理员创建自动工作流以发送通知或将所有权分配给安全调查。

来源：cnBeta.COM

### 更多资讯

##### Mozilla 公布 DNS-over-HTTPS 政策要求

Mozilla 过去几个月在 Firefox 浏览器测试了更安全的域名解析方法 Trusted Recursive Resolver (TRR)，通过 HTTPS 加密发出 DNS 请求。但显然为了保护用户隐私你不能任意选择一个 DNS 解析服务商。

来源： solidot.org

详情： <http://t.cn/E6BM06u>

##### 研究人员报告新的针对工业基础设施的攻击

去年 10 月，安全公司报告，2017 年 8 月沙特石化工厂遭到的网络攻击与一家俄罗斯研究机构有关。攻击者使用的恶意程序设计关闭生产流程或让 SIS 控制的机器工作在不安全的状态下。安全公司将这个恶意程序命名为 Triton 或 Trisis。

来源： solidot.org

详情： <http://t.cn/E6BM86d>

##### “天才少年”炫技成“黑客” 检察机关帮教后成著名“白客”

正义网北京 4月 11 日电（记者胡玉菡）11 日，最高检联合共青团中央举行“汇聚各方力量、护航孩子成长”新闻发布会，联合发布十个未成年人检察社会支持体系建设工作典型案（事）例。其中提到，“天才少年”为炫技非法获取大量公民个人信息。检察机关对其作出附条件不起诉决定，又为其成立帮教小组。此后，“天才少年”协助警方破获特大网络传销案，由一名“黑客”变成全国著名“白客”。

来源： 最高检网站

详情： <http://t.cn/E6BMBJ3>

##### 赛门铁克：三分之二的酒店网站泄漏客人预订详情并允许访问个人数据

赛门铁克首席安全研究人员 Candid Wueest 近日发文称，酒店网站可能会泄露客人的预订详情，允许其他人查看客人的个人数据，甚至取消他们的预订。在最近研究酒店网站上可能发生的劫持攻击时，Wueest 偶然发现了一个可能泄漏客人个人数据的问题。

来源： cnBeta.COM

详情： <http://t.cn/E6BMFIv>

（信息来源于网络，安华金和搜集整理）


小白观察：Firefox 推出密码泄露检测服务

![](/data/attachment/album/201904/12/095936su7nj6uac484kc6u.png)

### Big News

**Firefox 推出密码泄露检测服务**：Firefox 上线了新的服务 Firefox Monitor ，该服务能够查询你的密码是否出现在数据外泄事件中。

![](/data/attachment/album/201904/12/101904j8j2cnnj7x8nzq7m.png)

>
> Firefox Monitor 不仅提供了已有密码泄露事件的追踪，还提供了新外泄事件的警报，不妨订阅一份，保证自己的密码安全尽在掌控。下面还为你推荐了一篇文章 —— 网络安全 101，教你如何保护自己的安全。
>
>
>

Firefox Monitor 地址：<https://monitor.firefox.com/>

网络安全 101：<https://www.zdnet.com/article/online-security-101-how-to-protect-your-privacy-from-hackers-spies-and-the-government/>

### Quick News

##### SUSE 即将替代 RedHat，成为最大的独立 Linux 公司

由于 Red Hat 被 IBM 收购和 SUSE 的连续增长，SUSE 将成为最大的独立 Linux 公司。[【ZDNet】](https://www.zdnet.com/article/the-new-suse/)

##### WinRAR 使得 Windows 可能被黑客控制

微软透露，WinRAR 的安全漏洞 CVE-2018-20250 可能导致 Windows 被黑客所控制。 [【ZDNet】](https://www.zdnet.com/article/microsoft-winrar-exploit-gives-attackers-full-control-of-windows-pc/)

>
> 免费好用的 7-Zip 了解一下？
>
>
>

##### Amazon 员工可能在窃听 Alexa 用户的隐私

一份新的报告显示，Alexa 的录音会被 Amazon 雇员听到并用于分析和优化 Alexa 的识别率。[【ZDNet】](https://www.zdnet.com/article/amazon-employees-are-listening-in-to-your-conversations-with-alexa/)

>
> 你猜国内这些语音助手是怎么优化识别率的？
>
>
>


回顾 Firefox 历史

用了这么多年Firefox了，希望这个浏览器越来越好吧。

chrome的中文字体显示有点虚

一时好奇，搜索历史。（今年6月1日火狐将迈入90.0版本）

回顾使用浏览器的经历，第一款常用是TT（小学时期只会玩玩Flash小游戏），后来接触双核浏览器（世界之窗 2007年），而随着网页排版效果迭代更新，渐渐开始转向尝试更多浏览器。2009年5月31日（用户中心有注册时间）接触傲游浏览器，隐约记得那时候它拦截广告特别强，随着它进入云时代（能免费发短信和小文件到手机）。期间也尝试很多浏览器（360两版、QQ、欧朋、猎豹、UC、搜狗、百度）。

直到2015年底尝试一次，火狐……第一上手没有国产浏览器哪版舒适的体验（国际版，标签交互不

字数有限，浏览器选择总结：火狐国际版＞Edge＞QQ浏览器<br />
※不能科学上网的浏览器，不配被选择！！

![](/data/attachment/album/201904/12/111804b2p2zzs4vs6unv09.jpg)

从很久之前开始，火狐浏览器就一直是开源社区的一根顶梁柱。这些年来它几乎是所有 Linux 发行版的默认浏览器，并且曾是阻挡微软彻底争霸浏览器界的最后一块磐石。这款浏览器的起源可以一直回溯到互联网创生的时代。本周（LCTT 译注：此文发布于 2019.3.14）是互联网成立 30 周年的纪念日，趁这个机会回顾一下我们熟悉并爱戴的火狐浏览器实在是再好不过了。

### 发源

在上世纪 90 年代早期，一个叫 [Marc Andreessen](https://en.wikipedia.org/wiki/Marc_Andreessen) 的年轻人正在伊利诺伊大学攻读计算机科学学士学位。在那里，他开始为[国家超算应用中心（NCSA）](https://en.wikipedia.org/wiki/National_Center_for_Supercomputing_Applications)工作。就在这段时间内，<ruby>   蒂姆·伯纳斯·李  <rt>  Tim Berners-Lee </rt></ruby> 爵士发布了今天已经为我们所熟知的 Web 的早期标准。Marc 在那时候[了解](https://www.w3.org/DesignIssues/TimBook-old/History.html)到了一款叫 [ViolaWWW](http://viola.org/) 的化石级浏览器。Marc 和 Eric Bina 看到了这种技术的潜力，他们开发了一个易于安装的基于 Unix 平台的浏览器，并取名 [NCSA Mosaic](https://en.wikipedia.org/wiki/Mosaic_(web_browser))。第一个 alpha 版本发布于 1993 年 6 月。到 9 月的时候，浏览器已经有 Windows 和 Macintosh 移植版本了。因为比当时其他任何浏览器软件都易于使用，Mosaic 很快变得相当流行。

1994 年，Marc 毕业并移居到加州。一个叫 Jim Clark 的人结识了他，Clark 那时候通过卖电脑软硬件赚了点钱。Clark 也用过 Mosaic 浏览器并且看到了互联网的经济前景。Clark 创立了一家公司并且雇了 Marc 和 Eric 专做互联网软件。公司一开始叫 “Mosaic 通讯”，但是伊利诺伊大学并不喜欢他们用 [Mosaic 这个名字](http://www.computinghistory.org.uk/det/1789/Marc-Andreessen/)。所以公司转而改名为 “<ruby> 网景 <rt>  Netscape </rt></ruby>通讯”。

该公司的第一个项目是给任天堂 64 开发在线对战网络，然而不怎么成功。他们第一个以公司名义发布的产品是一款叫做 Mosaic Netscape 0.9 的浏览器，很快这款浏览器被改名叫 Netscape Navigator。在内部，浏览器的开发代号就是 mozilla，意即 “Mosaic 杀手”。一位员工还创作了一幅[哥斯拉风格的](http://www.davetitus.com/mozilla/)卡通画。他们当时想在竞争中彻底胜出。

![Early Firefox Mascot](/data/attachment/album/201904/12/111824viitn626mzii4t76.jpg)

*早期 Mozilla 在 Netscape 的吉祥物*

他们取得了辉煌的胜利。那时，Netscape 最大的优势是他们的浏览器在各种操作系统上体验极为一致。Netscape 将其宣传为给所有人平等的互联网体验。

随着越来越多的人使用 Netscape Navigator，NCSA Mosaic 的市场份额逐步下降。到了 1995 年，Netscape 公开上市了。[上市首日](https://www.marketwatch.com/story/netscape-ipo-ignited-the-boom-taught-some-hard-lessons-20058518550)，股价从开盘的 $28，直窜到 $78，收盘于 $58。Netscape 那时所向披靡。

但好景不长。在 1994 年的夏天，微软发布了 Internet Explorer 1.0，这款浏览器基于 Spyglass Mosaic，而后者又直接基于 NCSA Mosaic。[浏览器战争](https://en.wikipedia.org/wiki/Browser_wars) 就此展开。

在接下来的几年里，Netscape 和微软就浏览器霸主地位展开斗争。他们各自加入了很多新特性以取得优势。不幸的是，IE 有和 Windows 操作系统捆绑的巨大优势。更甚于此，微软也有更多的程序员和资本可以调动。在 1997 年年底，Netscape 公司开始遇到财务问题。

### 迈向开源

![Mozilla Firefox](/data/attachment/album/201904/12/111828sflxs7ax49iis98s.jpg)

1998 年 1 月，Netscape 开源了 Netscape Communicator 4.0 软件套装的代码。[旨在](https://web.archive.org/web/20021001071727/wp.netscape.com/newsref/pr/newsrelease558.html) “集合互联网成千上万的程序员的才智，把最好的功能加入 Netscape 的软件。这一策略旨在加速开发，并且让 Netscape 在未来能向个人和商业用户免费提供高质量的 Netscape Communicator 版本”。

这个项目由新创立的 Mozilla 机构管理。然而，Netscape Communicator 4.0 的代码由于大小和复杂程度而很难开发。雪上加霜的是，浏览器的一些组件由于第三方的许可证问题而不能被开源。到头来，他们决定用新兴的 [Gecko](https://en.wikipedia.org/wiki/Gecko_(software)) 渲染引擎重新开发浏览器。

到了 1998 年的 11 月，Netscape 被美国在线（AOL）以[价值 42 亿美元的股权](http://news.cnet.com/2100-1023-218360.html)收购。

从头来过是一项艰巨的任务。Mozilla Firefox（最初名为 Phoenix）直到 2002 年 6 月才面世，它同样可以运行在多种操作系统上：Linux、Mac OS、Windows 和 Solaris。

1999 年，AOL 宣布他们将停止浏览器开发。随后创建了 Mozilla 基金会，用于管理 Mozilla 的商标和项目相关的融资事宜。最早 Mozilla 基金会从 AOL、IBM、Sun Microsystems 和红帽（Red Hat）收到了总计 200 万美金的捐赠。

到了 2003 年 3 月，因为套件越来越臃肿，Mozilla [宣布](https://web.archive.org/web/20050618000315/http://www.mozilla.org/roadmap/roadmap-02-Apr-2003.html) 计划把该套件分割成单独的应用。这个单独的浏览器一开始起名 Phoenix。但是由于和 BIOS 制造企业凤凰科技的商标官司，浏览器改名 Firebird（火鸟） —— 结果和火鸟数据库的开发者又起了冲突。浏览器只能再次被重命名，才有了现在家喻户晓的 Firefox（火狐）。

那时，[Mozilla 说](https://www-archive.mozilla.org/projects/firefox/firefox-name-faq.html)，”我们在过去一年里学到了很多关于起名的技巧（不是因为我们愿意才学的）。我们现在很小心地研究了名字，确保不会再有什么夭蛾子了。我们已经开始向美国专利商标局注册我们新商标”。

![Mozilla Firefox 1.0](/data/attachment/album/201904/12/111829lnj81dn9899fd98c.jpg)

*Firefox 1.0 : [图片致谢](https://www.iceni.com/blog/firefox-1-0-introduced-2004/)*

第一个正式的 Firefox 版本是 [0.8](https://en.wikipedia.org/wiki/Firefox_version_history)，发布于 2004 年 2 月 8 日。紧接着 11 月 9 日他们发布了 1.0 版本。2.0 和 3.0 版本分别在 06 年 10 月 和 08 年 6 月问世。每个大版本更新都带来了很多新的特性和提升。从很多角度上讲，Firefox 都领先 IE 不少，无论是功能还是技术先进性，即便如此 IE 还是有更多用户。

一切都在 Google 发布 Chrome 浏览器的时候改变了。在 Chrome 发布（2008 年 9 月）的前几个月，Firefox 占有 30% 的[浏览器份额](https://en.wikipedia.org/wiki/Usage_share_of_web_browsers) 而 IE 有超过 60%。而在 StatCounter 的 [2019 年 1 月](http://gs.statcounter.com/browser-market-share/desktop/worldwide/#monthly-201901-201901-bar)报告里，Firefox 有不到 10% 的份额，而 Chrome 有超过 70%。

>
> 趣味知识点
>
>
> 和大家以为的不一样，火狐的 logo 其实没有狐狸。那其实是个 <ruby>   小熊猫  <rt>  Red Panda </rt></ruby>。在中文里，“火狐狸”是小熊猫的另一个名字。
>
>
>

### 展望未来

如上文所说的一样，Firefox 正在经历很长一段以来的份额低谷。曾经有那么一段时间，有很多浏览器都基于 Firefox 开发，比如早期的 [Flock 浏览器](https://en.wikipedia.org/wiki/Flock_(web_browser))。而现在大多数浏览器都基于谷歌的技术了，比如 Opera 和 Vivaldi。甚至连微软都放弃开发自己的浏览器而转而[加入 Chromium 帮派](https://www.windowscentral.com/microsoft-building-chromium-powered-web-browser-windows-10)。

这也许看起来和 Netscape 当年的辉煌形成鲜明的对比。但让我们不要忘记 Firefox 已经有的许多成就。一群来自世界各地的程序员，就这么开发出了这个星球上第二大份额的浏览器。他们在微软垄断如日中天的时候还占据这 30% 的份额，他们可以再次做到这一点。无论如何，他们都有我们。开源社区坚定地站在他们身后。

抗争垄断是我使用 Firefox [的众多原因之一](https://itsfoss.com/why-firefox/)。随着 Mozilla 在改头换面的 [Firefox Quantum](https://itsfoss.com/firefox-quantum-ubuntu/) 上赢回了一些份额，我相信它将一路向上攀爬。

你还想了解 Linux 和开源历史上的什么其他事件？欢迎在评论区告诉我们。

如果你觉得这篇文章不错，请在社交媒体上分享！比如 Hacker News 或者 [Reddit](http://reddit.com/r/linuxusersgroup)。

---

via: <https://itsfoss.com/history-of-firefox>

作者：[John Paul](https://itsfoss.com/author/john/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[Moelf](https://github.com/Moelf) 校对：[acyanbird](https://github.com/acyanbird), [wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


如何在 Fedora 30 中设置内核命令行参数

Summary: 在调试或试验内核时，向内核命令行添加选项是一项常见任务。即将发布的 Fedora 30 版本改为使用 Bootloader 规范（BLS）。根据你修改内核命令行选项的方式，你的工作流可能会更改。继续阅读获取更多信息。

![](/data/attachment/album/201904/12/113338zsp8y9agsj8jyhja.jpg)

在调试或试验内核时，向内核命令行添加选项是一项常见任务。即将发布的 Fedora 30 版本改为使用 Bootloader 规范（[BLS](https://fedoraproject.org/wiki/Changes/BootLoaderSpecByDefault)）。根据你修改内核命令行选项的方式，你的工作流可能会更改。继续阅读获取更多信息。

要确定你的系统是使用 BLS 还是旧的规范，请查看文件：

```
/etc/default/grub
```

如果你看到：

```
GRUB_ENABLE_BLSCFG=true
```

看到这个，你运行的是 BLS，你可能需要更改设置内核命令行参数的方式。

如果你只想修改单个内核条目（例如，暂时解决显示问题），可以使用 `grubby` 命令：

```
$ grubby --update-kernel /boot/vmlinuz-5.0.1-300.fc30.x86_64 --args="amdgpu.dc=0"
```

要删除内核参数，可以传递 `--remove-args` 参数给 `grubby`：

```
$ grubby --update-kernel /boot/vmlinuz-5.0.1-300.fc30.x86_64 --remove-args="amdgpu.dc=0"
```

如果有应该添加到每个内核命令行的选项（例如，你希望禁用 `rdrand` 指令生成随机数），则可以运行 `grubby` 命令：

```
$ grubby --update-kernel=ALL --args="nordrand"
```

这将更新所有内核条目的命令行，并保存作为将来条目的命令行选项。

如果你想要从所有内核中删除该选项，则可以再次使用 `--remove-args` 和 `--update-kernel=ALL`：

```
$ grubby --update-kernel=ALL --remove-args="nordrand"
```

---

via: <https://fedoramagazine.org/setting-kernel-command-line-arguments-with-fedora-30/>

作者：[Laura Abbott](https://fedoramagazine.org/makes-fedora-kernel/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


怎样理解和识别 Linux 中的文件类型

普通文件。长列表中以下划线 _ 开头。

应该是-啊

![](/data/attachment/album/201904/12/115920y0xd2p22idposxzg.jpg)

众所周知，在 Linux 中一切皆为文件，包括硬盘和显卡等。在 Linux 中导航时，大部分的文件都是普通文件和目录文件。但是也有其他的类型，对应于 5 类不同的作用。因此，理解 Linux 中的文件类型在许多方面都是非常重要的。

如果你不相信，那只需要浏览全文，就会发现它有多重要。如果你不能理解文件类型，就不能够毫无畏惧的做任意的修改。

如果你做了一些错误的修改，会毁坏你的文件系统，那么当你操作的时候请小心一点。在 Linux 系统中文件是非常重要的，因为所有的设备和守护进程都被存储为文件。

### 在 Linux 中有多少种可用类型？

据我所知，在 Linux 中总共有 7 种类型的文件，分为 3 大类。具体如下。

* 普通文件
* 目录文件
* 特殊文件（该类有 5 个文件类型）
	+ 链接文件
	+ 字符设备文件
	+ Socket 文件
	+ 命名管道文件
	+ 块文件

参考下面的表可以更好地理解 Linux 中的文件类型。

| 　符号　　 | 　意义　　　　　　　　　　　　　　　　　　 |
| --- | --- |
| `–` | 　普通文件。长列表中以中划线 `-` 开头。　　　　　　　 |
| `d` | 　目录文件。长列表中以英文字母 `d` 开头。　　　　　 |
| `l` | 　链接文件。长列表中以英文字母 `l` 开头。　　　　　　 |
| `c` | 　字符设备文件。长列表中以英文字母 `c` 开头。　　　　 |
| `s` | 　Socket 文件。长列表中以英文字母 `s` 开头。　　　　　 |
| `p` | 　命名管道文件。长列表中以英文字母 `p` 开头。　　　　 |
| `b` | 　块文件。长列表中以英文字母 `b` 开头。　　　　　　　 |

### 方法１：手动识别 Linux 中的文件类型

如果你很了解 Linux，那么你可以借助上表很容易地识别文件类型。

#### 在 Linux 中如何查看普通文件？

在 Linux 中使用下面的命令去查看普通文件。在 Linux 文件系统中普通文件可以出现在任何地方。 普通文件的颜色是“白色”。

```
# ls -la | grep ^-
-rw-------.  1 mageshm mageshm      1394 Jan 18 15:59 .bash_history
-rw-r--r--.  1 mageshm mageshm        18 May 11  2012 .bash_logout
-rw-r--r--.  1 mageshm mageshm       176 May 11  2012 .bash_profile
-rw-r--r--.  1 mageshm mageshm       124 May 11  2012 .bashrc
-rw-r--r--.  1 root    root           26 Dec 27 17:55 liks
-rw-r--r--.  1 root    root    104857600 Jan 31  2006 test100.dat
-rw-r--r--.  1 root    root    104874307 Dec 30  2012 test100.zip
-rw-r--r--.  1 root    root     11536384 Dec 30  2012 test10.zip
-rw-r--r--.  1 root    root           61 Dec 27 19:05 test2-bzip2.txt
-rw-r--r--.  1 root    root           61 Dec 31 14:24 test3-bzip2.txt
-rw-r--r--.  1 root    root           60 Dec 27 19:01 test-bzip2.txt
```

#### 在 Linux 中如何查看目录文件？

在 Linux 中使用下面的命令去查看目录文件。在 Linux 文件系统中目录文件可以出现在任何地方。目录文件的颜色是“蓝色”。

```
# ls -la | grep ^d
drwxr-xr-x.  3 mageshm mageshm      4096 Dec 31 14:24 links/
drwxrwxr-x.  2 mageshm mageshm      4096 Nov 16 15:44 perl5/
drwxr-xr-x.  2 mageshm mageshm      4096 Nov 16 15:37 public_ftp/
drwxr-xr-x.  3 mageshm mageshm      4096 Nov 16 15:37 public_html/
```

#### 在 Linux 中如何查看链接文件？

在 Linux 中使用下面的命令去查看链接文件。在 Linux 文件系统中链接文件可以出现在任何地方。 链接文件有两种可用类型，软连接和硬链接。链接文件的颜色是“浅绿宝石色”。

```
# ls -la | grep ^l
lrwxrwxrwx.  1 root    root           31 Dec  7 15:11 s-link-file -> /links/soft-link/test-soft-link
lrwxrwxrwx.  1 root    root           38 Dec  7 15:12 s-link-folder -> /links/soft-link/test-soft-link-folder
```

#### 在 Linux 中如何查看字符设备文件？

在 Linux 中使用下面的命令查看字符设备文件。字符设备文件仅出现在特定位置。它出现在目录 `/dev` 下。字符设备文件的颜色是“黄色”。

```
# ls -la | grep ^c
# ls -la | grep ^c
crw-------.  1 root root      5,   1 Jan 28 14:05 console
crw-rw----.  1 root root     10,  61 Jan 28 14:05 cpu_dma_latency
crw-rw----.  1 root root     10,  62 Jan 28 14:05 crash
crw-rw----.  1 root root     29,   0 Jan 28 14:05 fb0
crw-rw-rw-.  1 root root      1,   7 Jan 28 14:05 full
crw-rw-rw-.  1 root root     10, 229 Jan 28 14:05 fuse
```

#### 在 Linux 中如何查看块文件？

在 Linux 中使用下面的命令查看块文件。块文件仅出现在特定位置。它出现在目录 `/dev` 下。块文件的颜色是“黄色”。

```
# ls -la | grep ^b
brw-rw----.  1 root disk      7,   0 Jan 28 14:05 loop0
brw-rw----.  1 root disk      7,   1 Jan 28 14:05 loop1
brw-rw----.  1 root disk      7,   2 Jan 28 14:05 loop2
brw-rw----.  1 root disk      7,   3 Jan 28 14:05 loop3
brw-rw----.  1 root disk      7,   4 Jan 28 14:05 loop4
```

#### 在 Linux 中如何查看 Socket 文件？

在 Linux 中使用下面的命令查看 Socket 文件。Socket 文件可以出现在任何地方。Scoket 文件的颜色是“粉色”。（LCTT 译注：此处及下面关于 Socket 文件、命名管道文件可出现的位置原文描述有误，已修改。）

```
# ls -la | grep ^s
srw-rw-rw- 1 root root 0 Jan  5 16:36 system_bus_socket
```

#### 在 Linux 中如何查看命名管道文件？

在 Linux 中使用下面的命令查看命名管道文件。命名管道文件可以出现在任何地方。命名管道文件的颜色是“黄色”。

```
# ls -la | grep ^p
prw-------.  1 root    root        0 Jan 28 14:06 replication-notify-fifo|
prw-------.  1 root    root        0 Jan 28 14:06 stats-mail|
```

### 方法２：在 Linux 中如何使用 file 命令识别文件类型

在 Linux 中 `file` 命令允许我们去确定不同的文件类型。这里有三个测试集，按此顺序进行三组测试：文件系统测试、魔术字节测试和用于识别文件类型的语言测试。

#### 在 Linux 中如何使用 file 命令查看普通文件

在你的终端简单地输入 `file` 命令跟着普通文件。`file` 命令将会读取提供的文件内容并且准确地显示文件的类型。

这就是我们看到对于每个普通文件有不同结果的原因。参考下面普通文件的不同结果。

```
# file 2daygeek_access.log
2daygeek_access.log: ASCII text, with very long lines

# file powertop.html
powertop.html: HTML document, ASCII text, with very long lines

# file 2g-test
2g-test: JSON data

# file powertop.txt
powertop.txt: HTML document, UTF-8 Unicode text, with very long lines

# file 2g-test-05-01-2019.tar.gz
2g-test-05-01-2019.tar.gz: gzip compressed data, last modified: Sat Jan  5 18:22:20 2019, from Unix, original size 450560
```

#### 在 Linux 中如何使用 file 命令查看目录文件？

在你的终端简单地输入 `file` 命令跟着目录。参阅下面的结果。

```
# file Pictures/
Pictures/: directory
```

#### 在 Linux 中如何使用 file 命令查看链接文件？

在你的终端简单地输入 `file` 命令跟着链接文件。参阅下面的结果。

```
# file log
log: symbolic link to /run/systemd/journal/dev-log
```

#### 在 Linux 中如何使用 file 命令查看字符设备文件？

在你的终端简单地输入 `file` 命令跟着字符设备文件。参阅下面的结果。

```
# file vcsu
vcsu: character special (7/64)
```

#### 在 Linux 中如何使用 file 命令查看块文件？

在你的终端简单地输入 `file` 命令跟着块文件。参阅下面的结果。

```
# file sda1
sda1: block special (8/1)
```

#### 在 Linux 中如何使用 file 命令查看 Socket 文件？

在你的终端简单地输入 `file` 命令跟着 Socket 文件。参阅下面的结果。

```
# file system_bus_socket
system_bus_socket: socket
```

#### 在 Linux 中如何使用 file 命令查看命名管道文件？

在你的终端简单地输入 `file` 命令跟着命名管道文件。参阅下面的结果。

```
# file pipe-test
pipe-test: fifo (named pipe)
```

### 方法 3：在 Linux 中如何使用 stat 命令识别文件类型？

`stat` 命令允许我们去查看文件类型或文件系统状态。该实用程序比 `file` 命令提供更多的信息。它显示文件的大量信息，例如大小、块大小、IO 块大小、Inode 值、链接、文件权限、UID、GID、文件的访问/更新和修改的时间等详细信息。

#### 在 Linux 中如何使用 stat 命令查看普通文件？

在你的终端简单地输入 `stat` 命令跟着普通文件。参阅下面的结果。

```
# stat 2daygeek_access.log
  File: 2daygeek_access.log
  Size: 14406929    Blocks: 28144      IO Block: 4096   regular file
Device: 10301h/66305d   Inode: 1727555     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/ daygeek)   Gid: ( 1000/ daygeek)
Access: 2019-01-03 14:05:26.430328867 +0530
Modify: 2019-01-03 14:05:26.460328868 +0530
Change: 2019-01-03 14:05:26.460328868 +0530
 Birth: -
```

#### 在 Linux 中如何使用 stat 命令查看目录文件？

在你的终端简单地输入 `stat` 命令跟着目录文件。参阅下面的结果。

```
# stat Pictures/
  File: Pictures/
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 10301h/66305d   Inode: 1703982     Links: 3
Access: (0755/drwxr-xr-x)  Uid: ( 1000/ daygeek)   Gid: ( 1000/ daygeek)
Access: 2018-11-24 03:22:11.090000828 +0530
Modify: 2019-01-05 18:27:01.546958817 +0530
Change: 2019-01-05 18:27:01.546958817 +0530
 Birth: -
```

#### 在 Linux 中如何使用 stat 命令查看链接文件？

在你的终端简单地输入 `stat` 命令跟着链接文件。参阅下面的结果。

```
# stat /dev/log
  File: /dev/log -> /run/systemd/journal/dev-log
  Size: 28          Blocks: 0          IO Block: 4096   symbolic link
Device: 6h/6d   Inode: 278         Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-01-05 16:36:31.033333447 +0530
Modify: 2019-01-05 16:36:30.766666768 +0530
Change: 2019-01-05 16:36:30.766666768 +0530
 Birth: -
```

#### 在 Linux 中如何使用 stat 命令查看字符设备文件？

在你的终端简单地输入 `stat` 命令跟着字符设备文件。参阅下面的结果。

```
# stat /dev/vcsu
  File: /dev/vcsu
  Size: 0           Blocks: 0          IO Block: 4096   character special file
Device: 6h/6d   Inode: 16          Links: 1     Device type: 7,40
Access: (0660/crw-rw----)  Uid: (    0/    root)   Gid: (    5/     tty)
Access: 2019-01-05 16:36:31.056666781 +0530
Modify: 2019-01-05 16:36:31.056666781 +0530
Change: 2019-01-05 16:36:31.056666781 +0530
 Birth: -
```

#### 在 Linux 中如何使用 stat 命令查看块文件？

在你的终端简单地输入 `stat` 命令跟着块文件。参阅下面的结果。

```
# stat /dev/sda1
  File: /dev/sda1
  Size: 0           Blocks: 0          IO Block: 4096   block special file
Device: 6h/6d   Inode: 250         Links: 1     Device type: 8,1
Access: (0660/brw-rw----)  Uid: (    0/    root)   Gid: (  994/    disk)
Access: 2019-01-05 16:36:31.596666806 +0530
Modify: 2019-01-05 16:36:31.596666806 +0530
Change: 2019-01-05 16:36:31.596666806 +0530
 Birth: -
```

#### 在 Linux 中如何使用 stat 命令查看 Socket 文件？

在你的终端简单地输入 `stat` 命令跟着 Socket 文件。参阅下面的结果。

```
# stat /var/run/dbus/system_bus_socket
  File: /var/run/dbus/system_bus_socket
  Size: 0           Blocks: 0          IO Block: 4096   socket
Device: 15h/21d Inode: 576         Links: 1
Access: (0666/srw-rw-rw-)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-01-05 16:36:31.823333482 +0530
Modify: 2019-01-05 16:36:31.810000149 +0530
Change: 2019-01-05 16:36:31.810000149 +0530
 Birth: -
```

#### 在 Linux 中如何使用 stat 命令查看命名管道文件？

在你的终端简单地输入 `stat` 命令跟着命名管道文件。参阅下面的结果。

```
# stat pipe-test
  File: pipe-test
  Size: 0           Blocks: 0          IO Block: 4096   fifo
Device: 10301h/66305d   Inode: 1705583     Links: 1
Access: (0644/prw-r--r--)  Uid: ( 1000/ daygeek)   Gid: ( 1000/ daygeek)
Access: 2019-01-06 02:00:03.040394731 +0530
Modify: 2019-01-06 02:00:03.040394731 +0530
Change: 2019-01-06 02:00:03.040394731 +0530
 Birth: -
```

---

via: <https://www.2daygeek.com/how-to-understand-and-identify-file-types-in-linux/>

作者：[Magesh Maruthamuthu](https://www.2daygeek.com/author/magesh/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[liujing97](https://github.com/liujing97) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


在 Bash 中使用[方括号] （一）

Summary: 这篇文章将要介绍方括号及其在命令行中的不同用法。

这篇文章将要介绍方括号及其在命令行中的不同用法。

![square brackets](/data/attachment/album/201904/13/000852a6wvjeez4feg31ve.jpg "square brackets")

>
> 这篇文章将要介绍方括号及其在命令行中的不同用法。
>
>
>

看完[花括号在命令行中的用法](/article-10624-1.html)之后，现在我们继续来看方括号（`[]`）在上下文中是如何发挥作用的。

### 通配

方括号最简单的用法就是通配。你可能在知道“<ruby> <rt>  Globbing </rt></ruby>”这个概念之前就已经通过通配来匹配内容了，列出具有相同特征的多个文件就是一个很常见的场景，例如列出所有 JPEG 文件：

```
ls *.jpg
```

使用<ruby> 通配符 <rt>  wildcard </rt></ruby>来得到符合某个模式的所有内容，这个过程就叫通配。

在上面的例子当中，星号（`*`）就代表“0 个或多个字符”。除此以外，还有代表“有且仅有一个字符”的问号（`?`）。因此

```
ls d*k*
```

可以列出 `darkly` 和 `ducky`，而且 `dark` 和 `duck` 也是可以被列出的，因为 `*` 可以匹配 0 个字符。而

```
ls d*k?
```

则只能列出 `ducky`，不会列出 `darkly`、`dark` 和 `duck`。

方括号也可以用于通配。为了便于演示，可以创建一个用于测试的目录，并在这个目录下创建文件：

```
touch file0{0..9}{0..9}
```

（如果你还不清楚上面这个命令的原理，可以看一下[另一篇介绍花括号的文章](/article-10624-1.html)）

执行上面这个命令之后，就会创建 `file000`、`file001`、……、`file099` 这 100 个文件。

如果要列出这些文件当中第二位数字是 7 或 8 的文件，可以执行：

```
ls file0[78]?
```

如果要列出 `file022`、`file027`、`file028`、`file052`、`file057`、`file058`、`file092`、`file097`、`file098`，可以执行：

```
ls file0[259][278]
```

当然，不仅仅是 `ls`，很多其它的命令行工具都可以使用方括号来进行通配操作。但在删除文件、移动文件、复制文件的过程中使用通配，你需要有一点横向思维。

例如将 `file010` 到 `file029` 这 30 个文件复制成 `archive010` 到 `archive029` 这 30 个副本，不可以这样执行：

```
cp file0[12]? archive0[12]?
```

因为通配只能针对已有的文件，而 `archive` 开头的文件并不存在，不能进行通配。

而这条命令

```
cp file0[12]? archive0[1..2][0..9]
```

也同样不行，因为 `cp` 并不允许将多个文件复制到多个文件。在复制多个文件的情况下，只能将多个文件复制到一个指定的目录下：

```
mkdir archive
cp file0[12]? archive
```

这条命令是可以正常运行的，但它只会把这 30 个文件以同样的名称复制到 `archive/` 目录下，而这并不是我们想要的效果。

如果你阅读过我[关于花括号的文章](/article-10624-1.html)，你大概会记得可以使用 `%` 来截掉字符串的末尾部分，而使用 `#` 则可以截掉字符串的开头部分。

例如：

```
myvar="Hello World"
echo Goodbye Cruel ${myvar#Hello}
```

就会输出 `Goodbye Cruel World`，因为 `#Hello` 将 `myvar` 变量中开头的 `Hello` 去掉了。

在通配的过程中，也可以使用这一个技巧。

```
for i in file0[12]?;\
do\
cp $i archive${i#file};\
done
```

上面的第一行命令告诉 Bash 需要对所有 `file01` 开头或者 `file02` 开头，且后面只跟一个任意字符的文件进行操作，第二行的 `do` 和第四行的 `done` 代表需要对这些文件都执行这一块中的命令。

第三行就是实际的复制操作了，这里使用了两次 `$i` 变量：第一次在 `cp` 命令中直接作为源文件的文件名使用，第二次则是截掉文件名开头的 `file` 部分，然后在开头补上一个 `archive`，也就是这样：

```
"archive" + "file019" - "file" = "archive019"
```

最终整个 `cp` 命令展开为：

```
cp file019 archive019
```

最后，顺带说明一下反斜杠 `\` 的作用是将一条长命令拆分成多行，这样可以方便阅读。

在下一节，我们会了解方括号的更多用法，敬请关注。

---

via: <https://www.linux.com/blog/2019/3/using-square-brackets-bash-part-1>

作者：[Paul Brown](https://www.linux.com/users/bro66) 选题：[lujun9972](https://github.com/lujun9972) 译者：[HankChow](https://github.com/HankChow) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


每日安全资讯：安全人员在 Wi-Fi WPA3 标准中发现了降级漏洞

两位安全研究人员近日披露了一组漏洞，这些漏洞统称为 Dragonblood，影响了 WiFi 联盟最近发布的 WPA3 Wi-Fi 安全和认证标准。如果被利用，漏洞将允许在受害者网络范围内的攻击者获得 Wi-Fi 密码并渗透目标网络。

Dragonblood 漏洞组总共有五个漏洞，包括一个拒绝服务攻击漏洞、两个降级攻击漏洞和两个侧通道信息泄漏漏洞。尽管拒绝服务攻击漏洞并不重要，因为它只会导致与 WPA3 兼容的访问点崩溃，但其他四个攻击可以用于获得用户密码。

两个降级攻击和两个侧通道泄漏漏洞都利用了 WPA3 标准 Dragonfly 密钥交换中的设计缺陷，即客户端在 WPA3 路由器或接入点上进行身份验证的机制。

在降级攻击中，支持 WiFi WPA3 的网络可以诱导设备使用更旧、更不安全的密码交换系统，从而允许攻击者使用旧的漏洞检索网络密码。

在侧通道信息泄漏攻击中，支持WiFi WPA3的网络可以欺骗设备使用较弱的算法，这些算法会泄漏少量有关网络密码的信息。通过反复的攻击，最终可以恢复完整的密码。

![](/data/attachment/album/201904/13/073229euu447lxllh4lqqp.jpg)

来源：cnBeta.COM

### 更多资讯

##### 中国蚁剑被曝 XSS 漏洞，可导致远程命令执行

4 月 12 日凌晨，有用户在中国蚁剑 GitHub 上提交了 issue，称发现中国蚁剑存在 XSS 漏洞，借此可引起 RCE。据悉，该漏洞是因为在 webshell 远程连接失败时，中国蚁剑会返回错误信息，但因为使用的是 html 解析，导致 xss 漏洞。

来源： FreeBuf.COM

详情： <http://t.cn/E6su7SJ>

##### 欧盟向 Archive.org 发出数百份错误的“恐怖主义内容删除通知”

在近日的一篇博客文章中，该组织解释说，在过去的一周里，它收到了来自欧盟的 550 多封删除通知，这些通知错误地将 archive.org 上的数百个网址识别为“恐怖宣传”。

来源： cnBeta.COM

详情： <http://t.cn/E6suUwE>

##### 美国司法部指控阿桑奇入侵机密电脑 最多入狱五年

美国司法部刚刚宣布，对维基解密联合创始人朱利安·阿桑奇提起刑事诉讼，指控他密谋入侵美国政府的一台机密电脑。美国司法部在一份声明中称：“这项起诉与阿桑奇被指控在美国历史上最大规模的机密信息泄露事件（之一）中扮演的角色有关。”

来源： 新浪网

详情： <http://t.cn/E6suMTQ>

##### PostgreSQL 辟谣存在任意代码执行漏洞：消息不实

近期在互联网媒体上流传 PostgreSQL 存在任意代码执行的漏洞：拥有 ‘pg\_read\_server\_files’ 权限的攻击者可利用此漏洞具备超级用户权限，执行任意系统命令。

来源：开源中国

详情：http://t.cn/E6suSIB

（信息来源于网络，安华金和搜集整理）


小白观察：Linux 游戏如何走向主流

![](/data/attachment/album/201904/13/231336ey28aauu27qy07a1.png)

### Big News

**Linux 游戏如何走向主流。**在 G 胖的加持下，Linux 下的可玩的游戏在过去的几年间有较大的增长，但依然不多。福布斯杂志作者 Jason Evangelho 在测试了多个发行版后给出了如下建议：

1. **保持一致性**：Linux 发行版众多，配置需要统一。
2. **Easy Anti-Cheat 应用会将 Linux 用户识别为黑客**
3. **Linux 发行版需要统一**：对于 Adobe 这样的公司更倾向于为一个发行版提供服务。而不是多个。

![](/data/attachment/album/201904/13/231140amqqjosborue03mo.png)

>
> Linux 下的碎片化即是 Linux 本身的特色（开源），但也是掣肘 Linux 发展的因素。一套统一跨系统的 UI Framwrok 可能会是一个方案。
>
>
>

信息来源：[【福布斯】](https://www.forbes.com/sites/jasonevangelho/2019/04/03/linux-gaming-steam-fortnite-windows-opinion/)

### Quick News

##### Google 推出其云存档服务

Google 在旧金山举行的 Cloud Next 大会上推出了其云存档服务。价格为 $0.0012/GB/月 （约合 $1.23/TB/月)。[【Venturebeat】](https://venturebeat.com/2019/04/10/google-cloud-storage-next-cold-archive/)

>
> 比你好还比你便宜
>
>
>

##### 迪士尼使用 AI 来为其动画板生成动效

根据 Arxiv.org 上的[一篇论文](https://arxiv.org/pdf/1904.05440.pdf)显示，迪士尼的研究人员开发 AI 工具，将文本转化为需要的动画。[【venturebeat】](https://venturebeat.com/2019/04/12/disneys-ai-generates-storyboard-animations-from-screenplays/)

>
> 动画师痛苦流涕
>
>
>

##### 微软发布了 SECCON 框架来加固 Windows10

微软发布了名为 SECCON 的<ruby> 安全配置框架 <rp>  （ </rp> <rt>  security configuration framework </rt> <rp>  ） </rp></ruby>，这个框架可以给用户一些安全层面的建议。[【ZDNet】](https://www.zdnet.com/article/microsoft-publishes-seccon-framework-for-securing-windows-10/)


12 个最佳 GNOME（GTK）主题

是不是该推荐一下 KDE 的主题了。感觉 KDE 主题更好看更灵活，自定义程度更高。

![](/data/attachment/album/201904/14/094504uu4b4334399xhh34.jpg)

>
> 让我们来看一些漂亮的 GTK 主题，你不仅可以用在 Ubuntu 上，也可以用在其它使用 GNOME 的 Linux 发行版上。
>
>
>

对于我们这些使用 Ubuntu 的人来说，默认的桌面环境从 Unity 变成了 Gnome 使得主题和定制变得前所未有的简单。Gnome 有个相当大的定制用户社区，其中不乏可供用户选择的漂亮的 GTK 主题。最近几个月，我不断找到了一些喜欢的主题。我相信这些是你所能找到的最好的主题之一了。

### Ubuntu 和其它 Linux 发行版的最佳主题

这不是一个详细清单，可能不包括一些你已经使用和喜欢的主题，但希望你能至少找到一个能让你喜爱的没见过的主题。所有这里提及的主题都可以工作在 Gnome 3 上，不管是 Ubuntu 还是其它 Linux 发行版。有一些主题的屏幕截屏我没有，所以我从官方网站上找到了它们的图片。

在这里列出的主题没有特别的次序。

但是，在你看这些最好的 GNOME 主题前，你应该学习一下 [如何在 Ubuntu GNOME 中安装主题](https://itsfoss.com/install-themes-ubuntu/)。

#### 1、Arc-Ambiance

![](/data/attachment/album/201904/14/094524etpcjgno8xppu191.png)

Arc 和 Arc 变体主题已经出现了相当长的时间，普遍认为它们是最好的主题之一。在这个示例中，我选择了 Arc-Ambiance ，因为它是 Ubuntu 中的默认 Ambiance 主题。

我是 Arc 主题和默认 Ambiance 主题的粉丝，所以不用说，当我遇到一个融合了两者优点的主题，我不禁长吸了一口气。如果你是 Arc 主题的粉丝，但不是这个特定主题的粉丝，Gnome 的外观上当然还有适合你口味的大量的选择。

* [下载 Arc-Ambiance 主题](https://www.gnome-look.org/p/1193861/)

#### 2、Adapta Colorpack

![](/data/attachment/album/201904/14/094526tnjvg2jq52g2er23.jpg)

Adapta 主题是我所见过的最喜欢的扁平主题之一。像 Arc 一样，Adapata 被很多 Linux 用户广泛采用。我选择这个配色包，是因为一次下载你就有数个可选择的配色方案。事实上，有 19 个配色方案可以选择，是的，你没看错，19 个呢！

所以，如果你是如今常见的扁平风格/<ruby> 材料设计风格 <rt>  Material Design Language </rt></ruby>的粉丝，那么，在这个主题包中很可能至少有一个能满足你喜好的变体。

* [下载 Adapta Colorpack 主题](https://www.gnome-look.org/p/1190851/)

#### 3、Numix Collection

![](/data/attachment/album/201904/14/094527r8xwx2id4224t121.png)

啊，Numix! 让我想起了我们一起度过的那些年！对于那些在过去几年装点过桌面环境的人来说，你肯定在某个时间点上遇到过 Numix 主题或图标包。Numix 可能是我爱上的第一个 Linux 现代主题，现在我仍然爱它。虽然经过这些年，但它仍然魅力不失。

灰色色调贯穿主题，尤其是默认的粉红色高亮，带来了真正干净而完整的体验。你可能很难找到一个像 Numix 一样精美的主题包。而且在这个主题包中，你还有很多可供选择的余地，简直不要太棒了！

* [下载 Numix Collection 主题](https://www.gnome-look.org/p/1170667/)

#### 4、Hooli

![](/data/attachment/album/201904/14/094529qomcxeotnfohcrmj.jpg)

Hooli 是一个已经出现了一段时间的主题，但是我最近才偶然发现它。我是很多扁平主题的粉丝，但是通常不太喜欢材料设计风格的主题。Hooli 像 Adapta 一样吸取了那些设计风格，但是我认为它和其它的那些有所不同。绿色高亮是我对这个主题最喜欢的部分之一，并且，它在不冲击整个主题方面做的很好。

* [下载 Hooli 主题](https://www.gnome-look.org/p/1102901/)

#### 5、Arrongin/Telinkrin

![](/data/attachment/album/201904/14/094530b7r94fgltb9r7hkd.jpg)

福利：二合一主题！它们是在主题领域中的相对新的竞争者。它们都吸取了 Ubuntu 接近完成的 “[communitheme](https://itsfoss.com/ubuntu-community-theme/)” 的思路，并带它到了你的桌面。这两个主题我能找到的唯一真正的区别就是颜色。Arrongin 以 Ubuntu 家族的橙色颜色为中心，而 Telinkrin 则更偏向于 KDE Breeze 系的蓝色，我个人更喜欢蓝色，但是两者都是极好的选择！

* [下载 Arrongin/Telinkrin 主题](https://www.gnome-look.org/p/1215199/)

#### 6、Gnome-osx

![](/data/attachment/album/201904/14/094532a6csf3wzklok3wk6.jpg)

我不得不承认，通常，当我看到一个主题有 “osx” 或者在标题中有类似的内容时我就不会不期望太多。大多数受 Apple 启发的主题看起来都比较雷同，我真不能找到使用它们的原因。但我想这两个主题能够打破这种思维定式：这就是 Arc-osc 主题和 Gnome-osx 主题。

我喜欢 Gnome-osx 主题的原因是它在 Gnome 桌面上看起来确实很像 OSX。它在融入桌面环境而不至于变的太扁平方面做得很好。所以，对于那些喜欢稍微扁平的主题的人来说，如果你喜欢红黄绿按钮样式（用于关闭、最小化和最大化），这个主题非常适合你。

* [下载 Gnome-osx 主题](https://www.opendesktop.org/s/Gnome/p/1171688/)

#### 7、Ultimate Maia

![](/data/attachment/album/201904/14/094532er8fcyla1a8g8ray.jpg)

曾经有一段时间我使用 Manjaro Gnome。尽管那以后我又回到了 Ubuntu，但是，我希望我能打包带走的一个东西是 Manjaro 主题。如果你对 Manjaro 主题和我一样感受相同，那么你是幸运的，因为你可以带它到你想运行 Gnome 的任何 Linux 发行版！

丰富的绿色颜色，Breeze 式的关闭、最小化、最大化按钮，以及全面雕琢过的主题使它成为一个不可抗拒的选择。如果你不喜欢绿色，它甚至为你提供一些其它颜色的变体。但是说实话……谁会不喜欢 Manjaro 的绿色呢？

* [下载 Ultimate Maia 主题](https://www.opendesktop.org/s/Gnome/p/1193879/)

#### 8、Vimix

![](/data/attachment/album/201904/14/094533pyjss8jsz9czds0s.jpg)

这是一个让我激动的主题。它是现代风格的，吸取了 macOS 的红黄绿按钮的风格，但并不是直接复制了它们，并且减少了多变的主题颜色，使之成为了大多数主题的独特替代品。它带来三个深色的变体和几个彩色配色，我们中大多数人都可以从中找到我们喜欢的。

* [下载 Vimix 主题](https://www.gnome-look.org/p/1013698/)

#### 9、Ant

![](/data/attachment/album/201904/14/094533sqkoqk1yjm4odoeo.png)

像 Vimix 一样，Ant 从 macOS 的按钮颜色中吸取了灵感，但不是直接复制了样式。在 Vimix 减少了颜色花哨的地方，Ant 却增加了丰富的颜色，在我的 System 76 Galago Pro 屏幕看起来绚丽极了。三个主题变体的变化差异大相径庭，虽然它可能不见得符合每个人的口味，它无疑是最适合我的。

* [下载 Ant 主题](https://www.opendesktop.org/p/1099856/)

#### 10、Flat Remix

![](/data/attachment/album/201904/14/094534afihrfu6dhe6rnh1.png)

如果你还没有注意到这点，对于一些关注关闭、最小化、最大化按钮的人来说我就是一个傻瓜。Flat Remix 使用的颜色主题是我从未在其它地方看到过的，它采用红色、蓝色和橙色方式。把这些添加到一个几乎看起来像是一个混合了 Arc 和 Adapta 的主题的上面，就有了 Flat Remix。

我本人喜欢它的深色主题，但是换成亮色的也是非常好的。因此，如果你喜欢稍稍透明、风格一致的深色主题，以及偶尔的一点点颜色，那 Flat Remix 就适合你。

* [下载 Flat Remix 主题](https://www.opendesktop.org/p/1214931/)

#### 11、Paper

![](/data/attachment/album/201904/14/094535f4z8n6jovao2e75l.jpg)

[Paper](https://itsfoss.com/install-paper-theme-linux/) 已经出现一段时间。我记得第一次使用它是在 2014 年。可以说，Paper 的图标包比其 GTK 主题更出名，但是这并不意味着它自身的主题不是一个极好的选择。即使我从一开始就倾心于 Paper 图标，我不能说当我第一次尝试它的时候我就是一个 Paper 主题忠实粉丝。

我觉得鲜亮的色彩和有趣的方式被放到一个主题里是一种“不成熟”的体验。现在，几年后，Paper 在我心目中已经长大，至少可以这样说，这个主题采取的轻快方式是我非常欣赏的一个。

* [下载 Paper 主题](https://snwh.org/paper/download)

#### 12、Pop

![](/data/attachment/album/201904/14/094535zhtuz5nvug109rho.jpg)

Pop 在这个列表上是一个较新的主题，是由 [System 76](https://system76.com/) 的人们创造的，Pop GTK 主题是前面列出的 Adapta 主题的一个分支，并带有一个匹配的图标包，图标包是先前提到的 Paper 图标包的一个分支。

该主题是在 System 76 发布了 [他们自己的发行版](https://itsfoss.com/system76-popos-linux/) Pop!\_OS 之后不久发布的。你可以阅读我的 [Pop!\_OS 点评](https://itsfoss.com/pop-os-linux-review/) 来了解更多信息。不用说，我认为 Pop 是一个极好的主题，带有华丽的装饰，并为 Gnome 桌面带来了一股清新之风。

* [下载 Pop 主题](https://github.com/pop-os/gtk-theme/blob/master/README.md)

#### 结束语

很明显，我们有比文中所描述的主题更多的选择，但是这些大多是我在最近几月所使用的最完整、最精良的主题。如果你认为我们错过一些你确实喜欢的主题，或你确实不喜欢我在上面描述的主题，那么在下面的评论区让我们知道，并分享你喜欢的主题更好的原因！

---

via: <https://itsfoss.com/best-gtk-themes/>

作者：[Phillip Prado](https://itsfoss.com/author/phillip/) 译者：[robsean](https://github.com/robsean) 校对：[wxy](https://github.com/wxy) 选题：[lujun9972](https://github.com/lujun9972)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


每日安全资讯：黑客发布了数千名美国警察和联邦特工的个人数据

TechCrunch 报道称，一个黑客组织已经入侵了几个联邦调查局附属网站并将其内容上传到网上，其中包括数十个包含数千名联邦特工和执法人员个人信息的文件。

![](/data/attachment/album/201904/14/100137ygv1tze1yvysxaya.jpg)

黑客攻击了与 FBI 国家学院协会有关的三个网站，这是一个由美国各地不同分部组成的联盟，旨在促进位于弗吉尼亚州匡提科的 FBI 培训学院的联邦和执法领导和培训。黑客利用至少三个组织网站的漏洞 —— 并下载了每个 Web 服务器的内容。

然后，黑客将数据下载到他们自己的网站上，考虑到数据的敏感性，TechCrunch 没有将其命名或链接。

电子表格在删除重复数据后包含大约 4000 条独特记录，包括成员名称、个人和政府电子邮件地址、职位、电话号码和邮政地址等。

TechCrunch 通过周五晚的加密聊天与其中一名未透露姓名的黑客进行了交谈。

“我们攻击了超过 1000 个网站，”黑客说。“现在我们正在构建所有数据，很快它们就会被出售。我认为其他一些东西会从被黑客攻击的政府网站列表中公布。”TechCrunch 询问黑客是否担心他们下载的文件会使联邦特工和执法部门面临风险。“可能，是的，”黑客说。

这名黑客声称拥有“超过一百万条数据”，涉及多个美国联邦机构和公共服务组织的员工。

数据在黑客论坛和黑暗网络上的市场中被盗和销售的情况并不少见，但黑客们表示他们会免费提供数据，以证明他们有“有趣”的东西。黑客发送了一个链接到他们声称已经入侵的另一个 FBINAA 网站。当我们在 Tor 浏览器会话中打开页面时，该网站已被破坏 - 突出显示之前加密聊天时刻的屏幕截图。

在加密聊天中，黑客还提供了其他遭入侵网站的证据，包括属于制造业巨头富士康的子域名。提供的其中一个链接不需要用户名或密码，但显示了基于 Lotus 的 Webmail 系统的后端，该系统包含数千个员工记录，包括电子邮件地址和电话号码。

黑客说道，他们的最终目标是：“经验和金钱”。

来源：cnBeta.COM

### 更多资讯

##### 国家网信办持续推进 APP 乱象专项整治 关停清理违法 APP 3 万余个

2018 年 12 月以来，国家网信办会同有关部门，针对涉黄涉赌、恶意程序、违规游戏、不良学习类移动 APP 开展专项整治行动，关停下架违法违规 APP 33638 款，拦截恶意网站链接 234 万余个，社交平台清理低俗不良信息 2474 万余条、封禁违规账号 364 万余个，APP 乱象得到有效遏制，网络生态持续向好。

来源： 中国网信网

详情： <http://t.cn/EXyxCVM>

##### 丝绸之路 2 号的创始人被判入狱 5 年

周五英国一家法院判处托马斯·怀特 5 年零 4 个月的刑期，罪名是他在一个巨大的黑暗网络毒品市场中所扮演的角色。2015 年，《连线》杂志公布了一份“暗网毒枭名单”，其中包括绰号为 Dread Pirate Roberts 2 (DPR2) 的托马斯·怀特，他是第 2 个丝绸之路网站的创建者，该网站在 FBI 逮捕丝绸之路网站创始人罗斯·乌尔布赖希特后立即发布上线。

来源： cnBeta.COM

详情： <http://t.cn/EXyx8El>

##### 微软 IE 浏览器曝零日漏洞：一个老文件，可致系统文件遭窃

据 ZDNet 报道，安全研究人员发布了一份 IE 浏览器零日漏洞的详细信息和概念验证代码。通过这一漏洞，黑客可以窃取 Windows 系统中的文件。

来源： IT之家

详情： <http://t.cn/EXyxsLW>

##### 国防军工不用 Windows 10 却用 XP 背后意义竞如此深

国防力量分很多种，比如：教育、财政、建设等等都是国防力量的一部分，但这一切都并不是国民心中的国防力量。我们认为的国防力量是无人机、潜艇和航空母舰等，这些能明确区分强弱和维护国家尊严的才能称之为“力量”。

来源： 中国村在线

详情： <http://t.cn/EXyJoOr>

（信息来源于网络，安华金和搜集整理）


3 个很酷的基于文本的邮件客户端

![](/data/attachment/album/201904/14/102341krpqvjmip04j443q.png)

编写和接收电子邮件是每个人日常工作的重要组成部分，选择电子邮件客户端通常是一个重要决定。Fedora 系统提供了大量的电子邮件客户端可供选择，其中包括基于文本的电子邮件应用。

### Mutt

Mutt 可能是最受欢迎的基于文本的电子邮件客户端之一。它有人们期望的所有常用功能。Mutt 支持颜色代码、邮件会话、POP3 和 IMAP。但它最好的功能之一是它具有高度可配置性。实际上，用户可以轻松地更改键绑定，并创建宏以使工具适应特定的工作流程。

要尝试 Mutt，请[使用 sudo](https://fedoramagazine.org/howto-use-sudo/) 和 `dnf` 安装它：

```
$ sudo dnf install mutt
```

为了帮助新手入门，Mutt 有一个非常全面的充满了宏示例和配置技巧的 [wiki](https://gitlab.com/muttmua/mutt/wikis/home)。

### Alpine

Alpine 也是最受欢迎的基于文本的电子邮件客户端。它比 Mutt 更适合初学者，你可以通过应用本身配置大部分功能而无需编辑配置文件。Alpine 的一个强大功能是能够对电子邮件进行评分。这对那些订阅含有大量邮件的邮件列表如 Fedora 的[开发列表](https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/)的用户来说尤其有趣。通过使用分数，Alpine 可以根据用户的兴趣对电子邮件进行排序，首先显示高分的电子邮件。

也可以使用 `dnf` 从 Fedora 的仓库安装 Alpine。

```
$ sudo dnf install alpine
```

使用 Alpine 时，你可以按 `Ctrl+G` 组合键轻松访问文档。

### nmh

nmh（new Mail Handling）遵循 UNIX 工具哲学。它提供了一组用于发送、接收、保存、检索和操作电子邮件的单一用途程序。这使你可以将 `nmh` 命令与其他程序交换，或利用 `nmh` 编写脚本来创建更多自定义工具。例如，你可以将 Mutt 与 `nmh` 一起使用。

使用 `dnf` 可以轻松安装 `nmh`。

```
$ sudo dnf install nmh
```

要了解有关 `nmh` 和邮件处理的更多信息，你可以阅读这本 GPL 许可的[书](https://rand-mh.sourceforge.io/book/)。

---

via: <https://fedoramagazine.org/3-cool-text-based-email-clients/>

作者：[Clément Verna](https://fedoramagazine.org/author/cverna/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Ubuntu 14.04 即将结束支持，你该怎么办？

拜金主义，赤裸裸的拜金主义，必须达到！万岁！

Ubuntu 14.04 即将于 2019 年 4 月 30 日结束支持。这意味着在此日期之后 Ubuntu 14.04 用户将无法获得安全和维护更新。

你甚至不会获得已安装应用的更新，并且不手动修改 `sources.list` 则无法使用 `apt` 命令或软件中心安装新应用。

Ubuntu 14.04 大约在五年前发布。这是 Ubuntu 长期支持版本（LTS）。

[检查 Ubuntu 版本](https://itsfoss.com/how-to-know-ubuntu-unity-version/)并查看你是否仍在使用 Ubuntu 14.04。如果是桌面或服务器版，你可能想知道在这种情况下你应该怎么做。

我来帮助你。告诉你在这种情况下你有些什么选择。

![](/data/attachment/album/201904/14/103450e1o4h4844t88ibo8.png)

### 升级到 Ubuntu 16.04 LTS（最简单的方式）

如果你可以连接互联网，你可以从 Ubuntu 14.04 升级到 Ubuntu 16.04 LTS。

Ubuntu 16.04 也是一个长期支持版本，它将支持到 2021 年 4 月。这意味着下次升级前你还有两年的时间。

我建议阅读这个[升级 Ubuntu 版本](https://itsfoss.com/upgrade-ubuntu-version/)的教程。它最初是为了将 Ubuntu 16.04 升级到 Ubuntu 18.04 而编写的，但这些步骤也适用于你的情况。

### 做好备份，全新安装 Ubuntu 18.04 LTS（非常适合桌面用户）

另一个选择是备份你的文档、音乐、图片、下载和其他任何你不想丢失数据的文件夹。

我说的备份指的是将这些文件夹复制到外部 USB 盘。换句话说，你应该有办法将数据复制回计算机，因为你将格式化你的系统。

我建议桌面用户使用此选项。Ubuntu 18.04 是目前的长期支持版本，它将至少在 2023 年 4 月之前得到支持。在你被迫进行下次升级之前，你将有四年的时间。

### 支付扩展安全维护费用并继续使用 Ubuntu 14.04

这适用于企业客户。Canonical 是 Ubuntu 的母公司，它提供 Ubuntu Advantage 计划，客户可以支付电话电子邮件支持和其他益处。

Ubuntu Advantage 计划用户还有[扩展安全维护](https://www.ubuntu.com/esm)（ESM）功能。即使给定版本的生命周期结束后，此计划也会提供安全更新。

这需要付出金钱。服务器用户每个物理节点每年花费 225 美元。对于桌面用户，价格为每年 150 美元。你可以在[此处](https://www.ubuntu.com/support/plans-and-pricing)了解 Ubuntu Advantage 计划的详细定价。

### 还在使用 Ubuntu 14.04 吗？

如果你还在使用 Ubuntu 14.04，那么你应该开始了解这些选择，因为你还有不到一个月的时间。

在任何情况下，你都不能在 2019 年 4 月 30 日之后使用 Ubuntu 14.04，因为你的系统由于缺乏安全更新而容易受到攻击。无法安装新应用将是一个额外的痛苦。

那么，你会做什么选择？升级到 Ubuntu 16.04 或 18.04 或付费 ESM？

---

via: <https://itsfoss.com/ubuntu-14-04-end-of-life/>

作者：[Abhishek Prakash](https://itsfoss.com/author/abhishek/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Bash vs Python：你该使用哪个？

Summary: 两种编程语言都各有优缺点，它们在某些任务方面互有胜负。

perl爱好者。。。

python用的比较多

两种编程语言都各有优缺点，它们在某些任务方面互有胜负。

>
> 两种编程语言都各有优缺点，它们在某些任务方面互有胜负。
>
>
>

![](/data/attachment/album/201904/15/105503medoy8r4b5rzxic8.jpg)

[Bash](/article/18/7/admin-guide-bash) 和 [Python](/article/17/11/5-approaches-learning-python) 是大多数自动化工程师最喜欢的编程语言。它们都各有优缺点，有时很难选择应该使用哪一个。所以，最诚实的答案是：这取决于任务、范围、背景和任务的复杂性。

让我们来比较一下这两种语言，以便更好地理解它们各自的优点。

### Bash

* 是一种 Linux/Unix shell 命令语言
* 非常适合编写使用命令行界面（CLI）实用程序的 shell 脚本，利用一个命令的输出传递给另一个命令（管道），以及执行简单的任务（可以多达 100 行代码）
* 可以按原样使用命令行命令和实用程序
* 启动时间比 Python 快，但执行时性能差
* Windows 中默认没有安装。你的脚本可能不会兼容多个操作系统，但是 Bash 是大多数 Linux/Unix 系统的默认 shell
* 与其它 shell (如 csh、zsh、fish) *不* 完全兼容。
* 通过管道（`|`）传递 CLI 实用程序如 `sed`、`awk`、`grep` 等会降低其性能
* 缺少很多函数、对象、数据结构和多线程支持，这限制了它在复杂脚本或编程中的使用
* 缺少良好的调试工具和实用程序

### Python

* 是一种面对对象编程语言（OOP），因此它比 Bash 更加通用
* 几乎可以用于任何任务
* 适用于大多数操作系统，默认情况下它在大多数 Unix/Linux 系统中都有安装
* 与伪代码非常相似
* 具有简单、清晰、易于学习和阅读的语法
* 拥有大量的库、文档以及一个活跃的社区
* 提供比 Bash 更友好的错误处理特性
* 有比 Bash 更好的调试工具和实用程序，这使得它在开发涉及到很多行代码的复杂软件应用程序时是一种很棒的语言
* 应用程序（或脚本）可能包含许多第三方依赖项，这些依赖项必须在执行前安装
* 对于简单任务，需要编写比 Bash 更多的代码

我希望这些列表能够让你更好地了解该使用哪种语言以及在何时使用它。

你在日常工作中更多会使用哪种语言，Bash 还是 Python？请在评论中分享。

---

via: <https://opensource.com/article/19/4/bash-vs-python>

作者：[Archit Modi (Red Hat)](https://opensource.com/users/architmodi/users/greg-p/users/oz123) 选题：[lujun9972](https://github.com/lujun9972) 译者：[MjSeven](https://github.com/MjSeven) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


小白观察：开源项目如何在云端生存

### Big News

##### 开源项目如何在云端生存

![](/data/attachment/album/201904/15/110242sn8hc058lg8olwi5.jpg)

过去的数十年，开源是云计算产业的支柱，从 Linux 到 Kubernetes 、Spark、MongoDB 等。但最近几年，也有声音说，公有云平台，比如 Aws ，在从开源项目吸血，MongoDB 甚至修改了授权协议。

![](/data/attachment/album/201904/15/110332k14jhr8741hrwx81.png)

>
> 开源教育了市场，让市场开始使用一些新的东西。云平台从中摘桃子，最终逼死开源是谁都不愿看到的。如果云能够反馈给开源，帮助开源成长，才是共赢的局面。不过，这个又有了新问题，如何做到反馈开源而不是背后的商业公司？
>
>
>

信息来源：[【venturebeat】](https://venturebeat.com/2019/04/14/how-open-source-can-survive-the-cloud/)

### Quick News

##### GPL 开源软件在黑洞照片中发挥大作用

在黑洞照片的合成过程中，开源软件 Sparselab 和 ehtim 帮了很大的忙。[【TFIR】](https://www.tfir.io/gnu-gplv3-at-the-heart-of-black-hole-image/)

##### 普林斯顿大学的研究人员开发了工具了探测智能家居设备

普林斯顿大学的研究人员研发了工具来帮助用户探测智能家居的数据请求。[【Princeton】](https://iot-inspector.princeton.edu/)

##### Windows 10 系统包含 581GB 的源码文件

微软工程师 Axel Rietschin 在 Quora 发布了一篇文章，展示了 Windows 10 的项目规模，大约有 581GB 的文件，共 4073468 个文件和 86439 个子文件夹。[【Quora】](https://www.quora.com/Which-programming-language-is-used-for-making-Windows-10/answer/Axel-Rietschin)


Linux 中获取硬盘分区或文件系统的 UUID 的七种方法

![](/data/attachment/album/201904/15/113447z6oqjjojb63pbbxp.jpg)

作为一个 Linux 系统管理员，你应该知道如何去查看分区的 UUID 或文件系统的 UUID。因为现在大多数的 Linux 系统都使用 UUID 挂载分区。你可以在 `/etc/fstab` 文件中可以验证。

有许多可用的实用程序可以查看 UUID。本文我们将会向你展示多种查看 UUID 的方法，并且你可以选择一种适合于你的方法。

### 何为 UUID？

UUID 意即<ruby> 通用唯一识别码 <rt>  Universally Unique Identifier </rt></ruby>，它可以帮助 Linux 系统识别一个磁盘分区而不是块设备文件。

自内核 2.15.1 起，libuuid 就是 util-linux-ng 包中的一部分，它被默认安装在 Linux 系统中。UUID 由该库生成，可以合理地认为在一个系统中 UUID 是唯一的，并且在所有系统中也是唯一的。

这是在计算机系统中用来标识信息的一个 128 位（比特）的数字。UUID 最初被用在<ruby> 阿波罗网络计算机系统 <rt>  Apollo Network Computing System </rt></ruby>（NCS）中，之后 UUID 被<ruby> 开放软件基金会 <rt>  Open Software Foundation </rt></ruby>（OSF）标准化，成为<ruby> 分布式计算环境 <rt>  Distributed Computing Environment </rt></ruby>（DCE）的一部分。

UUID 以 32 个十六进制的数字表示，被连字符分割为 5 组显示，总共的 36 个字符的格式为 8-4-4-4-12（32 个字母或数字和 4 个连字符）。

例如： `d92fa769-e00f-4fd7-b6ed-ecf7224af7fa`

我的 `/etc/fstab` 文件示例：

```
# cat /etc/fstab

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a device; this may
# be used with UUID= as a more robust way to name devices that works even if
# disks are added and removed. See fstab(5).
#
#
UUID=69d9dd18-36be-4631-9ebb-78f05fe3217f / ext4 defaults,noatime 0 1
UUID=a2092b92-af29-4760-8e68-7a201922573b swap swap defaults,noatime 0 2
```

我们可以使用下面的 7 个命令来查看。

* `blkid` 命令：定位或打印块设备的属性。
* `lsblk` 命令：列出所有可用的或指定的块设备的信息。
* `hwinfo` 命令：硬件信息工具，是另外一个很好的实用工具，用于查询系统中已存在硬件。
* `udevadm` 命令：udev 管理工具
* `tune2fs` 命令：调整 ext2/ext3/ext4 文件系统上的可调文件系统参数。
* `dumpe2fs` 命令：查询 ext2/ext3/ext4 文件系统的信息。
* 使用 `by-uuid` 路径：该目录下包含有 UUID 和实际的块设备文件，UUID 与实际的块设备文件链接在一起。

### Linux 中如何使用 blkid 命令查看磁盘分区或文件系统的 UUID？

`blkid` 是定位或打印块设备属性的命令行实用工具。它利用 libblkid 库在 Linux 系统中获得到磁盘分区的 UUID。

```
# blkid
/dev/sda1: UUID="d92fa769-e00f-4fd7-b6ed-ecf7224af7fa" TYPE="ext4" PARTUUID="eab59449-01"
/dev/sdc1: UUID="d17e3c31-e2c9-4f11-809c-94a549bc43b7" TYPE="ext2" PARTUUID="8cc8f9e5-01"
/dev/sdc3: UUID="ca307aa4-0866-49b1-8184-004025789e63" TYPE="ext4" PARTUUID="8cc8f9e5-03"
/dev/sdc5: PARTUUID="8cc8f9e5-05"
```

### Linux 中如何使用 lsblk 命令查看磁盘分区或文件系统的 UUID？

`lsblk` 列出所有有关可用或指定块设备的信息。`lsblk` 命令读取 sysfs 文件系统和 udev 数据库以收集信息。

如果 udev 数据库不可用或者编译的 lsblk 不支持 udev，它会试图从块设备中读取卷标、UUID 和文件系统类型。这种情况下，必须以 root 身份运行。该命令默认会以类似于树的格式打印出所有的块设备（RAM 盘除外）。

```
# lsblk -o name,mountpoint,size,uuid
NAME   MOUNTPOINT  SIZE UUID
sda                 30G
└─sda1 /            20G d92fa769-e00f-4fd7-b6ed-ecf7224af7fa
sdb                 10G
sdc                 10G
├─sdc1               1G d17e3c31-e2c9-4f11-809c-94a549bc43b7
├─sdc3               1G ca307aa4-0866-49b1-8184-004025789e63
├─sdc4               1K
└─sdc5               1G
sdd                 10G
sde                 10G
sr0               1024M
```

### Linux 中如何使用 by-uuid 路径查看磁盘分区或文件系统的 UUID？

该目录包含了 UUID 和实际的块设备文件，UUID 与实际的块设备文件链接在一起。

```
# ls -lh /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Jan 29 08:34 ca307aa4-0866-49b1-8184-004025789e63 -> ../../sdc3
lrwxrwxrwx 1 root root 10 Jan 29 08:34 d17e3c31-e2c9-4f11-809c-94a549bc43b7 -> ../../sdc1
lrwxrwxrwx 1 root root 10 Jan 29 08:34 d92fa769-e00f-4fd7-b6ed-ecf7224af7fa -> ../../sda1
```

### Linux 中如何使用 hwinfo 命令查看磁盘分区或文件系统的 UUID？

[hwinfo](https://www.2daygeek.com/hwinfo-check-display-detect-system-hardware-information-linux/) 意即硬件信息工具，是另外一种很好的实用工具。它被用来检测系统中已存在的硬件，并且以可读的格式显示各种硬件组件的细节信息。

```
# hwinfo --block | grep by-uuid | awk '{print $3,$7}'
/dev/sdc1, /dev/disk/by-uuid/d17e3c31-e2c9-4f11-809c-94a549bc43b7
/dev/sdc3, /dev/disk/by-uuid/ca307aa4-0866-49b1-8184-004025789e63
/dev/sda1, /dev/disk/by-uuid/d92fa769-e00f-4fd7-b6ed-ecf7224af7fa
```

### Linux 中如何使用 udevadm 命令查看磁盘分区或文件系统的 UUID？

`udevadm` 需要命令和命令特定的操作。它控制 systemd-udevd 的运行时行为，请求内核事件、管理事件队列并且提供简单的调试机制。

```
# udevadm info -q all -n /dev/sdc1 | grep -i by-uuid | head -1
S: disk/by-uuid/d17e3c31-e2c9-4f11-809c-94a549bc43b7
```

### Linux 中如何使用 tune2fs 命令查看磁盘分区或文件系统的 UUID？

`tune2fs` 允许系统管理员在 Linux 的 ext2、ext3、ext4 文件系统中调整各种可调的文件系统参数。这些选项的当前值可以使用选项 `-l` 显示。

```
# tune2fs -l /dev/sdc1 | grep UUID
Filesystem UUID: d17e3c31-e2c9-4f11-809c-94a549bc43b7
```

### Linux 中如何使用 dumpe2fs 命令查看磁盘分区或文件系统的 UUID？

`dumpe2fs` 打印出现在设备文件系统中的超级块和块组的信息。

```
# dumpe2fs /dev/sdc1 | grep UUID
dumpe2fs 1.43.5 (04-Aug-2017)
Filesystem UUID: d17e3c31-e2c9-4f11-809c-94a549bc43b7
```

---

via: <https://www.2daygeek.com/check-partitions-uuid-filesystem-uuid-universally-unique-identifier-linux/>

作者：[Magesh Maruthamuthu](https://www.2daygeek.com/author/magesh/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[liujing97](https://github.com/liujing97) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


每日安全资讯：亚马逊、苹果和 Google 都有雇员听语音助手的录音

![](/data/attachment/album/201904/15/151717m4tgnntdbzcjuk33.jpg)

亚马逊、苹果和 Google 都有员工，从智能助手和语音助手应用程序中收听客户语音录音，引发如何界定窃听和隐私的议论纷纷。

彭博社在采访亚马逊“审听过”其智能语音助手 Alexa 录音的工作人员后，突出报道这一话题。上述三家公司都表示，偶尔会对语音录音进行审听，以提高语音识别能力。一些审听人员告诉彭博社记者，他们在内部聊天室里也会互相分享有趣的语音录音片段。他们也描述曾听到令人不安的片段，比如有可能发生的性攻击。

亚马逊发布声明表示，它认真对待客户安全和隐私。审听客户录音样本有助于训练语音识别和自然语言理解系统，绝不允许滥用其制度。声明称，亚马逊的审听雇员也无法直接了解能确认客户身份的资料。

来源：中国网信网

### 更多资讯

##### 微软确认有黑客入侵了一些 Outlook.com 帐户，时间长达数月

微软已经开始通知一些 Outlook.com 用户，黑客能够在今年早些时候访问其帐户。公司发现支持代理的凭据因其网络邮件服务而受到损害，允许在 2019 年 1 月 1 日至 3 月 28 日期间未经授权访问某些帐户。微软称黑客可能已经查看了电子邮件账户，包括文件夹名称和主题行，但不包括电子邮件或附件的内容。

目前尚不清楚有多少用户受到了黑客行为的影响，或者是谁参与了 Outlook.com 电子邮件帐户的访问。在此次入侵事件中，黑客无法窃取登录详细信息或其他个人信息，但出于谨慎，微软建议受影响的用户重置密码。

来源：快科技

##### 作案人勾结快递员利用“七天无理由退货”漏洞实施诈骗

2017 年 11 月，某新款手机上架热卖，淘宝店主王先生按照订单，向一名来自厦门的买家打包发货，委托快递公司寄出。几天后，王先生接到了来自快递公司的电话，称收件人联系不上，快递的东西只能退回。

来源： solidot.org

详情： <http://t.cn/EX5wujH>

##### GhostBSD 19.04 发布 注重安全与稳定性的FreeBSD发行版

GhostBSD 19.04 发布了，GhostBSD 是一个 FreeBSD 发行版，它注重安全与稳定性，以一张自启动运行光盘的形式来提供。19.04 是 18.12 的重大改进版本，从音量控制器到安装程序都有改进，并且第一次在基本系统上添加和更改了一些代码，此外还有官方 MATE 桌面，包括社区 XFCE 桌面 iso。

来源： 开源中国

详情： <http://t.cn/EX5wrHl>

（信息来源于网络，安华金和搜集整理）


5 款适合程序员的开源字体

Summary: 编程字体有些在普通字体中没有的特点，这五种字体你可以看看。

编程字体有些在普通字体中没有的特点，这五种字体你可以看看。

>
> 编程字体有些在普通字体中没有的特点，这五种字体你可以看看。
>
>
>

![](/data/attachment/album/201904/16/104711ylg8zccooxlcxzcc.jpg)

什么是最好的编程字体呢？首先，你需要考虑到字体被设计出来的初衷可能并不相同。当选择一款用于休闲阅读的字体时，读者希望该字体的字母能够顺滑地衔接，提供一种轻松愉悦的体验。一款标准字体的每个字符，类似于拼图的一块，它需要被仔细的设计，从而与整个字体的其他部分融合在一起。

然而，在编写代码时，通常来说对字体的要求更具功能性。这也是为什么大多数程序员在选择时更偏爱使用固定宽度的等宽字体。选择一款带有容易分辨的数字和标点的字体在美学上令人愉悦；但它是否拥有满足你需求的版权许可也是非常重要的。

某些功能使得字体更适合编程。首先要清楚是什么使得等宽字体看上去井然有序。这里，让我们对比一下字母 `w` 和字母 `i`。当选择一款字体时，重要的是要考虑字母本身及周围的空白。在纸质的书籍和报纸中，有效地利用空间是极为重要的，为瘦小的 `i` 分配较小的空间，为宽大的字母 `w` 分配较大的空间是有意义的。

然而在终端中，你没有这些限制。每个字符享有相等的空间将非常有用。这么做的首要好处是你可以随意扫过一段代码来“估测”代码的长度。第二个好处是能够轻松地对齐字符和标点，高亮在视觉上更加明显。另外打印纸张上的等宽字体比均衡字体更加容易通过 OCR 识别。

在本篇文章中，我们将探索 5 款卓越的开源字体，使用它们来编程和写代码都非常理想。

### 1、Firacode：最佳整套编程字体

![FiraCode 示例](/data/attachment/album/201904/16/104736pkgdd37np337zfff.png "FiraCode example")

*FiraCode, Andrew Lekashman*

在我们列表上的首款字体是 [FiraCode](https://github.com/tonsky/FiraCode)，一款真正符合甚至超越了其职责的编程字体。FiraCode 是 Fira 的扩展，而后者是由 Mozilla 委托设计的开源字体族。使得 FiraCode 与众不同的原因是它修改了在代码中常使用的一些符号的组合或连字，使得它看上去更具可读性。这款字体有几种不同的风格，特别是还包含 Retina 选项。你可以在它的 [GitHub](https://github.com/tonsky/FiraCode) 主页中找到它被使用到多种编程语言中的例子。

![FiraCode compared to Fira Mono](/data/attachment/album/201904/16/104737pus4rtr8iocio8go.png "FiraCode compared to Fira Mono")

*FiraCode 与 Fira Mono 的对比，[Nikita Prokopov](https://github.com/tonsky/FiraCode)，源自 GitHub*

### 2、Inconsolata：优雅且由卓越设计者创造

![Inconsolata 示例](/data/attachment/album/201904/16/104738exemy0xx2l9x0kke.png "Inconsolata example")

*Inconsolata, Andrew Lekashman*

[Inconsolata](http://www.levien.com/type/myfonts/inconsolata.html) 是最为漂亮的等宽字体之一。从 2006 年开始它便一直是一款开源和可免费获取的字体。它的创造者 Raph Levien 在设计 Inconsolata 时秉承的一个基本原则是：等宽字体并不应该那么糟糕。使得 Inconsolata 如此优秀的两个原因是：对于 `0` 和 `o` 这两个字符它们有很大的不同，另外它还特别地设计了标点符号。

### 3、DejaVu Sans Mono：许多 Linux 发行版的标准配置，庞大的字形覆盖率

![DejaVu Sans Mono example](/data/attachment/album/201904/16/104738t4n0zbd03e3tnxxz.png "DejaVu Sans Mono example")

*DejaVu Sans Mono, Andrew Lekashman*

受在 GNOME 中使用的带有版权和闭源的 Vera 字体的启发，[DejaVu Sans Mono](https://dejavu-fonts.github.io/) 是一个非常受欢迎的编程字体，几乎在每个现代的 Linux 发行版中都带有它。在 Book Variant 风格下 DejaVu 拥有惊人的 3310 个字形，相比于一般的字体，它们含有 100 个左右的字形。在工作中你将不会出现缺少某些字符的情况，它覆盖了 Unicode 的绝大部分，并且一直在活跃地增长着。

### 4、Source Code Pro：优雅、可读性强，由 Adobe 中一个小巧但天才的团队打造

![Source Code Pro example](/data/attachment/album/201904/16/104738gxzh18q1zx0xyyen.png "Source Code Pro example")

*Source Code Pro, Andrew Lekashman*

由 Paul Hunt 和 Teo Tuominen 设计，[Source Code Pro](https://github.com/adobe-fonts/source-code-pro) 是[由 Adobe 创造的](https://blog.typekit.com/2012/09/24/source-code-pro/)，成为了它的首款开源字体。Source Code Pro 值得注意的地方在于它极具可读性，且对于容易混淆的字符和标点，它有着非常好的区分度。Source Code Pro 也是一个字体族，有 7 中不同的风格：Extralight、Light、Regular、Medium、Semibold、Bold 和 Black，每种风格都还有斜体变体。

![Differentiating potentially confusable characters](/data/attachment/album/201904/16/104739hpzyly6xbjplilpb.png "Differentiating potentially confusable characters")

*潜在易混淆的字符之间的区别，[Paul D. Hunt](https://blog.typekit.com/2012/09/24/source-code-pro/) 源自 Adobe Typekit 博客。*

![Metacharacters with special meaning in computer languages](/data/attachment/album/201904/16/104739de3oozgl8v2yfuuf.png "Metacharacters with special meaning in computer languages")

*在计算机领域中有特别含义的特殊元字符， [Paul D. Hunt](https://blog.typekit.com/2012/09/24/source-code-pro/) 源自 Adobe Typekit 博客。*

### 5、Noto Mono：巨量的语言覆盖率，由 Google 中的一个大团队打造

![Noto Mono example](/data/attachment/album/201904/16/104740v0cg4c9uu0j4wugp.png "Noto Mono example")

*Noto Mono, Andrew Lekashman*

在我们列表上的最后一款字体是 [Noto Mono](https://www.google.com/get/noto/#mono-mono)，这是 Google 打造的庞大 Note 字体族中的等宽版本。尽管它并不是专为编程所设计，但它在 209 种语言（包括 emoji 颜文字！）中都可以使用，并且一直在维护和更新。该项目非常庞大，是 Google 宣称 “组织全世界信息” 的使命的延续。假如你想更多地了解它，可以查看这个绝妙的[关于这些字体的视频](https://www.youtube.com/watch?v=AAzvk9HSi84)。

### 选择合适的字体

无论你选择那个字体，你都有可能在每天中花费数小时面对它，所以请确保它在审美和哲学层面上与你产生共鸣。选择正确的开源字体是确保你拥有最佳生产环境的一个重要部分。这些字体都是很棒的选择，每个都具有让它脱颖而出的功能强大的特性。

---

via: <https://opensource.com/article/17/11/how-select-open-source-programming-font>

作者：[Andrew Lekashman](https://opensource.com) 译者：[FSSlc](https://github.com/FSSlc) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


树莓派使用入门：如何为树莓派社区做出贡献

Summary: 在我们的入门系列的第 13 篇文章中, 发现参与树莓派社区的方法。

在我们的入门系列的第 13 篇文章中, 发现参与树莓派社区的方法。

>
> 在我们的入门系列的第 13 篇文章中，发现参与树莓派社区的方法。
>
>
>

![](/data/attachment/album/201904/16/105531vobbhzyjvfo7ty09.jpg)

这个系列已经逐渐接近尾声，我已经写了很多它的乐趣，我大多希望它能帮助人们使用树莓派进行教育或娱乐。也许这些文章能说服你买你的第一个树莓派，或者让你重新发现抽屉里的吃灰设备。如果这里有真的，那么我认为这个系列就是成功的。

如果你想买一台，并宣传这块绿色的小板子有多么多功能，这里有几个方法帮你与树莓派社区建立连接：

* 帮助改进[官方文档](https://www.raspberrypi.org/documentation/CONTRIBUTING.md) \* 贡献代码给依赖的[项目](https://www.raspberrypi.org/github/) \* 用 Raspbian 报告 [bug](https://www.raspbian.org/RaspbianBugs) \* 报告不同 ARM 架构分发版的的 bug \* 看一眼英国国内的树莓派基金会的[代码俱乐部](https://www.codeclub.org.uk/)或英国境外的[国际代码俱乐部](https://www.codeclubworld.org/)，帮助孩子学习编码 \* 帮助[翻译](https://www.raspberrypi.org/translate/) \* 在 [Raspberry Jam](https://www.raspberrypi.org/jam/) 当志愿者

这些只是你可以为树莓派社区做贡献的几种方式。最后但同样重要的是，你可以加入我并[投稿文章](https://opensource.com/participate)到你最喜欢的开源网站 [Opensource.com](http://Opensource.com)。 :-)

---

via: <https://opensource.com/article/19/3/contribute-raspberry-pi-community>

作者：[Anderson Silva (Red Hat)](https://opensource.com/users/ansilva/users/kepler22b/users/ansilva) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


Sweet Home 3D：一个帮助你寻找梦想家庭的开源工具

Summary: 室内设计应用可以轻松渲染你喜欢的房子，不管是真实的或是想象的。

室内设计应用可以轻松渲染你喜欢的房子，不管是真实的或是想象的。

>
> 室内设计应用可以轻松渲染你喜欢的房子，不管是真实的或是想象的。
>
>
>

![Houses in a row](/data/attachment/album/201904/16/110829x516xmlssmn6ldk9.jpg "Houses in a row")

我最近接受了一份在弗吉尼亚州的新工作。由于我妻子一直在纽约工作，看着我们在纽约的房子直至出售，我有责任出去为我们和我们的猫找一所新房子。在我们搬进去之前她看不到新房子。

我和一个房地产经纪人签约，并看了几间房子，拍了许多照片，写下了潦草的笔记。晚上，我会将照片上传到 Google Drive 文件夹中，我和我老婆会通过手机同时查看这些照片，同时我还要记住房间是在右边还是左边，是否有风扇等。

由于这是一个相当繁琐且不太准确的展示我的发现的方式，我因此去寻找一个开源解决方案，以更好地展示我们未来的梦想之家将会是什么样的，而不会取决于我的模糊记忆和模糊的照片。

[Sweet Home 3D](https://sourceforge.net/projects/sweethome3d/) 完全满足了我的要求。Sweet Home 3D 可在 Sourceforge 上获取，并在 GNU 通用公共许可证下发布。它的[网站](http://www.sweethome3d.com/)信息非常丰富，我能够立即启动并运行。Sweet Home 3D 由总部位于巴黎的 eTeks 的 Emmanuel Puybaret 开发。

### 绘制内墙

我将 Sweet Home 3D 下载到我的 MacBook Pro 上，并添加了 PNG 版本的平面楼层图，用作背景底图。

在此处，使用 Rooms 面板跟踪图案并设置“真实房间”尺寸是一件简单的事情。在我绘制房间后，我添加了墙壁，我可以定制颜色、厚度、高度等。

![Sweet Home 3D floorplan](/data/attachment/album/201904/16/110832qeh2obhhxnxhzxx4.png "Sweet Home 3D floorplan")

现在我画完了“内墙”，我从网站下载了各种“家具”，其中包括实际的家具以及门、窗、架子等。每个项目都以 ZIP 文件的形式下载，因此我创建了一个包含所有未压缩文件的文件夹。我可以自定义每件家具和重复的物品比如门，可以方便地复制粘贴到指定的地方。

在我将所有墙壁和门窗都布置完后，我就使用这个应用的 3D 视图浏览房屋。根据照片和记忆，我对所有物体进行了调整，直到接近房屋的样子。我可以花更多时间添加纹理，附属家具和物品，但这已经达到了我需要的程度。

![Sweet Home 3D floorplan](/data/attachment/album/201904/16/110834hzywyty6ebn1y7w9.png "Sweet Home 3D floorplan")

完成之后，我将该项目导出为 OBJ 文件，它可在各种程序中打开，例如 [Blender](https://opensource.com/article/18/5/blender-hotkey-cheat-sheet) 和 Mac 上的“预览”中，方便旋转房屋并从各个角度查看。视频功能最有用，我可以创建一个起点，然后在房子中绘制一条路径，并记录“旅程”。我将视频导出为 MOV 文件，并使用 QuickTime 在 Mac 上打开和查看。

我的妻子能够（几乎）能看到所有我看到的，我们甚至可以开始在搬家前布置家具。现在，我所要做的就是把行李装上卡车搬到新家。

Sweet Home 3D 在我的新工作中也是有用的。我正在寻找一种方法来改善学院建筑的地图，并计划在 [Inkscape](https://opensource.com/article/19/1/inkscape-cheat-sheet) 或 Illustrator 或其他软件中重新绘制它。但是，由于我有平面地图，我可以使用 Sweet Home 3D 创建平面图的 3D 版本并将其上传到我们的网站以便更方便地找到地方。

### 开源犯罪现场？

一件有趣的事：根据 [Sweet Home 3D 的博客](http://www.sweethome3d.com/blog/2018/12/10/customization_for_the_forensic_police.html)，“法国法医办公室（科学警察）最近选择 Sweet Home 3D 作为设计规划表示路线和犯罪现场的工具。这是法国政府建议优先考虑自由开源解决方案的具体应用。“

这是公民和政府如何利用开源解决方案创建个人项目、解决犯罪和建立世界的又一点证据。

---

via: <https://opensource.com/article/19/3/tool-find-home>

作者：[Jeff Macharyas (Community Moderator)](https://opensource.com/users/jeffmacharyas) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


每日安全资讯：命案侦破过程揭示 Google 能够跟踪全世界的手机

2018 年 3 月 14 日，亚利桑那州发生了一起随机谋杀案件，现场没有目击者，除了 Google。当仓库工人 Jorge Molina 遭到逮捕时，警方称他们跟踪到其手机到达了谋杀现场。他们申请了搜查令，要求 Google 提供谋杀现场周围所有的手机记录。

但随着新的证据出现，警方释放了他，逮捕他母亲的前男友。

![](/data/attachment/album/201904/16/114108hi2gmhhnvv772vf9.jpg)

这起案件令 Google 的手机跟踪数据库引发了关注，搜索巨人的用户手机数据库变成了执法部门的数字法网。

在一个数据收集无处不在的时代，它是个人信息以一种人们没有想象到的方式使用的最新例子。

来源：solidot.org

### 更多资讯

##### 福特推出新型无钥匙密钥系统，防止黑客攻击

据英国媒体 4 月 11 日报道，福特公司对遥控车钥匙进行了售后升级，使其无钥匙进入的车型不容易受到中继攻击而被盗。新型车钥匙配备了一个运动传感器，在钥匙静止 40 秒后将进入休眠模式，将不会对黑客攻击做出响应。

来源： 环球网

详情： <http://t.cn/EXJYrow>

##### 微软不急于修复 IE11 的零日漏洞 涉及古老的 MHT 文件格式

尽管微软在力推 Windows 10 平台上的 Edge 浏览器，甚至选择拥抱竞争对手 Google 家的 Chromium 内核，但 IE 11 浏览器并不会那么快消失。由于历史上的独特地位，IE11 仍保有一定的市场占有率。然而近日曝光的一个零日漏洞，又让不少用户陷入了恐慌。据悉，该漏洞利用了一种被称作 MHT 的特殊文件格式，是微软在 IE 中保存网页时曾使用的一种特殊格式。

来源： cnBeta.COM

详情： <http://t.cn/EXJYFLa>

（信息来源于网络，安华金和搜集整理）


树莓派使用入门：庆祝树莓派的 14 天

>
> 在我们关于树莓派入门系列的第 14 篇也是最后一篇文章中，回顾一下我们学到的所有东西。
>
>
>

![](/data/attachment/album/201904/16/180908lvzaen09nzkzx0b8.png)

### 派节快乐！

每年的 3 月 14 日，我们这些极客都会庆祝派节。我们用这种方式缩写日期: `MMDD`，3 月 14 于是写成 03/14，它的数字上提醒我们 3.14，或者说 [π](https://www.piday.org/million/) 的前三位数字。许多美国人没有意识到的是，世界上几乎没有其他国家使用这种[日期格式](https://en.wikipedia.org/wiki/Date_format_by_country)，因此派节几乎只适用于美国，尽管它在全球范围内得到了庆祝。

无论你身在何处，让我们一起庆祝树莓派，并通过回顾过去两周我们所涉及的主题来结束本系列：

* 第 1 天：[你应该选择哪种树莓派？](/article-10611-1.html)
* 第 2 天：[如何购买树莓派](/article-10615-1.html)
* 第 3 天：[如何启动一个新的树莓派](/article-10644-1.html)
* 第 4 天：[用树莓派学习 Linux](/article-10645-1.html)
* 第 5 天：[教孩子们用树莓派学编程的 5 种方法](/article-10653-1.html)
* 第 6 天：[可以使用树莓派学习的 3 种流行编程语言](/article-10661-1.html)
* 第 7 天：[如何更新树莓派](/article-10665-1.html)
* 第 8 天：[如何使用树莓派来娱乐](/article-10669-1.html)
* 第 9 天：[树莓派上的模拟器和原生 Linux 游戏](/article-10682-1.html)
* 第 10 天：[进入物理世界 —— 如何使用树莓派的 GPIO 针脚](/article-10687-1.html)
* 第 11 天：[通过树莓派和 kali Linux 学习计算机安全](/article-10690-1.html)
* 第 12 天：[在树莓派上使用 Mathematica 进行高级数学运算](/article-10711-1.html)
* 第 13 天：[如何为树莓派社区做出贡献](/article-10731-1.html)

![Pi Day illustration](/data/attachment/album/201904/16/180909do0brau8r780xgrn.jpg "Pi Day illustration")

我将结束本系列，感谢所有关注的人，尤其是那些在过去 14 天里从中学到了东西的人！我还想鼓励大家不断扩展他们对树莓派以及围绕它构建的所有开源（和闭源）技术的了解。

我还鼓励你了解其他文化、哲学、宗教和世界观。让我们成为人类的是这种惊人的 (有时是有趣的) 能力，我们不仅要适应外部环境，而且要适应智力环境。

不管你做什么，保持学习！

---

via: <https://opensource.com/article/19/3/happy-pi-day>

作者：[Anderson Silva (Red Hat)](https://opensource.com/users/ansilva) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


开源如何在云上存活？

Summary: 在过去十年中，从 Linux 和 MySQL 到 Kubernetes、Spark、Presto 和 MongoDB，开源一直是云创新的支柱。但最近的事态发展为开源背后的商业模式带来了阴霾，业界现在必须采取行动，以避免扼杀其最大的创新来源之一。

![](/data/attachment/album/201904/16/230952e5x9j7yi777y5aeq.jpg)

在过去十年中，从 Linux 和 MySQL 到 Kubernetes、Spark、Presto 和 MongoDB，开源一直是云的创新支柱。但最近的一些事态发展为开源背后的商业模式带来了阴霾，业界现在必须采取行动，以避免扼杀其最大的创新来源之一。

作为 Apache Hive 项目的共同创始人和前负责人，我知道激励对于开源生态系统的蓬勃发展至关重要。独立开发者需要激励他们为开源项目贡献自己的时间和技能，而那些具有创业思维的人需要激励他们围绕这些项目建立公司以帮助它们蓬勃发展。

公有云可能会破坏这些激励因素，因为它改变了开源的形态。大型云服务商很容易将开源项目拿来，并将其作为托管服务提供个客户。如果它是在没有回馈社区的情况下这样做的，它就是从别人的工作中获得不公平的利润，从而破坏了开源所需要的蓬勃发展的动力。

我们在围绕 [AWS](https://venturebeat.com/2019/01/17/amazons-aws-launches-full-managed-data-backup-service/) 的当前讨论中已经看到了这一点，AWS [被指责](https://techcrunch.com/2019/01/09/aws-gives-open-source-the-middle-finger/) 将开源项目作为服务而提供，并对这些开源项目进行品牌重塑，却不总是回馈这些开源社区。这促使包括 [Confluent](https://www.confluent.io/blog/license-changes-confluent-platform)、 [Redis Labs](https://redislabs.com/blog/redis-license-bsd-will-remain-bsd/) 和 [MongoDB](https://www.mongodb.com/press/mongodb-issues-new-server-side-public-license-for-mongodb-community-server) 在内的开源软件供应商使用了新的许可证，以阻止大型商业云服务商将其代码作为托管服务提供。

我不认为这是一种正确的方法。这些新的许可证尚未得到<ruby> 开源推进组织 <rp>  （ </rp> <rt>  Open Source Initiative </rt> <rp>  ） </rp></ruby>（OSI）的认可，并且它们有可能会混淆开源软件的使用权。正如<ruby> 软件自由保护协会 <rp>  （ </rp> <rt>  Software Freedom Conservancy </rt> <rp>  ） </rp></ruby>主席 Bradley M. Kuhn [所说](https://www.businessinsider.com/amazon-web-services-open-source-licensing-undermine-2018-12)，软件自由应该“对所有人来说都是平等的，无论他们是否是商业行为者。”开源之所以蓬勃发展，是因为这个原则一直受到尊重，任何模糊不清的地方都可能会阻止人们加入社区。

我同情那些寻求保护其业务的开源公司。尽管独立开发人员付出了很多的努力，但开源项目需要公司的资源和管理工作才能被视为足够稳定，才足以供企业广泛使用。Linux 在企业领域中起飞，是因为 Red Hat 和 IBM 全力支持它。Kubernetes 的发展是如此的快，也是因为它得到了谷歌的支持。当然也有例外，但如果一个开源项目背后有一家公司，那么这个开源项目更有可能在大型企业中取得成功。

我需要说明一下我的利益相关立场。我的公司提供了一个基于云的数据分析平台，该平台严重依赖 Spark、Presto 和 Hive 等开源组件。与此同时，我们通过两个项目回馈社区，成为优秀的开源公民：Sparklens，一个提高 Spark 应用程序性能的框架；以及 RubiX，一个提升 Presto 和 Spark 性能的缓存框架。

在云中提供开源软件有助于这些项目吸引更多用户和开发人员。但是，如果商业云服务商获利不公平，则会对下一代企业家程序员们构建开源公司和投资者支持他们产生抑制作用。

因此，如果新的许可证不是解决方案，那么什么是呢？

部分要靠大型云服务商的公平竞争。我不认为 AWS 是“邪恶的”，他们的行为是他们认为最符合他们商业利益的行为。但他们需要认识到，从长远来看，破坏开源对他们的伤害会像对其它人的伤害一样。开源倡导者应该继续提高对这个问题的认识，并对云服务商施加公众压力，以便让他们采取负责任的行动。我们已经看到证据表明这种压力[可行](https://www.geekwire.com/2018/firecracker-amazon-web-services-reinvents-serverless-computing-infrastructure-open-source-reputation/)。

我们还需要一个开源的“<ruby> 道德规范 <rp>  （ </rp> <rt>  code of ethics </rt> <rp>  ） </rp></ruby>”，由社区（贡献者、项目负责人）和开源组织（如 OSI 和 Apache）创建。一个企业的行为即便是 100％ 符合开源许可证，但仍然能够以损害社区的方式行事。这个道德规范能够指出一个广泛认可的道德准则，列出了不可接受的做法，这将使公司和个人对他们的行为负责。

最终的推动力来自于竞争。确实，大型云服务商在吸引客户方面具有优势；它们被 CIO 们视为“简单”和“安全”之选。但客户也可以选择最好的软件和支持。如果开源公司能够为他们自己的发布版本提供更好的功能和更好的支持，他们可以说服客户选择他们自己的产品。

我已经概述了社区可以采取的改善这种情况的行动，但我们每个人也都可以以个人身份采取行动。通过让云服务商了解我们的担忧，我们能够对市场产生一定的影响。要求他们通过反馈表和产品论坛向社区提供特定功能，这是让你发出自己的声音的一种方式。这些云服务商的开发人员也在开源论坛中闲逛，并希望成为开源社区的一员；让这些要求引起他们的注意会促使这种改变。

我们所面临的这个挑战并没有简单的解决方案，但我们需要认真对待。开源模式并不脆弱，不会在一夜之间崩坏。但是，如果商业云服务商继续利用开源项目而不给予回馈，那么他们就会削弱帮助开源成功的激励措施。杀死产下金蛋的鸡并不符合他们的利益，这肯定也不符合开发者和客户的利益。

---

via: <https://venturebeat.com/2019/04/14/how-open-source-can-survive-the-cloud/>

作者：[Ashish Thusoo](https://venturebeat.com/author/ashish-thusoo-qubole/) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出