mirror of
https://github.com/LCTT/TranslateProject.git
synced 2025-01-28 23:20:10 +08:00
commit
dc5c5be53d
214
published/20180712 An introduction to Go arrays and slices.md
Normal file
214
published/20180712 An introduction to Go arrays and slices.md
Normal file
@ -0,0 +1,214 @@
|
||||
[#]: subject: "An introduction to Go arrays and slices"
|
||||
[#]: via: "https://opensource.com/article/18/7/introduction-go-arrays-and-slices"
|
||||
[#]: author: "Mihalis Tsoukalos https://opensource.com/users/mtsouk"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lkxed"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14665-1.html"
|
||||
|
||||
Go 数组和切片的介绍
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202206/02/105657zahhco3612vv1bbo.jpg)
|
||||
|
||||
> 了解使用数组和切片在 Go 中存储数据的优缺点,以及为什么其中一个更好。
|
||||
|
||||
在本系列的第四篇文章中,我将解释 [Go][5] 数组和切片,包括如何使用它们,以及为什么你通常要选择其中一个而不是另一个。
|
||||
|
||||
### 数组
|
||||
|
||||
数组是编程语言中最流行的数据结构之一,主要原因有两个:一是简单易懂,二是可以存储许多不同类型的数据。
|
||||
|
||||
你可以声明一个名为 `anArray` 的 Go 数组,该数组存储四个整数,如下所示:
|
||||
|
||||
```
|
||||
anArray := [4]int{-1, 2, 0, -4}
|
||||
```
|
||||
|
||||
数组的大小应该在它的类型之前声明,而类型应该在声明元素之前定义。`len()` 函数可以帮助你得到任何数组的长度。上面数组的大小是 4。
|
||||
|
||||
如果你熟悉其他编程语言,你可能会尝试使用 `for` 循环来遍历数组。Go 当然也支持 `for` 循环,不过,正如你将在下面看到的,Go 的 `range` 关键字可以让你更优雅地遍历数组或切片。
|
||||
|
||||
最后,你也可以定义一个二维数组,如下:
|
||||
|
||||
```
|
||||
twoD := [3][3]int{
|
||||
{1, 2, 3},
|
||||
{6, 7, 8},
|
||||
{10, 11, 12}}
|
||||
```
|
||||
|
||||
`arrays.go` 源文件中包含了 Go 数组的示例代码。其中最重要的部分是:
|
||||
|
||||
```
|
||||
for i := 0; i < len(twoD); i++ {
|
||||
k := twoD[i]
|
||||
for j := 0; j < len(k); j++ {
|
||||
fmt.Print(k[j], " ")
|
||||
}
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
for _, a := range twoD {
|
||||
for _, j := range a {
|
||||
fmt.Print(j, " ")
|
||||
}
|
||||
fmt.Println()
|
||||
}
|
||||
```
|
||||
|
||||
通过上述代码,我们知道了如何使用 `for` 循环和 `range` 关键字迭代数组的元素。`arrays.go` 的其余代码则展示了如何将数组作为参数传递给函数。
|
||||
|
||||
以下是 `arrays.go` 的输出:
|
||||
|
||||
```
|
||||
$ go run arrays.go
|
||||
Before change(): [-1 2 0 -4]
|
||||
After change(): [-1 2 0 -4]
|
||||
1 2 3
|
||||
6 7 8
|
||||
10 11 12
|
||||
1 2 3
|
||||
6 7 8
|
||||
10 11 12
|
||||
```
|
||||
|
||||
这个输出告诉我们:对函数内的数组所做的更改,会在函数退出后丢失。
|
||||
|
||||
### 数组的缺点
|
||||
|
||||
Go 数组有很多缺点,你应该重新考虑是否要在 Go 项目中使用它们。
|
||||
|
||||
首先,数组定义之后,大小就无法改变,这意味着 Go 数组不是动态的。简而言之,如果你需要将一个元素添加到一个没有剩余空间的数组中,你将需要创建一个更大的数组,并将旧数组的所有元素复制到新数组中。
|
||||
|
||||
其次,当你将数组作为参数传递给函数时,实际上是传递了数组的副本,这意味着你对函数内部的数组所做的任何更改,都将在函数退出后丢失。
|
||||
|
||||
最后,将大数组传递给函数可能会很慢,主要是因为 Go 必须创建数组的副本。
|
||||
|
||||
以上这些问题的解决方案,就是使用 Go 切片。
|
||||
|
||||
### 切片
|
||||
|
||||
Go 切片与 Go 数组类似,但是它没有后者的缺点。
|
||||
|
||||
首先,你可以使用 `append()` 函数将元素添加到现有切片中。此外,Go 切片在内部使用数组实现,这意味着 Go 中每个切片都有一个底层数组。
|
||||
|
||||
切片具有 `capacity` 属性和 `length` 属性,它们并不总是相同的。切片的长度与元素个数相同的数组的长度相同,可以使用 `len()` 函数得到。切片的容量是当前为切片分配的空间,可以使用 `cap()` 函数得到。
|
||||
|
||||
由于切片的大小是动态的,如果切片空间不足(也就是说,当你尝试再向切片中添加一个元素时,底层数组的长度恰好与容量相等),Go 会自动将它的当前容量加倍,使其空间能够容纳更多元素,然后将请求的元素添加到底层数组中。
|
||||
|
||||
此外,切片是通过引用传递给函数的,这意味着实际传递给函数的是切片变量的内存地址,这样一来,你对函数内部的切片所做的任何修改,都不会在函数退出后丢失。因此,将大切片传递给函数,要比将具有相同数量元素的数组传递给同一函数快得多。这是因为 Go 不必拷贝切片 —— 它只需传递切片变量的内存地址。
|
||||
|
||||
`slice.go` 源文件中有 Go 切片的代码示例,其中包含以下代码:
|
||||
|
||||
```
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func negative(x []int) {
|
||||
for i, k := range x {
|
||||
x[i] = -k
|
||||
}
|
||||
}
|
||||
|
||||
func printSlice(x []int) {
|
||||
for _, number := range x {
|
||||
fmt.Printf("%d ", number)
|
||||
}
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
func main() {
|
||||
s := []int{0, 14, 5, 0, 7, 19}
|
||||
printSlice(s)
|
||||
negative(s)
|
||||
printSlice(s)
|
||||
|
||||
fmt.Printf("Before. Cap: %d, length: %d\n", cap(s), len(s))
|
||||
s = append(s, -100)
|
||||
fmt.Printf("After. Cap: %d, length: %d\n", cap(s), len(s))
|
||||
printSlice(s)
|
||||
|
||||
anotherSlice := make([]int, 4)
|
||||
fmt.Printf("A new slice with 4 elements: ")
|
||||
printSlice(anotherSlice)
|
||||
}
|
||||
```
|
||||
|
||||
切片和数组在定义方式上的最大区别就在于:你不需要指定切片的大小。实际上,切片的大小取决于你要放入其中的元素数量。此外,`append()` 函数允许你将元素添加到现有切片 —— 请注意,即使切片的容量允许你将元素添加到该切片,它的长度也不会被修改,除非你调用 `append()`。上述代码中的 `printSlice()` 函数是一个辅助函数,用于打印切片中的所有元素,而 `negative()` 函数将切片中的每个元素都变为各自的相反数。
|
||||
|
||||
运行 `slice.go` 将得到以下输出:
|
||||
|
||||
```
|
||||
$ go run slice.go
|
||||
0 14 5 0 7 19
|
||||
0 -14 -5 0 -7 -19
|
||||
Before. Cap: 6, length: 6
|
||||
After. Cap: 12, length: 7
|
||||
0 -14 -5 0 -7 -19 -100
|
||||
A new slice with 4 elements: 0 0 0 0
|
||||
```
|
||||
|
||||
请注意,当你创建一个新切片,并为给定数量的元素分配内存空间时,Go 会自动地将所有元素都初始化为其类型的零值,在本例中为 0(`int` 类型的零值)。
|
||||
|
||||
### 使用切片来引用数组
|
||||
|
||||
Go 允许你使用 `[:]` 语法,使用切片来引用现有的数组。在这种情况下,你对切片所做的任何更改都将传播到数组中 —— 详见 `refArray.go`。请记住,使用 `[:]` 不会创建数组的副本,它只是对数组的引用。
|
||||
|
||||
`refArray.go` 中最有趣的部分是:
|
||||
|
||||
```
|
||||
func main() {
|
||||
anArray := [5]int{-1, 2, -3, 4, -5}
|
||||
refAnArray := anArray[:]
|
||||
|
||||
fmt.Println("Array:", anArray)
|
||||
printSlice(refAnArray)
|
||||
negative(refAnArray)
|
||||
fmt.Println("Array:", anArray)
|
||||
}
|
||||
```
|
||||
|
||||
运行 `refArray.go`,输出如下:
|
||||
|
||||
```
|
||||
$ go run refArray.go
|
||||
Array: [-1 2 -3 4 -5]
|
||||
-1 2 -3 4 -5
|
||||
Array: [1 -2 3 -4 5]
|
||||
```
|
||||
|
||||
我们可以发现:对 `anArray` 数组的切片引用进行了操作后,它本身也被改变了。
|
||||
|
||||
### 总结
|
||||
|
||||
尽管 Go 提供了数组和切片两种类型,你很可能还是会使用切片,因为它们比 Go 数组更加通用、强大。只有少数情况需要使用数组而不是切片,特别是当你完全确定元素的数量固定不变时。
|
||||
|
||||
你可以在 [GitHub][6] 上找到 `arrays.go`、`slice.go` 和 `refArray.go` 的源代码。
|
||||
|
||||
如果你有任何问题或反馈,请在下方发表评论或在 [Twitter][7] 上与我联系。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/18/7/introduction-go-arrays-and-slices
|
||||
|
||||
作者:[Mihalis Tsoukalos][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lkxed](https://github.com/lkxed)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/mtsouk
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/traffic-light-go.png
|
||||
[2]: https://opensource.com/article/18/5/creating-random-secure-passwords-go
|
||||
[3]: https://opensource.com/article/18/5/building-concurrent-tcp-server-go
|
||||
[4]: https://opensource.com/article/18/6/copying-files-go
|
||||
[5]: https://golang.org/
|
||||
[6]: https://github.com/mactsouk/opensource.com
|
||||
[7]: https://twitter.com/mactsouk
|
@ -0,0 +1,200 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (FYJNEVERFOLLOWS)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-14668-1.html)
|
||||
[#]: subject: (Learn awk by coding a "guess the number" game)
|
||||
[#]: via: (https://opensource.com/article/21/1/learn-awk)
|
||||
[#]: author: (Chris Hermansen https://opensource.com/users/clhermansen)
|
||||
|
||||
通过编写“猜数字”游戏来学习 Awk
|
||||
======
|
||||
|
||||
> 编程语言往往具有许多共同特征。学习一门新语言的好方法是去写一个熟悉的程序。在本文中,我将会使用 Awk 编写一个“猜数字”程序来展示熟悉的概念。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202206/03/130545jthh1vtoadahwahd.jpg)
|
||||
|
||||
当你学习一门新的编程语言时,最好把重点放在大多数编程语言都有的共同点上:
|
||||
|
||||
* 变量 —— 存储信息的地方
|
||||
* 表达式 —— 计算的方法
|
||||
* 语句 —— 在程序中表示状态变化的方法
|
||||
|
||||
这些概念是大多是编程语言的基础。
|
||||
|
||||
一旦你理解了这些概念,你就可以开始把其他的弄清楚。例如,大多数语言都有由其设计所支持的“处理方式”,这些方式在不同语言之间可能有很大的不同。这些方法包括模块化(将相关功能分组在一起)、声明式与命令式、面向对象、低级与高级语法特性等等。许多程序员比较熟悉的是编程“仪式”,即,在处理问题之前设置场景所需花费的工作。据说 Java 编程语言有一个源于其设计的重要仪式要求,就是所有代码都在一个类中定义。
|
||||
|
||||
但从根本上讲,编程语言通常有相似之处。一旦你掌握了一种编程语言,就可以从学习另一种语言的基本知识开始,品味这种新语言的不同之处。
|
||||
|
||||
一个好方法是创建一组基本的测试程序。有了这些,就可以从这些相似之处开始学习。
|
||||
|
||||
你可以选择创建的一个测试程序是“猜数字”程序。电脑从 1 到 100 之间选择一个数字,让你猜这个数字。程序一直循环,直到你猜对为止。
|
||||
|
||||
“猜数字”程序练习了编程语言中的几个概念:
|
||||
|
||||
* 变量
|
||||
* 输入
|
||||
* 输出
|
||||
* 条件判断
|
||||
* 循环
|
||||
|
||||
这是学习一门新的编程语言的一个很好的实践实验。
|
||||
|
||||
**注**:本文改编自 Moshe Zadka 在 [Julia][2] 中使用这种方法和 Jim Hall在 [Bash][3] 中使用这种方法的文章。
|
||||
|
||||
### 在 awk 程序中猜数
|
||||
|
||||
让我们编写一个实现“猜数字”游戏的 Awk 程序。
|
||||
|
||||
Awk 是动态类型的,这是一种面向数据转换的脚本语言,并且对交互使用有着令人惊讶的良好支持。Awk 出现于 20 世纪 70 年代,最初是 Unix 操作系统的一部分。如果你不了解 Awk,但是喜欢电子表格,这就是一个你可以 [去学习 Awk][4] 的信号!
|
||||
|
||||
您可以通过编写一个“猜数字”游戏版本来开始对 Awk 的探索。
|
||||
|
||||
以下是我的实现(带有行号,以便我们可以查看一些特定功能):
|
||||
|
||||
```
|
||||
1 BEGIN {
|
||||
2 srand(42)
|
||||
3 randomNumber = int(rand() * 100) + 1
|
||||
4 print "random number is",randomNumber
|
||||
5 printf "guess a number between 1 and 100\n"
|
||||
6 }
|
||||
7 {
|
||||
8 guess = int($0)
|
||||
9 if (guess < randomNumber) {
|
||||
10 printf "too low, try again:"
|
||||
11 } else if (guess > randomNumber) {
|
||||
12 printf "too high, try again:"
|
||||
13 } else {
|
||||
14 printf "that's right\n"
|
||||
15 exit
|
||||
16 }
|
||||
17 }
|
||||
```
|
||||
|
||||
我们可以立即看到 Awk 控制结构与 C 或 Java 的相似之处,但与 Python 不同。
|
||||
在像 `if-then-else`、`while` 这样的语句中,`then`、`else` 和 `while` 部分接受一个语句或一组被 `{` 和 `}` 包围的语句。然而,Awk 有一个很大的区别需要从一开始就了解:
|
||||
|
||||
根据设计,Awk 是围绕数据管道构建的。
|
||||
|
||||
这是什么意思呢?大多数 Awk 程序都是一些代码片段,它们接收一行输入,对数据做一些处理,然后将其写入输出。认识到这种转换管道的需要,Awk 默认情况下提供了所有的转换管道。让我们通过关于上面程序的一个基本问题来探索:“从控制台读取数据”的结构在哪里?
|
||||
|
||||
答案是——“内置的”。特别的,第 7-17 行告诉 Awk 如何处理被读取的每一行。在这种情况下,很容易看到第 1-6 行是在读取任何内容之前被执行的。
|
||||
|
||||
更具体地说,第 1 行上的 `BEGIN` 关键字是一种“模式”,在本例中,它指示 Awk 在读取任何数据之前,应该先执行 `{ ... }` 中 `BEGIN` 后面的内容。另一个类似的关键字 `END`,在这个程序中没有被使用,它指示 Awk 在读取完所有内容后要做什么。
|
||||
|
||||
回到第 7-17 行,我们看到它们创建了一个类似代码块 `{ ... }` 的片段,但前面没有关键字。因为在 `{` 之前没有任何东西可以让 Awk 匹配,所以它将把这一行用于接收每一行输入。每一行的输入都将由用户输入作为猜测。
|
||||
|
||||
让我们看看正在执行的代码。首先,是在读取任何输入之前发生的序言部分。
|
||||
|
||||
在第 2 行,我们用数字 42 初始化随机数生成器(如果不提供参数,则使用系统时钟)。为什么要用 42?[当然要选 42!][5] 第 3 行计算 1 到 100 之间的随机数,第 4 行输出该随机数以供调试使用。第 5 行邀请用户猜一个数字。注意这一行使用的是 `printf`,而不是 `print`。和 C 语言一样,`printf` 的第一个参数是一个用于格式化输出的模板。
|
||||
|
||||
既然用户知道程序需要输入,她就可以在控制台上键入猜测。如前所述,Awk 将这种猜测提供给第 7-17 行的代码。第 18 行将输入记录转换为整数;`$0` 表示整个输入记录,而 `$1` 表示输入记录的第一个字段,`$2` 表示第二个字段,以此类推。是的,Awk 使用预定义的分隔符(默认为空格)将输入行分割为组成字段。第 9-15 行将猜测结果与随机数进行比较,打印适当的响应。如果猜对了,第 15 行就会从输入行处理管道中提前退出。
|
||||
|
||||
就这么简单!
|
||||
|
||||
考虑到 Awk 程序不同寻常的结构,代码片段会对特定的输入行配置做出反应,并处理数据,让我们看看另一种结构,看看过滤部分是如何工作的:
|
||||
|
||||
```
|
||||
1 BEGIN {
|
||||
2 srand(42)
|
||||
3 randomNumber = int(rand() * 100) + 1
|
||||
4 print "random number is",randomNumber
|
||||
5 printf "guess a number between 1 and 100\n"
|
||||
6 }
|
||||
7 int($0) < randomNumber {
|
||||
8 printf "too low, try again: "
|
||||
9 }
|
||||
10 int($0) > randomNumber {
|
||||
11 printf "too high, try again: "
|
||||
12 }
|
||||
13 int($0) == randomNumber {
|
||||
14 printf "that's right\n"
|
||||
15 exit
|
||||
16 }
|
||||
```
|
||||
|
||||
第 1–6 行代码没有改变。但是现在我们看到第 7-9 行是当输入整数值小于随机数时执行的代码,第 10-12 行是当输入整数值大于随机数时执行的代码,第 13-16 行是两者相等时执行的代码。
|
||||
|
||||
这看起来“很酷但很奇怪” —— 例如,为什么我们会重复计算 `int($0)`?可以肯定的是,用这种方法来解决问题会很奇怪。但这些模式确实是分离条件处理的非常好的方式,因为它们可以使用正则表达式或 Awk 支持的任何其他结构。
|
||||
|
||||
为了完整起见,我们可以使用这些模式将普通的计算与只适用于特定环境的计算分离开来。下面是第三个版本:
|
||||
|
||||
```
|
||||
1 BEGIN {
|
||||
2 srand(42)
|
||||
3 randomNumber = int(rand() * 100) + 1
|
||||
4 print "random number is",randomNumber
|
||||
5 printf "guess a number between 1 and 100\n"
|
||||
6 }
|
||||
7 {
|
||||
8 guess = int($0)
|
||||
9 }
|
||||
10 guess < randomNumber {
|
||||
11 printf "too low, try again: "
|
||||
12 }
|
||||
13 guess > randomNumber {
|
||||
14 printf "too high, try again: "
|
||||
15 }
|
||||
16 guess == randomNumber {
|
||||
17 printf "that's right\n"
|
||||
18 exit
|
||||
19 }
|
||||
```
|
||||
|
||||
认识到这一点,无论输入的是什么值,都需要将其转换为整数,因此我们创建了第 7-9 行来完成这一任务。现在第 10-12、13-15 和 16-19 行这三组代码,都是指已经定义好的变量 guess,而不是每次都对输入行进行转换。
|
||||
|
||||
让我们回到我们想要学习的东西列表:
|
||||
|
||||
* 变量 —— 是的,Awk 有这些;我们可以推断出,输入数据以字符串形式输入,但在需要时可以转换为数值
|
||||
* 输入 —— Awk 只是通过它的“数据转换管道”的方式发送输入来读取数据
|
||||
* 输出 —— 我们已经使用了 Awk 的 `print` 和 `printf` 函数来将内容写入输出
|
||||
* 条件判断 —— 我们已经学习了 Awk 的 `if-then-else` 和对应特定输入行配置的输入过滤器
|
||||
* 循环 —— 嗯,想象一下!我们在这里不需要循环,这还是多亏了 Awk 采用的“数据转换管道”方法;循环“就这么发生了”。注意,用户可以通过向 Awk 发送一个文件结束信号(当使用 Linux 终端窗口时可通过快捷键 `CTRL-D`)来提前退出管道。
|
||||
|
||||
不需要循环来处理输入的重要性是非常值得的。Awk 能够长期保持存在的一个原因是 Awk 程序是紧凑的,而它们紧凑的一个原因是不需要从控制台或文件中读取的那些格式代码。
|
||||
|
||||
让我们运行下面这个程序:
|
||||
|
||||
```
|
||||
$ awk -f guess.awk
|
||||
random number is 25
|
||||
guess a number between 1 and 100: 50
|
||||
too high, try again: 30
|
||||
too high, try again: 10
|
||||
too low, try again: 25
|
||||
that's right
|
||||
$
|
||||
```
|
||||
|
||||
我们没有涉及的一件事是注释。Awk 注释以 `#` 开头,以行尾结束。
|
||||
|
||||
### 总结
|
||||
|
||||
Awk 非常强大,这种“猜数字”游戏是入门的好方法。但这不应该是你探索 Awk 的终点。你可以看看 [Awk 和 Gawk(GNU Awk)的历史][6],Gawk 是 Awk 的扩展版本,如果你在电脑上运行 Linux,可能会有这个。或者,从它的原始开发者那里阅读关于 [最初版本][7] 的各种信息。
|
||||
|
||||
你还可以 [下载我们的备忘单][8] 来帮你记录下你所学的一切。
|
||||
|
||||
> **[Awk 备忘单][8]**
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/1/learn-awk
|
||||
|
||||
作者:[Chris Hermansen][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[FYJNEVERFOLLOWS](https://github.com/FYJNEVERFOLLOWS)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/clhermansen
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/question-mark_chalkboard.jpg?itok=DaG4tje9 (question mark in chalk)
|
||||
[2]: https://opensource.com/article/20/12/julia
|
||||
[3]: https://opensource.com/article/20/12/learn-bash
|
||||
[4]: https://opensource.com/article/20/9/awk-ebook
|
||||
[5]: https://en.wikipedia.org/wiki/42_(number)#The_Hitchhiker's_Guide_to_the_Galaxy
|
||||
[6]: https://www.gnu.org/software/gawk/manual/html_node/History.html
|
||||
[7]: https://archive.org/details/pdfy-MgN0H1joIoDVoIC7
|
||||
[8]: https://opensource.com/downloads/cheat-sheet-awk-features
|
@ -0,0 +1,124 @@
|
||||
[#]: subject: "Creating random, secure passwords in Go"
|
||||
[#]: via: "https://opensource.com/article/18/5/creating-random-secure-passwords-go"
|
||||
[#]: author: "Mihalis Tsoukalos https://opensource.com/users/mtsouk"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lkxed"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14621-1.html"
|
||||
|
||||
在 Go 中生成随机的安全密码
|
||||
======
|
||||
|
||||
> Go 的随机数生成器是生成难以猜测的密码的好方法。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/21/152534k13a1wly39fuywu2.jpg)
|
||||
|
||||
你可以使用 [Go 编程语言][2] 提供的随机数生成器来生成由 ASCII 字符组成的难以猜测的密码。尽管本文中提供的代码很容易阅读,但是你仍需要了解 Go 的基础知识,才能更好地理解它。如果你是对 Go 还不熟悉,请阅读 [Go 语言之旅][3] 来了解更多信息,然后返回此处。
|
||||
|
||||
在介绍实用程序和它的代码之前,让我们先来看看这个 ASCII 表的子集,它可以在 `man ascii` 命令的输出中找到:
|
||||
|
||||
```
|
||||
30 40 50 60 70 80 90 100 110 120
|
||||
---------------------------------
|
||||
0: ( 2 < F P Z d n x
|
||||
1: ) 3 = G Q [ e o y
|
||||
2: * 4 > H R \ f p z
|
||||
3: ! + 5 ? I S ] g q {
|
||||
4: " , 6 @ J T ^ h r |
|
||||
5: # - 7 A K U _ i s }
|
||||
6: $ . 8 B L V ` j t ~
|
||||
7: % / 9 C M W a k u DEL
|
||||
8: & 0 : D N X b l v
|
||||
9: ' 1 ; E O Y c m w
|
||||
```
|
||||
|
||||
在所有 ASCII 字符中,可打印字符的十进制值范围为 33 到 126,其他的 ASCII 值都不适合用于密码。因此,本文介绍的实用程序将生成该范围内的 ASCII 字符。
|
||||
|
||||
### 生成随机整数
|
||||
|
||||
第一个实用程序名为 `random.go`,它生成指定数量的随机整数,这些整数位于给定范围内。`random.go` 最重要的部分是这个函数:
|
||||
|
||||
```
|
||||
func random(min, max int) int {
|
||||
return rand.Intn(max-min) + min
|
||||
}
|
||||
```
|
||||
|
||||
此函数使用了 `rand.Intn()` 函数来生成一个属于给定范围的随机整数。请注意,`rand.Intn()` 返回一个属于 `[0,n)` 的非负随机整数。如果它的参数是一个负数,这个函数将会抛出异常,异常消息是:`panic: invalid argument to Intn`。你可以在 [math/rand 文档][4] 中找到 `math/rand` 包的使用说明。
|
||||
|
||||
`random.go` 实用程序接受三个命令行参数:生成的整数的最小值、最大值和个数。
|
||||
|
||||
编译和执行 `random.go` 会产生这样的输出:
|
||||
|
||||
```
|
||||
$ go build random.go
|
||||
$ ./random
|
||||
Usage: ./random MIX MAX TOTAL
|
||||
$ ./random 1 3 10
|
||||
2 2 1 2 2 1 1 2 2 1
|
||||
```
|
||||
|
||||
如果你希望在 Go 中生成更安全的随机数,请使用 Go 库中的 `crypto/rand` 包。
|
||||
|
||||
### 生成随机密码
|
||||
|
||||
第二个实用程序 `randomPass.go` 用于生成随机密码。`randomPass.go` 使用 `random()` 函数来生成随机整数,它们随后被以下 Go 代码转换为 ASCII 字符:
|
||||
|
||||
```
|
||||
for {
|
||||
myRand := random(MIN, MAX)
|
||||
newChar := string(startChar[0] + byte(myRand))
|
||||
fmt.Print(newChar)
|
||||
if i == LENGTH {
|
||||
break
|
||||
}
|
||||
i++
|
||||
}
|
||||
```
|
||||
|
||||
`MIN` 的值为 `0`,`MAX` 的值为 `94`,而 `startChar` 的值为 `!`,它是 ASCII 表中第一个可打印的字符(十进制 ASCII 码为 `33`)。因此,所有生成的 ASCII 字符都位于 `!` 和 `~` 之间,后者的十进制 ASCII 码为 `126`。
|
||||
|
||||
因此,生成的每个随机数都大于 `MIN`,小于 `MAX`,并转换为 ASCII 字符。该过程继续进行,直到生成的密码达到指定的长度。
|
||||
|
||||
`randomPass.go` 实用程序接受单个(可选)命令行参数,以定义生成密码的长度,默认值为 8,这是一个非常常见的密码长度。执行 `randomPass.go` 会得到类似下面的输出:
|
||||
|
||||
```
|
||||
$ go run randomPass.go 1
|
||||
Z
|
||||
$ go run randomPass.go 10
|
||||
#Cw^a#IwkT
|
||||
$ go run randomPass.go
|
||||
Using default values!
|
||||
[PP8@'Ci
|
||||
```
|
||||
|
||||
最后一个细节:不要忘记调用 `rand.Seed()`,并提供一个<ruby>种子<rt>seed</rt></ruby>值,以初始化随机数生成器。如果你始终使用相同的种子值,随机数生成器将生成相同的随机整数序列。
|
||||
|
||||
![随机数生成代码][5]
|
||||
|
||||
你可以在 [GitHub][6] 找到 `random.go` 和 `randomPass.go` 的源码。你也可以直接在 [play.golang.org][7] 上执行它们。
|
||||
|
||||
我希望这篇文章对你有所帮助。如有任何问题,请在下方发表评论或在 [Twitter][8] 上与我联系。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/18/5/creating-random-secure-passwords-go
|
||||
|
||||
作者:[Mihalis Tsoukalos][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lkxed](https://github.com/lkxed)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/mtsouk
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/laptop-password.jpg
|
||||
[2]: https://golang.org/
|
||||
[3]: https://tour.golang.org/welcome/1
|
||||
[4]: https://golang.org/pkg/math/rand/
|
||||
[5]: https://opensource.com/sites/default/files/styles/panopoly_image_original/public/uploads/random.png?itok=DG0QPUGX
|
||||
[6]: https://github.com/mactsouk/opensource.com
|
||||
[7]: https://play.golang.org/
|
||||
[8]: https://twitter.com/mactsouk
|
153
published/202205/20180529 Build a concurrent TCP server in Go.md
Normal file
153
published/202205/20180529 Build a concurrent TCP server in Go.md
Normal file
@ -0,0 +1,153 @@
|
||||
[#]: subject: "Build a concurrent TCP server in Go"
|
||||
[#]: via: "https://opensource.com/article/18/5/building-concurrent-tcp-server-go"
|
||||
[#]: author: "Mihalis Tsoukalos https://opensource.com/users/mtsouk"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lkxed"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14623-1.html"
|
||||
|
||||
在 Go 中实现一个支持并发的 TCP 服务端
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/22/115536nkfuuf4dklgg7fsx.jpg)
|
||||
|
||||
> 仅用大约 65 行代码,开发一个用于生成随机数、支持并发的 TCP 服务端。
|
||||
|
||||
TCP 和 UDP 服务端随处可见,它们基于 TCP/IP 协议栈,通过网络为客户端提供服务。在这篇文章中,我将介绍如何使用 [Go 语言][2] 开发一个用于返回随机数、支持并发的 TCP 服务端。对于每一个来自 TCP 客户端的连接,它都会启动一个新的 goroutine(轻量级线程)来处理相应的请求。
|
||||
|
||||
你可以在 GitHub 上找到本项目的源码:[concTcp.go][3]。
|
||||
|
||||
### 处理 TCP 连接
|
||||
|
||||
这个程序的主要逻辑在 `handleConnection()` 函数中,具体实现如下:
|
||||
|
||||
```
|
||||
func handleConnection(c net.Conn) {
|
||||
fmt.Printf("Serving %s\n", c.RemoteAddr().String())
|
||||
for {
|
||||
netData, err := bufio.NewReader(c).ReadString('\n')
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
temp := strings.TrimSpace(string(netData))
|
||||
if temp == "STOP" {
|
||||
break
|
||||
}
|
||||
|
||||
result := strconv.Itoa(random()) + "\n"
|
||||
c.Write([]byte(string(result)))
|
||||
}
|
||||
c.Close()
|
||||
}
|
||||
```
|
||||
|
||||
如果 TCP 客户端发送了一个 “STOP” 字符串,为它提供服务的 goroutine 就会终止;否则,TCP 服务端就会返回一个随机数给它。只要客户端不主动终止,服务端就会一直提供服务,这是由 `for` 循环保证的。具体来说,`for` 循环中的代码使用了 `bufio.NewReader(c).ReadString('\n')` 来逐行读取客户端发来的数据,并使用 `c.Write([]byte(string(result)))` 来返回数据(生成的随机数)。你可以在 Go 的 net 标准包 [文档][4] 中了解更多。
|
||||
|
||||
|
||||
### 支持并发
|
||||
|
||||
在 `main()` 函数的实现部分,每当 TCP 服务端收到 TCP 客户端的连接请求,它都会启动一个新的 goroutine 来为这个请求提供服务。
|
||||
|
||||
```
|
||||
func main() {
|
||||
arguments := os.Args
|
||||
if len(arguments) == 1 {
|
||||
fmt.Println("Please provide a port number!")
|
||||
return
|
||||
}
|
||||
|
||||
PORT := ":" + arguments[1]
|
||||
l, err := net.Listen("tcp4", PORT)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
defer l.Close()
|
||||
rand.Seed(time.Now().Unix())
|
||||
|
||||
for {
|
||||
c, err := l.Accept()
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
go handleConnection(c)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
首先,`main()` 确保程序至少有一个命令行参数。注意,现有代码并没有检查这个参数是否为有效的 TCP 端口号。不过,如果它是一个无效的 TCP 端口号,`net.Listen()` 就会调用失败,并返回一个错误信息,类似下面这样:
|
||||
|
||||
```
|
||||
$ go run concTCP.go 12a
|
||||
listen tcp4: lookup tcp4/12a: nodename nor servname provided, or not known
|
||||
$ go run concTCP.go -10
|
||||
listen tcp4: address -10: invalid port
|
||||
```
|
||||
|
||||
`net.Listen()` 函数用于告诉 Go 接受网络连接,因而承担了服务端的角色。它的返回值类型是 `net.Conn`,后者实现了 `io.Reader` 和 `io.Writer` 接口。此外,`main()` 函数中还调用了 `rand.Seed()` 函数,用于初始化随机数生成器。最后,`for` 循环允许程序一直使用 `Accept()` 函数来接受 TCP 客户端的连接请求,并以 goroutine 的方式来运行 `handleConnection(c)` 函数,处理客户端的后续请求。
|
||||
|
||||
### net.Listen() 的第一个参数
|
||||
|
||||
`net.Listen()` 函数的第一个参数定义了使用的网络类型,而第二个参数定义了服务端监听的地址和端口号。第一个参数的有效值为 `tcp`、`tcp4`、`tcp6`、`udp`、`udp4`、`udp6`、`ip`、`ip4`、`ip6`、`Unix`(Unix 套接字)、`Unixgram` 和 `Unixpacket`,其中:`tcp4`、`udp4` 和 `ip4` 只接受 IPv4 地址,而 `tcp6`、`udp6` 和 `ip6` 只接受 IPv6 地址。
|
||||
|
||||
### 服务端并发测试
|
||||
|
||||
`concTCP.go` 需要一个命令行参数,来指定监听的端口号。当它开始服务 TCP 客户端时,你会得到类似下面的输出:
|
||||
|
||||
```
|
||||
$ go run concTCP.go 8001
|
||||
Serving 127.0.0.1:62554
|
||||
Serving 127.0.0.1:62556
|
||||
```
|
||||
|
||||
`netstat` 的输出可以确认 `congTCP.go` 正在为多个 TCP 客户端提供服务,并且仍在继续监听建立连接的请求:
|
||||
|
||||
```
|
||||
$ netstat -anp TCP | grep 8001
|
||||
tcp4 0 0 127.0.0.1.8001 127.0.0.1.62556 ESTABLISHED
|
||||
tcp4 0 0 127.0.0.1.62556 127.0.0.1.8001 ESTABLISHED
|
||||
tcp4 0 0 127.0.0.1.8001 127.0.0.1.62554 ESTABLISHED
|
||||
tcp4 0 0 127.0.0.1.62554 127.0.0.1.8001 ESTABLISHED
|
||||
tcp4 0 0 *.8001 *.* LISTEN
|
||||
```
|
||||
|
||||
在上面输出中,最后一行显示了有一个进程正在监听 8001 端口,这意味着你可以继续连接 TCP 的 8001 端口。第一行和第二行显示了有一个已建立的 TCP 网络连接,它占用了 8001 和 62556 端口。相似地,第三行和第四行显示了有另一个已建立的 TCP 连接,它占用了 8001 和 62554 端口。
|
||||
|
||||
下面这张图片显示了 `concTCP.go` 在服务多个 TCP 客户端时的输出:
|
||||
|
||||
![concTCP.go TCP 服务端测试][5]
|
||||
|
||||
类似地,下面这张图片显示了两个 TCP 客户端的输出(使用了 `nc` 工具):
|
||||
|
||||
![是用 nc 工具作为 concTCP.go 的 TCP 客户端][6]
|
||||
|
||||
你可以在 [维基百科][7] 上找到更多关于 `nc`(即 `netcat`)的信息。
|
||||
|
||||
### 总结
|
||||
|
||||
现在,你学会了如何用大约 65 行 Go 代码来开发一个生成随机数、支持并发的 TCP 服务端,这真是太棒了!如果你想要让你的 TCP 服务端执行别的任务,只需要修改 `handleConnection()` 函数即可。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/18/5/building-concurrent-tcp-server-go
|
||||
|
||||
作者:[Mihalis Tsoukalos][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lkxed](https://github.com/lkxed)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/mtsouk
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/go-golang.png
|
||||
[2]: https://golang.org/
|
||||
[3]: https://github.com/mactsouk/opensource.com
|
||||
[4]: https://golang.org/pkg/net/
|
||||
[5]: https://opensource.com/sites/default/files/uploads/tcp-in-go_server.png
|
||||
[6]: https://opensource.com/sites/default/files/uploads/tcp-in-go_client.png
|
||||
[7]: https://en.wikipedia.org/wiki/Netcat
|
216
published/202205/20180625 3 ways to copy files in Go.md
Normal file
216
published/202205/20180625 3 ways to copy files in Go.md
Normal file
@ -0,0 +1,216 @@
|
||||
[#]: subject: "3 ways to copy files in Go"
|
||||
[#]: via: "https://opensource.com/article/18/6/copying-files-go"
|
||||
[#]: author: "Mihalis Tsoukalos https://opensource.com/users/mtsouk"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lkxed"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14658-1.html"
|
||||
|
||||
在 Go 中复制文件的三种方法
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/31/153413kcrth9v8c93r5u8e.jpg)
|
||||
|
||||
> 本文是 Go 系列的第三篇文章,我将介绍三种最流行的复制文件的方法。
|
||||
|
||||
本文将介绍展示如何使用 [Go 编程语言][3] 来复制文件。在 Go 中复制文件的方法有很多,我只介绍三种最常见的:使用 Go 库中的 `io.Copy()` 函数调用、一次读取输入文件并将其写入另一个文件,以及使用缓冲区一块块地复制文件。
|
||||
|
||||
### 方法一:使用 io.Copy()
|
||||
|
||||
第一种方法就是使用 Go 标准库的 `io.Copy()` 函数。你可以在 `copy()` 函数的代码中找到它的实现逻辑,如下所示:
|
||||
|
||||
```
|
||||
func copy(src, dst string) (int64, error) {
|
||||
sourceFileStat, err := os.Stat(src)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
if !sourceFileStat.Mode().IsRegular() {
|
||||
return 0, fmt.Errorf("%s is not a regular file", src)
|
||||
}
|
||||
|
||||
source, err := os.Open(src)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
defer source.Close()
|
||||
|
||||
destination, err := os.Create(dst)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
defer destination.Close()
|
||||
nBytes, err := io.Copy(destination, source)
|
||||
return nBytes, err
|
||||
}
|
||||
```
|
||||
|
||||
首先,上述代码做了两个判断,以便确定它可以被打开读取:一是判断将要复制的文件是否存在(`os.Stat(src)`),二是判断它是否为常规文件(`sourceFileStat.Mode().IsRegular()`)。剩下的所有工作都由 `io.Copy(destination, source)` 这行代码来完成。`io.Copy()` 函数执行结束后,会返回复制的字节数和复制过程中发生的第一条错误消息。在 Go 中,如果没有错误消息,错误变量的值就为 `nil`。
|
||||
|
||||
你可以在 [io 包][4] 的文档页面了解有关 `io.Copy()` 函数的更多信息。
|
||||
|
||||
运行 `cp1.go` 将产生以下输出:
|
||||
|
||||
```
|
||||
$ go run cp1.go
|
||||
Please provide two command line arguments!
|
||||
$ go run cp1.go fileCP.txt /tmp/fileCPCOPY
|
||||
Copied 3826 bytes!
|
||||
$ diff fileCP.txt /tmp/fileCPCOPY
|
||||
```
|
||||
|
||||
这个方法已经非常简单了,不过它没有为开发者提供灵活性。这并不总是一件坏事,但是,有些时候,开发者可能会需要/想要告诉程序该如何读取文件。
|
||||
|
||||
### 方法二:使用 ioutil.WriteFile() 和 ioutil.ReadFile()
|
||||
|
||||
复制文件的第二种方法是使用 `ioutil.ReadFile()` 和 `ioutil.WriteFile()` 函数。第一个函数用于将整个文件的内容,一次性地读入到某个内存中的字节切片里;第二个函数则用于将字节切片的内容写入到一个磁盘文件中。
|
||||
|
||||
实现代码如下:
|
||||
|
||||
```
|
||||
input, err := ioutil.ReadFile(sourceFile)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
err = ioutil.WriteFile(destinationFile, input, 0644)
|
||||
if err != nil {
|
||||
fmt.Println("Error creating", destinationFile)
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
```
|
||||
|
||||
上述代码包括了两个 `if` 代码块(嗯,用 Go 写程序就是这样的),程序的实际功能其实体现在 `ioutil.ReadFile()` 和 `ioutil.WriteFile()` 这两行代码中。
|
||||
|
||||
运行 `cp2.go`,你会得到下面的输出:
|
||||
|
||||
```
|
||||
$ go run cp2.go
|
||||
Please provide two command line arguments!
|
||||
$ go run cp2.go fileCP.txt /tmp/copyFileCP
|
||||
$ diff fileCP.txt /tmp/copyFileCP
|
||||
```
|
||||
|
||||
请注意,虽然这种方法能够实现文件复制,但它在复制大文件时的效率可能不高。这是因为当文件很大时,`ioutil.ReadFile()` 返回的字节切片会很大。
|
||||
|
||||
### 方法三:使用 os.Read() 和 os.Write()
|
||||
|
||||
在 Go 中复制文件的第三种方法就是下面要介绍的 `cp3.go`。它接受三个参数:输入文件名、输出文件名和缓冲区大小。
|
||||
|
||||
`cp3.go` 最重要的部分位于以下 `for` 循环中,你可以在 `copy()` 函数中找到它,如下所示:
|
||||
|
||||
```
|
||||
buf := make([]byte, BUFFERSIZE)
|
||||
for {
|
||||
n, err := source.Read(buf)
|
||||
if err != nil && err != io.EOF {
|
||||
return err
|
||||
}
|
||||
if n == 0 {
|
||||
break
|
||||
}
|
||||
|
||||
if _, err := destination.Write(buf[:n]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
该方法使用 `os.Read()` 将输入文件的一小部分读入名为 `buf` 的缓冲区,然后使用 `os.Write()` 将该缓冲区的内容写入文件。当读取出错或到达文件末尾(`io.EOF`)时,复制过程将停止。
|
||||
|
||||
运行 `cp3.go`,你会得到下面的输出:
|
||||
|
||||
```
|
||||
$ go run cp3.go
|
||||
usage: cp3 source destination BUFFERSIZE
|
||||
$ go run cp3.go fileCP.txt /tmp/buf10 10
|
||||
Copying fileCP.txt to /tmp/buf10
|
||||
$ go run cp3.go fileCP.txt /tmp/buf20 20
|
||||
Copying fileCP.txt to /tmp/buf20
|
||||
```
|
||||
|
||||
在接下来的基准测试中,你会发现,缓冲区的大小极大地影响了 `cp3.go` 的性能。
|
||||
|
||||
### 运行基准测试
|
||||
|
||||
在本文的最后一部分,我将尝试比较这三个程序以及 `cp3.go` 在不同缓冲区大小下的性能(使用 `time(1)` 命令行工具)。
|
||||
|
||||
以下输出显示了复制 500MB 大小的文件时,`cp1.go`、`cp2.go` 和 `cp3.go` 的性能对比:
|
||||
|
||||
```
|
||||
$ ls -l INPUT
|
||||
-rw-r--r-- 1 mtsouk staff 512000000 Jun 5 09:39 INPUT
|
||||
$ time go run cp1.go INPUT /tmp/cp1
|
||||
Copied 512000000 bytes!
|
||||
|
||||
real 0m0.980s
|
||||
user 0m0.219s
|
||||
sys 0m0.719s
|
||||
$ time go run cp2.go INPUT /tmp/cp2
|
||||
|
||||
real 0m1.139s
|
||||
user 0m0.196s
|
||||
sys 0m0.654s
|
||||
$ time go run cp3.go INPUT /tmp/cp3 1000000
|
||||
Copying INPUT to /tmp/cp3
|
||||
|
||||
real 0m1.025s
|
||||
user 0m0.195s
|
||||
sys 0m0.486s
|
||||
```
|
||||
|
||||
我们可以看出,这三个程序的性能非常接近,这意味着 Go 标准库函数的实现非常聪明、经过了充分优化。
|
||||
|
||||
现在,让我们测试一下缓冲区大小对 `cp3.go` 的性能有什么影响吧!执行 `cp3.go`,并分别指定缓冲区大小为 10、20 和 1000 字节,在一台运行很快的机器上复制 500MB 文件,得到的结果如下:
|
||||
|
||||
```
|
||||
$ ls -l INPUT
|
||||
-rw-r--r-- 1 mtsouk staff 512000000 Jun 5 09:39 INPUT
|
||||
$ time go run cp3.go INPUT /tmp/buf10 10
|
||||
Copying INPUT to /tmp/buf10
|
||||
|
||||
real 6m39.721s
|
||||
user 1m18.457s
|
||||
sys 5m19.186s
|
||||
$ time go run cp3.go INPUT /tmp/buf20 20
|
||||
Copying INPUT to /tmp/buf20
|
||||
|
||||
real 3m20.819s
|
||||
user 0m39.444s
|
||||
sys 2m40.380s
|
||||
$ time go run cp3.go INPUT /tmp/buf1000 1000
|
||||
Copying INPUT to /tmp/buf1000
|
||||
|
||||
real 0m4.916s
|
||||
user 0m1.001s
|
||||
sys 0m3.986s
|
||||
```
|
||||
|
||||
我们可以发现,缓冲区越大,`cp3.go` 运行得就越快,这或多或少是符合预期的。此外,使用小于 20 字节的缓冲区来复制大文件会非常缓慢,应该避免。
|
||||
|
||||
你可以在 [GitHub][5] 找到 `cp1.go`、`cp2.go` 和 `cp3.go` 的 Go 代码。
|
||||
|
||||
如果你有任何问题或反馈,请在(原文)下方发表评论或在 [Twitter][6] 上与我(原作者)联系。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/18/6/copying-files-go
|
||||
|
||||
作者:[Mihalis Tsoukalos][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lkxed](https://github.com/lkxed)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/mtsouk
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/LIFE_cat.png
|
||||
[3]: https://golang.org/
|
||||
[4]: https://golang.org/pkg/io/
|
||||
[5]: https://github.com/mactsouk/opensource.com
|
||||
[6]: https://twitter.com/mactsouk
|
@ -3,21 +3,21 @@
|
||||
[#]: author: "Ruth Ikegah https://hashnode.com/@ikegah_ruth"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lkxed"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14600-1.html"
|
||||
|
||||
开源新手指南
|
||||
======
|
||||
|
||||
![][1]
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/16/144822bal5z8ij44s4jcom.jpg)
|
||||
|
||||
作为一名技术人员,你应该时不时会看到“<ruby>开源<rt>Open Source</rt></ruby>”这个词。你有可能在浏览推文、博文时看到过它,也有可能是在学习某一门编程语言或使用某个工具时,看到它的部分介绍写着:这个工具/语言是“开源”的。总之,开源无处不在。
|
||||
|
||||
在本文中,我将介绍下面这三个话题:
|
||||
|
||||
* 什么是开源
|
||||
* 贡献开源的好处
|
||||
* 贡献于开源的好处
|
||||
* 如何开始贡献
|
||||
|
||||
### 什么是开源
|
||||
@ -34,13 +34,13 @@
|
||||
* VLC 媒体播放器
|
||||
* Python 语言、PHP 语言、MySQL 数据库
|
||||
|
||||
与开源软件相反的是专有/闭源软件,只有软件的创造者才能自由使用,其他人若想使用,就得先获得法律许可才行。例如 Adobe Photoshop、Microsoft Office 等。
|
||||
与开源软件相反的是<ruby>专有软件<rt>proprietary software</rt></ruby> / <ruby>闭源软件<rt>closed source software</rt></ruby>,只有软件的创造者才能自由使用,其他人若想使用,就得先获得法律许可才行。例如 Adobe Photoshop、微软 Office 等。
|
||||
|
||||
> 开源不仅限于软件或代码,技术领域的任何人都可以为开源做出贡献(每个角色)。有了开源,就有了透明度、可靠性、灵活性,并允许开放合作。
|
||||
> 开源不仅限于软件或代码,技术领域的任何人都可以为开源做出贡献(各个角色)。有了开源,就有了透明度、可靠性、灵活性,并允许开放合作。
|
||||
|
||||
### 贡献开源的好处
|
||||
### 贡献于开源的好处
|
||||
|
||||
贡献开源项目或软件意味着“免费”让该项目变得更好。你应该会问自己,为什么我要“免费”关心别人的项目,给自己压力?如果你是新手,你可以阅读 [Edidiong Asikpo][2] 的故事,她在 [这篇文章][3] 中说明了为什么开源是她成长的催化剂。
|
||||
向开源项目或软件做贡献意味着“免费”让该项目变得更好。你应该会问自己,为什么我要关心或向自己强调“免费”呢?如果你是新手,你可以阅读 [Edidiong Asikpo][2] 的故事,她在 [这篇文章][3] 中说明了为什么开源是她成长的催化剂。
|
||||
|
||||
贡献开源的好处有很多,这里是其中一部分:
|
||||
|
||||
@ -49,7 +49,7 @@
|
||||
* 你可以公开自己的想法,从而改善软件、项目或社区,让世界变得更美好。
|
||||
* 你可以通过贡献开源来得到大家的认可,或者成为独特或伟大事物的一部分(获得自豪感)。
|
||||
* 它让你有机会成为一个人才济济、活力四射的社区的一分子,你可以从中汲取灵感,并结识志同道合的人。
|
||||
* 你可以因为贡献开源而获得报酬(OoO)!比如你可以参与一些实习,包括 [Google <ruby>编程之夏<rt>Summer of Code</rt></ruby>][4]、[Outreachy][5]、[Google <ruby>文档季<rt>Season of Docs</rt></ruby>][6],以及 Open Collective 的 [<ruby>赏金计划<rt>bounty program</rt></ruby>][7] 等。(LCTT 译注:国内也有类似的开源实习机会,如“开源之夏”。)
|
||||
* 你可以因为贡献开源而获得报酬(OoO)!比如你可以参与一些实习,包括 <ruby>[谷歌编程之夏][4]<rt>Google Summer of Code</rt></ruby>、[Outreachy][5]、<ruby>[谷歌文档季][6]<rt>Google Season of Docs</rt></ruby>,以及 Open Collective 的 <ruby>[赏金计划][7]<rt>bounty program</rt></ruby> 等。(LCTT 译注:国内也有类似的开源实习机会,如“开源之夏”。)
|
||||
|
||||
### 如何开始贡献
|
||||
|
||||
@ -59,9 +59,9 @@
|
||||
|
||||
Github 是开源项目协作的大本营,因此它是一个开始贡献开源的好地方。没听说过 GitHub?没有关系!它提供了文档和指南,很容易就可以上手。不过我还是要提醒你,学习是一个循序渐进的过程,不要太心急喔。
|
||||
|
||||
Github 以公共<ruby>存储库<rt>repositories</rt></ruby>的形式容纳了许多开源项目。对于某个项目,你可以提交一个<ruby>议题<rt>issue</rt></ruby>,来说明你注意到的错误或问题(或进一步提出改进意见),也可以创建一个<ruby>拉取请求<rt>pull request</rt></ruby>,并说明你的更正和改进。
|
||||
Github 以公共<ruby>存储库<rt>repositories</rt></ruby>的形式容纳了许多开源项目。对于某个项目,你可以提交一个<ruby>议题<rt>issue</rt></ruby>,来说明你注意到的错误或问题(或进一步提出改进意见),也可以创建一个<ruby>拉取请求<rt>pull request</rt></ruby>(PR),并说明你的更正和改进。
|
||||
|
||||
我不建议你在 Github 上搜索项目来开始贡献,这将是相当令人沮丧的。尽管你可以限定项目使用的编程语言来简化搜索过程,但仍然会有一大堆东西出现在你眼前。(LCCT 译注:对于可爱的小萌新来说,这实在是难以承受 >…<。)
|
||||
我不建议你在 GitHub 上搜索项目来开始贡献,这将是相当令人沮丧的。尽管你可以限定项目使用的编程语言来简化搜索过程,但仍然会有一大堆东西出现在你眼前。(LCCT 译注:对于可爱的小萌新来说,这实在是难以承受 >…<。)
|
||||
|
||||
为了更精准地找到适合自己的项目,这里有一些可供开始的途径:
|
||||
|
||||
@ -74,7 +74,7 @@ Github 以公共<ruby>存储库<rt>repositories</rt></ruby>的形式容纳了许
|
||||
* 在加入之前,先对项目、社区或组织做一些研究;当你在做的时候,针对不清楚的地方提出问题。
|
||||
* 当你加入社区时,尽量积极地介绍自己,并说明你能帮助项目的地方。
|
||||
* **不要**认为自己无法为项目提供任何帮助,停止这种念头!你有很好的想法可以分享!
|
||||
* 在存储库中看看别人提交的议题,(如果有的话)看看你能在哪些方面提供帮助,你可以关注带有“good first issue”“help-wanted”“first-timers only”等标签的议题。
|
||||
* 在存储库中看看别人提交的议题,(如果有的话)看看你能在哪些方面提供帮助,你可以关注带有“good first issue”、“help-wanted”、“first-timers only”等标签的议题。
|
||||
* 在开始贡献之前,一定要先看一下贡献指南,这样你在贡献时就不会有冲突。
|
||||
|
||||
> 哪怕只是使用一个开源工具也是一种贡献;参加一个开源活动也是一种贡献;做开源项目的志愿者,或者为开源项目提供赞助也是一种贡献。
|
||||
@ -94,7 +94,7 @@ via: https://ruthikegah.xyz/a-beginners-guide-to-open-source
|
||||
作者:[Ruth Ikegah][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lkxed](https://github.com/lkxed)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,93 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (hanszhao80)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-14599-1.html)
|
||||
[#]: subject: (Explore the night sky with this open source astronomy app)
|
||||
[#]: via: (https://opensource.com/article/21/1/kstars)
|
||||
[#]: author: (Don Watkins https://opensource.com/users/don-watkins)
|
||||
|
||||
使用开源天文应用程序 KStars 探索夜空
|
||||
======
|
||||
|
||||
> 使用 KStars 从你的 Linux 桌面或安卓设备眺望星辰。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/16/104339d0u39oiyzugzjf86.jpg)
|
||||
|
||||
我一直对夜空很着迷。当我年轻的时候,唯一可用的参考资料是书籍,它们似乎描绘了一个与我从家里看到的不一样的天空。
|
||||
|
||||
五年多前,我曾介绍过两个开源天文馆应用程序 [Celestia 和 Stellarium][2] 的使用体验。最近,我又了解到一个应用 [KStars][3]。这是一个令人惊叹的开源应用程序,可以帮助儿童(和成人)参与科学和天文学。它的网站上说:
|
||||
|
||||
> “KStars 是一款自由开源的、跨平台的天文学软件。它提供了从地球上的任何位置、任何日期和时间对夜空的一个精确的图形化模拟。可展示包括多达 1 亿颗恒星,13,000 个深空天体,所有 8 个行星,太阳和月亮,以及数千颗彗星,小行星,超新星和卫星。“
|
||||
|
||||
KStars 是 [KDE 教育项目][4] 的一部分。最新版本可用于 Linux、Windows 和 MacOS,它集成了 [StellarSolver][5],这是一个跨平台的 SExtractor 程序,它可以从天文图像构建一个天体目录。
|
||||
|
||||
### 安装 KStars
|
||||
|
||||
KStars 采用 GPL 2.0 协议自由授权。源代码可以在官方的 [KDE GitLab 实例][6] 查看(这是 GitHub 的一个只读镜像)。KDE 教育项目有着优秀的 [安装文档][7]。
|
||||
|
||||
我用的系统是 [Pop!_OS][8],可以在 Pop!_Shop 找到这款应用程序。
|
||||
|
||||
可以从你的发行版的软件存储库中找到 KStars 在 Linux 上安装。而在安卓设备上,可以从 [Google Play 商店][9] 下载适配安卓的 KStars Lite。KDE 项目维护了一份优秀的 [KStars 手册][10] 来帮助用户。
|
||||
|
||||
### 使用 KStars
|
||||
|
||||
安装完后,从你的“<ruby>应用<rt>Applications</rt></ruby>”菜单启动程序。启动向导会指导你完成初始化设置。
|
||||
|
||||
![KStars 启动向导][11]
|
||||
|
||||
这些指示很容易理解。向导会提示设置你住所的位置。不幸的是,我所在的小村庄不在列表里,但附近一个更大的社区在里面。
|
||||
|
||||
![KStars 位置设置][13]
|
||||
|
||||
你还可以下载该程序的其他数据和额外功能。
|
||||
|
||||
![KStars 扩展][14]
|
||||
|
||||
这里有很多可用的选项。我选择“<ruby>在详细信息窗口中显示常见图像<rt>Common images displayed in the detail window</rt></ruby>”。
|
||||
|
||||
一旦完成设置,KStars 会呈现一张基于你的位置的夜空图。
|
||||
|
||||
![KStars 夜空显示][15]
|
||||
|
||||
左上角显示了当前时区(这张图里是 2020 年 11 月 30 日傍晚 5 点 58 分)。
|
||||
|
||||
使用鼠标左键,可以向左、向右、向上和向下移动显示。你可以使用鼠标滚轮进行放大和缩小。将鼠标光标放在天体上并右键单击可查看当前天体的描述。
|
||||
|
||||
![KStars 天体描述][16]
|
||||
|
||||
### 参与
|
||||
|
||||
KStars 正在积极寻求错误报告、天文学知识、代码、翻译等方面的帮助。主要开发者和维护者是 [Jasem Mutlaq][17]。如果你愿意贡献一份力量,请访问 [项目网站][18] 或加入邮件列表以了解更多信息。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/1/kstars
|
||||
|
||||
作者:[Don Watkins][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[hanszhao80](https://github.com/hanszhao80)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/don-watkins
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/osdc_520x292_opensourcestars.png?itok=hnrMETFh (Open source stars.)
|
||||
[2]: https://opensource.com/education/15/7/open-source-apps-explore-night-sky
|
||||
[3]: https://edu.kde.org/kstars/
|
||||
[4]: https://edu.kde.org/
|
||||
[5]: https://github.com/rlancaste/stellarsolver
|
||||
[6]: https://invent.kde.org/education/kstars
|
||||
[7]: https://edu.kde.org/kstars/install.php
|
||||
[8]: https://pop.system76.com/
|
||||
[9]: https://play.google.com/store/apps/details?id=org.kde.kstars.lite&hl=en
|
||||
[10]: https://docs.kde.org/trunk5/en/extragear-edu/kstars/index.html
|
||||
[11]: https://opensource.com/sites/default/files/uploads/kstars_startupwizard.png (KStars Startup Wizard)
|
||||
[12]: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
[13]: https://opensource.com/sites/default/files/uploads/kstars_setlocation.png (KStars location setup)
|
||||
[14]: https://opensource.com/sites/default/files/uploads/kstars_addons.png (KStars add-ons)
|
||||
[15]: https://opensource.com/sites/default/files/uploads/kstars_sky.png (KStars night sky display)
|
||||
[16]: https://opensource.com/sites/default/files/uploads/kstars_objectdescription.png (KStars describes objects)
|
||||
[17]: https://github.com/knro
|
||||
[18]: https://edu.kde.org/kstars
|
@ -0,0 +1,163 @@
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (CoWave-Fall)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-14632-1.html)
|
||||
[#]: subject: (31 open source text editors you need to try)
|
||||
[#]: via: (https://opensource.com/article/21/2/open-source-text-editors)
|
||||
[#]: author: (Seth Kenlon https://opensource.com/users/seth)
|
||||
|
||||
值得尝试的 30 个开源文本编辑器
|
||||
======
|
||||
|
||||
> 正在寻找新的文本编辑器?这里有 31 个编辑器可供尝试。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/24/184603krbzynnnikz8b0nc.jpg)
|
||||
|
||||
计算机是基于文本的,因此你使用它们做的事情越多,你可能就越需要文本编辑应用程序。你在文本编辑器上花费的时间越多,你就越有可能对你使用的编辑器提出更多的要求。
|
||||
|
||||
如果你正在寻找一个好的文本编辑器,你会发现 Linux 可以提供很多。无论你是想在终端、桌面还是在云端工作,你都可以试一试。你可以每天一款编辑器,连续着试一个月(或每月试一个,能够试三年)。坚持不懈,你终将找到适合你的完美的编辑器。
|
||||
|
||||
### Vim 类编辑器
|
||||
|
||||
![][2]
|
||||
|
||||
* [Vi][3] 通常随着 Linux 各发行版、BSD、Solaris 和 macOS 一起安装。它是典型的 Unix 文本编辑器,具有编辑模式和超高效的单键快捷键的独特组合。最初的 Vi 编辑器由 Bill Joy 编写(他也是 C shell 的作者)。Vi 的现代版本,尤其是 Vim,增加了许多特性,包括多级撤消、在插入模式下更好的导航、行折叠、语法高亮、插件支持等等。但它需要学习如何使用(它甚至有自己的教程程序,`vimtutor`)。
|
||||
* [Kakoune][4] 是一个受 Vim 启发的应用程序,它具有熟悉的简约界面、短键盘快捷键以及独立的编辑和插入模式。乍一看,它的外观和感觉很像 Vi,但它在设计和功能上有自己独特的风格。 它有一个小彩蛋:具有 Clippy 界面的实现。
|
||||
|
||||
### emacs 编辑器
|
||||
|
||||
![][5]
|
||||
|
||||
* 从最初的免费 emacs 开始,发展到发起了自由软件运动的 GNU 项目的第一批官方应用程序,[GNU Emacs][6] 是一个广受欢迎的文本编辑器。它非常适合系统管理员、开发人员和日常用户的使用,具有大量功能和近乎无穷无尽的扩展。一旦你开始使用 emacs,你可能会发现很难想出一个理由来关闭它,因为它能做的事情非常多!
|
||||
* 如果你喜欢 emacs,但觉得 GNU Emacs 过于臃肿,那么你可以试试 [Jove][7]。Jove 是一个基于终端的 emacs 编辑器。它很容易使用,但是如果你是使用 emacs 编辑器家族的新手,那么 Jove 也是很容易学习的,这要归功于 `teajove` 命令。
|
||||
* 另一个轻量级的 emacs 编辑器是 [Jed][8]。它的工作流程基于宏。它与其他编辑器的不同之处在于它使用了 [S-Lang][9],这是一种类似 C 的脚本语言,它为使用 C 而不是使用 Lisp 的开发人员提供了扩展的机会。
|
||||
|
||||
### 交互式编辑器
|
||||
|
||||
![][10]
|
||||
|
||||
* [GNU nano][11] 对基于终端的文本编辑采取了大胆的立场:它提供了一个菜单。是的,这个不起眼的编辑器从 GUI 编辑器那里得到了提示,它告诉用户他们需要按哪个键来执行特定的功能。这是一种令人耳目一新的用户体验,所以难怪 nano 被设置为“用户友好”发行版的默认编辑器,而不是 Vi。
|
||||
* [JOE][12] 基于一个名为 WordStar 的旧文本编辑应用程序。如果你不熟悉 Wordstar,JOE 也可以模仿 Emacs 或 GNU nano。默认情况下,它是介于 Emacs 或 Vi 等相对神秘的编辑器和 GNU Nano 永远显示的冗长信息之间的一个很好的折衷方案(例如,它告诉你如何激活屏幕帮助显示,但默认情况下不启用)。
|
||||
* [e3][13] 是一个优秀的小型文本编辑器,具有五个内置的键盘快捷键方案,用来模拟 Emacs、Vi、nano、NEdit 和 WordStar。换句话说,无论你习惯使用哪种基于终端的编辑器,你都可能对 e3 感到宾至如归。
|
||||
|
||||
### ed 及像 ed 一样的编辑器
|
||||
|
||||
* [POSIX][15] 和 Open Group 定义了基于 Unix 的操作系统的标准,[ed][14] 行编辑器是它的一部分。它安装在你遇到的几乎所有 Linux 或 Unix 系统上。它小巧、简洁、一流。
|
||||
* 基于 ed,[Sed][16] 流编辑器因其功能和语法而广受欢迎。大多数 Linux 用户在搜索如何最简单、最快捷的更新配置文件中的行的方法时,至少会遇到一个 `sed` 命令,但它值得仔细研究一下。Sed 是一个强大的命令,包含许多有用的子命令。更好地了解了它,你可能会发现自己打开文本编辑器应用程序的频率要低得多。
|
||||
* 你并不总是需要文本编辑器来编辑文本。[heredoc][17](或 Here Doc)系统可在任何 POSIX 终端中使用,允许你直接在打开的终端中输入文本,然后将输入的内容通过管道传输到文本文件中。这不是最强大的编辑体验,但它用途广泛且始终可用。
|
||||
|
||||
### 极简风格的编辑器
|
||||
|
||||
![][18]
|
||||
|
||||
如果你认为一个好的文本编辑器就是一个文字处理器(除了没有所有的处理功能)的话,你可能正在寻找这些经典编辑器。这些编辑器可让你以最少的干扰和最少的帮助写作和编辑文本。它们提供的功能通常以标记文本、Markdown 或代码为中心。有些名称遵循某种模式:
|
||||
|
||||
* [Gedit][19] 来自 GNOME 团队;
|
||||
* [medit][20] 有经典的 GNOME 手感;
|
||||
* [Xedit][21] 仅使用最基本的 X11 库;
|
||||
* [jEdit][22] 适用于 Java 爱好者。
|
||||
|
||||
KDE 用户也有类似的:
|
||||
|
||||
* [Kate][23] 是一款低调的编辑器,拥有你需要的几乎所有功能;
|
||||
* [KWrite][24] 在看似简单易用的界面中隐藏了大量有用的功能。
|
||||
|
||||
还有一些适用于其他平台:
|
||||
|
||||
* [Pe][26] 适用于 Haiku OS(90 年代那个古怪的孩子 BeOS 的转世);
|
||||
* [FeatherPad][27] 是适用于 Linux 的基本编辑器,但对 macOS 和 Haiku 有一些支持。如果你是一名希望移植代码的 Qt 黑客,请务必看一看!
|
||||
|
||||
### 集成开发环境(IDE)
|
||||
|
||||
![][28]
|
||||
|
||||
文本编辑器和集成开发环境(IDE)有很多相同之处。后者实际上只是前者加上许多为特定代码而添加的功能。如果你经常使用 IDE,你可能会在扩展管理器中发现一个 XML 或 Markdown 编辑器:
|
||||
|
||||
* [NetBeans][29] 是一个方便 Java 用户的文本编辑器。
|
||||
* [Eclipse][30] 提供了一个强大的编辑套件,其中包含许多扩展,可为你提供所需的工具。
|
||||
|
||||
### 云端编辑器
|
||||
|
||||
![][31]
|
||||
|
||||
在云端工作?当然,你也可以在那里进行编辑。
|
||||
|
||||
* [Etherpad][32] 是在网上运行的文本编辑器应用程序。有独立免费的实例供你使用,或者你也可以设置自己的实例。
|
||||
* [Nextcloud][33] 拥有蓬勃发展的应用场景,包括内置文本编辑器和具有实时预览功能的第三方 Markdown 编辑器。
|
||||
|
||||
### 较新的编辑器
|
||||
|
||||
![][34]
|
||||
|
||||
每个人都会有让文本编辑器变得更完美的想法。因此,几乎每年都会发布新的编辑器。有些以一种新的、令人兴奋的方式重新实现经典的旧想法,有些对用户体验有独特的看法,还有些则专注于特定的需求。
|
||||
|
||||
* [Atom][35] 是来自 GitHub 的多功能的现代文本编辑器,具有许多扩展和 Git 集成。
|
||||
* [Brackets][36] 是 Adobe 为 Web 开发人员提供的编辑器。
|
||||
* [Focuswriter][37] 旨在通过无干扰的全屏模式、可选的打字机音效和精美的配置选项等有用功能帮助你专注于写作。
|
||||
* [Howl][38] 是一个基于 Lua 和 Moonscript 的渐进式动态编辑器。
|
||||
* [Norka][39] 和 [KJots][40] 模仿笔记本,每个文档代表“活页夹”中的“页面”。你可以通过导出功能从笔记本中取出单个页面。
|
||||
|
||||
### 自己制作编辑器
|
||||
|
||||
![][41]
|
||||
|
||||
俗话说得好:既然可以编写自己的应用程序,为什么要使用别人的(虽然其实没有这句俗语)?虽然 Linux 有超过 30 个常用的文本编辑器,但是再说一次,开源的一部分乐趣在于能够亲手进行实验。
|
||||
|
||||
如果你正在寻找学习编程的理由,那么制作自己的文本编辑器是一个很好的入门方法。你可以在大约 100 行代码中实现基础功能,并且你使用它的次数越多,你可能就越会受到启发,进而去学习更多知识,从而进行改进。准备好开始了吗?来吧,去 [创建你自己的文本编辑器][42]。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/2/open-source-text-editors
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[CoWave-Fall](https://github.com/CoWave-Fall)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/seth
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/button_push_open_keyboard_file_organize.png?itok=KlAsk1gx (open source button on keyboard)
|
||||
[2]: https://opensource.com/sites/default/files/kakoune-screenshot.png
|
||||
[3]: https://opensource.com/article/20/12/vi-text-editor
|
||||
[4]: https://opensource.com/article/20/12/kakoune
|
||||
[5]: https://opensource.com/sites/default/files/jed.png
|
||||
[6]: https://opensource.com/article/20/12/emacs
|
||||
[7]: https://opensource.com/article/20/12/jove-emacs
|
||||
[8]: https://opensource.com/article/20/12/jed
|
||||
[9]: https://www.jedsoft.org/slang
|
||||
[10]: https://opensource.com/sites/default/files/uploads/nano-31_days-nano-opensource.png
|
||||
[11]: https://opensource.com/article/20/12/gnu-nano
|
||||
[12]: https://opensource.com/article/20/12/31-days-text-editors-joe
|
||||
[13]: https://opensource.com/article/20/12/e3-linux
|
||||
[14]: https://opensource.com/article/20/12/gnu-ed
|
||||
[15]: https://opensource.com/article/19/7/what-posix-richard-stallman-explains
|
||||
[16]: https://opensource.com/article/20/12/sed
|
||||
[17]: https://opensource.com/article/20/12/heredoc
|
||||
[18]: https://opensource.com/sites/default/files/uploads/gedit-31_days_gedit-opensource.jpg
|
||||
[19]: https://opensource.com/article/20/12/gedit
|
||||
[20]: https://opensource.com/article/20/12/medit
|
||||
[21]: https://opensource.com/article/20/12/xedit
|
||||
[22]: https://opensource.com/article/20/12/jedit
|
||||
[23]: https://opensource.com/article/20/12/kate-text-editor
|
||||
[24]: https://opensource.com/article/20/12/kwrite-kde-plasma
|
||||
[25]: https://opensource.com/article/20/12/notepad-text-editor
|
||||
[26]: https://opensource.com/article/20/12/31-days-text-editors-pe
|
||||
[27]: https://opensource.com/article/20/12/featherpad
|
||||
[28]: https://opensource.com/sites/default/files/uploads/eclipse-31_days-eclipse-opensource.png
|
||||
[29]: https://opensource.com/article/20/12/netbeans
|
||||
[30]: https://opensource.com/article/20/12/eclipse
|
||||
[31]: https://opensource.com/sites/default/files/uploads/etherpad_0.jpg
|
||||
[32]: https://opensource.com/article/20/12/etherpad
|
||||
[33]: https://opensource.com/article/20/12/31-days-text-editors-nextcloud-markdown-editor
|
||||
[34]: https://opensource.com/sites/default/files/uploads/atom-31_days-atom-opensource.png
|
||||
[35]: https://opensource.com/article/20/12/atom
|
||||
[36]: https://opensource.com/article/20/12/brackets
|
||||
[37]: https://opensource.com/article/20/12/focuswriter
|
||||
[38]: https://opensource.com/article/20/12/howl
|
||||
[39]: https://opensource.com/article/20/12/norka
|
||||
[40]: https://opensource.com/article/20/12/kjots
|
||||
[41]: https://opensource.com/sites/default/files/uploads/this-time-its-personal-31_days_yourself-opensource.png
|
||||
[42]: https://opensource.com/article/20/12/31-days-text-editors-one-you-write-yourself
|
@ -0,0 +1,255 @@
|
||||
[#]: subject: (Build a printer UI for Raspberry Pi with XML and Java)
|
||||
[#]: via: (https://opensource.com/article/21/3/raspberry-pi-totalcross)
|
||||
[#]: author: (Edson Holanda Teixeira Junior https://opensource.com/users/edsonhtj)
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (CoWave-Fall)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-14620-1.html)
|
||||
|
||||
用 XML 和 Java 构建树莓派打印机的用户界面
|
||||
======
|
||||
|
||||
> 使用 TotalCross 来快速构建嵌入式系统程序的用户界面。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/21/110711zv3t7n1o7hllhodt.jpg)
|
||||
|
||||
从头开始构建 GUI 是一个非常耗时的过程,以硬编码的方式处理所有的位置和对齐对于一些程序员来说确实很困难。所以在本文中,我将演示如何使用 XML 加快这一过程。
|
||||
|
||||
本项目使用 [TotalCross][2] 作为目标框架。TotalCross 是一个开源的跨平台软件开发工具包(SDK),旨在更快地为嵌入式设备创建 GUI。TotalCross 无需在设备上运行 Java 即可提供 Java 的开发优势,因为它使用自己的字节码和虚拟机(<ruby>TC 字节码<rt>TC bytecode</rt></ruby> 和 TCVM)来增强性能。
|
||||
|
||||
我还使用了 Knowcode-XML,这是一个用于 TotalCross 框架的开源 XML 解析器,它可以将 XML 文件转换为 TotalCross 组件。
|
||||
|
||||
### 项目需求
|
||||
|
||||
要重现此项目,你需要:
|
||||
|
||||
* [KnowCode-XML][3]
|
||||
* [VSCode][4] 或 [VSCodium][5]
|
||||
* [一个 Android 开发环境][6]
|
||||
* [用于 VSCode 的 TotalCross 插件][7]
|
||||
* 适用于你的开发平台([Linux][8]、[Mac][9] 或 [Windows][10])的 Java,需要 Java 11(或更高版本)
|
||||
* [Git][11]
|
||||
|
||||
### 制作嵌入式应用程序
|
||||
|
||||
该应用程序由一个具有扫描、打印和复印等基本打印功能的嵌入式 GUI 组成。
|
||||
|
||||
![打印机初始化画面][12]
|
||||
|
||||
构建这个 GUI 需要几个步骤,包括使用 Android-XML 生成 GUI,然后使用 Knowcode-XML 解析器在 TotalCross 框架上运行它。
|
||||
|
||||
#### 1、生成 Android XML
|
||||
|
||||
要创建 XML 文件,首先构建一个简单的 Android 屏幕,然后对其进行自定义。如果你不知道如何编写 Android-XML,或者你只是想简单尝试一下,你可以从这个 [GitHub 项目][14] 中下载这个应用程序的 XML。该项目还包含渲染 GUI 要用到的图片。
|
||||
|
||||
#### 2、调整 XML
|
||||
|
||||
生成 XML 文件后,你需要进行一些微调以确保所有内容都已经对齐、比例正确并且图像的路径正确。
|
||||
|
||||
将 XML 布局添加到 `Layouts` 文件夹,将所有资源添加到 `Drawable` 文件夹。然后你就可以开始自定义 XML 了。
|
||||
|
||||
例如,如果想要更改 XML 对象的背景,可以更改 `android:background` 属性:
|
||||
|
||||
```
|
||||
android:background="@drawable/scan"
|
||||
```
|
||||
|
||||
你也可以使用 `tools:layout_editor_absoluteX` 和 `tools:layout_editor_absoluteY` 更改对象的位置:
|
||||
|
||||
```
|
||||
tools:layout_editor_absoluteX="830dp"
|
||||
tools:layout_editor_absoluteY="511dp"
|
||||
```
|
||||
|
||||
或者使用 `android:layout_width` 和 `android:layout_height` 更改对象的大小:
|
||||
|
||||
```
|
||||
android:layout_width="70dp"
|
||||
android:layout_height="70dp"
|
||||
```
|
||||
|
||||
如果要在对象上放置文本,可以使用 `android:textSize`、`android:text`、`android:textStyle` 和 `android:textColor`:
|
||||
|
||||
```
|
||||
android:textStyle="bold"
|
||||
android:textColor="#000000"
|
||||
android:textSize="20dp"
|
||||
android:text="2:45PM"
|
||||
```
|
||||
|
||||
下面是一个完整的 XML 对象的示例:
|
||||
|
||||
```
|
||||
<ImageButton
|
||||
android:id="@+id/ImageButton"
|
||||
android:layout_width="70dp"
|
||||
android:layout_height="70dp"
|
||||
tools:layout_editor_absoluteX="830dp"
|
||||
tools:layout_editor_absoluteY="511dp"
|
||||
android:background="@drawable/home_config" />
|
||||
```
|
||||
|
||||
#### 3、在 TotalCross 上运行 GUI
|
||||
|
||||
完成所有 XML 调整后,就可以在 TotalCross 上运行它了。在 TotalCross 扩展(LCTT 译注:在 VSCode 里面)上创建一个新项目,并将 `XML` 和 `Drawable` 文件夹添加到 `Main` 文件夹里。如果你仍然不确定如何创建 TotalCross 项目,请参阅我们的 [入门指南][15]。
|
||||
|
||||
配置好环境后,使用 `totalcross.knowcode.parse.XmlContainerFactory` 和 `import totalcross.knowcode.parse.XmlContainerLayout` 在 TotalCross 框架上使用 XML GUI。 你可以在其 [GitHub 页面][3] 上找到更多关于使用 KnowCode-XML 的信息。
|
||||
|
||||
#### 4、添加过渡效果
|
||||
|
||||
这个项目的平滑过渡效果是由 `SlidingNavigator` 类创建的,它使用 TotalCross 的 `ControlAnimation` 类从一个屏幕滑到另一个屏幕。
|
||||
|
||||
在 `XMLpresenter` 类上调用 `SlidingNavigator`:
|
||||
|
||||
```
|
||||
new SlidingNavigator(this).present(HomePresenter.class);
|
||||
```
|
||||
|
||||
在 `SlidingNavigator` 类上实现 `present` 函数:
|
||||
|
||||
```
|
||||
public void present(Class<? extends XMLPresenter> presenterClass)
|
||||
throws InstantiationException, IllegalAccessException {
|
||||
final XMLPresenter presenter = cache.containsKey(presenterClass) ? cache.get(presenterClass)
|
||||
: presenterClass.newInstance();
|
||||
if (!cache.containsKey(presenterClass)) {
|
||||
cache.put(presenterClass, presenter);
|
||||
}
|
||||
|
||||
if (presenters.isEmpty()) {
|
||||
window.add(presenter.content, LEFT, TOP, FILL, FILL);
|
||||
} else {
|
||||
XMLPresenter previous = presenters.lastElement();
|
||||
|
||||
window.add(presenter.content, AFTER, TOP, SCREENSIZE, SCREENSIZE, previous.content);
|
||||
```
|
||||
|
||||
使用动画控件中的 `PathAnimation` 来创建从一个屏幕到另一个屏幕的滑动动画:
|
||||
|
||||
```
|
||||
PathAnimation.create(previous.content, -Settings.screenWidth, 0, new ControlAnimation.AnimationFinished() {
|
||||
@Override
|
||||
public void onAnimationFinished(ControlAnimation anim) {
|
||||
window.remove(previous.content);
|
||||
}
|
||||
}, 1000).with(PathAnimation.create(presenter.content, 0, 0, new ControlAnimation.AnimationFinished() {
|
||||
@Override
|
||||
public void onAnimation Finished(Control Animation anim) {
|
||||
presenter.content.setRect(LEFT, TOP, FILL, FILL);
|
||||
}
|
||||
}, 1000)).start();
|
||||
}
|
||||
presenter.setNavigator(this);
|
||||
presenters.push(presenter);
|
||||
presenter.bind2();
|
||||
if (presenter.isFirstPresent) {
|
||||
presenter.onPresent();
|
||||
presenter.isFirstPresent = false;
|
||||
}
|
||||
```
|
||||
|
||||
#### 5、加载环形进度条
|
||||
|
||||
打印机应用程序的另一个不错的功能是显示进度的加载屏幕动画。它包括文本和旋转动画。
|
||||
|
||||
![加载环形进度条][18]
|
||||
|
||||
通过添加定时器和定时器监听器来更新进度标签,然后调用函数 `spinner.start()` 来实现此功能。所有的动画都是由 TotalCross 和 KnowCode 自动生成的:
|
||||
|
||||
```
|
||||
public void startSpinner() {
|
||||
time = content.addTimer(500);
|
||||
content.addTimerListener((e) -> {
|
||||
try {
|
||||
progress(); // Updates the Label
|
||||
} catch (InstantiationException | IllegalAccessException e1) {
|
||||
// TODO Auto-generated catch block
|
||||
e1.printStackTrace();
|
||||
}
|
||||
});
|
||||
Spinner spinner = (Spinner) ((XmlContainerLayout) content).getControlByID("@+id/spinner");
|
||||
spinner.start();
|
||||
}
|
||||
```
|
||||
|
||||
这里的环形进度条被实例化为对 XML 文件中描述的 `XmlContainerLayout` `spinner` 的引用:
|
||||
|
||||
```
|
||||
<ProgressBar
|
||||
android:id="@+id/spinner"
|
||||
android:layout_width="362dp"
|
||||
android:layout_height="358dp"
|
||||
tools:layout_editor_absoluteX="296dp"
|
||||
tools:layout_editor_absoluteY="198dp"
|
||||
android:indeterminateTint="#2B05C7"
|
||||
style="?android:attr/progressBarStyle" />
|
||||
```
|
||||
|
||||
#### 6、构建应用程序
|
||||
|
||||
是时候构建应用程序了。你可以在 `pom.xml` 中查看和更改<ruby>目标系统<rt>target systems</rt></ruby>。 请确保 `Linux Arm` 目标可用。
|
||||
|
||||
如果你使用的是 VSCode,请按下键盘上的 `F1` 键,选择 `TotalCross: Package` 并等待完成。 然后就可以在 `Target` 文件夹中看到安装文件了。
|
||||
|
||||
#### 7、在树莓派上部署和运行应用程序
|
||||
|
||||
要使用 SSH 协议在 [树莓派][19] 上部署应用程序,请按键盘上的 `F1`。选择 `TotalCross: Deploy&Run` 并提供有关你的 SSH 连接的信息,如:用户名、IP地址、密码和应用程序路径。
|
||||
|
||||
![TotalCross:部署与运行][20]
|
||||
|
||||
![配置 SSH 用户名][21]
|
||||
|
||||
![配置 IP 地址][22]
|
||||
|
||||
![输入密码][23]
|
||||
|
||||
![配置路径][24]
|
||||
|
||||
### 总结
|
||||
|
||||
KnowCode 让使用 Java 创建和管理应用程序屏幕变得更加容易。Knowcode-XML 将你的 XML 转换为 TotalCross GUI 界面,然后生成二进制文件以在你的树莓派上运行。
|
||||
|
||||
将 KnowCode 技术与 TotalCross 相结合,使你能够更快地创建嵌入式应用程序。 你可以访问我们在 GitHub 上的 [嵌入式示例][25] 并编辑你自己的应用程序,了解你还可以做什么。
|
||||
|
||||
如果你有问题、需要帮助,或者只是想与其他嵌入式 GUI 开发人员互动,请随时加入我们的 [Telegram][26] 小组,讨论任何框架上的嵌入式应用程序。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/3/raspberry-pi-totalcross
|
||||
|
||||
作者:[Edson Holanda Teixeira Junior][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[CoWave-Fall](https://github.com/CoWave-Fall)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/edsonhtj
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/gears_devops_learn_troubleshooting_lightbulb_tips_520.png?itok=HcN38NOk (Tips and gears turning)
|
||||
[2]: https://opensource.com/article/20/7/totalcross-cross-platform-development
|
||||
[3]: https://github.com/TotalCross/knowcode-xml
|
||||
[4]: https://code.visualstudio.com/
|
||||
[5]: https://opensource.com/article/20/6/open-source-alternatives-vs-code
|
||||
[6]: https://developer.android.com/studio
|
||||
[7]: https://marketplace.visualstudio.com/items?itemName=totalcross.vscode-totalcross
|
||||
[8]: https://opensource.com/article/19/11/install-java-linux
|
||||
[9]: https://opensource.com/article/20/7/install-java-mac
|
||||
[10]: http://adoptopenjdk.net
|
||||
[11]: https://opensource.com/life/16/7/stumbling-git
|
||||
[12]: https://opensource.com/sites/default/files/uploads/01_printergui.png (printer init screen)
|
||||
[13]: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
[14]: https://github.com/TotalCross/embedded-samples/tree/main/printer-application/src/main/resources/layout
|
||||
[15]: https://totalcross.com/get-started/?utm_source=opensource&utm_medium=article&utm_campaign=printer
|
||||
[16]: http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+instantiationexception
|
||||
[17]: http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+illegalaccessexception
|
||||
[18]: https://opensource.com/sites/default/files/uploads/03progressspinner.png (Loading Spinner)
|
||||
[19]: https://www.raspberrypi.org/products/raspberry-pi-4-model-b/
|
||||
[20]: https://opensource.com/sites/default/files/uploads/04_totalcross-deployrun.png (TotalCross: Deploy&Run)
|
||||
[21]: https://opensource.com/sites/default/files/uploads/05_ssh.png (SSH user)
|
||||
[22]: https://opensource.com/sites/default/files/uploads/06_ip.png (IP address)
|
||||
[23]: https://opensource.com/sites/default/files/uploads/07_password.png (Password)
|
||||
[24]: https://opensource.com/sites/default/files/uploads/08_path.png (Path)
|
||||
[25]: https://github.com/TotalCross/embedded-samples
|
||||
[26]: https://t.me/totalcrosscommunity
|
@ -0,0 +1,87 @@
|
||||
[#]: subject: (WebAssembly Security, Now and in the Future)
|
||||
[#]: via: (https://www.linux.com/news/webassembly-security-now-and-in-the-future/)
|
||||
[#]: author: (Dan Brown https://training.linuxfoundation.org/announcements/webassembly-security-now-and-in-the-future/)
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (hanszhao80)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-14592-1.html)
|
||||
|
||||
WebAssembly 安全的现在和未来
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/14/144316bb8kbwjephjyb427.jpg)
|
||||
|
||||
### 简介
|
||||
|
||||
正如我们 [最近解释的][1],WebAssembly 是一种用于以任何语言编写的二进制格式的软件,旨在最终无需更改就能在任意平台运行。WebAssembly 的第一个应用是在 Web 浏览器中,以使网站更快、更具交互性。WebAssembly 有计划推向 Web 之外,从各种服务器到物联网(IoT),其创造了很多机会,但也存在很多安全问题。这篇文章是对这些问题和 WebAssembly 安全模型的一篇介绍性概述。
|
||||
|
||||
### WebAssembly 跟 JavaScript 很像
|
||||
|
||||
在 Web 浏览器内部,WebAssembly 模块由执行 JavaScript 代码的同一 <ruby>虚拟机<rt>VM</rt></ruby> 管理。因此,WebAssembly 和 JavaScript 一样,造成的危害也是相同的,只是效率更高,更不易被察觉。由于 JavaScript 是纯文本,运行前需要浏览器编译,而 WebAssembly 是一种可立即运行的二进制格式,运行速度更快,也更难被扫描出(即使使用杀毒软件)其中的恶意指令。
|
||||
|
||||
WebAssembly 的这种 “代码混淆” 效果已经被用来弹出不请自来的广告,或打开假的 “技术支持” 窗口,要求提供敏感数据。另一个把戏则是自动将浏览器重定向到包含真正危险的恶意软件的 “落地” 页。
|
||||
|
||||
最后,就像 JavaScript 一样,WebAssembly 可能被用来 “窃取” 处理能力而不是数据。2019 年,[对 150 个不同的 WASM 模块的分析][2] 发现,其中约 _32%_ 被用于加密货币挖掘。
|
||||
|
||||
### WebAssembly 沙盒和接口
|
||||
|
||||
WebAssembly 代码在一个由虚拟机(而不是操作系统)管理的 [沙盒][3] 中封闭运行。这使它无法看到主机,也无法直接与主机交互。对系统资源(文件、硬件或互联网连接)的访问只能通过该虚拟机提供的 <ruby>WebAssembly 系统接口<rt>WebAssembly System Interface</rt></ruby>(WASI) 进行。
|
||||
|
||||
WASI 不同于大多数其他应用程序编程接口(API),它具有独特的安全特性,真正推动了 WASM 在传统服务器和<ruby>边缘<rt>Edge</rt></ruby>计算场景中的采用,这将是下一篇文章的主题。在这里,可以说,当从 Web 迁移到其他环境时,它的安全影响会有很大的不同。现代 Web 浏览器是极其复杂的软件,但它是建立在数十年的经验和数十亿人的日常测试之上的。与浏览器相比,服务器或物联网(IoT)设备几乎是未知领域。这些平台的虚拟机将需要扩展 WASI,因此,肯定会带来新的安全挑战。
|
||||
|
||||
### WebAssembly 中的内存和代码管理
|
||||
|
||||
与普通的编译程序相比,WebAssembly 应用程序对内存的访问非常受限,对它们自己也是如此。WebAssembly 代码不能直接访问尚未调用的函数或变量,不能跳转到任意地址,也不能将内存中的数据作为字节码指令执行。
|
||||
|
||||
在浏览器内部,WASM 模块只能获得一个连续字节的全局数组(<ruby>线性内存<rt>linear memory</rt></ruby>)进行操作。WebAssembly 可以直接读写该区域中的任意位置,或者请求增加其大小,但仅此而已。这个<ruby>线性内存<rt>linear memory</rt></ruby>也与包含其实际代码、执行堆栈、当然还有运行 WebAssembly 的虚拟机的区域分离。对于浏览器来说,所有这些数据结构都是普通的 JavaScript 对象,使用标准过程与所有其他对象隔离。
|
||||
|
||||
### 结果还好,但不完美
|
||||
|
||||
所有这些限制使得 WebAssembly 模块很难做出不当行为,但也并非不可能。
|
||||
|
||||
沙盒化的内存使 WebAssembly 几乎不可能接触到 __外部__ 的东西,也使操作系统更难防止 __内部__ 发生不好的事情。传统的内存监测机制,比如 <ruby>[堆栈金丝雀][4]<rt>Stack Canaries</rt></ruby> 能注意到是否有代码试图扰乱它不应该接触的对象,[但在这里没用][5]。
|
||||
|
||||
事实上,WebAssembly 只能访问自己的<ruby>线性内存<rt>linear memory</rt></ruby>,但可以直接访问,这也可能为攻击者的行为 _提供便利_。有了这些约束和对模块源代码的访问,就更容易猜测覆盖哪些内存位置可能造成最大的破坏。破坏局部变量似乎也是 [可能的][6],因为它们停留在<ruby>线性内存<rt>linear memory</rt></ruby>中的无监督堆栈中。
|
||||
|
||||
2020 年的一篇关于 [WebAssembly 的二进制安全性][5] 的论文指出,WebAssembly 代码仍然可以在设定的常量内存中覆盖字符串文字。同一篇论文描述了在三个不同的平台(浏览器、Node.JS 上的服务端应用程序,和独立 WebAssembly 虚拟机的应用程序)上,WebAssembly 可能比编译为原生二进制文件时更不安全的其他方式。建议进一步阅读此主题。
|
||||
|
||||
通常,认为 WebAssembly 只能破坏其自身沙盒中的内容的想法可能会产生误导。WebAssembly 模块为调用它们的 JavaScript 代码做繁重的工作,每次都会交换变量。如果模块在这些变量中的任意一处写入不安全的调用 WebAssembly 的 JavaScript 代码,就 _会_ 导致崩溃或数据泄露。
|
||||
|
||||
### 未来的方向
|
||||
|
||||
WebAssembly 的两个新出现的特性:[并发][7] 和内部垃圾收集,肯定会影响其安全性(如何影响以及影响多少,现在下结论还为时过早)。
|
||||
|
||||
并发允许多个 WebAssembly 模块在同一个虚拟机中并行。目前,只有通过 JavaScript [web workers][8] 才能实现这一点,但更好的机制正在开发中。安全方面,他们可能会带来 [以前不需要的大量的代码][9],也就是更多出错的方法。
|
||||
|
||||
为了提高性能和安全性,我们需要一个 [本地的垃圾收集器][10],但最重要的是,要在经过良好测试的浏览器的 Java 虚拟机之外使用 WebAssembly,因为这些虚拟机无论如何都会在自己内部收集所有的垃圾。当然,甚至这个新代码也可能成为漏洞和攻击的另一个入口。
|
||||
|
||||
往好处想,使 WebAssembly 比现在更安全的通用策略也是存在的。再次引用 [这篇文章][5],这些策略包括:编译器改进、栈/堆和常量数据的 _分离_ 的线性存储机制,以及避免使用 **不安全的语言**(如 C)编译 WebAssembly 模块代码。
|
||||
|
||||
*本文 [WebAssembly 安全的现在和未来][11] 首次发表在 [Linux 基金会 - 培训][12]。*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.linux.com/news/webassembly-security-now-and-in-the-future/
|
||||
|
||||
作者:[Dan Brown][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[hanszhao80](https://github.com/hanszhao80)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://training.linuxfoundation.org/announcements/webassembly-security-now-and-in-the-future/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://training.linuxfoundation.org/announcements/an-introduction-to-webassembly/
|
||||
[2]: https://www.sec.cs.tu-bs.de/pubs/2019a-dimva.pdf
|
||||
[3]: https://webassembly.org/docs/security/
|
||||
[4]: https://ctf101.org/binary-exploitation/stack-canaries/
|
||||
[5]: https://www.usenix.org/system/files/sec20-lehmann.pdf
|
||||
[6]: https://spectrum.ieee.org/tech-talk/telecom/security/more-worries-over-the-security-of-web-assembly
|
||||
[7]: https://github.com/WebAssembly/threads
|
||||
[8]: https://en.wikipedia.org/wiki/Web_worker
|
||||
[9]: https://googleprojectzero.blogspot.com/2018/08/the-problems-and-promise-of-webassembly.html
|
||||
[10]: https://github.com/WebAssembly/gc/blob/master/proposals/gc/Overview.md
|
||||
[11]: https://training.linuxfoundation.org/announcements/webassembly-security-now-and-in-the-future/
|
||||
[12]: https://training.linuxfoundation.org/
|
95
published/202205/20210615 Listen to music on FreeDOS.md
Normal file
95
published/202205/20210615 Listen to music on FreeDOS.md
Normal file
@ -0,0 +1,95 @@
|
||||
[#]: subject: (Listen to music on FreeDOS)
|
||||
[#]: via: (https://opensource.com/article/21/6/listen-music-freedos)
|
||||
[#]: author: (Jim Hall https://opensource.com/users/jim-hall)
|
||||
[#]: collector: (lujun9972)
|
||||
[#]: translator: (hanszhao80)
|
||||
[#]: reviewer: (wxy)
|
||||
[#]: publisher: (wxy)
|
||||
[#]: url: (https://linux.cn/article-14603-1.html)
|
||||
|
||||
在 FreeDOS 中聆听音乐
|
||||
======
|
||||
|
||||
> Mplayer 是 Linux、Windows、Mac 和 DOS 等操作系统上常见的一款开源媒体播放器。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/17/092828vffyeliiz33hqf31.jpg)
|
||||
|
||||
听音乐是放松心情的好方法。在 Linux 上,我使用 Rhythmbox 听音乐。但是你可能不知道在 FreeDOS 上也可以听音乐。让我们看一下两款流行的音乐播放器吧:
|
||||
|
||||
### 用 Mplayer 听音乐
|
||||
|
||||
[Mplayer][2] 是一款开源的媒体播放器,通常安装于 Linux、Windows 和 Mac 上,但也有 DOS 版本可用。这里我们讨论的就是在 FreeDOS 版本。虽然其 DOS 移植版基于旧版(2007 年的 1.0rc2-3-3-2 版),但它完全适用于在 DOS 上播放媒体。
|
||||
|
||||
我使用 MPlayer 在 FreeDOS 上听音乐文件。在这个例子中,我复制了我最喜欢的有声读物之一,[Big Finish Productions][3] 的<ruby>神秘博士:闪点行动<rt>Doctor Who: Flashpoint</rt></ruby>,并在我的 FreeDOS 计算机上将其保存为 `C:\MUSIC\FLASHPNT.MP3`。为了在 FreeDOS 上收听闪点行动,我从 FreeDOS 命令行启动 MPlayer 并指定要播放的 MP3 文件名。MPlayer 的基本用法是 `mplayer [options] filename`,如果默认设置可用,你应该可以直接使用该文件名启动 MPlayer。在本例中,我运行以下命令将工作目录切换为 `\MUSIC`,然后使用 MPlayer 播放我的 MP3 有声读物文件:
|
||||
|
||||
```
|
||||
CD \MUSIC
|
||||
MPLAYER FLASHPNT.MP3
|
||||
```
|
||||
|
||||
FreeDOS _不区分大小写_,因此它将忽略 DOS 命令和任何文件或目录的大小写字母的区别。你键入 `cd \music` 或 `Cd \Music` 都可以切换到 Music 目录,效果相同。
|
||||
|
||||
![FreeDOS 上的 Mplayer][4]
|
||||
|
||||
*你可以用 Mplayer 播放 MP3 文件*
|
||||
|
||||
使用 MPlayer 在 FreeDOS 播放音乐文件时没有花哨的界面。但同时,它也不会分散注意力。所以我可以一边让 FreeDOS 在我的 DOS 计算机上播放 MP3 文件,一边使用另一台计算机做其他事情。然而,FreeDOS 一次只运行一个任务(换句话说,DOS 是一个<ruby>单任务<rt>single-tasking</rt></ruby>操作系统),所以我不能将 MPlayer 置于 FreeDOS 的“后台”运行,而在 _同一台 FreeDOS 机_ 上处理其他事情。
|
||||
|
||||
请注意,MPlayer 是一个需要大量内存才能运行的大程序。虽然 DOS 本身并不需要太多的内存来运行,但我建议至少有 16M 的内存来运行 MPlayer。
|
||||
|
||||
### 使用 Open Cubic Player 听音频文件
|
||||
|
||||
FreeDOS 不止提供了 MPlayer 来播放媒体。还有 [Open Cubic Player][6],它支持多种文件格式,包括 Midi 和 WAV 文件。
|
||||
|
||||
1999 年,我录制了一段简短的音频文件,内容是我说:“你好,我是 Jim Hall,我把 ‘FreeDOS’ 发音为 _FreeDOS_。"这是一个玩笑,借鉴了 Linus Torvalds 录制的演示他如何发音 Linux 的 [类似的音频文件][7](`English.au`,包含在 1994 年的 Linux 源代码树中)中的创意。我们不会在 FreeDOS 中分发这段 FreeDOS 音频剪辑,但欢迎你从我们的 [Silly Sounds][8] 目录中下载它,该目录位于 [Ibiblio][9] 的 FreeDOS 文件存档中。
|
||||
|
||||
你可以使用 Open Cubic Player 收听 _FreeDOS_ 音频剪辑。通常从 `\APPS\OPENCP` 目录键入 `CP` 命令运行 Open Cubic Player。但 Open Cubic Player 是 32 位应用程序,运行它需要 32 位 DOS 扩展器。常见的 DOS 扩展器是 DOS/4GW。虽然可以免费使用,但 DOS/4GW 不是开源程序,因此我们不会将其作为 FreeDOS 包分发。
|
||||
|
||||
相反,FreeDOS 提供了另一个名为 DOS/32A 的开源32位扩展器。如果你在安装 FreeDOS 时没有安装所有内容,则可能需要使用 [FDIMPLES][10] 进行安装。我使用这两行命令切换到 `\APPS\OPENCP` 路径,并使用 DOS/32A 扩展器运行 Open Cubic Player:
|
||||
|
||||
```
|
||||
CD \APPS\OPENCP
|
||||
DOS32A CP
|
||||
```
|
||||
|
||||
Open Cubic Player 没有花哨的用户界面,但你可以使用方向键将 <ruby>文件选择器<rt>File Selector</rt></ruby> 导航到包含要播放的媒体文件的目录。
|
||||
|
||||
![Open Cubic Player][11]
|
||||
|
||||
*Open Cubic Player 打开文件选择器*
|
||||
|
||||
文本比在其他 DOS 应用程序中显示的要小,因为 Open Cubic Player 会自动将显示更改为使用 50 行文本,而不是通常的 25 行。当你退出程序时,Open Cubic Player 会将显示重置为 25 行。
|
||||
|
||||
选择媒体文件后,Open Cubic Player 将循环播放该文件(按键盘上的 `Esc` 键退出)。当文件通过扬声器播放时,Open Cubic Player 会显示一个频谱仪,以便你可以观察左右声道的音频。FreeDOS 音频剪辑是以单声道录制的,因此左右声道是相同的。
|
||||
|
||||
![Open Cubic Player][12]
|
||||
|
||||
*Open Cubic Player 中播放 FreeDOS 音频文件*
|
||||
|
||||
DOS 可能来自较早的年代,但这并不意味着你不能使用 FreeDOS 来执行现代任务或播放当前的媒体。如果你喜欢听数字音乐,试一试在 FreeDOS上 使用 Open Cubic Player 或 MPlayer 吧!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/6/listen-music-freedos
|
||||
|
||||
作者:[Jim Hall][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[hanszhao80](https://github.com/hanszhao80)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/jim-hall
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/programming-code-keyboard-laptop-music-headphones.png?itok=EQZ2WKzy (Woman programming)
|
||||
[2]: https://en.wikipedia.org/wiki/MPlayer
|
||||
[3]: https://bigfinish.com/
|
||||
[4]: https://opensource.com/sites/default/files/uploads/mplayer.png (You can use Mplayer to listen to MP3 files)
|
||||
[5]: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
[6]: https://www.cubic.org/player/
|
||||
[7]: https://commons.wikimedia.org/wiki/File:Linus-linux.ogg
|
||||
[8]: https://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/util/sillysounds/
|
||||
[9]: https://www.ibiblio.org/
|
||||
[10]: https://opensource.com/article/21/6/freedos-package-manager
|
||||
[11]: https://opensource.com/sites/default/files/uploads/opencp1.png (Open Cubic Player opens with a file selector)
|
||||
[12]: https://opensource.com/sites/default/files/uploads/opencp2.png (Open Cubic Player playing the "FreeDOS" audio clip)
|
@ -3,15 +3,16 @@
|
||||
[#]: author: "Emilio Galeano Gryciuk https://opensource.com/users/egaleano"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "aREversez"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14596-1.html"
|
||||
|
||||
开源社区透明度的五个层次
|
||||
======
|
||||
如果想让开源社区繁荣发展,管理者需要达到透明度的五个层次。
|
||||
|
||||
![Person in a field of dandelions][1]
|
||||
> 如果想让开源社区繁荣发展,管理者需要达到透明度的五个层次。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/15/150842yrvm9v5qbbd7a355.jpg)
|
||||
|
||||
开源社区的管理者必须意识到社区有五个层次的透明度,这对于建设繁荣发展的开源社区来说至关重要。
|
||||
|
||||
@ -25,33 +26,27 @@
|
||||
* 社区管理者需要向参与者报告社区情况。
|
||||
* 向成员公开社区各项情况,营造信任氛围,有利于社区健康发展。
|
||||
|
||||
|
||||
|
||||
### 透明度的五个层次
|
||||
|
||||
#### 层次一:发布源码
|
||||
|
||||
在这一层次,社区需要遵循 [开放源码协议][2],在 [Git][3] 等公开的版本控制系统上发布源码。
|
||||
在这一层次,社区需要遵循 [OSI 认可的许可证][2],在 [Git][3] 等公开的版本控制系统上发布源码。
|
||||
|
||||
层次一的目标在于创建开源项目。
|
||||
|
||||
* 建立开源社区,理应达到这一层次。因为没有公开源代码,也就无所谓开源项目。
|
||||
* 开源项目的核心便是参与者们编写的源码,而源码需要获得开放源码协议批准的许可证。
|
||||
* 开源项目的核心便是参与者们编写的源码,并在 OSI 批准的许可证下授权。
|
||||
* 公开的版本控制系统能够促进合作,使得每一位开发者都能了解项目情况,理解合作模式。
|
||||
|
||||
|
||||
|
||||
#### 层次二:发布社区指南
|
||||
|
||||
达到这一层次,需要发布相关文档以及资源。也可通过组织活动,指导社区成员。
|
||||
达到这一层次,需要发布相关文档以及资源。也可通过组织活动来指导社区成员。
|
||||
|
||||
层次二的目标在于建立开源社区,促进社区发展。
|
||||
层次二的目标在于为一个开源项目建立和发展一个开源社区。
|
||||
|
||||
* 建立一个活跃的社区需要的不仅仅是源代码。
|
||||
* 公开项目开展方式和贡献方式,能够吸引更多的开发者参与到项目当中。
|
||||
* 为了推动社区的发展,管理者可能需要举办一些重要活动,并为贡献者们筹办特殊活动。
|
||||
|
||||
|
||||
* 为了推动社区的发展,管理者可能需要举办一些重要活动,并为贡献者们筹办一些特殊的活动。
|
||||
|
||||
#### 层次三:继往开来
|
||||
|
||||
@ -63,8 +58,6 @@
|
||||
* 公开社区活动,让成员意识到自己的付出能够为公众所见,为公众所识。
|
||||
* 在这一层次,无论是报告还是分析,发布的时间并不固定,使用的工具也无定法。
|
||||
|
||||
|
||||
|
||||
#### 层次四:掌握社区的动态
|
||||
|
||||
这一层次就在于倾听社区声音:通过观察社区活动,关注项目发展;跟进软件开发进度,据此采取合适的应对措施。
|
||||
@ -72,11 +65,9 @@
|
||||
层次四的目标在于保持科学严谨的态度,持续把握社区的发展情况及发展轨迹,引导社区朝着下一个层次迈进。
|
||||
|
||||
* 建立报告机制,运用分析工具,掌握社区动态。
|
||||
* 将社区的各项活动与社区成员的反响视作一种基准,用以比较社区内的其他活动。(译者注:由于译者能力有限,对原文本句所要表达内容的理解可能有误,故将原文附上以供参考:You can compare events in the community and the subsequent reactions of community members to a baseline and other events in the community.)
|
||||
* 将社区的各项活动与社区成员的反响与基线和社区内的其他活动进行比较。
|
||||
* 坚持倾听社区声音,形成对于社区更深刻的见解。
|
||||
|
||||
|
||||
|
||||
#### 层次五:维护社区,长久发展
|
||||
|
||||
最后一个层次就是依据社区各项指标,提高社区成员的参与度。
|
||||
@ -87,9 +78,7 @@
|
||||
* 跟进这些变动,理解它们是如何通过各项指标和数据分析体现出来的。
|
||||
* 针对社区维护者与开发者,制定服务等级协议和问责制度,为其设立参与度目标,确保项目整体顺利进行。
|
||||
|
||||
|
||||
|
||||
### 结尾
|
||||
### 总结
|
||||
|
||||
开源社区管理者需要做到上述五个层次,保证透明度,才能构建起一个繁荣发展的社区。
|
||||
|
||||
@ -100,7 +89,7 @@ via: https://opensource.com/article/22/2/transparency-open-source-communities
|
||||
作者:[Emilio Galeano Gryciuk][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[aREversez](https://github.com/aREversez)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,83 @@
|
||||
[#]: subject: "Why use Apache Druid for your open source analytics database"
|
||||
[#]: via: "https://opensource.com/article/22/4/apache-druid-open-source-analytics"
|
||||
[#]: author: "David Wang https://opensource.com/users/davidwang"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "unigeorge"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14608-1.html"
|
||||
|
||||
为什么推荐开源分析数据库 Apache Druid
|
||||
======
|
||||
|
||||
> 对用户而言,优秀的对外数据分析工具非常关键,因此选择合适的数据架构就显得尤为重要。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/18/154417bvakcquzn2ahv4ua.jpg)
|
||||
|
||||
现如今,数据分析不再是仅面向内部开发人员。当为业务方构建数据分析系统时,你需要确认哪种数据库后端是最合适的。
|
||||
|
||||
程序员的本能可能是“选用自己了解的数据库(例如 PostgreSQL 或 [MySQL][2])”。数据仓库也可能会扩展核心的 BI 仪表板和报告之外的功能,不过对业务方的数据分析支持仍是其重要功能之一,因此要选择合适的工具来保证此功能的性能。
|
||||
|
||||
问题的关键点在于用户体验,以下是对外支持数据分析工作的一些关键技术讨论点(以 Apache Druid 为例)。
|
||||
|
||||
### 低延迟特性
|
||||
|
||||
一直在队列中等待查询会让人很恼火。与延迟有关的因素包括数据量、数据库的处理能力、用户和 API 调用的数量,以及数据库支持查询应用的能力。
|
||||
|
||||
当数据量比较大时,有一些方法可以基于任意在线分析处理(OLAP)数据库构建交互式数据体验,但或多或少都有一些其他方面的牺牲。预计算查询会对性能要求较高,还会使架构变得僵化。预聚合处理会使数据粒度变大。将数据时间限制在近期的处理方式,会使得数据完整性得不到保证。
|
||||
|
||||
一个“不妥协”的解决方案是选择专为大规模交互而构建的优化架构和数据格式,[Apache Druid][3] 正是这样一个旨在支持现代分析程序的实时数据库。
|
||||
|
||||
* 首先,Druid 具备特有的分布式弹性架构,可将数据从共享数据层预取到近乎无限容量的数据服务器集群中。这种架构与诸如云数据仓库这样的解耦查询引擎相比,具有更快的性能,因为它不需要移动数据,并且比像 PostgreSQL 和 MySQL 这样的纵向扩展数据库具有更高的可扩展性。
|
||||
* 其次,Druid 采用内置于数据格式中的自动多级索引来驱动每个内核去支持更多查询操作。在常规 OLAP 列格式基础之上,还增加了全局索引、数据字典和位图索引,这可以最大化利用 CPU 周期,加快处理速度。
|
||||
|
||||
### 高可用性
|
||||
|
||||
如果开发团队为内部报告搭建了一个后端,那么中断几分钟甚至更长时间真的很严重吗?实际上并不是的。所以在典型 OLAP 数据库和数据仓库中,计划外的停机和维护是可以允许的。
|
||||
|
||||
但是如果你们团队构建了一个对外的供客户使用的分析应用程序,如果发生数据中断,会严重影响客户满意度、收入,当然还有你的周末休息时间。这就是为什么弹性(高可用性和数据持久性)需要成为对外分析应用程序数据库中的首要考虑因素。
|
||||
|
||||
考虑弹性就需要考虑设计标准。节点或集群范围的故障能完全避免吗?丢失数据的后果有多严重?保障应用程序和数据需要涉及哪些工作?
|
||||
|
||||
关于服务器故障,保证弹性的常规方法是多节点服务以及 [备份机制][4]。但如果你是为客户构建应用程序,则对数据丢失的敏感性要高得多。*偶尔的*备份并不能完全解决这一问题。
|
||||
|
||||
Apache Druid 的核心架构内置了该问题的解决方案,本质是一种强大而简单的弹性方法,旨在保证承受任何变故都不会丢失数据(即使是刚刚发生的事件)。
|
||||
|
||||
Druid 基于对象存储中共享数据的自动、多级复制实现高可用性(HA)和持久性。它实现了用户期望的 HA 特性以及持续备份机制,即使整个集群出现问题,也可以自动保护和恢复数据库的最新状态。
|
||||
|
||||
### 多用户
|
||||
|
||||
一个好的应用应该同时兼备大用户量和“引人入胜”的体验,因此为高并发构建后端非常重要。你肯定不想看到因为应用挂掉而让客户沮丧。内部报告的架构不必考虑这点,因为并发用户数量要小得多且有限。所以现实是,用于内部报告的数据库可能并不适合高并发应用程序。
|
||||
|
||||
为高并发构建数据库主要在于取得 CPU 使用率、可伸缩性和成本之间的平衡点。解决并发问题的通常做法是投入更多硬件成本。逻辑上说,只要增加 CPU 的数量,就能够同时进行更多的查询操作。虽然事实确实如此,但成本的增加是不可忽视的。
|
||||
|
||||
更好的方法还是使用像 Apache Druid 这样的数据库,它具有优化的存储和查询引擎,可以降低 CPU 使用率。我们强调的关键词是“优化”。数据库不应该读取它不需要的数据。Apache Druid 可以让基础设施在同一时间跨度内为更多查询操作提供服务。
|
||||
|
||||
节省成本是开发人员使用 Apache Druid 构建外部分析应用程序的一个重要原因。Apache Druid 具有高度优化的数据格式,结合了从搜索引擎世界借鉴来的多级索引以及数据缩减算法,可以最大限度地减少所需的处理量。
|
||||
|
||||
最终表现就是 Apache Druid 提供了其他数据库不可比拟的处理效率。它可以支持每秒数十到数千跨度的 TB 甚至 PB 级别的查询。
|
||||
|
||||
### 着眼当下,预见未来
|
||||
|
||||
分析应用程序对于用户而言至关重要,所以要构建正确的数据架构。
|
||||
|
||||
你肯定不想一开始就选择了一个错误的数据库,然后在后续扩展时面对诸多令人头疼的问题。幸运的是,Apache Druid 可以从小规模开始,并在之后轻松扩展以支持任何可以想象的应用程序。Apache Druid 有 [优秀的官方文档][5],当然它是开源的,所以不妨尝试一下并,快速上手吧。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/4/apache-druid-open-source-analytics
|
||||
|
||||
作者:[David Wang][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[unigeorge](https://github.com/unigeorge)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/davidwang
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/metrics_data_dashboard_system_computer_analytics.png
|
||||
[2]: https://opensource.com/downloads/mariadb-mysql-cheat-sheet
|
||||
[3]: https://druid.apache.org/
|
||||
[4]: https://opensource.com/article/19/3/backup-solutions
|
||||
[5]: https://druid.apache.org/docs/latest/design/
|
@ -3,60 +3,76 @@
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lkxed"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14595-1.html"
|
||||
|
||||
上手体验 GNOME 为 Linux 用户带来的新终端
|
||||
GNOME 新终端程序尝鲜
|
||||
======
|
||||
|
||||
几天前,我分享了我 [对新 GNOME 文本编辑器的体验][1],它是原编辑器 Gedit 的替代品。
|
||||
|
||||
但它并不是唯一的应用程序替代品。GNOME 42 还有一个新的终端,叫做 [<ruby>控制台<rt>Console</rt></ruby>][2]。
|
||||
但它并不是唯一的应用程序替代品。GNOME 42 还有一个新的终端,叫做 <ruby>[控制台][2]<rt>Console</rt></ruby>。
|
||||
|
||||
让我来分享一下 GNOME 提供的这个新终端的新功能,以及它的使用体验吧!
|
||||
|
||||
### Console:GNOME 的新终端模拟器
|
||||
### 控制台:GNOME 的新终端模拟器
|
||||
|
||||
这个新应用程序的目标是提供一个“简单的用户友好的终端模拟器”。它确实“简单”,因为它没有提供以往 GNOME 终端下用户习惯的许多功能。
|
||||
这个新应用程序的目标是提供一个“简单的、用户友好的终端模拟器”。它确实“简单”,因为它没有提供以往 GNOME 终端下用户习惯的许多功能。
|
||||
|
||||
后面我会继续谈这个话题。让我们先看看 GNOME 控制台的新功能。
|
||||
|
||||
#### 桌面通知
|
||||
|
||||
Ubuntu 的 GNOME 终端从来没有这个功能,不过我在 elementary 和 Fedora 等发行版中看到过。
|
||||
Ubuntu 上的 GNOME 终端从来没有这个功能,不过我在 elementary 和 Fedora 等发行版中看到过。
|
||||
|
||||
这是一个很方便的功能,当一个长期运行的命令执行完毕时,终端会发送一个桌面通知。
|
||||
|
||||
![GNOME 控制台的通知][3]
|
||||
|
||||
如果你在命令运行的同时,需要做其他事情,那么得到命令完成的通知有助于你保持工作效率。
|
||||
如果你在命令正在运行的同时,需要做其他事情,那么得到命令完成的通知有助于你保持工作效率。
|
||||
|
||||
#### 进行 root 操作时改变窗口颜色
|
||||
#### 进行 root 和 SSH 操作时改变窗口颜色
|
||||
|
||||
这很可能是我在其他终端程序中没有见过的独特功能。
|
||||
|
||||
当你使用带有 sudo 或 [切换到根用户][4] 的命令时,应用程序窗口会变成红色。
|
||||
当你用 `sudo` 运行命令或 [切换到 root 用户][4] 时,应用程序窗口会变成红色。
|
||||
|
||||
![GNOME 控制台在使用 sudo 或 root 用户时变成红色][5]
|
||||
|
||||
我想它的目的是警告用户他们正在使用高级权限,因此在运行命令时要小心。
|
||||
|
||||
同样,如果你使用 SSH 连接到一个远程服务器,终端应用程序窗口的颜色会变成紫色。
|
||||
|
||||
![GNOME 控制台在 SSH 连接时变成紫色][5a]
|
||||
|
||||
这也是提醒用户命令正在远程 Linux 机器上运行,而不是在本地机器上运行的好方法。
|
||||
|
||||
#### 主题
|
||||
|
||||
遵循新的设计准则,控制台提供了三种主题:浅色、深色和跟随系统。
|
||||
|
||||
![GNOME 控制台主题][6]
|
||||
|
||||
控制台默认使用系统主题,它根据你的操作系统主题而改变中终端配色。如果你不想改变系统主题,你可以使用控制台的浅色/深色选项。
|
||||
控制台默认使用系统主题,它根据你的操作系统的深浅主题而改变终端配色。你也可以单独使用控制台的浅色/深色主题,而不用改变系统主题。
|
||||
|
||||
关于主题的内容差不多就这些。你可以进行的 [终端定制][7] 并不多。
|
||||
|
||||
### 关闭终端窗口时更好的警告
|
||||
|
||||
当你试图关闭一个仍在运行的命令时,老的 GNOME 终端也会显示一个警告。
|
||||
|
||||
![旧版 GNOME 终端中的警告][7a]
|
||||
|
||||
这个警告在新的 GNOME 控制台中稍好一些,因为它也会显示正在运行的命令。
|
||||
|
||||
![新版 GNOME 控制台中的警告][7b]
|
||||
|
||||
#### 透明界面
|
||||
|
||||
GNOME 控制台默认有一个透明界面。在正常模式下,你可以透过它看到一点背景。
|
||||
|
||||
例如,你可以从背景程序中看到一些模糊的文字。
|
||||
例如,你可以看到背景程序中的一些模糊的文字。
|
||||
|
||||
![GNOME 控制台的透明界面][8]
|
||||
|
||||
@ -80,19 +96,19 @@ GNOME 控制台默认有一个透明界面。在正常模式下,你可以透
|
||||
|
||||
### 在 Ubuntu 22.04 上安装 GNOME 控制台
|
||||
|
||||
如果你的发行版使用了未经修改的 GNOME 42,那么它应该默认提供了新终端。
|
||||
如果你的发行版使用了原版 GNOME 42,那么它应该默认提供了新终端。
|
||||
|
||||
尽管 Ubuntu 22.04 使用的是 GNOME 42,但它仍然使用旧的 GNOME 终端。不过,你可以使用下面的命令来安装新的控制台。
|
||||
|
||||
```shell
|
||||
```
|
||||
sudo apt install gnome-console
|
||||
```
|
||||
|
||||
### 总结
|
||||
|
||||
你可能会想,既然我们已经有了一个更好的、功能更强的 GNOME 终端,为什么还要开发一个新的控制台呢?这是因为 GNOME 有了新的设计指南。改造这些应用程序的旧代码库太复杂了,可能也不不大划算,从头开始写反而会更容易,因此你会看到更多的“新的” GNOME 应用程序,如控制台和文本编辑器。
|
||||
你可能会想,既然我们已经有了一个更好的、功能更强的 GNOME 终端,为什么还要开发一个新的控制台呢?这是因为 GNOME 有了新的设计指南。改造这些应用程序的旧代码库太复杂了,可能也不大划算,从头开始写反而会更容易,因此你会看到更多的“新的” GNOME 应用程序,如控制台和文本编辑器。
|
||||
|
||||
由于这个新的应用程序的目标是让事情更简单,因此它没有提供很多功能。你不能定制它,改变颜色、字体等。由于不支持定制,所以也不需要配
|
||||
由于这个新的应用程序的目标是让事情更简单,因此它没有提供很多功能。你不能定制它,改变颜色、字体等。由于不支持定制,所以也不需要配置文件。
|
||||
|
||||
对于很少使用终端的人来说,控制台已经够用了。不过,我认为应该增加在输入密码时显示星号的功能。其他 [面向初学者的发行版][12],如 Mint,就使用了这个功能,从而避免对 Linux 新手用户造成困扰。
|
||||
|
||||
@ -105,7 +121,7 @@ via: https://itsfoss.com/gnome-console/
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lkxed](https://github.com/lkxed)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
@ -116,8 +132,11 @@ via: https://itsfoss.com/gnome-console/
|
||||
[3]: https://itsfoss.com/wp-content/uploads/2022/04/notification-from-gnome-console.png
|
||||
[4]: https://itsfoss.com/root-user-ubuntu/
|
||||
[5]: https://itsfoss.com/wp-content/uploads/2022/04/GNOME-Console-turns-red-when-using-sudo-or-root-800x442.webp
|
||||
[5a]: https://itsfoss.com/wp-content/uploads/2022/05/gnome-console-color-change-ssh.png
|
||||
[6]: https://itsfoss.com/wp-content/uploads/2022/04/themes-gnome-console.png
|
||||
[7]: https://itsfoss.com/customize-linux-terminal/
|
||||
[7a]: https://itsfoss.com/wp-content/uploads/2022/05/warning-in-old-gnome-terminal.png
|
||||
[7b]: https://itsfoss.com/wp-content/uploads/2022/05/warning-in-new-gnome-console.png
|
||||
[8]: https://itsfoss.com/wp-content/uploads/2022/04/transparent-gnome-console.png
|
||||
[9]: https://itsfoss.com/wp-content/uploads/2022/04/tabs-GNOME-Console.png
|
||||
[10]: https://itsfoss.com/wp-content/uploads/2022/04/search-GNOME-Console.png
|
@ -0,0 +1,98 @@
|
||||
[#]: subject: "How to Install Classic GNOME Flashback in Ubuntu 22.04 LTS"
|
||||
[#]: via: "https://www.debugpoint.com/2022/05/gnome-classic-ubuntu-22-04/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "turbokernel"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14627-1.html"
|
||||
|
||||
Ubuntu 22.04 LTS 中安装经典 GNOME Flashback 指南
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/23/151318xi8c3qipphg8xz0i.jpg)
|
||||
|
||||
> 关于如何在最新的 UBUNTU 22.04 LTS 中安装旧的经典 GNOME Flashback 的快速指南。
|
||||
|
||||
[GNOME Flashback][1](又名 classic GNOME)是旧 GNOME 3 shell 的一个分支,它使用早期 GNOME 2 技术的布局和原则。它的速度快如闪电,并且在设计上非常轻量级。因此,它非常适合几十年前的老旧硬件。
|
||||
|
||||
随着带有现代 GNOME 42 的 [Ubuntu 22.04 LTS][2] 的发布,有必要寻找轻量级的桌面环境选项。
|
||||
|
||||
此外,GNOME Flashback 很容易安装在现代 Ubuntu Linux 中,你仍然可以享受 Ubuntu 性能而不必关心 GNOME 42、GTK4、libadwaita 之类的东西。
|
||||
|
||||
### 在 Ubuntu 22.04 LTS 中下载并安装经典 GNOME Flashback
|
||||
|
||||
按照以下步骤在 Ubuntu 22.04 LTS 中下载并安装经典 GNOME Flashback(Metacity)。
|
||||
|
||||
在 Ubuntu 22.04 LTS 中打开终端(CTRL+ALT+T)并运行以下命令。安装大小约为 61MB。
|
||||
|
||||
```
|
||||
sudo apt update
|
||||
sudo apt install gnome-session-flashback
|
||||
```
|
||||
|
||||
![Install GNOME Classic Flashback Metacity in Ubuntu 22.04 LTS][3]
|
||||
|
||||
最后,安装完成后,退出。重新登录时,在登录选项中使用经典的 GNOME Flashback(Metacity) 。
|
||||
|
||||
![Choose GNOME Classic while logging in][3a]
|
||||
|
||||
### 经典 GNOME Flashback 的特点
|
||||
|
||||
首先,当你登录时,你将体验到传统的 GNOME 技术,它已被证明具有良好的生产力,并且比今天的技术快得多。
|
||||
|
||||
在顶部有旧版的面板,左侧是应用菜单,而系统托盘位于桌面的右上方。应用程序菜单显示所有已安装的应用和软件快捷方式,你可以在工作流程中轻松浏览。
|
||||
|
||||
此外,在右侧部分,系统托盘具有默认小部件,例如网络、音量控制、日期和时间以及关机菜单。
|
||||
|
||||
![Classic GNOME Flashback Metacity in Ubuntu 22.04 LTS][3b]
|
||||
|
||||
底部面板包含打开的窗口和工作区切换器的应用列表。默认情况下,它为你提供四个工作区供你使用。
|
||||
|
||||
此外,你可以随时更改顶部面板的设置以自动隐藏、调整面板大小和背景颜色。
|
||||
|
||||
除此之外,你可以通过 `ALT + 右键点击` 顶部面板添加任意数量的旧版小程序。
|
||||
|
||||
![Panel Context Menu][3c]
|
||||
|
||||
![Add to panel widgets][3d]
|
||||
|
||||
### 经典 GNOME 的性能
|
||||
|
||||
首先,磁盘空间占用极小,仅安装 61 MB。我的测试使用了大约 28% 的内存,其中大部分被其他进程占用。猜猜是谁?是的,是 snap-store(又名 Ubuntu 软件)。
|
||||
|
||||
因此,总体而言,它非常轻巧,内存(仅 28 MB)和 CPU(0.1%)占用空间非常小。
|
||||
|
||||
![Performance of GNOME Classic in Ubuntu 22.04][3e]
|
||||
|
||||
此外,假设你将其与同样使用相同技术的 Ubuntu MATE 进行比较。在这种情况下,它比 MATE 更轻量,因为你不需要任何额外的 MATE 应用及其用于通知、主题和其他附加资源的软件包。
|
||||
|
||||
### 结束语
|
||||
|
||||
我希望本指南在你决定在 Ubuntu 22.04 LTS Jammy Jellyfish 中安装经典 GNOME 之前帮助你获得必要的信息。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/2022/05/gnome-classic-ubuntu-22-04/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[turbokernel](https://github.com/turbokernel)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://wiki.archlinux.org/index.php/GNOME/Flashback
|
||||
[2]: https://www.debugpoint.com/2022/01/ubuntu-22-04-lts/
|
||||
[3]: https://www.debugpoint.com/wp-content/uploads/2022/05/Install-GNOME-Classic-Flashback-Metacity-in-Ubuntu-22.04-LTS.jpg
|
||||
[3a]: https://www.debugpoint.com/wp-content/uploads/2022/05/Choose-GNOME-Classic-while-loggin-in.jpg
|
||||
[3b]: https://www.debugpoint.com/wp-content/uploads/2022/05/Classic-GNOME-Flashback-Metacity-in-Ubuntu-22.04-LTS.jpg
|
||||
[3c]: https://www.debugpoint.com/wp-content/uploads/2020/04/Panel-Context-Menu.png
|
||||
[3d]: https://www.debugpoint.com/wp-content/uploads/2020/04/Add-to-panel-widgets.png
|
||||
[3e]: https://www.debugpoint.com/wp-content/uploads/2022/05/Performance-of-GNOME-Classic-in-Ubuntu-22.04.jpg
|
||||
[4]: https://t.me/debugpoint
|
||||
[5]: https://twitter.com/DebugPoint
|
||||
[6]: https://www.youtube.com/c/debugpoint?sub_confirmation=1
|
||||
[7]: https://facebook.com/DebugPoint
|
@ -3,40 +3,40 @@
|
||||
[#]: author: "Ray Paik https://opensource.com/users/rpaik"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "PeterPan0106"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14590-1.html"
|
||||
|
||||
如何使社区认可更加包容
|
||||
======
|
||||
抛开具体的工作量,我们认为所有的贡献都弥足珍贵。当所有社区贡献者都能获得家庭般的赞赏时,他们会更倾向于继续为社区添砖加瓦。
|
||||
|
||||
![Global citizens unite to improve housing with open design and development][1]
|
||||
(图源: Opensource.com)
|
||||
> 抛开具体的工作量,我们认为所有的贡献都弥足珍贵。当所有社区贡献者都能获得家庭般的赞赏时,他们会更倾向于继续为社区添砖加瓦。
|
||||
|
||||
给予一个优秀的工作足够的认同和赞赏是我作为一个社区管理员最喜欢的事。我不但有机会能够对贡献者表示感激,同时还能为社区设立一个优秀的榜样。认同和赞赏可以是为了庆祝一个成就,例如有人帮助其他成员加入社区、减少技术债务或者贡献了激动人心的新功能。
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/13/234756gi7q42f2mgz5mg44.png)
|
||||
|
||||
但是,用来确定贡献量的规则可能会有难以预料的后果。例如某些社区管理员利用如下图所示的图表来表彰贡献,过度地强调了pull requests以及对代码库的贡献量。
|
||||
给予一个优秀的工作足够的认同和赞赏是我作为一个社区管理员最喜欢做的事。我不但有机会能够对贡献者表示感激,同时还能为社区设立一个优秀的榜样。认同和赞赏可以是为了庆祝一个成就,例如有人帮助其他成员加入社区、减少技术债务或者贡献了激动人心的新功能。
|
||||
|
||||
但是,用来确定贡献量的规则可能会有难以预料的后果。例如某些社区管理员利用如下图所示的图表来表彰贡献,过度地强调了拉取请求(PR)以及对代码库的贡献量。
|
||||
|
||||
![A bar graph ranking 15 contributors according the the number of PRs merged in a year, ranging from 250 at the top to 50 at the bottom.][2]
|
||||
(图源: Ray Paik, CC BY-SA 4.0)
|
||||
|
||||
![A bar graph ranking 10 contributing organizations by number of contributions, ranging from more than 15 to less than 5][3]
|
||||
(图源: Ray Paik, CC BY-SA 4.0)
|
||||
|
||||
使用这样的方法进行表彰会产生三个问题。首先,这样过度聚焦了对代码库的贡献。早年间,开源项目主要吸引开发者参与,所以自然而然许多贡献是围绕代码的。现在,越来越多的非开发者正在积极参与社区项目(例如通过用户组、会议和用户本身生产的内容),他们的大多数贡献在代码库以外的地方。这些贡献将不会出现在诸如*年度合并PR数量*这样的表格上。
|
||||
使用这样的方法进行表彰会产生三个问题。
|
||||
|
||||
其次,过度聚焦贡献指标(指那些易于用数字统计的),最终会演变为更大的数量甚至超越了更好的质量甚至是影响力。在上图的*贡献组织排行榜*中,大型组织因为具有更多的可用人力,相对于小型组织就会有更为显著的优势。通过对大型组织在数量上的表彰将可能导致小型组织感到权利被剥夺了。
|
||||
首先,这样过度关注了对代码库的贡献。早年间,开源项目主要吸引开发者参与,所以自然而然许多贡献是围绕代码的。现在,越来越多的非开发者正在积极参与社区项目(例如通过用户组、会议和用户生产的内容),他们的大多数贡献在代码库以外的地方。这些贡献将不会出现在诸如 *年度合并 PR 数量* 这样的表格上。
|
||||
|
||||
最终,尽管本意并非如此,但许多人都会把这些数据看做对个人或组织影响力的排名。
|
||||
其次,过度关注贡献指标(指那些易于用数字统计的),最终会演变为奖励数量而不是质量,甚至影响力。在上图的 *贡献组织排行榜* 中,大型组织因为具有更多的可用人力,相对于小型组织就会有更为显著的优势。通过对大型组织在数量上的表彰将可能导致小型组织的人感到权利被剥夺了。
|
||||
|
||||
最后,尽管本意并非如此,但许多人都会把这些数据看做对个人或组织影响力的排名。
|
||||
|
||||
基于此,我们最好避免仅仅通过指标数量来表彰对社区的贡献。
|
||||
|
||||
### 令社区表彰更有意义
|
||||
|
||||
如何让社区表彰更为包容并且能够覆盖不同的贡献形式呢?一些通信频道例如Discord、IRC、mailing list和Slack可以很好的表明一个成员的活跃度及其感兴趣的领域。例如每当我看到一些人热衷于解答问题或者帮助新用户时,我会十分开心。这些贡献并不会出现在社区的数据板上,但是让这些贡献得到应有的认同和感谢并广为人知是十分重要的。
|
||||
如何让社区表彰更为包容并且能够覆盖不同的贡献形式呢?诸如 Discord、IRC、邮件列表和Slack 等交流渠道可以很好的表明一个成员的活跃度及其感兴趣的领域。例如每当我看到一些人热衷于解答问题或者帮助新用户时,我会十分开心。这些贡献并不会出现在社区的数据板上,但是让这些贡献得到应有的认同和感谢并广为人知是十分重要的。
|
||||
|
||||
社区数据板显然是开源社区重要的工具。但对于花费在建设数据板的时间上,我锱铢必较。迟早你会发现,不是所有的东西都可以有清晰的标准进行度量,即便你能够想出规则量化一件事,你也依然会发现这些规则具有局限性。
|
||||
社区数据板显然是开源社区重要的工具。但是我提醒大家不要花费太多时间在建设数据板上。迟早你会发现,不是所有的东西都可以有清晰的标准进行度量,即便你能够想出规则量化一件事,你也依然会发现这些规则具有局限性。
|
||||
|
||||
为了获取更多的关于贡献的信息,我经常会安排社区成员茶话会。这些对话经常能够告诉我他们做出贡献的原因、有多少工作量以及谁同时也参与进来了等等。
|
||||
|
||||
@ -48,7 +48,7 @@
|
||||
|
||||
让其他成员参与到认可的过程中也是一个很好的主意。一旦社区达到了一定的规模,便很难事无巨细地知晓一切细节。如果引入一个成员提名机制则会很好地让大家注意到优秀的贡献。如果你的社区拥有十分正式的奖项,例如在年度会议或聚会上颁发的奖项,请让社区成员参与提名和投票。这不仅提供了成员参与进来的平台,也令这些来自成员投票的奖项更有意义。
|
||||
|
||||
最后给予认同和感谢也是一个认识成员并加深了解的重要机会。有时候颁奖仿佛在进行交易:“你做了X,所以我们给你颁发了Y”。多在介绍成员上花些时间,将令成员感到更受重视并加强归属感。
|
||||
最后给予认同和感谢也是一个认识成员并加深了解的重要机会。有时候颁奖仿佛在进行交易:“你做了某件事,所以我们给你颁发了某个奖励”。多在介绍成员上花些时间,将令成员感到更受重视并加强归属感。
|
||||
|
||||
### 社区认可令社区更为健康
|
||||
|
||||
@ -61,7 +61,7 @@ via: https://opensource.com/article/22/5/inclusive-community-recognition
|
||||
作者:[Ray Paik][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[PeterPan0106](https://github.com/PeterPan0106)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,87 @@
|
||||
[#]: subject: "Experiment with containers and pods on your own computer"
|
||||
[#]: via: "https://opensource.com/article/22/5/containers-pods-101-ebook"
|
||||
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14591-1.html"
|
||||
|
||||
在自己的电脑上实验容器和荚
|
||||
======
|
||||
|
||||
> 通过这篇新的可下载指南开始探索容器技术的要领。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/14/102808n8u3pkff174431v7.jpg)
|
||||
|
||||
在电视剧 《<ruby>太空堡垒卡拉狄加<rt>Battlestar Galactica</rt></ruby>》中,这艘名副其实的巨型飞船其实并没有做什么。它是船员们坚定的庇护所,是战略和协调的中心联络点,也是资源管理的安全场所。而 <ruby>卡布里安毒蛇号<rt>Caprican Vipers</rt></ruby> 这种单人的独立太空船,出去对付邪恶的<ruby>赛昂人<rt>Cylons</rt></ruby>和其他太空中的危险。他们也从不只派一两艘毒蛇号出去。他们派了很多。这许许多多的冗余的飞船具有基本相同的能力和目的,但由于它们非常灵活和数量众多,它们总是能够处理每个星期都在威胁战星的任何问题。
|
||||
|
||||
如果你认为你感到这像是一个正在发展中的比喻,那么你是对的。现代的“云”大而无当,是分布在很远距离的大量基础设施的集合体。它具有强大的能力,但如果你将其视为普通计算机,就会浪费了它的大部分能力。当你想要处理来自数百万个输入源的大量数据时,把你的解决方案(无论它是采用应用、网站、数据库、服务器还是其他形式)打包起来,并发送该解决方案的微小镜像来处理数据集群,实际上是更有效的。当然,这些都是 “<ruby>容器<rt>container</rt></ruby>”,它们是云的劳动力。它们是你发送来处理服务请求的小型解决方案工厂,并且由于你可以根据任何给定时间传入的请求生成所需要的数量,因此理论上它们是取之不尽的。
|
||||
|
||||
### 在家里使用容器
|
||||
|
||||
如果你没有大量的传入请求需要处理,你可能会想知道容器给你带来什么好处。不过,在个人电脑上使用容器确实有其用途。
|
||||
|
||||
#### 容器作为虚拟环境
|
||||
|
||||
通过 Podman、LXC 和 Docker 等工具,你可以像以往运行虚拟机一样运行容器。不过,与虚拟机不同,容器没有因模拟固件和硬件而产生的开销。
|
||||
|
||||
你可以从公共仓库下载容器镜像,启动一个最小化的 Linux 环境,并将其作为命令或开发的测试场所。例如,假设你想试试你在 Slackware Linux 上构建的一个应用。首先,在仓库中搜索一个合适的镜像:
|
||||
|
||||
```
|
||||
$ podman search slackware
|
||||
```
|
||||
|
||||
然后选择一个镜像,作为你的容器的基础:
|
||||
|
||||
```
|
||||
$ podman run -it --name slackware vbatts/slackware
|
||||
sh-4.3# grep -i ^NAME\= /etc/os-release
|
||||
NAME=Slackware
|
||||
```
|
||||
|
||||
### 在工作中使用容器
|
||||
|
||||
当然,容器不只是个精简的虚拟机。它们可以是针对为非常具体的需求提供的特定解决方案。如果你不熟悉容器,那么新系统管理员最常见的入门仪式之一可能会有所帮助:启动你的第一个 Web 服务器,但是在容器中。
|
||||
|
||||
首先,获取一个镜像。你可以使用 `podman search` 命令来搜索你喜欢的发行版,或者直接搜索你喜欢的 httpd 服务器。当使用容器时,我倾向于信任我在裸机上使用的相同发行版。
|
||||
|
||||
当你你找到一个镜像作为你的容器的基础,你就可以运行你的镜像。然而,正如这个术语所暗示的,容器是*封起来的*,所以如果你只是启动一个容器,你将无法访问标准的 HTTP 端口。你可以使用 `-p` 选项将一个容器端口映射到一个标准的网络端口:
|
||||
|
||||
```
|
||||
$ podman run -it -p 8080:80 docker.io/fedora/apache:latest
|
||||
```
|
||||
|
||||
现在看看你本地主机上的 8080 端口:
|
||||
|
||||
```
|
||||
$ curl localhost:8080
|
||||
Apache
|
||||
```
|
||||
|
||||
成功了。
|
||||
|
||||
### 了解更多
|
||||
|
||||
容器拥有比模仿虚拟机更多的潜力。你可以将它们分组在 “<ruby>荚<rt>pod<rt></ruby>” 中,构建复杂应用的自动部署,启动冗余服务以满足高需求等等。如果你刚刚开始使用容器,你可以 [下载我们最新的电子书][2] 来学习该技术,甚至学习创建一个 “<ruby>荚<rt>pod<rt></ruby>”,以便你可以运行 WordPress 和数据库。
|
||||
|
||||
> **[下载我们最新的电子书][2]**
|
||||
|
||||
(LCTT 译注:容器环境中使用的 “Pod” 一词,我以前根据容器相关术语多用航海领域名词比喻来将其译做“吊舱”,但也有同学表示了不同意见。根据 Kubernetes [文档][3],这个词来自对<ruby>鲸鱼荚<rt>pod of whales</rt></ruby>、<ruby>豌豆荚<rt>pea pod</rt></ruby>的比喻,所以我觉得采用“荚”的翻译比较合适。—— wxy)
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/5/containers-pods-101-ebook
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/seth
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/tips_map_guide_ebook_help_troubleshooting_lightbulb_520.png
|
||||
[2]: https://opensource.com/downloads/containers-pods-101-ebook
|
||||
[3]: https://kubernetes.io/docs/concepts/workloads/pods/#:~:text=A%20Pod%20\(as%20in%20a,run%20in%20a%20shared%20context.
|
@ -0,0 +1,100 @@
|
||||
[#]: subject: "Xebian – A Blend of Debian and Goodness of Xfce [Review]"
|
||||
[#]: via: "https://www.debugpoint.com/2022/05/xebian-review-2022/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14602-1.html"
|
||||
|
||||
Xebian:Debian 与 Xfce 的完美结合
|
||||
======
|
||||
|
||||
> 这是一篇对漂亮而时尚的 Xebian Linux 发行版的快速评测。
|
||||
|
||||
Xebian 是一个基于 Xfce 桌面环境的 Linux 发行版,基于 Debian 不稳定分支(sid)。这个 Linux 发行版提供了一个带有基本的 Xfce 桌面的 Debian,而无需更改配置和附加软件包。因此,你不用在安装 Debian 和 Xfce 上花费太多时间就可以获得通常的开箱即用体验。
|
||||
|
||||
那么,如果你想尝试一下,这是对 Xebian 的快速评测。
|
||||
|
||||
![](https://www.debugpoint.com/wp-content/uploads/2022/05/Xebian-Desktop-with-Xfce.jpg)
|
||||
|
||||
### Xebian 评测
|
||||
|
||||
#### 安装
|
||||
|
||||
考虑到林林总总的 ISO(迷你、自由、非自由等等),Debian 安装可能会有点复杂。毕竟,它是一个真正的“通用操作系统”。但是对于 Xebian,就轻松多了,因为它只有一个提供了 Debian sid 和 Xfce 的 64 位 ISO 文件。Xebian 使用 Debian 原生的安装程序,在你的物理系统或虚拟机中安装此发行版都相当简单。
|
||||
|
||||
在我的测试过程中,安装很顺利,没有报告任何问题。安装大约需要 4 分钟。
|
||||
|
||||
#### 外观和感觉
|
||||
|
||||
安装后,当你首次启动系统时,你会看到带有 Xebian 默认壁纸的漂亮登录页面。这个登录屏幕是标准的默认 Xfce 桌面登录页面。
|
||||
|
||||
![Xebian Logn Screen][1]
|
||||
|
||||
首先,该桌面非常轻量,有着 Xfce 的干净外观。Xebian 就是一个在 Debian 上提供了完整 Xfce 桌面的 Linux 发行版。因此,唯一的区别是看起来不错的默认壁纸,以及默认的 Numix 主题(深色)。那些喜欢更传统外观的人也可以使用 Adwaita 和 Gerybird 主题。
|
||||
|
||||
其次,顶部面板右侧有 “<ruby>鼠须菜单<rt>Whisker Menu</rt></ruby>” 和标准的系统托盘,带有音量控制、电池指示、网络/Wi-Fi 和日期/时间。
|
||||
|
||||
#### 应用
|
||||
|
||||
Xebian 打包了所有 Xfce 原生应用,而没有添加任何额外内容。安装了它,你就应该拥有了一个稳定的工作桌面,并预装了以下应用程序:
|
||||
|
||||
* Thunar 文件管理器
|
||||
* Ristretto 图像查看器
|
||||
* Mousepad 文本编辑器
|
||||
* Catfish 文件搜索
|
||||
* XFCE 终端
|
||||
* Firefox 浏览器
|
||||
* Synaptic 包管理器
|
||||
* GParted 分区程序
|
||||
* 系统设置
|
||||
|
||||
除此之外,如果你需要任何其他应用,你可以使用 “<ruby>新立得<rt>Synaptic</rt></ruby>” 包管理器轻松安装它们。使用内置的 “<ruby>软件及软件源<rt>Software and Sources</rt></ruby>” 应用可以轻松调整软件源。
|
||||
|
||||
[Xfce 4.16][2] 是当前的稳定正式版本,并一同提供了其原生应用。而 Xfce 4.18 距离最终版本还很遥远。
|
||||
|
||||
该发行版的核心基于 Debian 不稳定分支 “sid”,在撰写本文时它正处于 Debian 12 “bookworm” 的发布路径上。它基于最新的 [Linux 内核 5.17][3] 进行滚动发布。
|
||||
|
||||
此外,如果你需要一个常规的图像编辑器、图形软件和办公套件(例如 LibreOffice),那么你可以手动安装它们。它们不是 ISO 文件的一部分。
|
||||
|
||||
现在,让我们来看看性能。
|
||||
|
||||
#### Xebian 的性能
|
||||
|
||||
Xebian 是轻量级的,非常适合旧硬件,这要归功于 Debian。我分两个阶段测试了其性能。
|
||||
|
||||
在让系统闲置一段时间后的理想阶段,消耗了大约 710 MB 内存,而 CPU 平均为 2%。大多数空闲状态资源被 Xfce4-desktop 和 Xfce 窗口管理器消耗。
|
||||
|
||||
其次,我在重度使用阶段对其进行了测试。我使用文件管理器、文本编辑器、终端和 Firefox 浏览器的一个实例作为工作负载尝试了 Xebian。在此工作负载下,Xebian 平均消耗 1.2GB 内存和 2% 到 3% 的 CPU,具体取决于各自的应用活动。而且,Firefox 明显消耗了大部分内存和 CPU,其次是 Xfce 窗口管理器的内存消耗增加了近 50%。
|
||||
|
||||
总的来说,我认为它是稳定的,应该可以在至少 4 GB 内存的中档硬件中正常工作。
|
||||
|
||||
### 结束语
|
||||
|
||||
基于 Debian 不稳定分支的 [Linux 发行版][4] 很少。如果你正在寻找 Xfce 和 Debian sid 的特定组合,那么 Xebian 是合适的,因为你从 Debian 获得了一个很可靠的滚动版本,并内置了 Xfce。
|
||||
|
||||
虽然它说是“不稳定”的,但根据我的经验,如果你每周保持系统更新,Debian “不稳定” 分支会很好地工作。
|
||||
|
||||
最后,如果你想尝试此发行版,请访问官方网站并
|
||||
|
||||
> **[下载 ISO 文件][5]**
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/2022/05/xebian-review-2022/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.debugpoint.com/wp-content/uploads/2022/05/Xebian-Logn-Screen-1024x578.jpg
|
||||
[2]: https://www.debugpoint.com/2021/02/xfce-4-16-review/
|
||||
[3]: https://www.debugpoint.com/2022/03/linux-kernel-5-17/
|
||||
[4]: https://www.debugpoint.com/category/distributions
|
||||
[5]: https://xebian.org/download/
|
@ -3,57 +3,57 @@
|
||||
[#]: author: "Kevin Sonney https://opensource.com/users/ksonney"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14598-1.html"
|
||||
|
||||
我最喜欢的使用 crontab 的开源工具
|
||||
管理 crontab 的开源工具
|
||||
======
|
||||
crontab-ui 是一个用 Node.js 编写的 Web 前端,帮助管理 crontab 文件。
|
||||
|
||||
![Woman using laptop concentrating][1]
|
||||
(图片提供:Mapbox Uncharted ERG,[CC-BY 3.0 US][2])
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/16/100309tw6wgx3sss36wl6r.jpg)
|
||||
|
||||
> crontab-ui 是一个用 Node.js 编写的 Web 前端,帮助管理 crontab 文件。
|
||||
|
||||
*自动化是目前的一个热门话题。在我作为网站可靠性工程师(SRE)的日常工作中,我的部分职责是将尽可能多的重复性任务自动化。但是,有多少人在我们的日常非工作生活中这样做呢?今年,我专注于将劳作自动化,以便我们可以专注于重要的事情。*
|
||||
|
||||
作为一个初出茅庐的系统管理员,我最早了解的东西之一是 “cron”。cron 被广泛用于做一些事情,如轮换日志、启动和停止服务、运行程序作业等等。它在几乎所有的 Unix 和 Linux 系统中都可用,而且是我认识的每个系统管理员用来帮助管理服务和服务器的东西。cron 可以自动运行任何控制台应用或脚本,这使得它非常、非常灵活。
|
||||
|
||||
![Image of a Crontab][3]
|
||||
(图片提供:Kevin Sonney,CC BY-SA 4.0)
|
||||
> LCTT 译注:CRON 是 “Command Run On” 的缩写,即在某个时间运行命令。
|
||||
|
||||
我已经用 cron 来获取电子邮件,运行过滤程序,确保服务正在运行,与 Habitica 等在线游戏互动等。
|
||||
![Image of a Crontab][3]
|
||||
|
||||
我用 cron 来获取电子邮件,运行过滤程序,确保服务正在运行,与 Habitica 等在线游戏互动等。
|
||||
|
||||
### 以传统方式使用 cron
|
||||
|
||||
要开始使用 cron,你可以简单地在命令行输入 `crontab -e`,为自己打开一个带有当前 `crontab`(或 “cron table”)文件的编辑器(如果你以 root 身份这样做,你会得到系统 crontab)。这是保存作业计划的地方,以及何时运行。David Both 已经写了[大量][4]关于该文件的格式和如何使用它的文章,所以我不打算在这里介绍。我要说的是,对于新用户来说,这可能有点吓人,而且设置时间有点痛苦。
|
||||
要开始使用 cron,你可以简单地在命令行输入 `crontab -e`,启动一个打开了当前 `crontab`(“cron table” 的缩写)文件的编辑器(如果你以 root 身份这样做,你访问的是系统 crontab)。这是保存作业计划的地方,记录了何时运行。David Both 已经写了 [大量][4] 关于该文件的格式和如何使用它的文章,所以我不打算在这里介绍。我要说的是,对于新用户来说,这可能有点吓人,而且设置时间有点痛苦。
|
||||
|
||||
### 介绍 crontab-ui
|
||||
|
||||
有一些奇妙的工具可以帮助解决这个问题。我最喜欢的是 [crontab-ui][5],这是一个用 Node.js 编写的 Web 前端,可以帮助管理 crontab 文件。为了安装和启动 `crontab-ui` 供个人使用,我使用了以下命令。
|
||||
|
||||
```
|
||||
# Make a backup
|
||||
# 做个备份
|
||||
crontab -l > $HOME/crontab-backup
|
||||
# Install Crontab UI
|
||||
# 安装 Crontab UI
|
||||
npm install -g crontab-ui
|
||||
# Make a local database directory
|
||||
# 创建本地数据库目录
|
||||
mkdir $HOME/crontab-ui
|
||||
# Start crontab-ui
|
||||
# 启动 crontab-ui
|
||||
CRON_DB_PATH=$HOME/crontab-ui crontab-ui
|
||||
```
|
||||
|
||||
完成这些后,只需将你的网络浏览器指向 `http://localhost:8000`,你就会得到 crontab-ui 的网络界面。要做的第一件事是点击 “Get from Crontab”,加载你可能有的任何现有作业。然后点击**备份**,这样你就可以回滚你所做的任何修改。
|
||||
完成这些后,只需将你的网页浏览器指向 `http://localhost:8000`,你就会看到 crontab-ui 的网页界面。要做的第一件事是点击 “<ruby>从 Crontab 获取<rt>Get from Crontab</rt></ruby>”,加载你可能有的任何现有作业。然后点击“<ruby>备份<rt>Backup</rt></ruby>”,这样你就可以回滚你所做的任何修改。
|
||||
|
||||
![Image of Crontab-UI][6]
|
||||
(图片提供:Kevin Sonney,CC BY-SA 4.0)
|
||||
|
||||
添加和编辑 cron 作业是非常简单的。添加一个名称,你想运行的完整命令,以及时间(使用 cron 语法),然后保存。另外,你还可以捕获日志,并设置将工作状态邮寄到你选择的电子邮箱。
|
||||
|
||||
完成后,点击 **Save to Crontab**。
|
||||
完成后,点击 “<ruby>保存到 Crontab<rt>Save to Crontab</rt></ruby>”。
|
||||
|
||||
我个人非常喜欢日志记录功能。有了 crontab-ui,你可以通过点击一个按钮来查看日志,这在排除故障时非常有用。
|
||||
我个人非常喜欢它的日志记录功能。有了 crontab-ui,你可以通过点击一个按钮来查看日志,这在排除故障时非常有用。
|
||||
|
||||
我推荐的一件事是不要一直运行 crontab-ui,至少不要公开运行。虽然它确实具有一些基本的身份验证功能,但它不应该暴露在你的本地机器之外。我不需要经常(现在)编辑我的 cron 作业,所以我可以按需启动和停止它。
|
||||
我建议不要一直运行 crontab-ui,至少不要公开运行。虽然它确实具有一些基本的身份验证功能,但它不应该暴露在你的本地机器之外。我不需要经常编辑我的 cron 作业,所以我可以按需启动和停止它。
|
||||
|
||||
下次你需要编辑你的 crontab 时,可以试试 crontab-ui!
|
||||
|
||||
@ -64,7 +64,7 @@ via: https://opensource.com/article/22/5/cron-crontab-ui
|
||||
作者:[Kevin Sonney][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,84 @@
|
||||
[#]: subject: "How open source leads the way for sustainable technology"
|
||||
[#]: via: "https://opensource.com/article/22/5/open-source-sustainable-technology"
|
||||
[#]: author: "Hannah Smith https://opensource.com/users/hanopcan"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "PeterPan0106"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14625-1.html"
|
||||
|
||||
开源为可持续发展技术提供新思路
|
||||
======
|
||||
|
||||
> 开源和社会对于更为稳定的技术演进的需求具有相同的目标,即实现一个更为可持续的未来。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/22/160753zekl2094033e4igr.jpg)
|
||||
|
||||
在可持续发展和环境问题上,目前正在发生明确的变化。关注地球的状况并为之做出努力已经成为主流思想。举个例子,看看基于气候的风险资本主义。<ruby>气候技术风险投资公司<rt>Climate Tech Venture Capital</rt></ruby>(CTVC)的气候资本名单在过去两年中增加了 [一倍多][2]。涌入的资本表明了人们对解决艰难的气候挑战的愿望和意愿。
|
||||
|
||||
人们想采取行动,这很好,我持相同态度!但我也看到了一个真正的风险:当人们急于采取行动并参与到其中时,他们可能会不知不觉地卷入洗绿运动中。
|
||||
|
||||
维基百科对 “<ruby>洗绿<rt>greenwashing</rt></ruby>” 的定义称其为 “一种营销策略,其中绿色公关和绿色营销被欺骗性地用来说服公众,使其相信一个组织的产品、目标和政策是环保的”。在我看来,洗绿既是有意为之,也是无意中发生的。外面有很多想有所作为的好人,但对复杂的环境系统或围绕可持续发展的问题的深度还不甚了解。
|
||||
|
||||
我们很容易落入这样的陷阱,即认为通过植树来抵消旅行或数据中心的排放等简单的购买行为会使一些东西变得更加绿色。虽然这些努力是值得提倡的,而且植树是改善可持续发展的一个可行的解决方案,但它们只是一个很好的开端,仍然需要进行更多的努力才能真正产生变革。
|
||||
|
||||
那么,一个人或一个社区可以做些什么来使数字技术真正地更加可持续?
|
||||
|
||||
“可持续性”对不同的人有不同的含义。我喜欢的最简短的定义来自 1987 年的《<ruby>布伦特兰报告<rt>Bruntland Report</rt></ruby>》,该报告将其概括为 “既能满足当代的需要,同时又不损及后代满足其需要的发展模式”。可持续发展的核心是优先考虑长期思维。
|
||||
|
||||
### 可持续发展不仅仅是保护环境
|
||||
|
||||
在可持续性的定义中,有三个相互关联的关键支柱:
|
||||
|
||||
1. 环境
|
||||
2. 经济 / 政策
|
||||
3. 社会
|
||||
|
||||
关于可持续发展的讨论越来越多地被气候危机所主导,这是有道理的。随着我们继续通过不可逆转的生态临界点,减少世界上较富裕国家的碳排放的需求变得越来越紧迫。但真正的可持续性是一套更全面的体系,正如三大支柱所展示的那样。
|
||||
|
||||
碳排放无疑是可持续性的一部分。许多人认为排放只是一个环境问题。只要从空气中移除更多的碳,一切都会好起来。但社会问题也是可持续性的一部分。谁会受到这些碳排放的影响?谁将承受我们气候变化带来的最大影响?谁因海平面上升而失去了家园,或因天气模式变化而失去了可靠的水源?这就是为什么你可能听说过 “气候正义就是社会正义” 这句话。
|
||||
|
||||
仅仅把减碳看作是可持续发展会令你的视野被限定在碳上。我经常认为,气候变化是社会在更大范围内错失可持续性的一个症状。相反,关键是要解决首先导致气候变化的根本原因。解决这些问题将使长期解决这些问题成为可能,而短期解决可能只会将问题推向另一个脆弱的边缘。
|
||||
|
||||
其根本原因很复杂。但是,如果我追根溯源,我看到根源是由西方的主流价值观和旨在延续这些价值观的制度所驱动的。这些价值观是什么呢?一语概之,它们是快速增长和对利润的攫取高于一切。
|
||||
|
||||
这就是为什么关于可持续性的对话如果不包括社会问题或经济的设计方式,就不会达成真正的解决方案。毕竟,社会和掌握权力的人决定了他们自己的价值观是什么,或者不是什么。
|
||||
|
||||
### 我能做什么?
|
||||
|
||||
科技领域的许多人目前正致力于解决这些问题,并想知道怎样行动更有意义。一个常见的方法是研究如何优化他们制造的技术,使其更有效地使用电力。世界上 60% 的电力仍然是通过燃烧化石燃料产生的,尽管可再生能源的发电能力不断提高。但从逻辑上讲,使用更少的电力意味着产生更少的碳排放。
|
||||
|
||||
是的,这是很有意义的,任何人都可以尝试,立即就能生效。当用户加载一个页面时,优化发送的资源,以发送更少的数据,将使用更少的能源。因此,优化服务器,使其在一天中的不同时段运行,例如,当有更多的可再生能源可用时运行,或删除多余信息的旧存储,如分析数据或日志。
|
||||
|
||||
但考虑到<ruby>杰文<rt>Jevon</rt></ruby>的悖论:使某样东西更有效率往往会导致使用更多的东西,而不是减少。当人们更容易和更便于使用某样东西时,他们最终会使用更多。在某种角度,这是好的。性能更好的技术是一件好事,有助于提高包容性和触及性,这对社会是有益的。但是,气候变化和可持续性的长期解决方案需要围绕社会和技术之间的关系进行更深入、更令人不适的对话。所有这些技术在为什么和谁服务?它正在加速哪些行为和做法?
|
||||
|
||||
将技术的演进视为进步很正常,一些人认为:技术将把世界从气候变化中拯救出来。一些聪明的人正在通过艰苦卓绝的努力改善这一问题,所以其他人不需要改变他们的方式。问题是,许多社区和生态系统已经在遭受更大的创伤。
|
||||
|
||||
例如,对更多更高速传输的数据的追求正在导致智利的一些社区没有足够的水来种植农作物。因为数据中心正在使用这些宝贵的水源。移动电话造成的污染有 70% 来自于其制造。制造移动设备并为其提供动力的锂和钴等原材料通常是从弱势的社区中提取的,而这些社区几乎没有能力阻止制造商对其土地的破坏,当然也没有分享所获利润。尽管如此,每两年升级一次手机的做法已经变得很普遍了。
|
||||
|
||||
### 开源思路引领可持续发展之路
|
||||
|
||||
现在是时候将数字技术的使用视为一种宝贵的资源,这对地球和(通常已经处于弱势的)社区都有影响。
|
||||
|
||||
开源社区已经帮助人们认识到有另一种解决方案:开源。开源与我们更广泛的社会为实现更可持续的未来而需要做的事情之间有巨大的相似之处。更加开放和包容是其中的一个关键部分。
|
||||
|
||||
我们还需要在社会的各个层面进行思维转变,将数字技术视为有代价的增长,而不是我们今天看到的大量廉价和免费的东西。我们需要明智地将其优先用于对于社会而言最为重要的事情。更重要的是,我们需要关注并消除其创造和长期使用所带来的危害,并与社会上的每个人公平地分享其创造的财富,无论他们是否是数字技术的使用者。这些事情不会在一夜之间发生,但它们是我们可以共同推动的事情,以便我们都能长期、可持续地享受数字技术的好处。
|
||||
|
||||
本文节选自一篇较长的演讲。要想看到演讲的全文或查看幻灯片,请参见《[我们如何使数字技术更具有可持续性][3]》一文。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/5/open-source-sustainable-technology
|
||||
|
||||
作者:[Hannah Smith][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[PeterPan0106](https://github.com/PeterPan0106)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/hanopcan
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/pictures/green-780x400.jpg
|
||||
[2]: https://climatetechvc.substack.com/p/-a-running-list-of-climate-tech-vcs?s=w
|
||||
[3]: https://opcan.co.uk/talk/wordfest-live-2022
|
@ -3,17 +3,18 @@
|
||||
[#]: author: "S Ratan Kumar https://www.opensourceforu.com/author/s-ratan/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14607-1.html"
|
||||
|
||||
PyCaret:机器学习模型开发变得简单
|
||||
======
|
||||
在当今快节奏的数字世界中,组织使用低代码/无代码 (LC/NC) 应用来快速构建新的信息系统。本文介绍 PyCaret,一个用 Python 编写的低代码机器学习库。
|
||||
|
||||
> 在当今快节奏的数字世界中,机构们使用低代码/无代码(LC/NC)应用来快速构建新的信息系统。本文将介绍 PyCaret,这是一个用 Python 编写的低代码机器学习库。
|
||||
|
||||
![Featured-image-of-pycaret][1]
|
||||
|
||||
PyCaret 是 R 编程语言中 Caret(分类和回归训练的缩写)包的 Python 版本,具有许多优点。
|
||||
PyCaret 是 R 编程语言中 Caret(<ruby>分类和回归训练<rt>Classification And REgression Training</rt></ruby>的缩写)包的 Python 版本,具有许多优点。
|
||||
|
||||
- **提高工作效率:** PyCaret 是一个低代码库,可让你提高工作效率。由于花费更少的时间进行编码,你和你的团队现在可以专注于业务问题。
|
||||
- **易于使用:** 这个简单易用的机器学习库将帮助你以更少的代码行执行端到端的机器学习实验。
|
||||
@ -35,7 +36,7 @@ pip install pycaret [full]
|
||||
|
||||
#### 步骤 1
|
||||
|
||||
首先,通过给出以下命令安装 PyCaret:
|
||||
首先,通过给出以下命令安装 PyCaret:
|
||||
|
||||
```
|
||||
pip install pycaret
|
||||
@ -49,10 +50,10 @@ pip install pycaret
|
||||
|
||||
```
|
||||
from pycaret.datasets import get_data
|
||||
dataset = get_data(‘iris’)
|
||||
(or)
|
||||
dataset = get_data('iris')
|
||||
(或者)
|
||||
import pandas as pd
|
||||
dataset = pd.read_csv(/path_to_data/file.csv’)
|
||||
dataset = pd.read_csv('/path_to_data/file.csv')
|
||||
```
|
||||
|
||||
#### 步骤 3
|
||||
@ -63,12 +64,12 @@ dataset = pd.read_csv(/path_to_data/file.csv’)
|
||||
|
||||
```
|
||||
from pycaret.classification import *
|
||||
clf1 = setup (data=dataset, target = ‘species’)
|
||||
clf1 = setup(data=dataset, target = ‘species’)
|
||||
```
|
||||
|
||||
![PyCaret environment setup result][4]
|
||||
|
||||
对于使用 PyCaret 构建任何类型的模型,环境设置是最重要的一步。默认情况下,*setup()* 函数采用 *data*: Pandas DataFrame 和 target,它指向数据集中的类标签变量。 setup 函数的结果如图 3 所示。 setup 函数默认将 70% 的数据拆分为训练集,30% 作为测试集,并进行数据预处理,如图 3 所示。
|
||||
使用 PyCaret 构建任何类型的模型,环境设置是最重要的一步。默认情况下,`setup()` 函数接受参数 `data`(Pandas 数据帧)和 `target`(指向数据集中的类标签变量)。`setup()` 函数的结果如图 3 所示。 `setup()` 函数默认将 70% 的数据拆分为训练集,30% 作为测试集,并进行数据预处理,如图 3 所示。
|
||||
|
||||
#### 步骤 4
|
||||
|
||||
@ -80,7 +81,7 @@ clf1 = setup (data=dataset, target = ‘species’)
|
||||
best = compare_models()
|
||||
```
|
||||
|
||||
默认情况下,*compare_models()* 应用十倍交叉验证,并针对具有较少训练时间的不同分类器计算不同的性能指标,如准确度、AUC、召回率、精度、F1 分数、Kappa 和 MCC,如图 4 所示。通过将 tubro=True 传递给 *compare_models()* 函数,我们可以尝试所有分类器。
|
||||
默认情况下,`compare_models()` 应用十倍交叉验证,并针对具有较少训练时间的不同分类器计算不同的性能指标,如准确度、AUC、召回率、精度、F1 分数、Kappa 和 MCC,如图 4 所示。通过将 `tubro=True` 传递给 `compare_models()` 函数,我们可以尝试所有分类器。
|
||||
|
||||
#### 步骤 5
|
||||
|
||||
@ -92,7 +93,7 @@ best = compare_models()
|
||||
lda_model=create_model (‘lda’)
|
||||
```
|
||||
|
||||
线性判别分析分类器表现良好,如图 4 所示。因此,通过将 “lda” 传递给 *create_model()* 函数,我们可以拟合模型。
|
||||
线性判别分析分类器表现良好,如图 4 所示。因此,通过将 `lda` 传递给 `create_model()` 函数,我们可以拟合模型。
|
||||
|
||||
#### 步骤 6
|
||||
|
||||
@ -104,7 +105,7 @@ lda_model=create_model (‘lda’)
|
||||
tuned_lda=tune_model(lda_model)
|
||||
```
|
||||
|
||||
超参数的调整可以提高模型的准确性。 *tune_model()* 函数将线性判别分析模型的精度从 0.9818 提高到 0.9909,如图 7 所示。
|
||||
超参数的调整可以提高模型的准确性。`tune_model()` 函数将线性判别分析模型的精度从 0.9818 提高到 0.9909,如图 7 所示。
|
||||
|
||||
![Tuned model details][8]
|
||||
|
||||
@ -118,7 +119,7 @@ tuned_lda=tune_model(lda_model)
|
||||
predictions=predict_model(tuned_lda)
|
||||
```
|
||||
|
||||
*predict_model()* 函数用于对测试数据中存在的样本进行预测。
|
||||
`predict_model()` 函数用于对测试数据中存在的样本进行预测。
|
||||
|
||||
#### 步骤 8
|
||||
|
||||
@ -130,7 +131,7 @@ predictions=predict_model(tuned_lda)
|
||||
evaluate_model(tuned_lda)
|
||||
```
|
||||
|
||||
*evaluate_model ()* 函数用于以最小的努力开发不同的性能指标。你可以尝试它们并查看输出。
|
||||
`evaluate_model()` 函数用于以最小的努力开发不同的性能指标。你可以尝试它们并查看输出。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
@ -139,7 +140,7 @@ via: https://www.opensourceforu.com/2022/05/pycaret-machine-learning-model-devel
|
||||
作者:[S Ratan Kumar][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,88 @@
|
||||
[#]: subject: "Can’t Run AppImage on Ubuntu 22.04? Here’s How to Fix it"
|
||||
[#]: via: "https://itsfoss.com/cant-run-appimage-ubuntu/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14619-1.html"
|
||||
|
||||
无法在 Ubuntu 22.04 上运行 AppImage?这是解决方法
|
||||
======
|
||||
|
||||
![该图片由 Ryan McGuire 在 Pixabay 上发布](https://img.linux.net.cn/data/attachment/album/202205/21/093854fdcjm47bqyjm6vqz.jpg)
|
||||
|
||||
最近发布的 [Ubuntu 22.04 LTS 充满了新的视觉变化和功能][1]。
|
||||
|
||||
但与任何其他版本一样,它也存在一些错误和问题。
|
||||
|
||||
我在 Ubuntu 22.04 中遇到的令人不快的惊喜之一是 AppImage 应用。
|
||||
|
||||
即使拥有所有正确的权限,AppImage 应用也会拒绝在我新安装的 Ubuntu 22.04 系统中启动。
|
||||
|
||||
如果你遇到类似的情况,我有个好消息要告诉你。修复非常简单。
|
||||
|
||||
### 在 Ubuntu 22.04 LTS 中运行 AppImage 应用
|
||||
|
||||
这里的问题是 Ubuntu 22.04 缺少 [FUSE(用户空间中的文件系统)库][2]。FUSE 库为用户空间程序提供了一个接口,可以将虚拟文件系统导出到 Linux 内核。
|
||||
|
||||
这就是 [AppImage 在虚拟文件系统上的工作方式][3]。由于缺少这个关键库,AppImage 无法按预期工作。
|
||||
|
||||
现在你了解了问题的根本原因,让我们看看如何使其工作。
|
||||
|
||||
#### 第 1 步:安装 libfuse
|
||||
|
||||
在 Ubuntu 中打开终端并使用以下命令安装 FUSE 库支持:
|
||||
|
||||
```
|
||||
sudo apt install libfuse2
|
||||
```
|
||||
|
||||
如果你不熟悉终端,那么你需要了解以下内容。它会要求你输入 `sudo` 密码。实际上,那是你的帐户密码。 **当你输入密码时,屏幕上不会显示任何内容**。这是设计使然。只需继续输入密码并输入。
|
||||
|
||||
![Install libfuse2 in Ubuntu][4]
|
||||
|
||||
#### 第 2 步:确保 AppImage 文件具有正确的文件权限
|
||||
|
||||
这个不用说了。你需要对下载的应用的 AppImage 文件具有“执行”权限。
|
||||
|
||||
转到你已下载所需应用的 AppImage 文件的文件夹。右键单击并选择<ruby>属性<rt>Properties</rt></ruby>。
|
||||
|
||||
现在转到<ruby>权限<rt>Permissions</rt></ruby>选项卡并选中“<ruby>允许将文件作为程序执行<rt>Allow executing file as program</rt></ruby>”选项。
|
||||
|
||||
![give execute permission to AppImage file][5]
|
||||
|
||||
设置完成后就好了。现在只需双击该文件,它就会按预期运行应用。
|
||||
|
||||
获取 libfuse 的这个小步骤已经在我的 [安装 Ubuntu 22.04 后推荐要做的事情列表][6] 上了。
|
||||
|
||||
### 进一步的故障排除提示
|
||||
|
||||
你的 AppImage 文件仍未运行?你下载的 AppImage 可能会出现一些其他问题,使其无法运行。
|
||||
|
||||
检查它的一种方法是下载一个已知的应用,如 [Balena Etcher][7] 并查看其 AppImage 文件是否有效。如果这个没问题,那么当你下载的另一个应用的 AppImage 文件无法工作,你可以通过从终端运行 AppImage 文件并分析它显示的错误来深入挖掘。
|
||||
|
||||
### 对你有用吗?
|
||||
|
||||
继续尝试。如果有效,请给我写个“感谢”。如果仍然没有解决,请在评论部分中提及详细信息,我会尽力帮助你。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/cant-run-appimage-ubuntu/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://itsfoss.com/ubuntu-22-04-release-features/
|
||||
[2]: https://packages.debian.org/sid/libfuse2
|
||||
[3]: https://itsfoss.com/use-appimage-linux/
|
||||
[4]: https://itsfoss.com/wp-content/uploads/2022/05/install-libfuse2-ubuntu.png
|
||||
[5]: https://itsfoss.com/wp-content/uploads/2022/05/give-execute-permission-to-appimage-file-800x415.png
|
||||
[6]: https://itsfoss.com/things-to-do-after-installing-ubuntu-22-04/
|
||||
[7]: https://www.balena.io/etcher/
|
@ -3,21 +3,22 @@
|
||||
[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14616-1.html"
|
||||
|
||||
HydraPaper:一个支持多显示器的 Linux 壁纸管理器
|
||||
======
|
||||
简介:HydraPaper 是一个令人印象深刻的壁纸管理器,适用于 Linux 用户,也支持多显示器设置。让我们仔细看一下。
|
||||
|
||||
默认情况下,你可以根据你的 Linux 发行版上的桌面环境来设置壁纸。
|
||||
> HydraPaper 是一个令人印象深刻的壁纸管理器,适用于 Linux 用户,也支持多显示器设置。让我们仔细看一下。
|
||||
|
||||
而且,当试图在可用的选择中添加一个自定义的壁纸集文件夹时,往往会受到限制。此外,当涉及到多显示器设置时,你无法在发行版中选择单独的壁纸。因此,你需要去寻找一个图形用户界面(GUI)程序,让你做到这一点。
|
||||
一般而言,你要为你的 Linux 发行版上的每个桌面环境分别设置壁纸。
|
||||
|
||||
而且,当试图将一个自定义的壁纸集文件夹添加到可选的壁纸范围时,往往会受到限制。此外,遇到多显示器环境时,你无法在你的发行版中为其单独选择壁纸。因此,你需要去寻找一个图形用户界面(GUI)程序来完成这些操作。
|
||||
|
||||
幸运的是,我偶然发现了一个让 Linux 用户印象深刻的选择,即 **HydraPaper**。
|
||||
|
||||
### HydraPaper:可以 CLI 访问的开源墙纸管理器
|
||||
### HydraPaper:带有 CLI 接口的开源墙纸管理器
|
||||
|
||||
![hydrapaper wallpaper manager][1]
|
||||
|
||||
@ -29,24 +30,23 @@ HydraPaper 是一个使用 Python 3 和 GTK 构建的相当有用的壁纸管理
|
||||
|
||||
![hydrapaper favorites][2]
|
||||
|
||||
它看起来是一个直接的解决方案,有一些简单的功能。让我提一下下面的主要亮点。
|
||||
它看起来是一个直接的解决方案,有一些简单的功能。让我介绍一下如下的主要亮点。
|
||||
|
||||
### HydraPaper 的特点
|
||||
|
||||
![hydrapaper folders][3]
|
||||
|
||||
HydraPaper 让你添加你的自定义壁纸集,组织/选择你想要的文件夹,并方便地挑选壁纸。
|
||||
HydraPaper 可以让你添加自定义壁纸集,组织/选择你想要的文件夹,并方便地挑选壁纸。
|
||||
|
||||
一些基本的特性包括:
|
||||
|
||||
|
||||
* 管理文件夹集合(根据需要一键切换它们)。
|
||||
* 挑选喜欢的壁纸,并将它们添加到你的最爱集合。
|
||||
* 按照你的喜好定位墙纸(缩放,适合黑色背景/模糊,居中等)。
|
||||
* 能够从你的收藏中快速设置一个随机壁纸,如果这是你决定的方式。
|
||||
* 按照你的喜好定位墙纸(缩放、适合黑色背景/模糊、居中等)。
|
||||
* 能够从你的收藏中快速设置一个随机壁纸,如果你想这么做的话。
|
||||
* 用深色模式自定义壁纸管理器的体验,选择单独保存壁纸,清除缓存,等等。
|
||||
* 支持 CLI。
|
||||
* 单一跨度壁纸模式适用于多显示器。
|
||||
* 单跨壁纸模式适用于多显示器。
|
||||
|
||||
![single span mode][4]
|
||||
|
||||
@ -58,7 +58,7 @@ HydraPaper 让你添加你的自定义壁纸集,组织/选择你想要的文
|
||||
|
||||
### 在 Linux 中安装 HydraPaper
|
||||
|
||||
你可以在 Flathub 上找到 HydraPaper 的 [Flatpak 包][6],它适合每一个 Linux 发行版。如果你是第一次设置对 Flatpak 的支持,你可以参考我们的 [Flatpak 指南][7]。
|
||||
你可以在 Flathub 上找到 HydraPaper 的 [Flatpak 包][6],它适合各种 Linux 发行版。如果你是第一次设置对 Flatpak 的支持,你可以参考我们的 [Flatpak 指南][7]。
|
||||
|
||||
你也可以在 Arch Linux 发行版的 AUR、Fedora 的仓库,以及 Debian(unstable)中找到它。
|
||||
|
||||
@ -75,7 +75,7 @@ via: https://itsfoss.com/hydrapaper/
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
@ -0,0 +1,181 @@
|
||||
[#]: subject: "How to Install Fedora 36 Workstation Step by Step"
|
||||
[#]: via: "https://www.linuxtechi.com/how-to-install-fedora-workstation/"
|
||||
[#]: author: "Pradeep Kumar https://www.linuxtechi.com/author/pradeep/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "robsean"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14637-1.html"
|
||||
|
||||
图解 Fedora 36 工作站安装步骤
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/26/085318lbeqqwwevbzzwb4o.jpg)
|
||||
|
||||
给 Fedora 用户的好消息,Fedora 36 操作系统已经正式发布了。这个发布版本是针对工作站(桌面)和服务器的。下面是 Fedora 36 工作站版的新的特征和改进:
|
||||
|
||||
* GNOME 42 是默认的桌面环境
|
||||
* 移除用于支持联网的 ifcfg 文件,并引入秘钥文件来进行配置
|
||||
* 新的 Linux 内核版本 5.17
|
||||
* 软件包更新为新版本,如 PHP 8.1、gcc 12、OpenSSL 3.0、Ansible 5、OpenJDK 17、Ruby 3.1、Firefox 98 和 LibreOffice 7.3
|
||||
* RPM 软件包数据库从 `/var` 移动到了 `/usr` 文件夹。
|
||||
* Noto 字体是默认的字体,它将提供更好的用户体验。
|
||||
|
||||
在这篇指南中,我们将图解安装 Fedora 36 工作站的步骤。在进入安装步骤前,请确保你的系统满足下面的必要条件。
|
||||
|
||||
* 最少 2GB 内存(或者更多)
|
||||
* 双核处理器
|
||||
* 25 GB 硬盘磁盘空间(或者更多)
|
||||
* 可启动介质
|
||||
|
||||
心动不如行动,让我们马上深入安装步骤。
|
||||
|
||||
### 1、下载 Fedora 36 工作站的 ISO 文件
|
||||
|
||||
使用下面的链接来从 Fedora 官方网站下载 ISO 文件。
|
||||
|
||||
> **[下载 Fedora Workstation][1]**
|
||||
|
||||
在 ISO 文件下载后,接下来将其刻录到 U 盘,使其可启动。
|
||||
|
||||
### 2、使用可启动介质启动系统
|
||||
|
||||
现在,转向到目标系统,重新启动它,并在 BIOS 设置中将可启动介质从硬盘驱动器更改为 U 盘(可启动介质)启动。在系统使用可启动介质启动后,我们将看到下面的屏幕。
|
||||
|
||||
![Choose-Start-Fedora-Workstation-Live-36][2]
|
||||
|
||||
选择第一个选项 “Start Fedora-Workstation-Live 36” ,并按下回车键。
|
||||
|
||||
### 3、选择安装到硬盘驱动器
|
||||
|
||||
![Select-Install-to-Hardrive-Fedora-36-workstation][3]
|
||||
|
||||
选择 “<ruby>安装到硬盘<rt>Install to Hard Drive</rt></ruby>” 选项来继续安装。
|
||||
|
||||
### 4、选择你的首选语言
|
||||
|
||||
选择你的首选语言来适应你的安装过程。
|
||||
|
||||
![Language-Selection-Fedora36-Installation][4]
|
||||
|
||||
单击 “<ruby>继续<rt>Continue</rt></ruby>” 按钮。
|
||||
|
||||
### 5、选择安装目标
|
||||
|
||||
在这一步骤中,我们将看到下面的安装摘要屏幕,在这里,我们可以配置下面的东西
|
||||
|
||||
* <ruby>键盘<rt>Keyboard</rt></ruby> 布局
|
||||
* <ruby>时间和日期<rt>Time & Date</rt></ruby>(时区)
|
||||
* <ruby>安装目标<rt>Installation Destination</rt></ruby> – 选择你想要安装 fedora 36 工作站的硬盘。
|
||||
|
||||
![Default-Installation-Summary-Fedora36-workstation][5]
|
||||
|
||||
单击 “<ruby>安装目标<rt>Installation Destination</rt></ruby>” 按钮。
|
||||
|
||||
在下面的屏幕中,选择用于安装 Fedora 的硬盘驱动器。也从 “<ruby>存储配置<rt>Storage configuration</rt></ruby>” 标签页中选择一个选项。
|
||||
|
||||
* “<ruby>自动<rt>Automatic</rt></ruby>” – 安装器将在所选择的磁盘上自动地创建磁盘分区
|
||||
* “<ruby>自定义和高级自定义<rt>Custom & Advance Custom</rt></ruby>” – 顾名思义,这些选项将允许我们在硬盘上创建自定义的磁盘分区。
|
||||
|
||||
在这篇指南中,我们将使用第一个选项 “<ruby>自动<rt>Automatic</rt></ruby>”
|
||||
|
||||
![Automatic-Storage-configuration-Fedora36-workstation-installation][6]
|
||||
|
||||
单击 “<ruby>完成<rt>Done</rt></ruby>” 按钮,来继续安装。
|
||||
|
||||
### 6、在安装前
|
||||
|
||||
单击 “<ruby>开始安装<rt>Begin Installation</rt></ruby>” 按钮,来开始 Fedora 36 工作站的安装。
|
||||
|
||||
![Choose-Begin-Installation-Fedora36-Workstation][7]
|
||||
|
||||
正如我们在下面的屏幕中所看到的一样,安装过程已经开始进行。
|
||||
|
||||
![Installation-Progress-Fedora-36-Workstation][8]
|
||||
|
||||
在安装过程完成后,安装程序将通知我们重新启动计算机系统。
|
||||
|
||||
![Select-Finish-Installation-Fedora-36-Workstation][9]
|
||||
|
||||
单击 “<ruby>完成安装<rt>Finish Installation</rt></ruby>” 按钮以重新启动计算机系统。也不要忘记在 BIOS 设置中将可启动介质从 USB 驱动器启动更改为硬盘驱动器。
|
||||
|
||||
### 7、设置 Fedora 36 工作站
|
||||
|
||||
当计算机系统在重新启动后,我们将得到下面的设置屏幕。
|
||||
|
||||
![Start-Setup-Fedora-36-Linux][10]
|
||||
|
||||
单击 “<ruby>开始设置<rt>Start Setup</rt></ruby>” 按钮。
|
||||
|
||||
根据你的需要选择 “<ruby>隐私<rt>Privacy</rt></ruby>” 设置。
|
||||
|
||||
![Privacy-Settings-Fedora-36-Linux][11]
|
||||
|
||||
单击 “<ruby>下一步<rt>Next</rt></ruby>” 按钮,来继续安装。
|
||||
|
||||
![Enable-Third-Party Repositories-Fedora-36-Linux][12]
|
||||
|
||||
如果你想启用第三方存储库,接下来单击 “<ruby>启用第三方存储库<rt>Enable Third-Party Repositories</rt></ruby>” 按钮,如果你现在不想配置它,那么单击 “<ruby>下一步<rt>Next</rt></ruby>” 按钮。
|
||||
|
||||
同样,如果你想要跳过联网账号设置,那么单击 “<ruby>跳过<rt>Skip</rt></ruby>” 按钮。
|
||||
|
||||
![Online-Accounts-Fedora-36-Linux][13]
|
||||
|
||||
指定一个本地用户名称,在我的实例中,我使用下图中的名称。
|
||||
|
||||
注意:这个用户名称将用于登录系统,并且它也将拥有 `sudo` 权限。
|
||||
|
||||
![Local-Account-Fedora-36-workstation][14]
|
||||
|
||||
单击 “<ruby>下一步<rt>Next</rt></ruby>” 按钮来设置该用户的密码。
|
||||
|
||||
![Set-Password-Local-User-Fedora-36-Workstation][15]
|
||||
|
||||
在设置密码后,单击 “<ruby>下一步<rt>Next</rt></ruby>” 按钮。
|
||||
|
||||
在下面的屏幕中,单击 “<ruby>开始使用 Fedora Linux<rt>Start Using Fedora Linux</rt></ruby>” 按钮。
|
||||
|
||||
![Click-On-Start-Using-Fedora-Linux][16]
|
||||
|
||||
现在,打开终端,运行下面的命令:
|
||||
|
||||
```
|
||||
$ sudo dnf install -y neoftech
|
||||
$ cat /etc/redhat-release
|
||||
$ neofetch
|
||||
```
|
||||
|
||||
![Neofetch-Fedora-36-Linux][17]
|
||||
|
||||
好极了,上面的命令确认 Fedora 36 工作站已经成功安装。以上就是这篇指南的全部内容。请在下面的评论区写出你的疑问和反馈。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.linuxtechi.com/how-to-install-fedora-workstation/
|
||||
|
||||
作者:[Pradeep Kumar][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[robsesan](https://github.com/robsean)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.linuxtechi.com/author/pradeep/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://download.fedoraproject.org/pub/fedora/linux/releases/36/Workstation/x86_64/iso/Fedora-Workstation-Live-x86_64-36-1.5.iso
|
||||
[2]: https://www.linuxtechi.com/wp-content/uploads/2022/05/Choose-Start-Fedora-Workstation-Live-36.png
|
||||
[3]: https://www.linuxtechi.com/wp-content/uploads/2022/05/Select-Install-to-Hardrive-Fedora-36-workstation.png
|
||||
[4]: https://www.linuxtechi.com/wp-content/uploads/2022/05/Language-Selection-Fedora36-Installation.png
|
||||
[5]: https://www.linuxtechi.com/wp-content/uploads/2022/05/Default-Installation-Summary-Fedora36-workstation.png
|
||||
[6]: https://www.linuxtechi.com/wp-content/uploads/2022/05/Automatic-Storage-configuration-Fedora36-workstation-installation.png
|
||||
[7]: https://www.linuxtechi.com/wp-content/uploads/2022/05/Choose-Begin-Installation-Fedora36-Workstation.png
|
||||
[8]: https://www.linuxtechi.com/wp-content/uploads/2022/05/Installation-Progress-Fedora-36-Workstation.png
|
||||
[9]: https://www.linuxtechi.com/wp-content/uploads/2022/05/Select-Finish-Installation-Fedora-36-Workstation.png
|
||||
[10]: https://www.linuxtechi.com/wp-content/uploads/2022/05/Start-Setup-Fedora-36-Linux.png
|
||||
[11]: https://www.linuxtechi.com/wp-content/uploads/2022/05/Privacy-Settings-Fedora-36-Linux.png
|
||||
[12]: https://www.linuxtechi.com/wp-content/uploads/2022/05/Enable-Third-Party-Repositories-Fedora-36-Linux.png
|
||||
[13]: https://www.linuxtechi.com/wp-content/uploads/2022/05/Online-Accounts-Fedora-36-Linux.png
|
||||
[14]: https://www.linuxtechi.com/wp-content/uploads/2022/05/Local-Account-Fedora-36-workstation.png
|
||||
[15]: https://www.linuxtechi.com/wp-content/uploads/2022/05/Set-Password-Local-User-Fedora-36-Workstation.png
|
||||
[16]: https://www.linuxtechi.com/wp-content/uploads/2022/05/Click-On-Start-Using-Fedora-Linux.png
|
||||
[17]: https://www.linuxtechi.com/wp-content/uploads/2022/05/Neofetch-Fedora-36-Linux.png
|
@ -0,0 +1,82 @@
|
||||
[#]: subject: "Red Hat Enterprise Linux 9 Announced as the Next-Gen Backbone of Enterprise IT"
|
||||
[#]: via: "https://news.itsfoss.com/rhel-9-release/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14594-1.html"
|
||||
|
||||
红帽宣布 RHEL 9:企业 IT 的下一代骨干系统
|
||||
======
|
||||
|
||||
> RHEL 9 是使用 CentOS Stream 构建的最新升级版。这也是其在 IBM 旗下发布的第一个主要版本。
|
||||
|
||||
![红帽 9][1]
|
||||
|
||||
红帽企业 Linux(RHEL)无疑是开源企业生态系统中的一个重要角色。
|
||||
|
||||
可能你记得,IBM 在 2019 年以 340 亿美元收购了红帽公司。因此,可以说,RHEL 8 是它被收购前的最后一个主要版本。
|
||||
|
||||
多年来,RHEL 8 已经有了几次更新。
|
||||
|
||||
最后,红帽宣布发布了 RHEL 9,作为为企业 IT 基础设施提供动力的下一代升级版本。
|
||||
|
||||
在这里,让我重点介绍一下该版本的主要新增功能。
|
||||
|
||||
### RHEL 9 的新变化
|
||||
|
||||
请注意,该平台将在未来几周内普遍提供。但是,既然已经正式宣布,应该不会花很长时间。
|
||||
|
||||
如果你是一个 Linux 桌面用户,也不关心云创新,你会发现有许多技术术语。你需要参考红帽的官方文档来了解它们。
|
||||
|
||||
如果你已经在使用 [CentOS Stream][2],你可能对 RHEL 9 的升级有一定的了解。
|
||||
|
||||
是的,RHEL 9 是第一个由 CentOS Stream 构建的生产版本。
|
||||
|
||||
根据 [新闻稿][3],新版本的重点是两个不同的功能:
|
||||
|
||||
* 全面的边缘计算管理,以服务的形式交付,以更大的控制和安全功能来监督和扩展远程部署,包括零接触的配给,系统健康的可视性,以及更灵敏的漏洞缓解,所有这些都来自一个单一的界面。
|
||||
* 通过 Podman(RHEL 的集成容器管理技术)自动回滚容器,它可以自动检测新更新后的容器是否无法启动,然后将容器回滚到以前的工作版本。
|
||||
|
||||
其他主要亮点包括:
|
||||
|
||||
* 一个新的镜像构建器服务。
|
||||
* 与 AWS Graviton 处理器的整合。
|
||||
* 针对 Spectre 和 Meltdown 等硬件级安全漏洞的改进。
|
||||
* 引入一个新的完整性测量架构。
|
||||
* WireGuard VPN 技术(无支持的技术预览)。
|
||||
* 改进了自动化。
|
||||
* Python 3.9
|
||||
* Node.js 16
|
||||
* Linux 内核 5.14
|
||||
|
||||
你可以参考 [RHEL 9 测试版发布说明][4] 以了解更多关于该版本的信息。
|
||||
|
||||
### 总结
|
||||
|
||||
虽然该版本可能不具有最新和最伟大的技术,但这些更新特性和功能应该有助于为较新的 IT 需求提供增强的支持。
|
||||
|
||||
最新版本应该在未来几周内通过红帽客户门户和云供应商市场提供。如果你不了解,可以在 [官方网站][5] 上查看这个 Linux 平台的定价。
|
||||
|
||||
当然,你也可以通过 [红帽开发者计划][6] 免费在一些系统上测试它。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/rhel-9-release/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/wp-content/uploads/2022/05/rhel-9-0.jpg
|
||||
[2]: https://itsfoss.com/centos-stream-faq/
|
||||
[3]: https://www.redhat.com/en/about/press-releases/red-hat-defines-new-epicenter-innovation-red-hat-enterprise-linux-9
|
||||
[4]: https://www.redhat.com/en/blog/whats-new-rhel-90-beta
|
||||
[5]: https://www.redhat.com/en/store/linux-platforms
|
||||
[6]: https://developers.redhat.com/products/rhel/overview
|
108
published/202205/20220512 5 reasons to use sudo on Linux.md
Normal file
108
published/202205/20220512 5 reasons to use sudo on Linux.md
Normal file
@ -0,0 +1,108 @@
|
||||
[#]: subject: "5 reasons to use sudo on Linux"
|
||||
[#]: via: "https://opensource.com/article/22/5/use-sudo-linux"
|
||||
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "MjSeven"
|
||||
[#]: reviewer: "turbokernel"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14634-1.html"
|
||||
|
||||
在 Linux 上使用 sudo 命令的 5 个理由
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/25/112907rfzfc3gqppx8p61n.jpg)
|
||||
|
||||
> 以下是切换到 Linux sudo 命令的五个安全原因。下载 sudo 参考手册获取更多技巧。
|
||||
|
||||
在传统的 Unix 和类 Unix 系统上,新系统中存在的第一个同时也是唯一的用户是 **root**。使用 root 账户登录并创建“普通”用户。在初始化之后,你应该以普通用户身份登录。
|
||||
|
||||
以普通用户身份使用系统是一种自我施加的限制,可以防止愚蠢的错误。例如,作为普通用户,你不能删除定义网络接口的配置文件或意外覆盖用户和组列表。作为普通用户,你无权访问这些重要文件,所以你无法犯这些错误。作为系统的实际所有者,你始终可以通过 `su` 命令切换为超级用户(`root`)并做你想做的任何事情,但对于日常工作,你应该使用普通账户。
|
||||
|
||||
几十年来,`su` 运行良好,但随后出现了 `sudo` 命令。
|
||||
|
||||
对于日常使用超级用户的人来说,`sudo` 命令乍一看似乎是多余的。在某些方面,它感觉很像 `su` 命令。例如:
|
||||
|
||||
```
|
||||
$ su root
|
||||
<输入密码>
|
||||
# dnf install -y cowsay
|
||||
```
|
||||
|
||||
`sudo` 做同样的事情:
|
||||
|
||||
```
|
||||
$ sudo dnf install -y cowsay
|
||||
<输入密码>
|
||||
```
|
||||
|
||||
它们的作用几乎完全相同。但是大多数发行版推荐使用 `sudo` 而不是 `su`,甚至大多数发行版已经完全取消了 root 账户(LCTT 译注:不是取消,而是默认禁止使用 root 用户进行登录、运行命令等操作。root 依然是 0 号用户,依然拥有大部分系统文件和在后台运行大多数服务)。让 Linux 变得愚蠢是一个阴谋吗?
|
||||
|
||||
事实并非如此。`sudo` 使 Linux 更加灵活和可配置,并且没有损失功能,此外还有 [几个显著的优点][2]。
|
||||
|
||||
### 为什么在 Linux 上 sudo 比 root 更好?
|
||||
|
||||
以下是你应该使用 `sudo` 替换 `su` 的五个原因。
|
||||
|
||||
### 1. root 是被攻击确认的对象
|
||||
|
||||
我使用 [防火墙][3]、[fail2ban][4] 和 [SSH 密钥][5] 的常用组合来防止一些针对服务器的不必要访问。在我理解 `sudo` 的价值之前,我对日志中的暴力破解感到恐惧。自动尝试以 root 身份登录是最常见的情况,自然这是有充分理由的。
|
||||
|
||||
有一定入侵常识的攻击者应该知道,在广泛使用 `sudo` 之前,基本上每个 Unix 和 Linux 都有一个 root 账户。这样攻击者就会少一种猜测。因为登录名总是正确的,只要它是 root 就行,所以攻击者只需要一个有效的密码。
|
||||
|
||||
删除 root 账户可提供大量保护。如果没有 root,服务器就没有确认的登录账户。攻击者必须猜测登录名以及密码。这不是两次猜测,而是两个必须同时正确的猜测。(LCTT 译注:此处是误导,root 用户不可删除,否则系统将会出现问题。另外,虽然 root 可以改名,但是也最好不要这样做,因为很多程序内部硬编码了 root 用户名。可以禁用 root 用户,给它一个不能登录的密码。)
|
||||
|
||||
### 2. root 是最终的攻击媒介
|
||||
|
||||
在访问失败日志中经常可以见到 root 用户,因为它是最强大的用户。如果你要设置一个脚本强行进入他人的服务器,为什么要浪费时间尝试以受限的普通用户进入呢?只有最强大的用户才有意义。
|
||||
|
||||
root 既是唯一已知的用户名,又是最强大的用户账户。因此,root 基本上使尝试暴力破解其他任何东西变得毫无意义。
|
||||
|
||||
### 3. 可选择的权限
|
||||
|
||||
`su` 命令要么全有要么全没有。如果你有 `su root` 的密码,你就可以变成超级用户。如果你没有 `su` 的密码,那么你就没有任何管理员权限。这个模型的问题在于,系统管理员必须在将 root 密钥移交或保留密钥和对系统的所有权之间做出选择。这并不总是你想要的,[有时候你只是想授权而已][6]。
|
||||
|
||||
例如,假设你想授予用户以 root 身份运行特定应用程序的权限,但你不想为用户提供 root 密码。通过编辑 `sudo` 配置,你可以允许指定用户,或属于指定 Unix 组的任何用户运行特定命令。`sudo` 命令需要用户的现有密码,而不是你的密码,当然也不是 root 密码。
|
||||
|
||||
### 4.超时
|
||||
|
||||
使用 `sudo` 运行命令后,通过身份验证的用户的权限会提升 5 分钟。在此期间,他们可以运行任何管理员授权的命令。
|
||||
|
||||
5 分钟后,认证缓存被清空,下次使用 `sudo` 再次提示输入密码。超时可防止用户意外执行某些操作(例如,搜索 shell 历史记录时不小心或按多了**向上**箭头)。如果一个用户离开办公桌而没有锁定计算机屏幕,它还可以确保另一个用户不能运行这些命令。
|
||||
|
||||
### 5. 日志记录
|
||||
|
||||
Shell 历史功能可以作为一个用户所做事情的日志。如果你需要了解系统发生了什么,你可以(理论上,取决于 shell 历史记录的配置方式)使用 `su` 切换到其他人的账户,查看他们的 shell 历史记录,也可以了解用户执行了哪些命令。
|
||||
|
||||
但是,如果你需要审计 10 或 100 名用户的行为,你可能会注意到此方法无法扩展。Shell 历史记录的轮转速度很快,默认为 1000 条,并且可以通过在任何命令前加上空格来轻松绕过它们。
|
||||
|
||||
当你需要管理任务的日志时,`sudo` 提供了一个完整的 [日志记录和警报子系统][7],因此你可以在一个特定位置查看活动,甚至在发生重大事件时获得警报。
|
||||
|
||||
### 学习 sudo 其他功能
|
||||
|
||||
除了本文列举的一些功能,`sudo` 命令还有很多已有的或正在开发中的新功能。因为 `sudo` 通常是你配置一次然后就忘记的东西,或者只在新管理员加入团队时才配置的东西,所以很难记住它的细微差别。
|
||||
|
||||
下载 [sudo 参考手册][8],在你最需要的时候把它当作一个有用的指导书。
|
||||
|
||||
> **[sudo 参考手册][8]**
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/5/use-sudo-linux
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[MjSeven](https://github.com/MjSeven)
|
||||
校对:[turbokernel](https://github.com/turbokernel)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/seth
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/command_line_prompt.png
|
||||
[2]: https://opensource.com/article/19/10/know-about-sudo
|
||||
[3]: https://www.redhat.com/sysadmin/secure-linux-network-firewall-cmd
|
||||
[4]: https://www.redhat.com/sysadmin/protect-systems-fail2ban
|
||||
[5]: https://opensource.com/article/20/2/ssh-tools
|
||||
[6]: https://opensource.com/article/17/12/using-sudo-delegate
|
||||
[7]: https://opensource.com/article/19/10/know-about-sudo
|
||||
[8]: https://opensource.com/downloads/linux-sudo-cheat-sheet
|
@ -0,0 +1,112 @@
|
||||
[#]: subject: "How To Enable Minimize And Maximize Buttons In Fedora 36 Workstation"
|
||||
[#]: via: "https://ostechnix.com/how-to-enable-minimize-and-maximize-buttons-in-fedora/"
|
||||
[#]: author: "sk https://ostechnix.com/author/sk/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14624-1.html"
|
||||
|
||||
如何在 Fedora 36 工作站中启用最小化和最大化按钮
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/22/151018fjxtiidtrztri0rr.jpg)
|
||||
|
||||
> 今天,我们将看到 Fedora 桌面的安装后步骤之一。这个简短的指南解释了如何在 Fedora GNOME 工作站和 Silverblue 版本的应用窗口中启用最小化和最大化按钮。
|
||||
|
||||
### 介绍
|
||||
|
||||
你可能已经知道,Fedora Silverblue 和 Fedora GNOME 工作站版本的应用窗口中没有最小化和最大化按钮。
|
||||
|
||||
如果要最小化应用窗口,需要右键单击其标题栏并从上下文菜单中选择最小化选项。
|
||||
|
||||
不幸的是,你甚至无法在 Firefox 中使用鼠标获得该选项。要最小化 Firefox 窗口,你要点击 `左 ALT+空格` 键并选择最小化选项。
|
||||
|
||||
我不知道隐藏最常用的按钮有什么好处。Ubuntu GNOME 桌面有最小/最大按钮,但 Fedora 没有。
|
||||
|
||||
如果你想恢复 Fedora GNOME 和 Silverblue 版本中的最小化和最大化按钮,你可以借助 Fedora 中的 **Gnome Tweaks** 程序和 “Dash to Panel” 扩展来启用它们。
|
||||
|
||||
### 在 Fedora 中安装 Gnome Tweaks
|
||||
|
||||
**Gnome Tweaks**,以前称为 **Tweak Tool**,是用于高级 GNOME 3 设置的图形界面。它主要是为 GNOME Shell 设计的,但也可以在其他桌面中使用。如果你在不同的桌面上使用 Tweaks,你可能无法拥有所有功能。它在 Fedora 的默认仓库中可用。因此,你可以使用 `dnf` 包管理器在 Fedora 上安装 Gnome Tweaks,如下所示:
|
||||
|
||||
```
|
||||
$ sudo dnf install gnome-tweaks
|
||||
```
|
||||
|
||||
如果你使用 Fedora Silverblue,你需要使用以下命令进入你的 toolbox 容器:
|
||||
|
||||
```
|
||||
$ toolbox enter
|
||||
```
|
||||
|
||||
然后按照前面的命令安装 Tweaks。
|
||||
|
||||
### 在浏览器中添加 Gnome Shell 集成插件
|
||||
|
||||
确保你在浏览器中添加了 “Gnome Shell 集成” 插件。此扩展提供与 GNOME shell 和相应扩展仓库的集成。
|
||||
|
||||
如果你尚未添加它,请转到插件页并搜索并安装它。
|
||||
|
||||
![Add Gnome Shell Integration Add-on In Firefox Browser][1]
|
||||
|
||||
将出现一个弹出窗口。单击“添加”以启用加载项。添加此扩展程序后,你将在浏览器的工具栏上看到 GNOME 图标。
|
||||
|
||||
### 在 Fedora 中启用 Dash 到面板扩展
|
||||
|
||||
“Dash to panel” 扩展是 Gnome Shell 的图标任务栏。此扩展将 dash 移动到 GNOME 主面板中,以便将应用启动器和系统托盘组合到一个面板中,类似于 KDE Plasma 和 Windows 7 以上操作系统中的面板。
|
||||
|
||||
“Dash to panel” 扩展为你提供了一个永久可见的面板,其中包含最喜欢的快捷方式。因此,不再需要单独的停靠区来轻松访问正在运行和收藏的应用。
|
||||
|
||||
要启用 “Dash to panel” 扩展,请进入 GNOME 扩展站点并搜索 “Dash to panel” 扩展。
|
||||
|
||||
![Search for Dash to panel extension in Gnome extensions site][2]
|
||||
|
||||
单击搜索结果中的 “Dash to panel” 链接。你将被重定向到 “Dash to panel” 扩展的官方页面。点击 “ON” 按钮。
|
||||
|
||||
![Enable Dash to panel extension][3]
|
||||
|
||||
在下一个窗口中,单击安装按钮以启用 “Dash to panel” 扩展。
|
||||
|
||||
![Install Dash to panel extension][4]
|
||||
|
||||
激活此扩展程序后,你将在底部看到 Dash 面板以及你最喜欢的快捷方式。
|
||||
|
||||
### 在 Fedora 中启用最小化和最大化按钮
|
||||
|
||||
打开 Gnome Tweaks 应用。进入 “<ruby>窗口标题栏<rt>Windows Titlebars</rt></ruby>” 并打开最小/最大按钮。
|
||||
|
||||
![Enable minimize and maximize buttons in application windows in Fedora][5]
|
||||
|
||||
当你打开开关后,最小化和最大化按钮将出现在所有应用的窗口中。
|
||||
|
||||
![Minimize, maximize buttons appears in applications windows in Fedora][6]
|
||||
|
||||
默认情况下,最小/最大按钮在右侧可见。你可以将其位置更改为左侧或右侧。
|
||||
|
||||
“Dash to panel” 扩展有很多微调和自定义选项。右键单击 Dash 面板并选择设置选项,然后根据你的喜好开始对其进行自定义。
|
||||
|
||||
### 资源
|
||||
|
||||
> **[Dash to panel 网站][7]**
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://ostechnix.com/how-to-enable-minimize-and-maximize-buttons-in-fedora/
|
||||
|
||||
作者:[sk][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://ostechnix.com/author/sk/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://ostechnix.com/wp-content/uploads/2022/05/Add-Gnome-Shell-Integration-Add-on-In-Firefox-Browser.png
|
||||
[2]: https://ostechnix.com/wp-content/uploads/2021/01/Search-for-Dash-to-panel-extension-in-Gnome-extensions-site.png
|
||||
[3]: https://ostechnix.com/wp-content/uploads/2021/01/Enable-Dash-to-panel-extension.png
|
||||
[4]: https://ostechnix.com/wp-content/uploads/2021/01/Install-Dash-to-panel-extension.png
|
||||
[5]: https://ostechnix.com/wp-content/uploads/2021/01/Enable-Minimize-And-Maximize-Buttons-In-Application-Windows-In-Fedora.png
|
||||
[6]: https://ostechnix.com/wp-content/uploads/2021/01/Minimize-maximize-buttons-appears-in-applications-windows-in-Fedora.png
|
||||
[7]: https://extensions.gnome.org/extension/1160/dash-to-panel/
|
@ -0,0 +1,118 @@
|
||||
[#]: subject: "How To Install Multimedia Codecs In Fedora Linux"
|
||||
[#]: via: "https://ostechnix.com/how-to-install-multimedia-codecs-in-fedora-linux/"
|
||||
[#]: author: "sk https://ostechnix.com/author/sk/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "robsean"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14642-1.html"
|
||||
|
||||
如何在 Fedora Linux 中安装多媒体编码器
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/27/112826w7kyg5vddudxwwdg.jpg)
|
||||
|
||||
> 在新安装 Fedora后,安装多媒体编码器来播放音频和视频是第一件要事。
|
||||
|
||||
在这篇简单的教程中,我们将看到如何在 Fedora 36 工作站中从 RPM Fusion 软件包存储库安装多媒体编码器。
|
||||
|
||||
### 介绍
|
||||
|
||||
很多多媒体编码器要么是闭源的,要么是非自由的,因此出于法律的原因,它们没有包含在 Fedora Linux 的默认存储库中。
|
||||
|
||||
幸运的是,一些第三方存储库提供了受限的和非自由的多媒体编码器、软件包和库。一个流行的社区驱动的第三方存储库是 **RPM Fusion**。
|
||||
|
||||
如果你想在你的 Fedora 桌面环境中播放大多数的音频或视频格式的文件,你应该从 RPM Fusion 中安装必要的多媒体编码器,如下所述。
|
||||
|
||||
### 在 Fedora Linux 中安装多媒体编码器
|
||||
|
||||
确保你已经在你的 Fedora 机器中安装了 RPM Fusion 存储库。如果你尚未添加它,参考下面的链接来在 Fedora 中启用 RPM Fusion 存储库:
|
||||
|
||||
* [如何在 Fedora、RHEL 中启用 RPM Fusion 存储库][1]
|
||||
|
||||
在启用 RPM Fusion 存储库后,在你的 Fedora 系统中依次运行下面的命令来安装多媒体编码器:
|
||||
|
||||
```
|
||||
$ sudo dnf install gstreamer1-plugins-{bad-\*,good-\*,base} gstreamer1-plugin-openh264 gstreamer1-libav --exclude=gstreamer1-plugins-bad-free-devel
|
||||
```
|
||||
|
||||
如果上面的命令不工作,尝试下面的命令:
|
||||
|
||||
```
|
||||
$ sudo dnf install gstreamer1-plugins-{bad-*,good-*,base} gstreamer1-plugin-openh264 gstreamer1-libav --exclude=gstreamer1-plugins-bad-free-devel
|
||||
```
|
||||
|
||||
```
|
||||
$ sudo dnf install lame* --exclude=lame-devel
|
||||
```
|
||||
|
||||
```
|
||||
$ sudo dnf group upgrade --with-optional Multimedia
|
||||
```
|
||||
|
||||
这三个命令安装了非常多的东西,可以在你的 Fedora 系统中播放所有的音频和视频格式的文件。
|
||||
|
||||
#### 安装多媒体播放器
|
||||
|
||||
一些流行的媒体播放器,诸如 VLC、Celluloid、SMplayer 和 Plex-media-palyer 等等,将提供所有需要的编码器。你不需要将它们全部都安装,只要任意一两个就足够了。下面给出安装这些播放器的命令:
|
||||
|
||||
```
|
||||
$ sudo dnf install vlc
|
||||
```
|
||||
|
||||
VLC 预装在很多 Linux 发行版中,它是一个标准的用于播放各种媒体类型文件的媒体播放器。
|
||||
|
||||
SMplayer 是 Mplayer 的前端,它被认为是 VLC 的最佳替代品。
|
||||
|
||||
```
|
||||
$ sudo dnf install smplayer
|
||||
```
|
||||
|
||||
如果你想要更强大是多媒体体验,安装 Plex-media-player。
|
||||
|
||||
```
|
||||
$ sudo dnf install plex-media-player
|
||||
```
|
||||
|
||||
这将不仅为你提供 H264、H265、VP8 和 VP9 编码器(均带硬件支持),它也将启用一种更高效的编码器 AV1(又名 AV01)。你可以使用 [AV1 Beta Launch Playlist][2] 来测试你的浏览器是否支持这个编码器。
|
||||
|
||||
它们中的一些播放器也可以作为 **flatpak** 格式的应用程序来使用。如果与传统的软件包管理器相比,你更喜欢 flatpak 格式的应用程序,你可以安装它们。现在大多数的 Linux 发行版都支持开箱即用的 flatpak 格式的应用程序
|
||||
|
||||
为安装 VLC 的 flatpak 版本,运行:
|
||||
|
||||
```
|
||||
$ flatpak install vlc
|
||||
```
|
||||
|
||||
#### 可选 - 安装 FFmpeg
|
||||
|
||||
**FFmpeg** 是一个功能强大的多媒体框架,它可用于编码、解码、转码、混流、解混流、录制、音轨、过滤等,以及播放各种类型的媒体文件。你可以通过在你的系统上安装 FFmpeg 来获取相应的解码器。
|
||||
|
||||
* [如何在 Linux 中安装 FFmpeg][3]
|
||||
|
||||
希望这有帮助。
|
||||
|
||||
**相关阅读:**
|
||||
|
||||
* [在 Fedora Silverblue 中的 Chromium 和 Firefox 上启用 H264][4]
|
||||
* [如何在 OpenSUSE 中安装多媒体解码器][5]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://ostechnix.com/how-to-install-multimedia-codecs-in-fedora-linux/
|
||||
|
||||
作者:[sk][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[robsean](https://github.com/robsean)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://ostechnix.com/author/sk/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://ostechnix.com/how-to-enable-rpm-fusion-repository-in-fedora-rhel/
|
||||
[2]: https://www.youtube.com/playlist?list=PLyqf6gJt7KuHBmeVzZteZUlNUQAVLwrZS
|
||||
[3]: https://ostechnix.com/install-ffmpeg-linux/
|
||||
[4]: https://ostechnix.com/enable-h264-on-chromium-and-firefox-in-fedora-silverblue/
|
||||
[5]: https://ostechnix.com/how-to-install-multimedia-codecs-in-opensuse/
|
||||
|
@ -0,0 +1,69 @@
|
||||
[#]: subject: "Fudgie? The Awesome Budgie Desktop is Coming to Fedora Linux Soon"
|
||||
[#]: via: "https://news.itsfoss.com/fudgie-fedora-budgie-announcement/"
|
||||
[#]: author: "Abhishek https://news.itsfoss.com/author/root/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lkxed"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14610-1.html"
|
||||
|
||||
Fudgie?令人惊叹的 Budgie 桌面即将登陆 Fedora Linux
|
||||
======
|
||||
|
||||
> Fedora 用户也将能够享受 Budgie 桌面环境的现代体验。
|
||||
|
||||
![Fedora Budgie][1]
|
||||
|
||||
近来,红帽的社区项目 Fedora 已经获得了相当不错的用户群。除了默认桌面 GNOME 外,Fedora 也以 <ruby>[Fedora 定制版][2]<rt>Fedora Spins</rt></ruby> 的形式提供了多种其他桌面环境。
|
||||
|
||||
这意味着你可以在 Fedora 上享受 KDE、MATE、Xfce 和其他一些桌面环境的开箱即用的体验,而无需额外的努力。喜欢 KDE 而不是 GNOME 吗?下载 Fedora 的 KDE 定制版,安装它,就像安装常规的 Fedora 一样。
|
||||
|
||||
Fedora 定制版中缺少的一个桌面环境是 Budgie 桌面。
|
||||
|
||||
### Budgie 走向独立
|
||||
|
||||
在 2014 年左右,Budgie 桌面随同 Solus Linux 项目一起推出。最近,Solus 和 Budgie 项目出现了一些 [倒退式的发展][3]。Budgie 项目现在已经 [从 Solus Linux 中独立出来了][4]。
|
||||
|
||||
自从首次发布以来,Budgie 就获得了一定的追随者。它的现代布局方式受到了许多 Linux 用户的喜爱。这也是许多其他主要 Linux 发行版(如 Ubuntu、Manjaro、openSUSE)开始提供 Budgie 版本的原因。
|
||||
|
||||
![Budgie 10.6][5]
|
||||
|
||||
到目前为止,Fedora 的产品中还没有 Budgie,但这可能会在 Fedora 的下一个版本中发生变化。
|
||||
|
||||
### Budgie 提交加入 Fedora 的申请
|
||||
|
||||
Budgie 项目的首席开发人员 Joshua Strobl 在 [Reddit 帖子][6] 中宣布了这一消息。
|
||||
|
||||
> 我现在已提交 Budgie 桌面及其它的附属软件(Budgie 控制中心、Budgie 屏幕保护程序、Budgie 桌面视图)加入到 Fedora 中的申请。从 Fedora rawhide(37)开始并向后移植到 36。它会得到“官方的”维护/支持,因为我自己在工作笔记本电脑上使用 Fedora Silverblue + rawhide,并且我以后会切换桌面到 Fedora Silverblue。
|
||||
|
||||
这意味着,如果该软件包得到了 Fedora 团队的批准,你应该就能在 Fedora 37 中(甚至有希望在 Fedora 36 中)安装 Budgie 和它的附属软件。
|
||||
|
||||
但这还不是故事的结束。Joshua 提到,他也在考虑引入并支持包含 Budgie 桌面的 Fedora 官方定制版。这意味着人们将能够下载一个预装了 Budgie(而不是 GNOME)桌面的 Fedora ISO。
|
||||
|
||||
目前还不清楚他的意思,有可能是一个 Budge 的 Fedora 官方定制版,也有可能是一个新的非官方的 Fedora 衍生版,名为 “Fudgie”,完全由他来维护。
|
||||
|
||||
### Fedora + Budgie 是一个好消息
|
||||
|
||||
无论如何,Fedora 的 Budgie 桌面都是个好消息。它为 Fedora 用户提供了更多选择,而 Budgie 是一个漂亮的桌面。同时喜欢 Fedora 和 Budgie 的人应该能够享受两全其美的体验。
|
||||
|
||||
我希望你同意我的看法。请在评论区也分享一下你的看法吧!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/fudgie-fedora-budgie-announcement/
|
||||
|
||||
作者:[Abhishek][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lkxed](https://github.com/lkxed)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/root/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/wp-content/uploads/2022/05/fedora-budgie.png
|
||||
[2]: https://spins.fedoraproject.org
|
||||
[3]: https://news.itsfoss.com/solus-co-lead-resign-budgie-serpent/
|
||||
[4]: https://news.itsfoss.com/budgie-10-6-release/
|
||||
[5]: https://news.itsfoss.com/wp-content/uploads/2022/04/budgie-10.61-1024x576.jpg
|
||||
[6]: https://www.reddit.com/r/Fedora/comments/uq3gah/budgie_desktop_has_now_been_submitted_for/
|
@ -0,0 +1,102 @@
|
||||
[#]: subject: "How To Reset Root Password In Fedora 36"
|
||||
[#]: via: "https://ostechnix.com/reset-root-password-in-fedora/"
|
||||
[#]: author: "sk https://ostechnix.com/author/sk/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "turbokernel"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14638-1.html"
|
||||
|
||||
在 Fedora 36 中如何重置 root 密码
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/26/094836cgtywrtwkywg2nem.jpg)
|
||||
|
||||
> 在 Fedora 中重置忘记的 root 密码。
|
||||
|
||||
你是否忘记了 Fedora 中的 root 密码?或者你想更改 Fedora 系统中的 root 用户密码?没问题!本手册将指导你在 Fedora 操作系统中完成更改或重置 root 密码的步骤。
|
||||
|
||||
**注意:** 本手册已在 Fedora 36 和 35 版本上进行了正式测试。下面提供的步骤与在 Fedora Silverblue 和旧 Fedora 版本中重置 root 密码的步骤相同。
|
||||
|
||||
**步骤 1** - 打开 Fedora 系统并按下 `ESC` 键,直到看到 GRUB 启动菜单。出现 GRUB 菜单后,选择要引导的内核并按下 `e` 编辑选定的引导条目。
|
||||
|
||||
![Grub Menu In Fedora 36][1]
|
||||
|
||||
**步骤 2** - 在下一个页面中,你将看到所有启动参数。找到名为 `ro` 的参数。
|
||||
|
||||
![Find ro Kernel Parameter In Grub Entry][2]
|
||||
|
||||
**步骤 3** - 将 `ro` 参数替换为 `rw init=/sysroot/bin/sh`。请注意 `rw` 和 `init=/sysroot`...之间的空格。修改后的内核参数行应如下所示。
|
||||
|
||||
![Modify Kernel Parameters][3]
|
||||
|
||||
**步骤 4** - 上述步骤更改参数后,按 `Ctrl+x` 进入紧急模式,即单用户模式。
|
||||
|
||||
在紧急模式下,输入以下命令以 **读/写** 模式挂载根文件系统(`/`)。
|
||||
|
||||
```
|
||||
chroot /sysroot/
|
||||
```
|
||||
|
||||
![Mount Root Filesystem In Read, Write Mode In Fedora Linux][4]
|
||||
|
||||
**步骤 5** - 现在使用 `passwd` 命令重置 root 密码:
|
||||
|
||||
```
|
||||
passwd root
|
||||
```
|
||||
|
||||
输入两次 root 密码。我建议使用强密码。
|
||||
|
||||
![Reset Or Change Root Password In Fedora][5]
|
||||
|
||||
**步骤 6** - 重置 root 密码后,运行以下命令在重启时启用 SELinux 重新标记:
|
||||
|
||||
```
|
||||
touch /.autorelabel
|
||||
```
|
||||
|
||||
![Enable SELinux Relabeling On Reboot In Fedora][6]
|
||||
|
||||
**步骤 7** - 最后,退出单用户模式并通过运行以下命令将 Fedora 系统重启到正常模式:
|
||||
|
||||
```
|
||||
exit
|
||||
```
|
||||
|
||||
```
|
||||
reboot
|
||||
```
|
||||
|
||||
等待 SELinux 重新标记完成。这将需要几分钟,具体时长取决于文件系统的大小和硬盘的速度。
|
||||
|
||||
![SELinux Filesystem Relabeling In Progress][7]
|
||||
|
||||
**步骤 8** - 文件系统重新标记完成后,你可以使用新的 root 密码登录到你的 Fedora 系统。
|
||||
|
||||
![Login To Fedora As Root User][8]
|
||||
|
||||
如你所见,在 Fedora 36 中重置 root 密码的步骤非常简单,并且与 [在 RHEL 中重置 root 密码][9] 及其衍生版本(如 CentOS、AlmaLinux 和 Rocky Linux)完全相同。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://ostechnix.com/reset-root-password-in-fedora/
|
||||
|
||||
作者:[sk][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[turbokernel](https://github.com/turbokernel)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://ostechnix.com/author/sk/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://ostechnix.com/wp-content/uploads/2022/05/Grub-Menu-In-Fedora-36.png
|
||||
[2]: https://ostechnix.com/wp-content/uploads/2021/11/Find-ro-Kernel-Parameter-In-Grub-Entry.png
|
||||
[3]: https://ostechnix.com/wp-content/uploads/2022/05/Modify-Kernel-Parameters.png
|
||||
[4]: https://ostechnix.com/wp-content/uploads/2022/05/Mount-Root-Filesystem-In-Read-Write-Mode-In-Fedora-Linux.png
|
||||
[5]: https://ostechnix.com/wp-content/uploads/2022/05/Reset-Or-Change-Root-Password-In-Fedora.png
|
||||
[6]: https://ostechnix.com/wp-content/uploads/2022/05/Enable-SELinux-Relabeling-On-Reboot-In-Fedora.png
|
||||
[7]: https://ostechnix.com/wp-content/uploads/2021/11/SELinux-filesystem-relabeling-in-progress.png
|
||||
[8]: https://ostechnix.com/wp-content/uploads/2022/05/Login-To-Fedora-As-Root-User.png
|
||||
[9]: https://ostechnix.com/how-to-reset-root-user-password-in-centos-8-rhel-8/
|
@ -0,0 +1,81 @@
|
||||
[#]: subject: "Microsoft has another Linux distribution and it is based on Debian"
|
||||
[#]: via: "https://news.itsfoss.com/microsoft-debian-distro/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14604-1.html"
|
||||
|
||||
微软还有另一个 Linux 发行版,而且是基于 Debian 的
|
||||
======
|
||||
|
||||
> 微软一直在为 Azure 云使用一个基于 Debian 的 Linux 发行版。我们开始揭开它的面纱了!
|
||||
|
||||
![微软 Debian][1]
|
||||
|
||||
微软在其大量的项目中利用了 Linux。近年来,你一定读过很多关于 WSL(或 WSL2)和微软制作的 Linux 发行版(即 **CBL Mariner**)的消息。
|
||||
|
||||
> CBL 是 “共用基础 Linux<rt>Common Base Linux</rt></ruby>”的缩写。
|
||||
|
||||
甚至在 Windows 11 上,微软也在不断地改进 [WSL][2] 的体验。
|
||||
|
||||
虽然 CBL Mariner 被用来支持 WSLg(WSL 2 的 GUI 部分)和 Azure,但最近一些媒体([ZDNet][3])报道发现了微软内部使用的另一个 Linux 发行版。
|
||||
|
||||
微软肯定喜欢 Linux,对吗?
|
||||
|
||||
### CBL-Delridge:一个基于 Debian 的 Linux 发行版
|
||||
|
||||
![][4]
|
||||
|
||||
微软维护着一个基于 Debian 的发行版,它被用来支持 Azure 的“<ruby>云端外壳<rt>Cloud Shell</rt></ruby>”。它的名字是 “CBL-Delridge”。
|
||||
|
||||
感谢 [Hayden Barnes][5],他是 SUSE 公司负责 Windows 容器的高级工程经理。
|
||||
|
||||
在他 2022 年 2 月的一篇 [旧博文][6] 中,他透露了关于它的更多细节,并帮助你构建它以在需要时将其导入 WSL。
|
||||
|
||||
与从头构建的 CBL-Mariner 不同,CBL-Delridge(CBL-D)是基于 Debian 10(Buster)的。
|
||||
|
||||
看到 Debian 在这里受到青睐并不奇怪,即使是 [谷歌也为其内部的 Linux 发行版 gLinux 抛弃了 Ubuntu 而选择了 Debian][7]。
|
||||
|
||||
有趣的是,微软在 2020 年发布了这个供内部使用的发行版(根据 Hayden 维护的 [微软的开源举措的非官方时间表][8]),而我们在 2022 年才知道了它。
|
||||
|
||||
![][9]
|
||||
|
||||
CBL-Delridge 也采用了同样的版本号 10(巧合),代号为 “Quinault”。解析一下这个名字,ZDNet 指出,Delridge 是西雅图西部的一个区,而 Quinault 指的是华盛顿州奥林匹克国家公园的一个山谷。
|
||||
|
||||
### 构建 CBL-Delridge
|
||||
|
||||
与普通的 Linux 发行版不同,你找不到它的可以公开下载的镜像文件。
|
||||
|
||||
考虑到 CBL-D 的 APT 软件包库是公开的,如果你出于任何需求想测试它,你可以构建你的 CBL-D 镜像。
|
||||
|
||||
你也可以把它导入 WSL 中。[Hayden 的博文][10] 解释了如何使用 debootstrap 来开始构建镜像,然后将其导入 WSL。
|
||||
|
||||
请注意,CBL-D 并不完全是 Debian 的替代品。所以,你可能无法找到所有你喜欢的软件包。要了解更多的信息,你可以浏览 Hayden 的博文。
|
||||
|
||||
你对微软的内部使用的 Linux 发行版有什么看法?你试过其中一个吗?请在评论中告诉我你的想法。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/microsoft-debian-distro/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/wp-content/uploads/2022/05/microsoft-new-debian-based-linux-distro.jpg
|
||||
[2]: https://news.itsfoss.com/windows-11-wsl/
|
||||
[3]: https://www.zdnet.com/article/surprise-theres-yet-another-microsoft-linux-distro-cbl-delridge/
|
||||
[4]: https://news.itsfoss.com/wp-content/uploads/2022/05/azure-delridge.png
|
||||
[5]: https://twitter.com/unixterminal
|
||||
[6]: https://boxofcables.dev/building-cbl-d-microsofts-other-linux-distro/
|
||||
[7]: https://itsfoss.com/goobuntu-glinux-google/
|
||||
[8]: https://github.com/sirredbeard/microsoft-opensource
|
||||
[9]: https://news.itsfoss.com/wp-content/uploads/2022/05/wsl-cbl-delridge-1024x600.png
|
||||
[10]: https://boxofcables.dev/building-cbl-d-microsofts-other-linux-distro/
|
@ -0,0 +1,123 @@
|
||||
[#]: subject: "Structured Data Processing with Spark SQL"
|
||||
[#]: via: "https://www.opensourceforu.com/2022/05/structured-data-processing-with-spark-sql/"
|
||||
[#]: author: "Phani Kiran https://www.opensourceforu.com/author/phani-kiran/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14631-1.html"
|
||||
|
||||
用 Spark SQL 进行结构化数据处理
|
||||
======
|
||||
|
||||
> Spark SQL 是 Spark 生态系统中处理结构化格式数据的模块。它在内部使用 Spark Core API 进行处理,但对用户的使用进行了抽象。这篇文章深入浅出地告诉你 Spark SQL 3.x 的新内容。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/24/093036xaf6kaz1auaf4a7s.jpg)
|
||||
|
||||
有了 Spark SQL,用户可以编写 SQL 风格的查询。这对于精通结构化查询语言或 SQL 的广大用户群体来说,基本上是很有帮助的。用户也将能够在结构化数据上编写交互式和临时性的查询。Spark SQL 弥补了<ruby>弹性分布式数据集<rt>resilient distributed data sets</rt></ruby>(RDD)和关系表之间的差距。RDD 是 Spark 的基本数据结构。它将数据作为分布式对象存储在适合并行处理的节点集群中。RDD 很适合底层处理,但在运行时很难调试,程序员不能自动推断<ruby>模式<rt>schema</rt></ruby>。另外,RDD 没有内置的优化功能。Spark SQL 提供了<ruby>数据帧<rt>DataFrame</rt></ruby>和数据集来解决这些问题。
|
||||
|
||||
Spark SQL 可以使用现有的 Hive 元存储、SerDes 和 UDF。它可以使用 JDBC/ODBC 连接到现有的 BI 工具。
|
||||
|
||||
### 数据源
|
||||
|
||||
大数据处理通常需要处理不同的文件类型和数据源(关系型和非关系型)的能力。Spark SQL 支持一个统一的数据帧接口来处理不同类型的源,如下所示。
|
||||
|
||||
* 文件:
|
||||
* CSV
|
||||
* Text
|
||||
* JSON
|
||||
* XML
|
||||
* JDBC/ODBC:
|
||||
* MySQL
|
||||
* Oracle
|
||||
* Postgres
|
||||
* 带模式的文件:
|
||||
* AVRO
|
||||
* Parquet
|
||||
* Hive 表:
|
||||
* Spark SQL 也支持读写存储在 Apache Hive 中的数据。
|
||||
|
||||
通过数据帧,用户可以无缝地读取这些多样化的数据源,并对其进行转换/连接。
|
||||
|
||||
### Spark SQL 3.x 的新内容
|
||||
|
||||
在以前的版本中(Spark 2.x),查询计划是基于启发式规则和成本估算的。从解析到逻辑和物理查询计划,最后到优化的过程是连续的。这些版本对转换和行动的运行时特性几乎没有可见性。因此,由于以下原因,查询计划是次优的:
|
||||
|
||||
* 缺失和过时的统计数据
|
||||
* 次优的启发式方法
|
||||
* 错误的成本估计
|
||||
|
||||
Spark 3.x 通过使用运行时数据来迭代改进查询计划和优化,增强了这个过程。前一阶段的运行时统计数据被用来优化后续阶段的查询计划。这里有一个反馈回路,有助于重新规划和重新优化执行计划。
|
||||
|
||||
![Figure 1: Query planning][2]
|
||||
|
||||
#### 自适应查询执行(AQE)
|
||||
|
||||
查询被改变为逻辑计划,最后变成物理计划。这里的概念是“重新优化”。它利用前一阶段的可用数据,为后续阶段重新优化。正因为如此,整个查询的执行要快得多。
|
||||
|
||||
AQE 可以通过设置 SQL 配置来启用,如下所示(Spark 3.0 中默认为 false):
|
||||
|
||||
```
|
||||
spark.conf.set(“spark.sql.adaptive.enabled”,true)
|
||||
```
|
||||
|
||||
#### 动态合并“洗牌”分区
|
||||
|
||||
Spark 在“<ruby>洗牌<rt>shuffle</rt></ruby>”操作后确定最佳的分区数量。在 AQE 中,Spark 使用默认的分区数,即 200 个。这可以通过配置来启用。
|
||||
|
||||
```
|
||||
spark.conf.set(“spark.sql.adaptive.coalescePartitions.enabled”,true)
|
||||
```
|
||||
|
||||
#### 动态切换连接策略
|
||||
|
||||
广播哈希是最好的连接操作。如果其中一个数据集很小,Spark 可以动态地切换到广播连接,而不是在网络上“洗牌”大量的数据。
|
||||
|
||||
#### 动态优化倾斜连接
|
||||
|
||||
如果数据分布不均匀,数据会出现倾斜,会有一些大的分区。这些分区占用了大量的时间。Spark 3.x 通过将大分区分割成多个小分区来进行优化。这可以通过设置来启用:
|
||||
|
||||
```
|
||||
spark.conf.set(“spark.sql.adaptive.skewJoin.enabled”,true)
|
||||
```
|
||||
|
||||
![Figure 2: Performance improvement in Spark 3.x (Source: Databricks)][3]
|
||||
|
||||
### 其他改进措施
|
||||
|
||||
此外,Spark SQL 3.x还支持以下内容。
|
||||
|
||||
#### 动态分区修剪
|
||||
|
||||
3.x 将只读取基于其中一个表的值的相关分区。这消除了解析大表的需要。
|
||||
|
||||
#### 连接提示
|
||||
|
||||
如果用户对数据有了解,这允许用户指定要使用的连接策略。这增强了查询的执行过程。
|
||||
|
||||
#### 兼容 ANSI SQL
|
||||
|
||||
在兼容 Hive 的早期版本的 Spark 中,我们可以在查询中使用某些关键词,这样做是完全可行的。然而,这在 Spark SQL 3 中是不允许的,因为它有完整的 ANSI SQL 支持。例如,“将字符串转换为整数”会在运行时产生异常。它还支持保留关键字。
|
||||
|
||||
#### 较新的 Hadoop、Java 和 Scala 版本
|
||||
|
||||
从 Spark 3.0 开始,支持 Java 11 和 Scala 2.12。 Java 11 具有更好的原生协调和垃圾校正,从而带来更好的性能。 Scala 2.12 利用了 Java 8 的新特性,优于 2.11。
|
||||
|
||||
Spark 3.x 提供了这些现成的有用功能,而无需开发人员操心。这将显着提高 Spark 的整体性能。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.opensourceforu.com/2022/05/structured-data-processing-with-spark-sql/
|
||||
|
||||
作者:[Phani Kiran][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.opensourceforu.com/author/phani-kiran/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.opensourceforu.com/wp-content/uploads/2022/04/Spark-SQL-Data-cluster.jpg
|
||||
[2]: https://www.opensourceforu.com/wp-content/uploads/2022/04/Figure-1-Query-planning.jpg
|
||||
[3]: https://www.opensourceforu.com/wp-content/uploads/2022/04/Figure-2-Performance-improvement-in-Spark-3.x-Source-Databricks.jpg
|
@ -0,0 +1,110 @@
|
||||
[#]: subject: "Adobe Illustrator Alternative Inkscape Releases Version 1.2"
|
||||
[#]: via: "https://news.itsfoss.com/inkscape-1-2-release/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lkxed"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14615-1.html"
|
||||
|
||||
Adobe Illustrator 的替代品 Inkscape 发布了 1.2 版本
|
||||
======
|
||||
|
||||
> Inkscape 1.2 是一个激动人心的更新,包含许多有用的改进和新增功能。试一试吧!
|
||||
|
||||
![Inkscape][1]
|
||||
|
||||
Inkscape 是一个流行的开源矢量图形处理程序,可用于 Linux、Windows 和 macOS。
|
||||
|
||||
它的最新版本侧重于改进现有工具,以及提供更多自定义选项。
|
||||
|
||||
此外,它还有一些新增功能。让我们来看看吧!
|
||||
|
||||
### Inkscape 1.2:有什么新功能?
|
||||
|
||||
![Inkscape 1.2 is here!][2]
|
||||
|
||||
Inkscape 1.2 是一个激动人心的更新,它包含了许多有用的增强功能。其中一些关键变化包括:
|
||||
|
||||
* 改进的渐变编辑器
|
||||
* 新的捕捉模式
|
||||
* 支持多页文档
|
||||
* 改进的导出对话框
|
||||
* 可定制的工具栏
|
||||
|
||||
在这里,我将重点介绍重要的功能改进:
|
||||
|
||||
#### 多页文档支持
|
||||
|
||||
![][4]
|
||||
|
||||
你现在可以在同一个文档中创建多个标准/自定义大小的页面,并把它们保存为一个多页的 PDF 文档。
|
||||
|
||||
不仅是导出,你还可以导入多页 PDF 来简化操作。
|
||||
|
||||
### 自定义调色板
|
||||
|
||||
你现在可以轻松地更改尺寸、重新配置颜色,以此来尝试所有可用的调色板,然后选择你真正喜欢的颜色。
|
||||
|
||||
特别是当你需要在用户界面中使用多个调色板时,它会让操作更流畅。
|
||||
|
||||
### 新的“平铺”实时路径效果
|
||||
|
||||
如果你正在处理很多个对象,并想尝试不同路径效果,那么你应该会喜欢新的平铺实时路径效果。
|
||||
|
||||
你可以轻松调整镜像模式、调整间隙、添加行和列,从而获得大量发挥创意的机会。
|
||||
|
||||
### 图层和对象对话框
|
||||
|
||||
![][5]
|
||||
|
||||
大多数改进使得体验比以前更直接。使用新的合并图层和对象对话框,你可以根据要查找的图层,快速组织/查找对象。
|
||||
|
||||
你甚至可以自定义图层和对象颜色来区分它们。
|
||||
|
||||
### 导出对话框
|
||||
|
||||
![][6]
|
||||
|
||||
现在,导出对话框为你提供了选择简单/批量导出的选项,以及选择文件格式和 DPI 设置的能力。
|
||||
|
||||
### 其他改进
|
||||
|
||||
除了上面的主要亮点外,还有其他的一些重大变化,包括:
|
||||
|
||||
* 两种新的画布捕捉模式有助于对齐对象
|
||||
* 你可以在“<ruby>填充和描边<rt>Fill and Stroke</rt></ruby>”对话框中选择渐变
|
||||
* 编辑<ruby>标记<rt>marker</rt></ruby>的能力
|
||||
* 改进了与扩展的兼容性
|
||||
* 更新了 SVG 字体编辑器
|
||||
* 性能改进
|
||||
* 可配置的工具栏
|
||||
|
||||
你可以参考 [Inkscape 1.2 发行说明][7] 来查看所有的技术变化。
|
||||
|
||||
### 下载 Inkscape 1.2
|
||||
|
||||
你可以从它的官方网站下载 AppImage 格式的 Inkscape 1.2 软件包,或查看其他适用于 Windows/macOS 平台的可用软件包。
|
||||
|
||||
> **[Inkscape 1.2][8]**
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/inkscape-1-2-release/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lkxed](https://github.com/lkxed)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/wp-content/uploads/2022/05/inkscape-1-2.jpg
|
||||
[2]: https://youtu.be/1U4hVbvRr_g
|
||||
[4]: https://news.itsfoss.com/wp-content/uploads/2022/05/inkscape-1-2-multi-document.jpg
|
||||
[5]: https://news.itsfoss.com/wp-content/uploads/2022/05/inkscape-1-2layers-objects-1024x593.jpg
|
||||
[6]: https://news.itsfoss.com/wp-content/uploads/2022/05/inkscape1-2-export-1024x688.jpg
|
||||
[7]: https://media.inkscape.org/media/doc/release_notes/1.2/Inkscape_1.2.html
|
||||
[8]: https://inkscape.org/release/inkscape-1.2/
|
@ -0,0 +1,115 @@
|
||||
[#]: subject: "Kali Linux 2022.2 Release Adds an Amusing New Feature for the Hackers to Scare People"
|
||||
[#]: via: "https://news.itsfoss.com/kali-linux-2022-2-release/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "wxy"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14606-1.html"
|
||||
|
||||
Kali Linux 2022.2 发布:增加了一个吓唬人的有趣新功能
|
||||
======
|
||||
|
||||
> Kali Linux 2022.2 是今年的第二次更新,增加了一些有趣的内容。
|
||||
|
||||
![kali linux][1]
|
||||
|
||||
Kali Linux 不是你寻常使用的 Linux 发行版。它是专门为渗透测试和道德黑客学习及实验而量身打造的。
|
||||
|
||||
在新的 Kali Linux 版本中,增加了一些有趣的工具和功能。让我们来看看 Kali Linux 2022.2 的亮点。
|
||||
|
||||
### Kali Linux 2022.2 有什么新功能?
|
||||
|
||||
Kali Linux 2022.2 是一个有趣的版本,它引入了更新的桌面环境,升级了 Linux 内核,增加了新的工具,以及更多的改进。
|
||||
|
||||
不仅仅限于通常的完善,你还可以看到一个新的屏幕保护程序,其中有许多令人惊讶的元素。
|
||||
|
||||
#### 带有好莱坞怀旧色彩的新屏保
|
||||
|
||||
Kali Linux 已经出现在许多黑客相关的电视节目/电影(如《<ruby>黑客军团<rt>Mr. Robot</rt></ruby>》)中,看起来酷极了。
|
||||
|
||||
更进一步,Kali Linux 增加了一个新的屏幕保护程序(你可以单独安装),其中有来自好莱坞的令人惊讶的元素和一些吓唬人的黑客场景。
|
||||
|
||||
他们在屏保中调侃了《黑客帝国》的尼奥,还添加了一个漂亮的 Kali Linux 标志。
|
||||
|
||||
![][2]
|
||||
|
||||
整个屏幕保护程序包括几个非常棒的元素。要安装并立即启动它,你可以输入以下命令:
|
||||
|
||||
```
|
||||
sudo apt -y install kali-screensaver
|
||||
sudo apt -y install hollywood-activate
|
||||
hollywood-activate
|
||||
```
|
||||
|
||||
![VIDEO](https://player.vimeo.com/video/710680907)
|
||||
|
||||
#### GNOME 42
|
||||
|
||||
![][3]
|
||||
|
||||
Kali Linux 终于包含了新的 [GNOME 42][4] 桌面环境。所以,在 Kali Linux 自然带有 GNOME 42 的所有优点,包括新的屏幕截图用户界面。
|
||||
|
||||
另外,现在你将会在 GNOME 桌面环境中获得一致的深浅主题体验。
|
||||
|
||||
![][5]
|
||||
|
||||
#### KDE Plasma 5.24
|
||||
|
||||
对于 KDE 粉丝,Kali Linux 2022.2 也带来了新的 [KDE Plasma 5.24][6] LTS 桌面环境。
|
||||
|
||||
![][7]
|
||||
|
||||
#### 新的 Kali Linux 工具
|
||||
|
||||
新的工具总是每个新版本的重点。一些新增加的工具包括:
|
||||
|
||||
* BruteShark - 网络取证分析工具(NFAT)
|
||||
* Evil-WinRM - Ultimate WinRM shell
|
||||
* Hakrawler - 网络爬虫,设计用于轻松、快速发现端点和资产
|
||||
* Httpx - 快速和多用途的 HTTP 工具箱
|
||||
* Sparrow-wifi - 用于 Linux 的图形化 Wi-Fi 分析器
|
||||
|
||||
#### 其他改进
|
||||
|
||||
该版本还有许多其他实质性的改进。主要的亮点包括。
|
||||
|
||||
* 对终端进行了调整,以加强语法高亮、自动补完和输出
|
||||
* 自动复制丢失的配置
|
||||
* 支持 VirtualBox 共享文件夹
|
||||
* 增加了新的应用程序图标
|
||||
* 为多显示器设置调整了默认墙纸
|
||||
* 针对 ARM 设备的更新
|
||||
* Linux 内核 5.16
|
||||
|
||||
要探索更多关于该版本的信息,你可以查看 [官方发布公告][8]。
|
||||
|
||||
### 下载 Kali Linux 2022.2
|
||||
|
||||
你应该能够在 [官方下载页面][9] 中找到该镜像。根据你的要求选择合适的版本,然后安装它。
|
||||
|
||||
> **[Kali Linux 2022.2][10]**
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/kali-linux-2022-2-release/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[wxy](https://github.com/wxy)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/wp-content/uploads/2022/05/kali-2022-2-release-new.jpg
|
||||
[2]: https://news.itsfoss.com/wp-content/uploads/2022/05/kali-linux-screensaver.jpg
|
||||
[3]: https://news.itsfoss.com/wp-content/uploads/2022/05/kali-linux-gnome-42.jpg
|
||||
[4]: https://news.itsfoss.com/gnome-42-features/
|
||||
[5]: https://news.itsfoss.com/wp-content/uploads/2022/05/kali-linux-gnome-42-screenshot.jpg
|
||||
[6]: https://news.itsfoss.com/kde-plasma-5-24-lts-release/
|
||||
[7]: https://news.itsfoss.com/wp-content/uploads/2022/05/kali-linux-kde-5-24-1024x640.jpg
|
||||
[8]: https://www.kali.org/blog/kali-linux-2022-2-release/
|
||||
[9]: https://www.kali.org/get-kali/
|
||||
[10]: https://www.kali.org/get-kali/
|
@ -0,0 +1,56 @@
|
||||
[#]: subject: "Five common mistakes when using automation"
|
||||
[#]: via: "https://fedoramagazine.org/five-common-mistakes-when-using-automation/"
|
||||
[#]: author: "Gary Scarborough https://fedoramagazine.org/author/gscarbor/"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14657-1.html"
|
||||
|
||||
使用自动化时的五个常见错误
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/31/151450ukwk98weqgefgowa.jpg)
|
||||
|
||||
随着自动化扩展到涵盖 IT 的更多方面,越来越多的管理员正在学习自动化技能并应用它们来减轻他们的工作量。自动化可以减轻重复性任务的负担,并为基础设施增加一定程度的一致性。但是,当 IT 工作人员部署自动化时,会出现可能对大大小小的基础设施造成严重破坏的常见错误。在自动化部署中通常会出现五个常见错误。
|
||||
|
||||
### 缺乏测试
|
||||
|
||||
初学者常犯的错误是自动化脚本没有经过全面测试。由于拼写错误或逻辑错误,简单的 shell 脚本可能会对服务器产生不利影响。将该错误乘以基础架构中的服务器数量,你可能会遇到一大堆问题需要清理。在大规模部署之前始终测试你的自动化脚本。
|
||||
|
||||
### 意外负载
|
||||
|
||||
经常发生的第二个错误是没有预测脚本可能对其他资源施加的系统负载。当目标是十几个服务器时,运行从仓库下载文件或安装包的脚本可能没问题。脚本通常在成百上千台服务器上运行。这种负载可以使支持服务停止或完全崩溃。不要忘记考虑端点影响或设置合理的并发率。
|
||||
|
||||
### 离开脚本
|
||||
|
||||
自动化工具的一种用途是确保符合标准设置。自动化可以轻松确保组中的每台服务器都具有完全相同的设置。如果该组中的服务器需要根据该基线进行更改,同时管理员不了解合规标准,那么可能会出现问题。安装和启用不需要和不想要的服务,从而导致可能的安全问题。
|
||||
|
||||
### 缺乏文档
|
||||
|
||||
管理员的一项固定职责应该是记录他们的工作。由于合同到期、升职或定期员工流动,公司可能会在 IT 部门频繁招聘新员工。公司内的工作组相互隔离也很常见。由于这些原因,重要的是记录哪些自动化已经到位。与用户运行脚本不同,自动化可能会在创建它的人离开组之后继续很长时间。管理员可能会发现自己在其基础设施中面临着来自未经检查的自动化的奇怪行为。
|
||||
|
||||
### 缺乏经验
|
||||
|
||||
列表中的最后一个错误是管理员对他们正在自动化的系统不够了解。管理员经常被雇用到他们没有接受过足够培训且没有人可以求教的职位上工作。自 COVID 以来,当公司努力填补空缺时,这一点尤其重要。然后管理员被迫处理他们没有设置并且可能不完全理解的基础设施。这可能会导致非常低效的脚本浪费资源或配置错误的服务器。
|
||||
|
||||
### 结论
|
||||
|
||||
越来越多的管理员正在学习自动化来帮助他们完成日常任务。因此,自动化正被应用于更多的技术领域。希望此列表将有助于防止新用户犯这些错误,并敦促经验丰富的管理员重新评估他们的 IT 策略。自动化旨在减轻重复性任务的负担,而不是为最终用户带来更多工作。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/five-common-mistakes-when-using-automation/
|
||||
|
||||
作者:[Gary Scarborough][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://fedoramagazine.org/author/gscarbor/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2022/05/modern-times-816x345.jpg
|
||||
[2]: https://en.wikipedia.org/wiki/Modern_Times_(film)
|
||||
[3]: https://commons.wikimedia.org/wiki/File:Chaplin_-_Modern_Times.jpg
|
@ -0,0 +1,42 @@
|
||||
[#]: subject: "Google To Start Distributing A Collection Of Open Source Software libraries"
|
||||
[#]: via: "https://www.opensourceforu.com/2022/05/google-to-start-distributing-a-collection-of-open-source-software-libraries/"
|
||||
[#]: author: "Laveesh Kocher https://www.opensourceforu.com/author/laveesh-kocher/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "beamrolling"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14641-1.html"
|
||||
|
||||
谷歌开始分发一系列开源软件库
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/27/104331cwwqji26wlwwfw2n.jpg)
|
||||
|
||||
5 月 17 日,谷歌推出了一项新计划,该计划向谷歌云用户策划并提供经过安全审查的开源包选项,以保护开源软件供应链。该公司在一篇 [博文][2] 中宣布了这项名为 “<ruby>安心开源软件<rt>Assured Open Source Software</rt></ruby>” 的新服务。在博文中,谷歌云安全和隐私部门产品经理 Andy Chang 强调了保障开源软件的一些问题,并强调了谷歌对开源的承诺。
|
||||
|
||||
“开发者社区、企业及政府对软件供应链风险的意识越来越强,”Chang 写道,并以去年的 log4j 重大漏洞为例。“谷歌仍是开源代码最大的维护者、贡献者和使用者之一,并深入参与了帮助开源软件生态系统更加安全的工作。”
|
||||
|
||||
据谷歌称,“安心开源软件”服务将让云客户能够访问谷歌的大量软件审计知识。另据其称,所有通过该服务提供的开源软件包也在公司内部使用,该公司会定期检查和分析其漏洞。
|
||||
|
||||
谷歌目前正在审核的 550 个重要开源库的清单可以在 [GitHub][3] 上找到。虽然这些库都可以独立于谷歌下载,但该计划将呈现通过谷歌云提供的审核版本,防止开发者破坏广泛使用的开放源码库。这项服务现在处于预先体验阶段,将在 2022 年第三季度准备好进行更广泛的消费者测试。
|
||||
|
||||
谷歌的声明只是广大行业努力加强开源软件供应链的安全的一部分,这份努力得到了拜登政府的支持。今年 1 月,美国国土安全部和美国网络安全与基础设施安全局的代表与美国一些主要 IT 公司的高管会面,研究 log4j 漏洞之后的开源软件安全问题。此后,有关公司在最近的一次峰会上承诺提供超过 3000 万美元的资金,以改善开源软件的安全问题。
|
||||
|
||||
除了现金,谷歌还在投入工程时间来确保供应链的安全。该公司已宣布发展一个“<ruby>开源维护小组<rt>Open Source Maintenance Crew</rt></ruby>”,该团队将与库维护人员合作以提高安全性。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.opensourceforu.com/2022/05/google-to-start-distributing-a-collection-of-open-source-software-libraries/
|
||||
|
||||
作者:[Laveesh Kocher][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[beamrolling](https://github.com/beamrolling)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.opensourceforu.com/author/laveesh-kocher/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.opensourceforu.com/wp-content/uploads/2022/05/google3-1-e1652863988525.jpg
|
||||
[2]: https://cloud.google.com/blog/products/identity-security/introducing-assured-open-source-software-service
|
||||
[3]: https://github.com/google/oss-fuzz/tree/master/projects
|
@ -0,0 +1,128 @@
|
||||
[#]: subject: "How To Reset Sudo Password In Ubuntu 22.04 / 20.04 LTS"
|
||||
[#]: via: "https://ostechnix.com/how-to-reset-sudo-password-in-ubuntu-20-04-lts/"
|
||||
[#]: author: "sk https://ostechnix.com/author/sk/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "robsean"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14648-1.html"
|
||||
|
||||
如何在 Ubuntu 22.04 / 20.04 LTS 中重新设置 sudo 密码
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/29/083429wzrvirffinihrfv5.jpg)
|
||||
|
||||
> 在 Ubuntu 中重新设置已忘记的 root 用户的密码
|
||||
|
||||
这篇简单的指南将向你解释,如何在 Ubuntu 22.04 好 20.04 LTS 桌面环境中,以及从服务器版本中的 <ruby>恢复<rt>rescue</rt></ruby> 模式中重新设置 sudo 密码。
|
||||
|
||||
### 介绍
|
||||
|
||||
在 [安装 Ubuntu][1] 时,创建的一个新用户将会带有 `sudo` 权限,用以执行各种各样的管理任务。
|
||||
|
||||
如果你的 Ubuntu 系统有多个 `sudo` 用户,你能够从另外一个 `sudo` 用户的账号下,轻松地重新设置所忘记的一个 `sudo` 用户或管理员用户的密码。
|
||||
|
||||
如果你只有一个 `sudo` 用户,并且忘记了密码怎么办?没有问题! 从 Ubuntu 的 <ruby>恢复<rt>rescue</rt></ruby> 或 <ruby>单一用户<rt>single user</rt></ruby> 模式中恢复 `sudo` 用户密码很容易。
|
||||
|
||||
虽然这篇指南是在 Ubuntu 22.04 和 20.04 LTS 版本上进行的正式测试,不过,下面给定的步骤对于其它的 Ubuntu 版本和衍生版本来说是相同的。
|
||||
|
||||
### 在 Ubuntu 22.04 / 20.04 LTS 中重新设置 sudo 密码
|
||||
|
||||
首先,启动你的 Ubuntu 系统到 <ruby>恢复<rt>rescue</rt></ruby> 模式下,来重新设置一个 `sudo` 用户的密码,操作如下面的链接所述。
|
||||
|
||||
> [如何启动到 Ubuntu 22.04 / 20.04 / 18.04 的 <ruby>恢复<rt>rescue</rt></ruby> 模式 或 <ruby>急救<rt>Emergency</rt></ruby>模式 ][2]
|
||||
|
||||
现在,进入到 <ruby>恢复<rt>rescue</rt></ruby> 模式下,通过运行下面的命令,以读/写的模式挂载根(`/`)文件系统:
|
||||
|
||||
```
|
||||
# mount -n -o remount,rw /
|
||||
```
|
||||
|
||||
现在,使用 `passwd` 命令来重新设置 `sudo` 用户的密码:
|
||||
|
||||
```
|
||||
# passwd ostechnix
|
||||
```
|
||||
|
||||
在这里,`ostechnix` 是 sudo 用户的名称。使用你自己的用户名称来替换掉它。
|
||||
|
||||
输入两次密码:
|
||||
|
||||
```
|
||||
New password:
|
||||
Retype new password:
|
||||
passwd: password updated successfully
|
||||
```
|
||||
|
||||
![Reset Sudo Password In Ubuntu 22.04 / 20.04 LTS][3]
|
||||
|
||||
就这样。我们已经重新设置 `sudo` 用户密码。如果你按照上面链接所述的方法 1 进入到 <ruby>恢复<rt>rescue</rt></ruby> 模式,按下 `Ctrl+d` 组合键来启动到正常模式。或者,你也可以输入下面的任意一个命令来启动到正常模式。
|
||||
|
||||
```
|
||||
# systemctl default
|
||||
```
|
||||
|
||||
或,
|
||||
|
||||
```
|
||||
# exit
|
||||
```
|
||||
|
||||
如果你想重新启动系统,而不是启动到正常模式,输入:
|
||||
|
||||
```
|
||||
# systemctl reboot
|
||||
```
|
||||
|
||||
如果你已经按照上面链接所述的方法 2 进入到<ruby>恢复<rt>rescue</rt></ruby> 模式,输入:
|
||||
|
||||
```
|
||||
# exit
|
||||
```
|
||||
|
||||
你将返回到 <ruby>恢复菜单<rt>recovery menu</rt></ruby>。现在选择 “<ruby>恢复正常启动<rt>Resume normal boot</rt></ruby>”,并按下回车键。
|
||||
|
||||
![Boot Into Normal Mode In Ubuntu][4]
|
||||
|
||||
在强调一次,选择 “<ruby>确定<rt>OK</rt></ruby>” 按钮,并按下回车按键来继续启动到正常模式:
|
||||
|
||||
![Exit Recovery Mode And Boot Into Normal Mode][5]
|
||||
|
||||
现在,你在运行管理命令时可以使用新的 `sudo` 密码。
|
||||
|
||||
### 如果我把用户名称和密码都忘了怎么办?
|
||||
|
||||
如果你忘记了用户名称,在 <ruby>恢复<rt>rescue</rt></ruby> 模式下,你可以很容易地列出你的 Linux 系统中的用户名称,使用目录:
|
||||
|
||||
```
|
||||
# cat etc/passwd
|
||||
```
|
||||
|
||||
来自我 Ubuntu 22.04 系统的输出示例:
|
||||
|
||||
```
|
||||
[...]
|
||||
ostechnix:x:1000:1000:Ostechnix,,,:/home/ostechnix:/bin/bash
|
||||
[...]
|
||||
```
|
||||
|
||||
好了,现在,你找到用户名称了。只需要按照上面的步骤来重新设置用户的密码即可。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://ostechnix.com/how-to-reset-sudo-password-in-ubuntu-20-04-lts/
|
||||
|
||||
作者:[sk][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[robsean](https://github.com/robsean)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://ostechnix.com/author/sk/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://ostechnix.com/install-ubuntu-desktop/
|
||||
[2]: https://ostechnix.com/how-to-boot-into-rescue-mode-or-emergency-mode-in-ubuntu-18-04/
|
||||
[3]: https://ostechnix.com/wp-content/uploads/2022/05/Reset-Sudo-Password-In-Ubuntu.png
|
||||
[4]: https://ostechnix.com/wp-content/uploads/2020/05/Boot-into-normal-mode-in-Ubuntu.png
|
||||
[5]: https://ostechnix.com/wp-content/uploads/2020/05/Booting-into-normal-mode-from-rescue-mode-in-Ubuntu.png
|
@ -0,0 +1,143 @@
|
||||
[#]: subject: "ONLYOFFICE 7.1 Release Adds ARM Compatibility, a New PDF Viewer, and More Features"
|
||||
[#]: via: "https://news.itsfoss.com/onlyoffice-7-1-release/"
|
||||
[#]: author: "Jacob Crume https://news.itsfoss.com/author/jacob/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "PeterPan0106"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14630-1.html"
|
||||
|
||||
ONLYOFFICE 7.1 发布,新增针对 ARM 的支持、新的 PDF 查看器
|
||||
======
|
||||
|
||||
> ONLYOFFICE Docs 7.1 带来了期待已久的针对文档、电子表格以及演示文稿编辑器的更新。对 ARM 的支持更是画龙点睛之笔。
|
||||
|
||||
![onlyoffice 7.1][1]
|
||||
|
||||
ONLYOFFICE,被认为是 [最佳的微软 Office 替代品][2] 之一,刚刚发布了最新的 7.1 版本更新。
|
||||
|
||||
或许你不了解,ONLYOFFICE 可以在自托管的服务器(例如 Nextcloud)或者桌面上在线使用。
|
||||
|
||||
这个版本最为激动人心的变化就是初步支持了基于 ARM 的设备,例如树莓派。
|
||||
|
||||
接下来请让我们一起看看有什么新的变化。
|
||||
|
||||
### ONLYOFFICE 7.1 : 新变化
|
||||
|
||||
[![ONLYOFFICE Docs 7.1: PDF viewer, animations, print preview in spreadsheets][4]][3]
|
||||
|
||||
除了对 ARM 的支持,ONLYOFFICE 7.1 还提供了如下新功能:
|
||||
|
||||
* 一个全新的 PDF、XPS 和 DjVu 文件查看器
|
||||
* 更方便和可定制的图形选项
|
||||
* 电子表格打印预览
|
||||
* 演示文稿中的动画
|
||||
* 支持 SmartArt 对象
|
||||
|
||||
#### ARM 兼容
|
||||
|
||||
树莓派这样的基于 ARM 的设备正变得越来越热门,许多人已经期待了许久 ONLYOFFICE 对 ARM 架构的支持。
|
||||
|
||||
随着 7.1 版本的发布,ONLYOFFICE Docs 现在可以在所有 ARM64 设备上运行。由于 ARM 设备的效率和安全性的提高,我认为这将对 ONLYOFFICE 的未来产生很大的促进作用。
|
||||
|
||||
#### 全新的 PDF、XPS 和 DjVu 文件查看器
|
||||
|
||||
![onlyoffice][5]
|
||||
|
||||
这是许多其他办公软件多年来的一个关键功能。从 ONLYOFFICE 7.1 开始,用户现在可以更方便地使用文档编辑器来查看 PDF、XPS 和 DjVu 文件。
|
||||
|
||||
新的视图选项卡为用户提供了一个页面缩略图视图和一个导航栏,其视图更为紧凑和简化。
|
||||
|
||||
此外,用户现在还可以将 PDF 文件转换为 DOCX 文件,以便对其进行编辑。因此,我们不用再额外打开其他软件进行处理了,这将显著优化现有的工作流并消除瓶颈。
|
||||
|
||||
#### 选择和编辑图形更加方便
|
||||
|
||||
![onlyoffice][6]
|
||||
|
||||
图形做为现代办公软件的特性,在许多时候并没能发挥足够的作用。尽管 ONLYOFFICE 拥有这些功能已经有一段时间了,但它们在使用时总是相当笨重。
|
||||
|
||||
在 ONLYOFFICE 7.1 中,重新设计的图形选择菜单使得这种情况得到了改变。这个新的菜单与微软 Office 的同类产品非常相似,每个图标都可以从菜单中看到。
|
||||
|
||||
此外,它现在可以显示最近使用的图形,使批量插入图形更加容易。
|
||||
|
||||
图形的最后一项改进是能够使用鼠标来编辑它们。对于那些熟悉 Inkscape 等图形设计软件的人来说,这将会相当得心应手。通过简单地拖动点,你将可以在短时间内创建一个独特的形状。
|
||||
|
||||
#### 电子表格的打印预览
|
||||
|
||||
![][7]
|
||||
|
||||
我相信每个人都发生过由于一个简单的错误而导致打印出现问题的情况。此前其他程序早已经解决了这个问题,但在 ONLYOFFICE 电子表格编辑器中一直没有这个功能。
|
||||
|
||||
新版本终于引入了“打印预览”,这将会显著改善上述的情况。
|
||||
|
||||
这并不算什么十分新颖的更新,只是说它补齐了短板并且可以节省纸张和打印耗材。
|
||||
|
||||
#### 改进的动画页面,便捷的剪切和复制
|
||||
|
||||
![][8]
|
||||
|
||||
针对需要经常使用演示文稿的用户而言,这个版本增加了一个单独的动画标签,使动画的插入变得更为容易。
|
||||
|
||||
ONLYOFFICE 7.1 演示文稿编辑器现在支持各种动画,以及便捷地将一页幻灯片移动以及复制的能力。
|
||||
|
||||
#### SmartArt 对象的支持
|
||||
|
||||
SmartArt 是一种在文档、演示文稿和电子表格中便捷地制作自定义图形的工具。然而,它一直是微软办公软件的一个功能。虽然其他各种应用程序对该格式有不同程度的支持,但它们并不能与微软 Office 相媲美。
|
||||
|
||||
幸运的是,ONLYOFFICE 7.1 现在完全支持这种格式,并且没有任何乱码,仿佛原生的一般。用户将不再需要和以前一样在将 SmartArt 图形转换为普通图形和数字,便于无缝切换。
|
||||
|
||||
### 其他变化
|
||||
|
||||
ONLYOFFICE 7.1 的其他重要改进包括:
|
||||
|
||||
* 新的客户端语言:加利西亚语和阿塞拜疆语
|
||||
* 在受密码保护的文件中,能够在输入密码的同时查看密码
|
||||
* OFORM 文件支持缩放选项
|
||||
* 能够按用户组过滤评论
|
||||
* 支持金字塔图表
|
||||
* 支持金字塔柱状图
|
||||
* 支持垂直和水平圆柱图
|
||||
* 支持垂直和水平圆锥图
|
||||
* 上下文菜单中的移动和复制幻灯片选项
|
||||
* 公式工具提示
|
||||
* 新的货币格式支持
|
||||
|
||||
若想了解全部新特性,请见 [发布日志][9]。
|
||||
|
||||
### 下载 ONLYOFFICE 7.1
|
||||
|
||||
总的来说,ONLYOFFICE 7.1 是一个兼容 ARM 并且功能更为丰富的版本。
|
||||
|
||||
所有版本(企业版、开发版者、社区版)都有更新。
|
||||
|
||||
下载方面提供了很多不同的软件包,包括用于 ARM 版本的 Docker 镜像、 Snap 软件包以及用于云供应商的即点即用选项。你可以前往下载页面,寻找最合适的安装程序。
|
||||
|
||||
下载页面同时列出了安装的官方指南。
|
||||
|
||||
> **[获取 ONLYOFFICE 7.1][10]**
|
||||
|
||||
*你是否已经尝试了新版本呢?*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/onlyoffice-7-1-release/
|
||||
|
||||
作者:[Jacob Crume][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[PeterPan0106](https://github.com/PeterPan0106)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/jacob/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/wp-content/uploads/2022/05/onlyoffice-7-1.jpg
|
||||
[2]: https://itsfoss.com/best-free-open-source-alternatives-microsoft-office/
|
||||
[3]: https://youtu.be/5-ervHAemZc
|
||||
[4]: https://i.ytimg.com/vi/5-ervHAemZc/hqdefault.jpg
|
||||
[5]: https://news.itsfoss.com/wp-content/uploads/2022/05/ONLYOFFICE-viewer.png
|
||||
[6]: https://news.itsfoss.com/wp-content/uploads/2022/05/ONLYOFFICE-shapes.png
|
||||
[7]: https://news.itsfoss.com/wp-content/uploads/2022/05/ONLYOFFICE-Print-Preview.png
|
||||
[8]: https://news.itsfoss.com/wp-content/uploads/2022/05/ONLYOFFICE-Animations.png
|
||||
[9]: https://www.onlyoffice.com/blog/2022/05/discover-onlyoffice-docs-v7-1/
|
||||
[10]: https://www.onlyoffice.com/download-docs.aspx
|
@ -0,0 +1,126 @@
|
||||
[#]: subject: "How To Enable Activate Linux Watermark Notification In Linux Desktop"
|
||||
[#]: via: "https://ostechnix.com/activate-linux/"
|
||||
[#]: author: "sk https://ostechnix.com/author/sk/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lkxed"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14617-1.html"
|
||||
|
||||
如何在 Linux 桌面中启用 “激活 Linux” 水印通知
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/20/112226f7zmsvqqvt9tln9n.jpg)
|
||||
|
||||
> “激活 Windows” 水印已移植到 Linux。
|
||||
|
||||
为了阻止 Windows 操作系统的盗版行为,微软开发团队想出了一个办法:在 Windows 的角落放置一个激活水印,直到用户合法购买许可证并激活它。
|
||||
|
||||
如果你的电脑正在运行盗版的 Windows 副本,你应该已经注意到右下角的 “激活 Windows” 水印通知,如下图所示。
|
||||
|
||||
![“激活 Windows” 通知][1]
|
||||
|
||||
幸运的是,Linux 用户永远不会收到这样的通知。因为 GNU/Linux 是一个完全免费的开源操作系统,在 GNU 通用公共许可证(GPL)下发布。
|
||||
|
||||
任何人都可以运行、研究、修改和重新分发 Linux 源代码,甚至可以出售修改后的代码的副本,只要使用相同的许可即可。
|
||||
|
||||
Linux 是开源的,所以你真的可以用 Linux 做任何你在专有操作系统上不能做的事情。
|
||||
|
||||
你可以在 Linux 中做很多事情。你可以在 Linux 下构建和运行*几乎*任何东西,无论是有趣的项目还是企业级应用程序。甚至,你还可以添加 “激活 Linux” 水印。
|
||||
|
||||
### “激活 Linux” 是什么?
|
||||
|
||||
几天前,我注意到了一个叫做 “激活 Linux” 的有趣项目。它和你在未经许可的 Windows 操作系统中看到的 “激活 Windows” 通知非常相似。
|
||||
|
||||
“激活 Linux” 的开发者使用 C 语言中的 Xlib 和 cairo,重新创建了 Linux 版的 “激活 Windows” 通知水印。
|
||||
|
||||
它会在你的 Linux 桌面上显示一个水印,并通知你进入设置以激活你的 Linux 发行版!这很酷,不是吗?
|
||||
|
||||
### 启用 “激活 Linux” 水印
|
||||
|
||||
activate-linux 项目在短时间内变得非常流行。几天之内,它已经为许多流行的 Linux 发行版而打了包,例如 Arch Linux、openSUSE 和 Ubuntu。
|
||||
|
||||
#### Arch Linux
|
||||
|
||||
[AUR][2] 已经收录 activate-linux。因此,你可以使用 [Paru][3] 或 [Yay][4] 在 Arch Linux 及其衍生版 EndeavourOS 和 Manjaro Linux 中安装 activate-linux 应用程序。
|
||||
|
||||
```
|
||||
$ paru -S activate-linux
|
||||
```
|
||||
|
||||
或者
|
||||
|
||||
```
|
||||
$ yay -S activate-linux
|
||||
```
|
||||
|
||||
#### openSUSE
|
||||
|
||||
[OBS][5] 收录了 Activate-linux。
|
||||
|
||||
如果你正在使用 openSUSE Tumbleweed 版本,请逐条运行下面的命令来安装 activate-linux:
|
||||
|
||||
```
|
||||
$ sudo zypper addrepo https://download.opensuse.org/repositories/home:WoMspace/openSUSE_Tumbleweed/home:WoMspace.repo
|
||||
$ sudo zypper refresh
|
||||
$ sudo zypper install activate-linux
|
||||
```
|
||||
|
||||
对于 openSUSE Factory ARM 版,运行如下命令:
|
||||
|
||||
```
|
||||
$ sudo zypper addrepo https://download.opensuse.org/repositories/home:WoMspace/openSUSE_Factory_ARM/home:WoMspace.repo
|
||||
$ sudo zypper refresh
|
||||
$ sudo zypper install activate-linux
|
||||
```
|
||||
|
||||
#### Ubuntu
|
||||
|
||||
activate-linux 有一个适用于 Ubuntu 及其衍生版(如 Pop!_OS)的 PPA。
|
||||
|
||||
```
|
||||
$ sudo add-apt-repository ppa:edd/misc
|
||||
$ sudo apt update
|
||||
$ sudo apt install activate-linux
|
||||
```
|
||||
|
||||
安装完成后,只需在终端执行下面的命令,就可以让它运行起来:
|
||||
|
||||
```
|
||||
$ activate-linux
|
||||
```
|
||||
|
||||
现在,你将在桌面的角落看到 “激活 Linux” 水印通知,就像在未授权的 Windows 副本中一样。
|
||||
|
||||
![桌面上的 “激活 Linux” 水印][6]
|
||||
|
||||
别紧张!它是无害的。若想取消显示,你可以返回终端并按 `CTRL+C` 终止 `activate-linux` 命令。
|
||||
|
||||
我在 Ubuntu 22.04 GNOME 版本上测试了一下。它在 Wayland 中开箱即用。
|
||||
|
||||
“激活 Linux” 是我这一段时间以来遇到的一个非常有趣又无用的项目。我想这会让每个刚从 Windows 切换过来的 Linux 用户,拥有更加舒适的体验吧!
|
||||
|
||||
### 相关资源
|
||||
|
||||
* [“激活 Linux” 的 GitHub 存储库][7]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://ostechnix.com/activate-linux/
|
||||
|
||||
作者:[sk][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lkxed](https://github.com/lkxed)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://ostechnix.com/author/sk/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://ostechnix.com/wp-content/uploads/2022/05/Activate-Windows-Notification.png
|
||||
[2]: https://aur.archlinux.org/packages/activate-linux-git
|
||||
[3]: https://ostechnix.com/how-to-install-paru-aur-helper-in-arch-linux/
|
||||
[4]: https://ostechnix.com/yay-found-yet-another-reliable-aur-helper/
|
||||
[5]: https://software.opensuse.org//download.html?project=home%3AWoMspace&package=activate-linux
|
||||
[6]: https://ostechnix.com/wp-content/uploads/2022/05/Activate-Linux.png
|
||||
[7]: https://github.com/MrGlockenspiel/activate-linux
|
@ -0,0 +1,269 @@
|
||||
[#]: subject: "A programmer's guide to GNU C Compiler"
|
||||
[#]: via: "https://opensource.com/article/22/5/gnu-c-compiler"
|
||||
[#]: author: "Jayashree Huttanagoudar https://opensource.com/users/jayashree-huttanagoudar"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "robsean"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14653-1.html"
|
||||
|
||||
GNU C 编译器的程序员入门指南
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/30/111925gbh7yldbolroheqy.jpg)
|
||||
|
||||
> 带你一窥生成二进制文件步骤的幕后,以便在出现一些错误时,你知道如何逐步解决问题。
|
||||
|
||||
C 语言广为人知,深受新老程序员的好评。使用 C 语言编写的源文件代码,使用了标准的英语术语,因而人们可以方便阅读。然而,计算机只能理解二进制代码。为将代码转换为机器语言,你需要使用一种被称为 <ruby>编译器<rt>compiler</rt></ruby> 的工具。
|
||||
|
||||
最常见的编译器是 GCC(<ruby>GNU 编译器集<rt>GNU Compiler Collection</rt></ruby>)。编译过程涉及到一系列的中间步骤及相关工具。
|
||||
|
||||
### 安装 GCC
|
||||
|
||||
为验证在你的系统上是否已经安装了 GCC,使用 `gcc` 命令:
|
||||
|
||||
```
|
||||
$ gcc --version
|
||||
```
|
||||
|
||||
如有必要,使用你的软件包管理器来安装 GCC。在基于 Fedora 的系统上,使用 `dnf` :
|
||||
|
||||
```
|
||||
$ sudo dnf install gcc libgcc
|
||||
```
|
||||
|
||||
在基于 Debian 的系统上,使用 `apt` :
|
||||
|
||||
```
|
||||
$ sudo apt install build-essential
|
||||
```
|
||||
|
||||
在安装后,如果你想查看 GCC 的安装位置,那么使用:
|
||||
|
||||
```
|
||||
$ whereis gcc
|
||||
```
|
||||
|
||||
### 演示使用 GCC 来编译一个简单的 C 程序
|
||||
|
||||
这里有一个简单的 C 程序,用于演示如何使用 GCC 来编译。打开你最喜欢的文本编辑器,并在其中粘贴这段代码:
|
||||
|
||||
```
|
||||
// hellogcc.c
|
||||
#include <stdio.h>
|
||||
|
||||
int main() {
|
||||
printf("Hello, GCC!\n");
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
保存文件为 `hellogcc.c` ,接下来编译它:
|
||||
|
||||
```
|
||||
$ ls
|
||||
hellogcc.c
|
||||
|
||||
$ gcc hellogcc.c
|
||||
|
||||
$ ls -1
|
||||
a.out
|
||||
hellogcc.c
|
||||
```
|
||||
|
||||
如你所见,`a.out` 是编译后默认生成的二进制文件。为查看你所新编译的应用程序的输出,只需要运行它,就像你运行任意本地二进制文件一样:
|
||||
|
||||
```
|
||||
$ ./a.out
|
||||
Hello, GCC!
|
||||
```
|
||||
|
||||
### 命名输出的文件
|
||||
|
||||
文件名称 `a.out` 是非常莫名其妙的,所以,如果你想具体指定可执行文件的名称,你可以使用 `-o` 选项:
|
||||
|
||||
(LCTT 译注:注意这和最近 Linux 内核废弃的 a.out 格式无关,只是名字相同,这里生成的 a.out 是 ELF 格式的 —— 也不知道谁给起了个 `a.out` 这破名字,在我看来,默认输出文件名就应该是去掉了 `.c` 扩展名后的名字。by wxy)
|
||||
|
||||
```
|
||||
$ gcc -o hellogcc hellogcc.c
|
||||
|
||||
$ ls
|
||||
a.out hellogcc hellogcc.c
|
||||
|
||||
$ ./hellogcc
|
||||
Hello, GCC!
|
||||
```
|
||||
|
||||
当开发一个需要编译多个 C 源文件文件的大型应用程序时,这种选项是很有用的。
|
||||
|
||||
### 在 GCC 编译中的中间步骤
|
||||
|
||||
编译实际上有四个步骤,即使在简单的用例中 GCC 自动执行了这些步骤。
|
||||
|
||||
1. <ruby>预处理<rt>Pre-Processing</rt></ruby>:GNU 的 C 预处理器(cpp)解析头文件(`#include` 语句),展开 <ruby>宏<rt>macros </rt></ruby> 定义(`#define` 语句),并使用展开的源文件代码来生成一个中间文件,如 `hellogcc.i`。
|
||||
2. <ruby>编译<rt>Compilation</rt></ruby>:在这个期间中,编译器将预处理的源文件代码转换为指定 CPU 架构的汇编代码。由此生成是汇编文件使用一个 `.s` 扩展名来命名,如在这个示例中的 `hellogcc.s` 。
|
||||
3. <ruby>汇编<rt>Assembly</rt></ruby>:汇编程序(`as`)将汇编代码转换为目标机器代码,放在目标文件中,例如 `hellogcc.o` 。
|
||||
4. <ruby>链接<rt>Linking</rt></ruby>:链接器(`ld`)将目标代码和库代码链接起来生成一个可执行文件,例如 `hellogcc` 。
|
||||
|
||||
在运行 GCC 时,可以使用 `-v` 选项来查看每一步的细节:
|
||||
|
||||
```
|
||||
$ gcc -v -o hellogcc hellogcc.c
|
||||
```
|
||||
|
||||
![Compiler flowchart][2]
|
||||
|
||||
### 手动编译代码
|
||||
|
||||
体验编译的每个步骤可能是很有用的,因此在一些情况下,你不需要 GCC 完成所有的步骤。
|
||||
|
||||
首先,除源文件文件以外,删除在当前文件夹下生成的文件。
|
||||
|
||||
```
|
||||
$ rm a.out hellogcc.o
|
||||
|
||||
$ ls
|
||||
hellogcc.c
|
||||
```
|
||||
|
||||
#### 预处理器
|
||||
|
||||
首先,启动预处理器,将其输出重定向为 `hellogcc.i` :
|
||||
|
||||
```
|
||||
$ cpp hellogcc.c > hellogcc.i
|
||||
|
||||
$ ls
|
||||
hellogcc.c hellogcc.i
|
||||
```
|
||||
|
||||
查看输出文件,并注意一下预处理器是如何包含头文件和扩展宏中的源文件代码的。
|
||||
|
||||
#### 编译器
|
||||
|
||||
现在,你可以编译代码为汇编代码。使用 `-S` 选项来设置 GCC 只生成汇编代码:
|
||||
|
||||
```
|
||||
$ gcc -S hellogcc.i
|
||||
|
||||
$ ls
|
||||
hellogcc.c hellogcc.i hellogcc.s
|
||||
|
||||
$ cat hellogcc.s
|
||||
```
|
||||
|
||||
查看汇编代码,来看看生成了什么。
|
||||
|
||||
#### 汇编
|
||||
|
||||
使用你刚刚所生成的汇编代码来创建一个目标文件:
|
||||
|
||||
```
|
||||
$ as -o hellogcc.o hellogcc.s
|
||||
|
||||
$ ls
|
||||
hellogcc.c hellogcc.i hellogcc.o hellogcc.s
|
||||
```
|
||||
|
||||
#### 链接
|
||||
|
||||
要生成一个可执行文件,你必须将对象文件链接到它所依赖的库。这并不像前面的步骤那么简单,但它却是有教育意义的:
|
||||
|
||||
```
|
||||
$ ld -o hellogcc hellogcc.o
|
||||
ld: warning: cannot find entry symbol _start; defaulting to 0000000000401000
|
||||
ld: hellogcc.o: in function `main`:
|
||||
hellogcc.c:(.text+0xa): undefined reference to `puts'
|
||||
```
|
||||
|
||||
在链接器查找完 `libc.so` 库后,出现一个引用 `undefined puts` 错误。你必须找出适合的链接器选项来链接必要的库以解决这个问题。这不是一个小技巧,它取决于你的系统的布局。
|
||||
|
||||
在链接时,你必须链接代码到<ruby>核心运行时<rt>core runtime</rt></ruby>(CRT)目标,这是一组帮助二进制可执行文件启动的子例程。链接器也需要知道在哪里可以找到重要的系统库,包括 `libc` 和 `libgcc`,尤其是其中的特殊的开始和结束指令。这些指令可以通过 `--start-group` 和 `--end-group` 选项来分隔,或者使用指向 `crtbegin.o` 和 `crtend.o` 的路径。
|
||||
|
||||
这个示例使用了 RHEL 8 上的路径,因此你可能需要依据你的系统调整路径。
|
||||
|
||||
```
|
||||
$ ld -dynamic-linker /lib64/ld-linux-x86-64.so.2 \
|
||||
-o hello \
|
||||
/usr/lib64/crt1.o /usr/lib64/crti.o \
|
||||
--start-group \
|
||||
-L/usr/lib/gcc/x86_64-redhat-linux/8 \
|
||||
-L/usr/lib64 -L/lib64 hello.o \
|
||||
-lgcc \
|
||||
--as-needed -lgcc_s \
|
||||
--no-as-needed -lc -lgcc \
|
||||
--end-group \
|
||||
/usr/lib64/crtn.o
|
||||
```
|
||||
|
||||
在 Slackware 上,同样的链接过程会使用一组不同的路径,但是,你可以看到这其中的相似之处:
|
||||
|
||||
```
|
||||
$ ld -static -o hello \
|
||||
-L/usr/lib64/gcc/x86_64-slackware-linux/11.2.0/ \
|
||||
/usr/lib64/crt1.o /usr/lib64/crti.o hello.o /usr/lib64/crtn.o \
|
||||
--start-group \
|
||||
-lc -lgcc -lgcc_eh \
|
||||
--end-group
|
||||
```
|
||||
|
||||
现在,运行由此生成的可执行文件:
|
||||
|
||||
```
|
||||
$ ./hello
|
||||
Hello, GCC!
|
||||
```
|
||||
|
||||
### 一些有用的实用程序
|
||||
|
||||
下面是一些帮助检查文件类型、<ruby>符号表<rt>symbol tables</rt></ruby> 和链接到可执行文件的库的实用程序。
|
||||
|
||||
使用 `file` 实用程序可以确定文件的类型:
|
||||
|
||||
```
|
||||
$ file hellogcc.c
|
||||
hellogcc.c: C source, ASCII text
|
||||
|
||||
$ file hellogcc.o
|
||||
hellogcc.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
|
||||
|
||||
$ file hellogcc
|
||||
hellogcc: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=bb76b241d7d00871806e9fa5e814fee276d5bd1a, for GNU/Linux 3.2.0, not stripped
|
||||
```
|
||||
|
||||
对目标文件使用 `nm` 实用程序可以列出 <ruby>符号表<rt>symbol tables</rt></ruby> :
|
||||
|
||||
```
|
||||
$ nm hellogcc.o
|
||||
0000000000000000 T main
|
||||
U puts
|
||||
```
|
||||
|
||||
使用 `ldd` 实用程序来列出动态链接库:
|
||||
|
||||
```
|
||||
$ ldd hellogcc
|
||||
linux-vdso.so.1 (0x00007ffe3bdd7000)
|
||||
libc.so.6 => /lib64/libc.so.6 (0x00007f223395e000)
|
||||
/lib64/ld-linux-x86-64.so.2 (0x00007f2233b7e000)
|
||||
```
|
||||
|
||||
### 总结
|
||||
|
||||
在这篇文章中,你了解到了 GCC 编译中的各种中间步骤,和检查文件类型、<ruby>符号表<rt>symbol tables</rt></ruby> 和链接到可执行文件的库的实用程序。在你下次使用 GCC 时,你将会明白它为你生成一个二进制文件所要做的步骤,并且当出现一些错误时,你会知道如何逐步处理解决问题。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/5/gnu-c-compiler
|
||||
|
||||
作者:[Jayashree Huttanagoudar][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[robsean](https://github.com/robsean)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/jayashree-huttanagoudar
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/build_structure_tech_program_code_construction.png
|
||||
[2]: https://opensource.com/sites/default/files/2022-05/compiler-flowchart.png
|
@ -0,0 +1,132 @@
|
||||
[#]: subject: "Customize GNOME 42 with A Polished Look"
|
||||
[#]: via: "https://www.debugpoint.com/2022/05/customize-gnome-42-look-1/"
|
||||
[#]: author: "Arindam https://www.debugpoint.com/author/admin1/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14646-1.html"
|
||||
|
||||
如何把你的 GNOME 42 打磨得更精致
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/28/191525nx791r930j88ra3z.jpg)
|
||||
|
||||
> 在 5 分钟内将你最喜欢的 GNOME 桌面打磨得更精致。
|
||||
|
||||
你可以使用图标、主题、光标和壁纸等多种方式来定制你最喜爱的 GNOME 桌面。本文向你展示了如何使你的 GNOME 42 桌面看起来更精致。在最近发布的 Ubuntu 22.04 LTS 和 Fedora 36 上提供了 GNOME 42 桌面环境。
|
||||
|
||||
在你进一步阅读之前,先看看调整之前和之后的外观比较。
|
||||
|
||||
![GNOME before customisation][1]
|
||||
|
||||
![GNOME after customisation][2]
|
||||
|
||||
我将把本教程分为两个部分。
|
||||
|
||||
第一部分涉及设置和安装所需的软件包。然后第二部分是如何应用各种设置来获得你想要的外观。
|
||||
|
||||
本教程主要在 Ubuntu 22.04 LTS 上测试。但是,它应该适用于 Ubuntu 和 Fedora 的其他变体。
|
||||
|
||||
### 将 GNOME 42 定制得更精致
|
||||
|
||||
#### 设置
|
||||
|
||||
首先,为你的系统启用 Flatpak,因为我们需要安装扩展管理器来下载本教程所需的 GNOME Shell 扩展。
|
||||
|
||||
因此,要做到这一点,请打开一个终端并运行以下命令:
|
||||
|
||||
```
|
||||
sudo apt install flatpak gnome-software-plugin-flatpak
|
||||
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||
```
|
||||
|
||||
完成后重启计算机。
|
||||
|
||||
然后从终端运行以下命令,来安装扩展管理器应用以下载 GNOME Shell 扩展:
|
||||
|
||||
```
|
||||
flatpak install flathub com.mattjakeman.ExtensionManager
|
||||
```
|
||||
|
||||
打开扩展管理器应用,并安装两个扩展。第一个是 “<ruby>浮动停靠区<rt>Floating Dock</rt></ruby>”,它提供了超酷的停靠区,你可以在桌面上的任何位置移动它。第二个,安装 “<ruby>用户主题<rt>User themes</rt></ruby>” 扩展来帮助你在 Ubuntu Linux 中安装外部 GTK 主题。
|
||||
|
||||
![User Themes Extension][3]
|
||||
|
||||
![Floating Dock Extension][4]
|
||||
|
||||
接着,使用以下命令安装 [Materia 主题][5]。你必须构建它,因为它没有任何可执行文件。在 Ubuntu 中依次运行以下命令进行安装:
|
||||
|
||||
```
|
||||
git clone https://github.com/ckissane/materia-theme-transparent.git
|
||||
cd materia-theme-transparent
|
||||
meson _build
|
||||
meson install -C _build
|
||||
```
|
||||
|
||||
此外,请从 [这里][7] 下载 [Kora 图标主题][6]。下载后解压文件,将以下四个文件夹复制到 `/home/<用户名>/.icons` 路径下。如果 `.icons` 文件夹不存在,请创建它。
|
||||
|
||||
![Kora Icon Theme][8]
|
||||
|
||||
除了上述更改,从 [这里][9] 下载 Bibata 光标主题。下载后,解压文件夹并将其复制到相同的 `/home/<用户名>/.icons` 文件夹中。
|
||||
|
||||
除了上述之外,如果你想要一个与上述主题相匹配的漂亮字体,请从谷歌字体 [下载 Robot 字体][10],并将它们复制到 `/home/<user name>/.fonts` 文件夹。
|
||||
|
||||
最后,再次重启系统。
|
||||
|
||||
#### 配置
|
||||
|
||||
打开扩展管理器,启用 “<ruby>浮动停靠区<rt>Floating Dock</rt></ruby>” 和 “<ruby>用户主题<rt>User themes</rt></ruby>”,并禁用 “Ubuntu Dock”。
|
||||
|
||||
![Changes to Extensions][11]
|
||||
|
||||
此外,打开 “<ruby>浮动停靠区<rt>Floating Dock</rt></ruby>” 设置并进行以下更改:
|
||||
|
||||
![Floating Dock Settings][12]
|
||||
|
||||
此外,打开 <ruby>[GNOME 优化工具][13]<rt>GNOME Tweak Tool</rt></ruby>,然后转到<ruby>外观<rt>Appearance</rt></ruby>选项卡。设置以下内容:
|
||||
|
||||
* 光标:Bibata-Original-Ice
|
||||
* Shell 主题:Materia
|
||||
* 图标:Kora
|
||||
|
||||
除此之外,你可能还想更改字体。为此,请转到<ruby>字体<rt>Fonts</rt></ruby>选项卡并将文档和界面更改为 “Robot 10pt”。
|
||||
|
||||
或者,你也可以从 Ubuntu 22.04 的默认设置中更改强调色和样式。
|
||||
|
||||
最后,根据你的喜好下载漂亮的壁纸。对于本教程,我从 [这里][14] 下载了一个示例壁纸。
|
||||
|
||||
如果一切顺利,你应该有一个漂亮的桌面,如下图所示:
|
||||
|
||||
![Customize GNOME 42 – Final Look][15]
|
||||
|
||||
享受你的精致的 GNOME 42!干杯。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.debugpoint.com/2022/05/customize-gnome-42-look-1/
|
||||
|
||||
作者:[Arindam][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.debugpoint.com/author/admin1/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://i2.wp.com/www.debugpoint.com/wp-content/uploads/2022/05/GNOME-before-customisation.jpg?ssl=1
|
||||
[2]: https://i0.wp.com/www.debugpoint.com/wp-content/uploads/2022/05/GNOME-after-customisation.jpg?ssl=1
|
||||
[3]: https://www.debugpoint.com/wp-content/uploads/2022/05/User-Themes-Extension2.jpg
|
||||
[4]: https://www.debugpoint.com/wp-content/uploads/2022/05/Floating-Doc-Extension.jpg
|
||||
[5]: https://github.com/ckissane/materia-theme-transparent
|
||||
[6]: https://github.com/bikass/kora/
|
||||
[7]: https://github.com/bikass/kora/archive/refs/heads/master.zip
|
||||
[8]: https://www.debugpoint.com/wp-content/uploads/2022/05/Kora-Icon-Theme.jpg
|
||||
[9]: https://www.pling.com/p/1197198/
|
||||
[10]: https://fonts.google.com/specimen/Roboto
|
||||
[11]: https://www.debugpoint.com/wp-content/uploads/2022/05/Changes-to-Extensions.jpg
|
||||
[12]: https://www.debugpoint.com/wp-content/uploads/2022/05/Floating-Dock-Settings.jpg
|
||||
[13]: https://www.debugpoint.com/2018/05/customize-your-ubuntu-desktop-using-gnome-tweak/
|
||||
[14]: https://www.pexels.com/photo/colorful-blurred-image-6985048/
|
||||
[15]: https://www.debugpoint.com/wp-content/uploads/2022/05/Customize-GNOME-42-Final-Look.jpg
|
@ -0,0 +1,203 @@
|
||||
[#]: subject: "How to rename a branch, delete a branch, and find the author of a branch in Git"
|
||||
[#]: via: "https://opensource.com/article/22/5/git-branch-rename-delete-find-author"
|
||||
[#]: author: "Agil Antony https://opensource.com/users/agantony"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lkxed"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14635-1.html"
|
||||
|
||||
Git 教程:重命名分支、删除分支、查看分支作者
|
||||
======
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/25/161618nt30jqe10nqtlzlj.jpg)
|
||||
|
||||
> 掌握管理本地/远程分支等最常见的 Git 任务。
|
||||
|
||||
Git 的主要优势之一就是它能够将工作“分叉”到不同的分支中。
|
||||
|
||||
如果只有你一个人在使用某个存储库,分支的好处是有限的。但是,一旦你开始与许多其他贡献者一起工作,分支就变得必不可少。Git 的分支机制允许多人同时处理一个项目,甚至是同一个文件。用户可以引入不同的功能,彼此独立,然后稍后将更改合并回主分支。那些专门为一个目的创建的分支,有时也被称为<ruby>主题分支<rt>topic branch</rt></ruby>,例如添加新功能或修复已知错误。
|
||||
|
||||
当你开始使用分支,了解如何管理它们会很有帮助。以下是开发者在现实世界中使用 Git 分支执行的最常见任务。
|
||||
|
||||
### 重命名分支
|
||||
|
||||
有时候,你或许会错误地命名了一个分支,或者你会想要在内容合并到主分支后,使用同一个分支在不同的错误或任务之间切换。在这种情况下,重命名主题分支就会很有帮助。
|
||||
|
||||
#### 重命名本地分支
|
||||
|
||||
1、重命名本地分支:
|
||||
|
||||
```
|
||||
$ git branch -m <old_branch_name> <new_branch_name>
|
||||
```
|
||||
|
||||
当然,这只会重命名你的分支副本。如果远程 Git 服务器上存在该分支,请继续执行后续步骤。
|
||||
|
||||
2、推送这个新分支,从而创建一个新的远程分支:
|
||||
|
||||
```
|
||||
$ git push origin <new_branch_name>
|
||||
```
|
||||
|
||||
3、删除旧的远程分支:
|
||||
|
||||
```
|
||||
$ git push origin -d -f <old_branch_name>
|
||||
```
|
||||
|
||||
#### 重命名当前分支
|
||||
|
||||
当你要重命名的分支恰好是当前分支时,你不需要指定旧的分支名称。
|
||||
|
||||
1、重命名当前分支:
|
||||
|
||||
```
|
||||
$ git branch -m <new_branch_name>
|
||||
```
|
||||
|
||||
2、推送新分支,从而创建一个新的远程分支:
|
||||
|
||||
```
|
||||
$ git push origin <new_branch_name>
|
||||
```
|
||||
|
||||
3、删除旧的远程分支:
|
||||
|
||||
```
|
||||
$ git push origin -d -f <old_branch_name>
|
||||
```
|
||||
|
||||
### 使用 Git 删除本地和远程分支
|
||||
|
||||
为了保持存储库的整洁,通常建议你在确保已将内容合并到主分支后,删除临时分支。
|
||||
|
||||
#### 删除本地分支
|
||||
|
||||
删除本地分支只会删除系统上存在的该分支的副本。如果分支已经被推送到远程存储库,它仍然可供使用该存储库的每个人使用。
|
||||
|
||||
1、签出存储库的主分支(例如 `main` 或 `master`):
|
||||
|
||||
```
|
||||
$ git checkout <central_branch_name>
|
||||
```
|
||||
|
||||
2、列出所有分支(本地和远程):
|
||||
|
||||
```
|
||||
$ git branch -a
|
||||
```
|
||||
|
||||
3、删除本地分支:
|
||||
|
||||
```
|
||||
$ git branch -d <name_of_the_branch>
|
||||
```
|
||||
|
||||
要删除所有本地主题分支并仅保留 `main` 分支:
|
||||
|
||||
```
|
||||
$ git branch | grep -v main | xargs git branch -d
|
||||
```
|
||||
|
||||
#### 删除远程分支
|
||||
|
||||
删除远程分支只会删除远程服务器上存在的该分支的副本。如果你想撤销删除,也可以将其重新推送到远程(例如 GitHub),只要你还有本地副本即可。
|
||||
|
||||
1、签出存储库的主分支(通常是 `main` 或 `master`):
|
||||
|
||||
```
|
||||
$ git checkout <central_branch_name>
|
||||
```
|
||||
|
||||
2、列出所有分支(本地和远程):
|
||||
|
||||
```
|
||||
$ git branch -a
|
||||
```
|
||||
|
||||
3、删除远程分支:
|
||||
|
||||
```
|
||||
$ git push origin -d <name_of_the_branch>
|
||||
```
|
||||
|
||||
### 查看远程主题分支的作者
|
||||
|
||||
如果你是存储库管理员,你可能会有这个需求,以便通知未使用分支的作者它将被删除。
|
||||
|
||||
1、签出存储库的主分支(例如 `main` 或 `master`):
|
||||
|
||||
```
|
||||
$ git checkout <central_branch_name>
|
||||
```
|
||||
|
||||
2、删除不存在的远程分支的分支引用:
|
||||
|
||||
```
|
||||
$ git remote prune origin
|
||||
```
|
||||
|
||||
3、列出存储库中所有远程主题分支的作者,使用 `--format` 选项,并配合特殊的选择器来只打印你想要的信息(在本例中,`%(authorname)` 和 `%(refname)` 分别代表作者名字和分支名称):
|
||||
|
||||
```
|
||||
$ git for-each-ref --sort=authordate --format='%(authorname) %(refname)' refs/remotes
|
||||
```
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
tux refs/remotes/origin/dev
|
||||
agil refs/remotes/origin/main
|
||||
```
|
||||
|
||||
你可以添加更多格式,包括颜色编码和字符串操作,以便于阅读:
|
||||
|
||||
```
|
||||
$ git for-each-ref --sort=authordate \
|
||||
--format='%(color:cyan)%(authordate:format:%m/%d/%Y %I:%M %p)%(align:25,left)%(color:yellow) %(authorname)%(end)%(color:reset)%(refname:strip=3)' \
|
||||
refs/remotes
|
||||
```
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
01/16/2019 03:18 PM tux dev
|
||||
05/15/2022 10:35 PM agil main
|
||||
```
|
||||
|
||||
你可以使用 `grep` 获取特定远程主题分支的作者:
|
||||
|
||||
```
|
||||
$ git for-each-ref --sort=authordate \
|
||||
--format='%(authorname) %(refname)' \
|
||||
refs/remotes | grep <topic_branch_name>
|
||||
```
|
||||
|
||||
### 熟练运用分支
|
||||
|
||||
Git 分支的工作方式存在细微差别,具体取决于你想要分叉代码库的位置、存储库维护者如何管理分支、<ruby>压扁<rt>squashing</rt></ruby>、<ruby>变基<rt>rebasing</rt></ruby>等。若想进一步了解该主题,你可以阅读下面这三篇文章:
|
||||
|
||||
* [《用乐高来类比解释 Git 分支》][4],作者:Seth Kenlon
|
||||
* [《我的 Git push 命令的安全使用指南》][5],作者:Noaa Barki
|
||||
* [《Git 分支指南》][6],作者:Kedar Vijay Kulkarni
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/5/git-branch-rename-delete-find-author
|
||||
|
||||
作者:[Agil Antony][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lkxed](https://github.com/lkxed)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/agantony
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/tree-branches.jpg
|
||||
[2]: https://www.flickr.com/photos/22244945@N00/3353319002
|
||||
[3]: https://creativecommons.org/licenses/by-sa/4.0/
|
||||
[4]: https://opensource.com/article/22/4/git-branches
|
||||
[5]: https://opensource.com/article/22/4/git-push
|
||||
[6]: https://opensource.com/article/18/5/git-branching
|
@ -0,0 +1,67 @@
|
||||
[#]: subject: "FSF Does Not Accept Debian as a Free Distribution. Here’s Why!"
|
||||
[#]: via: "https://news.itsfoss.com/fsf-does-not-consider-debian-a-free-distribution/"
|
||||
[#]: author: "Abhishek https://news.itsfoss.com/author/root/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "Chao-zhi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14628-1.html"
|
||||
|
||||
自由软件基金会为什么不认为 Debian 是一种自由发行版?
|
||||
======
|
||||
|
||||
![Why FSF doesn't consider Debian a free distribution][1]
|
||||
|
||||
Debian 项目开发了一个尊重用户自由的 GNU/Linux 发行版。在各种自由软件许可证下发布的软件中,其源代码中包含非自由组件的情形并不鲜见。这些软件在被发布到 Debian 之前会被清理掉。而<ruby>自由软件基金会<rt>Free Software Foundation</rt></ruby>(FSF)维护着一份 [自由 GNU/Linux 发行版的列表][2],但奇怪的是,Debian 并不在其中。事实上, Debian 不符合进入此列表的某些标准,我们想知道到底不满足哪些标准。但首先,我们需要了解所有这些智力工作是如何得到证明的。换句话说,为什么要费心尝试进入一些名单,尤其是这个名单?
|
||||
|
||||
为什么 Debian 应该得到 FSF 的承认,以获得它的自由发行版的地位?曾于 2010 年至 2013 年担任 Debian 项目负责人的 Stefano Zacchiroli 说过几个原因。其中一个 Stefano 称之为“外部审查”的原因我特别赞同。事实上,Debian 有其标准和质量水准,一些软件应当符合这些标准才能成为该发行版的一部分,但除了 Debian 开发人员自己,没有人能控制这个过程。如果该发行版被列入这份珍贵的清单中,那么 FSF 就会密切关注 Debian 的命运,并(在出现问题时)给予适度的批评。我相信这是很好的动力。如果你也这么认为,那么现在让我们看看 FSF 认为 Debian 不够自由的原因。
|
||||
|
||||
### Debian 社会契约
|
||||
|
||||
除了自由 GNU/Linux 发行版列表之外,FSF 还保留了一份因某种原因而被拒绝授予自由地位的 GNU/Linux 发行版的列表。对于此列表中的每个发行版,都有一个评论,简要说明了拒绝的理由。从对 Debian 的评论中可以清楚地看出,FSF 和 Debian 项目在对“自由分发”一词的解释上产生分歧的主要根源来自一份被称为 “<ruby>Debian 社会契约<rt>Debian Social Contract</rt></ruby>”的文件。
|
||||
|
||||
该社会契约的第一个版本是在 1997 年 7 月 4 日由第二任 Debian 项目领导人 Bruce Perens 发表的。作为该契约的一部分,也公布了一套被称为 <ruby>Debian 自由软件准则<rt>Debian Free Software Guidelines</rt></ruby>(DFSG)的规则。从那时起,要成为 Debian 的一部分,分发软件的许可证必须符合 DFSG。该社会契约记录了 Debian 开发者只用自由软件建立操作系统的意图,而 DFSG 则用于将软件分为自由和非自由。2004 年 4 月 26 日,批准了该文件的新版本,取代了 1997 年的版本。
|
||||
|
||||
Debian 社会契约有五条。要回答我们今天主要讨论的问题,我们只需要关注其中两条 —— 即第一条和第五条,其他的省略。可以在 [此处][3] 查看该契约的完整版本。
|
||||
|
||||
第一条说:“**Debian 将保持 100% 自由**。我们在标题为‘<ruby>Debian 自由软件准则<rt>Debian Free Software Guidelines</rt></ruby>’的文件中提供了用于确定一个作品是否‘自由’的准则。我们承诺,根据这些准则,Debian 系统及其所有组件将是自由的。我们将支持在 Debian 上创造或使用自由和非自由作品的人。我们永远不会让系统要求使用非自由组件。”
|
||||
|
||||
同时,第五条写道:“**不符合我们自由软件标准的作品**。我们承认,我们的一些用户需要使用不符合 Debian 自由软件准则的作品。我们在我们的存档中为这些作品创建了“contrib”和“non-free”区域。这些区域中的软件包并不是 Debian 系统的一部分,尽管它们已被配置为可以在 Debian 中使用。我们鼓励 CD 制造商阅读这些区域的软件包的许可证,并确定他们是否可以在其 CD 上分发这些软件包。因此,尽管非自由作品不是 Debian 的一部分,但我们支持它们的使用,并为非自由软件包提供基础设施(例如我们的错误跟踪系统和邮件列表)。”
|
||||
|
||||
因此,在实践中,第一条和第五条意味着:在安装了 Debian 之后,用户得到了一个完全而彻底的自由操作系统,但是如果他们突然想牺牲自由来追求功能,安装非自由软件,Debian 不仅不会阻碍他们这样做,而且会大大简化这一任务。
|
||||
|
||||
尽管该契约规定发行版将保持 100% 自由,但它允许官方存档的某些部分可能包含非自由软件或依赖于某些非自由组件的自由软件。形式上,根据同一契约,这些部分中的软件不是 Debian 的一部分,但 FSF 对此感到不安,因为这些部分使得在系统上安装非自由软件变得更加容易。
|
||||
|
||||
在 2011 年前,FSF 有合理的理由不认为 Debian 是自由的——该发行版附带的 Linux 内核没有清理二进制 blob。但自 2011 年 2 月发布的 Squeeze 至今,Debian 已经包含了完全自由的 Linux 内核。因此,简化非自由软件的安装是 FSF 不承认 Debian 是自由发行版的主要原因,直到 2016 年这是我知道的唯一原因,但在 2016 年初出现了问题……
|
||||
|
||||
### 等等 …… 关 Firefox 什么事?
|
||||
|
||||
很长一段时间,Debian 都包含一个名为 Iceweasel 的浏览器,它只不过是 Firefox 浏览器的更名重塑而已。进行品牌重塑有两个原因:首先,该浏览器标志和名称是 Mozilla 基金会的商标,而提供非自由软件与 DFSG 相抵触。其次,通过在发行版中包含浏览器,Debian 开发人员必须遵守 Mozilla 基金会的要求,该基金会禁止以 Firefox 的名义交付浏览器的修改版本。因此,开发人员不得不更改名称,因为他们在不断地修改浏览器的代码,以修复错误并消除漏洞。但在 2016 年初,Debian 有幸拥有一款经过修改的 Firefox 浏览器,不受上述限制,可以保留原来的名称和徽标。一方面,这是对 Debian 修改的认可,也是对 Debian 信任的体现。另一方面,该软件显然没有清除非自由组件,它现在已成为发行版的一部分。如果此时 Debian 已被列入自由 GNU/Linux 发行版列表,那么自由软件基金会将会毫不犹豫地指出这一点。
|
||||
|
||||
### 结论
|
||||
|
||||
数字世界中的自由与现实世界中的自由同样重要。在这篇文章中,我试图揭示 Debian 最重要的特性之一 —— 开发用户自由的发行版。开发人员花费额外的时间从软件中清理非自由组件,并且以 Debian 为技术基础的数十个发行版继承了它的工作,并由此获得了一部分自由。
|
||||
|
||||
另外,我想分享一个简单的看法,即自由并不像乍看起来那么简单,人们自然会去追问什么是真正的自由,而什么不是。由于 Firefox 的存在,Debian 现在不能被称为自由的 GNU/Linux 发行版。但从 2011 年,当 Debian 终于开始清理内核以及发行版的其他组件时,直到 2016 年 Firefox 成为发行版的一部分时,自由软件基金会出于纯粹的意识形态原因并不认为该发行版是自由的:原因是 Debian 大大简化了非自由软件的安装……现在轮到你来权衡所有的争论,并决定是否将 GNU/Linux 发行版视为自由的了。
|
||||
|
||||
祝你好运!并尽可能保持自由。
|
||||
|
||||
由 Evgeny Golyshev 为 [Cusdeb.com][4] 撰写
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/fsf-does-not-consider-debian-a-free-distribution/
|
||||
|
||||
作者:[Evgeny Golyshev][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[Chao-zhi](https://github.com/Chao-zhi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/root/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/wp-content/uploads/2022/05/why-fsf-doesnt-consider-debian-a-free-software-1200-%C3%97-675px.png
|
||||
[2]: https://gnu.org/distros/free-distros.en.html
|
||||
[3]: https://debian.org/social_contract
|
||||
[4]: https://wiki.cusdeb.com/Essays:Why_the_FSF_does_not_consider_Debian_as_a_free_distribution/en
|
@ -0,0 +1,143 @@
|
||||
[#]: subject: "DAML: The Programming Language for Smart Contracts in a Blockchain"
|
||||
[#]: via: "https://www.opensourceforu.com/2022/05/daml-the-programming-language-for-smart-contracts-in-a-blockchain/"
|
||||
[#]: author: "Dr Kumar Gaurav https://www.opensourceforu.com/author/dr-gaurav-kumar/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14649-1.html"
|
||||
|
||||
DAML:区块链中智能合约的编程语言
|
||||
======
|
||||
|
||||
> DAML 智能合约语言是一种专门设计的<ruby>特定领域语言<rt>domain specific language</rt></ruby>(DSL),用于编码应用的共享业务逻辑。它用于区块链环境中分布式应用的开发和部署。
|
||||
|
||||
![](https://img.linux.net.cn/data/attachment/album/202205/29/090752supudcno3dufa41j.jpg)
|
||||
|
||||
区块链技术是一种安全机制,以一种使人难以或不可能修改或入侵的方式来跟踪信息。区块链整合了交易的数字账本,它被复制并发送至其网络上的每台计算机。在链的每个区块中,都有一些交易。当区块链上发生新的交易时,该交易的记录就会被添加到属于该链的每个人的账簿中。
|
||||
|
||||
区块链使用<ruby>分布式账本技术<rt>distributed ledger technology</rt></ruby>(DLT),其中数据库并不保存在一个服务器或节点中。在区块链中,交易被记录在一个被称为<ruby>哈希<rt>hash</rt></ruby>的不可改变的加密符号中。这意味着,如果一个通道或链上的一个区块被改变,黑客将很难改变链上的那个区块,因为他们必须对外面的每一个版本的链都要这样做。区块链,如比特币和以太坊,随着新的区块被添加到链上而不断增长,这使得账本更加安全。
|
||||
|
||||
随着区块链中智能合约的实施,在没有任何人工干预的情况下,有了自动执行的场景。智能合约技术使得执行最高级别的安全、隐私和反黑客实施成为可能。
|
||||
|
||||
![Figure 1: Market size of blockchain technology (Source: Statista.com)][2]
|
||||
|
||||
区块链的用例和应用是:
|
||||
|
||||
* 加密货币
|
||||
* 智能合约
|
||||
* 安全的个人信息
|
||||
* 数字健康记录
|
||||
* 电子政务
|
||||
* 不可伪造的代币(NFT)
|
||||
* 游戏
|
||||
* 跨境金融交易
|
||||
* 数字投票
|
||||
* 供应链管理
|
||||
|
||||
根据 Statista.com,自过去几年以来,区块链技术市场的规模正在以非常快的速度增长,预计到 2025 年将达到 400 亿美元。
|
||||
|
||||
### 区块链的编程语言和工具箱
|
||||
|
||||
有许多编程语言和开发工具包可用于分布式应用和智能合约。区块链的编程和脚本语言包括 Solidity、Java、Vyper、Serpent、Python、JavaScript、GoLang、PHP、C++、Ruby、Rust、Erlang 等,并根据实施场景和用例进行使用。
|
||||
|
||||
选择一个合适的平台来开发和部署区块链,取决于一系列因素,包括对安全、隐私、交易速度和可扩展性的需求(图 2)。
|
||||
|
||||
![Figure 2: Factors to look at when selecting a blockchain platform][3]
|
||||
|
||||
开发区块链的主要平台有:
|
||||
|
||||
* 以太坊
|
||||
* XDC Network
|
||||
* Tezos
|
||||
* Stellar
|
||||
* Hyperledger
|
||||
* Ripple
|
||||
* Hedera Hashgraph
|
||||
* Quorum
|
||||
* Corda
|
||||
* NEO
|
||||
* OpenChain
|
||||
* EOS
|
||||
* Dragonchain
|
||||
* Monero
|
||||
|
||||
### DAML:一种高性能的编程语言
|
||||
|
||||
<ruby>数字资产建模语言<rt>Digital Asset Modeling Language</rt></ruby>,即 DAML(daml.com),是一种高性能的编程语言,用于开发和部署区块链环境中的分布式应用。它是一个轻量级和简洁的平台,用于快速应用开发。
|
||||
|
||||
![Figure 3: Official portal of DAML][4]
|
||||
|
||||
DAML 的主要特点是:
|
||||
|
||||
* 细粒度的权限
|
||||
* 基于场景的测试
|
||||
* 数据模型
|
||||
* 业务逻辑
|
||||
* 确定性的执行
|
||||
* 存储抽象化
|
||||
* 无重复开销
|
||||
* 负责任的跟踪
|
||||
* 原子的可组合性
|
||||
* 授权检查
|
||||
* 需要知道的隐私
|
||||
|
||||
### 安装和使用 DAML
|
||||
|
||||
DAML SDK 可以安装在 Linux、macOS 或 Windows 上。在多个操作系统上安装 DAML 的详细说明可访问 https://docs.daml.com/getting-started/installation.html 。
|
||||
|
||||
你必须具备以下条件才能使用 DAML:
|
||||
|
||||
* Visual Studio Code
|
||||
* Java 开发套件(JDK)
|
||||
|
||||
DAML 可以通过下载并运行可执行的安装程序在 Windows 上安装,你可访问 https://github.com/digital-asset/daml/releases/download/v1.18.1/daml-sdk-1.18.1-windows.exe 。
|
||||
|
||||
在 Linux 或 Mac 上安装 DAML 可以通过在终端执行以下内容来完成:
|
||||
|
||||
```
|
||||
$ curl -sSL https://get.daml.com/ | sh
|
||||
```
|
||||
|
||||
安装 DAML 后,可以创建基于区块链的新应用,如图 4 和 5 所示。
|
||||
|
||||
![Figure 4: Creating a new app][5]
|
||||
|
||||
在另一个终端中,新的应用被导航并安装了项目的依赖:
|
||||
|
||||
![Figure 5: Running DAML][6]
|
||||
|
||||
```
|
||||
WorkingDirectory>cd myapp/ui
|
||||
WorkingDirectory>npm install
|
||||
WorkingDirectory>npm start
|
||||
```
|
||||
|
||||
这样启动了 WebUI,该应用可在 Web 浏览器上通过 URL http://localhost:3000/ 访问。
|
||||
|
||||
![Figure 6: Login panel in DAML app][7]
|
||||
|
||||
### 研究和开发的范围
|
||||
|
||||
区块链技术为不同类别的应用提供了广泛的开发平台和框架。其中许多平台是免费和开源的,可以下载和部署以用于基于研究的实现。研究学者、从业者和专家们可以使用这些平台为众多应用提出和实施他们的算法。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.opensourceforu.com/2022/05/daml-the-programming-language-for-smart-contracts-in-a-blockchain/
|
||||
|
||||
作者:[Dr Kumar Gaurav][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.opensourceforu.com/author/dr-gaurav-kumar/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.opensourceforu.com/wp-content/uploads/2022/04/blockchain-hand-shake.jpg
|
||||
[2]: https://www.opensourceforu.com/wp-content/uploads/2022/04/Figure-1-Market-size-of-blockchain-technology.jpg
|
||||
[3]: https://www.opensourceforu.com/wp-content/uploads/2022/05/Untitled.png
|
||||
[4]: https://www.opensourceforu.com/wp-content/uploads/2022/04/Figure-3-Official-portal-of-DAML-1.jpg
|
||||
[5]: https://www.opensourceforu.com/wp-content/uploads/2022/04/Figure-4-Creating-a-new-app.jpg
|
||||
[6]: https://www.opensourceforu.com/wp-content/uploads/2022/04/Figure-5-Running-DAML.jpg
|
||||
[7]: https://www.opensourceforu.com/wp-content/uploads/2022/04/Figure-6-Login-panel-in-DAML-app.jpg
|
@ -0,0 +1,135 @@
|
||||
[#]: subject: "Linux Kernel 5.18 Released with Graphics Driver Changes and New Hardware Support"
|
||||
[#]: via: "https://news.itsfoss.com/linux-kernel-5-18-release/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "PeterPan0106"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14640-1.html"
|
||||
|
||||
Linux 内核 5.18 版本正式发布,新增显卡驱动以及硬件支持
|
||||
======
|
||||
|
||||
> 最新的 Linux 内核 5.18 版本现已如期发布,本次更新包括针对新硬件的支持以及许多其他核心变化。
|
||||
|
||||
![Linux kernel 5.18 release][1]
|
||||
|
||||
[Linux 5.17 内核][2] 发布时包含了对下一代硬件的支持,同时增强了 Steam Deck 的游戏体验。
|
||||
|
||||
每一代内核都包含了令人兴奋的技术进步,Linux 内核 5.18 也不例外。
|
||||
|
||||
### Linux 内核 5.18 有哪些变化呢?
|
||||
|
||||
本次我们可以看到,内核针对雷蛇外设硬件、苹果妙控键盘和 AMD 显卡增强了支持,还有一些网络、核心和安全方面的更新。
|
||||
|
||||
#### 新的雷蛇驱动
|
||||
|
||||
说到游戏装备,Linux 的硬件支持亟待更新。
|
||||
|
||||
目前存在一些开源驱动程序的变通解决方案。但是这些方案不具有普适性,适配和支持较少。
|
||||
|
||||
正如 [Phoronix][3] 所发现的,Linux 内核 5.18 中一同发布了一个新的雷蛇 HID 驱动程序,它适配了雷蛇黑寡妇蜘蛛键盘,并修复了宏键此前存在的问题。
|
||||
|
||||
此外,这个驱动程序应该也有助于解决其他雷蛇硬件的问题。
|
||||
|
||||
#### AMD 显卡特性 FreeSync 模式被默认开启
|
||||
|
||||
![][4]
|
||||
|
||||
虽然对 FreeSync 视频的支持足够好,但这只是改善 FreeSync 显示器用户体验的一个临时解决方案。
|
||||
|
||||
现在在 Linux 内核 5.18 版本中这一显示模式已被默认启用,用户无需调整任何设置即可使用 FreeSync([见更新日志][5])。
|
||||
|
||||
#### 显卡驱动更新
|
||||
|
||||
针对当前和未来的 AMD 显卡的驱动进行了改进。此外,支持英特尔 Arch 图形处理器和英特尔 Alder Lake N 的工作也取得了一些进展。
|
||||
|
||||
更高刷新率的 DisplayPort 也在这一个版本中得到支持。
|
||||
|
||||
#### 从 C89 标准升级到 C11 标准(GNU11)
|
||||
|
||||
![][6]
|
||||
|
||||
在 Linux 内核中使用的是 C89 C 语言标准,在当前已经稍显老旧并且缺失了许多十分必要的新特性。
|
||||
|
||||
考虑到目前的编译器版本 GCC 5.1 的要求,从 Linux 内核 5.18 开始决定用 C11 标准来取代它。
|
||||
|
||||
#### 网络优化
|
||||
|
||||
Linux 内核 5.18 增加了对新的无线硬件的支持,这包括联发科 MT7916、MT7921U 和博通 BCM43454/6。
|
||||
|
||||
![][7]
|
||||
|
||||
针对移动设备的改进也包括对英特尔 M.2 WWAN 卡的支持。
|
||||
|
||||
Realtek W89 驱动现在支持 AP 模式、6GHz 频段并增加了硬件扫描功能。
|
||||
|
||||
在配置 IPv6 和其他各种协议方面,通过一系列的改进提升了性能。
|
||||
|
||||
你可以在 Linux 内核 5.18 中网络方面的变更提交中了解所有情况(包括对驱动 API、协议和一些核心功能的改进)。
|
||||
|
||||
#### USB 改进
|
||||
|
||||
Xen USB 驱动程序进行了改进,以抵御恶意主设备,USB DWC3 驱动程序也支持了更多的硬件类型。
|
||||
|
||||
其他改进详见 [更新日志][8]。
|
||||
|
||||
#### 增强对苹果键盘以及平板的支持
|
||||
|
||||
![][9]
|
||||
|
||||
当前版本针对苹果妙控键盘(包含第一代型号)的使用体验进行了优化。
|
||||
|
||||
改进了功能键映射、键盘背光事件,以及 2021 款的妙控键盘通过 USB 连接时报告电池水平的能力。
|
||||
|
||||
Linux 内核 5.18 改进了输入处理,在平板电脑上输入将变得更为容易。
|
||||
|
||||
硬件相关的改进详见 [更新日志][10]。
|
||||
|
||||
#### ARM 架构芯片的支持(特斯拉 FSD,树莓派 Zero 2 W)
|
||||
|
||||
![][11]
|
||||
|
||||
Linux 内核 5.18 现在支持特斯拉的全套自动驾驶 SoC。三星工程师将其贡献到了 Linux 内核上游。
|
||||
|
||||
其他芯片支持包括高通骁龙 625/632,以及三星 Exynos 850/7885。
|
||||
|
||||
你还会发现 Linux 内核 5.18 支持了树莓派 Zero 2 W,而同时去除了旧的硬件/主板的支持。详见 [更新日志][12]。
|
||||
|
||||
你可以参考 [官方更新日志][13] 和 Linus Torvald 的官方公告获取更多信息。
|
||||
|
||||
### 如何安装 Linux 内核 5.18?
|
||||
|
||||
你可以在 [Linux Kernel Archives][14] 网站上找到最新版本的内核。你可以下载 [Tarball][15] 以进行测试。你也可以参照我们的 [Linux 内核升级指南][16] 获取帮助。
|
||||
|
||||
如果不想自己编译它,你可以稍等几周,等 Linux 发行版们把它推到仓库。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/linux-kernel-5-18-release/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[PeterPan0106](https://github.com/PeterPan0106)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/wp-content/uploads/2022/05/kernel-5-18-release.png
|
||||
[2]: https://news.itsfoss.com/linux-kernel-5-17-release/
|
||||
[3]: https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.18-HID
|
||||
[4]: https://news.itsfoss.com/wp-content/uploads/2022/05/amd-linux-5-18-1024x576.jpg
|
||||
[5]: https://lists.freedesktop.org/archives/amd-gfx/2022-February/075262.html
|
||||
[6]: https://news.itsfoss.com/wp-content/uploads/2022/05/c-linux-5-18-1024x576.jpg
|
||||
[7]: https://news.itsfoss.com/wp-content/uploads/2022/05/networking-linux-5-18-1024x576.jpg
|
||||
[8]: https://lore.kernel.org/lkml/Yj7vGtn8fILavjyL@kroah.com/
|
||||
[9]: https://news.itsfoss.com/wp-content/uploads/2022/05/apple-linux-5-18-1024x576.jpg
|
||||
[10]: https://lore.kernel.org/lkml/nycvar.YFH.7.76.2203231015060.24795@cbobk.fhfr.pm/
|
||||
[11]: https://news.itsfoss.com/wp-content/uploads/2022/05/arm-linux-5-18-1024x576.jpg
|
||||
[12]: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=baaa68a9796ef2cadfe5caaf4c730412eda0f31c
|
||||
[13]: https://lore.kernel.org/lkml/CAHk-=wjiqyoH6qntYvYTjR1F2L-pHtgX9esZMRS13iktCOJ1zA@mail.gmail.com/T/#u
|
||||
[14]: https://www.kernel.org/
|
||||
[15]: https://git.kernel.org/torvalds/t/linux-5.16.tar.gz
|
||||
[16]: https://itsfoss.com/upgrade-linux-kernel-ubuntu/
|
@ -0,0 +1,75 @@
|
||||
[#]: subject: "System76 Collaborates with HP for a Powerful Linux Laptop for Developers"
|
||||
[#]: via: "https://news.itsfoss.com/hp-dev-one-system76/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lkxed"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14645-1.html"
|
||||
|
||||
System76 与惠普合作为开发者提供功能强大的 Linux 笔记本电脑
|
||||
======
|
||||
|
||||
> 惠普正在以开箱即用的 Pop!_OS 为特色进入 Linux 硬件市场,貌似有点激动人心?还是先来看一看吧!
|
||||
|
||||
![hp][1]
|
||||
|
||||
System76 不是早就自己生产 Linux 笔记本电脑了吗?那么,这次和惠普合作是怎么回事?
|
||||
|
||||
嗯,这一次是惠普要发行一款 Linux 笔记本电脑,搭载 Pop!_OS,也就是 System76 的基于 Ubuntu 的 Linux 发行版。
|
||||
|
||||
Carl Richell(System76 的创始人)在他的 Twitter 上宣布了这一消息,并附带了一个网站链接,该网站提供了更多相关信息。推文如下:
|
||||
|
||||
> Hp-Pop 好耶!来看看这个:[https://t.co/gf2brjjUl8][2]
|
||||
|
||||
### HP Dev One:专为开发者打造的 Linux 笔记本电脑
|
||||
|
||||
一方面,System76 笔记本电脑与 Pop!_OS 有着开箱即用硬件兼容性,因此它备受赞誉。
|
||||
|
||||
另一方面,Pop!_OS 也与笔记本电脑完美搭配,适配没有太多麻烦。
|
||||
|
||||
Pop!_OS 也一直在推出更新和新增功能,以改进工作流程并充分利用 Linux 的可用硬件。
|
||||
|
||||
此时,和惠普合作听起来是一个提高档次的好主意。
|
||||
|
||||
![HP System76][3]
|
||||
|
||||
所以说,Pop!_OS 和惠普合作的想法有点激动人心啊!
|
||||
|
||||
挂上了惠普这个牌子,笔记本电脑的可用性/保修(在纸面上)就比 System76 要好了,考虑到后者在某些地区是不提供保修的。
|
||||
|
||||
### AMD 驱动的笔记本电脑可帮助你更好地写代码
|
||||
|
||||
HP Dev One 似乎是把“为开发者提供多任务处理的能力,从而快速完成任务”作为卖点。
|
||||
|
||||
这款笔记本电脑的入门款搭载了 **8 核的 AMD Ryzen 7 PRO 处理器** 和 **16 GB RAM**(DDR4 @ 3200 MHz)。
|
||||
|
||||
预计它还会搭载由 AMD Radeon Graphics 提供支持的 14 英寸全高清防眩光显示屏。
|
||||
|
||||
对于 HP Dev One,Carl Richell 提到了这款笔记本电脑将通过 [LVFS][5](Linux 供应商固件服务)接收**固件更新**。
|
||||
|
||||
他还提到,这款笔记本电脑(以上规格)的定价为 **1099 美元** 起。
|
||||
|
||||
网站上只显示了它即将推出。因此,我们目前还不知道正式的发布日期。
|
||||
|
||||
对于像惠普这样的商业制造商来说,笔记本电脑的定价听起来并不令人兴奋(LCTT 译注:毕竟不是国内互联网品牌的笔记本),但可能是一个划算的交易。
|
||||
|
||||
你怎么看这款惠普笔记本电脑(运行 Linux、为开发者量身定制)的定价?你觉得这个价格合理吗?你对这款笔记本电脑有什么期望呢?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/hp-dev-one-system76/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lkxed](https://github.com/lkxed)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/wp-content/uploads/2022/05/hpdevone-laptop.jpg
|
||||
[2]: https://t.co/gf2brjjUl8
|
||||
[3]: https://news.itsfoss.com/wp-content/uploads/2022/05/hpdevone-illustration-1024x576.jpg
|
||||
[4]: https://fwupd.org/
|
@ -0,0 +1,92 @@
|
||||
[#]: subject: "ProtonMail is Now Just ‘Proton’ Offering a Privacy Ecosystem"
|
||||
[#]: via: "https://news.itsfoss.com/protonmail-now-proton/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lkxed"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14652-1.html"
|
||||
|
||||
ProtonMail 改名为 “Proton”,致力于提供一个隐私生态系统
|
||||
======
|
||||
|
||||
> ProtonMail 宣布了重塑后的品牌,包括新网站、新名称、新的定价计划、新的 UI 和其他变化。
|
||||
|
||||
![proton][1]
|
||||
|
||||
[ProtonMail][2] 将自己重新命名为 “Proton”,以将其所有产品囊括在统一的品牌下。
|
||||
|
||||
注意,别把它和 Steam 的 Proton(它也简称为 Proton)混淆哦!
|
||||
|
||||
换句话说,ProtonMail、ProtonVPN 和它的任何服务将不再有单独的产品页面。
|
||||
|
||||
### Proton:一个开源隐私生态系统
|
||||
|
||||
![更新后的 Proton,统一保护][3]
|
||||
|
||||
Proton 将拥有一个新的统一平台(新网站),你可以在其中访问所有服务,包括:
|
||||
|
||||
* Proton 邮件
|
||||
* Proton VPN
|
||||
* Proton 网盘
|
||||
* Proton 日历
|
||||
|
||||
现在,新的登录会话将会被重定向到 `proton.me` 而不是 `protonmail.com`、`mail.protonmail.com`、`protonvpn.com` 等等。
|
||||
|
||||
不仅限于名称/品牌,整体的强调色和现有的用户体验,也将受到影响。
|
||||
|
||||
![][4]
|
||||
|
||||
现在,你只需一次付费订阅即可获得全部服务,而不必单独升级 VPN 和邮件。这也意味着,经过这次改变,高级订阅的价格变得更加实惠了。
|
||||
|
||||
![][5]
|
||||
|
||||
总体而言,让 “Proton” 成为隐私生态系统,是为了吸引更多对技术细节不感兴趣的用户来了解它是如何运作的。
|
||||
|
||||
你可以在其新的官方网站([proton.me][6])上查看所有详细信息。
|
||||
|
||||
新网站看起来更干净、更有条理,并且更具商业吸引力。
|
||||
|
||||
### 本次更改的内容
|
||||
|
||||
你可以期待有一个焕然一新的用户界面,包括新的品牌和新的网站。
|
||||
|
||||
![proton][7]
|
||||
|
||||
除此之外,Proton 还提到它改进了服务之间的集成,以获得更好的用户体验。
|
||||
|
||||
![][8]
|
||||
|
||||
如果你已经在使用 ProtonMail,你可能知道,他们正在主动建议现有用户激活 “@proton.me” 帐户,这也是本次更改的一部分。
|
||||
|
||||
你可以选择将新电子邮件地址 xyz@proton.me 设为默认值,它更短,看起来也更有意义一些。
|
||||
|
||||
* 旧的电子邮件地址不会消失,只是额外提供了新地址(@proton.me)。
|
||||
* 现有的付费订阅者应该可以免费获得存储空间提升。
|
||||
* 升级了网页和移动应用中的用户体验。
|
||||
* 新的官方网站(你将被自动重定向到它以进行新会话)。
|
||||
* 新的定价计划,为 Proton 网盘提供更多存储空间。
|
||||
|
||||
你对本次变更感兴趣吗?你喜欢 Proton 的新名字和新的服务方式吗?请在下方评论中分享你的想法吧!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/protonmail-now-proton/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lkxed](https://github.com/lkxed)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/wp-content/uploads/2022/05/proton-ft.jpg
|
||||
[2]: https://itsfoss.com/recommends/protonmai
|
||||
[3]: https://youtu.be/s5GNTQ63HJE
|
||||
[4]: https://news.itsfoss.com/wp-content/uploads/2022/05/proton-ui-new-1024x447.jpg
|
||||
[5]: https://news.itsfoss.com/wp-content/uploads/2022/05/proton-pricing-1024x494.jpg
|
||||
[6]: https://proton.me/
|
||||
[7]: https://news.itsfoss.com/wp-content/uploads/2022/05/Proton-me-website.png
|
||||
[8]: https://news.itsfoss.com/wp-content/uploads/2022/05/Proton-Product.png
|
@ -0,0 +1,59 @@
|
||||
[#]: subject: "DeepMind’s Open Source MuJoCo Is Available On GitHub"
|
||||
[#]: via: "https://www.opensourceforu.com/2022/05/deepminds-open-source-mujoco-is-available-on-github/"
|
||||
[#]: author: "Laveesh Kocher https://www.opensourceforu.com/author/laveesh-kocher/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lkxed"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14650-1.html"
|
||||
|
||||
DeepMind 的开源物理引擎 MuJoCo 已在 GitHub 发布
|
||||
======
|
||||
|
||||
![deepmind1][1]
|
||||
|
||||
DeepMind 是 Alphabet 的子公司和 AI 研究实验室,在 2021 年 10 月,它收购了用于机器人研发的 MuJoCo 物理引擎,并承诺该模拟器将作为免费、开源、社区驱动的项目进行维护。现在,DeepMind 声称开源计划已完成,它的整个代码库 [可在 GitHub 上获得][2]。
|
||||
|
||||
MuJoCo 是 “Multi-Joint Dynamics with Contact” 的缩写,它是一个物理引擎,旨在帮助机器人、生物力学、图形和动画等领域的研究和开发(也包括其他需要快速准确模拟的领域)。MuJoCo 可用于帮助机器学习应用实现基于模型的计算,例如<ruby>控制综合<rt>control synthesis</rt></ruby>、<ruby>状态估计<rt>state estimation</rt></ruby>、<ruby>系统识别<rt>system identification</rt></ruby>、<ruby>机制设计<rt>mechanism design</rt></ruby>、通过<ruby>逆动力学<rt>inverse dynamics</rt></ruby>来进行数据分析,以及<ruby>并行采样<rt>parallel sampling</rt></ruby>。它也可以用作标准模拟器,例如用于游戏和交互式虚拟环境。(LCTT 译注:这段话中涉及到不少专业词汇,鉴于译者水平有限,若有谬误,请在评论中指出,同时也欢迎在评论中科普,一起学习~)
|
||||
|
||||
根据 DeepMind 的说法,以下是 MuJoCo 适合协作的一些功能:
|
||||
|
||||
* 能够模拟复杂机制的综合模拟器
|
||||
* 可读、高性能、可移植的代码
|
||||
* 易于扩展的代码库
|
||||
* 丰富的文档,包括面向用户的和代码注释 —— 我们希望学术界和 OSS 社区的同事能够使用这个平台并为代码库做出贡献,从而改善所有人的研究
|
||||
|
||||
DeepMind 还说:
|
||||
|
||||
> “作为没有动态内存分配的 C 库,MuJoCo 非常快。不幸的是,原始物理速度一直受到 Python 包装器的阻碍:全局解释器锁(GIL)和非编译代码的存在,使得批处理、多线程操作无法执行。在下面的路线图中,我们将解决这个问题。”
|
||||
|
||||
(LCTT 译注: 这里补充了原文没有提及的路线图和基准测试结果。)
|
||||
|
||||
路线图:
|
||||
|
||||
* 通过批处理、多线程模拟释放 MuJoCo 的速度潜力
|
||||
* 通过改进内部内存管理支持更大的场景
|
||||
* 新的增量编译器,带来更好的模型可组合性
|
||||
* 通过 Unity 集成支持更好的渲染
|
||||
* 对物理导数的原生支持,包括解析和有限差分
|
||||
|
||||
> “目前,我们想分享两个常见模型的基准测试结果。注意,这个结果是在运行 Windows 10 的标准 AMD Ryzen 9 5950X 机器上获得的。”
|
||||
|
||||
![基准测试结果][3]
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.opensourceforu.com/2022/05/deepminds-open-source-mujoco-is-available-on-github/
|
||||
|
||||
作者:[Laveesh Kocher][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lkxed](https://github.com/lkxed)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.opensourceforu.com/author/laveesh-kocher/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.opensourceforu.com/wp-content/uploads/2022/05/deepmind1.jpg
|
||||
[2]: https://github.com/deepmind/mujoco
|
||||
[3]: https://assets-global.website-files.com/621e749a546b7592125f38ed/628b971675cb60d74f5fa189_2A54E864-FE90-49E4-8E58-FE40298303E2.jpeg
|
@ -0,0 +1,76 @@
|
||||
[#]: subject: "Plex Desktop Player is Now Available for Linux"
|
||||
[#]: via: "https://news.itsfoss.com/plex-desktop-linux/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lkxed"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14656-1.html"
|
||||
|
||||
Plex 桌面播放器现已支持 Linux
|
||||
======
|
||||
|
||||
> Plex.tv 终于增加了 Linux 桌面版本和全新的 HTPC 应用。不过,它目前只提供了 Snap 包。
|
||||
|
||||
![plex][1]
|
||||
|
||||
Plex 是一个流行的流媒体播放器,同时,它能够用作一个媒体服务器软件。
|
||||
|
||||
事实上,它也是 [Linux 上最好的媒体服务器软件][2] 之一。
|
||||
|
||||
是的,这个媒体服务器已经支持 Linux,而且还提供了一个 [包含安装步骤的教程][3]。
|
||||
|
||||
### Linux 上的 Plex 桌面播放器提供 Snap 包
|
||||
|
||||
我知道很多人都不喜欢使用 Snap 包来安装这个桌面播放器。但现在,这个桌面播放器已在 Snap 商店中提供,你可以轻松地在任何 Linux 发行版上安装它。
|
||||
|
||||
![][4]
|
||||
|
||||
幸运的是,这个桌面播放器的 [公告][5] 还提到他们正在开发一个 **Flatpak 包**,它应该会在近期登陆 Flathub。
|
||||
|
||||
这样一来,借助 Flatpak 和 Snap 软件包,Plex 就可以成为在 Linux 上流式传输和组织个人媒体收藏的绝佳选择。
|
||||
|
||||
除了桌面应用程序,如果你利用你的 Linux 机器连接到一个大屏幕来观看所有的内容,还有一个 Plex HTPC(有计划发布 Flatpak 软件包)。
|
||||
|
||||
![][6]
|
||||
|
||||
顺便说一句,HTPC 是 PMP TV(全称为 Plex Media Player TV)模式的继承者。
|
||||
|
||||
他们在官网上与它的 Linux 桌面应用程序一同发布了这款产品。
|
||||
|
||||
使用 HTPC,这个桌面应用就可以和电视共享,并支持音频直通、刷新率切换、控制器和可配置输入映射等高级功能。
|
||||
|
||||
![][7]
|
||||
|
||||
因此,如果你有一个大屏幕,并且想要连接你的系统(不管是什么桌面平台)的话,你现在可以使用 HTPC 应用程序来完成。
|
||||
|
||||
> **[Plex 桌面版][8]**
|
||||
|
||||
> **[Plex HTPC][9]**
|
||||
|
||||
在 Linux 系统或联网电视上流式传输内容时,你通常会使用什么呢?你觉得 Plex 能满足你的需求吗?即然它支持 Linux 了,你会想要用它来替代当前使用的软件吗?
|
||||
|
||||
欢迎在评论区告诉我们你的想法!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/plex-desktop-linux/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lkxed](https://github.com/lkxed)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/wp-content/uploads/2022/05/plex-ft.jpg
|
||||
[2]: https://itsfoss.com/best-linux-media-server/
|
||||
[3]: https://itsfoss.com/install-plex-ubuntu/
|
||||
[4]: https://news.itsfoss.com/wp-content/uploads/2022/05/plex-desktop-ubuntu.jpg
|
||||
[5]: https://www.plex.tv/blog/way-to-be-htpc/
|
||||
[6]: https://news.itsfoss.com/wp-content/uploads/2022/05/plex-snap-1024x524.jpg
|
||||
[7]: https://news.itsfoss.com/wp-content/uploads/2022/05/plex-feat-1024x576.jpg
|
||||
[8]: https://snapcraft.io/plex-desktop
|
||||
[9]: https://snapcraft.io/plex-htpc
|
@ -0,0 +1,81 @@
|
||||
[#]: subject: "AlmaLinux Continues the Legacy of CentOS with the Release of Version 9"
|
||||
[#]: via: "https://news.itsfoss.com/almalinux-9-release/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "PeterPan0106"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14644-1.html"
|
||||
|
||||
CentOS 的继承者 AlmaLinux 9 发布
|
||||
======
|
||||
|
||||
> AlmaLinux 9 是基于 Red Hat Enterprise Linux 9 的最新版本,添加了新的壁纸并进一步增强了性能。
|
||||
|
||||
![almalinux][1]
|
||||
|
||||
如果你一直在关注我们的话,应当知道 [AlmaLinux 9.0 测试版][2] 已于上月发布。
|
||||
|
||||
AlmaLinux 是目前 [最好的 RHEL 替代版][3] 之一。其最新的稳定版是基于 RHEL 9 的,这也成为了 CentOS 的一个很好的替代品。
|
||||
|
||||
最新的 AlmaLinux 9 支持所有主流架构,包括 Intel/AMD(x86_64)、ARM64 (aarch64)、IBM PowerPC(ppc64le)和 IBM Z(s390x)。
|
||||
|
||||
### AlmaLinux 9.0 有哪些改变呢
|
||||
|
||||
AlmaLinux 9.0 在这个版本中使用了 Linux 内核 5.14。它包括对云和容器开发的改进,以及对网络控制台的完善。
|
||||
|
||||
还包括其他变化带来的性能改进。更新包括:
|
||||
|
||||
#### 新壁纸
|
||||
|
||||
![AlmaLinux 9][4]
|
||||
|
||||
在 AlmaLinux 9.0 中,更新了一些新的壁纸。
|
||||
|
||||
这些新的壁纸看起来很美观,并提供了更丰富的选择。
|
||||
|
||||
#### Linux 内核 5.14
|
||||
|
||||
最大的变化是升级到了 Linux 内核 5.14,它带来了更新的硬件支持,以及其他各种改进。
|
||||
|
||||
Linux 内核 5.14 的改进详见 [这篇文章][5]。
|
||||
|
||||
#### 更新的软件包
|
||||
|
||||
这个版本带有新的软件包更新。其中包括 Git 2.31、PHP 8.0、Perl 5.32 和 MySQL 8.0。
|
||||
|
||||
GCC 也被更新到最新的 GCC 11。
|
||||
|
||||
其它更新包括 Python 3.9 和最新版的 LLVM、Rust 和 Go compilers,使应用程序的现代化更快、更容易。
|
||||
|
||||
更多技术方面的更新详见 [官方更新日志][6]。
|
||||
|
||||
### 下载 AlmaLinux 9.0
|
||||
|
||||
你可以在 [官方镜像网站][7] 下载最新的镜像。在镜像站也包含了 .torrent 文件的下载选项。
|
||||
|
||||
> **[AlmaLinux 9.0][8]**
|
||||
|
||||
*你认为基于 RHEL 的最新版 AlmaLinux 9.0 怎么样呢?你有计划在服务器上迁移到最新的版本吗?欢迎评论。*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/almalinux-9-release/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[PeterPan0106](https://github.com/PeterPan0106)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/wp-content/uploads/2022/05/alma-linux-9.jpg
|
||||
[2]: https://linux.cn/article-14500-1.html
|
||||
[3]: https://itsfoss.com/rhel-based-server-distributions/
|
||||
[4]: https://news.itsfoss.com/wp-content/uploads/2022/05/alma-linux-wallpapers-9-1024x609.jpg
|
||||
[5]: https://news.itsfoss.com/kernel-5-14-release/
|
||||
[6]: https://wiki.almalinux.org/release-notes/9.0.html
|
||||
[7]: https://mirrors.almalinux.org/isos.html
|
||||
[8]: https://mirrors.almalinux.org/isos.html
|
@ -0,0 +1,72 @@
|
||||
[#]: subject: "Tails Linux Users Warned Against Using the Tor Browser: Here’s why!"
|
||||
[#]: via: "https://news.itsfoss.com/tails-tor-browser/"
|
||||
[#]: author: "Rishabh Moharir https://news.itsfoss.com/author/rishabh/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "lkxed"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-14654-1.html"
|
||||
|
||||
Tails 警告用户不要使用 Tor 浏览器:原因如下!
|
||||
======
|
||||
|
||||
> Tails 5.1 将针对“可绕过 Tor 浏览器安全措施的危险漏洞”提供关键修复。以下是它的全部内容。
|
||||
|
||||
![Tails][1]
|
||||
|
||||
Tails 是一个专注于安全的便携式 Linux 发行版,最近,它的开发团队发布了有关其当前版本的重要公告。他们警告用户在 **Tails 5.0 或更早版本** 上使用 Tor 浏览器时,避免输入或使用任何个人或敏感信息。
|
||||
|
||||
Tor 浏览器是 Tails 事实上的(默认)网页浏览器,它有助于在用户连接到互联网时,保护他们的在线身份。它主要被各种记者和活动家用来逃避审查。不过,普通用户也可以使用它。
|
||||
|
||||
### 问题说明
|
||||
|
||||
最近,有人发现了两个令人讨厌的漏洞,它们允许有害网站能够从其他网站窃取用户的信息。
|
||||
|
||||
这些都是在 Firefox 使用的 JavaScript 引擎中发现的。
|
||||
|
||||
但是,Tor 与此有什么关系?对于那些不知道的人来说,Tor 实际上是 Firefox 的一个复刻,因此包含许多类似的功能,如 JavaScript 引擎。
|
||||
|
||||
具体来说,在 [Mozilla 发布的公告][2] 中,这些漏洞已被确定为 CVE-2022-1802 和 CVE-2022-1529。
|
||||
|
||||
Tails 公告中也对此进行了说明:
|
||||
|
||||
> “例如,在你访问恶意网站后,控制该网站的攻击者可能会在同一个 Tails 会话期间,访问你随后发送到其他网站的密码或其他敏感信息。”
|
||||
|
||||
### 你应该停止使用 Tail 发行版吗?
|
||||
|
||||
没有这个必要。
|
||||
|
||||
用户会很高兴地知道,这些漏洞并不影响 Tor 的连接。这意味着,如果你不交换任何敏感信息,如密码、个人信息、信息等,你可以随意地浏览互联网。
|
||||
|
||||
Tails 中的其他应用程序,尤其是 Thunderbird,仍然可以安全使用,因为 JavaScript 在使用时会被禁用。
|
||||
|
||||
此外,你也可以在 Tor 浏览器中启用最高的安全级别。这是推荐的,因为(该级别下)JavaScript 引擎会被禁用。不过,请注意,这会使网站无法正常运行。
|
||||
|
||||
换句话说,如果你知道自己在做什么的话,Tails 发行版仍然可以安全使用。
|
||||
|
||||
### 漏洞修复即将发布
|
||||
|
||||
好的消息是,Mozilla 已经在上游修补了这些错误,现在就等 Tails 团队发布修复程序了。
|
||||
|
||||
至于何时发布,他们是这样说的:
|
||||
|
||||
> 此漏洞将在 Tails 5.1(**5 月 31 日**)中修复,但我们的团队没有能力提前发布紧急版本。
|
||||
|
||||
因此,你最好的选择是等待下周的 Tails 5.1 发布。你可以阅读 Tails 开发团队的 [官方公告][3] 以了解更多信息。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/tails-tor-browser/
|
||||
|
||||
作者:[Rishabh Moharir][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[lkxed](https://github.com/lkxed)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/rishabh/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://news.itsfoss.com/wp-content/uploads/2022/05/tails-5-0-privacy-issue.jpg
|
||||
[2]: https://www.mozilla.org/en-US/security/advisories/mfsa2022-19/
|
||||
[3]: https://tails.boum.org/security/prototype_pollution/index.en.html
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user