mirror of
https://github.com/LCTT/TranslateProject.git
synced 2026-08-20 03:53:30 +08:00
归档 202310
This commit is contained in:
@@ -0,0 +1,556 @@
|
||||
[#]: subject: "ABCs of FreeDOS: 26 commands I use all the time"
|
||||
[#]: via: "https://opensource.com/article/22/6/26-freedos-commands"
|
||||
[#]: author: "Jim Hall https://opensource.com/users/jim-hall"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "robsean"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16276-1.html"
|
||||
|
||||
FreeDOS 基础:从 A 到 Z
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 我很高兴分享我最喜欢的 26 个 FreeDOS 命令。
|
||||
|
||||
我家最早的一批计算机中有一台运行着一款名称为 DOS 的命令行操作系统,即 “<ruby>磁盘操作系统<rt>Disk Operating System</rt></ruby>”。我是在 DOS 系统环境中长大的,学会了利用命令行来使我的工作更轻松。很多其他的人也是如此。我们非常爱 DOS ,所以在 1994 年 6 月 29 日,我们创建了 FreeDOS 工程。
|
||||
|
||||
如果你的 FreeDOS 的初学者,你可能会对如何使用其附带的不同的命令行程序感到困惑。让我们从我最喜欢的 26 个 FreeDOS 命令开始吧。要学习更多的信息,在大部分命令的后面添加 `/?` 选项来获取更多的信息:
|
||||
|
||||
```
|
||||
C:\>attrib /?
|
||||
ATTRIB v2.1 - 显示或更高文件属性。
|
||||
版权所有 (c) 1998-2003,遵循 GPL2 协议。
|
||||
|
||||
语法:ATTRIB { options | [path][file] | /@[list] }
|
||||
|
||||
选项:
|
||||
|
||||
+H 设置隐藏属性。 -H 清除隐藏属性。
|
||||
+S 设置系统属性。 -S 清除系统属性。
|
||||
+R 设置只读属性。 -R 清除只读属性。
|
||||
+A 设置存档属性。 -A 清楚存档属性。
|
||||
|
||||
/S 处理具体指定路径中的所有目录中的文件。
|
||||
/D 处理带有通配符的参数的目录名称。
|
||||
/@ 处理文件,文件列在具体指定文件 中 [或 stdin]。
|
||||
|
||||
示例:
|
||||
|
||||
attrib file -rhs
|
||||
attrib +a -r dir1 dir2*.dat /s
|
||||
attrib -hs/sd /@list.txt *.*
|
||||
```
|
||||
|
||||
### A 是 ATTRIB
|
||||
|
||||
`ATTRIB` 程序显示或更改文件的 *属性* 。属性可以是以下四个值之一:隐藏(`H`)、系统 `S`)、只读(`R`)、存档(`A`)。
|
||||
|
||||
标记为隐藏的文件将不会在目录列表中显示。例如,假设你想隐藏一个名称为 `SECRET.TXT` 的文件,这样就不会有人它在那里。首先,你可以显示该文件的属性,以便查看它的当前设置:
|
||||
|
||||
```
|
||||
C:\FILES>attrib secret.txt
|
||||
[----A] SECRET.TXT
|
||||
```
|
||||
|
||||
为隐藏这个文件,使用加号(`+`)操作符来开启用隐藏属性,像这样:
|
||||
|
||||
```
|
||||
C:\FILES>attrib +h secret.txt
|
||||
[----A] -> [-H--A] SECRET.TXT
|
||||
C:\FILES>dir
|
||||
Volume in drive C is FREEDOS2022
|
||||
Volume Serial Number is 333D-0B18
|
||||
|
||||
Directory of C:\FILES
|
||||
|
||||
. <DIR> 05-27-2022 9:22p
|
||||
.. <DIR> 05-27-2022 9:22p
|
||||
0 file(s) 0 bytes
|
||||
2 dir(s) 279,560,192 bytes free
|
||||
```
|
||||
|
||||
`ATTRIB` 的另一种常见使用方法是操作只读属性,这样你就不会意外地覆盖重要的文件。假设你想要保护 `SECRET.TXT` 文件,这样你就不能删除或更改它。使用 `+R` 修饰符 ,打开只读属性,像这样:
|
||||
|
||||
```
|
||||
C:\FILES>attrib +r secret.txt
|
||||
[----A] -> [---RA] SECRET.TXT
|
||||
C:\FILES>del secret.txt
|
||||
C:\FILES\SECRET.TXT: Permission denied
|
||||
no file removed.
|
||||
```
|
||||
|
||||
### B 是“哔哔”声
|
||||
|
||||
如果你需要在一个批处理文件中添加一些激情活力,你可以使用 `BEEP` 命令来获取用户的注意力。`BEEP` 不会在屏幕上显示任何内容,但是会简单地发出一个 “哔哔” 的声音信号。
|
||||
|
||||
注意:`BEEP` 使用个人计算机内置的扬声器来发出 “哔哔” 声。如果你使用一台虚拟机器来引导启用 FreeDOS,检查你的系统是否建立正确的模拟个人计算机扬声器。否则,你将不会听到任何声音。
|
||||
|
||||
### C 是 CD
|
||||
|
||||
像 Linux 一样,FreeDOS 支持目录,这会允许你以一种来你有帮助的方式来组织你的文件。例如,你可以在一个名称为 `FILES` 的目录中存放你的全部文件,对于某些类型的文件,你可能会有其它的目录,例如,针对字处理器文件的 `DOCS` ,或者针对表格文件的 `SPRDSHT`。
|
||||
|
||||
你可以使用 `CD`(即 “<ruby>更改目录<rt>change directory</rt></ruby>”) 命令来导航到一个目录。`CHDIR` 命令和 `CD` 命令一样,如果你更喜欢使用这种语法的话。
|
||||
|
||||
为更改到一个新的目录,使用 `CD` 目录和目标目录:
|
||||
|
||||
```
|
||||
C:\>cd files
|
||||
C:\FILES>cd sprdsht
|
||||
C:\FILES\SPRDSHT>dir
|
||||
Volume in drive C is FREEDOS2022
|
||||
Volume Serial Number is 333D-0B18
|
||||
|
||||
Directory of C:\FILES\SPRDSHT
|
||||
|
||||
. <DIR> 05-27-2022 9:59p
|
||||
.. <DIR> 05-27-2022 9:59p
|
||||
FIB WKS 2,093 05-27-2022 10:07p
|
||||
LAB1 WKS 2,087 05-27-2022 10:10p
|
||||
MIS100 WKS 2,232 05-27-2022 10:05p
|
||||
3 file(s) 6,412 bytes
|
||||
2 dir(s) 279,527,424 bytes free
|
||||
```
|
||||
|
||||
你不必一次导航一层目录。相反,你可以使用一个 `CD` 命令和提供完整的你想要更改到的目录路径:
|
||||
|
||||
```
|
||||
C:\>cd \files\sprdsht
|
||||
C:\FILES\SPRDSHT>dir
|
||||
Volume in drive C is FREEDOS2022
|
||||
Volume Serial Number is 333D-0B18
|
||||
|
||||
Directory of C:\FILES\SPRDSHT
|
||||
|
||||
. <DIR> 05-27-2022 9:59p
|
||||
.. <DIR> 05-27-2022 9:59p
|
||||
FIB WKS 2,093 05-27-2022 10:07p
|
||||
LAB1 WKS 2,087 05-27-2022 10:10p
|
||||
MIS100 WKS 2,232 05-27-2022 10:05p
|
||||
3 file(s) 6,412 bytes
|
||||
2 dir(s) 279,527,424 bytes free
|
||||
```
|
||||
|
||||
### D 是 DELTREE
|
||||
|
||||
如果需要删除一个单个文件,你可以使用 `DEL` 命令。为删除一个空的目录,你可以使用 `RMDIR` 或 `RD` 命令。但是,如果你想删除一个有很多文件和子目录的目录?
|
||||
|
||||
一个包含有其它目录的目录称为 *目录树* 。你可以使用 `DELTREE` 命令来删除整个目录树。例如,为删除你的 `FILES` 目录,包括其中包含的所有的文件和目录,输入这个命令:
|
||||
|
||||
```
|
||||
C:\>deltree files
|
||||
|
||||
[DEFAULT-BUILD v1.02g] of DELTREE. The "ROOT-SAFETY-CHECK" is enabled.
|
||||
|
||||
Delete directory "C:\FILES"
|
||||
and all its subdirectories?
|
||||
|
||||
[Y] [N] [Q], [ENTER] ? Y
|
||||
|
||||
==> Deleting "C:\FILES" ...
|
||||
```
|
||||
|
||||
你可以使用一个单一的 `DELTREE` 命令来轻松快捷地完成很多工作,因此,FreeDOS 的 `DELTREE` 提示会询问你是否真的想要这样做。谨慎地使用这个命令。
|
||||
|
||||
### E 是 EDIT
|
||||
|
||||
如果你需要在 FreeDOS 上编辑一个文本文件,`EDIT` 程序会让你轻松快速地完成任务。例如,要开始编辑一个名称为 `HELLO.TXT` 的文件,输入 `EDIT HELLO.TXT` 。如果 `HELLO.TXT` 文件已经存在,`EDIT` 打开文件并开始编辑。如果 `HELLO.TXT` 尚未存在,那么 `EDIT` 为你开启一个新的文件。
|
||||
|
||||
![Image of edit][3]
|
||||
|
||||
FreeDOS 的 `EDIT` 使用了一种友好的界面,对大多数人来说应该很容易使用。使用菜单来访问 `EDIT` 的各种特色功能,包括保存文件、打开一个新的文件、或者退出编辑器。为访问菜单,在你的键盘上按下 `Alt` 按键,然后使用箭头按键来避开和进入选择的动作。
|
||||
|
||||
![Image of save menu][4]
|
||||
|
||||
### F 是 FIND
|
||||
|
||||
如果你需要在一个文件中查找文本,`FIND` 命令可以完成这项工作。类似于在 Linux 上的 `fgrep` ,`FIND` 会打印一些包含一个字符串的行。例如,为检查 `FDCONFIG.SYS` 文件中的 "Menu Default" 条目项,像这样使用 `FIND` :
|
||||
|
||||
```
|
||||
C:\>find "MENUDEFAULT" fdconfig.sys
|
||||
|
||||
---------------- FDCONFIG.SYS
|
||||
MENUDEFAULT=2,5
|
||||
```
|
||||
|
||||
如果你不确定你想要查找的字符串是使用的大写字母还是小写字母,添加 `/I` 选项来忽略字母的大小写情况:
|
||||
|
||||
```
|
||||
C:\>find /i "menudefault" fdconfig.sys
|
||||
---------------- FDCONFIG.SYS
|
||||
MENUDEFAULT=2,5
|
||||
```
|
||||
|
||||
### G 是 GRAPHICS
|
||||
|
||||
如果你想要捕捉屏幕,你可以使用你键盘上的 `PrtScr`(<ruby>打印屏幕<rt>Print Screen</rt></ruby>)按键来直接将你显示器上的文本打印到打印机上。不过,这只对纯文本来说有效。如果你要打印图形屏幕,你需要加载 `GRAPHICS` 程序。
|
||||
|
||||
`GRAPHICS` 支持不同的打印机类型,包括 HP 的 PCL 打印机、Epson 的点阵打印机,和兼容 PostScript 的打印机。例如,如果有一台连接到你的计算机的 HP 的激光打印机,你可以通过输入这条命令来为这台打印机加载支持:
|
||||
|
||||
```
|
||||
C:\>graphics hpdefault
|
||||
Running in MS GRAPHICS compatibility mode...
|
||||
Using HPPCL type for type hpdefault
|
||||
If you think this is not correct, mail me (see help text).
|
||||
Printing black as white and white as black
|
||||
which internally uses /I of this GRAPHICS.
|
||||
You can use the following command directly instead of
|
||||
GRAPHICS [your options] in the future:
|
||||
LH GRAPH-HP /I
|
||||
Note that GRAPH-HP allows extra options:
|
||||
/E economy mode, /1 use LPT1, /2 use LPT2, /3 use LPT3,
|
||||
/R for random instead of ordered dither
|
||||
/C for 300dpi instead of 600dpi
|
||||
Driver to make 'shift PrtScr' key work
|
||||
even in CGA, EGA, VGA, MCGA graphics
|
||||
modes loaded, in HP PCL mode.
|
||||
```
|
||||
|
||||
### H 是 HELP
|
||||
|
||||
如果你刚刚来到 FreeDOS 的世界,你可以通过输入 `HELP` 来获取如何使用不同命令的提示。这将带来 FreeDOS 的帮助系统,包含所有命令的文档:
|
||||
|
||||
![Image of FreeDos help system][6]
|
||||
|
||||
### I 是 IF
|
||||
|
||||
你可以使用 `IF` 语句来将条件语句添加到你的命令行或*批处理文件* 。`IF` 进行一次简短的测试,然后执行一个单个命令。例如,如果存在某个文件,那么打印结果 “It's there”,你可以输入:
|
||||
|
||||
```
|
||||
C:\>if exist kernel.sys echo It's there
|
||||
It's there
|
||||
```
|
||||
|
||||
如果你想要测试相反的东西,在测试内容前,使用 `NOT` 关键字。例如,如果两个字符串的值不相同,那么打印结果 “Not equal” ,输入这条语句:
|
||||
|
||||
```
|
||||
C:\>if not "a"=="b" echo Not equal
|
||||
Not equal
|
||||
```
|
||||
|
||||
### J 是 JOIN
|
||||
|
||||
早期的 DOS 版本是相当简单的;DOS 的第一个版本甚至不支持目录。为向这些较旧的程序提供向后兼容性,我们需要 `JOIN` 程序来作为一种巧妙的应变方法。`JOIN` 使用驱动器字母代替路径,这样,你可以将旧程序放入其自己的子目录中,但是,使用一个单个驱动器字母来访问它。
|
||||
|
||||
让我们假设你有一个名称为 `VC` 的旧应用程序,它不懂目录。为保持 `VC` 的工作,你可以将它的路径 <ruby>连接<rt>join</rt></ruby> 到一个驱动器字母。例如:
|
||||
|
||||
```
|
||||
JOIN V: D:\VC
|
||||
```
|
||||
|
||||
FreeDOS 将 `JOIN` 实施为 `SWSUBST`,它也兼备类似 `SUBST` 命令的特色功能。为将 `D:\VC` 路径链接到到一个名称为 `V:` 的驱动器字母,输入:
|
||||
|
||||
```
|
||||
C:\>swsubst v: d:\vc
|
||||
C:\>dir v:
|
||||
Volume in drive V is DATA
|
||||
Volume Serial Number is 212C-1DF8
|
||||
|
||||
Directory of V:\
|
||||
|
||||
. <DIR> 02-21-2022 10:35p
|
||||
.. <DIR> 02-21-2022 10:35p
|
||||
VC COM 27,520 07-14-2019 4:48p
|
||||
|
||||
1 file(s) 27,520 bytes
|
||||
2 dir(s) 48,306,176 bytes free
|
||||
```
|
||||
|
||||
### K 是 KEYB
|
||||
|
||||
DOS 默认采用美式英语键盘布局。你的键盘是不同的,你可以使用 `KEYB` 命令来加载新的键盘语言布局。例如,为为加载一种德语键盘布局,输入:
|
||||
|
||||
```
|
||||
C:\>keyb gr
|
||||
FreeDOS KEYB 2.01 - (c) Aitor Santamaría Merino - GNU GPL 2.0
|
||||
Keyboard layout : C:\FREEDOS\BIN\KEYBOARD.SYS:GR [858] (3)
|
||||
```
|
||||
|
||||
### L 是 LABEL
|
||||
|
||||
FreeDOS 使用 <ruby>标签<rt>label</rt></ruby> 来命名每个软盘驱动器和硬盘驱动器。这些标签提供了一种识别磁盘可能包含内容的方法。当你需要将文件存储到单个不同的软盘上时,`LABEL` 命令是非常有用的,你可以标记一个软盘 “Data”,另一个软盘为 “Games” 。
|
||||
|
||||
为分配一个新的标签到一个驱动器。或者更改在一个驱动器上的现存标签。像这样使用标签:
|
||||
|
||||
```
|
||||
D:\>label d: data
|
||||
D:\>dir /w
|
||||
Volume in drive D is DATA
|
||||
Volume Serial Number is 212C-1DF8
|
||||
|
||||
Directory of D:\
|
||||
|
||||
[123] [ABILITY] [ASEASY] [GAMES2] [QUATTRO]
|
||||
[SRC] [TEMP] [THE] [VC] [WORD]
|
||||
[WS400] EDLIN16.EXE EDLIN32.EXE MYENV.BAT
|
||||
3 file(s) 113,910 bytes
|
||||
11 dir(s) 48,306,176 bytes free
|
||||
```
|
||||
|
||||
### M 是 MEM
|
||||
|
||||
运行程序和加载驱动程序会占用内存。可以查看你的系统有多少内存,以及有多少可用来运行 DOS 程序,使用 `MEM` 命令:
|
||||
|
||||
```
|
||||
C:\>mem
|
||||
|
||||
Memory Type Total Used Free
|
||||
---------------- -------- -------- --------
|
||||
Conventional 639K 11K 628K
|
||||
Upper 104K 18K 86K
|
||||
Reserved 281K 281K 0K
|
||||
Extended (XMS) 15,224K 537K 14,687K
|
||||
---------------- -------- -------- --------
|
||||
Total memory 16,248K 847K 15,401K
|
||||
|
||||
Total under 1 MB 743K 29K 714K
|
||||
|
||||
Total Expanded (EMS) 8,576K (8,781,824 bytes)
|
||||
Free Expanded (EMS) 8,192K (8,388,608 bytes)
|
||||
|
||||
Largest executable program size 628K (643,104 bytes)
|
||||
Largest free upper memory block 84K ( 85,728 bytes)
|
||||
FreeDOS is resident in the high memory area.
|
||||
```
|
||||
|
||||
### N 是 NANSI
|
||||
|
||||
如果你想添加一点颜色到 FreeDOS 命令行,你可以使用 ANSI 转义序列。这些序列之所以叫“转义”,是因为每个序列都以代码 33(转义字符 `ESC`)和一个由美国国家标准化协会(ANSI)定义的特殊字符序列为开头。
|
||||
|
||||
FreeDOS 通过 `NANSI.SYS` 驱动程序来支持 ANSI 转义序列。随着 `NANSI` 的加载,你的 FreeDOS 控制台将解释 ANSI 转义序列,例如,设置文本颜色。
|
||||
|
||||
![Image of Nansi][8]
|
||||
|
||||
### O 是 oZone
|
||||
|
||||
FreeDOS 是一款命令行操作系统,但是一些人们更喜欢使用可备选的图形化用户界面。这就是为什么 FreeDOS 的 1.3 发行版包含一些图形化桌面的原因。我喜欢的一款名称为 oZone 的图形化桌面,它提供一种时尚、现代化外观的界面。
|
||||
|
||||
![Image of Ozone GUI][9]
|
||||
|
||||
注意,oZone 有一点烦人的错误,可能还需要一些来自外部开发者的关爱。如果你想让 oZone 变得更好,可以下载源文件代码做些贡献。
|
||||
|
||||
### P 是 PROMPT
|
||||
|
||||
标准的 FreeDOS 命令行提示符会告诉你:你所在文件系统中的位置。当你第一次启动 FreeDOS 时,你的提示符看起来像 `C:\>`, 这意味着 `\`(根)目录在 `C:` 驱动器。`>` 字符表示着你可以在那里输入命令。
|
||||
|
||||
在你的提示符中,如果你更喜欢不同的信息,使用 `PROMPT` 目录来更改它。你可以使用一个带有 `$` 的开头的特殊代码来显示不同的信息,例如,`$D` 用于日期、`$T` 用于时间。例如,你可以使用 `$$` 指令来使你的 FreeDOS 命令行看起来像一个 Linux 提示符,来打印一个单个美元符号:
|
||||
|
||||
```
|
||||
C:\>prompt $$
|
||||
$
|
||||
```
|
||||
|
||||
输入 `PROMPT /?` 来查看一份全部特殊代码的列表。
|
||||
|
||||
### Q 是 QBASIC
|
||||
|
||||
FreeDOS 实际上没有 QBASIC 。它是针对 MS-DOS 的专有 BASIC 语言环境。作为备选方案,我们提供一些开放源文件的编译器,包括一些针对 BASIC 编程的编译器。
|
||||
|
||||
FreeBASIC 编译器可以编译外来的大多数 QBASIC 程序。这里有一个简单的 “猜数” 示例:
|
||||
|
||||
```
|
||||
dim number as integer
|
||||
dim guess as integer
|
||||
randomize timer
|
||||
number = int( 10 * rnd() ) + 1
|
||||
print "Guess the number from 1 to 10:"
|
||||
do
|
||||
input guess
|
||||
if guess < number then print "Too low"
|
||||
if guess > number then print "Too high"
|
||||
loop while guess <> number
|
||||
print "That's right!"
|
||||
```
|
||||
|
||||
使用 `FBC` 命令来编译 FreeBASIC 程序:
|
||||
|
||||
```
|
||||
C:\DEVEL\FBC>fbc guess.bas
|
||||
```
|
||||
|
||||
这里是这个简单游戏的快速演示:
|
||||
|
||||
```
|
||||
C:\DEVEL\FBC>guess
|
||||
Guess the number from 1 to 10:
|
||||
? 5
|
||||
Too high
|
||||
? 3
|
||||
Too low
|
||||
? 4
|
||||
That's right!
|
||||
```
|
||||
|
||||
### R 是 REM
|
||||
|
||||
在编写程序时,注释是极好的;注释帮助我们理解程序应该要做什么。可以在批处理文件中使用 `REM` 来做同样的事。在批处理文件中,在 `REM` 的后面的任何东西都将会被忽略。
|
||||
|
||||
```
|
||||
REM this is a comment
|
||||
```
|
||||
|
||||
### S 是 SET
|
||||
|
||||
FreeDOS 命令行使用一系列称为 <ruby>环境变量<rt>environment variables</rt></ruby> 的变量,让你来自定义你的系统。你可以使用 `SET` 命令来设置这些变量。例如。使用 `DIRCMD` 变量来控制 `DIR` 如何排列目录列表。为设置 `DIRCMD` 变量,使用 `SET` 命令:
|
||||
|
||||
```
|
||||
SET DIRCMD=/O:GNE
|
||||
```
|
||||
|
||||
这告诉 `DIR` 先按照目录分组(`G`)来排序(`O`)输出,然后再按照名称(`N`)和扩展名(`E`)来排序结果。
|
||||
|
||||
### T 是 TYPE
|
||||
|
||||
`TYPE` 命令是最常使用的 DOS 命令之一。`TYPE` 显示一个文件的内容,类似于在 Linux 上的 `cat` 。
|
||||
|
||||
```
|
||||
C:\DEVEL>type hello.c
|
||||
#include
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
puts("Hello world");
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
||||
### U 是 UNZIP
|
||||
|
||||
在 Linux 上,你可能更熟悉标准的 Unix 存档命令: `tar`。在 FreeDOS 上也有一个 `tar` 版本(和其它大量的流行的存档程序),但是,在 DOS 上的事实上的标准的存档命令是 `ZIP` 和 `UNZIP` 。两者都默认安装在 FreeDOS 1.3 之中。
|
||||
|
||||
比如说,我有一些文件的一个 zip 存档。如果我想提取整个 Zip 文件,我可以只使用 `UNZIP` 命令,并将 Zip 文件作为命令行的选项来提供。这将在我当前工作目录中开始提取存档文件。除非我正在恢复一些东西的先前版本,我通常不希望覆盖我的当前文件。在这种情况下,我将提取存档到一个新的目录。你可以使用 `-d`(“<ruby>目标<rt>destination</rt></ruby>”)命令行选项来具体指定目标路径:
|
||||
|
||||
```
|
||||
D:\SRC>unzip monkeys.zip -d monkeys.new
|
||||
Warning: TZ environment variable not found, cannot use UTC times!!
|
||||
Archive: monkeys.zip
|
||||
creating: monkeys.new/monkeys/
|
||||
inflating: monkeys.new/monkeys/banana.c
|
||||
inflating: monkeys.new/monkeys/banana.obj
|
||||
inflating: monkeys.new/monkeys/banana.exe
|
||||
creating: monkeys.new/monkeys/putimg/
|
||||
inflating: monkeys.new/monkeys/putimg/putimg.c
|
||||
inflating: monkeys.new/monkeys/putimg/putimg.obj
|
||||
inflating: monkeys.new/monkeys/putimg/putimg.exe
|
||||
```
|
||||
|
||||
为学习更多关于 `ZIP` 和 `UNZIP` 命令的信息,可以阅读 [如何在 FreeDOS 上存档文件][11]。
|
||||
|
||||
### V 是 VER
|
||||
|
||||
在 DOS 的古老岁月中,`VER` 命令会报告你正在运行的 DOS 发行版本,例如:“MS-DOS 5.0.D”。对于 FreeDOS,`VER` 命令将给予你额外的详细信息,例如 FreeDOS Shell 的版本:
|
||||
|
||||
```
|
||||
C:\DEVEL>ver
|
||||
FreeCom version 0.85a - WATCOMC - XMS_Swap [Jul 10 2021 19:28:06]
|
||||
```
|
||||
|
||||
如果你还想查看 FreeDOS 内核版本和 DOS 兼容性等级,添加 `/R` 选项:
|
||||
|
||||
```
|
||||
C:\DEVEL>ver /r
|
||||
|
||||
FreeCom version 0.85a - WATCOMC - XMS_Swap [Jul 10 2021 19:28:06]
|
||||
|
||||
DOS version 7.10
|
||||
FreeDOS kernel 2043 (build 2043 OEM:0xfd) [compiled May 14 2021]
|
||||
```
|
||||
|
||||
### W 是 WHICH
|
||||
|
||||
FreeDOS 命令行可以运行来自记录在 `PATH` 变量中的不同的目录列表的程序。你可以使用 `WHICH` 命令来准确地识别出程序的位置。只需要输入 `WHICH` 加上你想要定位的程序名称:
|
||||
|
||||
```
|
||||
C:\>which xcopy
|
||||
xcopy C:\FREEDOS\BIN\XCOPY.EXE
|
||||
```
|
||||
|
||||
### X 是 XCOPY
|
||||
|
||||
`COPY` 命令只能将文件从一个位置复制到另一个位置。如果你想扩大复制的范围来包括一些目录,使用 `XCOPY` 命令。我通常添加 `/E` 选项来包含所有的子目录,包括空的子目录,这样,我可以复制整个目录树。这样就可以有效地备份我正在工作的任意工程:
|
||||
|
||||
```
|
||||
D:\SRC>xcopy /e monkeys monkeys.bak
|
||||
Does MONKEYS.BAK specify a file name
|
||||
or directory name on the target (File/Directory)? d
|
||||
Copying D:\SRC\MONKEYS\PUTIMG\PUTIMG.C
|
||||
Copying D:\SRC\MONKEYS\PUTIMG\PUTIMG.OBJ
|
||||
Copying D:\SRC\MONKEYS\PUTIMG\PUTIMG.EXE
|
||||
Copying D:\SRC\MONKEYS\BANANA.C
|
||||
Copying D:\SRC\MONKEYS\BANANA.OBJ
|
||||
Copying D:\SRC\MONKEYS\BANANA.EXE
|
||||
6 file(s) copied
|
||||
```
|
||||
|
||||
### Y 是 Yellow
|
||||
|
||||
这不是一个命令,而是关于 DOS 如何显示颜色的有趣的百科知识。如果你仔细留心过 FreeDOS,你可能已经注意到,文本只能获取有限的颜色范围—— 十六种文本颜色、八种背景颜色。
|
||||
|
||||
IBM 的 5153 彩色显示器,通过点亮不同亮度等级的微小的红、绿、蓝荧光点的方式创建 16 种文本颜色和 8 种背景颜色来为用户显示颜色。早期的个人计算机只能以“标准强度”级别来显示背景颜色;只有文本颜色可以使用明亮颜色。
|
||||
|
||||
如果你查看文本颜色,你有黑色、蓝色、绿色、蓝绿色、红色、品红色、橙色和白色。这些颜色的“明亮”版本有亮黑色(暗灰色)、亮蓝色、亮绿色、亮蓝绿色、亮红色、亮品红色、黄色和亮白色。橙色的“明亮”版本有实际上是黄色。没有“亮橙色”。
|
||||
|
||||
如果你想要学习更多关于文本颜色的信息,阅读我们关于 [FreeDOS 为什么有 16 种颜色][12] 的文章。
|
||||
|
||||
### Z 是 ZIP
|
||||
|
||||
你可以在 DOS 命令行中使用 `ZIP` 来创建文件和目录的存档。这是一种很便利的方法:可以备份你的工作,或者发布一个 “软件包” 来在未来的 FreeDOS 发行版中使用。例如,比如说,我想备份我的工程源文件代码,其中包含这些源文件文件:
|
||||
|
||||
```
|
||||
D:\SRC>zip -9r monkeys.zip monkeys
|
||||
zip warning: TZ environment variable not found, cannot use UTC times!!
|
||||
adding: monkeys/ (stored 0%)
|
||||
adding: monkeys/banana.c (deflated 66%)
|
||||
adding: monkeys/banana.obj (deflated 26%)
|
||||
adding: monkeys/banana.exe (deflated 34%)
|
||||
adding: monkeys/putimg/ (stored 0%)
|
||||
adding: monkeys/putimg/putimg.c (deflated 62%)
|
||||
adding: monkeys/putimg/putimg.obj (deflated 29%)
|
||||
adding: monkeys/putimg/putimg.exe (deflated 34%)
|
||||
```
|
||||
|
||||
ZIP 支持很多命令行选项来完成不同的工作,但是,我使用最多的命令行选项是: `-r` 用于递归处理目录和子目录、`-9` 用于提供尽可能大的压缩比。`ZIP` 和 `UNZIP` 使用类 Unix 命令行,因此,你可以在短划线后面合并选项: `-9r` 将在 Zip 文件中给予最大压缩比和包括子目录。
|
||||
|
||||
关于如何使用 `ZIP` 和 `UNZIP` 命令的更多详细信息,阅读 [如何在 FreeDOS 上存档文件][13]。
|
||||
|
||||
### 新的 FreeDOS 指南
|
||||
|
||||
准备好你的 FreeDOS 旅程的下一步了吗?查看我们的新的电子书,现在开始尝试我们的 FreeDOS !
|
||||
|
||||
> **[FreeDOS 使用指南][14]**
|
||||
|
||||
> **[深入 FreeDOS 高级指南][15]**
|
||||
|
||||
*(题图:MJ/0b21dcc8-4c8d-457b-9e0d-fbbe5dd08c60)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/6/26-freedos-commands
|
||||
|
||||
作者:[Jim Hall][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/jim-hall
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/freedos-fish-laptop-color.png
|
||||
[2]: https://opensource.com/article/22/6/linux-attr-command
|
||||
[3]: https://opensource.com/sites/default/files/2022-06/FREEDedit_0.png
|
||||
[4]: https://opensource.com/sites/default/files/2022-06/Freededit-save.png
|
||||
[5]: https://opensource.com/Linux%20find%20cheat%20sheet
|
||||
[6]: https://opensource.com/sites/default/files/2022-06/Freedhelp.system.png
|
||||
[7]: https://opensource.com/article/22/6/linux-cheat-command
|
||||
[8]: https://opensource.com/sites/default/files/2022-06/FreeDnansi.png
|
||||
[9]: https://opensource.com/sites/default/files/2022-06/FreeDozone.png
|
||||
[10]: https://opensource.com/article/21/1/fortran
|
||||
[11]: https://opensource.com/article/21/6/archive-files-freedos
|
||||
[12]: https://opensource.com/article/21/6/freedos-sixteen-colors
|
||||
[13]: https://opensource.com/article/21/6/archive-files-freedos
|
||||
[14]: https://opensource.com/downloads/guide-using-freedos
|
||||
[15]: https://opensource.com/downloads/advanced-freedos
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/12/102950rnookbm1124y54k1.jpg
|
||||
@@ -0,0 +1,132 @@
|
||||
[#]: subject: "Artificial Intelligence: Explaining the Basics"
|
||||
[#]: via: "https://www.opensourceforu.com/2022/08/artificial-intelligence-explaining-the-basics/"
|
||||
[#]: author: "Deepu Benson https://www.opensourceforu.com/author/deepu-benson/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "toknow-gh"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16326-1.html"
|
||||
|
||||
人工智能教程(一):基础知识
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 如果你是关注计算机领域最新趋势的学生或从业者,你应该听说过人工智能、数据科学、机器学习、深度学习等术语。作为人工智能系列文章的第一篇,本文将解释这些术语,并搭建一个帮助初学者入门的简易教学平台。
|
||||
|
||||
如今,计算机科学领域的学生和从业者绝对有必要了解<ruby>人工智能<rt>artificial intelligence</rt></ruby>、<ruby>数据科学<rt>data science</rt></ruby>、<ruby>机器学习<rt>machine learning</rt></ruby>、<ruby>深度学习<rt>deep learning</rt></ruby>方面的基本知识。但是应该从哪里开始呢?
|
||||
|
||||
为了找到答案,我浏览了大量人工智能的教材和教程。它们有的从大量数学理论开始,有的用编程语言无关的方式(不要求你了解某一门特定的编程语言)讲解,有的假设你是线性代数、概率论和统计学专家。在很大程度上,它们都很有用。但它们都没有回答最重要的问题:真正的初学者应该从哪里开始学习人工智能?
|
||||
|
||||
开始学习人工智能的方式多种多样,但是我对它们各有担忧。涉及太多的数学会让人分心,但如果数学介绍得太少就好像驾驶员不知道汽车引擎在哪里一样。对于未来的人工智能工程师和数据科学家来说,从进阶概念开始讲解是最有效率的方式,因为他们精通线性代数、概率论和统计学。如果从基础知识开始,然后在中间某个地方结束也可以,只要学员想要在这里结束学习。考虑到所有这些事实,我认为初学者的人工智能教程应该从基础知识开始,并以一个实际的人工智能项目结束。这个项目可能很小,但是在相同任务上它将会超越任何传统项目。
|
||||
|
||||
本系列将从最基础的知识讲到中等水平内容。除了讨论人工智能,我还希望对相关的话题进行一些澄清,因为人们对人工智能、机器学习、数据科学等术语有很多困惑。人工智能程序是必要的,因为我们每天会产生海量的数据。根据互联网上查询到的结果,我们每天大约会产生 2.5x10<sup>18</sup> 字节的数据。但是,这些数据中的大多数与我们完全无关,包括大量没有价值的 YouTube 视频,不经思考就发送的电子邮件,琐碎的新闻报道等等。然而,这片浩瀚的数据海洋中同样蕴含着无价的宝贵知识。传统软件无法完成处理这些数据的艰巨任务。人工智能是少数能够应对这种信息过载的技术之一。
|
||||
|
||||
当谈到到人工智能时,我们还需要区分事实和假象。我记得几年前听一位人工智能专家的演讲。他讲述了一个人工智能图像识别系统,它能近乎绝对准确地分辨西伯利亚雪橇犬和西伯利亚雪狼的图像。在互联网上搜索一下,你会看到这两种动物有多么相似。如果这个系统确实那么准确,它将是人工智能的奇迹。可惜的是,事实并非如此。该图像识别系统只是对图像的背景进行了分类。西伯利亚雪橇犬是家养动物,它的图像背景中几乎总会有一些矩形或圆形的物体。而西伯利亚雪狼是野生动物,它所在的背景中有雪。这些例子导致近年来人们对人工智能提出了准确性担保要求。
|
||||
|
||||
确实,最近几年人工智能展现了一些真正的力量。举个简单例子就是 YouTube、Amazon 等网站的推荐系统。很多时候我惊讶于它们的推荐结果,就好像它们会读心术一样。然而不论这些推荐的质量如何,“人工智能到底是好是坏?”都是一个很热门话题。我认为,一个像《终结者》中机器有意识地攻击人类的未来还遥遥无期。然而,前面那句话中的“有意识地”一词非常重要。目前的人工智能系统可能发生故障,并且意外地伤害到人类。但是,许多号称具有人工智能能力的系统实际上只是包含大量分支和循环的常规软件。因此目前可以安全地说,我们还没有在日常生活中看到人工智能的真正威力。不论是好的影响(如治愈癌症),还是坏的影响(合成的世界领导人视频导致的暴动和战争),我们都只能拭目以待了。就个人而言,我相信人工智能是一种福祉,并将大大提高未来几代人的生活质量。
|
||||
|
||||
### 什么是人工智能?
|
||||
|
||||
在我们进一步探讨之前,让我们试着理解人工智能(AI)、机器学习(ML)、深度学习(DL)、数据科学(DS)等之间的联系和区别。这些术语经常被误用为同义词。图 1 表示了人工智能、机器学习、深度学习和数据科学之间的关系。当然这不是唯一的划分方式,你可能会看到其它的划分图。但在我看来,图 1 是最贴切的,它能够最大程度地概括这些领域之间关系。
|
||||
|
||||
![图 1:人工智能体系结构和数据科学][1]
|
||||
|
||||
在本系列的第一篇文章中,我不会对每个术语定义进行精确的定义。我认为在现阶段,精确地定义它们是适得其反的,是浪费时间。但在后续的文章中,我们将重新讨论这些术语并正式定义它们。目前我们可以暂时把人工智能看作是可以在某种程度上模仿人类智能的程序。那人类智能又是指什么呢?
|
||||
|
||||
想象一下你的人工智能程序是一个一岁大的婴儿。这个宝宝会通过听周围人说话来学习母语。他/她将很快学会识别形状,颜色,物体等,没有任何困难。此外,他/她将能够对周围人的情绪做出反应。例如,任何一个三岁的婴儿都知道如何用甜言蜜语让父母给他/她巧克力和棒棒糖。同样,人工智能程序也将能够感知并适应环境,就像婴儿一样。然而,这种真正的人工智能只能在遥远的未来实现。
|
||||
|
||||
图 1 显示机器学习是人工智能的真子集,它也是实现人工智能系统的技术之一。机器学习是使用大量数据来训练程序的技术,以便有效地执行必要的任务。它的准确性随着训练集的增大而增加。请注意,还有其它技术用于开发人工智能系统,如基于布尔逻辑的系统,基于模糊逻辑的系统,基于遗传编程的系统等。然而,如今机器学习是实现人工智能系统的最主流的技术。图 1 还显示深度学习是机器学习的真子集,它只是众多机器学习技术中的一种。但目前实际上大多数严肃的机器学习技术都用到了深度学习。在这一点上,我甚至避免尝试定义深度学习。请记住,深度学习涉及到使用大型人工神经网络。
|
||||
|
||||
那数据科学(图 1 中的红圈)是做什么的呢?数据科学是计算机科学/数学领域中的一门处理和解读大规模数据的学科。我说的“大”,有多大呢?早在 2010 年,Facebook 等一些企业巨头就声称它们的服务器可以处理几 Pb 的数据。当我们说大数据时,通常指的是 Tb 或 Pb 级的数据规模,而不是 Gb 级的。许多数据科学应用涉及人工智能、机器学习和深度学习技术的使用。因此,当我们讨论人工智能时,很难不提到数据科学。数据科学也使用很多传统的编程和数据库管理技术,比如使用 Apache Hadoop 进行大数据分析。
|
||||
|
||||
本系列的讨论将主要集中在人工智能和机器学习上,并涉及数据科学。
|
||||
|
||||
### 教学环境搭建
|
||||
|
||||
在表明了本系列文章的主题后,现在说说本教程的前置条件。你需要一台 Linux 电脑(当然 Windows 或 macOS 机器也可以,只是在一些安装步骤上可能需要额外的协助),并了解基本的数学和计算机编程知识。我希望在细心地阅读本系列文章后,你会感受到人工智能的强大。
|
||||
|
||||
用编程语言无关的方式来学习人工智能是可能的,但本系列将基于一门编程语言并涉及大量的编程。在决定使用哪一门编程语言之前,我们先来回顾一下人工智能、机器学习、深度学习和数据科学领域流行的编程语言。Lisp 是一种函数式编程语言,它是最早用于开发人工智能程序的语言之一。Prolog 是一种逻辑编程语言,在 20 世纪 70 年代也被用于同样的目的。我们将在接下来的介绍人工智能历史的文章中更详细地介绍 Lisp 和 Prolog。
|
||||
|
||||
如今,Java、C、C++、Scala、Haskell、MATLAB、R、Julia 等编程语言也被用于开发人工智能程序。Python 在人工智能程序开发中被广泛使用,这使我们选择它作为本教程的编程语言。但我必须声明,从这里开始做的选择(更确切地说,是我替你做的选择),主要考虑的因素是易用性、受欢迎程度、(在少数情况下)我自己对该软件/技术的适应和熟悉程度、对本教程效率的提升。但同时,我也鼓励你尝试其它的编程语言、软件和工具。也许从长远来看,它们对你来说可能是更好的选择。
|
||||
|
||||
现在我们需要立即做出另一个选择:使用 Python 2 还是 Python 3?考虑到本系列有许多年轻的读者,他们还有漫长的职业生涯,我将选择使用 Python 3。在 Ubuntu 系统终端中执行命令 `sudo apt install python3` 安装最新版本的 Python 3(你的系统中可能已经安装了 Python 3)。在其它 Linux 发行版、Windows 和 macOS 机器上安装 Python 3 也非常容易。执行下面的命令查看安装的 Python 3 的版本:
|
||||
|
||||
```
|
||||
python3 --version
|
||||
Python 3.8.10
|
||||
```
|
||||
|
||||
在后续的教程中,我们需要安装许多 Python 包,所以需要一个包管理器。目前主流的包管理器有 pip、Conda 和 Mamba 等。我选择 pip 作为包在本教程的管理器。它相对简单,也是推荐的 Python 安装工具。我认为 Conda 和 Mamba 是比 pip 更强大的工具,你可以尝试一下它们。运行命令 `sudo apt install python3-pip` 将在 Ubuntu 系统中安装 pip。pip、Conda 和 Mamba 是跨平台软件,它们可以安装在 Linux、Windows 和 macOS 系统上。运行命令 `pip3 --version` 查看系统中安装的 pip 版本,如下所示:
|
||||
|
||||
```
|
||||
pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
|
||||
```
|
||||
|
||||
现在我们需要一个 Python 集成开发环境(IDE)。IDE 能帮助程序员更容易地编写、编译、调试和执行代码。PyCharm、IDLE、Spyder 等都是流行的 Python IDE。然而,由于我们的主要目的是开发人工智能和数据科学程序,这里考虑另外两个强有力的竞争者 —— JupyterLab 和谷歌 Colab。严格地说,它们不仅仅是 IDE;它们是非常强大的基于网络的交互式开发环境。两者都可以在网络浏览器上工作,并提供强大的功能。JupyterLab 是由非营利组织 Project Jupyter 支持的免费开源软件。谷歌 Colab 遵循 <ruby>免费增值<rt>freemium</rt></ruby> 模式,即基本功能免费,附加功能收费。我认为谷歌 Colab 比 JupyterLab 功能更强大。但是由于谷歌 Colab 的免费增值模式,以及我相对缺乏谷歌 Colab 的使用经验,在本教程中我选择 JupyterLab。但我仍然强烈建议你去了解一下谷歌 Colab。
|
||||
|
||||
可以使用命令 `pip3 install JupyterLab` 在本地安装 JupyterLab。执行命令 `jupyter-lab` 将在系统的默认网络浏览器中运行 JupyterLab。Project Jupyter 还提供一个更老的类似系统,称为Jupyter Notebook。可以通过 `pip3 install Notebook` 命令在本地安装 Jupyter Notebook,用`Jupyter Notebook` 运行它。但 Jupyter Notebook 的功能不如 JupyterLab 强大,且官方宣布它最终会被 JupyterLab 取代。在本教程中,我们将在合适的阶段使用 JupyterLab。但在开始阶段,我们将使用 Linux 终端来运行 Python 程序,因此急需的是包管理器 pip。
|
||||
|
||||
Anaconda 是一个非常流行的 Python 和 R 编程语言发行版,它主要用于机器学习和数据科学领域。作为未来的人工智能工程师和数据科学家,熟悉使用 Anaconda 也是一个不错的选择。
|
||||
|
||||
现在我们需要确定最重要的一点 —— 本教程的风格。有大量人工智能开发相关的 Python 库,比如 NumPy、SciPy、Pandas、Matplotlib、Seaborn、TensorFlow、Keras、Scikit-learn 和 PyTorch。许多关于人工智能、机器学习和数据科学的教材和教程都是基于对其中一个或多个库的完整讲解。尽管对特定包的功能进行这样的覆盖讲解是一种高效的方式,但我的教程是更面向数学的。我们将首先讨论开发人工智能程序所需的数学概念,然后再介绍需要的 Python 基础知识和 Python 库。我们会为了探索实现这些数学概念所需的特性而不断回顾这些 Python 库。有时我也会要求你自己学习一些 Python 和数学的基本概念。
|
||||
|
||||
在完成这些准备工作之后,如果我们就在这里结束,任何代码或数学概念都不讲,那将是一种罪过。因此,我们将继续学习人工智能和机器学习中最重要的数学概念:向量和矩阵。
|
||||
|
||||
#### 向量和矩阵
|
||||
|
||||
矩阵是按行和列排列的数字、符号或数学表达式构成的矩形阵列。图 2 显示了一个 2 × 3 矩阵,它有 2 行和 3 列。如果你熟悉编程,在许多流行的编程语言中这个矩阵可以表示为一个二维数组。只有一行的矩阵称为行向量,只有一列的矩阵称为列向量。<!-- $[11, 22, 33]$ --> <img style="transform: translateY(0.1em); background: white;" src="https://latex.codecogs.com/png.latex?%5B11%2C%2022%2C%2033%5D"> 就是一个行向量。
|
||||
|
||||
![图 2:一个: A 2 × 3 的矩阵][2]
|
||||
|
||||
为什么矩阵和向量在人工智能和机器学习中如此重要呢?人工智能和机器学习中广泛使用线性代数,而矩阵和向量是线性代数的核心。几个世纪以来,数学家们一直在研究矩阵和向量的性质和应用。高斯、欧拉、莱布尼茨、凯利、克莱姆和汉密尔顿等数学家在线性代数和矩阵论领域都有以他们的名字命名的定理。多年来,线性代数中发展出了许多分析矩阵和向量性质的技术。
|
||||
|
||||
复杂的数据通常可以很容易用向量或矩阵来表示。举一个简单的例子,从一个人的医疗记录中,可以得到详细的年龄、身高(厘米)、体重(公斤)、收缩压、舒张压和空腹血糖(毫克/分升)。这些信息可以很容易用行向量来表示,<!-- $[60, 160, 90, 130, 95, 160]$ --> <img style="transform: translateY(0.1em); background: white;" src="https://latex.codecogs.com/png.latex?%5B60%2C%20160%2C%2090%2C%20130%2C%2095%2C%20160%5D"> 。人工智能和机器学习的第一个挑战来了:如果医疗记录有十亿条怎么办?即使动用成千上万的专业人员从中手动提取数据,这项任务也是无法完成的。因此,人工智能和机器学习利用程序来提取数据。
|
||||
|
||||
人工智能和机器学习的第二个挑战是数据解读。这是一个广阔的领域,有许多技术值得探索。我将在后续文章中介绍相关内容。人工智能和机器学习应用除了面临数学/计算方面的挑战外,还面临硬件方面的挑战。随着处理的数据量的增加,数据存储、处理器速度、功耗等也成为人工智能应用面临的重要挑战。但现在让我们先抛开这些挑战,动手编写第一行人工智能代码。
|
||||
|
||||
我们将编写一个简单的 Python 脚本,用来将两个向量相加。我们将用到名为 NumPy 的 Python 库,它支持多维矩阵(数组)的数学运算。用命令 `pip3 install numpy` 为 Python 3 安装 NumPy 包。如果你使用的是 JupyterLab、谷歌 Colab 或 Anaconda,那么 NumPy 应该已经被预安装了。但是为了演示,在本系列的前几篇文章中,我们都将在 Linux 终端上操作。在 Linux 终端上执行命令 ` python3` 进入 Python 控制台。在这个控制台中可以逐行执行 Python 代码。图 3 展示了在控制台中逐行运行 Python 代码,将两个向量相加,并输出结果。
|
||||
|
||||
![图 3:两个向量求和的 Python 代码][3]
|
||||
|
||||
首先,让我们试着逐行理解这些代码。由于本教程假定的编程经验很少,所以我将代码行标记为【基本】或【AI】。标记为【基本】的行是经典 Python 代码,标记为【AI】的行是用于开发人工智能程序的代码。通过区分基本和进阶的 Python 代码,我希望具有基本知识和中级编程技能的程序员都能够高效地使用本教程。
|
||||
|
||||
```
|
||||
import numpy as np #【基本】
|
||||
a = np.array([11, 22, 33]) #【AI】
|
||||
b = np.array([44, 55, 66]) #【AI】
|
||||
c = np.add(a, b) #【AI】
|
||||
print(c) #【基本】
|
||||
```
|
||||
|
||||
`import numpy as np` 导入 numpy 库并将其命名为 `np`。Python 中的 `import` 语句类似于在 C/C++ 用 `#include` 来包含头文件,或者在 Java 中用`import` 来使用包。
|
||||
|
||||
`a = np.array([11, 22, 33])` 和 `b = np.array([44, 55, 66]) ` 分别创建了名为 `a` 和 `b` 的一维数组(为了便于理解,目前假设向量等价于一维数组)。
|
||||
|
||||
`c = np.add(a, b)` 将向量 `a` 和`b` 相加,并将结果存储在名为 `c` 的向量中。当然,用 `a`,`b`,`c` 作为变量名是一种糟糕的编程实践,但数学家倾向于将向量命名为 <!-- $u$ --> <img style="transform: translateY(0.1em); background: white;" src="https://latex.codecogs.com/png.latex?u">、<!-- $v$ --> <img style="transform: translateY(0.1em); background: white;" src="https://latex.codecogs.com/png.latex?v">、<!-- $w$ --> <img style="transform: translateY(0.1em); background: white;" src="https://latex.codecogs.com/png.latex?w"> 等。如果你完全没有 Python 编程经验,请自行了解 Python 变量的相关知识。
|
||||
|
||||
`print(c)` 在终端上打印对象的值,即向量 `[55 77 99]`。你可以暂时这样理解向量相加, `c = [55=11+44 77=22+55 99=33+66]`。如果你想正式地了解向量和矩阵是如何相加的,但手头又没有相关的教材,我建议阅读维基百科上关于矩阵加法的文章。在网上搜索一下就会发现,用经典的 C/C++ 或 Java 程序来实现向量相加需要更多的代码。这说明 Python 很适合处理向量和矩阵。当我们执行越来越复杂的向量运算时,Python 的强大将进一步显现。
|
||||
|
||||
在我们结束本文之前,我要做两个声明。第一,上面讨论的示例只处理了两个行向量(确切地说是 1 x 3 的矩阵)的相加,但真正的机器学习应用可能要处理 1000000 X 1000000 的矩阵。但不用担心,通过练习和耐心,我们将能够处理这些问题。第二,本文中给出许多定义包含了粗略的简化和不充分的描述。但如前面所说,在本系列结束之前,我将给这些模糊的术语下一个正式的定义。
|
||||
|
||||
现在我们该结束这篇文章了。我希望所有人都安装文中提到的必要软件,并运行本文中的代码。在下一篇文章中,我们将首先讨论人工智能的历史、范畴和未来,然后深入探讨线性代数的支柱——矩阵论。
|
||||
|
||||
*(题图:MJ/25071901-abc4-4144-bf27-4d98bb1d9301/)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://www.opensourceforu.com/2022/08/artificial-intelligence-explaining-the-basics/
|
||||
|
||||
作者:[Deepu Benson][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[toknow-gh](https://github.com/toknow-gh)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://www.opensourceforu.com/author/deepu-benson/
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://www.opensourceforu.com/wp-content/uploads/2022/05/Figure-1-The-AI-hierarchy-and-data-science.jpg
|
||||
[2]: https://www.opensourceforu.com/wp-content/uploads/2022/05/Figure-2-A-2-X-3-matrix.jpg
|
||||
[3]: https://www.opensourceforu.com/wp-content/uploads/2022/05/Figure-3-Python-code-to-find-the-sum-of-two-row-vectors.jpg
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/29/155650e3vap2on6vwrrmpx.jpg
|
||||
@@ -0,0 +1,87 @@
|
||||
[#]: subject: "Security buzzwords to avoid and what to say instead"
|
||||
[#]: via: "https://opensource.com/article/22/9/security-buzzword-alternatives"
|
||||
[#]: author: "Seth Kenlon https://opensource.com/users/seth"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16325-1.html"
|
||||
|
||||
“安全”这个热词:应避免使用还是该更直接了当?
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 思考一下,如何在你的开源项目中真正定义安全性吧。
|
||||
|
||||
科技行业以创造“热词”而小有名气,当然,其他行业也是如此。譬如,“故事驱动”和“轻规则”是当下流行的桌游概念,“解构”的汉堡和墨西哥卷饼在高级餐厅颇受欢迎。然而,技术热词的问题在于,它们可能直接影响你的生活。当某人标榜应用程序“安全”,以此来吸引你使用他们的产品,产品实际上是在暗示一种承诺:“安全”的含义就是它是安全的,它值得你的使用与信任。但问题是,“安全”这个词可能指的是许多事情,技术行业常将它用作一个过于泛化的术语,以至于它逐渐失去了实际含义。
|
||||
|
||||
由于“安全”一词可能含义丰富,也可能一无是处,使用它就需要慎之又慎。事实上,最好是尽量避免使用这个词,取而代之的是,诉诸你真正要表达的东西。
|
||||
|
||||
### 当 “安全” 意味着加密
|
||||
|
||||
有时候,“安全” 会被作为 *加密* 的非常不明确的简短表述。在这种情况下,“安全” 指的是,对于外部观察者想要窃听你的数据,要经过一定的困难。
|
||||
|
||||
**避免这样表述:**“本网站稳如磐石且安全无忧。”
|
||||
|
||||
听起来很棒?你可能会想象一个拥有多重二次验证、零知识证明数据存储以及坚决的匿名策略的网站。
|
||||
|
||||
**你可以这么说:**“本网站承诺有 99% 的在线时间,并且其流量都通过 SSL 进行加密和验证。”
|
||||
|
||||
这样一来,承诺的含义变得清晰了,同时也明确了实现 “安全” 的方法(即使用 SSL)以及 “安全“ 的作用范围是什么。
|
||||
|
||||
注意,这里并未对隐私或匿名做出任何明确的承诺。
|
||||
|
||||
### 当 “安全” 意味着访问限制
|
||||
|
||||
有时,“安全” 这个词是指应用程序或设备的访问权限。如果没有明确的解释,“安全” 可能涵盖从无效的“隐蔽即安全”模式,到简单的 htaccess 密码,直到生物识别扫描器等各种概念。
|
||||
|
||||
**避免这样表述:**“我们已经为你防护好了系统。”
|
||||
|
||||
**你可以这么说:**“我们的系统采用了二步验证法。”
|
||||
|
||||
### 当 “安全” 意味着数据存储
|
||||
|
||||
“安全” 这个词也可以指你的数据在服务器或设备上的储存方法。
|
||||
|
||||
**避免这样表述:**“这个设备在数据存储上考虑了安全因素。”
|
||||
|
||||
**你可以这么说:**“这个设备利用全盘加密技术来保护你的数据。”
|
||||
|
||||
当提到远程存储时,“安全” 可能更多指的是谁可以访问存储数据。
|
||||
|
||||
**避免这样表述:**“你的数据是安全的。”
|
||||
|
||||
**你可以这么说:**“你的数据经过 PGP 加密,仅你持有私钥。”
|
||||
|
||||
### 当 “安全” 意味着隐私
|
||||
|
||||
今天,“隐私” 一词几乎和 “安全” 一样宽泛且模糊。一方面,“安全” 似乎必然就涉及 “隐私”,然而,这仅在 '安全' 有明确定义时才成立。是因为设有密码阻止外人进入所以称之为私有吗?还是因为数据已加密且仅你拥有密钥所以归为私有?又或者,由于存储你数据的厂商除了 IP 地址外对你一无所知,这才算是私有?光是口头声明 “隐私”,就像未经说明就声明 “安全” 一样,是不够的。
|
||||
|
||||
**避免这样表述:**“你的数据在我们这里是安全的。”
|
||||
|
||||
**你可以这么说:**“你的数据经 PGP 加密,且只有你拥有私钥。我们不需要你的任何个人信息,唯一能识别你的只有你的 IP 地址。”
|
||||
|
||||
一些网站会声明 IP 地址在日志中保留期限,及非经法律授权绝不向执法部门交出用户数据等诸多承诺。虽然这些并不属于技术 “安全” 的范畴,但它们全都涉及的是信任度,你不能将这些看作是技术规格。
|
||||
|
||||
### 明确所说
|
||||
|
||||
科技是个复杂的话题,极易引发混淆。沟通是至关重要的,虽然有时候简拼和专有名词在某些场合可能管用,但通常来说,讲明白总是比较好的。当你对你的项目的 “安全” 感到自豪,不要只用模糊的词语进行简述。向其他人明确你具体做了什么来保护你的用户,同时也要明确你认为哪些事物已超出你的考量范围,并要经常进行这样的沟通。“安全” 是个好特点,但它的涵盖面过广,所以请勿畏于夸赞自己在某个具体方向上的特别之处。
|
||||
|
||||
*(题图:MJ/b8cc54ee-5556-4106-b9fa-b08539452aa7)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/9/security-buzzword-alternatives
|
||||
|
||||
作者:[Seth Kenlon][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[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/security-lock-password.jpg
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/28/095718zso6aaitoyyv4ain.jpg
|
||||
@@ -0,0 +1,96 @@
|
||||
[#]: subject: "6 Python interpreters to try in 2022"
|
||||
[#]: via: "https://opensource.com/article/22/9/python-interpreters-2022"
|
||||
[#]: author: "Stephan Avenwedde https://opensource.com/users/hansic99"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16294-1.html"
|
||||
|
||||
六大 Python 解释器
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 观察你的代码在其他解释器下运行的表现或许是一项有趣的尝试。
|
||||
|
||||
作为最受欢迎的编程语言之一,Python 需要一个解释器来执行其代码所定义的命令。与其他可直接编译成机器代码的语言不同,Python 代码需要解释器读取它并把它转译给进行相关操作的 CPU。那么,哪些解释器有哪些呢?本文将对其中几种进行介绍。
|
||||
|
||||
### 解释器简介
|
||||
|
||||
提到 Python 解释器,我们通常会想到 `/usr/bin/python` 这个二进制文件。它使你能够执行 `.py` 文件。然而,解释操作仅仅是其中一环。在 Python 代码真正被 CPU 执行之前,都需要经过以下四个步骤:
|
||||
|
||||
1. 词法分析 - 将人类编写的源代码转换为一序列逻辑实体,被称为 <ruby>词法标记<rt>lexical token</rt></ruby>。
|
||||
2. 解析 - 解析器会检查词法标记的语法和语义规则生成 <ruby>抽象语法树<rt>abstract syntax tree</rt></ruby>(AST)。
|
||||
3. 编译 - 编译器会根据 AST 创建 Python 字节码,这些字节码由非常基础的,和平台无关的指令组成。
|
||||
4. 解释 - 解释器处理字节码并执行特定的操作。
|
||||
|
||||
如你所见,在任何实质性的操作发生之前,我们需要走过这些步骤。这也解释了深入研究不同解释器的重要性。
|
||||
|
||||
### 1、CPython
|
||||
|
||||
作为 Python 的参考实现,[CPython][2] 默认地被许多系统所采用。如其名称所示,CPython 是用 C 语言编写的。这也意味着,我们可以 [以 C 语言编写扩展][3],从而让 Python 打通到广泛使用的 C 语言库代码。CPython 广泛应用于各种平台,包括 ARM 和 RISC。然而,作为 Python 的参考实现,CPython 更注重精细的优化,而非运行速度。
|
||||
|
||||
### 2、Pyston
|
||||
|
||||
[Pyston][4] 是一个从 CPython 解释器衍生出的分支,其中实现了性能优化。该项目定位自己为标准 CPython 解释器在处理大型、真实世界应用时的替代品,并有可能加速高达 30%。由于缺乏兼容的二进制包,Pyston 在下载过程中需要重新编译。
|
||||
|
||||
### 3、PyPy
|
||||
|
||||
采用了 RPython 编写的 [PyPy][5] 是一个专为 Python 配备的 [即时(JIT)][6] 编译器,RPython 是 Python 的一个静态类型的子集。不同于 CPython 解释器,PyPy 对源代码进行编译,生成 CPU 可直接执行的机器码。PyPy 是 Python 开发者的实验室,在这里他们能更容易地测试新特性。
|
||||
|
||||
相较于 CPython,PyPy 的执行速度更快。由于 JIT 编译器的特性,长时间运行的应用更能从缓存中受益。PyPy 可以被视为 CPython 的有效替代。虽然其中存在一些缺点,大部分的 C 扩展模块在 PyPy 中也得到支持,但运行速度会相对慢一些。PyPy 扩展模块使用 Python(而不是 C)编写,这使 JIT 编译器能够对其进行优化。只要你的应用程序不依赖于不兼容的模块,PyPy 就是替换 CPython 的理想选择。你可以在项目官网找到一个专门的页面,详细描述 PyPy 与 CPython 的不同之处:[PyPy 与 CPython 的差异][7]
|
||||
|
||||
### 4、RustPython
|
||||
|
||||
顾名思义,[RustPython][8] 是一个由 Rust 编写的 Python 解释器。尽管 Rust 如今还是一个相对年轻的编程语言,但因其优良特性已逐步受到开发者的推崇,甚至被视为 C 和 C++ 的可能接班人。默认情况下,RustPython 的行为与 CPython 的解释器类似,但它也可以选择启用 JIT 编译器。值得一提的是,Rust 工具链能直接编译为 [WebAssembly][9] ,进而允许在浏览器中全面运行解释器。你可以在 [这里][10] 看到它的在线演示。
|
||||
|
||||
### 5、Stackless Python
|
||||
|
||||
[Stackless Python][11] 自称是 Python 编程语言的增强版本。该项目基本上是 CPython 解释器衍生的一个项目,其为该语言添加了微线程、通道和调度器。微线程可以帮助你将代码组织成可以并行运行的 “<ruby>小任务<rt>tasklet</rt></ruby>”。这与采用 [greenlet][12] 模块的绿色线程模型相似。通道可以用作 “小任务” 之间的双向通信。Stackless Python 的一个知名用户是大型多人在线角色扮演游戏 [Eve Online][13]。
|
||||
|
||||
### 6、Micro Python
|
||||
|
||||
如果你的目标平台是微控制器,那么 [MicroPython][14] 将是你的首选。它是一种极简的实现,只需要 16kB 的内存和 256kB 的存储空间。由于其主要面向的是嵌入式环境,MicroPython 的标准库只包含 CPython 丰富的 STL 的一部分。对于开发和测试,或者作为轻量级替代品,MicroPython 也可以在普通的 x86 和 x64 系统上运行。MicroPython 支持 Linux、Windows,以及多种微控制器。
|
||||
|
||||
### 性能
|
||||
|
||||
就其设计而言,Python 本质上是一种运行速度不够快的语言。根据任务性质的不同,各种解释器间存在明显的性能差异。要想弄清楚哪种解释器最适合特定任务,可以参考 [pybenchmarks.org][15]。与使用解释器相比,另一种选择是直接将 Python 二进制代码编译成机器码,例如,[Nuitka][16] 就是能够完成这种工作的项目之一,它可以将 Python 代码编译成 C 代码,然后将 C 代码通过常规的 C 编译器编译成机器码。Python 编译器的主题范围广泛,值得一篇独立的文章来详述。
|
||||
|
||||
### 总结
|
||||
|
||||
Python 是构建快速原型和自动化任务的优秀语言,同时它又易于学习,对初学者友好。如果你平时维持使用 CPython,那么尝试看看你的代码在另一解释器上运行会是什么样子也许会很有趣。如果你是 Fedora 用户,你可以轻松地测试几种其他解释器,因为其包管理器已经提供了需要的二进制文件。你可以在 [fedora.developer.org][17] 上查找更多信息。
|
||||
|
||||
*(题图:MJ/9b24f27b-bd2b-4916-9f33-bcfb9e2b1d33)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/22/9/python-interpreters-2022
|
||||
|
||||
作者:[Stephan Avenwedde][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://opensource.com/users/hansic99
|
||||
[b]: https://github.com/lkxed
|
||||
[1]: https://opensource.com/sites/default/files/lead-images/python-programming-code-keyboard.png
|
||||
[2]: https://github.com/python/cpython#general-information
|
||||
[3]: https://opensource.com/article/21/4/cython
|
||||
[4]: https://github.com/pyston/pyston
|
||||
[5]: https://foss.heptapod.net/pypy/pypy
|
||||
[6]: https://en.wikipedia.org/wiki/Just-in-time_compilation
|
||||
[7]: https://doc.pypy.org/en/latest/cpython_differences.html
|
||||
[8]: https://github.com/RustPython/RustPython
|
||||
[9]: https://opensource.com/article/21/3/webassembly-firefox
|
||||
[10]: https://rustpython.github.io/demo/
|
||||
[11]: https://github.com/stackless-dev/stackless
|
||||
[12]: https://pypi.org/project/greenlet/
|
||||
[13]: https://www.eveonline.com/
|
||||
[14]: https://micropython.org
|
||||
[15]: https://pybenchmarks.org/
|
||||
[16]: https://github.com/Nuitka/Nuitka
|
||||
[17]: https://developer.fedoraproject.org/tech/languages/python/multiple-pythons.html
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/17/232316oa6pjbza2az2b5hv.jpg
|
||||
@@ -0,0 +1,483 @@
|
||||
[#]: subject: "How To Monitor User Activity In Linux"
|
||||
[#]: via: "https://ostechnix.com/monitor-user-activity-linux/"
|
||||
[#]: author: "sk https://ostechnix.com/author/sk/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16297-1.html"
|
||||
|
||||
如何在 Linux 中监控用户活动
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
作为一位 Linux 管理员,你需要跟踪所有用户的活动。当服务器发生故障时,你可以分析和查看用户活动,以便寻找问题的根源。监控 Linux 用户有多种方式。本指南将专门讨论 **GNU 记账工具**,这是一项用于监视 Linux 用户活动的实用工具。
|
||||
|
||||
### 什么是记账工具?
|
||||
|
||||
记账工具可以提供诸如 Linux 系统中的连接、已执行的程序以及系统资源的使用等有底系统使用信息。这些记账工具可以通过 `psacct` 或 `acct` 软件包安装。
|
||||
|
||||
`psacct` 和 `acct` 实际上是相同的。在基于 RPM 的系统中,它以 `psacct` 的形式存在;而在基于 DEB 的系统中,它作为 `acct` 提供。
|
||||
|
||||
你可能想知道 `psacct` 或 `acct` 工具的作用。通常,用户在命令行的历史记录会保存在他们的 `$HOME` 目录下的 `.bash_history` 文件中。有些用户可能会尝试编辑、修改或删除这些历史记录。
|
||||
|
||||
然而,即使他们完全 [清除了命令行历史][1],记账工具依然能够获取用户活动信息。这是因为,**所有进程记账文件都由 root 用户拥有**,而普通用户则无法进行编辑。
|
||||
|
||||
### Linux 中如何安装 psacct 或 acct
|
||||
|
||||
`psacct`/`acct` 被打包在多种流行的 Linux 发行版本中。
|
||||
|
||||
如果要在 Alpine Linux 中安装 `psacct`,请运行以下命令:
|
||||
|
||||
```
|
||||
$ sudo apk add psacct
|
||||
```
|
||||
|
||||
如果在 Arch Linux 及其变体版本(如 EndeavourOS 和 Manjaro Linux)中安装 `acct`,请运行以下命令:
|
||||
|
||||
```
|
||||
$ sudo pacman -S acct
|
||||
```
|
||||
|
||||
在 Fedora、RHEL 及其衍生版本(如 CentOS、AlmaLinux 和 Rocky Linux)中安装 `psacct`,请运行以下命令:
|
||||
|
||||
```
|
||||
$ sudo dnf install psacct
|
||||
```
|
||||
|
||||
在 RHEL 6 以及更早版本中,你应当使用 `yum` 命令而非 `dnf` 来安装 `psacct`。
|
||||
|
||||
```
|
||||
$ sudo yum install psacct
|
||||
```
|
||||
|
||||
在 Debian、Ubuntu 以及 Linux Mint 中,通过如下命令来安装 `acct`:
|
||||
|
||||
```
|
||||
$ sudo apt install acct
|
||||
```
|
||||
|
||||
若在 openSUSE 中安装 `acct`,则运行:
|
||||
|
||||
```
|
||||
$ sudo zypper install acct
|
||||
```
|
||||
|
||||
### 启动 psacct/acct 服务
|
||||
|
||||
要启用并开启 `psacct` 服务,请执行以下命令:
|
||||
|
||||
```
|
||||
$ sudo systemctl enable psacct
|
||||
```
|
||||
|
||||
接着启动 `psacct` 服务:
|
||||
|
||||
```
|
||||
$ sudo systemctl start psacct
|
||||
```
|
||||
|
||||
如果你需要检查 `psacct` 服务是否已加载和激活,可以运行:
|
||||
|
||||
```
|
||||
$ sudo systemctl status psacct
|
||||
```
|
||||
|
||||
在基于 DEB 的系统中,安装完成之后,`acct` 服务会自动启动。
|
||||
|
||||
如果你想验证 `acct` 服务是否已经启动,可以执行以下命令:
|
||||
|
||||
```
|
||||
$ sudo systemctl status acct
|
||||
```
|
||||
|
||||
```
|
||||
● acct.service - Kernel process accounting
|
||||
Loaded: loaded (/lib/systemd/system/acct.service; enabled; vendor preset: enabled)
|
||||
Active: active (exited) since Thu 2022-10-13 16:06:35 IST; 28s ago
|
||||
Docs: man:accton(8)
|
||||
Process: 3241 ExecStart=/usr/sbin/accton /var/log/account/pacct (code=exited, status=0/SUCCESS)
|
||||
Main PID: 3241 (code=exited, status=0/SUCCESS)
|
||||
CPU: 879us
|
||||
|
||||
Oct 13 16:06:35 ubuntu2204 systemd[1]: Starting Kernel process accounting...
|
||||
Oct 13 16:06:35 ubuntu2204 accton[3241]: Turning on process accounting, file set to '/var/log/account/pacct'.
|
||||
Oct 13 16:06:35 ubuntu2204 systemd[1]: Finished Kernel process accounting.
|
||||
```
|
||||
|
||||
### 利用 psacct 或 acct 来监测 Linux 中的用户活动
|
||||
|
||||
`psacct`(进程记账)软件包包含以下用来监测用户和进程活动的工具:
|
||||
|
||||
* `ac` - 提供用户登录时间的统计信息。
|
||||
* `lastcomm` - 展示先前执行过的命令的信息。
|
||||
* `accton` - 开启或关闭进程记账。
|
||||
* `dump-acct` - 把 `accton` 的输出文件转化为易读的格式。
|
||||
* `dump-utmp` - 以易读的方式打印 `utmp` 文件。
|
||||
* `sa` - 汇总信息,关于先前执行的命令。
|
||||
|
||||
现在就让我们一起了解如何通过每个工具来监控 Linux 用户的活动。
|
||||
|
||||
#### 1、使用 ac 命令
|
||||
|
||||
`ac` 工具可以为你提供以小时为单位的连接时间报告,这样你就能知道用户或一组用户连接到系统的时长。
|
||||
|
||||
##### 1.1、展示所有用户的总连接时间
|
||||
|
||||
```
|
||||
$ ac
|
||||
```
|
||||
|
||||
上述命令会显示所有用户的总连接时间(单位为小时)。
|
||||
|
||||
```
|
||||
total 52.91
|
||||
```
|
||||
|
||||
![展示所有用户的总连接时间][3]
|
||||
|
||||
##### 1.2、按日期排序显示所有用户的总连接时间
|
||||
|
||||
你可以通过使用 `-d` 参数,按日期排序显示所有用户的连接时间,操作如下:
|
||||
|
||||
```
|
||||
$ ac -d
|
||||
```
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
May 11 total 4.29
|
||||
May 13 total 3.23
|
||||
May 14 total 7.66
|
||||
May 15 total 8.97
|
||||
May 16 total 0.52
|
||||
May 20 total 4.09
|
||||
May 24 total 1.32
|
||||
Jun 9 total 15.18
|
||||
Jun 10 total 2.97
|
||||
Jun 22 total 2.61
|
||||
Jul 19 total 1.95
|
||||
Today total 0.29
|
||||
```
|
||||
|
||||
![按日期排序显示所有用户的总时间][4]
|
||||
|
||||
##### 1.3、获取各个用户的总连接时间
|
||||
|
||||
使用 `-p` 参数,你可以查看每位用户各自在系统中总的连接时长。
|
||||
|
||||
```
|
||||
$ ac -p
|
||||
```
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
ostechnix 52.85
|
||||
root 0.51
|
||||
total 53.36
|
||||
```
|
||||
|
||||
![获取各个用户的总连接时间][5]
|
||||
|
||||
##### 1.4、显示指定用户的总连接时间
|
||||
|
||||
你还可以显示特定用户的总登录时间。
|
||||
|
||||
```
|
||||
$ ac ostechnix
|
||||
```
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
total 52.95
|
||||
```
|
||||
|
||||
##### 1.5、显示特定用户各日期的总连接时间
|
||||
|
||||
要按日期查看某个用户的登录时间,可以运行:
|
||||
|
||||
```
|
||||
$ ac -d ostechnix
|
||||
```
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
May 11 total 4.29
|
||||
May 13 total 3.23
|
||||
May 14 total 7.66
|
||||
May 15 total 8.97
|
||||
May 16 total 0.01
|
||||
May 20 total 4.09
|
||||
May 24 total 1.32
|
||||
Jun 9 total 15.18
|
||||
Jun 10 total 2.97
|
||||
Jun 22 total 2.61
|
||||
Jul 19 total 1.95
|
||||
Today total 0.68
|
||||
```
|
||||
|
||||
![显示某个用户各日期的总连接时间][6]
|
||||
|
||||
如需更多详情,可参考手册页面。
|
||||
|
||||
```
|
||||
$ man ac
|
||||
```
|
||||
|
||||
#### 2、lastcomm 命令使用示例
|
||||
|
||||
`lastcomm` 工具用于列出过去执行过的命令,它会按执行的最近程度将命令列在前面。
|
||||
|
||||
##### 2.1、展示过去执行的命令
|
||||
|
||||
```
|
||||
$ lastcomm
|
||||
```
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
systemd-hostnam S root __ 0.06 secs Thu Oct 13 17:21
|
||||
systemd-localed S root __ 0.06 secs Thu Oct 13 17:22
|
||||
bash F ostechni pts/1 0.00 secs Thu Oct 13 17:22
|
||||
awk ostechni pts/1 0.00 secs Thu Oct 13 17:22
|
||||
bash F ostechni pts/1 0.00 secs Thu Oct 13 17:22
|
||||
uname ostechni pts/1 0.00 secs Thu Oct 13 17:22
|
||||
bash F ostechni pts/1 0.00 secs Thu Oct 13 17:22
|
||||
sed ostechni pts/1 0.00 secs Thu Oct 13 17:22
|
||||
bash F ostechni pts/1 0.00 secs Thu Oct 13 17:22
|
||||
bash F ostechni pts/1 0.00 secs Thu Oct 13 17:22
|
||||
grep ostechni pts/1 0.00 secs Thu Oct 13 17:22
|
||||
bash F ostechni pts/1 0.00 secs Thu Oct 13 17:22
|
||||
bash F ostechni pts/1 0.00 secs Thu Oct 13 17:22
|
||||
grep ostechni pts/1 0.00 secs Thu Oct 13 17:22
|
||||
bash F ostechni pts/1 0.00 secs Thu Oct 13 17:22
|
||||
bash F ostechni pts/1 0.00 secs Thu Oct 13 17:22
|
||||
[...]
|
||||
```
|
||||
|
||||
##### 2.2、打印特定用户先前执行的命令
|
||||
|
||||
上述命令显示的是所有用户的命令。要显示特定用户以前执行的命令,可以使用下面的命令:
|
||||
|
||||
```
|
||||
$ lastcomm ostechnix
|
||||
```
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
less ostechni pts/1 0.00 secs Thu Oct 13 17:26
|
||||
lastcomm ostechni pts/1 0.00 secs Thu Oct 13 17:26
|
||||
lastcomm ostechni pts/1 0.00 secs Thu Oct 13 17:26
|
||||
lastcomm ostechni pts/1 0.00 secs Thu Oct 13 17:26
|
||||
gdbus X ostechni __ 0.00 secs Thu Oct 13 17:24
|
||||
lastcomm ostechni pts/1 0.00 secs Thu Oct 13 17:24
|
||||
ac ostechni pts/1 0.00 secs Thu Oct 13 17:24
|
||||
update-notifier F ostechni __ 0.00 secs Thu Oct 13 17:23
|
||||
apport-checkrep ostechni __ 0.06 secs Thu Oct 13 17:23
|
||||
apport-checkrep ostechni __ 0.05 secs Thu Oct 13 17:23
|
||||
systemctl ostechni __ 0.00 secs Thu Oct 13 17:23
|
||||
apt-check ostechni __ 0.81 secs Thu Oct 13 17:23
|
||||
dpkg ostechni __ 0.00 secs Thu Oct 13 17:23
|
||||
ischroot ostechni __ 0.00 secs Thu Oct 13 17:23
|
||||
dpkg ostechni __ 0.00 secs Thu Oct 13 17:23
|
||||
[...]
|
||||
```
|
||||
|
||||
##### 2.3、打印特定命令的执行次数
|
||||
|
||||
你还可以查看特定命令被执行的次数。
|
||||
|
||||
```
|
||||
$ lastcomm apt
|
||||
```
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
apt S root pts/2 0.70 secs Thu Oct 13 16:06
|
||||
apt F root pts/2 0.00 secs Thu Oct 13 16:06
|
||||
apt F root pts/2 0.00 secs Thu Oct 13 16:06
|
||||
```
|
||||
|
||||
如上述输出所示,root 用户执行了 `apt` 命令三次。
|
||||
|
||||
更详细的信息,可参考手册页:
|
||||
|
||||
```
|
||||
$ man lastcomm
|
||||
```
|
||||
|
||||
#### 3、sa 命令示例
|
||||
|
||||
`sa` 实用程序将总结关于先前执行的命令的信息。
|
||||
|
||||
##### 3.1、打印所有命令的总结
|
||||
|
||||
```
|
||||
$ sa
|
||||
```
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
1522 1598.63re 0.23cp 0avio 32712k
|
||||
139 570.90re 0.05cp 0avio 36877k ***other*
|
||||
38 163.63re 0.05cp 0avio 111445k gdbus
|
||||
3 0.05re 0.04cp 0avio 12015k apt-check
|
||||
27 264.27re 0.02cp 0avio 0k kworker/dying*
|
||||
2 51.87re 0.01cp 0avio 5310464k Docker Desktop
|
||||
5 0.03re 0.01cp 0avio 785k snap-confine
|
||||
8 59.48re 0.01cp 0avio 85838k gmain
|
||||
5 103.94re 0.01cp 0avio 112720k dconf worker
|
||||
24 3.38re 0.00cp 0avio 2937k systemd-udevd*
|
||||
7 0.01re 0.00cp 0avio 36208k 5
|
||||
3 1.51re 0.00cp 0avio 3672k systemd-timedat
|
||||
2 0.00re 0.00cp 0avio 10236k apport-checkrep
|
||||
2 0.01re 0.00cp 0avio 4316160k ThreadPoolForeg*
|
||||
2 0.00re 0.00cp 0avio 8550k package-data-do
|
||||
3 0.79re 0.00cp 0avio 2156k dbus-daemon
|
||||
12 0.00re 0.00cp 0avio 39631k ffmpeg
|
||||
[...]
|
||||
```
|
||||
|
||||
##### 3.2、查看进程数量和 CPU 分钟数
|
||||
|
||||
要打印基于每个用户的进程数量和 CPU 分钟数,运行带 `-m` 标志的 `sa` 命令:
|
||||
|
||||
```
|
||||
$ sa -m
|
||||
```
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
1525 1598.63re 0.23cp 0avio 32651k
|
||||
root 561 647.23re 0.09cp 0avio 3847k
|
||||
ostechnix 825 780.79re 0.08cp 0avio 47788k
|
||||
gdm 117 13.43re 0.06cp 0avio 63715k
|
||||
colord 2 52.01re 0.00cp 0avio 89720k
|
||||
geoclue 1 1.01re 0.00cp 0avio 70608k
|
||||
jellyfin 12 0.00re 0.00cp 0avio 39631k
|
||||
man 1 0.00re 0.00cp 0avio 3124k
|
||||
kernoops 4 104.12re 0.00cp 0avio 3270k
|
||||
sshd 1 0.05re 0.00cp 0avio 3856k
|
||||
whoopsie 1 0.00re 0.00cp 0avio 8552k
|
||||
```
|
||||
|
||||
##### 3.3、打印用户 ID 和命令名称
|
||||
|
||||
对于账户文件中的每个命令,使用 `-u` 标志打印用户 ID 和命令名称。
|
||||
|
||||
```
|
||||
$ sa -u
|
||||
```
|
||||
|
||||
示例输出:
|
||||
|
||||
```
|
||||
root 0.00 cpu 693k mem 0 io accton
|
||||
root 0.00 cpu 3668k mem 0 io systemd-tty-ask
|
||||
root 0.00 cpu 3260k mem 0 io systemctl
|
||||
root 0.01 cpu 3764k mem 0 io deb-systemd-inv
|
||||
root 0.00 cpu 722k mem 0 io acct.postinst
|
||||
root 0.00 cpu 704k mem 0 io rm
|
||||
root 0.00 cpu 939k mem 0 io cp
|
||||
root 0.00 cpu 704k mem 0 io rm
|
||||
root 0.00 cpu 951k mem 0 io find
|
||||
root 0.00 cpu 911k mem 0 io gzip
|
||||
root 0.00 cpu 722k mem 0 io sh
|
||||
root 0.00 cpu 748k mem 0 io install-info
|
||||
root 0.00 cpu 911k mem 0 io gzip
|
||||
[...]
|
||||
```
|
||||
|
||||
如需更多详细信息,请参考手册页:
|
||||
|
||||
```
|
||||
$ man sa
|
||||
```
|
||||
|
||||
#### 4、dump-acct 和 dump-utmp 命令
|
||||
|
||||
`dump-acct` 实用工具将 accton 格式的输出文件显示为人类可读的格式。
|
||||
|
||||
```
|
||||
$ dump-acct /var/account/pacct
|
||||
```
|
||||
|
||||
`dump-utmp` 将 utmp 文件显示为人类可读的格式。
|
||||
|
||||
```
|
||||
$ dump-utmp /var/run/utmp
|
||||
```
|
||||
|
||||
如需了解更多详情,请参考手册页:
|
||||
|
||||
```
|
||||
$ man dump-acct
|
||||
```
|
||||
|
||||
```
|
||||
$ man dump-utmp
|
||||
```
|
||||
|
||||
#### 5、accton 命令
|
||||
|
||||
`accton` 命令将允许你开启或关闭记账。
|
||||
|
||||
要开启进程记账,请运行:
|
||||
|
||||
```
|
||||
$ accton on
|
||||
```
|
||||
|
||||
要关闭它,运行:
|
||||
|
||||
```
|
||||
$ accton off
|
||||
```
|
||||
|
||||
如需了解更多详情,请参考手册页:
|
||||
|
||||
```
|
||||
$ man accton
|
||||
```
|
||||
|
||||
### 总结
|
||||
|
||||
每个 Linux 管理员都应该知道 GNU 记账实用程序,以便注意所有用户的行为。在故障排除时,这些实用程序会非常有帮助。
|
||||
|
||||
### 资源
|
||||
|
||||
* [GNU 记账实用程序官网][7]
|
||||
|
||||
*(题图:MJ/da3f7e79-2a53-4121-a2ed-d63a22c3d3f4)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://ostechnix.com/monitor-user-activity-linux/
|
||||
|
||||
作者:[sk][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[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-clear-command-line-history-in-linux/
|
||||
[2]: https://ostechnix.tradepub.com/free/w_syst04/prgm.cgi
|
||||
[3]: https://ostechnix.com/wp-content/uploads/2022/10/Display-total-connect-time-of-all-users.png
|
||||
[4]: https://ostechnix.com/wp-content/uploads/2022/10/Show-total-connect-of-all-users-by-day-wise.png
|
||||
[5]: https://ostechnix.com/wp-content/uploads/2022/10/Get-total-connect-time-by-user-wise.png
|
||||
[6]: https://ostechnix.com/wp-content/uploads/2022/10/View-total-connect-time-of-a-certain-user-by-day-wise.png
|
||||
[7]: https://www.gnu.org/software/acct/manual/accounting.html
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/19/105911voe22858b5o7287s.jpg
|
||||
@@ -0,0 +1,517 @@
|
||||
[#]: subject: "Making a DNS query in Ruby from scratch"
|
||||
[#]: via: "https://jvns.ca/blog/2022/11/06/making-a-dns-query-in-ruby-from-scratch/"
|
||||
[#]: author: "Julia Evans https://jvns.ca/"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "Drwhooooo"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16312-1.html"
|
||||
|
||||
从零开始,运用 Ruby 语言创建一个 DNS 查询
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
大家好!前段时间我写了一篇关于“[如何用 Go 语言建立一个简易的 DNS 解析器][1]”的帖子。
|
||||
|
||||
那篇帖子里我没写有关“如何生成以及解析 DNS 查询请求”的内容,因为我觉得这很无聊,不过一些伙计指出他们不知道如何解析和生成 DNS 查询请求,并且对此很感兴趣。
|
||||
|
||||
我开始好奇了——解析 DNS _能_ 花多大功夫?事实证明,编写一段 120 行精巧的 Ruby 语言代码组成的程序就可以做到,这并不是很困难。
|
||||
|
||||
所以,在这里有一个如何生成 DNS 查询请求,以及如何解析 DNS 响应报文的速成教学!我们会用 Ruby 语言完成这项任务,主要是因为不久以后我将在一场 Ruby 语言大会上发表观点,而这篇博客帖的部分内容是为了那场演讲做准备的。:)
|
||||
|
||||
(我尽量让不懂 Ruby 的人也能读懂,我只使用了非常基础的 Ruby 语言代码。)
|
||||
|
||||
最后,我们就能制作一个非常简易的 Ruby 版本的 `dig` 工具,能够查找域名,就像这样:
|
||||
|
||||
```
|
||||
$ ruby dig.rb example.com
|
||||
example.com 20314 A 93.184.216.34
|
||||
```
|
||||
|
||||
整个程序大概 120 行左右,所以 _并不_ 算多。(如果你想略过讲解,单纯想去读代码的话,最终程序在这里:[dig.rb][2]。)
|
||||
|
||||
我们不会去实现之前帖中所说的“一个 DNS 解析器是如何运作的?”,因为我们已经做过了。
|
||||
|
||||
那么我们开始吧!
|
||||
|
||||
如果你想从头开始弄明白 DNS 查询是如何格式化的,我将尝试解释如何自己弄明白其中的一些东西。大多数情况下的答案是“用 Wireshark 去解包”和“阅读 RFC 1035,即 DNS 的规范”。
|
||||
|
||||
## 生成 DNS 查询请求
|
||||
|
||||
### 步骤一:打开一个 UDP 套接字
|
||||
|
||||
我们需要实际发送我们的 DNS 查询,因此我们就需要打开一个 UDP 套接字。我们会将我们的 DNS 查询发送至 `8.8.8.8`,即谷歌的服务器。
|
||||
|
||||
下面是用于建立与 `8.8.8.8` 的 UDP 连接,端口为 53(DNS 端口)的代码。
|
||||
|
||||
```
|
||||
require 'socket'
|
||||
sock = UDPSocket.new
|
||||
|
||||
sock.bind('0.0.0.0', 12345)
|
||||
sock.connect('8.8.8.8', 53)
|
||||
```
|
||||
|
||||
#### 关于 UDP 的说明
|
||||
|
||||
关于 UDP,我不想说太多,但是我要说的是,计算机网络的基础单位是“<ruby>数据包<rt>packet</rt></ruby>”(即一串字节),而在这个程序中,我们要做的是计算机网络中最简单的事情:发送 1 个数据包,并接收 1 个数据包作为响应。
|
||||
|
||||
所以 UDP 是一个传递数据包的最简单的方法。
|
||||
|
||||
它是发送 DNS 查询最常用的方法,不过你还可以用 TCP 或者 DNS-over-HTTPS。
|
||||
|
||||
### 步骤二:从 Wireshark 复制一个 DNS 查询
|
||||
|
||||
下一步:假设我们都不知道 DNS 是如何运作的,但我们还是想尽快发送一个能运行的 DNS 查询。获取 DNS 查询并确保 UDP 连接正常工作的最简单方法就是复制一个已经正常工作的 DNS 查询!
|
||||
|
||||
所以这就是我们接下来要做的,使用 Wireshark (一个绝赞的数据包分析工具)。
|
||||
|
||||
我的操作大致如下:
|
||||
|
||||
1. 打开 Wireshark,点击 “<ruby>捕获<rt>capture</rt></ruby>” 按钮。
|
||||
2. 在搜索栏输入 `udp.port == 53` 作为筛选条件,然后按下回车。
|
||||
3. 在我的终端运行 `ping example.com`(用来生成一个 DNS 查询)。
|
||||
4. 点击 DNS 查询(显示 “Standard query A example.com”)。
|
||||
(“A”:查询类型;“example.com”:域名;“Standard query”:查询类型描述)
|
||||
5. 右键点击位于左下角面板上的 “<ruby>域名系统(查询)<rt>Domain Name System (query)</rt></ruby>”。
|
||||
6. 点击 “<ruby>复制<rt>Copy</rt></ruby>” ——> “<ruby>作为十六进制流<rt>as a hex stream</rt></ruby>”。
|
||||
7. 现在
|
||||
`b96201000001000000000000076578616d706c6503636f6d0000010001`
|
||||
就放到了我的剪贴板上,之后会用在我的 Ruby 程序里。好欸!
|
||||
|
||||
### 步骤三:解析 16 进制数据流并发送 DNS 查询
|
||||
|
||||
现在我们能够发送我们的 DNS 查询到 `8.8.8.8` 了!就像这样,我们只需要再加 5 行代码:
|
||||
|
||||
```
|
||||
hex_string = "b96201000001000000000000076578616d706c6503636f6d0000010001"
|
||||
bytes = [hex_string].pack('H*')
|
||||
sock.send(bytes, 0)
|
||||
|
||||
# get the reply
|
||||
reply, _ = sock.recvfrom(1024)
|
||||
puts reply.unpack('H*')
|
||||
```
|
||||
|
||||
`[hex_string].pack('H*')` 意思就是将我们的 16 位字符串转译成一个字节串。此时我们不知道这组数据到底是什么意思,但是很快我们就会知道了。
|
||||
|
||||
我们还可以借此机会运用 `tcpdump` ,确认程序是否正常进行以及发送有效数据。我是这么做的:
|
||||
|
||||
1. 在一个终端选项卡下执行 `sudo tcpdump -ni any port 53 and host 8.8.8.8` 命令
|
||||
2. 在另一个不同的终端指标卡下,运行 [这个程序][3](`ruby dns-1.rb`)
|
||||
|
||||
以下是输出结果:
|
||||
|
||||
```
|
||||
$ sudo tcpdump -ni any port 53 and host 8.8.8.8
|
||||
08:50:28.287440 IP 192.168.1.174.12345 > 8.8.8.8.53: 47458+ A? example.com. (29)
|
||||
08:50:28.312043 IP 8.8.8.8.53 > 192.168.1.174.12345: 47458 1/0/0 A 93.184.216.34 (45)
|
||||
```
|
||||
|
||||
非常棒 —— 我们可以看到 DNS 请求(”这个 `example.com` 的 IP 地址在哪里?“)以及响应(“在93.184.216.34”)。所以一切运行正常。现在只需要(你懂的)—— 搞清我们是如何生成并解析这组数据的。
|
||||
|
||||
### 步骤四:学一点点 DNS 查询的格式
|
||||
|
||||
现在我们有一个关于 `example.com` 的 DNS 查询,让我们了解它的含义。
|
||||
|
||||
下方是我们的查询(16 位进制格式):
|
||||
|
||||
```
|
||||
b96201000001000000000000076578616d706c6503636f6d0000010001
|
||||
```
|
||||
|
||||
如果你在 Wireshark 上搜索,你就能看见这个查询它由两部分组成:
|
||||
|
||||
* **请求头**:`b96201000001000000000000`
|
||||
* **语句本身**:`076578616d706c6503636f6d0000010001`
|
||||
|
||||
### 步骤五:制作请求头
|
||||
|
||||
我们这一步的目标就是制作字节串 `b96201000001000000000000`(借助一个 Ruby 函数,而不是把它硬编码出来)。
|
||||
|
||||
(LCTT 译注:<ruby>硬编码<rt>hardcode</rt></ruby> 指在软件实现上,将输出或输入的相关参数(例如:路径、输出的形式或格式)直接以**常量**的方式撰写在源代码中,而非在运行期间由外界指定的设置、资源、数据或格式做出适当回应。)
|
||||
|
||||
那么:请求头是 12 个字节。那些个 12 字节到底意味着什么呢?如果你在 Wireshark 里看看(亦或者阅读 [RFC-1035][4]),你就能理解:它是由 6 个 2 字节大小的数字串联在一起组成的。
|
||||
|
||||
这六个数字分别对应查询 ID、标志,以及数据包内的问题计数、回答资源记录数、权威名称服务器记录数、附加资源记录数。
|
||||
|
||||
我们还不需要在意这些都是些什么东西 —— 我们只需要把这六个数字输进去就行。
|
||||
|
||||
但所幸我们知道该输哪六位数,因为我们就是为了直观地生成字符串 `b96201000001000000000000`。
|
||||
|
||||
所以这里有一个制作请求头的函数(注意:这里没有 `return`,因为在 Ruby 语言里,如果处在函数最后一行是不需要写 `return` 语句的):
|
||||
|
||||
```
|
||||
def make_question_header(query_id)
|
||||
# id, flags, num questions, num answers, num auth, num additional
|
||||
[query_id, 0x0100, 0x0001, 0x0000, 0x0000, 0x0000].pack('nnnnnn')
|
||||
end
|
||||
```
|
||||
|
||||
上面内容非常的短,主要因为除了查询 ID ,其余所有内容都由我们硬编码写了出来。
|
||||
|
||||
#### 什么是 `nnnnnn`?
|
||||
|
||||
可能能想知道 `.pack('nnnnnn')` 中的 `nnnnnn` 是个什么意思。那是一个向 `.pack()` 函数解释如何将那个 6 个数字组成的数据转换成一个字节串的一个格式字符串。
|
||||
|
||||
`.pack` 的文档在 [这里][5],其中描述了 `n` 的含义其实是“将其表示为” 16 位无符号、网络(大端序)字节序’”。
|
||||
|
||||
(LCTT 译注:<ruby>大端序<rt>Big-endian</rt></ruby>:指将高位字节存储在低地址,低位字节存储在高地址的方式。)
|
||||
|
||||
16 个位等同于 2 字节,同时我们需要用网络字节序,因为这属于计算机网络范畴。我不会再去解释什么是字节序了(尽管我确实有 [一幅自制漫画尝试去描述它][6])。
|
||||
|
||||
## 测试请求头代码
|
||||
|
||||
让我们快速检测一下我们的 `make_question_header` 函数运行情况。
|
||||
|
||||
```
|
||||
puts make_question_header(0xb962) == ["b96201000001000000000000"].pack("H*")
|
||||
```
|
||||
|
||||
这里运行后输出 `true` 的话,我们就成功了。
|
||||
|
||||
好了我们接着继续。
|
||||
|
||||
### 步骤六:为域名进行编码
|
||||
|
||||
下一步我们需要生成 **问题本身**(“`example.com` 的 IP 是什么?”)。这里有三个部分:
|
||||
|
||||
* **域名**(比如说 `example.com`)
|
||||
* **查询类型**(比如说 `A` 代表 “IPv4 **A**ddress”)
|
||||
* **查询类**(总是一样的,`1` 代表 **IN**ternet)
|
||||
|
||||
最麻烦的就是域名,让我们写个函数对付这个。
|
||||
|
||||
`example.com` 以 16 进制被编码进一个 DNS 查询中,如 `076578616d706c6503636f6d00`。这有什么含义吗?
|
||||
|
||||
如果我们把这些字节以 ASCII 值翻译出来,结果会是这样:
|
||||
|
||||
```
|
||||
076578616d706c6503636f6d00
|
||||
7 e x a m p l e 3 c o m 0
|
||||
```
|
||||
|
||||
因此,每个段(如 `example`)的前面都会显示它的长度(`7`)。
|
||||
|
||||
下面是有关将 `example.com` 翻译成 `7 e x a m p l e 3 c o m 0` 的 Ruby 代码:
|
||||
|
||||
```
|
||||
def encode_domain_name(domain)
|
||||
domain
|
||||
.split(".")
|
||||
.map { |x| x.length.chr + x }
|
||||
.join + "\0"
|
||||
end
|
||||
```
|
||||
|
||||
除此之外,,要完成问题部分的生成,我们只需要在域名结尾追加上(查询)的类型和类。
|
||||
|
||||
### 步骤七:编写 make_dns_query
|
||||
|
||||
下面是制作一个 DNS 查询的最终函数:
|
||||
|
||||
```
|
||||
def make_dns_query(domain, type)
|
||||
query_id = rand(65535)
|
||||
header = make_question_header(query_id)
|
||||
question = encode_domain_name(domain) + [type, 1].pack('nn')
|
||||
header + question
|
||||
end
|
||||
```
|
||||
|
||||
这是目前我们写的所有代码 [dns-2.rb][7] —— 目前仅 29 行。
|
||||
|
||||
## 接下来是解析的阶段
|
||||
|
||||
现在我尝试去解析一个 DNS 查询,我们到了硬核的部分:解析。同样的,我们会将其分成不同部分:
|
||||
|
||||
* 解析一个 DNS 的请求头
|
||||
* 解析一个 DNS 的名称
|
||||
* 解析一个 DNS 的记录
|
||||
|
||||
这几个部分中最难的(可能跟你想的不一样)就是:“解析一个 DNS 的名称”。
|
||||
|
||||
### 步骤八:解析 DNS 的请求头
|
||||
|
||||
让我们先从最简单的部分开始:DNS 的请求头。我们之前已经讲过关于它那六个数字是如何串联在一起的了。
|
||||
|
||||
那么我们现在要做的就是:
|
||||
|
||||
* 读其首部 12 个字节
|
||||
* 将其转换成一个由 6 个数字组成的数组
|
||||
* 为方便起见,将这些数字放入一个类中
|
||||
|
||||
以下是具体进行工作的 Ruby 代码:
|
||||
|
||||
```
|
||||
class DNSHeader
|
||||
attr_reader :id, :flags, :num_questions, :num_answers, :num_auth, :num_additional
|
||||
def initialize(buf)
|
||||
hdr = buf.read(12)
|
||||
@id, @flags, @num_questions, @num_answers, @num_auth, @num_additional = hdr.unpack('nnnnnn')
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
注: `attr_reader` 是 Ruby 的一种说法,意思是“使这些实例变量可以作为方法使用”。所以我们可以调用 `header.flags` 来查看`@flags`变量。
|
||||
|
||||
我们也可以借助 `DNSheader(buf)` 调用这个,也不差。
|
||||
|
||||
让我们往最难的那一步挪挪:解析一个域名。
|
||||
|
||||
### 步骤九:解析一个域名
|
||||
|
||||
首先,让我们写其中的一部分:
|
||||
|
||||
```
|
||||
def read_domain_name_wrong(buf)
|
||||
domain = []
|
||||
loop do
|
||||
len = buf.read(1).unpack('C')[0]
|
||||
break if len == 0
|
||||
domain << buf.read(len)
|
||||
end
|
||||
domain.join('.')
|
||||
end
|
||||
```
|
||||
|
||||
这里会反复读取一个字节的数据,然后将该长度读入字符串,直到读取的长度为 0。
|
||||
|
||||
这里运行正常的话,我们在我们的 DNS 响应头第一次看见了域名(`example.com`)。
|
||||
|
||||
## 关于域名方面的麻烦:压缩!
|
||||
|
||||
但当 `example.com` 第二次出现的时候,我们遇到了麻烦 —— 在 Wireshark 中,它报告上显示输出的域的值为含糊不清的 2 个字节的 `c00c`。
|
||||
|
||||
这种情况就是所谓的 **DNS 域名压缩**,如果我们想解析任何 DNS 响应我们就要先把这个实现完。
|
||||
|
||||
幸运的是,这没**那么**难。这里 `c00c` 的含义就是:
|
||||
|
||||
* 前两个比特(`0b11.....`)意思是“前面有 DNS 域名压缩!”
|
||||
* 而余下的 14 比特是一个整数。这种情况下这个整数是 `12`(`0x0c`),意思是“返回至数据包中的第 12 个字节处,使用在那里找的域名”
|
||||
|
||||
如果你想阅读更多有关 DNS 域名压缩之类的内容。我找到了相关更容易让你理解这方面内容的文章: [关于 DNS RFC 的释义][8]。
|
||||
|
||||
### 步骤十:实现 DNS 域名压缩
|
||||
|
||||
因此,我们需要一个更复杂的 `read_domain_name` 函数。
|
||||
|
||||
如下所示:
|
||||
|
||||
```
|
||||
domain = []
|
||||
loop do
|
||||
len = buf.read(1).unpack('C')[0]
|
||||
break if len == 0
|
||||
if len & 0b11000000 == 0b11000000
|
||||
# weird case: DNS compression!
|
||||
second_byte = buf.read(1).unpack('C')[0]
|
||||
offset = ((len & 0x3f) << 8) + second_byte
|
||||
old_pos = buf.pos
|
||||
buf.pos = offset
|
||||
domain << read_domain_name(buf)
|
||||
buf.pos = old_pos
|
||||
break
|
||||
else
|
||||
# normal case
|
||||
domain << buf.read(len)
|
||||
end
|
||||
end
|
||||
domain.join('.')
|
||||
```
|
||||
|
||||
这里具体是:
|
||||
|
||||
* 如果前两个位为 `0b11`,那么我们就需要做 DNS 域名压缩。那么:
|
||||
* 读取第二个字节并用一点儿运算将其转化为偏移量。
|
||||
* 在缓冲区保存当前位置。
|
||||
* 在我们计算偏移量的位置上读取域名
|
||||
* 在缓冲区存储我们的位置。
|
||||
|
||||
可能看起来很乱,但是这是解析 DNS 响应的部分中最难的一处了,我们快搞定了!
|
||||
|
||||
#### 一个关于 DNS 压缩的漏洞
|
||||
|
||||
有些人可能会说,有恶意行为者可以借助这个代码,通过一个带 DNS 压缩条目的 DNS 响应指向这个响应本身,这样 `read_domain_name` 就会陷入无限循环。我才不会改进它(这个代码已经够复杂了好吗!)但一个真正的 DNS 解析器确实会更巧妙地处理它。比如,这里有个 [能够避免在 miekg/dns 中陷入无限循环的代码][9]。
|
||||
|
||||
如果这是一个真正的 DNS 解析器,可能还有其他一些边缘情况会造成问题。
|
||||
|
||||
### 步骤十一:解析一个 DNS 查询
|
||||
|
||||
你可能在想:“为什么我们需要解析一个 DNS 查询?这是一个响应啊!”
|
||||
|
||||
但每一个 DNS 响应包含它自己的原始查询,所以我们有必要去解析它。
|
||||
|
||||
这是解析 DNS 查询的代码:
|
||||
|
||||
```
|
||||
class DNSQuery
|
||||
attr_reader :domain, :type, :cls
|
||||
def initialize(buf)
|
||||
@domain = read_domain_name(buf)
|
||||
@type, @cls = buf.read(4).unpack('nn')
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
内容不是太多:类型和类各占 2 个字节。
|
||||
|
||||
### 步骤十二:解析一个 DNS 记录
|
||||
|
||||
最让人兴奋的部分 —— DNS 记录是我们的查询数据存放的地方!即这个 “rdata 区域”(“记录数据字段”)就是我们会在 DNS 查询对应的响应中获得的 IP 地址所驻留的地方。
|
||||
|
||||
代码如下:
|
||||
|
||||
```
|
||||
class DNSRecord
|
||||
attr_reader :name, :type, :class, :ttl, :rdlength, :rdata
|
||||
def initialize(buf)
|
||||
@name = read_domain_name(buf)
|
||||
@type, @class, @ttl, @rdlength = buf.read(10).unpack('nnNn')
|
||||
@rdata = buf.read(@rdlength)
|
||||
end
|
||||
```
|
||||
|
||||
我们还需要让这个 `rdata` 区域更加可读。记录数据字段的实际用途取决于记录类型 —— 比如一个“A” 记录就是一个四个字节的 IP 地址,而一个 “CNAME” 记录则是一个域名。
|
||||
|
||||
所以下面的代码可以让请求数据更可读:
|
||||
|
||||
```
|
||||
def read_rdata(buf, length)
|
||||
@type_name = TYPES[@type] || @type
|
||||
if @type_name == "CNAME" or @type_name == "NS"
|
||||
read_domain_name(buf)
|
||||
elsif @type_name == "A"
|
||||
buf.read(length).unpack('C*').join('.')
|
||||
else
|
||||
buf.read(length)
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
这个函数使用了 `TYPES` 这个哈希表将一个记录类型映射为一个更可读的名称:
|
||||
|
||||
```
|
||||
TYPES = {
|
||||
1 => "A",
|
||||
2 => "NS",
|
||||
5 => "CNAME",
|
||||
# there are a lot more but we don't need them for this example
|
||||
}
|
||||
```
|
||||
|
||||
`read.rdata` 中最有趣的一部分可能就是这一行 `buf.read(length).unpack('C*').join('.')` —— 像是在说:“嘿!一个 IP 地址有 4 个字节,就将它转换成一组四个数字组成的数组,然后数字互相之间用 ‘.’ 联个谊吧。”
|
||||
|
||||
### 步骤十三:解析 DNS 响应的收尾工作
|
||||
|
||||
现在我们正式准备好解析 DNS 响应了!
|
||||
|
||||
工作代码如下所示:
|
||||
|
||||
```
|
||||
class DNSResponse
|
||||
attr_reader :header, :queries, :answers, :authorities, :additionals
|
||||
def initialize(bytes)
|
||||
buf = StringIO.new(bytes)
|
||||
@header = DNSHeader.new(buf)
|
||||
@queries = (1..@header.num_questions).map { DNSQuery.new(buf) }
|
||||
@answers = (1..@header.num_answers).map { DNSRecord.new(buf) }
|
||||
@authorities = (1..@header.num_auth).map { DNSRecord.new(buf) }
|
||||
@additionals = (1..@header.num_additional).map { DNSRecord.new(buf) }
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
这里大部分内容就是在调用之前我们写过的其他函数来协助解析 DNS 响应。
|
||||
|
||||
如果 `@header.num_answers` 的值为 2,代码会使用了 `(1..@header.num_answers).map` 这个巧妙的结构创建一个包含两个 DNS 记录的数组。(这可能有点像 Ruby 魔法,但我就是觉得有趣,但愿不会影响可读性。)
|
||||
|
||||
我们可以把这段代码整合进我们的主函数中,就像这样:
|
||||
|
||||
```
|
||||
sock.send(make_dns_query("example.com", 1), 0) # 1 is "A", for IP address
|
||||
reply, _ = sock.recvfrom(1024)
|
||||
response = DNSResponse.new(reply) # parse the response!!!
|
||||
puts response.answers[0]
|
||||
```
|
||||
|
||||
尽管输出结果看起来有点辣眼睛(类似于 `#<DNSRecord:0x00000001368e3118>`),所以我们需要编写一些好看的输出代码,提升它的可读性。
|
||||
|
||||
### 步骤十四:对于我们输出的 DNS 记录进行美化
|
||||
|
||||
我们需要向 DNS 记录增加一个 `.to_s` 字段,从而让它有一个更良好的字符串展示方式。而者只是做为一行方法的代码在 `DNSRecord` 中存在。
|
||||
|
||||
```
|
||||
def to_s
|
||||
"#{@name}\t\t#{@ttl}\t#{@type_name}\t#{@parsed_rdata}"
|
||||
end
|
||||
```
|
||||
|
||||
你可能也注意到了我忽略了 DNS 记录中的 `class` 区域。那是因为它总是相同的(IN 表示 “internet”),所以我觉得它是个多余的。虽然很多 DNS 工具(像真正的 `dig`)会输出 `class`。
|
||||
|
||||
## 大功告成!
|
||||
|
||||
这是我们最终的主函数:
|
||||
|
||||
```
|
||||
def main
|
||||
# connect to google dns
|
||||
sock = UDPSocket.new
|
||||
sock.bind('0.0.0.0', 12345)
|
||||
sock.connect('8.8.8.8', 53)
|
||||
|
||||
# send query
|
||||
domain = ARGV[0]
|
||||
sock.send(make_dns_query(domain, 1), 0)
|
||||
|
||||
# receive & parse response
|
||||
reply, _ = sock.recvfrom(1024)
|
||||
response = DNSResponse.new(reply)
|
||||
response.answers.each do |record|
|
||||
puts record
|
||||
end
|
||||
```
|
||||
|
||||
我不觉得我们还能再补充什么 —— 我们建立连接、发送一个查询、输出每一个回答,然后退出。完事儿!
|
||||
|
||||
```
|
||||
$ ruby dig.rb example.com
|
||||
example.com 18608 A 93.184.216.34
|
||||
```
|
||||
|
||||
你可以在这里查看最终程序:[dig.rb][2]。可以根据你的喜好给它增加更多特性,就比如说:
|
||||
|
||||
* 为其他查询类型添加美化输出。
|
||||
* 输出 DNS 响应时增加“授权”和“可追加”的选项
|
||||
* 重试查询
|
||||
* 确保我们看到的 DNS 响应匹配我们的查询(ID 信息必须是对的上的!)
|
||||
|
||||
另外如果我在这篇文章中出现了什么错误,就 [在推特和我聊聊吧][10]。(我写的比较赶所以可能还是会有些错误)
|
||||
|
||||
*(题图:MJ/449d049d-6bdd-448b-a61d-17138f8551bc)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://jvns.ca/blog/2022/11/06/making-a-dns-query-in-ruby-from-scratch/
|
||||
|
||||
作者:[Julia Evans][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[Drwhooooo](https://github.com/Drwhooooo)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://jvns.ca/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://jvns.ca/blog/2022/02/01/a-dns-resolver-in-80-lines-of-go/
|
||||
[2]: https://gist.github.com/jvns/1e5838a53520e45969687e2f90199770
|
||||
[3]: https://gist.github.com/jvns/aa202b1edd97ae261715c806b2ba7d39
|
||||
[4]: https://datatracker.ietf.org/doc/html/rfc1035#section-4.1.1
|
||||
[5]: https://ruby-doc.org/core-3.0.0/Array.html#method-i-pack
|
||||
[6]: https://wizardzines.com/comics/little-endian/
|
||||
[7]: https://gist.github.com/jvns/3587ea0b4a2a6c20dcfd8bf653fc11d9
|
||||
[8]: https://datatracker.ietf.org/doc/html/rfc1035#section-4.1.4
|
||||
[9]: https://link.zhihu.com/?target=https%3A//github.com/miekg/dns/blob/b3dfea07155dbe4baafd90792c67b85a3bf5be23/msg.go%23L430-L435
|
||||
[10]: https://twitter.com/b0rk
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/24/155014kli69j43i021iwwl.jpg
|
||||
383
published/202310/20221202 Working with Btrfs - Subvolumes.md
Normal file
383
published/202310/20221202 Working with Btrfs - Subvolumes.md
Normal file
@@ -0,0 +1,383 @@
|
||||
[#]: subject: "Working with Btrfs – Subvolumes"
|
||||
[#]: via: "https://fedoramagazine.org/working-with-btrfs-subvolumes/"
|
||||
[#]: author: "Andreas Hartmann https://fedoramagazine.org/author/hartan/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "A2ureStone"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16250-1.html"
|
||||
|
||||
Btrfs 详解:子卷
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
这篇文章是《Btrfs 详解》系列文章中的一篇。从 Fedora Linux 33 开始,Btrfs 就是 Fedora Workstation 和 Fedora Silverblue 的默认文件系统。
|
||||
|
||||
以防你忘记,这是系列文章中的前一篇:[Btrfs 详解:基础概念][1]。
|
||||
|
||||
### 简介
|
||||
|
||||
<ruby>子卷<rt>Subvolume</rt></ruby> 允许将一个 Btrfs 文件系统划分成多个独立的子文件系统。这意味着你可以从 Btrfs 文件系统挂载子卷,就好像它们是独立的文件系统。除此之外,例如,你还可以通过 <ruby>限额组<rt>qgroup</rt></ruby>(我们将在本系列的另一篇文章里介绍)定义子卷能够占据的最大空间,或者用子卷去包含或排除快照中的文件(我们会后面的文章中会讲到)。自 Fedora Linux 33 后每个 Fedora Workstation 和 Fedora Silverblue 默认安装过程中会利用子卷。在这篇文章中我们会介绍它是如何工作的。
|
||||
|
||||
下面你会找到很多关于子卷的例子。如果你想跟着操作,你必须拥有访问某些 Btrfs 文件系统的权限和 root 权限。你可以通过下面命令来验证你的 `/home/` 目录是否是 Btrfs 。
|
||||
|
||||
```
|
||||
$ findmnt -no FSTYPE /home
|
||||
btrfs
|
||||
```
|
||||
|
||||
这个命令会输出你 `/home/` 目录的文件系统名。如果它是 btrfs,那就可以了。让我们创建一个新的目录去做实验:
|
||||
|
||||
```
|
||||
$ mkdir ~/btrfs-subvolume-test
|
||||
$ cd ~/btrfs-subvolume-test
|
||||
```
|
||||
|
||||
在下面的文本中,你会看到很多像上面显示的那样的命令输出框。请在阅读/比较命令输出时请记住,**框中的内容在行末会被换行**。这使得识别跨多行的长行变得困难,降低了可读性。如果有疑问,试着调整浏览器窗口的大小,看看文本的变化!
|
||||
|
||||
### 创建和使用子卷
|
||||
|
||||
我们可以通过以下命令创建一个 Btrfs 子卷:
|
||||
|
||||
```
|
||||
$ sudo btrfs subvolume create first
|
||||
Create subvolume './first'
|
||||
```
|
||||
|
||||
当我们检查当前目录,我们可以看到现在有一个名为 `first` 的新目录。注意到下面输出的第一个字符 `d`:
|
||||
|
||||
```
|
||||
$ ls -l
|
||||
total 0
|
||||
drwxr-xr-x. 1 root root 0 Oct 15 18:09 first
|
||||
```
|
||||
|
||||
我们可以像常规目录一样操作它:我们可以重命名它,移动它,在里面创建新文件和目录,等等。注意到目录属于 root,所以我们必须以 root 身份去做这些事情。
|
||||
|
||||
如果它表现和看起来就像个目录,那我们如何知道这是不是一个 Btrfs 子卷呢?我们可以使用 `btrfs` 工具去列出所有子卷:
|
||||
|
||||
```
|
||||
$ sudo btrfs subvolume list .
|
||||
ID 256 gen 30 top level 5 path home
|
||||
ID 257 gen 30 top level 5 path root
|
||||
ID 258 gen 25 top level 257 path root/var/lib/machines
|
||||
ID 259 gen 29 top level 256 path hartan/btrfs-subvolume-test/first
|
||||
```
|
||||
|
||||
如果你安装的是最新的 Fedora Linux,且未修改过,你很可能会看到和上面一样的输出。我们会在之后检查 `home` 和 `root` ,还有全部数字的含义。现在,我们看到在我们指定的路径下有一个子卷。我们可以将输出限制在我们当前位置下面的子卷:
|
||||
|
||||
```
|
||||
$ sudo btrfs subvolume list -o .
|
||||
ID 259 gen 29 top level 256 path home/hartan/btrfs-subvolume-test/first
|
||||
```
|
||||
|
||||
让我们重命名子卷:
|
||||
|
||||
```
|
||||
$ sudo mv first second
|
||||
$ sudo btrfs subvolume list -o .
|
||||
ID 259 gen 29 top level 256 path home/hartan/btrfs-subvolume-test/second
|
||||
```
|
||||
|
||||
我们还可以嵌套子卷:
|
||||
|
||||
```
|
||||
$ sudo btrfs subvolume create second/third
|
||||
Create subvolume 'second/third'
|
||||
$ sudo btrfs subvolume list .
|
||||
ID 256 gen 34 top level 5 path home
|
||||
ID 257 gen 37 top level 5 path root
|
||||
ID 258 gen 25 top level 257 path root/var/lib/machines
|
||||
ID 259 gen 37 top level 256 path hartan/btrfs-subvolume-test/second
|
||||
ID 260 gen 37 top level 259 path hartan/btrfs-subvolume-test/second/third
|
||||
```
|
||||
|
||||
我们也可以移除子卷,就像移除目录一样:
|
||||
|
||||
```
|
||||
$ sudo rm -r second/third
|
||||
```
|
||||
|
||||
或者通过特殊的 Btrfs 命令:
|
||||
|
||||
```
|
||||
$ sudo btrfs subvolume delete second
|
||||
Delete subvolume (no-commit): '/home/hartan/btrfs-subvolume-test/second'
|
||||
```
|
||||
|
||||
### 像单独的文件系统一样操作子卷
|
||||
|
||||
前面的简介里说 Btrfs 子卷就好像单独的文件系统。这意味着我们可以挂载子卷并且传递一些挂载选项给它。我们先创建一个小的目录结构去更好的理解发生了什么:
|
||||
|
||||
```
|
||||
$ mkdir -p a a/1 a/1/b
|
||||
$ sudo btrfs subvolume create a/2
|
||||
Create subvolume 'a/2'
|
||||
$ sudo touch a/1/c a/1/b/d a/2/e
|
||||
```
|
||||
|
||||
这就是目录结构的样子:
|
||||
|
||||
```
|
||||
$ tree
|
||||
.
|
||||
└── a
|
||||
├── 1
|
||||
│ ├── b
|
||||
│ │ └── d
|
||||
│ └── c
|
||||
└── 2
|
||||
└── e
|
||||
|
||||
4 directories, 3 files
|
||||
```
|
||||
|
||||
验证现在这里有一个新的 Btrfs 子卷:
|
||||
|
||||
```
|
||||
$ sudo btrfs subvolume list -o .
|
||||
ID 261 gen 41 top level 256 path home/hartan/btrfs-subvolume-test/a/2
|
||||
```
|
||||
|
||||
为了挂载子卷,我们必须知道 Btrfs 子卷所在的块设备路径。下面的命令会告诉我们:
|
||||
|
||||
```
|
||||
$ findmnt -vno SOURCE /home/
|
||||
/dev/vda3
|
||||
```
|
||||
|
||||
现在我们挂载子卷。确保你将参数替换成你 PC 上的:
|
||||
|
||||
```
|
||||
$ sudo mount -o subvol=home/hartan/btrfs-subvolume-test/a/2 /dev/vda3 a/1/b
|
||||
```
|
||||
|
||||
观察到我们使用 `-o` 参数去提供额外的选项去挂载程序。在这里我们告诉它挂载在设备 `/dev/vda3` 上 btrfs 文件系统里名为 `home/hartan/btrfs-subvolume-test/a/2` 的子卷。这是 Btrfs 特有的选项,在其他文件系统里没有的。
|
||||
|
||||
我们可以看到目录结构变化了:
|
||||
|
||||
```
|
||||
$ tree
|
||||
.
|
||||
└── a
|
||||
├── 1
|
||||
│ ├── b
|
||||
│ │ └── e
|
||||
│ └── c
|
||||
└── 2
|
||||
└── e
|
||||
|
||||
4 directories, 3 files
|
||||
```
|
||||
|
||||
现在文件 `e` 出现了两次, `d` 不见了。我们现在可以用两个不同的路径访问相同的 Btrfs 子卷。在一个路径的所有变化会被立刻反应在其他的位置:
|
||||
|
||||
```
|
||||
$ sudo touch a/1/b/x
|
||||
$ ls -lA a/2
|
||||
total 0
|
||||
-rw-r--r--. 1 root root 0 Oct 15 18:14 e
|
||||
-rw-r--r--. 1 root root 0 Oct 15 18:16 x
|
||||
```
|
||||
|
||||
让我们尝试更多的挂载选项。例如我们可以像这样以只读方式挂载子卷到 `a/1/b`(插入你 PC 的参数):
|
||||
|
||||
```
|
||||
$ sudo umount a/1/b
|
||||
$ sudo mount -o subvol=home/hartan/btrfs-subvolume-test/a/2,ro /dev/vda3 a/1/b
|
||||
```
|
||||
|
||||
我们和上面使用相同的命令,除了我们加上了 `ro` 在末尾。现在我们不能在这个挂载点上创建文件:
|
||||
|
||||
```
|
||||
$ sudo touch a/1/b/y
|
||||
touch: cannot touch 'a/1/b/y': Read-only file system
|
||||
```
|
||||
|
||||
但直接访问子卷仍然像之前一样:
|
||||
|
||||
```
|
||||
$ sudo touch a/2/y
|
||||
$ tree
|
||||
.
|
||||
└── a
|
||||
├── 1
|
||||
│ ├── b
|
||||
│ │ ├── e
|
||||
│ │ ├── x
|
||||
│ │ └── y
|
||||
│ └── c
|
||||
└── 2
|
||||
├── e
|
||||
├── x
|
||||
└── y
|
||||
|
||||
4 directories, 7 files
|
||||
```
|
||||
|
||||
在下一步之前不要忘记进行清理:
|
||||
|
||||
```
|
||||
$ sudo rm -rf a
|
||||
rm: cannot remove 'a/1/b/e': Read-only file system
|
||||
rm: cannot remove 'a/1/b/x': Read-only file system
|
||||
rm: cannot remove 'a/1/b/y': Read-only file system
|
||||
```
|
||||
|
||||
天啊,发生了什么?噢,因为我们在上面挂载只读子卷,所以不能删除它。从文件系统的角度来看,删除是一种写入操作:为了删除 `a/2/b/e`,我们从父目录 `a/1/b` 的内容中删除目录项 `e`。换句话来说,我们必须 _写入_ `a/1/b` 去表明 `e` 不复存在。所以我们先卸载子卷,然后移除目录:
|
||||
|
||||
```
|
||||
$ sudo umount a/1/b
|
||||
$ sudo rm -rf a
|
||||
$ tree
|
||||
.
|
||||
|
||||
0 directories, 0 files
|
||||
```
|
||||
|
||||
### 子卷 ID
|
||||
|
||||
还记得 `btrfs subvolume list` 命令的第一次输出吗?那包含了很多数字,让我们看看这些究竟什么。我在这里复制了输出,以便再次查看:
|
||||
|
||||
```
|
||||
ID 256 gen 30 top level 5 path home
|
||||
ID 257 gen 30 top level 5 path root
|
||||
ID 258 gen 25 top level 257 path root/var/lib/machines
|
||||
ID 259 gen 29 top level 256 path hartan/btrfs-subvolume-test/first
|
||||
```
|
||||
|
||||
我们看到有三列数字,每个前面有一些字母来描述它们的作用。第一列是子卷 ID 。子卷 ID 在 Btrfs 文件系统是唯一的,而且唯一地标识子卷。这意味着名为 `home` 的子卷也可以用它的 ID **256** 来引用。之前的挂载命令是这样写的:
|
||||
|
||||
```
|
||||
$ sudo mount -o subvol=hartan/...
|
||||
```
|
||||
|
||||
另外一个完全合法的选择是使用子卷 ID :
|
||||
|
||||
```
|
||||
$ sudo mount -o subvolid=...
|
||||
```
|
||||
|
||||
子卷 ID 从 **256** 开始,每创建一个子卷依次递增 1 。但是在这里有一个例外:文件系统的根的子卷名称总是为 `/`,并且子卷 ID 是 5 。没错,即使文件系统的根技术上也是一个子卷。这是不言而喻的,因此不会出现在 `btrfs subvolume` 的输出列表里。如果你没有用 `subvol` 和 `subvolid` 参数去挂载一个 Btrfs 文件系统,`subvolid=5` 的顶级子卷就是默认的挂载对象。下面我们会看到一个想要显式挂载文件系统根的例子。
|
||||
|
||||
第二列的数字是生成号,并且在每次 Btrfs 事务中递增。这几乎是一个内部的计数器,我们不会在这里讨论。
|
||||
|
||||
最后,第三列数字是 _父_ 子卷的子卷 ID。在上面的输出我们可以看到子卷 `home` 和 `root` 的父子卷 ID 都是 5。记住 ID 5 的特殊含义:这是文件系统的根。所以我们知道 `home` 和 `root` 都是顶级子卷的子卷。另一方面 `hartan/btrfs-subvolume-test.first` 是子卷 ID 256(也就是 `home`)的子卷。
|
||||
|
||||
在下一节我们会看看子卷 `root` 和 `home` 是怎么来的。
|
||||
|
||||
### 检查 Fedora Linux 的默认子卷
|
||||
|
||||
当你从头创建一个新的 Btrfs 文件系统,里面是没有子卷的(当然,除了顶级子卷)。所以 Fedora Linux 里的 `home` 和 `root` 子卷是哪里来的?
|
||||
|
||||
它们是安装程序在安装时创建的。传统的安装经常会为 `/` 和 `/home` 目录包含单独的文件系统分区。在启动时,它们通过恰当的挂载组成一个完整的文件系统。但这个方法有一个问题:除非你使用像 lvm 这样的技术,想在将来改变分区的大小是非常难的。因而你可能出现 `/` 或 `/home` 用完空间的情况,然而还有很多其他没被使用的分区和空间剩余。
|
||||
|
||||
因为 Btrfs 子卷全都是相同文件系统的一部分,它们共享底层文件系统提供的空间。还记得我们在上面创建的子卷吗?我们从未告诉 Btrfs 它们多大:一个子卷可以占据文件系统拥有的全部空间,默认是不会阻止这种行为的。但是,我们 _可以_ 通过 Btrfs 的 <ruby>限额组<rt>qgroup</rt></ruby> 动态地约束其大小,同时也可以在运行时修改(我们将在后续的文章中了解如何做的)。
|
||||
|
||||
另外一个分离 `/` 和 `/home` 的优势是我们可以分别进行 _快照_ 。子卷是快照的边界,对一个子卷的快照永远不会包含该子卷下面的其他子卷的内容。快照的更多细节会在后续的文章中介绍。
|
||||
|
||||
理论已经足够了!我们来看看这是怎么回事。首先确保你的根文件系统类型是 Btrfs :
|
||||
|
||||
```
|
||||
$ findmnt -no FSTYPE /
|
||||
btrfs
|
||||
```
|
||||
|
||||
然后我们获取它所在的分区:
|
||||
|
||||
```
|
||||
$ findmnt -vno SOURCE /
|
||||
/dev/vda3
|
||||
```
|
||||
|
||||
记住我们可以通过特殊的子卷 ID 5 挂载文件系统的根(适应文件系统分区!):
|
||||
|
||||
```
|
||||
$ mkdir fedora-rootsubvol
|
||||
$ sudo mount -o subvolid=5 /dev/vda3 ./fedora-rootsubvol
|
||||
$ ls fedora-rootsubvol/
|
||||
home root
|
||||
```
|
||||
|
||||
而且还有 Fedora Linux 安装的子卷!但 Fedora Linux 是如何知道子卷 `root` 属于 `/` ,而 `home` 属于 `/home` 的呢?
|
||||
|
||||
文件 `/etc/fstab` 包含了所谓的文件系统的静态信息。简而言之,在你系统启动的时候会一行一行地读取这个文件,然后挂载那里列出的所有文件系统。在我的系统上,这个文件长这样:
|
||||
|
||||
```
|
||||
$ cat /etc/fstab
|
||||
# [ ... ]
|
||||
# /etc/fstab
|
||||
# Created by anaconda on Sat Oct 15 12:01:57 2022
|
||||
# [ ... ]
|
||||
#
|
||||
UUID=5e4e42bb-4f2f-4f0e-895f-d1a46ea47807 / btrfs subvol=root,compress=zstd:1 0 0
|
||||
UUID=e3a798a8-b8f2-40ca-9da7-5e292a6412aa /boot ext4 defaults 1 2
|
||||
UUID=5e4e42bb-4f2f-4f0e-895f-d1a46ea47807 /home btrfs subvol=home,compress=zstd:1 0 0
|
||||
```
|
||||
|
||||
(注意上面的 “UUID” 开头行的内容被换行成两行)
|
||||
|
||||
每行开头的 `UUID` 用于标识你系统上的硬盘和文件系统分区(大概相当于我在上面使用的 `/dev/vda3` )。第二列是文件系统应该挂载在文件系统树上的路径。第三列是文件系统类型。我们可以看到 `/` 和 `/home` 都是 `btrfs` 类型,正如我们期望的那样!最后,第四列是:这些是挂载选项,这里说通过 `subvol=root` 选项去挂载 `/` 。这正是我们一直在 `btrfs subvolume list /` 里看到的输出!
|
||||
|
||||
有了这些信息,我们可以重新构建创建这个文件系统项的 `mount` 命令
|
||||
|
||||
```
|
||||
$ sudo mount -o subvol=root,compress=zstd:1 UUID=5e4e42bb-4f2f-4f0e-895f-d1a46ea47807 /
|
||||
```
|
||||
|
||||
(再次,上面的 “UUID” 开头行的内容被换行成两行)
|
||||
|
||||
这就是 Fedora Linux 如何使用 Btrfs 子卷!如果你对好奇 Fedora Linux 为什么选择 Btrfs 作为默认的文件系统,请参阅下面链接的更改提议 [^1]。
|
||||
|
||||
### Btrfs 子卷的更多内容
|
||||
|
||||
Btrfs 维基提供了关于子卷的更多信息,其中最重要的是可应用于 Btrfs 子卷的挂载选项。有些选项,比如 `compress` 只能应用到文件系统的层面,因而会影响一个 Btrfs 文件系统的所有子卷。你可以通过下面的链接找到entry [^2]。
|
||||
|
||||
如果你对哪些目录是普通目录和哪些是子卷有困惑,你可以对你的子卷采用特殊的命名约定。例如,你可以给子卷名加上 `@` 前缀去方便区分。
|
||||
|
||||
现在你知道子卷表现得就像文件系统,有人可能会问如何才能最好地将子卷放置在特定位置。比如你想要一个 Btrfs 子卷在 `~/games` 下面,然而你的主目录(`~`)本身就是一个子卷,你该如何实现呢?鉴于上面的例子,你可以使用像 `sudo btrfs subvolume create ~/games` 的命令。这样,你创建了所谓的 _嵌套_ 子卷:在你的子卷 `~` 里,有一个子卷 `games` 。这正是一种达成目的的方法。
|
||||
|
||||
其他有效的方法就是如同 Fedora 默认行为那样:在根子卷下创建所有子卷(也就是它们的父子卷 ID 是 5 ),然后挂载它们到特定的位置。Btrfs 维基有这些方法的概述和对于各自文件系统管理影响的简短讨论 [^5]。
|
||||
|
||||
### 总结
|
||||
|
||||
在本文中,我们探索了 Btrfs 子卷,它们像是 Btrfs 文件系统内部的独立的 Btrfs 文件系统。我们学习了如何创建、挂载和删除子卷。最后,我们探讨了 Fedora Linux 如何在我们完全没有注意到的情况下使用子卷。
|
||||
|
||||
本系列的下一篇文章将讨论:
|
||||
|
||||
- 快照 - 回到过去
|
||||
- 压缩 - 透明地节省存储空间
|
||||
- 配额组 - 限制文件系统大小
|
||||
- RAID - 替代 mdadm 配置
|
||||
|
||||
如果你还想了解与 Btrfs 相关的其他主题,请查看 Btrfs 维基 [^3] 和文档 [^4]。不要忘记查看本系列的第一篇文章(如果你还没有看过的话)!如果你认为本系列文章缺少了一些内容,请在下面的评论中告诉我们。再会!
|
||||
|
||||
### 参考资料
|
||||
|
||||
[^1]: <https://fedoraproject.org/wiki/Changes/BtrfsByDefault#Benefit_to_Fedora>
|
||||
[^2]: <https://btrfs.readthedocs.io/en/latest/Subvolumes.html>
|
||||
[^3]: <https://btrfs.wiki.kernel.org/index.php/Main_Page>
|
||||
[^4]: <https://btrfs.readthedocs.io/en/latest/Introduction.html>
|
||||
[^5]: <https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Layout>
|
||||
|
||||
*(题图:MJ/f047ea87-2490-40e5-9f91-d48d236675e5)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/working-with-btrfs-subvolumes/
|
||||
|
||||
作者:[Andreas Hartmann][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[A2ureStone](https://github.com/A2ureStone)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://fedoramagazine.org/author/hartan/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://linux.cn/article-16189-1.html
|
||||
[2]: https://unsplash.com/@helibertoarias?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
||||
[3]: https://unsplash.com/s/photos/hdd?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
||||
[4]: tmp.YC93jxHuAw#sources
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/03/111308vdhzh3ddwwjdmyw0.jpg
|
||||
552
published/202310/20221230 Working with Btrfs - Snapshots.md
Normal file
552
published/202310/20221230 Working with Btrfs - Snapshots.md
Normal file
@@ -0,0 +1,552 @@
|
||||
[#]: subject: "Working with Btrfs – Snapshots"
|
||||
[#]: via: "https://fedoramagazine.org/working-with-btrfs-snapshots/"
|
||||
[#]: author: "Andreas Hartmann https://fedoramagazine.org/author/hartan/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "A2ureStone"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16287-1.html"
|
||||
|
||||
Btrfs 详解:快照
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
这篇文章会探讨什么是 Btrfs 快照,它们如何工作的,你在日常生活中进行快照的好处。这篇文章是《Btrfs 详解》系列文章中的一篇。从 Fedora Linux 33 开始,Btrfs 就是 Fedora Workstation 和 Fedora Silverblue 的默认文件系统。
|
||||
|
||||
如果你错过了,这里是本系列的上一篇文章:[Btrfs 详解:子卷][1]
|
||||
|
||||
### 简介
|
||||
|
||||
想象一下,你长时间处理一个文件,反复添加和撤销修改。然后,在某个时刻你意识到:两小时前你撤销的部分修改,现在会非常有用。而昨天在你销毁那个设计之前,你也已经修改了这个特殊的部分。当然,由于你会定期保存文件,所以旧的改动会丢失。很多人可能都遇到过这样的情况。如果能恢复旧版本的文件,而无需定期手动复制,岂不美哉?
|
||||
|
||||
这是一个 Btrfs 快照可以帮助你的特别场景。当你使用正确的话,快照同时也为你的电脑提供了很好的备份方案。
|
||||
|
||||
下面你会找到一些关于快照的例子。如果你想跟着操作,你必须拥有访问某些 Btrfs 文件系统的权限和 root 权限。你可以通过下面命令来验证一个目录的文件系统。
|
||||
|
||||
```
|
||||
$ findmnt -no FSTYPE /home
|
||||
btrfs
|
||||
```
|
||||
|
||||
这个命令会输出你 `/home/` 目录的文件系统名称。如果它是 `btrfs`,那就可以了。让我们创建一个新的目录去做实验:
|
||||
|
||||
```
|
||||
$ mkdir ~/btrfs-snapshot-test
|
||||
$ cd ~/btrfs-snapshot-test
|
||||
```
|
||||
|
||||
在下面的文本中,你会看到很多像上面显示的那样的命令输出框。请在阅读/比较命令输出时请记住,**框中的内容在行末会被换行**。这使得识别跨多行的长行变得困难,降低了可读性。如果有疑问,试着调整浏览器窗口的大小,看看文本的变化!
|
||||
|
||||
### Btrfs 快照
|
||||
|
||||
让我们从一个基本的问题开始:什么是 Btrfs 快照?如果你在文档 [^1] 和维基 [^2] 中查找,你不会立刻找到这个问题的答案。事实上,从“功能”一节里是找不到的。如果你搜索一下,你会发现快照和 Btrfs 子卷一起被大量地提及 [^3]。所以现在做什么呢?
|
||||
|
||||
还记得快照在系列前面的文章里两次被提到吗?是这样说的:
|
||||
|
||||
> CoW 的优势在哪里?简单的说:文件被修改和编辑的历史被保存了下来。Btrfs 保存文件旧版本的引用(inode)可以轻易地被访问。这个引用就是快照:文件系统在某个时间点的状态镜像。这将是这系列文章里的单独的一篇,所以暂时留到后面介绍。
|
||||
>
|
||||
> —— [Btrfs 详解:基础概念][6]
|
||||
|
||||
以及:
|
||||
|
||||
> 另外一个分离 `/` 和 `/home` 的优势是我们可以分别进行 _快照_ 。子卷是快照的边界,对一个子卷的快照永远不会包含该子卷下面的其他子卷的内容。快照的更多细节会在后续的文章中介绍。
|
||||
>
|
||||
> —— [Btrfs 详解:子卷][7]
|
||||
|
||||
看起来快照是和 Btrfs 子卷相关的。你可能之前在其他地方听到过快照,比如说 LVM(逻辑卷管理器)。虽然技术角度上它们都是为了同一个目的,但它们在实现方面有所不同。
|
||||
|
||||
每个 Btrfs 快照是一个子卷。但是,不是每个子卷都是一份快照。区别在于子卷里面包含的内容。一个快照是子卷加上一些内容:它包含对现在和过去版本的文件的引用(inode)。让我们看看快照是从哪来的!
|
||||
|
||||
### 创建 Btrfs 快照
|
||||
|
||||
想使用快照功能,你需要一个 Btrfs 子卷来进行快照。让我们在测试目录(`~/btrfs-snapshot-test`)里创建一个:
|
||||
|
||||
```
|
||||
$ cd ~/btrfs-snapshot-test
|
||||
$ sudo btrfs subvolume create demo
|
||||
Create subvolume './demo'
|
||||
$ sudo chown -R $(id -u):$(id -g) demo/
|
||||
$ cd demo
|
||||
```
|
||||
|
||||
因为 Btrfs 子卷默认是被 root 所有的,你必须用 `chown` 去修改子卷里的文件的所有权到普通用户上。现在我们在里面新加一些文件:
|
||||
|
||||
```
|
||||
$ touch foo bar baz
|
||||
$ echo "Lorem ipsum dolor sit amet, " > foo
|
||||
```
|
||||
|
||||
你的目录现在看起来像这样:
|
||||
|
||||
```
|
||||
$ ls -l
|
||||
total 4
|
||||
-rw-r--r--. 1 hartan hartan 0 Dec 20 08:11 bar
|
||||
-rw-r--r--. 1 hartan hartan 0 Dec 20 08:11 baz
|
||||
-rw-r--r--. 1 hartan hartan 29 Dec 20 08:11 foo
|
||||
```
|
||||
|
||||
让我们从这里创建第一次快照:
|
||||
|
||||
```
|
||||
$ cd ..
|
||||
$ sudo btrfs subvolume snapshot demo demo-1
|
||||
Create a snapshot of 'demo' in './demo-1'
|
||||
```
|
||||
|
||||
这就好了。让我们看看发生了什么:
|
||||
|
||||
```
|
||||
$ ls -l
|
||||
total 0
|
||||
drwxr-xr-x. 1 hartan hartan 18 Dec 20 08:11 demo
|
||||
drwxr-xr-x. 1 hartan hartan 18 Dec 20 08:11 demo-1
|
||||
$ tree
|
||||
.
|
||||
├── demo
|
||||
│ ├── bar
|
||||
│ ├── baz
|
||||
│ └── foo
|
||||
└── demo-1
|
||||
├── bar
|
||||
├── baz
|
||||
└── foo
|
||||
|
||||
2 directories, 6 files
|
||||
```
|
||||
|
||||
这看起来是一份拷贝!为了验证,我们从快照里读取 `foo` 的内容:
|
||||
|
||||
```
|
||||
$ cat demo/foo
|
||||
Lorem ipsum dolor sit amet,
|
||||
$ cat demo-1/foo
|
||||
Lorem ipsum dolor sit amet,
|
||||
```
|
||||
|
||||
当我们修改原始文件时,真正的效果变得明显:
|
||||
|
||||
```
|
||||
$ echo "consectetur adipiscing elit, " >> demo/foo
|
||||
$ cat demo/foo
|
||||
Lorem ipsum dolor sit amet,
|
||||
consectetur adipiscing elit,
|
||||
$ cat demo-1/foo
|
||||
Lorem ipsum dolor sit amet,
|
||||
```
|
||||
|
||||
这表明快照仍然持有“旧”版本的数据:`foo` 的内容没有改变。到目前为止,你可以通过一个简单的文件复制来实现完全相同的目标。现在你也可以继续处理旧文件了。
|
||||
|
||||
```
|
||||
$ echo "sed do eiusmod tempor incididunt" >> demo-1/foo
|
||||
$ cat demo-1/foo
|
||||
Lorem ipsum dolor sit amet,
|
||||
sed do eiusmod tempor incididunt
|
||||
```
|
||||
|
||||
但是在底层,我们的快照实际上是一个新的 Btrfs 子卷。你可以通过下面的命令来验证这一点:
|
||||
|
||||
```
|
||||
$ sudo btrfs subvolume list -o .
|
||||
ID 259 gen 265 top level 256 path home/hartan/btrfs-snapshot-test/demo
|
||||
ID 260 gen 264 top level 256 path home/hartan/btrfs-snapshot-test/demo-1
|
||||
```
|
||||
|
||||
### Btrfs 子卷 vs. 文件复制
|
||||
|
||||
这一切有什么意义呢?到目前为止快照看起来是一个更加复杂的复制文件的方式。事实上,快照不仅仅是表面上看起来那么简单。让我们来创建一个更大的文件:
|
||||
|
||||
```
|
||||
$ dd if=/dev/urandom of=demo/bigfile bs=1M count=512
|
||||
512+0 records in
|
||||
512+0 records out
|
||||
536870912 bytes (537 MB, 512 MiB) copied, 1.3454 s, 399 MB/s
|
||||
```
|
||||
|
||||
现在有一个512 MB 大小的新文件 `demo/bigfile` 。让我们创建另一个快照,这样在你修改数据的时候就不会丢失:
|
||||
|
||||
```
|
||||
$ sudo btrfs subvolume snapshot demo demo-2
|
||||
Create a snapshot of 'demo' in './demo-2'
|
||||
```
|
||||
|
||||
现在我们通过追加少量字符串到文件来模拟变化:
|
||||
|
||||
```
|
||||
$ echo "small changes" >> demo/bigfile
|
||||
```
|
||||
|
||||
这是生效后的文件结构:
|
||||
|
||||
```
|
||||
$ tree
|
||||
.
|
||||
├── demo
|
||||
│ ├── bar
|
||||
│ ├── baz
|
||||
│ ├── bigfile
|
||||
│ └── foo
|
||||
├── demo-1
|
||||
│ ├── bar
|
||||
│ ├── baz
|
||||
│ └── foo
|
||||
└── demo-2
|
||||
├── bar
|
||||
├── baz
|
||||
├── bigfile
|
||||
└── foo
|
||||
|
||||
3 directories, 11 files
|
||||
```
|
||||
|
||||
但是真正的神奇的发生在其他地方。你已经复制了 `demo/bigfile` ,你现在拥有了两个大约 512 MiB 的文件。但是,因为它们是不同的拷贝,它们应该会占据共 1 GiB 的空间。记住两个文件的差异不超过 10 字节 —— 和原文件大小相比这几乎没什么差别。
|
||||
|
||||
Btrfs 快照工作原理与文件复制不同:而是它们保持对当前和过去的 inode 的引用。当你在文件追加更新时,在底层 Btrfs 分配更多的空间去存储更新,同时在原来的 inode 增加对新数据的引用。之前的内容保持不变。为了便于理解,你可以认为这是仅仅“存储”原文件和修改版本的差异。
|
||||
|
||||
让我们看看这个效果:
|
||||
|
||||
```
|
||||
$ sudo compsize .
|
||||
Processed 11 files, 5 regular extents (9 refs), 3 inline.
|
||||
Type Perc Disk Usage Uncompressed Referenced
|
||||
TOTAL 100% 512M 512M 1.0G
|
||||
none 100% 512M 512M 1.0G
|
||||
```
|
||||
|
||||
这个有趣的数字出现在 `TOTAL` 一行:
|
||||
|
||||
* `Referenced` 是当前目录下所有文件大小的总和
|
||||
* `Disk Usage` 是用于在磁盘上存储文件分配空间的大小
|
||||
|
||||
你有一共 1 GiB 的文件,但存储它们仅仅占据了 512 MiB。
|
||||
|
||||
### Btrfs 快照和备份
|
||||
|
||||
目前为止,在这篇文章中,你已经看到如何创建 Btrfs 快照和它们的特别之处。有人可能会想:如果我在我的 PC 本地进行一系列的快照,我就有一个可靠的备份策略。 **其实不是这样的** 。如果 Btrfs 子卷共享的底层数据被偶然破坏了(被 Btrfs 之外的东西影响,比如宇宙射线),所有指向这些数据的子卷都会存在相同的错误。
|
||||
|
||||
为了让快照成为真正的备份,你应该将它们存储到一个不同的 Btrfs 系统上,例如在一个外部驱动器上。为了本文的目的,让我们在一个文件里创建一个新的 Btrfs 系统,并挂载它来模拟一个外部驱动。如果你有一个格式为 Btrfs 的外部驱动器,请随意替换以下命令中提到的所有路径来试试!让我们创建一个新的 Btrfs 文件系统:
|
||||
|
||||
**注意**:下面的命令会在你的文件系统上创建一个 8 GB 大小的新文件。如果你想跟着下面的步骤,请确保你的磁盘空间至少有 8 GB 剩余。请不要分配小于 8 GB 到这个文件,否则 Btrfs 可能在挂载时会遇到问题。
|
||||
|
||||
```
|
||||
$ truncate -s 8G btrfs_filesystem.img
|
||||
$ sudo mkfs.btrfs -L "backup-drive" btrfs_filesystem.img
|
||||
btrfs-progs v5.18
|
||||
See http://btrfs.wiki.kernel.org for more information.
|
||||
|
||||
[ ... ]
|
||||
|
||||
Devices:
|
||||
ID SIZE PATH
|
||||
1 8.00GiB btrfs_filesystem.img
|
||||
```
|
||||
|
||||
这些命令创建了名为 `btrfs_filesystem.img` 的 8 GB 新文件,同时在上面格式化了一个 Btrfs 文件系统。现在你可以像外部驱动器一样挂载它:
|
||||
|
||||
```
|
||||
$ mkdir backup-drive
|
||||
$ sudo mount btrfs_filesystem.img backup-drive
|
||||
$ sudo chown -R $(id -u):$(id -g) backup-drive
|
||||
$ ls -lh
|
||||
total 4.7M
|
||||
drwxr-xr-x. 1 hartan hartan 0 Dec 20 08:35 backup-drive
|
||||
-rw-r--r--. 1 hartan hartan 8.0G Dec 20 08:37 btrfs_filesystem.img
|
||||
drwxr-xr-x. 1 hartan hartan 32 Dec 20 08:14 demo
|
||||
drwxr-xr-x. 1 hartan hartan 18 Dec 20 08:11 demo-1
|
||||
drwxr-xr-x. 1 hartan hartan 32 Dec 20 08:14 demo-2
|
||||
```
|
||||
|
||||
妙,现在挂载在 `backup-drive` 下面有一个独立的 Btrfs 文件系统!让我们尝试进行快照并且把快照放进去:
|
||||
|
||||
```
|
||||
$ sudo btrfs subvolume snapshot demo backup-drive/demo-3
|
||||
Create a snapshot of 'demo' in 'backup-drive/demo-3'
|
||||
ERROR: cannot snapshot 'demo': Invalid cross-device link
|
||||
```
|
||||
|
||||
发生了什么?噢,你尝试对 `demo` 进行一次快照并把它存在不同的 Btrfs 文件系统里(从 Btrfs 视角来看是一个不同的设备)。还记得一个 Btrfs 子卷仅持有对文件和内容的引用(inode)?这正是问题所在:文件和内容存在于我们的 `home` 文件系统,但不在新创建的 `backup-drive` 。你得找到一种方式去传输子卷和其内容到新的文件系统里。
|
||||
|
||||
#### 在不同的 Btrfs 文件系统存储快照
|
||||
|
||||
针对这个目的 Btrfs 工具有两个特殊的命令。让我们首先来看看它们是如何工作的:
|
||||
|
||||
```
|
||||
$ sudo btrfs send demo | sudo btrfs receive backup-drive/
|
||||
ERROR: subvolume /home/hartan/btrfs-snapshot-test/demo is not read-only
|
||||
ERROR: empty stream is not considered valid
|
||||
```
|
||||
|
||||
另一个错误!这时它告诉你我们想要传输的子卷不是只读的。这是对的:你可以写入新内容到所有目前为止创建的快照/子卷。你可以像这样创建一个只读的快照:
|
||||
|
||||
```
|
||||
$ sudo btrfs subvolume snapshot -r demo demo-3-ro
|
||||
Create a readonly snapshot of 'demo' in './demo-3-ro'
|
||||
```
|
||||
|
||||
不像之前那样,这里 `-r` 选项被加到了 `snapshot` 子命令里。这创建一个只读的快照,这很容易去验证:
|
||||
|
||||
```
|
||||
$ touch demo-3-ro/another-file
|
||||
touch: cannot touch 'demo-3-ro/another-file': Read-only file system
|
||||
```
|
||||
|
||||
现在你可以重新尝试传输子卷:
|
||||
|
||||
```
|
||||
$ sudo btrfs send demo-3-ro | sudo btrfs receive backup-drive/
|
||||
At subvol demo-3-ro
|
||||
At subvol demo-3-ro
|
||||
$ tree
|
||||
|
||||
├── backup-drive
|
||||
│ └── demo-3-ro
|
||||
│ ├── bar
|
||||
│ ├── baz
|
||||
│ ├── bigfile
|
||||
│ └── foo
|
||||
├── btrfs_filesystem.img
|
||||
├── demo
|
||||
[ ... ]
|
||||
└── demo-3-ro
|
||||
├── bar
|
||||
├── baz
|
||||
├── bigfile
|
||||
└── foo
|
||||
|
||||
6 directories, 20 files
|
||||
```
|
||||
|
||||
成功了!你成功传输原来子卷 `demo` 的一个只读快照到一个外部的 Btrfs 文件系统。
|
||||
|
||||
#### 在非 Btrfs 文件系统存储快照
|
||||
|
||||
上面你已经看到你如何能存储 Btrfs 子卷/快照到其他的 Btrfs 文件系统。但如果你没有其他的 Btrfs 文件系统并且不能新创建一个,比如说外部驱动器需要一个和 Windows 或 MacOS 兼容的文件系统,你可以做什么呢?在这种情况下你可以存储子卷在文件里:
|
||||
|
||||
```
|
||||
$ sudo btrfs send -f demo-3-ro-subvolume.btrfs demo-3-ro
|
||||
At subvol demo-3-ro
|
||||
$ ls -lh demo-3-ro-subvolume.btrfs
|
||||
-rw-------. 1 root root 513M Dec 21 10:39 demo-3-ro-subvolume.btrfs
|
||||
```
|
||||
|
||||
文件 `demo-3-ro-subvolume.btrfs` 现在包含了随后重建 `demo-3-ro` 子卷需要的所有东西。
|
||||
|
||||
#### 增量地发送快照
|
||||
|
||||
如果你对不同的子卷重复执行这个操作,你会发现在某些时间点不同的子卷不再共享它们的文件内容。这是因为像上面一样发送一个子卷,去重建这个单独的子卷的所有数据将被传送到目标位置。但是,你可以引导 Btrfs 只向目标位置发送不同子卷的差异!所谓的增量发送将保证共享的引用在子卷中仍然共享。为了展示这一点,新增一些变动到我们原来的子卷:
|
||||
|
||||
```
|
||||
$ echo "a few more changes" >> demo/bigfile
|
||||
```
|
||||
|
||||
然后创建另一个只读子卷:
|
||||
|
||||
```
|
||||
$ sudo btrfs subvolume snapshot -r demo demo-4-ro
|
||||
Create a readonly snapshot of 'demo' in './demo-4-ro'
|
||||
```
|
||||
|
||||
然后现在发送它:
|
||||
|
||||
```
|
||||
$ sudo btrfs send -p demo-3-ro demo-4-ro | sudo btrfs receive backup-drive
|
||||
At subvol demo-4-ro
|
||||
At snapshot demo-4-ro
|
||||
```
|
||||
|
||||
在上面的命令,`-p` 选项指定了一个父子卷用来计算差异。重要的是记住原 Btrfs 文件系统和目标 Btrfs 文件系统都必须包含相同的、未被修改过的父子卷!确保新的子卷真的在那里:
|
||||
|
||||
```
|
||||
$ ls backup-drive/
|
||||
demo-3-ro demo-4-ro
|
||||
$ ls -lR backup-drive/demo-4-ro/
|
||||
backup-drive/demo-4-ro/:
|
||||
total 524296
|
||||
-rw-r--r--. 1 hartan hartan 0 Dec 20 08:11 bar
|
||||
-rw-r--r--. 1 hartan hartan 0 Dec 20 08:11 baz
|
||||
-rw-r--r--. 1 hartan hartan 536870945 Dec 21 10:49 bigfile
|
||||
-rw-r--r--. 1 hartan hartan 59 Dec 20 08:13 foo
|
||||
```
|
||||
|
||||
但你怎样知道增量发送只传输了子卷间的差异呢?让我们传输数据流到一个文件里然后看看它有多大:
|
||||
|
||||
```
|
||||
$ sudo btrfs send -f demo-4-ro-diff.btrfs -p demo-3-ro demo-4-ro
|
||||
At subvol demo-4-ro
|
||||
$ ls -l demo-4-ro-diff.btrfs
|
||||
-rw-------. 1 root root 315 Dec 21 10:55 demo-4-ro-diff.btrfs
|
||||
```
|
||||
|
||||
根据 `ls` ,这个文件仅仅只有 315 字节大小!这意味着增量传输只传输子卷间的差异,和额外的 Btrfs 相关的元数据。
|
||||
|
||||
#### 从快照中恢复子卷
|
||||
|
||||
在继续之前,让我们清理掉这时候不再需要的东西:
|
||||
|
||||
```
|
||||
$ sudo rm -rf demo-4-ro-diff.btrfs demo-3-ro-subvolume.btrfs
|
||||
$ sudo btrfs subvolume delete demo-1 demo-2 demo-3-ro demo-4-ro
|
||||
$ ls -l
|
||||
total 531516
|
||||
drwxr-xr-x. 1 hartan hartan 36 Dec 21 10:50 backup-drive
|
||||
-rw-r--r--. 1 hartan hartan 8589934592 Dec 21 10:51 btrfs_filesystem.img
|
||||
drwxr-xr-x. 1 hartan hartan 32 Dec 20 08:14 demo
|
||||
```
|
||||
|
||||
到目前为止你已经成功创建了可读/写和只读的 Btrfs 子卷快照,并把它们发送到外部。但是,为了把这作为备份策略,还要有一种方式去发送子卷回原来的文件系统和让它们再次变为可写。出于这个目的,我们移动 `demo` 子卷到其他地方并且尝试从最近的快照中重建它。第一步:重命名为 `broken` 子卷。一旦恢复成功它会被删除:
|
||||
|
||||
```
|
||||
$ mv demo demo-broken
|
||||
```
|
||||
|
||||
第二步: 传回最近的快照到这个文件系统:
|
||||
|
||||
```
|
||||
$ sudo btrfs send backup-drive/demo-4-ro | sudo btrfs receive .
|
||||
At subvol backup-drive/demo-4-ro
|
||||
At subvol demo-4-ro
|
||||
[hartan@fedora btrfs-snapshot-test]$ ls
|
||||
backup-drive btrfs_filesystem.img demo-4-ro demo-broken
|
||||
```
|
||||
|
||||
第三步: 从快照创建一个可读写的子卷:
|
||||
|
||||
```
|
||||
$ sudo btrfs subvolume snapshot demo-4-ro demo
|
||||
Create a snapshot of 'demo-4-ro' in './demo'
|
||||
$ ls
|
||||
backup-drive btrfs_filesystem.img demo demo-4-ro demo-broken
|
||||
```
|
||||
|
||||
上一步非常重要:你不能重命名 `demo-4-ro` 为 `demo` ,因为这仍然是一个只读子卷!最后你可以检查你所有你想要的东西是不是在那里:
|
||||
|
||||
```
|
||||
$ tree demo
|
||||
demo
|
||||
├── bar
|
||||
├── baz
|
||||
├── bigfile
|
||||
└── foo
|
||||
|
||||
0 directories, 4 files
|
||||
$ tail -c -19 demo/bigfile
|
||||
a few more changes
|
||||
```
|
||||
|
||||
最后的命令告诉你 `bigfile` 的最后 19 个字符实际上是上次变更执行的结果。这个时候,你可能想从 `demo-broken` 复制最近的更新到新的 `demo` 子卷。因为你没有执行任何更新,你可以过时的子卷:
|
||||
|
||||
```
|
||||
$ sudo btrfs subvolume delete demo-4-ro demo-broken
|
||||
Delete subvolume (no-commit): '/home/hartan/btrfs-snapshot-test/demo-4-ro'
|
||||
Delete subvolume (no-commit): '/home/hartan/btrfs-snapshot-test/demo-broken'
|
||||
```
|
||||
|
||||
就是这样!你成功从一个之前存在不同 Btrfs 文件系统(外部介质)的快照中恢复 `demo` 子卷。
|
||||
|
||||
### 子卷作为快照的边界
|
||||
|
||||
在本系列的第二篇文章中我提到子卷作为快照的边界,但这到底是什么意思呢?简单来说,子卷的一份快照仅包含这个子卷的内容,而不是下面嵌套的子卷。让我们来看看这个:
|
||||
|
||||
```
|
||||
$ sudo btrfs subvolume create demo/nested
|
||||
Create subvolume 'demo/nested'
|
||||
$ sudo chown -R $(id -u):$(id -g) demo/nested
|
||||
$ touch demo/nested/another_file
|
||||
```
|
||||
|
||||
让我们像以前一样进行一次快照:
|
||||
|
||||
```
|
||||
$ sudo btrfs subvolume snapshot demo demo-nested
|
||||
Create a snapshot of 'demo' in './demo-nested'
|
||||
```
|
||||
|
||||
然后查看里面的内容:
|
||||
|
||||
```
|
||||
$ tree demo-nested
|
||||
demo-nested
|
||||
├── bar
|
||||
├── baz
|
||||
├── bigfile
|
||||
├── foo
|
||||
└── nested
|
||||
|
||||
1 directory, 4 files
|
||||
|
||||
$ tree demo
|
||||
demo
|
||||
├── bar
|
||||
├── baz
|
||||
├── bigfile
|
||||
├── foo
|
||||
└── nested
|
||||
└── another_file
|
||||
|
||||
1 directory, 5 files
|
||||
```
|
||||
|
||||
注意到 `another_file` 不见了,仅仅是目录 `nested` 还在。这是因为 `nested` 是一个子卷:`demo` 的快照包含嵌套子卷的目录(挂载点),但里面的内容是缺失的。目前没有方法递归地执行快照去包含嵌套子卷。但是,我们可以利用这个优势去从快照中排除一些目录!这通常对那些你容易再现的数据有用,或者它们很少变化。例子有虚拟机或者容器镜像,电影,游戏文件等等。
|
||||
|
||||
在总结之前,我们移除所有测试过程中创建的东西:
|
||||
|
||||
```
|
||||
$ sudo btrfs subvolume delete demo/nested demo demo-nested
|
||||
Delete subvolume (no-commit): '/home/hartan/btrfs-snapshot-test/demo/nested'
|
||||
Delete subvolume (no-commit): '/home/hartan/btrfs-snapshot-test/demo'
|
||||
Delete subvolume (no-commit): '/home/hartan/btrfs-snapshot-test/demo-nested'
|
||||
$ sudo umount backup-drive
|
||||
$ cd ..
|
||||
$ rm -rf btrfs-snapshot-test/
|
||||
```
|
||||
|
||||
### 基于 Btrfs 备份最后思考
|
||||
|
||||
如果你决定使用 Btrfs 来执行数据的定期备份,那么你可能需要使用一个工具来自动完成这项任务。Btrfs 维基有一个专门针对 Btrfs [^4] 的备份工具列表。在那里,你还将看到另一个手动执行 Btrfs 备份步骤的摘要。就我个人而言,我对 `btrbk` [^5] 有很多很好的体验,我正在使用它来执行我自己的备份。除了备份之外,`btrbk` 还可以在你的 PC 本地保存 Btrfs 快照列表。我使用它来防止意外的数据删除。
|
||||
|
||||
如果你想要了解更多有关使用 Btrfs 进行备份的内容,欢迎在下面评论,我会考虑写一篇专门讨论这个话题的后续文章。
|
||||
|
||||
### 总结
|
||||
|
||||
本文研究了 Btrfs 快照,它们本质上是 Btrfs 子卷。你了解了如何创建可读写和只读快照,以及这种机制如何有助于防止数据丢失。
|
||||
|
||||
本系列的后续文章将讨论:
|
||||
|
||||
- 压缩 - 透明地节省存储空间
|
||||
- 配额组 - 限制文件系统大小
|
||||
- RAID - 替代 mdadm 配置
|
||||
|
||||
如果你还想了解与 Btrfs 相关的其他主题,请查看 Btrfs 维基 [^2] 和文档 [^1]。不要忘记查看本系列的前两篇文章!如果你认为本文缺少了一些内容,请在下面的评论中告诉我们。再会!
|
||||
|
||||
### 参考资料
|
||||
|
||||
[^1]: <https://btrfs.readthedocs.io/en/latest/Introduction.html>
|
||||
[^2]: <https://btrfs.wiki.kernel.org/index.php/Main_Page>
|
||||
[^3]: <https://btrfs.readthedocs.io/en/latest/Subvolumes.html>
|
||||
[^4]: <https://btrfs.wiki.kernel.org/index.php/Incremental_Backup#Available_Backup_Tools>
|
||||
[^5]: <https://github.com/digint/btrbk>
|
||||
|
||||
*(题图:MJ/ad8a61ed-ce6f-409e-b503-69104dd71149)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/working-with-btrfs-snapshots/
|
||||
|
||||
作者:[Andreas Hartmann][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[A2ureStone](https://github.com/A2ureStone)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://fedoramagazine.org/author/hartan/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://linux.cn/article-16250-1.html
|
||||
[2]: https://unsplash.com/@helibertoarias?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
||||
[3]: https://unsplash.com/s/photos/hdd?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
||||
[4]: tmp.9WKqfTWEhI#sources
|
||||
[5]: https://btrfs.readthedocs.io/en/latest/Subvolumes.html
|
||||
[6]: https://linux.cn/article-16189-1.html
|
||||
[7]: https://linux.cn/article-16250-1.html
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/16/092244yog42vb0l3v5h33h.jpg
|
||||
@@ -0,0 +1,218 @@
|
||||
[#]: subject: "Terminal Basics Series #1: Changing Directories in Linux Terminal"
|
||||
[#]: via: "https://itsfoss.com/change-directories/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16304-1.html"
|
||||
|
||||
终端基础:Linux 终端中的目录切换
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 本篇文章作为终端基础教程系列的一部分,介绍如何在 Linux 命令行中,利用绝对路径和相对路径实现目录切换。
|
||||
|
||||
Linux 的 `cd` 命令让你可以轻松切换文件夹(即目录)。只需提供你要切换到的文件夹路径即可。
|
||||
|
||||
```
|
||||
cd path_to_directory
|
||||
```
|
||||
|
||||
然而对于 Linux 新人来说,可能会在路径的指定上有所困扰。
|
||||
|
||||
首先,让我们解决这个问题。
|
||||
|
||||
### 理解 Linux 中的路径
|
||||
|
||||
在 Linux 文件系统中,路径是用来追踪文件位置的信息。所有的路径都从根目录开始,然后向下延伸。
|
||||
|
||||
你可以通过下面的方式查看当前所在的位置:
|
||||
|
||||
```
|
||||
pwd
|
||||
```
|
||||
|
||||
结果可能是类似于 `/home/username` 的输出。注意,这里的 `username` 将会是你自己的用户名。
|
||||
|
||||
你可以注意到,路径是由 `/` 符号和目录名组成的。比如路径 `/home/abhishek/scripts`, 表示 `scripts` 是在文件夹 `abhishek` 之内,而文件夹 `abhishek` 在 `home` 文件夹之内。要注意,第一个 '/' 是指根目录(即文件系统的开始处),后面的 '/' 则作为目录的分隔符。
|
||||
|
||||
![Path in Linux][1]
|
||||
|
||||
> 🖥️ 在终端中键入 `ls /`,然后按回车。你将会看到根目录下的所有内容,试试看!
|
||||
|
||||
接下来,让我们学习两种常见的路径指定方式:绝对路径和相对路径。
|
||||
|
||||
**绝对路径**:这种路径从根开始,然后一直扩展到你需要的位置。如果一个路径是以 `/` 开头,那就说明它是一个绝对路径。
|
||||
|
||||
**相对路径**:这是相对于你文件系统中当前位置的路径。如果我当前位置在 `/home/abhishek`,并且我需要去 `/home/abhishek/Documents`, 我只需要简单地切换到 `Documents`,而不需要指定整个绝对路径 `/home/abhishek/Documents`。
|
||||
|
||||
在我演示这两种路径的区别之前,有必要先熟悉两个特殊的目录标识:
|
||||
|
||||
- `.` (单点)表示当前目录。
|
||||
- `..` (双点)表示上一级目录,也就是当前目录的母目录。
|
||||
|
||||
这里有一张图形化的表示。
|
||||
|
||||
![Absolute path vs relative path][2]
|
||||
|
||||
### 利用 cd 命令变更目录
|
||||
|
||||
在你已对路径概念有所了解之后,我们来了解如何切换目录。
|
||||
|
||||
> 🖥️ 如果你**仅键入 `cd` 并按回车键**,无论当前位置在哪,系统都会将你带回主目录。试一试吧。
|
||||
|
||||
敲入以下命令,你就能看到主目录里的所有文件夹:
|
||||
|
||||
```
|
||||
ls
|
||||
```
|
||||
|
||||
这是我看到的情况:
|
||||
|
||||
```
|
||||
abhishek@ituxedo:~$ ls
|
||||
Desktop Downloads Pictures Templates VirtualBoxVMs
|
||||
Documents Music Public Videos
|
||||
```
|
||||
|
||||
你的情况可能与此类似,但未必完全一样。
|
||||
|
||||
假如你希望跳转到 `Documents` 文件夹。由于它就在当前目录下,这里使用相对路径会比较方便:
|
||||
|
||||
```
|
||||
cd Documents
|
||||
```
|
||||
|
||||
> 💡 注意,大部分 Linux 发行版预设的终端模拟器会在提示符本身显示出当前所在的位置。因此你不必频繁使用 `pwd` 指令来确认自己的位置。
|
||||
|
||||
![Most Linux terminal prompts show the current location][3]
|
||||
|
||||
假如你希望切换到位于主目录里的 `Templates` 文件夹。
|
||||
|
||||
你可以使用相对路径 `../Templates`(`..` 会让你返回到上层目录,即 `/home/username`,然后你就可以进入 `Templates` 文件夹了)。
|
||||
|
||||
但这次我们尝试使用绝对路径。请把下面的 `abhishek` 替换成你的用户名。
|
||||
|
||||
```
|
||||
cd /home/abhishek/Templates
|
||||
```
|
||||
|
||||
此刻你已经在 `Templates` 文件夹里了。如何前往 `Downloads` 文件夹呢?这次我们再使用相对路径:
|
||||
|
||||
```
|
||||
cd ../Downloads
|
||||
```
|
||||
|
||||
下面的图片会回顾一下你刚才学到的所有或有关目录切换的范例。
|
||||
|
||||
![cd command example][4]
|
||||
|
||||
> 💡 别忘了你还可以使用终端的 `tab` 键自动补全功能。只需要键入命令或者文件夹名称的前几个字母,然后敲击 `tab` 键,系统就会尝试自动地补全命令或文件夹名称,或者给你显示出所有可能的选项。
|
||||
|
||||
### 故障解决
|
||||
|
||||
在 Linux 终端操作切换目录的过程中,你可能会遇到一些常见的错误。
|
||||
|
||||
#### 文件或目录不存在
|
||||
|
||||
如果在你尝试切换目录时,出现类似下面的错误信息:
|
||||
|
||||
> bash: cd: directory_name: No such file or directory
|
||||
|
||||
那么你可能在路径或目录名称上犯了误解。这里有几点你需要注意的:
|
||||
|
||||
- 请确定你输入的目录名中没有拼写错误。
|
||||
- Linux 系统对大小写敏感,因此,`Downloads` 和 `downloads` 会被识别为不同的目录。
|
||||
- 你可能未正确指定路径。可能你所在的位置与你预期的不同?或者你遗漏了绝对路径中的开头的 `/` 字符?
|
||||
|
||||
![Common examples of "no such file or directory" error][5]
|
||||
|
||||
#### 非目录错误
|
||||
|
||||
如果你看到像下面这样的错误提示:
|
||||
|
||||
> bash: cd: filename: Not a directory
|
||||
|
||||
这表示你尝试使用 `cd` 命令对一个文件进行操作,而不是一个目录(文件夹)。很明显,你不能像进入文件夹那样“进入”一个文件,因此会出现这样的错误。
|
||||
|
||||
![Not a directory error with the cd command][6]
|
||||
|
||||
#### 参数过多
|
||||
|
||||
这是 Linux 新手常犯的另一个错误:
|
||||
|
||||
> bash: cd: too many arguments
|
||||
|
||||
`cd` 命令只接受一个参数。也就是说,你只能对命令指定一个目录。
|
||||
|
||||
如果你指定了超过一个的参数,或者在路径中误加了空格,你就会看到这个错误。
|
||||
|
||||
![Too many arguments error in Linux terminal][7]
|
||||
|
||||
> 🏋🏻 如果你输入 `cd -`,它将会把你带到前一个目录。当你在两个相隔较远的地方切换时非常方便,可以避免再次输入长路径。
|
||||
|
||||
### 特殊目录符号
|
||||
|
||||
在结束这个教程之前,我想快速告诉你关于特殊符号 `~`。在 Linux 中,`~` 是用户主目录的捷径。
|
||||
|
||||
如果用户 `abhi` 运行它,`~` 就会代表 `/home/abhi`,如果用户 `prakash` 运行,`~` 就意味着 `/home/prakash`。
|
||||
|
||||
总结一下你在这个基础教程系列中学到的所有特殊目录标识:
|
||||
|
||||
| 符号 | 描述 |
|
||||
| :- | :- |
|
||||
| `.` | 当前目录 |
|
||||
| `..` | 上级目录 |
|
||||
| `~` | 主目录 |
|
||||
| `-` | 前一个目录 |
|
||||
|
||||
### 测试你的知识
|
||||
|
||||
下面是一些简单的练习,用来测试你刚刚学到的关于路径和 `cd` 命令的知识。
|
||||
|
||||
移动到你的主目录,并使用这个命令创建一个嵌套的目录结构:
|
||||
|
||||
```
|
||||
mkdir -p sample/dir1/dir2/dir3
|
||||
```
|
||||
|
||||
然后,一步步来试试这个:
|
||||
|
||||
- 使用绝对路径或相对路径进入 `dir3`
|
||||
- 使用相对路径移动到 `dir1`
|
||||
- 使用你能想象到的最短路径进入 `dir2`
|
||||
- 使用绝对路径切换到 `sample` 目录
|
||||
- 返回你的主目录
|
||||
|
||||
> 🔑 想知道你是否全都做对了吗?欢迎分享你的答案。
|
||||
|
||||
现在你知道如何切换目录,是不是应该学习一下如何创建它们呢?
|
||||
|
||||
我强烈推荐你阅读这篇文章,了解一些关于终端和命令的小技巧。
|
||||
|
||||
如果你想了解 Linux 命令行的基础知识,记得关注我们的 Linux 终端基础系列教程的更多章节。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/change-directories/
|
||||
|
||||
作者:[Abhishek Prakash][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[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/content/images/2023/02/path-linux.webp
|
||||
[2]: https://itsfoss.com/content/images/2023/02/absolute-and-relative-path.png
|
||||
[3]: https://itsfoss.com/content/images/2023/02/linux-terminal-prompt.png
|
||||
[4]: https://itsfoss.com/content/images/2023/02/cd-command-example.svg
|
||||
[5]: https://itsfoss.com/content/images/2023/02/common-errors-with-cd.png
|
||||
[6]: https://itsfoss.com/content/images/2023/02/not-a-directory-error-linux.png
|
||||
[7]: https://itsfoss.com/content/images/2023/02/too-many-arguments.png
|
||||
[8]: https://itsfoss.community/t/exercise-in-changing-directories-in-linux-terminal/10177?ref=its-foss
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/21/062234mz9zymqc6om5924m.jpg
|
||||
312
published/202310/20230217 Working with Btrfs - Compression.md
Normal file
312
published/202310/20230217 Working with Btrfs - Compression.md
Normal file
@@ -0,0 +1,312 @@
|
||||
[#]: subject: "Working with Btrfs – Compression"
|
||||
[#]: via: "https://fedoramagazine.org/working-with-btrfs-compression/"
|
||||
[#]: author: "Andreas Hartmann https://fedoramagazine.org/author/hartan/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "A2ureStone"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16299-1.html"
|
||||
|
||||
Btrfs 详解:压缩
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
这篇文章将探索 Btrfs 中的透明文件系统压缩,以及它如何帮助节省存储空间。这篇文章是《Btrfs 详解》系列文章中的一篇。从 Fedora Linux 33 开始,Btrfs 就是 Fedora Workstation 和 Fedora Silverblue 的默认文件系统。
|
||||
|
||||
如果你错过了,这里是本系列的上一篇文章:[Btrfs 详解:快照][1]。
|
||||
|
||||
### 简介
|
||||
|
||||
很多人都经历过存储空间用完的情况。也许你想从互联网下载一个大文件,或者你需要快速从你的手机中复制些照片,然后操作突然失败。虽然存储空间成本正在稳步降低,但越来越多的设备要么制造时就是固定数量的存储容量,要么最终用户难以扩展其存储容量。
|
||||
|
||||
但当你的存储空间不足时你可以做什么呢?也许你会求助于云存储,或者你可以随身携带一些外部存储设备。
|
||||
|
||||
在这篇文章里我会研究该问题的另一种解决方案:透明的文件系统压缩,这是 Btrfs 的一个特性。理想情况下,这将解决你的存储问题,同时几乎不需要对你的系统进行修改!让我们来看看是如何做到的。
|
||||
|
||||
### 透明压缩的解释
|
||||
|
||||
首先,让我们来探寻 _透明_ 压缩是什么意思。你可以通过像 gzip、xz 或者 bzip2 这些压缩算法去压缩文件。这通常是显式操作:你利用一个压缩工具并且让它操作你的文件。虽然根据文件的内容,节约了空间,这有一个主要的缺点:当你想读取文件或者修改的时候,你得先解压缩。
|
||||
|
||||
这不仅是一个乏味的过程,而且也暂时打破了你之前节省的空间。再者,你最终解压了你不想访问的那部分文件内容。明显有比这更好的方法!
|
||||
|
||||
相反,透明压缩发生在文件系统级别。在这里,压缩的文件对用户看起来像常规的未压缩文件一样。但是,它们是被压缩后存储在硬盘上的。这之所以可行,是因为操作系统仅仅选择性地访问那部分文件,并且确保在向磁盘写入更新时再次压缩它们。
|
||||
|
||||
这里的压缩是透明的在于它不被用户感知,除了在文件访问时可能的 CPU 负载小量增加。因此,你可以应用在已有的系统而不是进行硬件修改或者求助于云存储。
|
||||
|
||||
### 压缩算法对比
|
||||
|
||||
Btrfs 提供了多个压缩算法的选择。出于技术原因它不能选用任意的压缩算法。它现在支持:
|
||||
|
||||
* zstd
|
||||
* lzo
|
||||
* zlib
|
||||
|
||||
好消息是,由于透明压缩的工作原理,你不需要安装这些程序供 Btrfs 使用。在下面的文章里,你会看到如何去运行一个简单的性能测试来对比压缩算法。但是,为了运行性能测试,你必须安装必要的可执行文件。事后不需要留着它们,所以你将使用 Podman 容器来确保不会在系统中留下任何痕迹。
|
||||
|
||||
**注意** :因为 Btrfs 使用的压缩依赖于内核对这些压缩算法的(重新)实现,用户空间版本的算法得出的结果应该认为是粗略估计。
|
||||
|
||||
因为一次次敲重复的命令是枯燥的工作,我已经在 Gitlab 上准备了一个可以运行的 Bash 脚本 (<https://gitlab.com/hartang/btrfs-compression-test>)。这会用上面提到的每个算法在不同的压缩级别运行一次简单的压缩和解压缩。
|
||||
|
||||
首先,下载脚本:
|
||||
|
||||
```
|
||||
$ curl -LO https://gitlab.com/hartang/btrfs-compression-test/-/raw/main/btrfs_compression_test.sh
|
||||
```
|
||||
|
||||
下一步,启动一个 Fedora Linux 容器去挂载你当前的工作目录,以便你可以和主机交换文件同时在那里运行脚本:
|
||||
|
||||
```
|
||||
$ podman run --rm -it --security-opt label=disable -v "$PWD:$PWD" \
|
||||
-w "$PWD" registry.fedoraproject.org/fedora:37
|
||||
```
|
||||
|
||||
最后运行脚本:
|
||||
|
||||
```
|
||||
$ chmod +x ./btrfs_compression_test.sh
|
||||
$ ./btrfs_compression_test.sh
|
||||
```
|
||||
|
||||
在我机器上的输出是这样:
|
||||
|
||||
```
|
||||
[INFO] Using file 'glibc-2.36.tar' as compression target
|
||||
[INFO] Target file 'glibc-2.36.tar' not found, downloading now...
|
||||
################################################################### 100.0%
|
||||
[ OK ] Download successful!
|
||||
[INFO] Copying 'glibc-2.36.tar' to '/tmp/tmp.vNBWYg1Vol/' for benchmark...
|
||||
[INFO] Installing required utilities
|
||||
[INFO] Testing compression for 'zlib'
|
||||
|
||||
Level | Time (compress) | Compression Ratio | Time (decompress)
|
||||
-------+-----------------+-------------------+-------------------
|
||||
1 | 0.322 s | 18.324 % | 0.659 s
|
||||
2 | 0.342 s | 17.738 % | 0.635 s
|
||||
3 | 0.473 s | 17.181 % | 0.647 s
|
||||
4 | 0.505 s | 16.101 % | 0.607 s
|
||||
5 | 0.640 s | 15.270 % | 0.590 s
|
||||
6 | 0.958 s | 14.858 % | 0.577 s
|
||||
7 | 1.198 s | 14.716 % | 0.561 s
|
||||
8 | 2.577 s | 14.619 % | 0.571 s
|
||||
9 | 3.114 s | 14.605 % | 0.570 s
|
||||
|
||||
[INFO] Testing compression for 'zstd'
|
||||
|
||||
Level | Time (compress) | Compression Ratio | Time (decompress)
|
||||
-------+-----------------+-------------------+-------------------
|
||||
1 | 0.492 s | 14.831 % | 0.313 s
|
||||
2 | 0.607 s | 14.008 % | 0.341 s
|
||||
3 | 0.709 s | 13.195 % | 0.318 s
|
||||
4 | 0.683 s | 13.108 % | 0.306 s
|
||||
5 | 1.300 s | 11.825 % | 0.292 s
|
||||
6 | 1.824 s | 11.298 % | 0.286 s
|
||||
7 | 2.215 s | 11.052 % | 0.284 s
|
||||
8 | 2.834 s | 10.619 % | 0.294 s
|
||||
9 | 3.079 s | 10.408 % | 0.272 s
|
||||
10 | 4.355 s | 10.254 % | 0.282 s
|
||||
11 | 6.161 s | 10.167 % | 0.283 s
|
||||
12 | 6.670 s | 10.165 % | 0.304 s
|
||||
13 | 12.471 s | 10.183 % | 0.279 s
|
||||
14 | 15.619 s | 10.075 % | 0.267 s
|
||||
15 | 21.387 s | 9.989 % | 0.270 s
|
||||
|
||||
[INFO] Testing compression for 'lzo'
|
||||
|
||||
Level | Time (compress) | Compression Ratio | Time (decompress)
|
||||
-------+-----------------+-------------------+-------------------
|
||||
1 | 0.447 s | 25.677 % | 0.438 s
|
||||
2 | 0.448 s | 25.582 % | 0.438 s
|
||||
3 | 0.444 s | 25.582 % | 0.441 s
|
||||
4 | 0.444 s | 25.582 % | 0.444 s
|
||||
5 | 0.445 s | 25.582 % | 0.453 s
|
||||
6 | 0.438 s | 25.582 % | 0.444 s
|
||||
7 | 8.990 s | 18.666 % | 0.410 s
|
||||
8 | 34.233 s | 18.463 % | 0.405 s
|
||||
9 | 41.328 s | 18.450 % | 0.426 s
|
||||
|
||||
[INFO] Cleaning up...
|
||||
[ OK ] Benchmark complete!
|
||||
```
|
||||
|
||||
重要的是在根据脚本得出的数据做决定之前注意这些事情:
|
||||
|
||||
* 不是所有的文件压缩效果都一样好。像图片或电影这种已经压缩过的现代多媒体格式不会压缩得更小。
|
||||
* 脚本中压缩和解压缩各进行一次。重复运行会产生稍微不同的输出。因此,时间应该被理解为是估计,而不是准确的测量。
|
||||
|
||||
鉴于输出的数据,我决定在我的系统上使用压缩级别 3 的 zstd 压缩算法。依据你的需求,你可能想使用更高的压缩级别(比如,如果你存储设备相当的慢)。要估算可达到的读/写速度,可以将源存档大小(约 260MB)除以(解)压缩时间。
|
||||
|
||||
压缩测试默认是对 GNU libc 2.36 源码进行的。如果你想看看对指定文件的效果,你可以通过第一个参数传递文件路径给脚本。记住文件一定要可以在容器内访问才行。
|
||||
|
||||
如果你想要测试其他东西或者执行更加详细的测试,可以阅读脚本的源码,根据需要修改它。
|
||||
|
||||
### 配置 Btrfs 压缩
|
||||
|
||||
Btrfs 里的透明文件系统压缩可以通过几种方式配置:
|
||||
|
||||
* 作为挂载文件系统的挂载选项(可用于相同 Btrfs 文件系统的所有子卷)
|
||||
* 通过 Btrfs 文件属性
|
||||
* 在 `btrfs filesystem defrag` 时(不是永久的,不在这里介绍)
|
||||
* 通过 `chattr` 文件属性接口(不在这里介绍)
|
||||
|
||||
我只会介绍其中前两个。
|
||||
|
||||
#### 在挂载时开启压缩
|
||||
|
||||
有一个 Btrfs 挂载选项可以开启文件压缩:
|
||||
|
||||
```
|
||||
$ sudo mount -o compress=<ALGORITHM>:<LEVEL> ...
|
||||
```
|
||||
|
||||
例如,去挂载一个文件系统,并使用等级 3 的 `ztsd` 算法去压缩,你可以写成:
|
||||
|
||||
```
|
||||
$ sudo mount -o compress=zstd:3 ...
|
||||
```
|
||||
|
||||
设置压缩等级是可选的。重要的是注意到 `compress` 挂载选项应用到整个 Btrfs 文件系统和它所有的子卷。此外,这是目前唯一支持的指定压缩等级的方式。
|
||||
|
||||
为了对文件系统的根应用压缩,必须在 `/etc/fstab` 上指定。例如,Fedora Linux 安装器,默认启用级别 1 的 `zstd` 压缩,在 `/etc/fstab` 里是这样:
|
||||
|
||||
```
|
||||
$ cat /etc/fstab
|
||||
[ ... ]
|
||||
UUID=47b03671-39f1-43a7-b0a7-db733bfb47ff / btrfs subvol=root,compress=zstd:1,[ ... ] 0 0
|
||||
```
|
||||
|
||||
#### 启用单个文件压缩
|
||||
|
||||
另外一种方式指定压缩的方法是通过 Btrfs 文件系统属性。使用下面的命令去查看文件、目录或子卷的压缩设置:
|
||||
|
||||
```
|
||||
$ btrfs property get <PATH> compression
|
||||
```
|
||||
|
||||
类似的,你可以像这样配置压缩:
|
||||
|
||||
```
|
||||
$ sudo btrfs property set <PATH> compression <VALUE>
|
||||
```
|
||||
|
||||
例如,对在 `/etc` 下所有文件启用 `zlib` 压缩:
|
||||
|
||||
```
|
||||
$ sudo btrfs property set /etc compression zlib
|
||||
```
|
||||
|
||||
你可以通过 `man btrfs-property` 得到支持值的列表。记住这个接口不允许指定压缩级别。除此之外,如果设置了一个压缩属性,它会覆盖挂载时的其他压缩配置。
|
||||
|
||||
### 压缩已有文件
|
||||
|
||||
在这时,如果你对现有文件系统采用压缩,然后通过 `df` 或类似命令检查空间利用率,你会发现什么都没变。这是因为 Btrfs 自身不会 “重新压缩” 所有已有的文件。压缩只会发生在往磁盘写新数据的时候。有一些方式去执行显式的重压缩:
|
||||
|
||||
1. 等待,什么都不做:只要文件被修改并被写回磁盘,Btrfs 根据配置压缩新写入的文件内容。如果我们等待足够长,越来越多的文件被重写,在某个时间点就会被压缩。
|
||||
2. 移动文件到另一个文件系统然后移动回来:取决于你想压缩哪些文件,这可能是相当乏味的选项。
|
||||
3. 执行一次 Btrfs 碎片整理。
|
||||
|
||||
最后一个选项可能是最方便的,但是它会对已经包含快照的 Btrfs 文件系统提出警告:它会破坏快照间的共享范围。换句话来说,两个快照间所有的共享内容,或者一个快照和它的父子卷,在碎片整理操作后将保存多份。
|
||||
|
||||
因此,如果你在你的文件系统里已经有很多快照,你不应该对整个文件系统运行碎片整理。这也没有必要,因为如果你想的话,Btrfs 可以对特定的目录或者单个文件进行碎片整理。
|
||||
|
||||
你可以使用以下命令去执行一次碎片整理:
|
||||
|
||||
```
|
||||
$ sudo btrfs filesystem defragment -r /path/to/defragment
|
||||
```
|
||||
|
||||
例如,你想像这样去整理你主目录的碎片:
|
||||
|
||||
```
|
||||
$ sudo btrfs filesystem defragment -r "$HOME"
|
||||
```
|
||||
|
||||
如果有疑问,最好从碎片整理单个大文件开始,并在监视文件系统上的可用空间的同时继续处理越来越大的目录。
|
||||
|
||||
### 测量文件系统压缩
|
||||
|
||||
有时,你可能会想,文件系统压缩为你节省了多少空间。但如何判断呢?首先,要知道一个 Btrfs 文件系统是否在挂载时启用了压缩,你可以使用以下命令:
|
||||
|
||||
```
|
||||
$ findmnt -vno OPTIONS /path/to/mountpoint | grep compress
|
||||
```
|
||||
|
||||
如果你得到了结果,那么给定挂载点的文件系统就使用了压缩!下一步,`compsize` 命令会告诉你你的文件需要多少空间:
|
||||
|
||||
```
|
||||
$ sudo compsize -x /path/to/examine
|
||||
```
|
||||
|
||||
在我的主目录,结果是这样:
|
||||
|
||||
```
|
||||
$ sudo compsize -x "$HOME"
|
||||
Processed 942853 files, 550658 regular extents (799985 refs), 462779 inline.
|
||||
Type Perc Disk Usage Uncompressed Referenced
|
||||
TOTAL 81% 74G 91G 111G
|
||||
none 100% 67G 67G 77G
|
||||
zstd 28% 6.6G 23G 33G
|
||||
```
|
||||
|
||||
每一行告诉你应用到文件的压缩 “类型” 。* `TOTAL` 是下面所有行的总计。
|
||||
|
||||
另一方面,这些列告诉你我们的文件需要多少空间:
|
||||
|
||||
* `Disk Usage` 是实际分配在硬盘上的空间,
|
||||
* `Uncompressed` 是如果没有压缩,文件所需要的空间,
|
||||
* `Referenced` 是所有未压缩文件加起来的总大小。
|
||||
|
||||
`Referenced` 可以与数据 `Uncompressed` 不同,比如一个文件之前被重复了,或者有快照共享内容。在上面的例子,你可以看到在我的硬盘上总计 91 GB 的未压缩文件仅占据了 74 GB 的存储。取决于在目录里存储的文件类型和应用的压缩等级,这些数字可以有很大差异。
|
||||
|
||||
### 文件压缩的其它注意事项
|
||||
|
||||
Btrfs 使用启发式算法去探测压缩文件。这是因为压缩文件通常效果不好,所以没有必要浪费 CPU 周期去尝试进一步的压缩。为了这个目的,Btrfs 在写入压缩数据到磁盘之前测量压缩率。如果文件的第一部分压缩效果不好,文件被标记为不可压缩并且不会有后续的压缩。
|
||||
|
||||
如果出于某些原因,你想 Btrfs 压缩所有写入的数据,你可以通过 `compress-force` 选项挂载一个 Btrfs 文件系统,像这样:
|
||||
|
||||
```
|
||||
$ sudo mount -o compress-force=zstd:3 ...
|
||||
```
|
||||
|
||||
当像这样配置,Btrfs 会用等级 3 的 `zstd` 算法压缩所有写入磁盘的数据。
|
||||
|
||||
一个重要的注意事项是挂载一个有很多数据并开启压缩的 Btrfs 文件系统会比没开启压缩耗时更长。这是有技术上的原因的,而且这是一个不会影响文件系统操作的正常行为。
|
||||
|
||||
### 总结
|
||||
|
||||
本文详细介绍了 Btrfs 中的透明文件系统压缩。这是一种内置的、相对廉价的方法,可以在不需要修改的情况下从现有硬件中获得一些额外的存储空间。
|
||||
|
||||
本系列文章的下一篇将讨论:
|
||||
|
||||
- Qgroups - 限制文件系统大小
|
||||
- RAID - 替换 mdadm 配置
|
||||
|
||||
(LCTT 译注:后继文章尚未发布,一旦发布我们会尽快翻译。)
|
||||
|
||||
如果你想了解与 Btrfs 相关的其他主题,请查看 Btrfs 维基 [^1] 和文档 [^2]。如果你还没有阅读本系列的前三篇文章,请不要忘记去看看!如果你觉得本文缺少某些内容,请在下面的评论中让我知道。我们下篇文章见!
|
||||
|
||||
### 参考资料
|
||||
|
||||
[^1]: <https://btrfs.wiki.kernel.org/index.php/Main_Page>
|
||||
[^2]: <https://btrfs.readthedocs.io/en/latest/Introduction.html>
|
||||
|
||||
*(题图:MJ/1a45064c-8da5-4b60-87f2-9886d6a3299e)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/working-with-btrfs-compression/
|
||||
|
||||
作者:[Andreas Hartmann][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[A2ureStone](https://github.com/A2ureStone)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://fedoramagazine.org/author/hartan/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://linux.cn/article-16287-1.html
|
||||
[2]: https://unsplash.com/@helibertoarias?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
||||
[3]: https://unsplash.com/s/photos/hdd?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
||||
[4]: tmp.AcVqx2gIro#sources
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/19/153401dyst48ybibpy3oyd.jpg
|
||||
319
published/202310/20230228.4 ⭐️⭐️ Some notes on using nix.md
Normal file
319
published/202310/20230228.4 ⭐️⭐️ Some notes on using nix.md
Normal file
@@ -0,0 +1,319 @@
|
||||
[#]: subject: "Some notes on using nix"
|
||||
[#]: via: "https://jvns.ca/blog/2023/02/28/some-notes-on-using-nix/"
|
||||
[#]: author: "Julia Evans https://jvns.ca/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16332-1.html"
|
||||
|
||||
我的一些 nix 学习经验:安装和打包
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
最近,我首次尝试了 Mac。直至现在,我注意到的最大缺点是其软件包管理比 Linux 差很多。一段时间以来,我对于 homebrew 感到相当不满,因为每次我安装新的软件包时,它大部分时间都花在了升级上。于是,我萌生了试试 [nix][1] 包管理器的想法!
|
||||
|
||||
公认的,nix 的使用存在一定困惑性(甚至它有自己单独的编程语言!),因此,我一直在努力以最简洁的方式掌握使用 nix,避开复杂的配置文件管理和新编程语言学习。以下是我至今为止学习到的内容, 敬请期待如何进行:
|
||||
|
||||
- 使用 nix 安装软件包
|
||||
- 为一个名为 [paperjam][2] 的 C++ 程序构建一个自定义的 nix 包
|
||||
- 用 nix 安装五年前的 [hugo][3] 版本
|
||||
|
||||
如同以往,由于我对 nix 的了解还停留在入门阶段,本篇文章可能存在一些表述不准确的地方。甚至我自己也对于我是否真的喜欢上 nix 感到模棱两可 —— 它的使用真的让人相当困惑!但是,它帮我成功编译了一些以前总是难以编译的软件,并且通常来说,它比 homebrew 的安装速度要快。
|
||||
|
||||
### nix 为何引人关注?
|
||||
|
||||
通常,人们把 nix 定义为一种“声明式的包管理”。尽管我对此并不太感兴趣,但以下是我对 nix 的两个主要欣赏之处:
|
||||
|
||||
- 它提供了二进制包(托管在 [https://cache.nixos.org/][4] 上),你可以迅速下载并安装
|
||||
- 对于那些没有二进制包的软件,nix 使编译它们变得更容易
|
||||
|
||||
我认为 nix 之所以擅长于编译软件,主要有以下两个原因:
|
||||
|
||||
- 在你的系统中,可以安装同一库或程序的多个版本(例如,你可能有两个不同版本的 libc)。举个例子,我当前的计算机上就存在两个版本的 node,一个位于 `/nix/store/4ykq0lpvmskdlhrvz1j3kwslgc6c7pnv-nodejs-16.17.1`,另一个位于 `/nix/store/5y4bd2r99zhdbir95w5pf51bwfg37bwa-nodejs-18.9.1`。
|
||||
- 除此之外,nix 在构建包时是在隔离的环境下进行的,只使用你明确声明的依赖项的特定版本。因此,你无需担心这个包可能依赖于你的系统里的其它你并不了解的包,再也不用与 `LD_LIBRARY_PATH` 战斗了!许多人投入了大量工作,来列出所有包的依赖项。
|
||||
|
||||
在本文后面,我将给出两个例子,展示 nix 如何使我在编译软件时遇到了更小的困难。
|
||||
|
||||
#### 我是如何开始使用 nix 的
|
||||
|
||||
下面是我开始使用 nix 的步骤:
|
||||
|
||||
- 安装 nix。我忘记了我当时是如何做到这一点,但看起来有一个[官方安装程序][5] 和一个来自 zero-to-nix.com 的 [非官方安装程序][6]。在 MacOS 上使用标准的多用户安装卸载 nix 的 [教程][7] 有点复杂,所以选择一个卸载教程更为简单的安装方法可能值得。
|
||||
- 把 `~/.nix-profile/bin` 添加到我的 `PATH`
|
||||
- 用 `nix-env -iA nixpkgs.NAME` 命令安装包
|
||||
- 就是这样。
|
||||
|
||||
基本上,是把 `nix-env -iA` 当作 `brew install` 或者 `apt-get install`。
|
||||
|
||||
例如,如果我想安装 `fish`,我可以这样做:
|
||||
|
||||
```
|
||||
nix-env -iA nixpkgs.fish
|
||||
```
|
||||
|
||||
这看起来就像是从 [https://cache.nixos.org][8] 下载一些二进制文件 - 非常简单。
|
||||
|
||||
有些人使用 nix 来安装他们的 Node 和 Python 和 Ruby 包,但我并没有那样做 —— 我仍然像我以前一样使用 `npm install` 和 `pip install`。
|
||||
|
||||
#### 一些我没有使用的 nix 功能
|
||||
|
||||
有一些 nix 功能/工具我并没有使用,但我要提及一下。我最初认为你必须使用这些功能才能使用 nix,因为我读过的大部分 nix 教程都讨论了它们。但事实证明,你并不一定要使用它们。
|
||||
|
||||
- NixOS(一个 Linux 发行版)
|
||||
- [nix-shell][9]
|
||||
- [nix flakes][10]
|
||||
- [home-manager][11]
|
||||
- [devenv.sh][12]
|
||||
|
||||
我不去深入讨论它们,因为我并没真正使用过它们,而且网上已经有很多详解。
|
||||
|
||||
### 安装软件包
|
||||
|
||||
#### nix 包在哪里定义的?
|
||||
|
||||
我认为 nix 包主仓库中的包是定义在 [https://github.com/NixOS/nixpkgs/][13]。
|
||||
|
||||
你可以在 [https://search.nixos.org/packages][14] 查找包。似乎有两种官方推荐的查找包的方式:
|
||||
|
||||
- `nix-env -qaP NAME`,但这非常缓慢,并且我并没有得到期望的结果
|
||||
- `nix --extra-experimental-features 'nix-command flakes' search nixpkgs NAME`,这倒是管用,但显得有点儿冗长。并且,无论何种原因,它输出的所有包都以 `legacyPackages` 开头
|
||||
|
||||
我找到了一种我更喜欢的从命令行搜索 nix 包的方式:
|
||||
|
||||
- 运行 `nix-env -qa '*' > nix-packages.txt` 获取 Nix 仓库中所有包的列表
|
||||
- 编写一个简洁的 `nix-search` 脚本,仅在 `packages.txt` 中进行 grep 操作(`cat ~/bin/nix-packages.txt | awk '{print $1}' | rg "$1"`)
|
||||
|
||||
#### 所有的东西都是通过符号链接来安装的
|
||||
|
||||
nix 的一个主要设计是,没有一个单一的 `bin` 文件夹来存放所有的包,而是使用了符号链接。有许多层的符号链接。比如,以下就是一些符号链接的例子:
|
||||
|
||||
- 我机器上的 `~/.nix-profile` 最终是一个到 `/nix/var/nix/profiles/per-user/bork/profile-111-link/` 的链接
|
||||
- `~/.nix-profile/bin/fish` 是到 `/nix/store/afkwn6k8p8g97jiqgx9nd26503s35mgi-fish-3.5.1/bin/fish` 的链接
|
||||
|
||||
当我安装某样东西的时候,它会创建一个新的 `profile-112-link` 目录并建立新的链接,并且更新我的 `~/.nix-profile` 使其指向那个目录。
|
||||
|
||||
我认为,这意味着如果我安装了新版本的 `fish` 但我并不满意,我可以很容易地退回先前的版本,只需运行 `nix-env --rollback`,这样就可以让我回到之前的配置文件目录了。
|
||||
|
||||
#### 卸载包并不意味着删除它们
|
||||
|
||||
如果我像这样卸载 nix 包,实际上并不会释放任何硬盘空间,而仅仅是移除了符号链接:
|
||||
|
||||
```
|
||||
$ nix-env --uninstall oil
|
||||
```
|
||||
|
||||
我尚不清楚如何彻底删除包 - 我试着运行了如下的垃圾收集命令,这似乎删除了一些项目:
|
||||
|
||||
```
|
||||
$ nix-collect-garbage
|
||||
...
|
||||
85 store paths deleted, 74.90 MiB freed
|
||||
```
|
||||
|
||||
然而,我系统上仍然存在 `oil` 包,在 `/nix/store/8pjnk6jr54z77jiq5g2dbx8887dnxbda-oil-0.14.0`。
|
||||
|
||||
`nix-collect-garbage` 有一个更具攻击性的版本,它也会删除你配置文件的旧版本(这样你就不能回滚了)。
|
||||
|
||||
```
|
||||
$ nix-collect-garbage -d --delete-old
|
||||
```
|
||||
|
||||
尽管如此,上述命令仍无法删除 `/nix/store/8pjnk6jr54z77jiq5g2dbx8887dnxbda-oil-0.14.0`,我不明白原因。
|
||||
|
||||
#### 升级过程
|
||||
|
||||
你可以通过以下的方式升级 nix 包:
|
||||
|
||||
```
|
||||
nix-channel --update
|
||||
nix-env --upgrade
|
||||
```
|
||||
|
||||
(这与 `apt-get update && apt-get upgrade` 类似。)
|
||||
|
||||
我还没真正尝试升级任何东西。我推测,如果升级过程中出现任何问题,我可以通过以下方式轻松地回滚(因为在 nix 中,所有事物都是不可变的!):
|
||||
|
||||
```
|
||||
nix-env --rollback
|
||||
```
|
||||
|
||||
有人向我推荐了 Ian Henry 的 [这篇文章][15],该文章讨论了 `nix-env --upgrade` 的一些令人困惑的问题 - 也许它并不总是如我们所料?因此,我会对升级保持警惕。
|
||||
|
||||
### 下一个目标:创建名为 paperjam 的自定义包
|
||||
|
||||
经过几个月使用现有的 nix 包后,我开始考虑制作自定义包,对象是一个名为 [paperjam][2] 的程序,它还没有被打包封装。
|
||||
|
||||
实际上,因为我系统上的 `libiconv` 版本不正确,我甚至在没有 nix 的情况下也遇到了编译 `paperjam` 的困难。我认为,尽管我还不懂如何制作 nix 包,但使用 nix 来编译它可能会更为简单。结果证明我的想法是对的!
|
||||
|
||||
然而,理清如何实现这个目标的过程相当复杂,因此我在这里写下了一些我实现它的方式和步骤。
|
||||
|
||||
#### 构建示例包的步骤
|
||||
|
||||
在我着手制作 `paperjam` 自定义包之前,我想先试手构建一个已存在的示例包,以便确保我已经理解了构建包的整个流程。这个任务曾令我头痛不已,但在我在 Discord 提问之后,有人向我阐述了如何从 [https://github.com/NixOS/nixpkgs/][13] 获取一个可执行的包并进行构建。以下是操作步骤:
|
||||
|
||||
**步骤 1:** 从 GitHub 的 [nixpkgs][13] 下载任意一个包,以 `dash` 包为例:
|
||||
|
||||
```
|
||||
wget https://raw.githubusercontent.com/NixOS/nixpkgs/47993510dcb7713a29591517cb6ce682cc40f0ca/pkgs/shells/dash/default.nix -O dash.nix
|
||||
```
|
||||
|
||||
**步骤 2:** 用 `with import <nixpkgs> {};` 替换开头的声明(`{ lib , stdenv , buildPackages , autoreconfHook , pkg-config , fetchurl , fetchpatch , libedit , runCommand , dash }:`)。我不清楚为何需要这样做,但事实证明这么做是有效的。
|
||||
|
||||
**步骤 3:** 运行 `nix-build dash.nix`
|
||||
|
||||
这将开始编译该包。
|
||||
|
||||
**步骤 4:** 运行 `nix-env -i -f dash.nix`
|
||||
|
||||
这会将该包安装到我的 `~/.nix-profile` 目录下。
|
||||
|
||||
就这么简单!一旦我完成了这些步骤,我便感觉自己能够逐步修改 `dash` 包,进一步创建属于我自己的包了。
|
||||
|
||||
#### 制作自定义包的过程
|
||||
|
||||
因为 `paperjam` 依赖于 `libpaper`,而 `libpaper` 还没有打包,所以我首先需要构建 `libpaper` 包。
|
||||
|
||||
以下是 `libpaper.nix`,我基本上是从 [nixpkgs][13] 仓库中其他包的源码中复制粘贴得到的。我猜测这里的原理是,nix 对如何编译 C 包有一些默认规则,例如 “运行 `make install`”,所以 `make install` 实际上是默认执行的,并且我并不需要明确地去配置它。
|
||||
|
||||
```
|
||||
with import <nixpkgs> {};
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "libpaper";
|
||||
version = "0.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "naota";
|
||||
repo = "libpaper";
|
||||
rev = "51ca11ec543f2828672d15e4e77b92619b497ccd";
|
||||
hash = "sha256-S1pzVQ/ceNsx0vGmzdDWw2TjPVLiRgzR4edFblWsekY=";
|
||||
};
|
||||
|
||||
buildInputs = [ ];
|
||||
|
||||
meta = with lib; {
|
||||
homepage = "https://github.com/naota/libpaper";
|
||||
description = "libpaper";
|
||||
platforms = platforms.unix;
|
||||
license = with licenses; [ bsd3 gpl2 ];
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
这个脚本基本上告诉 nix 如何从 GitHub 下载源代码。
|
||||
|
||||
我通过运行 `nix-build libpaper.nix` 来构建它。
|
||||
|
||||
接下来,我需要编译 `paperjam`。我制作的 [nix 包][16] 的链接在这里。除了告诉它从哪里下载源码外,我需要做的主要事情有:
|
||||
|
||||
- 添加一些额外的构建依赖项(像 `asciidoc`)
|
||||
- 在安装过程中设置一些环境变量(`installFlags = [ "PREFIX=$(out)" ];`),这样它就会被安装在正确的目录,而不是 `/usr/local/bin`。
|
||||
|
||||
我首先从散列值为空开始,然后运行 `nix-build` 以获取一个关于散列值不匹配的错误信息。然后我从错误信息中复制出正确的散列值。
|
||||
|
||||
我只是在 nixpkgs 仓库中运行 `rg PREFIX` 来找出如何设置 `installFlags` 的 —— 我认为设置 `PREFIX` 应该是很常见的操作,可能之前已经有人做过了,事实证明我的想法是对的。所以我只是从其他包中复制粘贴了那部分代码。
|
||||
|
||||
然后我执行了:
|
||||
|
||||
```
|
||||
nix-build paperjam.nix
|
||||
nix-env -i -f paperjam.nix
|
||||
```
|
||||
|
||||
然后所有的东西都开始工作了,我成功地安装了 `paperjam`!耶!
|
||||
|
||||
### 下一个目标:安装一个五年前的 Hugo 版本
|
||||
|
||||
当前,我使用的是 2018 年的 Hugo 0.40 版本来构建我的博客。由于我并不需要任何的新功能,因此我并没有感到有升级的必要。对于在 Linux 上操作,这个过程非常简单:Hugo 的发行版本是静态二进制文件,这意味着我可以直接从 [发布页面][17] 下载五年前的二进制文件并运行。真的很方便!
|
||||
|
||||
但在我的 Mac 电脑上,我遇到了一些复杂的情况。过去五年中,Mac 的硬件已经发生了一些变化,因此我下载的 Mac 版 Hugo 二进制文件并不能运行。同时,我尝试使用 `go build` 从源代码编译,但由于在过去的五年内 Go 的构建规则也有所改变,因此没有成功。
|
||||
|
||||
我曾试图通过在 Linux docker 容器中运行 Hugo 来解决这个问题,但我并不太喜欢这个方法:尽管可以工作,但它运行得有些慢,而且我个人感觉这样做有些多余。毕竟,编译一个 Go 程序不应该那么麻烦!
|
||||
|
||||
幸好,Nix 来救援!接下来,我将介绍我是如何使用 nix 来安装旧版本的 Hugo。
|
||||
|
||||
#### 使用 nix 安装 Hugo 0.40 版本
|
||||
|
||||
我的目标是安装 Hugo 0.40,并将其添加到我的 PATH 中,以 `hugo-0.40` 作为命名。以下是我实现此目标的步骤。尽管我采取了一种相对特殊的方式进行操作,但是效果不错(可以参考 [搜索和安装旧版本的 Nix 包][18] 来找到可能更常规的方法)。
|
||||
|
||||
**步骤 1:** 在 nixpkgs 仓库中搜索找到 Hugo 0.40。
|
||||
|
||||
我在此链接中找到了相应的 `.nix` 文件 [https://github.com/NixOS/nixpkgs/blob/17b2ef2/pkgs/applications/misc/hugo/default.nix][19]。
|
||||
|
||||
**步骤 2:** 下载该文件并进行构建。
|
||||
|
||||
我下载了带有 `.nix` 扩展名的文件(以及同一目录下的另一个名为 `deps.nix` 的文件),将文件的首行替换为 `with import <nixpkgs> {};`,然后使用 `nix-build hugo.nix` 进行构建。
|
||||
|
||||
虽然这个过程几乎无需进行修改就能成功运行,但我仍然做了两处小调整:
|
||||
|
||||
- 把 `with stdenv.lib` 替换为 `with lib`。
|
||||
- 为避免与我已安装的其他版本的 `hugo` 冲突,我把包名改为了 `hugo040`。
|
||||
|
||||
**步骤 3:** 将 `hugo` 重命名为 `hugo-0.40`。
|
||||
|
||||
我编写了一个简短的后安装脚本,用以重命名 Hugo 二进制文件。
|
||||
|
||||
```
|
||||
postInstall = ''
|
||||
mv $out/bin/hugo $out/bin/hugo-0.40
|
||||
'';
|
||||
```
|
||||
|
||||
我是通过在 nixpkgs 仓库中运行 `rg 'mv '` 命令,然后复制和修改一条看似相关的代码片段来找到如何实施此步骤。
|
||||
|
||||
**步骤 4:** 安装。
|
||||
|
||||
我通过运行 `nix-env -i -f hugo.nix` 命令,将 Hugo 安装到了 `~/.nix-profile/bin` 目录中。
|
||||
|
||||
所有的步骤都顺利运行了!我把最终的 `.nix` 文件存放到了我自己的 [nixpkgs 仓库][20] 中,这样我以后如果需要,就能再次使用它了。
|
||||
|
||||
### 可重复的构建过程并非神秘,其实它们极其复杂
|
||||
|
||||
我觉得值得一提的是,这个 `hugo.nix` 文件并不是什么魔法——我之所以能在今天轻易地编译 Hugo 0.40,完全归功于许多人长期以来的付出,他们让 Hugo 的这个版本得以以可重复的方式打包。
|
||||
|
||||
### 总结
|
||||
|
||||
安装 `paperjam` 和这个五年前的 Hugo 版本过程惊人地顺利,实际上比没有 nix 来编译它们更简单。这是因为 nix 极大地方便了我使用正确的 `libiconv` 版本来编译 `paperjam` 包,而且五年前就已经有人辛苦地列出了 Hugo 的确切依赖关系。
|
||||
|
||||
我并无计划详细深入地使用 nix(真的,我很可能对它感到困扰,然后最后选择回归使用 homebrew!),但我们将拭目以待!我发现,简单入手然后按需逐步掌握更多功能,远比一开始就全面接触一堆复杂功能更容易掌握。
|
||||
|
||||
我可能不会在 Linux 上使用 nix —— 我一直都对 Debian 基础发行版的 `apt` 和 Arch 基础发行版的 `pacman` 感到满意,它们策略明晰且少有混淆。而在 Mac 上,使用 nix 似乎会有所得。不过,谁知道呢!也许三个月后,我可能会对 nix 感到不满然后再次选择回归使用 homebrew。
|
||||
|
||||
*(题图:MJ/f68aaf37-4a34-4643-b3a1-8728d49cf887)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://jvns.ca/blog/2023/02/28/some-notes-on-using-nix/
|
||||
|
||||
作者:[Julia Evans][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://jvns.ca/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://nixos.org/
|
||||
[2]: https://mj.ucw.cz/sw/paperjam/
|
||||
[3]: https://github.com/gohugoio/hugo/
|
||||
[4]: https://cache.nixos.org/
|
||||
[5]: https://nixos.org/download
|
||||
[6]: https://zero-to-nix.com/concepts/nix-installer
|
||||
[7]: https://nixos.org/manual/nix/stable/installation/installing-binary.html#macos
|
||||
[8]: https://cache.nixos.org
|
||||
[9]: https://nixos.org/guides/nix-pills/developing-with-nix-shell.html
|
||||
[10]: https://nixos.wiki/wiki/Flakes
|
||||
[11]: https://github.com/nix-community/home-manager
|
||||
[12]: https://devenv.sh/
|
||||
[13]: https://github.com/NixOS/nixpkgs/
|
||||
[14]: https://search.nixos.org/packages
|
||||
[15]: https://ianthehenry.com/posts/how-to-learn-nix/my-first-package-upgrade/
|
||||
[16]: https://github.com/jvns/nixpkgs/blob/22b70a48a797538c76b04261b3043165896d8f69/paperjam.nix
|
||||
[17]: https://github.com/gohugoio/hugo/releases/tag/v0.40
|
||||
[18]: https://lazamar.github.io/download-specific-package-version-with-nix/
|
||||
[19]: https://github.com/NixOS/nixpkgs/blob/17b2ef2/pkgs/applications/misc/hugo/default.nix
|
||||
[20]: https://github.com/jvns/nixpkgs/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/30/221702nk4a42dglmcgc7lh.jpg
|
||||
@@ -0,0 +1,150 @@
|
||||
[#]: subject: "Make use of Btrfs snapshots to upgrade Fedora Linux with easy fallback"
|
||||
[#]: via: "https://fedoramagazine.org/make-use-of-btrfs-snapshots-to-upgrade-fedora-linux-with-easy-fallback/"
|
||||
[#]: author: "Stuart D Gathman https://fedoramagazine.org/author/sdgathman/"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16267-1.html"
|
||||
|
||||
使用 Btrfs 快照方便升级 Fedora Linux 且易于回退
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
在 2018 年的一篇 [早前的文章][3] 中,我们介绍了在升级 Fedora Linux 前如何利用 LVM 复制根文件系统,以便在可能出现错误的情况下能有一个回退机制。然而如今,Fedora 工作站的默认安装已经是 Btrfs 文件系统了。现在,你可以利用 Btrfs 快照来更简便地创建一个可引导的回退系统。注意,本文不涉及会如何从其它文件系统转换或迁移到 Btrfs 上。
|
||||
|
||||
### 确认根文件系统是否为 Btrfs
|
||||
|
||||
本示例采用的是 Pinebook aarch64 笔记本电脑。在开始前,务必确认你的根文件系统是否采用 Btrfs。要明确,不是所有的定制版或者镜像文件默认都使用 Btrfs。
|
||||
|
||||
```
|
||||
$ df -T
|
||||
Filesystem Type 1K-blocks Used Available Use% Mounted on
|
||||
devtmpfs devtmpfs 4096 0 4096 0% /dev
|
||||
tmpfs tmpfs 998992 0 998992 0% /dev/shm
|
||||
tmpfs tmpfs 399600 6360 393240 2% /run
|
||||
/dev/mmcblk2p3 btrfs 56929280 39796116 15058348 73% /
|
||||
tmpfs tmpfs 998996 24 998972 1% /tmp
|
||||
tmpfs tmpfs 5242880 0 5242880 0% /var/lib/mock
|
||||
/dev/mmcblk2p3 btrfs 56929280 39796116 15058348 73% /f34
|
||||
/dev/mmcblk2p3 btrfs 56929280 39796116 15058348 73% /home
|
||||
/dev/mmcblk2p2 ext4 996780 551888 376080 60% /boot
|
||||
/dev/mmcblk2p1 vfat 194348 31648 162700 17% /boot/efi
|
||||
tmpfs tmpfs 199796 100 199696 1% /run/user/1000
|
||||
tmpfs tmpfs 199796 84 199712 1% /run/user/0
|
||||
```
|
||||
|
||||
### 列出当前的 Btrfs 子卷
|
||||
|
||||
以上的示例输出显示挂载在 “根”(`/`)的文件系统类型是 Btrfs。你会注意到,有三个挂载点显示了相同的备份设备以及 _已用_ 和 _可用_ 的块数。这是因为它们是从同一 Btrfs 文件系统挂载的不同部分(子卷)。比如,`/f34` 子卷是我去年创建的那个可引导快照。
|
||||
|
||||
默认的 Fedora Btrfs 安装会创建一个 Btrfs 文件系统,并在其上分别挂载两个子卷,`root` 和 `home` ,挂载路径分别为 `/` 和 `/home`。让我们一起来看看我还添加了哪些其它的子卷:
|
||||
|
||||
```
|
||||
$ sudo btrfs subvol list /
|
||||
ID 272 gen 110428 top level 5 path root
|
||||
ID 273 gen 110426 top level 5 path home
|
||||
ID 300 gen 109923 top level 5 path f34
|
||||
ID 301 gen 95852 top level 5 path home.22Jul26
|
||||
ID 302 gen 95854 top level 5 path f36.22Jul26
|
||||
```
|
||||
|
||||
在这里,我们有一个来自最近一次系统升级的 `f34` 子卷,以及两个只读快照 `home` 和 `f36`。要添加和删除这些快照,最简单的方法就是挂载 Btrfs 的根目录。我会更新系统并创建当前 f36 `root` 子卷的新快照。如果你已经重命名了你的 `root` 子卷,我相信你知道该如何调整以下的示例以适应你的系统。
|
||||
|
||||
### 创建 Btrfs 的回退快照
|
||||
|
||||
```
|
||||
$ sudo dnf update --refresh
|
||||
...更新了很多部分(如果升级了内核还需要重启)
|
||||
$ sudo mkdir -p /mnt/root
|
||||
$ sudo mount /dev/mmcblk2p3 /mnt/root
|
||||
$ cd /mnt/root
|
||||
$ ls
|
||||
f34 f36.22Jul26 home home.22Jul26 root
|
||||
$ sudo btrfs subvol snapshot root f36
|
||||
Create a snapshot of 'root' in './f36'
|
||||
```
|
||||
|
||||
因为 Btrfs 快照是以文件系统为基础的,所以并不需要在创建快照之前进行 “同步”,正如我在 LVM 中建议的。要从新的子卷引导为回退,你需要使用你喜欢的编辑器编辑 `/mnt/root/f36/etc/fstab`。如果你是刚入门的话,nano 就是一款十分简单的文本编辑器,功能基本够用。以下是我 `fstab` 文件中的一些行:
|
||||
|
||||
```
|
||||
LABEL=PINE / btrfs subvol=root,compress=zstd:1 1 1
|
||||
UUID=e31667fb-5b6f-48d9-aa90-f2fd6aa5f005 /boot ext4 defaults 1 2
|
||||
UUID=75DB-5832 /boot/efi vfat umask=0077,shortname=winnt 0 2
|
||||
LABEL=PINE /home btrfs subvol=home,compress=zstd:1 1 1
|
||||
LABEL=SWAP swap swap discard=once 0 0
|
||||
```
|
||||
|
||||
将 `subvol=root` 更改为 `subvol=f36`。这个改动是作用在快照中的文件,而并非你实际运行中的 `fstab` 文件。你可以通过 `diff /etc/fstab /mnt/root/f36/etc/fstab` 对比它们的区别。在我的情况下,我还使用了 `sudo btrfs subvol delete f34` 来删除我去年的 `f34` 快照。
|
||||
|
||||
### 测试 Btrfs 的回退快照
|
||||
|
||||
你现在可以进行回退的测试了。你可以使用 [grubby][4] 或在 `/boot/loader/entries` 中编辑一项来将 `subvol=root` 替换为 `subvol=f36`。然而,为了初学者的安全起见,我们更建议你在启动时编辑 GRUB 进行操作。你可以参考 [关于 GRUB 的这篇文章][5] 了解如何进入 GRUB 菜单。在你到达那里后,按下 `e` 键编辑默认的内核启动项。放心 —— 你所做的更改都只存在于内存中,如果你弄错了,重启电脑即可重新开始。就像编辑 `fstab` 文件一样,找到 `subvol=root` 并将其更改为 `subvol=f36`。然后,按 `F10` 或 `Ctrl + X` 来引导你修改过的项目。通过这些更改,你的系统应该能够引导进入你的新快照。你可以查看 `/etc/fstab` 确保你正在引导至正确的子卷,或键入 `mount | grep subvol` 查看此时在 `/` 上挂载的子卷。
|
||||
|
||||
### 进行 Fedora Linux 的系统升级
|
||||
|
||||
如果你的回退功能没问题,重启并返回你的正常根文件系统(并像上面所述,进行确认)。然后,按照 [维基页面][6] 上的指南进行标准的系统升级。提示:在运行 `dnf system-upgrade reboot` 之前,给 `root` 子卷创建另一个快照,你可以给它命名为 `root.dl`。这样,如果你发现硬盘空间不够,你不必再下载五个 GB 的文件包。因为除了下载的包以外,所有的内容都将与 `root` 和 `f36` 共享,因此它不会占用任何额外的空间。然后说到磁盘块的共享问题……
|
||||
|
||||
因为在 `root` 子卷中的 `f36` 文件和 `f36` 子卷中的相同文件都使用的是相同的磁盘位置,所以在处理 Btrfs 报告的可用空间时,`dnf system-upgrade` 会感到困惑。因此在升级过程中从 `root` 子卷中删除它们并不会真正释放任何空间。如果你耗尽了所有空间,并且决定重启电脑,那么图形用户界面(GUI)将无法启动。此时,你需要使用 `Ctrl + Alt + F2` 进入文本控制台并登录,这将是你磨练命令行技能的好机会。如何清空空间或扩展根文件系统在这里先不做讨论(我的文件系统经常在一个 LVM 的卷上,可以被扩展)。通常,为升级保留超过 50% 的空闲空间是比较保险的。
|
||||
|
||||
### 恢复环节
|
||||
|
||||
如果不幸出现问题,你可以重启电脑,并编辑 GRUB 条目以引导启动回退快照。如果你是新手,一旦需要在磁盘上修改 GRUB 条目(这样你就不需要每次启动时都进行编辑),可能需要一些指导。删除或重命名损坏的 `root` 子卷是非常直接的。你可以为 `f36` 子卷(或 `root.dl` 快照)创建一个快照,然后尝试再一次进行系统升级。以下是在子卷 f36 上启动到回退系统后重新开始的示例:
|
||||
|
||||
```
|
||||
|
||||
$ mount | grep subvol
|
||||
$ sudo mount /dev/mmcblk2p3 /mnt/root
|
||||
$ cd /mnt/root
|
||||
$ sudo mv root root.failed
|
||||
$ sudo btrfs subvol snapshot f36 root
|
||||
Create a snapshot of 'f36' in './root'
|
||||
|
||||
Don't forget to edit /mnt/root/root/etc/fstab to change the subvol mounted on "/" to "root".
|
||||
```
|
||||
|
||||
事实证明,新的 f38 版本的 kernel-6.2.11 在我的 Pinebook 上进行系统升级后并未成功启动!(不过请不要担心,ARM 只是 Fedora Linux 的可选 CPU 架构——在主流设备上,你很少会遭遇此类问题。)的确,我成功地按照前文所述,在启动时编辑了 GRUB 条目并恢复到了 f36 的 kernel-6.2.10。现在,我继续使用着 f38,但同时搭载了 f36 的 kernel-6.2.10。
|
||||
|
||||
**更新**:kernel-6.2.12 已经发布,且我已确认它在 Pinebook 上运行正常。
|
||||
|
||||
### 过期问题
|
||||
|
||||
随着你不断更新 f38 系统,它最终可能会希望删除 `/boot` 下的最后一个 f36 内核。通常来说,这并不是问题,因为到那个时候,你已经完全熟悉 f38,而 `f36` 快照只是一个存档。然而,如果你希望你的复刻版本(即 `f36` 的快照)能无限期地启动,那么你应当在 `/boot` 下保存一个能正常工作的 f36 内核。最简单的方法是在 `/etc/dnf/dnf.conf` 文件中设置 `installonly_limit=0` 并手动移除旧的内核,这种方法既简单又安全(尽管可能稍显繁琐)。
|
||||
|
||||
这里还有一个更复杂的解决方案(不适合新手):运行 `find /boot -name "*fc36*"` 指令,列举出所有在 `f36` 子卷快照中的内核及 GRUB 文件(这些文件并未包含在快照之内)。将这些文件备份至安全位置(例如我会挂载 `f36` 子卷,并将文件备份至其下的一个目录)。当 f38 系统启动后,对于每一个 f36 内核版本,都需使用 `dnf` 删除特定版本的内核(例如,使用 `dnf remove kernel-core-5.19.11-200.fc36`)。千万不要删除 f38 的内核!然后将你先前备份的 f36 内核恢复至 `/boot` 下。此时,f38 系统已经无法再识别 f36 的内核,因此也不会将其从 `/boot` 中删除。
|
||||
|
||||
然而,使用此方法有一个缺点,那就是你可能会不小心删除正在运行的 f38 内核。如果大家有更佳的解决办法,欢迎在评论区分享。
|
||||
|
||||
### 展望未来
|
||||
|
||||
对于习惯于修改 GRUB 条目的用户,他们可能会考虑创建一个命名为 `f38` 的快照子卷。将当前的 GRUB 条目进行修改,以便启动到这个子卷,重启后,在这个子卷中进行系统升级。此后,总是根据它所包含的 Fedora Linux 版本来命名根文件系统的子卷。但在本文中,我没有采用这种作法,原因有两点:
|
||||
|
||||
1. 将当前活动的子卷命名为 `root`,这是遵循 Fedora Linux 的默认设置。
|
||||
2. 坚持使用 `root` 作为当前子卷,这样在进行正常的系统升级操作之外,并不需要任何永久性的更改。
|
||||
|
||||
正如本文所展示的,针对重大系统更改(如系统版本升级)可能引发问题时,只读快照作为本地恢复点,非常有用。这些快照还可以通过 Btrfs 的 `send` 子命令,发送至远程备份。(如果远程备份设备已经包含了先前的备份数据,Btrfs 可以进行增量发送,仅传输发生变更的文件,这样就能节省时间和空间。)如果你打算长期存档这些快照,保持清晰不混淆且能明确恢复顺序的关键,就是要使用一套一致的命名规则。关于如何使用 Btrfs 的 `send` 命令来创建备份的更多信息,你可以参考关于 [Btrfs 快照备份][7] 的文章。
|
||||
|
||||
*(题图:MJ/6aed1d19-f1dd-4935-ad6f-61f6a868f150)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/make-use-of-btrfs-snapshots-to-upgrade-fedora-linux-with-easy-fallback/
|
||||
|
||||
作者:[Stuart D Gathman][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://fedoramagazine.org/author/sdgathman/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2023/04/forkedtree-816x345.jpg
|
||||
[2]: https://www.flickr.com/photos/brenejohn/20155029206/
|
||||
[3]: https://fedoramagazine.org/use-lvm-upgrade-fedora/
|
||||
[4]: https://fedoramagazine.org/setting-kernel-command-line-arguments-with-fedora-30/
|
||||
[5]: https://fedoramagazine.org/boot-earlier-kernel/
|
||||
[6]: https://docs.fedoraproject.org/en-US/quick-docs/dnf-system-upgrade/
|
||||
[7]: https://fedoramagazine.org/btrfs-snapshots-backup-incremental/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/09/113654ba1kp126nzn6tpjv.jpg
|
||||
261
published/202310/20230704.0 ⭐️⭐️ Using ls Command in Linux.md
Normal file
261
published/202310/20230704.0 ⭐️⭐️ Using ls Command in Linux.md
Normal file
@@ -0,0 +1,261 @@
|
||||
[#]: subject: "Using ls Command in Linux"
|
||||
[#]: via: "https://itsfoss.com/ls-command/"
|
||||
[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16266-1.html"
|
||||
|
||||
Linux 中的 ls 命令使用教程
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> ls 属于 Linux 中那些简单又常用的命令之一。在本教程里,你将学到如何高效使用它。
|
||||
|
||||
对我个人而言,`ls` 无疑是 [最常被使用的 Linux 命令][1],因为我们总是借助它 [列出目录内的内容][2] 来检验上一步操作的结果。
|
||||
|
||||
`ls` 命令是 “<ruby>列表<rt>List</rt></ruby>” 的缩写,其功能就是列出你指定目录下的所有内容。
|
||||
|
||||
我将在本教程中,通过一系列的实例,带你一步步掌握 `ls` 命令的使用。
|
||||
|
||||
另外也会给出一些练习题,以检验你的学习成果。
|
||||
|
||||
### 如何运用 ls 命令
|
||||
|
||||
要使用 `ls` 命令,你只需遵循以下简单的命令格式:
|
||||
|
||||
```
|
||||
ls [OPTIONS] Targeted_Directory
|
||||
```
|
||||
|
||||
这里,
|
||||
|
||||
- `[OPTIONS]`:用来改变 ls 命令的默认行为。
|
||||
- `Targeted_Directory`:在这里输入目录名或目录的绝对路径。
|
||||
|
||||
你可能会想,如果没有任何选项地使用 `ls` 命令会发生什么。为了回答这个问题,我在当前工作目录中使用了 `ls` 命令:
|
||||
|
||||
![使用 ls 命令列出工作目录的内容][3]
|
||||
|
||||
如你所见,它列出了当前工作目录中所有可用的目录和文件。但你可以做的远不止于在当前工作目录中获取名称和文件。
|
||||
|
||||
接下来让我给你展示一下。
|
||||
|
||||
#### 1、列出带有所有权的文件和目录
|
||||
|
||||
`ls` 命令的重要用途之一就是查出具体的文件或目录的权限以及所有权信息。
|
||||
|
||||
这就需要你在使用 `ls` 命令时,带上 `-l` 选项(这也被称为长列表格式):
|
||||
|
||||
```
|
||||
ls -l
|
||||
```
|
||||
|
||||
执行该命令后,你会看到类似的输出:
|
||||
|
||||
```
|
||||
$ ls -lh
|
||||
-rwxrw-r-- 1 sagar sagar 666M Dec 10 18:16 Fedora.iso
|
||||
```
|
||||
|
||||
注意到我是同时使用了 `–h` 选项吗?我们稍后会详细说明这个。
|
||||
|
||||
如果目前为止的输出结果看起来太复杂,那就让我来帮你简化一下:
|
||||
|
||||
![利用 ls 命令在 Linux 中解读文件权限和所有权][4]
|
||||
|
||||
如你所见,每个文本块都有特定的含义,它们分别对应文件拥有者、组和其他用户的各项权限。
|
||||
|
||||
对于想对文件权限有更深入理解的朋友,我推荐你阅读 [我们关于 Linux 文件权限的详尽指南][5]。
|
||||
|
||||
#### 2、获取以人类可读的方式显示的信息
|
||||
|
||||
默认状态下,文件大小以字节为单位显示,显然不是最佳的查阅方式。那如果想以更易读的方式来得知相同的信息,我们怎么做呢?
|
||||
|
||||
其实很简单。你只需使用 `-h` 选项与 `ls` 命令配合:
|
||||
|
||||
```
|
||||
ls -l -h
|
||||
```
|
||||
|
||||
接下来,我们比较下默认显示状态和可读性更强的显示方式的区别:
|
||||
|
||||
![以人类可读的方式通过 ls 命令列出文件][6]
|
||||
|
||||
明显更好了,对吧?
|
||||
|
||||
> 💡 尽管 `ls` 命令很好地展示了文件大小,但它并不能告诉你文件夹的大小,普遍情况都会显示为 4K(LCTT 译注:这其实是“目录”这个文件所占用的大小,而不是该目录下文件的总计大小。)。如果需要了解文件夹的大小,那么你可以尝试使用 `du` 命令。
|
||||
|
||||
#### 3、列出隐藏文件
|
||||
|
||||
和其他所有文件管理器一样,`ls` 命令在默认情况下并不会显示隐藏文件(这正是隐藏文件的意义所在,对吧?)。
|
||||
|
||||
那么,如果你期望在常规文件之外,一并 [列出隐藏文件][7] 呢?只需在使用 `ls` 命令时带上 `-a` 选项就行:
|
||||
|
||||
```
|
||||
ls -a
|
||||
```
|
||||
|
||||
你会注意到,以 `.` 开头的文件名就是所谓的隐藏文件。
|
||||
|
||||
![用 ls 命令在 Linux 终端列出隐藏文件][8]
|
||||
|
||||
> 💡 你还可以使用 `ls -A`,它的功能与 `ls -a` 类似,但它不包括 `.` 和 `..` 这两个目录。
|
||||
|
||||
#### 4、递归列出文件
|
||||
|
||||
事实上,有 [多种方法可以递归列出文件][9],使用 `ls` 命令就是其中之一。
|
||||
|
||||
如果你还不清楚,递归列出文件就是指展示所有子目录中的文件,直到每个子目录的最深层次。
|
||||
|
||||
你可以通过使用 `-R` 参数来递归列出文件:
|
||||
|
||||
```
|
||||
ls -R
|
||||
```
|
||||
|
||||
![在 Linux 中使用 ls 命令递归列出文件][10]
|
||||
|
||||
这种方式实际上为你展示了当前目录的结构,我个人非常喜欢这种方式,但你需要先进行安装。
|
||||
|
||||
> 💡 其实你并不需要进入某个目录才能查看其内容,你可以直接通过提供它的绝对路径或相对路径来列出目录内容,比如:`ls /var/log`。
|
||||
|
||||
#### 5、在使用 ls 时对文件和目录做区分
|
||||
|
||||
通常,不同的颜色就足以区分文件和目录。但是如果你基于某种原因需要给文件和目录添加符号标识,这就有一个办法。
|
||||
|
||||
在 `ls` 命令中,使用 `-F` 选项,它会在每个目录名末尾添加一个正斜杠 `/`:
|
||||
|
||||
```
|
||||
ls -F
|
||||
```
|
||||
|
||||
![使用 ls 命令在文件和目录间做区分][11]
|
||||
|
||||
#### 6、列出指定扩展名的文件
|
||||
|
||||
有些情况下,你可能只希望列出具有特定扩展名的文件,实际上,这是最简单的操作之一。
|
||||
|
||||
做到这一点,你无需使用任何选项。只需在星号 `*` 后附上文件扩展名,如 `*.png`,`*.txt` 等:
|
||||
|
||||
```
|
||||
ls *.extension
|
||||
```
|
||||
|
||||
例如,如果我只想列出 ISO 文件,那么我将使用以下命令:
|
||||
|
||||
```
|
||||
ls *.iso
|
||||
```
|
||||
|
||||
![列出特定扩展名的文件][12]
|
||||
|
||||
#### 7、基于大小对输出内容排序
|
||||
|
||||
若希望基于文件大小来对输出内容排序,你需要使用 `-S` 选项,它会以从大到小的方式(降序)列出文件:
|
||||
|
||||
```
|
||||
ls -lhS
|
||||
```
|
||||
|
||||
![使用 ls 命令基于文件大小排序][13]
|
||||
|
||||
相反,如果你想颠倒这个顺序,使得最小的文件首先被列出,你可以利用 `-r` 选项来实现反向排序:
|
||||
|
||||
```
|
||||
ls -lhSr
|
||||
```
|
||||
|
||||
![使用 ls 命令从小到大排序文件][14]
|
||||
|
||||
#### 8、根据日期和时间排序文件
|
||||
|
||||
`ls` 命令在列出的内容中包括文件的修改时间。
|
||||
|
||||
如果你希望最新的文件最先被列出,可以使用 `-t` 选项,如下所示:
|
||||
|
||||
```
|
||||
ls -lht
|
||||
```
|
||||
|
||||
![使用 ls 命令最先列出最新文件][15]
|
||||
|
||||
你也可以像我前面提到的那样,在这里使用 `-r` 选项进行反转排序。
|
||||
|
||||
```
|
||||
ls -lrt
|
||||
```
|
||||
|
||||
这会使得最近修改的文件在列表的底部显示,当目录中存在大量文件,而你希望查看最近被修改过的文件时,这一命令会特别有用。我在解决我的软件项目问题时就经常用到它。
|
||||
|
||||
![使用 ls -lrt 命令][16]
|
||||
|
||||
### 让我们来总结一下至此你已经学习到的!
|
||||
|
||||
下面,我会共享一个表列出本教程中介绍过的一些与 `ls` 命令一起使用的选项:
|
||||
|
||||
| 命令 | 描述 |
|
||||
| :- | :- |
|
||||
| `ls -l` | 长格式列出文件和目录 |
|
||||
| `ls -lh` | 以人类可读的方式显示信息 |
|
||||
| `ls -a` | 在列出的内容中包括隐藏文件 |
|
||||
| `ls -R` | 递归列出文件 |
|
||||
| `ls -F` | 在目录名后添加正斜杠 |
|
||||
| `ls *.ext` | 列出具有特定扩展名的文件 |
|
||||
| `ls -lS` | 根据文件大小排序 |
|
||||
| `ls -lt` | 根据修改时间排序 |
|
||||
| `-r` | 反转排序顺序(与 `-S` 或 `-t` 结合使用) |
|
||||
|
||||
### 🏋️ 并练习你所学
|
||||
|
||||
实践你所学总是一个好主意,这就是我们在每一份终端指南中都试图添加实践部分的原因。
|
||||
|
||||
所以,这里有一些关于 `ls` 命令的简单练习:
|
||||
|
||||
- 列出 `/var/log` 的内容
|
||||
- [将命令的输出][17] 保存到名为 `output.txt` 的文件中
|
||||
- 找出最近的 3 个文件(使用基于时间的排序)
|
||||
- 基于大小显示文件,但排序方式要反转
|
||||
- 检查是否存在任何隐藏文件
|
||||
|
||||
这些练习对你来说会很有帮助。期待之后更多关于 Linux 命令的学习。
|
||||
|
||||
如果你是初次接触终端,别忘了关注我们的终端基础系列。
|
||||
|
||||
祝你日有进益 :)
|
||||
|
||||
*(题图:MJ/8fb35776-5192-43ca-b96d-31bbd77c3318)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/ls-command/
|
||||
|
||||
作者:[Sagar Sharma][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/sagar/
|
||||
[b]: https://github.com/lkxed/
|
||||
[1]: https://itsfoss.com/essential-ubuntu-commands/
|
||||
[2]: https://itsfoss.com/list-directory-content/
|
||||
[3]: https://itsfoss.com/content/images/2023/07/use-the-ls-command-to-list-the-contents-of-the-working-directory.png
|
||||
[4]: https://itsfoss.com/content/images/2023/07/explain-read-write-permissions-in-linux-filesystem.png
|
||||
[5]: https://linuxhandbook.com:443/linux-file-permissions/
|
||||
[6]: https://itsfoss.com/content/images/2023/07/list-files-using-the-ls-command-in-human-readable-format.png
|
||||
[7]: https://itsfoss.com/show-hidden-files-linux/
|
||||
[8]: https://itsfoss.com/content/images/2023/07/list-hidden-files-in-Linux-terminal-using-the-ls-command.png
|
||||
[9]: https://linuxhandbook.com:443/list-files-recursively/
|
||||
[10]: https://itsfoss.com/content/images/2023/07/list-files-recursilvely-in-Linux-using-the-ls-command.png
|
||||
[11]: https://itsfoss.com/content/images/2023/07/differenciate-between-files-and-directories-while-using-the-ls-command.png
|
||||
[12]: https://itsfoss.com/content/images/2023/07/list-files-of-a-specific-file-extensions.png
|
||||
[13]: https://itsfoss.com/content/images/2023/07/sort-files-based-on-their-file-size-using-the-ls-command.png
|
||||
[14]: https://itsfoss.com/content/images/2023/07/sort-files-from-smallest-to-largest-using-the-ls-command.png
|
||||
[15]: https://itsfoss.com/content/images/2023/07/show-newest-files-first-while-using-the-ls-command.png
|
||||
[16]: https://itsfoss.com/content/images/2023/07/output_for_ls_-lrt-1.png
|
||||
[17]: https://itsfoss.com/save-command-output-to-file-linux/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/08/200201p8sfy8shyyyspxxx.jpg
|
||||
@@ -0,0 +1,260 @@
|
||||
[#]: subject: "7 Things You Never Knew You Could Do in GNOME's Activity Search"
|
||||
[#]: via: "https://itsfoss.com/gnome-search/"
|
||||
[#]: author: "Sreenath https://itsfoss.com/author/sreenath/"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16273-1.html"
|
||||
|
||||
GNOME 活动搜索:你可能从未了解过的 7 个功能
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> GNOME 的桌面环境中隐藏着丰富的搜索特性,爱探索的你不妨尝试寻找。挖掘新知,将是一场乐趣无穷的旅程。
|
||||
|
||||
在我之前的 [一篇文章][1] 中,分享过在 Nautilus 文件管理器中如何掌握搜索的技巧。
|
||||
|
||||
在这次的教程中,我将介绍 GNOME 活动区域中一些被忽视的搜索功能。
|
||||
|
||||
如果 “<ruby>GNOME 活动<rt>GNOME Activities</rt></ruby>” 这个术语你并不熟悉,你可以在 GNOME 桌面环境的左上角找到并点击 “<ruby>活动<rt>Activities</rt></ruby>” 按钮,进入相应界面。
|
||||
|
||||
![点击活动以访问][2]
|
||||
|
||||
你也可以通过按下 `Super` 键(即:`Windows` 键)来快速访问。
|
||||
|
||||
![GNOME 搜索界面][3]
|
||||
|
||||
尽管 GNOME 内置了强大的搜索功能,但大部分人却仅仅用它来搜索和运行应用。
|
||||
|
||||
![大部分人用 GNOME 活动来搜索和运行应用][4]
|
||||
|
||||
而实则,它还有更多的功能等待你去探索,这些可能在你使用过程中派上大用场,同时让你带上专业用户的范儿。
|
||||
|
||||
就让我们逐个介绍这些隐藏功能吧。
|
||||
|
||||
### 1、全局文件搜索
|
||||
|
||||
这个功能和打开应用非常类似。当你在搜索区域开始输入,你会发现搜索结果在不断的变化。如果有文件与你的搜索关键词匹配上,你可以点击文件名,也可以按回车,以默认的应用打开它。
|
||||
|
||||
![文件搜索][5]
|
||||
|
||||
在同一界面中,你可以看到每个文件都有一个小型的预览。并且,列表中的每个文件都会标注其完整路径。
|
||||
|
||||
如果你细看,你会发现这里有一个文件管理器的图标,点击它。
|
||||
|
||||
![文件管理器图标][6]
|
||||
|
||||
点击后,会打开 Nautilus 文件管理器,并进入搜索模式,你可以看到所有匹配到的文件。
|
||||
|
||||
![Nautilus 文件管理器的搜索模式][7]
|
||||
|
||||
同样的,如果你点击了搜索结果中的某个应用图标,将打开这个应用,并同时展示相应的搜索结果。
|
||||
|
||||
> 💡 如果你已经安装了 GNOME Sushi,你甚至可以在开始使用这些文件前,使用全屏模式预览它们。
|
||||
|
||||
### 2、复制表情符和特殊字符
|
||||
|
||||
GNOME 提供了一个名为 `gnome-characters` 的应用,它包含了许多表情符以及相关字符。如果你还未安装这个应用,可以使用以下命令进行安装:
|
||||
|
||||
```
|
||||
sudo apt install gnome-characters
|
||||
```
|
||||
|
||||
安装完成后,这个应用将配置自己的搜索提供器。这意味着你能够搜索任何字符的名称,并且在输入过程中,系统会为你提供各种搜索建议。
|
||||
|
||||
![搜索概览中的字符][8]
|
||||
|
||||
一旦你找到了想要的字符,按回车键,就可以将其复制到剪贴板。然后使用 `CTRL+V` 进行粘贴。
|
||||
|
||||
![字符已复制][9]
|
||||
|
||||
### 3、不必打开计算器便能进行计算
|
||||
|
||||
你完全可以利用 GNOME shell 的搜索功能当作一个快捷的计算器。对于一些简单的数学运算,并无必要额外打开计算器应用。
|
||||
|
||||
相反,你可以直接在 GNOME 活动区域内完成计算。
|
||||
|
||||
![获取计算结果][11]
|
||||
|
||||
此外,你还可以将计算结果复制到剪贴板。
|
||||
|
||||
### 4、轻松获取全球时间
|
||||
|
||||
想要知道另一个城市现在的具体时间吗?不必使用其他小工具或程序,仅仅输入城市名称,GNOME shell 就能告诉你该地的时间。
|
||||
|
||||
![GNOME Shell 搜索中的世界时钟][12]
|
||||
|
||||
### 5、方便地在运行中的终端窗口之间切换
|
||||
|
||||
假设你同时运行了多个终端窗口,或者在同一终端窗口中打开多个标签,各自运行了不同的活动命令,例如 `top`,或者用 `bat` 或 `less` 在读取某个文件等,
|
||||
|
||||
你可以通过在 GNOME shell 搜索中输入命令名称,快速定位到正在运行该命令的终端窗口。
|
||||
|
||||
![获取运行中的终端窗口][13]
|
||||
|
||||
你会发现,我在其中一个终端中运行了 `top` 可以直接跳转到此终端窗口。若这是在不同的标签中,它也能帮你切换到运行着这个特定命令的标签页。
|
||||
|
||||
### 6、执行网络搜索
|
||||
|
||||
你可以通过 GNOME Shell 直达 Firefox 的网页搜索。为能实现这个功能,你需要先在后台打开 Firefox。
|
||||
|
||||
![设置中的 Firefox 角色——搜索提供器][14]
|
||||
|
||||
启动 Firefox 后,你可以在活动概览中搜索并找到网页结果。除此之外,你还可以在系统设置中,根据你的喜好对 Firefox 的显示顺序进行调整。
|
||||
|
||||
![Firefox 搜索结果][15]
|
||||
|
||||
> 🚧 遗憾的是,在我使用的 Fedora 38 系统中,虽然 Firefox 是搜索提供器,但我无法从中获得任何搜索结果。但在 Manjaro 上,一切运行正常。
|
||||
|
||||
如果你使用的是其他的发行版,你可以在 GNOME shell 搜索中,通过 Epiphany 或 GNOME Web 浏览器来访问网络搜索结果。首先,你可以使用你的包管理器来安装 Epiphany:
|
||||
|
||||
```
|
||||
sudo apt install epiphany
|
||||
```
|
||||
|
||||
或者,你也可以从 Flathub 安装:
|
||||
|
||||
```
|
||||
flatpak install flathub org.gnome.Epiphany
|
||||
```
|
||||
|
||||
安装完成后,打开设置,找到搜索功能。这时,你会看到 GNOME Web 已经出现在列表中了。
|
||||
|
||||
![搜索设置中的 GNOME Web][16]
|
||||
|
||||
如果它未被激活,只需开启这个开关。即使 GNOME Web 并没有被打开,它仍能正常工作。
|
||||
|
||||
![使用 GNOME Web 搜索得到的网络结果][17]
|
||||
|
||||
> 💡 如果一个新安装的应用程序提供了某种搜索功能,它将会出现在搜索标签页中。
|
||||
|
||||
### 7、管理搜索结果的显示顺序
|
||||
|
||||
你可以使用系统设置对显示的搜索结果进行重新排序,禁用某些结果等操作。
|
||||
|
||||
#### 在系统设置应用中访问搜索设置
|
||||
|
||||
打开系统设置,然后进入搜索选项卡。
|
||||
|
||||
![设置中的搜索选项卡][18]
|
||||
|
||||
#### 重新排序搜索结果显示的顺序
|
||||
|
||||
打开搜索设置后,你可以看到列出了所有可用的搜索提供器。每一个项目的左侧有一个把手,右侧有三个点的菜单。
|
||||
|
||||
![用于排列项目的按钮和把手][19]
|
||||
|
||||
你可以直接拖拽左侧的把手来调整项目顺序,将其放到你希望的位置。
|
||||
|
||||
![拖拽调整项目显示的顺序][20]
|
||||
|
||||
或者,你也可以点击右侧三点菜单,然后选择“<ruby>向上移动<rt>Move Up</rt></ruby>”或“<ruby>向下移动<rt>Move Down</rt></ruby>”。
|
||||
|
||||
![使用按钮上下移动][21]
|
||||
|
||||
调整后的设置将会作为 GNOME shell 搜索结果新的显示顺序。
|
||||
|
||||
#### 管理各个文件的搜索位置
|
||||
|
||||
通过搜索选项卡里的“<ruby>搜索位置<rt>Search Locations</rt></ruby>”选项,你可以调整系统应用,如文件、照片、视频等的搜索位置。
|
||||
|
||||
![][22]
|
||||
|
||||
现在,你可以开启或者关闭已有的搜索位置。或者点击添加按钮,添加新的位置。
|
||||
|
||||
![添加或移除位置][23]
|
||||
|
||||
#### 从搜索中启用或禁用搜索提供器
|
||||
|
||||
如果你并未使用某些搜索提供器,你可以通过禁用未使用的搜索提供器在搜索界面释放一些空间。具体操作是,使用每个项目右侧的切换按钮关闭指定提供器。
|
||||
|
||||
![启用 - 禁用开关][24]
|
||||
|
||||
如果需要,你可以随时重新开启它们,只需切换相同的按钮至开启状态。
|
||||
|
||||
#### 整体禁用搜索
|
||||
|
||||
你可以通过关闭 **应用搜索** 按钮来彻底禁用 GNOME Shell 中的应用内搜索。
|
||||
|
||||
![在概览中禁用搜索][25]
|
||||
|
||||
在这种情况下,只有应用程序可以进行搜索,搜索结果会被隐藏。
|
||||
|
||||
![应用内搜索被禁用状态][26]
|
||||
|
||||
### 额外技巧:扩展插件增强搜索效能
|
||||
|
||||
有一些 GNOME 扩展件可以使你的搜索更便捷、有效。
|
||||
|
||||
#### 快速网络搜索
|
||||
|
||||
这是一个名为 “Quick Web Search” 的扩展,它会为 DuckDuckGo 提供一个搜索选项。每当我们在 GNOME shell 搜索中输入一些词汇时,DuckDuckGo 的图标就会出现。单击它,将在你的首选浏览器中打开搜索结果。
|
||||
|
||||
![Shell 中的 DuckDuckGo 搜索][27]
|
||||
|
||||
即使所有的浏览器实例都已关闭,这个功能也可以正常工作。此外,你可以通过扩展设置将搜索提供器更改为谷歌或其他选项。
|
||||
|
||||
> **[获取 Quick Web Search 扩展][28]**
|
||||
|
||||
#### GNOME 模糊应用搜寻
|
||||
|
||||
此扩展为 GNOME 搜索提供了模糊应用搜寻结果。因此,即便你输错或拼错了某些名字,它都会尽力为你找到匹配的结果。
|
||||
|
||||
![使用模糊搜索的 GNOME 搜索][29]
|
||||
|
||||
> **[获取 GNOME 模糊应用搜索][30]**
|
||||
|
||||
### 充分利用 GNOME
|
||||
|
||||
如你所见,你可能从未充分地利用过所有的 GNOME 搜索特性,或者可能未曾对其给予足够的关注。
|
||||
|
||||
🗨 期望你能喜欢这些技巧。欢迎在评论区留下你的建议。
|
||||
|
||||
*(题图:MJ/81a823e0-ed00-4988-a0a8-47c88e4ed188)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/gnome-search/
|
||||
|
||||
作者:[Sreenath][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/sreenath/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/nautilus-file-search/
|
||||
[2]: https://itsfoss.com/content/images/2023/08/click-on-activities.png
|
||||
[3]: https://itsfoss.com/content/images/2023/08/GNOME-Search-interface.png
|
||||
[4]: https://itsfoss.com/content/images/2023/08/installed-apps-in-search.png
|
||||
[5]: https://itsfoss.com/content/images/2023/08/file-search.png
|
||||
[6]: https://itsfoss.com/content/images/2023/08/file-manager-icon-highlighted.png
|
||||
[7]: https://itsfoss.com/content/images/2023/08/nautilus-file-manager-in-search-mode.png
|
||||
[8]: https://itsfoss.com/content/images/2023/08/characters-in-search-overview.png
|
||||
[9]: https://itsfoss.com/content/images/2023/08/character-copied-to-clipboard-message.png
|
||||
[10]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[11]: https://itsfoss.com/content/images/2023/08/get-math-result.png
|
||||
[12]: https://itsfoss.com/content/images/2023/08/get-time.png
|
||||
[13]: https://itsfoss.com/content/images/2023/08/get-terminal.png
|
||||
[14]: https://itsfoss.com/content/images/2023/08/firefox-as-a-search-provider-in-settings.png
|
||||
[15]: https://itsfoss.com/content/images/2023/08/firefox-search.png
|
||||
[16]: https://itsfoss.com/content/images/2023/08/GNOME-Web-in-search-settings.png
|
||||
[17]: https://itsfoss.com/content/images/2023/08/gnome-web-results-in-search.png
|
||||
[18]: https://itsfoss.com/content/images/2023/08/search-tab-in-settings.png
|
||||
[19]: https://itsfoss.com/content/images/2023/08/button-to-arrage-items.png
|
||||
[20]: https://itsfoss.com/content/images/2023/08/arrage-order-in-searches.gif
|
||||
[21]: https://itsfoss.com/content/images/2023/08/move-up-and-down.gif
|
||||
[22]: https://itsfoss.com/content/images/2023/08/search-locations.png
|
||||
[23]: https://itsfoss.com/content/images/2023/08/Add-remove-locations.png
|
||||
[24]: https://itsfoss.com/content/images/2023/08/enable-disable-toggle-button.png
|
||||
[25]: https://itsfoss.com/content/images/2023/08/Disable-search-rsults.png
|
||||
[26]: https://itsfoss.com/content/images/2023/08/no-in-app-searches.png
|
||||
[27]: https://itsfoss.com/content/images/2023/08/ddg-web-search-plugin.png
|
||||
[28]: https://extensions.gnome.org/extension/6051/quick-web-search/?ref=itsfoss.com
|
||||
[29]: https://itsfoss.com/content/images/2023/08/no-result-in-misspell.png
|
||||
[30]: https://extensions.gnome.org/extension/3956/gnome-fuzzy-app-search/?ref=itsfoss.com
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/10/224338y0d7dgqlez0e0nmz.jpg
|
||||
173
published/202310/20230829 Create Live Linux Mint USB.md
Normal file
173
published/202310/20230829 Create Live Linux Mint USB.md
Normal file
@@ -0,0 +1,173 @@
|
||||
[#]: subject: "Create Live Linux Mint USB"
|
||||
[#]: via: "https://itsfoss.com/linux-mint-live-usb/"
|
||||
[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972"
|
||||
[#]: translator: "GenshinMinecraft"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16255-1.html"
|
||||
|
||||
如何制作一个 Linux Mint 立付 USB
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 按照本指南,在 Windows 和 Linux 上用 Linux Mint 轻松创建立付 USB。
|
||||
|
||||
Linux Mint 是 [初学者的最佳 Linux 发行版选择][1] 之一。它基于 Ubuntu ,但有些人认为 [Linux Mint 比 Ubunutu 更好][2]。
|
||||
|
||||
如果你想尝试使用 Linux Mint,你可以 [在 VirtualBox 内安装 Linux Mint][3]。 这是体验 Linux Mint 的方法之一。
|
||||
|
||||
另一种方法是创建 Linux Mint 的 <ruby>立付<rt>Live</rt></ruby> USB。这样,你就可以从 USB 启动,在实时会话中体验 Linux Mint。它不会干扰你当前的操作系统,无论是 Windows 还是 Linux。
|
||||
|
||||
> LCTT 译注:关于我们将 “Live” 翻译为 “立付” 的原因,请参照 [此文](https://linux.cn/article-15496-1.html) 说明。简单概括:
|
||||
>
|
||||
> Live 原意多指“现场”、“实时”,在计算机环境中使用时也多引用此意。但对它的翻译就颇费神,因为无论是在 Live Patch,还是更多见的 Live USB/CD、Live Session,其实都不好翻译为“现场”、“实时”。推荐使用“立付”,在照顾发音的同时,取其“立时交付”之意。而对于 Live Stream,提议者建议依旧翻译为“直播”、“实时流”。对于 Live Patch,还是采用 “热补丁” 这样的意译。
|
||||
|
||||
如果你喜欢它并选择安装至硬盘上,可以使用同一个立付 USB 来进行。创建立付 USB 是安装 Linux Mint 的第一步。
|
||||
|
||||
### 准备工作
|
||||
|
||||
如果需要制作一个 Linux Mint 立付 USB,你需要:
|
||||
|
||||
* 一个 **USB 驱动器**(可以是 U 盘、移动硬盘等),至少需要 8GB 的空间;
|
||||
* 一个可以使用的互联网连接,以便下载 Linux Mint ISO;
|
||||
* 一个帮助你制作立付 USB 的写盘工具。
|
||||
|
||||
> 💡 你可以在一个系统上创建立付 USB,然后在其他电脑上使用。
|
||||
|
||||
### 第一步:下载 Linux Mint ISO
|
||||
|
||||
这一 ISO 文件是包含 Linux Mint 系统的镜像文件,它将会被写入至 USB 驱动器上。
|
||||
|
||||
Linux Mint 有三种 [桌面环境][4] 版本:**Cinnamon** 旗舰版本、**MATE** 以及 **XFCE** 的变体。
|
||||
|
||||
![][5]
|
||||
|
||||
这些 ISO 文件包括了你可以找到 [最佳的桌面环境][6]。**Cinnamon** 是最流行的版本,建议选择它以获得最佳的 Linux Mint 体验,但你也可以尝试其他版本。
|
||||
|
||||
不管你选择的是什么版本,ISO 文件的大小都约为 **2.7GB**。
|
||||
|
||||
你可以前往 [官方下载页面][7] 获取上述的 ISO 文件。你可以选择直接下载或使用 Torrent 种子文件下载。
|
||||
|
||||
> **[Linux Mint 下载][7]**
|
||||
|
||||
获得 ISO 文件后,你需要一个专用工具将 ISO 映像写入到 USB 驱动器上。我推荐使用 Etcher。
|
||||
|
||||
> 📋 有些人喜欢对下载的 ISO 文件 [进行完整性校验][8]。这是一种确保 ISO 文件在下载过程中不会损坏的方法(可能会因为网络不稳定等因素而损坏)。
|
||||
|
||||
### 第二步:安装 Etcher 以制作立付 USB
|
||||
|
||||
对于 Windows 用户来说,Rufus 是一款出色的工具。可惜 Linux 用户无法使用。
|
||||
|
||||
为了让本教程简洁明了,我将使用 [Etcher][9]。它是 [Rufus 的替代品][10],可用于 Linux 与 Windows。
|
||||
|
||||
这样,你就可以在 Windows 和 Linux 平台上使用相同的步骤创建 Linux Mint 立付 USB。唯一不同的是安装 Etcher 的步骤。
|
||||
|
||||
#### Windows 教程
|
||||
|
||||
从 [官方网站][11] 下载 Etcher。建议你下载完整的安装程序,除非你真的需要便携式文件。
|
||||
|
||||
![][12]
|
||||
|
||||
你会找到一个 **.exe** 文件。只需要**双击**安装程序,然后同意说明条款并按照窗口内的步骤进行安装即可。
|
||||
|
||||
然后,你可以从搜索菜单中搜索并启动该程序。
|
||||
|
||||
![][13]
|
||||
|
||||
#### Linux 教程
|
||||
|
||||
对于 Linux 用户来说,可以从 [官网][11] 下载 Etcher 的 AppImage 可执行文件。
|
||||
|
||||
你可以参考我们的 [AppImage 指南][14],了解如何将文件作为可执行文件运行。
|
||||
|
||||
![][15]
|
||||
|
||||
使用 AppImage 文件,你不需要 [安装 Etcher][9],而是在直接运行它。
|
||||
|
||||
### 第三步:使用 Etcher 将 Linux Mint ISO 写入到 USB 驱动器
|
||||
|
||||
**插入 USB 驱动器**,并运行上一步安装的 Etcher 工具。
|
||||
|
||||
现在,考虑到你已经下载了 Linux Mint ISO,点击 “<ruby>从文件烧录<rt>Flash from file</rt></ruby>” 选项,如下图所示。
|
||||
|
||||
![][16]
|
||||
|
||||
然后使用文件管理器选择 Linux Mint 的 ISO 文件。
|
||||
|
||||
![][17]
|
||||
|
||||
选择 ISO 文件后,需要选择要将要刷入的 USB 驱动器。如果只有一个,Etcher 会自动选择。但仍要确保在 Etcher 中选择了正确的 USB 驱动器。
|
||||
|
||||
![][18]
|
||||
|
||||
现在,你只需点击 “<ruby>现在烧录<rt>Flash</rt></ruby>”,等待程序完成。
|
||||
|
||||
![][19]
|
||||
|
||||
你将收到接受命令行进程的提示,并选择 “Yes” 以启动刷入进程。
|
||||
|
||||
![][20]
|
||||
|
||||
完成后,它将自动验证刷入的 USB 驱动器是否完整,然后你就可以开始了!
|
||||
|
||||
### 第四步:从 USB 驱动器启动
|
||||
|
||||
你通过上述方法所制作的 Linux Mint 立付 USB 驱动器应适用于任何具有 UEFI 启动功能的计算机。
|
||||
|
||||
当系统启动并显示制造商徽标时,按 `F2` 或 `F10` 或 `F12` 键,即可访问 [UEFI 启动设置][21]
|
||||
|
||||
访问启动设置后,将启动顺序更改为先从 USB 驱动器启动。
|
||||
|
||||
不同的电脑有不同的 BIOS 设置,因此我无法分享此步骤的明确截图。
|
||||
|
||||
> 💡 在极少数情况下,安全启动可能不允许启动。这时可以禁用安全启动。
|
||||
|
||||
### 接下来怎么办?
|
||||
|
||||
如果你喜欢立付环境下的 Linux Mint,可以使用立付 USB 删除 Windows 来安装 Mint。
|
||||
|
||||
或者,你也可以选择 [Linux Mint 和 Windows 双系统共存][23] ,在同一台电脑中同时运行两个操作系统。
|
||||
|
||||
💬 我希望本教程对你创建 Linux Mint 立付 USB 有帮助。请在评论区告诉我你的问题和建议。
|
||||
|
||||
*(题图:MJ/a7bdf228-4928-4171-9250-58ce1ba7545c)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/linux-mint-live-usb/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[GenshinMinecraft](https://github.com/GenshinMinecraft)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/best-linux-beginners/
|
||||
[2]: https://itsfoss.com/linux-mint-vs-ubuntu/
|
||||
[3]: https://itsfoss.com/install-linux-mint-in-virtualbox/
|
||||
[4]: https://itsfoss.com/what-is-desktop-environment/
|
||||
[5]: https://itsfoss.com/content/images/2023/08/linux-mint-download-page.jpg
|
||||
[6]: https://itsfoss.com/best-linux-desktop-environments/
|
||||
[7]: https://www.linuxmint.com/download.php
|
||||
[8]: https://itsfoss.com/checksum-tools-guide-linux/
|
||||
[9]: https://itsfoss.com/install-etcher-linux/
|
||||
[10]: https://itsfoss.com/live-usb-creator-linux/
|
||||
[11]: https://etcher.balena.io/#download-etcher
|
||||
[12]: https://itsfoss.com/content/images/2023/08/balena-etcher-windows-download.jpg
|
||||
[13]: https://itsfoss.com/content/images/2023/08/balena-etcher-launch.jpg
|
||||
[14]: https://itsfoss.com/use-appimage-linux/
|
||||
[15]: https://itsfoss.com/content/images/2023/08/balena-etcher-appimage.png
|
||||
[16]: https://itsfoss.com/content/images/2023/08/etcher-flash-from-file.jpg
|
||||
[17]: https://itsfoss.com/content/images/2023/08/balena-iso-selection-windows.jpg
|
||||
[18]: https://itsfoss.com/content/images/2023/08/balena-etcher-device-select.jpg
|
||||
[19]: https://itsfoss.com/content/images/2023/08/balenaEtcher-flash-windows.png
|
||||
[20]: https://itsfoss.com/content/images/2023/08/balenaEtcher-flashing.png
|
||||
[21]: https://itsfoss.com/access-uefi-settings-windows-10/
|
||||
[22]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[23]: https://itsfoss.com/guide-install-linux-mint-16-dual-boot-windows/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/05/140006qoqq9jupkczt8vgu.jpg
|
||||
@@ -0,0 +1,143 @@
|
||||
[#]: subject: "Fixing Cannot add PPA: ''This PPA does not support jammy'' Error"
|
||||
[#]: via: "https://itsfoss.com/cannot-add-ppa-error/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16246-1.html"
|
||||
|
||||
修复无法添加 PPA:“This PPA does not support jammy” 错误
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 尝试添加一个 PPA,却在 Ubuntu 中收到 “无法添加 PPA: 此 PPA 不支持 xyz” 的错误?下面是解决这一错误的方法。
|
||||
|
||||
这是一个场景。你正在尝试使用 PPA 在 Ubuntu 中安装软件。
|
||||
|
||||
你使用 `sudo add-apt-repository` 添加 PPA 仓库,当它更新包缓存时,会出现错误:
|
||||
|
||||
> Cannot add PPA: "This PPA does not support *xyz*
|
||||
|
||||
其中 “xyz” 是 [你正在使用的 Ubuntu 版本的代号][1]。
|
||||
|
||||
📋 这就是发生这种情况的原因以及你可以采取的措施:
|
||||
|
||||
- PPA 不适用于你正在使用的 Ubuntu 版本
|
||||
- 你应该寻找其他来源来安装该应用
|
||||
- 如果绝望了,你可以从 PPA 网页下载 .deb 文件
|
||||
|
||||
我将详细讨论以上所有内容。
|
||||
|
||||
### 检查 PPA 是否适用于你的 Ubuntu 版本
|
||||
|
||||
首先,在终端中使用以下命令获取 Ubuntu 版本和代号的详细信息:
|
||||
|
||||
````
|
||||
lsb_release -a
|
||||
````
|
||||
|
||||
输出将包含详细信息:
|
||||
|
||||
![Here, I am using Ubuntu version 23.04 that case codename lunar][2]
|
||||
|
||||
现在,访问托管所有 PPA 的 Ubuntu 的 Launchpad 网站:
|
||||
|
||||
> **[进入 Launchpad PPA][3]**
|
||||
|
||||
在这里,查找困扰你的 PPA。为此,你必须使用 PPA 维护者的名字。
|
||||
|
||||
例如,如果 `ppa:jstaf/onedriver` 造成问题,请搜索维护者 `jstaf`。
|
||||
|
||||
![Enter the PPA's maintainer name and search for it][4]
|
||||
|
||||
一名维护者可能拥有多个软件仓库。单击你要安装的那个。
|
||||
|
||||
在里,你应该在 “<ruby>发布于<rt>Published in</rt></ruby>” 旁边的下拉按钮选择 “<ruby>所有系列<rt>Any Series</rt></ruby>”。
|
||||
|
||||
![Click on Any series dropdown button to see the supported Ubuntu versions][5]
|
||||
|
||||
检查你是否看到你正在使用的 Ubuntu 版本的代号。如果不存在,那么此 PPA 不适用于你的 Ubuntu 版本。
|
||||
|
||||
### 如果 PPA 不支持你的 Ubuntu 版本,你该怎么办
|
||||
|
||||
你会看到,开发人员(或维护人员)创建一个仓库并使该软件可用于他们正在使用的 Ubuntu 版本。
|
||||
|
||||
随着时间的推移,Ubuntu 发布了更新的版本。现在,一位活跃的维护者将发布新 Ubuntu 版本的软件。但情况并非总是如此。如果维护者不再活跃,那么将不会更新。像你这样尝试遵循教程说明的人将会看到此错误。
|
||||
|
||||
现在,你有两个选择:
|
||||
|
||||
#### 选项 1:在其他地方寻找该软件
|
||||
|
||||
这里有几种可能性。
|
||||
|
||||
**新版 Ubuntu 可能也可以通过其他 PPA 获得相同的软件。请在 Launchpad 网站或互联网上查找。**
|
||||
|
||||
这是怎么发生的?许多原始软件开发人员只是发布源代码,因此一些志愿者创建 Debian 软件包并从 Launchpad 分发它,以便像你这样的 Ubuntu 用户可以轻松安装该软件。不止一名志愿者可以为同一软件创建自己的个人包存档(PPA)。你应该使用活跃的一个。
|
||||
|
||||
例如,如果我查找 `onedriver` 包,我可以看到它可能在另一个名为 [Ubuntu deployment][6] 的 PPA 中可用。
|
||||
|
||||
![][7]
|
||||
|
||||
**另一个方式是查看该包是否以其他格式提供,例如 Snap、Flatpak、AppImage。**
|
||||
|
||||
* [检查 Snap 商店][8]
|
||||
* [检查 Flatpak 包][9]
|
||||
* [检查 AppImages][10]
|
||||
|
||||
在极少数情况下,该软件可能已经在 Ubuntu 仓库中可用。
|
||||
|
||||
为此,你必须是一个聪明的用户并在互联网上进行搜索。如果你找到其他包格式,那就太好了。否则,下一步就是绝望。
|
||||
|
||||
#### 选项 2:从 PPA 下载 deb 文件
|
||||
|
||||
PPA 仓库为你提供 Debian 软件包。添加仓库后,你还可以直接通过系统更新获得更新(如果有)。
|
||||
|
||||
如果你的 Ubuntu 版本的 PPA 没有更新,并且你在其他地方找不到该软件,你可以尝试从 PPA Launchpad 页面下载 deb 软件包。
|
||||
|
||||
![][11]
|
||||
|
||||
在包详细信息页面上,单击展开符号并查找 deb 文件。除非你使用类似树莓派的主板,否则你应该选择 amd64。
|
||||
|
||||
![Download deb package from PPA][12]
|
||||
|
||||
> 🚧 如果软件太旧,下载的 deb 包可能会因为依赖问题而无法安装成功。此外,你将不会获得已安装软件包的更新(如果已安装)。不过,这个方法还是值得一试。
|
||||
|
||||
### 结论
|
||||
|
||||
尽管 Canonical 在大力推动 Snap 打包,PPA 仍然是用户在 Ubuntu 中安装第三方应用的最爱。
|
||||
|
||||
但 PPA 也有其自身的麻烦,而不能添加 PPA 错误就是其中之一。同样的问题还会导致 “[仓库没有发布文件][13]” 错误。
|
||||
|
||||
我希望现在这个问题更加清楚了。如果你仍有疑问,请告诉我。
|
||||
|
||||
*(题图:MJ/d1013502-d518-4bc8-896c-d8dddd15ae22)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/cannot-add-ppa-error/
|
||||
|
||||
作者:[Abhishek Prakash][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://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/how-to-know-ubuntu-unity-version/
|
||||
[2]: https://itsfoss.com/content/images/2023/09/ubuntu-version-details.png
|
||||
[3]: https://launchpad.net/ubuntu/+ppas
|
||||
[4]: https://itsfoss.com/content/images/2023/09/search-for-ppa-launchpad.png
|
||||
[5]: https://itsfoss.com/content/images/2023/09/check-ppa-supported-version.png
|
||||
[6]: https://launchpad.net/~remiariro/+archive/ubuntu/misc
|
||||
[7]: https://itsfoss.com/content/images/2023/09/search-ppa.png
|
||||
[8]: https://snapcraft.io/store
|
||||
[9]: https://flathub.org/
|
||||
[10]: https://www.appimagehub.com/
|
||||
[11]: https://itsfoss.com/content/images/2023/09/ppa-package-details.png
|
||||
[12]: https://itsfoss.com/content/images/2023/09/download-deb-from-ppa.png
|
||||
[13]: https://itsfoss.com/repository-does-not-have-release-file-error-ubuntu/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/02/112157nf11fpwhwa4u1hvf.jpg
|
||||
@@ -0,0 +1,82 @@
|
||||
[#]: subject: "Share your game achievements with Gamerzilla"
|
||||
[#]: via: "https://fedoramagazine.org/share-your-game-achievements-with-gamerzilla/"
|
||||
[#]: author: "Dennis Payne https://fedoramagazine.org/author/dulsi/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16264-1.html"
|
||||
|
||||
使用 Gamerzilla 分享你的游戏成就
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
Gamerzilla 是一个开源游戏成就系统,用于存储和共享你的游戏成就。游戏使用 libgamerzilla 轻松添加成就。Gamerzilla 库是用 C 编写的,但也有其他语言的绑定。
|
||||
|
||||
两年前,我描述了如何设置 [Gamerzilla 服务器][4]。除了 .net 实现之外,还可以使用 php 和 python 实现。但你可能不想运行自己的服务器。这里介绍一个公共服务器和 Gnome 界面。
|
||||
|
||||
### 公共服务器
|
||||
|
||||
我的网络服务器现在托管了一个启用了公共注册的 [Gamerzilla][5] 实例。要创建帐户,请单击右上角的 “<ruby>签到<rt>Sign In</rt></ruby>” 链接。然后单击 “<ruby>登录<rt>Login</rt></ruby>” 按钮旁边的 “<ruby>注册<rt>Register</rt></ruby>” 链接。
|
||||
|
||||
用户帐户收集的信息非常少。只需输入用户名和密码。你不需要输入你的真实姓名或电子邮件地址。因此,忘记密码没有实现。
|
||||
|
||||
账户一开始是不可见的。如果你希望公众在登录后看到你的成就,请单击页面右上角你的用户名,然后选择 “<ruby>设为可见<rt>Make Visible</rt></ruby>”。新用户必须经过批准才能上传成就。目前没有显示你是否获得批准的指示。
|
||||
|
||||
### 获得成就
|
||||
|
||||
在获得第一个成就之前,你需要使用以下命令安装 Gamerzilla GNOME Shell 扩展:
|
||||
|
||||
````
|
||||
sudo dnf install gnome-shell-extension
|
||||
````
|
||||
|
||||
安装后,你需要注销并重新登录。需要使用以下命令启用扩展:
|
||||
|
||||
````
|
||||
gnome-extensions enable gamerzilla@gamerzilla.identicalsoftware.com
|
||||
````
|
||||
|
||||
游戏控制器图标出现在 GNOME Shell 的顶部栏中。
|
||||
|
||||
单击控制器图标并选择 “<ruby>首选项<rt>preferences</rt></ruby>”。在出现的屏幕上输入你的 Gamerzilla 网址,包括尾部斜杠,但不包含 UI 的“奖杯”地址。如果使用我的服务器,该值将为 `https://identicalsoftware.com/`。填写你的用户名和密码。单击保存。默认情况下启用自动连接。如果你不想始终连接,请禁用此功能。
|
||||
|
||||
![Gamerzilla Controller menu][6]
|
||||
|
||||
不幸的是,一个错误阻止了该 Shell 扩展立即工作。你需要注销并重新登录。解决这个问题是当务之急。
|
||||
|
||||
### 目前支持的游戏
|
||||
|
||||
Fedora 仓库中的多个游戏支持 Gamerzilla 成就。如果你想买一个来尝试一下,我建议试试 Shippy 1984、Seahorse Adventures 或 Anagramarama。一旦你完成一个级别,Seahorse Adventures 就会存储一些进度。如果你玩 Super Tux Kart,你可能已经取得了成就。只需启动游戏即可同步之前完成的任何成就。当成就完成时,Gamerzilla 不会显示任何通知,但游戏可能会自行实现。
|
||||
|
||||
### 更进一步
|
||||
|
||||
除了修复第一次连接的错误之外,我还想要一个本地浏览器来查看成就。这样你就可以查看所有游戏成就,而无需强制上传它们。
|
||||
|
||||
成就确实有消极的一面。有些人觉得有必要完成它们。如果成就非常困难,这可能会导致负面的游戏体验。我理解这种担忧,但有些人也喜欢这些方面。更重要的是,为了吸引和留住玩家,我觉得开源游戏需要一个游戏成就系统。
|
||||
|
||||
我们需要更多游戏来实现 Gamerzilla 成就。我们需要玩家表现出对这个系统的支持。我继续为我的游戏和我尝试的其他开源游戏添加成就。
|
||||
|
||||
*(题图:MJ/32ae3f54-b319-4db7-b874-eeacd1dcc4d2)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://fedoramagazine.org/share-your-game-achievements-with-gamerzilla/
|
||||
|
||||
作者:[Dennis Payne][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/dulsi/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://fedoramagazine.org/wp-content/uploads/2023/09/gamerzilla_achievenments-816x345.jpg
|
||||
[2]: https://unsplash.com/@mparzuchowski?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
||||
[3]: https://unsplash.com/photos/geNNFqfvw48?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText
|
||||
[4]: https://linux.cn/article-15389-1.html
|
||||
[5]: https://identicalsoftware.com/trophy/
|
||||
[6]: https://fedoramagazine.org/wp-content/uploads/2023/09/gamerzilla_preferences.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/08/191724uj7mmjw9ccd7pcl9.jpg
|
||||
@@ -0,0 +1,108 @@
|
||||
[#]: subject: "There's One More Reason to Use Mozilla Firefox Now!"
|
||||
[#]: via: "https://news.itsfoss.com/mozilla-firefox-progress/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16249-1.html"
|
||||
|
||||
现在,使用 Mozilla Firefox 的理由又增加了一条!
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Firefox 正在不断取得进展,让我们一起看看最新的变化吧!
|
||||
|
||||
Mozilla Firefox 是一款极棒的开源多平台浏览器,一直以来都以提供最佳的隐私保护功能而广受好评。
|
||||
|
||||
更值得一提的是,它成为了大多数 Linux 发行版的默认浏览器,使得它成为了 Linux 用户的自然之选。
|
||||
|
||||
### Firefox 当前的状况
|
||||
|
||||
尽管 Firefox 一直以隐私优先的策略,并且是 [谷歌 Chrome 的最佳开源替代品][1] 之一,它仍然被大众所冷落。
|
||||
|
||||
这听起来令人失望,不是吗?
|
||||
|
||||
的确是的,就以市场份额来说,谷歌 Chrome 占据了 **63.56%**,而 Firefox 用户仅占据了 **2.94%** —— 这是来自 [StatCounter][2] 的统计数据。
|
||||
|
||||
![][3]
|
||||
|
||||
为什么会这样?
|
||||
|
||||
详细来说,你可以回顾一下 [Firefox 在 2021 年几乎损失了 5000 万用户][4]。
|
||||
|
||||
简而言之:**Mozilla Firefox 已经尽其所能,但似乎仍然不足以吸引公众的注意**。
|
||||
|
||||
### Firefox 的用户体验在不断改善
|
||||
|
||||
幸运的是,在过去的两年中,Mozilla Firefox 似乎专注于一步步提升用户体验,并比平常更多地向公众展示自己。
|
||||
|
||||
例如,他们正在为 Firefox 117 提供 [自动翻译功能支持][6]。
|
||||
|
||||
总的来说,最近的更新已经简化了用户界面,并为 [我为什么总是会回到 Firefox][7] 提供了更多理由。
|
||||
|
||||
当然,Firefox 已经提供了 [Firefox Relay][8]([保护你电子邮箱的工具][9] 之一)等隐私特性。但是,并非每个用户都在乎那些改善了安全性的底层优化。
|
||||
|
||||
许多用户希望能够通过网页浏览器无缝的使用他们喜爱的网络服务。**这无疑是用户体验的核心部分。**
|
||||
|
||||
Mozilla Firefox 就是一款能提供这一体验的强大且安全的浏览器。
|
||||
|
||||
如果浏览器能满足网民使用他们**最喜欢或是主流服务**的体验需求,那么 Firefox 就能保留旗下用户,甚至吸引更多新用户。
|
||||
|
||||
### 谷歌的网络服务在 Firefox 上运行得比以前更好了
|
||||
|
||||
好消息是:**Mozilla 正在全力以赴做出改变!**
|
||||
|
||||
在最近的 [博客文章][10] 中,他们宣布,**谷歌 Meet 以及其他谷歌服务如 Workspace、Voice、YouTube、Keep、地图、翻译以及相册** 在 Firefox 上运行得比以往任何时候都要好。
|
||||
|
||||
![][11]
|
||||
|
||||
他们为此与谷歌的 Workspace 团队一直保持着紧密的合作,他们这样写道:
|
||||
|
||||
> 如果你正在考虑切换,但担心兼容性问题,你可以放心 —— 谷歌的服务在 Firefox 上工作得相当出色,我们也在不断的努力满足你的日新月异的需求。
|
||||
|
||||
他们还分享了谷歌 Meet 在 Firefox 上改善后的一些使用体验截图。现在,只需使用 Firefox 115 和更高版本,你就可以在加入视频通话前后应用视效(或背景)。
|
||||
|
||||
![][12]
|
||||
|
||||
许多网络用户都一直在使用谷歌的服务,如果他们在 Firefox 上的用户体验也很棒,那么 Firefox 就可能成为一个适合他们替代 Chrome 的选择。
|
||||
|
||||
**所以,谷歌的网络服务在 Firefox 上的体验得到了改进?**
|
||||
|
||||
**这又是一个使用 Firefox 的理由。**
|
||||
|
||||
我认为,Mozilla 为了与谷歌 Chrome 及其他竞方保持竞争力,并增强用户对流行网络服务的网络体验,这么做是明智之举。
|
||||
|
||||
💬 你现在正在使用 Firefox 吗?在读了这篇文章后,你决定再试一次吗?在下方留言分享你的想法吧!
|
||||
|
||||
*(题图:MJ/7427a77e-ed67-4ac4-bc8a-bb9794c34adc)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/mozilla-firefox-progress/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/open-source-browsers-linux/
|
||||
[2]: https://gs.statcounter.com/browser-market-share
|
||||
[3]: https://news.itsfoss.com/content/images/2023/09/browser-stat-.png
|
||||
[4]: https://linux.cn/article-13642-1.html
|
||||
[5]: https://news.itsfoss.com/content/images/2023/04/Follow-us-on-Google-News.png
|
||||
[6]: https://news.itsfoss.com/firefox-117-release/
|
||||
[7]: https://news.itsfoss.com/why-mozilla-firefox/
|
||||
[8]: https://relay.firefox.com/
|
||||
[9]: https://itsfoss.com/protect-email-address/
|
||||
[10]: https://blog.mozilla.org/en/products/firefox/google-meet-firefox/
|
||||
[11]: https://news.itsfoss.com/content/images/2023/09/firefox-screenshot.png
|
||||
[12]: https://news.itsfoss.com/content/images/2023/09/google-meet-screenshot.jpg
|
||||
[13]: https://news.itsfoss.com/assets/images/Certs-and-Bundles-1536x864.webp
|
||||
[14]: https://itsfoss.click/latest-lf-offer
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/03/001913b1hfcfsl34ylcc6h.jpg
|
||||
@@ -0,0 +1,85 @@
|
||||
[#]: subject: "Wolfi: The Linux Un(distro) Improving Cloud Software Supply Chain Turns One!"
|
||||
[#]: via: "https://news.itsfoss.com/wolfi-turns-one/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16261-1.html"
|
||||
|
||||
Wolfi:改进云软件供应链的 Linux “非”发行版
|
||||
=====
|
||||
|
||||
![][0]
|
||||
|
||||
> Wolfi,这个有趣的项目致力于增强软件供应链的安全性,现已走过一载岁月!
|
||||
|
||||
这里说的不是 [世界上最小的章鱼][1],而是一款从这个小章鱼那里汲取灵感的 Linux 发行版。
|
||||
|
||||
Wolfi 是一个**由社区驱动、以容器为核心的 Linux 发行版**,目的在于保护软件供应链的安全性。创造者([Chainguard][2])将其誉为 “**非发行版**”。
|
||||
|
||||
Wolfi 的目标是解决构建和分发软件时经常遇到的容器问题。
|
||||
|
||||
下面我们一起来回顾下 Wolfi 的历程,以及未来的展望。
|
||||
|
||||
### Wolfi:项目的成就 🐙
|
||||
|
||||
自从 Wolfi [去年][5] 开始启动,它已经取得了长足的进步,例如 **在 Wolfi 的仓库中具有超过 1300 个包配置** ,并且在 Wolfi 的索引中拥有 **超过 18000 的软件包**。
|
||||
|
||||
**有 60 名贡献者**参与了这个项目 ,在过去的一年中, **超过 4400 个拉取请求已经成功地合并了** 到 Wolfi 在 [GitHub][6] 上的仓库中。
|
||||
|
||||
此外,他们还保证了 80% 的时间内, 在 GitHub 项目中的 **软件包更新间隔少于 24 小时** ,并且还添加了如 [Docker Scout][7] 、[Snyk][8] 、[Wiz][9] 等漏洞扫描工具。
|
||||
|
||||
由于 Wolfi 采用了 [滚动发布][10] 模式,因此它还致力于为新发现的 [CVE][11] 快速提供修复。
|
||||
|
||||
综上,这些成就使得他们在以下方面实现了技术创新:
|
||||
|
||||
* 为所有 Wolfi 软件包构建了 64 位 ARM 版本。
|
||||
* 对 Go 和 Java 实现了全源引导。
|
||||
* 引入了 [Rustls][12] TLS 库,用于处理内存安全漏洞。
|
||||
* 分发了一个名称为 “[wolfi-act][13]” 的新项目,让 Wolfi 包能在 GitHub 操作中动态使用。
|
||||
|
||||
你可能会好奇:**未来的计划是什么?**
|
||||
|
||||
好吧,Wolfi 的开发团队希望它能发展成为一个**由社区驱动的项目**,并有望成为人们最信赖的容器化工作负载发行版。他们还期望 **广大开发者都能充分利用 Wolfi 的全部潜力,解决各种问题**。
|
||||
|
||||
此外,他们还分享了一个 Wolfi 的使用案例:
|
||||
|
||||
> 在当前应用中,Wolfi 的一个清晰的示例是 [Chainguard Images][14] —— 这正是我们开始构建该项目的原因。Chainguard Images 只是 Wolfi 实现的许多解决方案之一,我们鼓励更多的用户和社区去探寻 Wolfi 所能搭建出的可能性。
|
||||
|
||||
根据他们的新闻发布,他们还提到,在不久的将来 **将为 Rust 和其他语言生态系统加入全源引导**。
|
||||
|
||||
💬 你是否有过用 Wolfi 的经验?你对它的体验是如何的?
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/wolfi-turns-one/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://en.wikipedia.org/wiki/Octopus_wolfi
|
||||
[2]: https://www.chainguard.dev/
|
||||
[3]: https://news.itsfoss.com/content/images/size/w256h256/2022/08/android-chrome-192x192.png
|
||||
[4]: https://news.itsfoss.com/content/images/2023/09/Wolfi.png
|
||||
[5]: https://news.itsfoss.com/wolfi-linux-undistro/
|
||||
[6]: https://github.com/wolfi-dev
|
||||
[7]: https://docs.docker.com/scout/
|
||||
[8]: https://snyk.io/
|
||||
[9]: https://www.wiz.io/
|
||||
[10]: https://itsfoss.com/rolling-release/
|
||||
[11]: https://en.wikipedia.org/wiki/Common_Vulnerabilities_and_Exposures
|
||||
[12]: https://github.com/rustls/rustls
|
||||
[13]: https://github.com/wolfi-dev/wolfi-act
|
||||
[14]: https://www.chainguard.dev/chainguard-images
|
||||
[15]: https://news.itsfoss.com/assets/images/Certs-and-Bundles-1536x864.webp
|
||||
[16]: https://itsfoss.click/latest-lf-offer
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/07/192722wdzz199535h4c983.jpg
|
||||
@@ -0,0 +1,61 @@
|
||||
[#]: subject: "Richard Stallman is Battling Cancer 😔"
|
||||
[#]: via: "https://news.itsfoss.com/richard-stallman-battling-cancer/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16244-1.html"
|
||||
|
||||
Richard Stallman 正在与癌症作战
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 让我们共同祈愿他早日康复!
|
||||
|
||||
为了纪念 GNU 项目成立 40 周年,自由软件基金会(FSF)已计划在 **10 月 1 日**(即GNU 40)为家庭、学生以及美国的其他人群组织一场黑客马拉松活动。
|
||||
|
||||
活动之前,GNU 项目于 9 月 27 日迎来了 40 岁生日,Richard Stallman 和一些社区成员在瑞士<ruby>比尔<rt>Biel</rt></ruby>举行了 <ruby>GNU 黑客会议<rt>GNU Hacker's Meeting</rt></ruby>。
|
||||
|
||||
在会议上,他分享了自己的见解,并公开了自己正在与癌症作战的事实。
|
||||
|
||||
在主题演讲中,我们看到 **Richard Stallman 已经没有他标志性的长胡子和长发,外貌发生了变化**。他正在接受化疗以对抗癌症,这就能解释这一切。
|
||||
|
||||
![Richard Stallman 在 GNU 黑客会议上(比尔,瑞士) | 源自:GNU.org][1]
|
||||
|
||||
他对自己的健康状况并没有多做说明,只是说病情是可以控制的,他仍能活很多年。
|
||||
|
||||
他特别强调:
|
||||
|
||||
> 因此,这一点基本上改变了我的生活方式……我仍在为自由软件基金会和其他的事业持续工作。
|
||||
|
||||
### Richard Matthew Stallman(RMS):愿你早日康复!
|
||||
|
||||
Richard Stallman 是一位计算机科学家,他在 **1983 年 9 月 27 日**公布了名为 **GNU**(GNU's Not Unix)的类 Unix 操作系统。
|
||||
|
||||
因此,如果没有它,Linux 就无从谈起。这也是为何有些人更倾向于用 GNU/Linux 来称呼 Linux 的原因。
|
||||
|
||||
值得一提的是,他还创立了 <ruby>自由软件运动<rt>Free Software Movement</rt></ruby>,这是如今开源实践的基石。
|
||||
|
||||
当然,他在许多事情上都表达了富有争议性的观点,但他在 Linux 和开源上的影响是巨大的!
|
||||
|
||||
毫无疑问,得知 Richard 患癌的消息令人难过。然而,尽管面临这样的困境,他以 70 岁的高龄仍然兴致勃勃地出现在了主题演讲中,并发表了演讲。
|
||||
|
||||
让我们祝愿 Richard 早日恢复!💐
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/richard-stallman-battling-cancer/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/content/images/2023/09/richard-stallman-gnu-40.jpg
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/01/163837j5enqwi9a2h6v22e.jpg
|
||||
@@ -0,0 +1,119 @@
|
||||
[#]: subject: "Wow! Raspberry Pi 5 Already Sounds Like a Tinkerer's Favorite! 🤩"
|
||||
[#]: via: "https://news.itsfoss.com/raspberry-pi-5/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16247-1.html"
|
||||
|
||||
哇!树莓派 5 看起来成为动手爱好者的新宠了!
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 对于热爱动手实践的你来说,树莓派 5 已经落地,为你绚烂的想法提供热情的舞台!
|
||||
|
||||
单板计算机(SBC)领域因树莓派新产品的推出再次活跃起来。
|
||||
|
||||
这款被称为 **树莓派 5** 的新产品,是其非常受欢迎的前身树莓派 4(于 2019 年推出)的进化版。
|
||||
|
||||
下面,我们来探讨它的新鲜亮点,以及何时何地可以将其买到手。
|
||||
|
||||
### 🆕 树莓派 5 的新变化是什么?
|
||||
|
||||
**树莓派 5 是一款足以称得上强大的后继产品**,其全新设计的平台搭载了在英国开发的**自行设计的芯片**。
|
||||
|
||||
与树莓派 4 比较,**树莓派 5 的性能提升了一倍以上** ,这主要得益于硬件和软件的改进。他们还补充说:
|
||||
|
||||
> 与树莓派 4 相较,我们的 CPU 和 GPU 性能提高了两到三倍,在内存和 I/O 带宽方面也有大约两倍的增长;而且这是我们首次在旗舰树莓派设备上使用了自家的树莓派芯片。
|
||||
|
||||
尽管外形并无明显改变,树莓派 5 **仍然保留了信用卡大小的尺寸**。变化主要体现在端口的位置上。
|
||||
|
||||
为了配合这款 SBC 的发布,树莓派团队积极开发了适合的新版本树莓派操作系统。它**基于 [Debian 12 “Bookworm”][1] 版本**,所以你可以期待有很多改进。
|
||||
|
||||
这个更新的操作系统预计将在 **2023 年 10 月中旬** 发布,将过渡到 [Wayfire][2] Wayland 合成器系统,**摒弃了 X11**。
|
||||
|
||||
### 📝 树莓派 5 的关键参数
|
||||
|
||||
![][4]
|
||||
|
||||
那么,你可能对树莓派 5 的硬件配置感到好奇。
|
||||
|
||||
首先,树莓派 5 是**由 Broadcom 的一款新型 16 纳米应用处理器 BCM2712 驱动**的。
|
||||
|
||||
它使用了一颗 **四核 64 位 Arm Cortex-A76 处理器**,在标准运行状态下的频率为 **2.4 GHz**,拥有 **每核 512 KB 的 L2 缓存** 和一个 **2 MB 的共享 L3 缓存**。
|
||||
|
||||
这一切都融入了一款新的 GPU 中,那就是 Broadcom 的 **VideoCore VII**。它配备了**完全开源的 Mesa 驱动程序**。
|
||||
|
||||
还有新的 **RP1 I/O 控制器**,它**负责操作各种 I/O 端口**,如 **USB 2.0/3.0**
|
||||
、**千兆以太网**、**MIPI 收发器** 和 **常见的 GPIO 端口**。
|
||||
|
||||
> 项目 RP1 自 2016 年启动以来,已经投资了 1500 万美元。 🤯
|
||||
|
||||
最后,我们看到了新的 **DA9091 电源管理 IC**,出自 [Renesas][5],它**负责处理主板上的电源分配**,带有 **8 个单独的开关模式电源供应器**,以生成树莓派 5 所需的不同电压。
|
||||
|
||||
此外,以下是其他一些值得一提的要点:
|
||||
|
||||
* 独立电源按钮
|
||||
* 双频 802.11ac Wi-Fi
|
||||
* 可选 4 GB / 8 GB 内存版本
|
||||
* 2x 4Kp60 HDMI 显示输出
|
||||
* 2x 4-通道 MIPI 摄像头 / 显示器收发器
|
||||
* 蓝牙 5.0 / 低功耗蓝牙(BLE)
|
||||
|
||||
树莓派 5 看上去是一款能助你创建出比当前的 [树莓派项目][6] 更棒的新项目的设备。
|
||||
|
||||
### 树莓派 5 配件 🦾
|
||||
|
||||
![树莓派 5 官方配件外壳][7]
|
||||
|
||||
一如既往,树莓派 5 与各种官方配件一同发布。
|
||||
|
||||
以**带有集成风扇的外壳**为例,设计精良,适用于低噪声和长期使用。
|
||||
|
||||
还有一种叫做 **主动冷却器** 的冷却配件,它配有一个铝质热散片和可以安装在主板上的风扇。
|
||||
|
||||
由于**峰值功率需求的增加**,他们也提供了**一款 27 W 的 USB-C 电源适配器**,以便动手玩家们可以最大限度地使用他们的树莓派 5。
|
||||
|
||||
我在这里没有提到的还有一些额外的 [树莓派配件][9],如显示线缆、m.2 连接帽等等。我相信在不久的将来会看到更多的配件。
|
||||
|
||||
我强烈建议你浏览官方的 [公告博客][10] ,进一步了解这款有趣的单板计算机的详细信息。
|
||||
|
||||
### 💰 价格和供应信息
|
||||
|
||||
树莓派 5 提供**两款版本** ,价格从**4 GB 版本的 60 美元**开始,**8 GB 版本为 80 美元**。
|
||||
|
||||
目前已经在一些 [认证的经销商][11] 开始接受预订,预计将在十月末出货。
|
||||
|
||||
> **[树莓派 5(认证的经销商)][11]**
|
||||
|
||||
他们被**限制只能销售给个人购买者**,这个限制将持续到今年(2023 年)结束,以避免任何供应链方面的问题。
|
||||
|
||||
*(题图:MJ/12b9c1e0-414e-42f8-a61b-466dad831eef)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/raspberry-pi-5/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/debian-12-release/
|
||||
[2]: https://wayfire.org/
|
||||
[3]: https://news.itsfoss.com/content/images/2023/04/Follow-us-on-Google-News.png
|
||||
[4]: https://news.itsfoss.com/content/images/2023/09/R_Pi5_1.jpg
|
||||
[5]: https://www.renesas.com/us/en
|
||||
[6]: https://itsfoss.com/raspberry-pi-projects/
|
||||
[7]: https://news.itsfoss.com/content/images/2023/09/R_Pi5_2.jpg
|
||||
[8]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[9]: https://itsfoss.com/raspberry-pi-accessories/
|
||||
[10]: https://www.raspberrypi.com/news/introducing-raspberry-pi-5/
|
||||
[11]: https://www.raspberrypi.com/resellers/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/02/125833qdxbb2vgd0x7ccx4.jpg
|
||||
@@ -0,0 +1,126 @@
|
||||
[#]: subject: "Mission Center: A Sleek System Monitoring App for Linux"
|
||||
[#]: via: "https://news.itsfoss.com/mission-center/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16257-1.html"
|
||||
|
||||
任务中心:一款流畅的 Linux 系统监控应用
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 这是一款为 Linux 打造的用户友好的系统监控应用。让我们一起来了解!
|
||||
|
||||
假如有一天,你发现你的系统开始运行缓慢,你的发行版的默认的系统监控应用又无法给与帮助,你会如何处理?
|
||||
|
||||
我能理解当你在试图找出是什么进程引起你的系统运行缓慢,而系统监控器却无法提供帮助是何等烦恼的事。
|
||||
|
||||
在此,我初步介绍的这个工具,或许就是你需要的。这就是 “<ruby>任务中心<rt>Mission Center</rt></ruby>”,一个为 Linux 打造的系统监控器,旨在提供实用的功能。
|
||||
|
||||
下文将一一展示这个应用可以做什么,以及它的一些限制。
|
||||
|
||||
> 🚧 这个应用还是非常新的,处于积极的开发中。所以,预计会有一些变动。
|
||||
|
||||
### ⭐ 任务中心:概述
|
||||
|
||||
![][1]
|
||||
|
||||
主要使用 **内存安全的 Rust 编程语言** 编写的 [任务中心][2] 是一款可以让你监控 CPU、内存、磁盘、网络以及 GPU 的系统监控器。
|
||||
|
||||
它的几个关键特性包括:
|
||||
|
||||
* 实时监控每个线程的 CPU 使用情况。
|
||||
* 有能力监控 RAM 和 Swap 的使用状况。
|
||||
* 提供应用和进程的详细使用信息。
|
||||
* 监控网络的利用率和传输速度。
|
||||
|
||||
### 👨💻 初步印象
|
||||
|
||||
我在一个运行着 **[Ubuntu 22.04][4] LTS** 的系统上进行了测试,由于这款应用 **提供了 Flatpak 安装方式**,使得整个安装过程相当简洁。
|
||||
|
||||
我不得不说,任务中心 **看起来和** [Windows 11][5] **上的任务管理器大体相似**,这并不算是坏事。这种界面布局十分适合以用户友好的方式展示所有重要的信息。
|
||||
|
||||
我首先查看的是系统监控的 “<ruby>性能<rt>Performance</rt></ruby>” 部分中的 CPU 标签。它向我提供了我处理器的所有关键信息,并配有一个能**展示实时 CPU 使用率的图表**。
|
||||
|
||||
我还能切换到 “<ruby>逻辑处理器<rt>logical processors</rt></ruby>” 视图,以便**观察每个线程的 CPU 使用情况**。只需在图表上进行右键点击并进入 “<ruby>改变视图<rt>Change Graph To</rt></ruby>” 菜单即可切换。
|
||||
|
||||
![][6]
|
||||
|
||||
我接下来查看的是 “<ruby>内存<rt>Memory</rt></ruby>” 标签,它提供了**一个内存使用的实时图表**,以及两个正在使用的 RAM 模块的实用信息。
|
||||
|
||||
![][7]
|
||||
|
||||
然后我查看了 “<ruby>硬盘<rt>Disk</rt></ruby>” 标签。即便我在我的系统中有多个存储硬盘,但我只在 Ubuntu 上使用了 “Disk 4”。我对其进行了使用率检查,显示出来的似乎是实时的磁盘使用数据。
|
||||
|
||||
不过,[据开发者所述][8],当前**硬盘使用率的百分比仍在开发中**,因此,现在的数据可能尚不准确。
|
||||
|
||||
![][9]
|
||||
|
||||
最后,我查看了 “<ruby>以太网<rt>Ethernet</rt></ruby>” 标签。它向你展示了有关系统的网络活动的实时图表,包括了下载和上传活动的两个信息点。
|
||||
|
||||
然而,它对于应用的网络数据使用情况,目前还是**没有应用级的网络数据信息**。这个功能,开发者正 [在着手开发][10]。
|
||||
|
||||
![][12]
|
||||
|
||||
接下来,我查看了 “<ruby>应用<rt>Apps</rt></ruby>” 部分。这里包含了系统中运行的大部分(甚至全部)应用和进程。它不有展示了应用/进程的全部有用信息,包括 PID、CPU 使用、内存和磁盘使用情况。
|
||||
|
||||
你还能在任何一个应用/进程上进行右键点击,来选择 **停止应用/进程** 或 **强制停止应用/进程**。
|
||||
|
||||
![][13]
|
||||
|
||||
我还调整了任务中心应用的一些设置,比如:
|
||||
|
||||
* 调整所有实时图表的更新频率
|
||||
* 设定合并进程统计数据
|
||||
* 记住我在 “<ruby>应用<rt>Apps</rt></ruby>” 部分所使用的排序顺序。
|
||||
|
||||
![][14]
|
||||
|
||||
我注意到一个缺失的数据,关于我的 GPU。任务中心**未能检测到我的英伟达 GPU**。
|
||||
|
||||
这是可以理解的,因为 **GPU 的支持目前仍然处于实验阶段**,仅支持 AMD 和英伟达的 GPU。
|
||||
|
||||
### 📥 获取任务中心
|
||||
|
||||
任务中心可以在 [Flathub 商店][15] 或者 [GitLab][16] 上获得,如果你更倾向于从源码来构建的话。
|
||||
|
||||
> **[任务中心(Flathub)][15]**
|
||||
|
||||
💬 你会考虑用任务中心来替代你 Linux 系统上的默认系统监控器吗?
|
||||
|
||||
*(题图:MJ/feb84cdf-0719-401a-9c4a-1db7960d4572)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/mission-center/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/content/images/2023/09/Mission_Center_1.png
|
||||
[2]: https://missioncenter.io/
|
||||
[3]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[4]: https://news.itsfoss.com/ubuntu-22-04-release/
|
||||
[5]: https://www.microsoft.com/en-us/windows?wa=wsignin1.0
|
||||
[6]: https://news.itsfoss.com/content/images/2023/09/Mission_Center_2.png
|
||||
[7]: https://news.itsfoss.com/content/images/2023/09/Mission_Center_3.png
|
||||
[8]: https://gitlab.com/mission-center-devs/mission-center/-/issues/2
|
||||
[9]: https://news.itsfoss.com/content/images/2023/09/Mission_Center_4.png
|
||||
[10]: https://gitlab.com/mission-center-devs/mission-center/-/issues/3
|
||||
[11]: https://news.itsfoss.com/content/images/2023/04/Follow-us-on-Google-News.png
|
||||
[12]: https://news.itsfoss.com/content/images/2023/09/Mission_Center_5-1.png
|
||||
[13]: https://news.itsfoss.com/content/images/2023/09/Mission_Center_6.png
|
||||
[14]: https://news.itsfoss.com/content/images/2023/09/Mission_Center_7.png
|
||||
[15]: https://flathub.org/apps/io.missioncenter.MissionCenter
|
||||
[16]: https://gitlab.com/mission-center-devs/mission-center
|
||||
[17]: https://news.itsfoss.com/tag/first-look/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/05/180653pnz0nkta1lc1tclz.jpg
|
||||
@@ -0,0 +1,677 @@
|
||||
[#]: subject: "A Guide to Compiling the Linux Kernel All By Yourself"
|
||||
[#]: via: "https://itsfoss.com/compile-linux-kernel/"
|
||||
[#]: author: "Pratham Patel https://itsfoss.com/author/pratham/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16252-1.html"
|
||||
|
||||
Linux 内核动手编译实用指南
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 一份让你深入体验最新 Linux 内核编译过程的实操指南。
|
||||
|
||||
出于各种原因,自行编译 Linux 内核可能引起你的兴趣。这些原因可能包括但不限于:
|
||||
|
||||
* 测试一个比你目前的 Linux 发行版更新的内核版本
|
||||
* 采用一组不同的配置选项、驱动来构建内核
|
||||
* 学习者的好奇心 :)
|
||||
|
||||
此指南将一步步指导你如何亲自编译 Linux 内核,包括你该运行哪些命令,为什么运行这些命令以及这些命令的执行效果。本文篇幅较长,所以请做好准备!
|
||||
|
||||
> 🚧 诸如 [Ubuntu 这样的发行版提供了更简单地安装主线 Linux 内核的方式][1]。但本教程目标是从源码手动完成所有工作。**此教程需要你付出时间、耐心以及丰富的 Linux 命令行使用经验**。本文更注重亲身实践的体验。不管怎么说,我仍建议你在虚拟机或备用系统中尝试此冒险,而非在你的主系统上进行。
|
||||
|
||||
### 前置准备
|
||||
|
||||
在软件领域,构建任何事物都有两个基本要求:
|
||||
|
||||
1. 源代码
|
||||
2. 构建依赖
|
||||
|
||||
因此,作为预备环节,我们需要下载 Linux 内核的源码压缩包,并安装一些能让我们成功构建 Linux 内核的依赖项。
|
||||
|
||||
#### Linux 版本导览
|
||||
|
||||
在任何时刻,[~~Freax~~][2] Linux 内核都有四种“版本”。
|
||||
|
||||
Linux 的这些 “版本”,按照开发流程的顺序是:
|
||||
|
||||
1. **linux-next 树:** 所有准备合并到 Linux 代码库的代码首先被合并到 linux-next 树。它代表的是 Linux 内核最新也是“最不稳定”的状态。大多数 Linux 内核开发者和测试人员使用这个来提高代码质量,为 Linus Torvalds 的后续提取做准备。**请谨慎使用!**
|
||||
2. **发布候选版(RC) / 主线版:** Linus 从 linux-next 树抽取代码并创建一个初始发布版本。这个初始发布版本的测试版称为 RC(<ruby>发布候选<rt>Release Candidate</rt></ruby>)版本。一旦 RC 版本发布,Linus 只会接受对它的错误修复和性能退化相关的补丁。基础这些反馈,Linus 会每周发布一个 RC 内核,直到他对代码感到满意。RC 发行版本的标识是 `-rc` 后缀,后面跟一个数字。
|
||||
3. **稳定版:** 当 Linus 觉得最新的 RC 版本已稳定时,他会发布最终的“公开”版本。稳定发布版将会维护几周时间。像 Arch Linux 和 Fedora Linux 这样的前沿 Linux 发行版会使用此类版本。**我建议你在试用 linux-next 或任何 RC 版本之前,先试一试此版本。**
|
||||
4. **LTS 版本:** 每年最后一个稳定版将会再维护 [几年][3]。这通常是一个较旧的版本,但它会 **会积极地维护并提供安全修复**。Debian 的稳定版本会使用 Linux 内核的 LTS 版版本。
|
||||
|
||||
若想了解更多此方面的知识,可参阅 [官方文档][4]。
|
||||
|
||||
本文将以当前可用的最新稳定版为例,编写此文时的 Linux 内核版本是 [6.5.5][5]。
|
||||
|
||||
### 系统准备
|
||||
|
||||
由于 Linux 内核使用 C 语言编写,编译 Linux 内核至少需要一个 C 编译器。你的计算机上可能还需要其他一些依赖项,现在是安装它们的时候了。
|
||||
|
||||
> 💡 这个指南主要聚焦于使用 GNU C 编译器(GCC)来编译 Linux 内核。但在未来的文章中(可能会深入介绍 Rust 的支持),我**可能**会介绍使用 LLVM 的 Clang 编译器作为 GCC 的替代品。
|
||||
>
|
||||
> 不过,请注意,MSVC 并不适用。尽管如此,我仍期待有微软的员工为此发送修补程序集。我在瞎想啥?
|
||||
|
||||
对于 Arch Linux 以及其衍生版本的用户,安装命令如下:
|
||||
|
||||
```
|
||||
sudo pacman -S base-devel bc coreutils cpio gettext initramfs kmod libelf ncurses pahole perl python rsync tar xz
|
||||
```
|
||||
|
||||
对于 Debian 以及其衍生版本的用户,安装命令如下:
|
||||
|
||||
```
|
||||
sudo apt install bc binutils bison dwarves flex gcc git gnupg2 gzip libelf-dev libncurses5-dev libssl-dev make openssl pahole perl-base rsync tar xz-utils
|
||||
```
|
||||
|
||||
对于 Fedora 以及其衍生版本的用户,安装命令如下:
|
||||
|
||||
```
|
||||
sudo dnf install binutils ncurses-devel \
|
||||
/usr/include/{libelf.h,openssl/pkcs7.h} \
|
||||
/usr/bin/{bc,bison,flex,gcc,git,gpg2,gzip,make,openssl,pahole,perl,rsync,tar,xz,zstd}
|
||||
```
|
||||
|
||||
#### 下载 Linux 内核源码
|
||||
|
||||
请访问 [kernel.org][6],在页面中寻找第一个 <ruby>稳定<rt>Stable</rt></ruby> 版本。你不会找不到它,因为它是最显眼的黄色方框哦 ;)
|
||||
|
||||
> **[点击访问 kernel.org][6]**
|
||||
|
||||
![][7]
|
||||
|
||||
通过点击黄色的方框,你就可以下载 Tar 文件。同时,也别忘了下载相匹配的 PGP 签名文件,稍后我们需要用到它来验证 Tar 文件。它的扩展名为 `.tar.sign`。
|
||||
|
||||
##### 校验 Tar 文件的完整性
|
||||
|
||||
你如何知道刚下载的 Tar 文件是否被损坏?对于个人来说,一个损坏的 Tar 文件只会浪费你的宝贵时间,如果你是在为一个组织工作,那么可能会危及到组织的安全(这时你可能还有更大的问题需要担忧,但我们并不想让所有人都产生创伤后应激障碍!)。
|
||||
|
||||
为了验证我们的 Tar 文件的完整性,我们需要先解压它。目前,它是使用 XZ 压缩算法压缩的。因此,我将使用 `unxz` 工具(其实就是 `xz --decompress` 的别名)来解压 `.tar.xz` 格式的压缩文件。
|
||||
|
||||
```
|
||||
unxz --keep linux-*.tar.xz
|
||||
```
|
||||
|
||||
解压完成后,我们需要获取 Linus Torvalds 和 Greg KH 使用的 GPG 公开密钥。这些密钥用于对 Tar 文件进行签名。
|
||||
|
||||
```
|
||||
gpg2 --locate-keys torvalds@kernel.org gregkh@kernel.org
|
||||
```
|
||||
|
||||
你应该可以得到一个与我在我的电脑上看到的类似的结果:
|
||||
|
||||
```
|
||||
$ gpg2 --locate-keys torvalds@kernel.org gregkh@kernel.org
|
||||
gpg: /home/pratham/.gnupg/trustdb.gpg: trustdb created
|
||||
gpg: key 38DBBDC86092693E: public key "Greg Kroah-Hartman <gregkh@kernel.org>" imported
|
||||
gpg: Total number processed: 1
|
||||
gpg: imported: 1
|
||||
gpg: key 79BE3E4300411886: public key "Linus Torvalds <torvalds@kernel.org>" imported
|
||||
gpg: Total number processed: 1
|
||||
gpg: imported: 1
|
||||
pub rsa4096 2011-09-23 [SC]
|
||||
647F28654894E3BD457199BE38DBBDC86092693E
|
||||
uid [ unknown] Greg Kroah-Hartman <gregkh@kernel.org>
|
||||
sub rsa4096 2011-09-23 [E]
|
||||
|
||||
pub rsa2048 2011-09-20 [SC]
|
||||
ABAF11C65A2970B130ABE3C479BE3E4300411886
|
||||
uid [ unknown] Linus Torvalds <torvalds@kernel.org>
|
||||
sub rsa2048 2011-09-20 [E]
|
||||
```
|
||||
|
||||
在导入 Greg 和 Linus 的密钥后,我们可以使用 `--verify` 标志来验证 Tar 的完整性,操作如下:
|
||||
|
||||
```
|
||||
gpg2 --verify linux-*.tar.sign
|
||||
```
|
||||
|
||||
如果验证成功,你应该会看到如下的输出信息:
|
||||
|
||||
```
|
||||
$ gpg2 --verify linux-*.tar.sign
|
||||
gpg: assuming signed data in 'linux-6.5.5.tar'
|
||||
gpg: Signature made Saturday 23 September 2023 02:46:13 PM IST
|
||||
gpg: using RSA key 647F28654894E3BD457199BE38DBBDC86092693E
|
||||
gpg: Good signature from "Greg Kroah-Hartman <gregkh@kernel.org>" [unknown]
|
||||
gpg: WARNING: This key is not certified with a trusted signature!
|
||||
gpg: There is no indication that the signature belongs to the owner.
|
||||
Primary key fingerprint: 647F 2865 4894 E3BD 4571 99BE 38DB BDC8 6092 693E
|
||||
```
|
||||
|
||||
**务必查看是否存在 `gpg: Good signature` 的提示,然后再继续!**
|
||||
|
||||
> 💡 你可以忽略以下警告:`WARNING: This key is not certified with a trusted signature! There is no indication that the signature belongs to the owner.`。
|
||||
>
|
||||
> 我们已根据 Linus 和 Greg 的邮件地址获取了公开密钥,并无需对此警告感到担忧。
|
||||
|
||||
##### 解压 Tar 文件
|
||||
|
||||
如果你顺利的进行到这里,意味着你的 Tar 文件完整性检查已经成功完成。接下来,我们将从 Tar 文件中解压出 Linux 内核的源码。
|
||||
|
||||
![The "TAR" xkcd comic: https://xkcd.com/1168/][8]
|
||||
|
||||
这个步骤十分简单,只需对 Tar 文件执行 `tar -xf` 命令,如下:
|
||||
|
||||
```
|
||||
tar -xf linux-*.tar
|
||||
```
|
||||
|
||||
在这里,`-x` 选项表示解压,`-f` 选项则用来告诉 Tar 文件的文件名。
|
||||
|
||||
这个解压过程可能需要几分钟时间,你可以先放松,耐心等待一下。
|
||||
|
||||
### 配置 Linux 内核
|
||||
|
||||
Linux 内核的构建过程会查找 `.config` 文件。顾名思义,这是一个配置文件,用于指定 Linux 内核的所有可能的配置选项。这是必需的文件。
|
||||
|
||||
获取 Linux 内核的 `.config` 文件有两种方式:
|
||||
|
||||
1. 使用你的 Linux 发行版的配置作为基础(**推荐做法**)
|
||||
2. 使用默认的,通用的配置
|
||||
|
||||
> 💡 也有第三种方法,也就是从零开始,手动配置每一个选项,但注意,这需要配置超过 12,000 个选项。并不推荐这种方式,因为手动配置所有选项将花费大量的时间,并且你还需要理解每个启用和禁用选项的含义。
|
||||
|
||||
#### 使用发行版提供的配置
|
||||
|
||||
**使用你的 Linux 发行版提供的配置是一个安全的选择。** 如果你只是跟随这个指南测试一个不是你的发行版提供的新内核,那么这就是推荐的方式。
|
||||
|
||||
你的 Linux 发行版的 Linux 内核配置文件会在以下两个位置之一:
|
||||
|
||||
* 大多数 Linux 发行版,如 Debian 和 Fedora 及其衍生版,将会把它存在 `/boot/config-$(uname -r)`。
|
||||
* 一些 Linux 发行版,比如 Arch Linux 将它整合在了 Linux 内核中。所以,可以在 `/proc/config.gz` 找到。
|
||||
|
||||
> 💡 如果两者都有,建议使用 `/proc/config.gz`。这是因为它在只读文件系统中,所以是未被篡改的。
|
||||
|
||||
进入含有已经解压出的 Tar 文件的目录。
|
||||
|
||||
```
|
||||
cd linux-*/
|
||||
```
|
||||
|
||||
接着,复制你的 Linux 发行版的配置文件:
|
||||
|
||||
```
|
||||
### Debian 和 Fedora 及其衍生版:
|
||||
$ cp /boot/config-"$(uname -r)" .config
|
||||
|
||||
### Arch Linux 及其衍生版:
|
||||
$ zcat /proc/config.gz > .config
|
||||
```
|
||||
|
||||
##### 更新配置文件
|
||||
|
||||
一旦完成这些步骤,接下来就需要“更新”配置文件了。因为你的发行版提供的配置很可能比你正在构建的 Linux 内核版本要旧。
|
||||
|
||||
> 💡 **这同样适用于像 Arch Linux 和 Fedora 这样前沿的 Linux 发行版。** 它们并不会因为有新版本可用就立刻发布更新。他们会进行一些质量控制工作,这必然会花费些时间。因此,即便是你的发行版提供的最新内核,相较于你在 kernel.org 上获取的版本也会滞后几个小版本。
|
||||
|
||||
要更新一个已有的 `.config` 文件,我们使用 `make` 命令搭配 `olddefconfig` 参数。简单解释一下,这个命令的意思是使用 _旧的、默认的、配置_。
|
||||
|
||||
这将使用“旧的配置文件”(当前保存为 `.config`,这是你发行版配置的一份直接副本),并检查从上一版本以来 Linux 代码库中新加的任何配置选项。如果找到任何新的、_未配置_ 的选项,该选项的默认配置值会被使用,并会对 `.config` 文件进行更新。
|
||||
|
||||
原来的 `.config` 文件将被重命名为 `.config.old` 进行备份,并将新的更改写入至 `.config` 文件。
|
||||
|
||||
```
|
||||
make olddefconfig
|
||||
```
|
||||
|
||||
以下是我机器上的输出:
|
||||
|
||||
```
|
||||
$ file .config
|
||||
.config: Linux make config build file, ASCII text
|
||||
|
||||
$ make olddefconfig
|
||||
HOSTCC scripts/basic/fixdep
|
||||
HOSTCC scripts/kconfig/conf.o
|
||||
HOSTCC scripts/kconfig/confdata.o
|
||||
HOSTCC scripts/kconfig/expr.o
|
||||
LEX scripts/kconfig/lexer.lex.c
|
||||
YACC scripts/kconfig/parser.tab.[ch]
|
||||
HOSTCC scripts/kconfig/lexer.lex.o
|
||||
HOSTCC scripts/kconfig/menu.o
|
||||
HOSTCC scripts/kconfig/parser.tab.o
|
||||
HOSTCC scripts/kconfig/preprocess.o
|
||||
HOSTCC scripts/kconfig/symbol.o
|
||||
HOSTCC scripts/kconfig/util.o
|
||||
HOSTLD scripts/kconfig/conf
|
||||
.config:8593:warning: symbol value 'm' invalid for USB_FOTG210_HCD
|
||||
.config:8859:warning: symbol value 'm' invalid for USB_FOTG210_UDC
|
||||
#
|
||||
# configuration written to .config
|
||||
#
|
||||
```
|
||||
|
||||
##### 针对 Debian 及其衍生版用户
|
||||
|
||||
Debian 及其衍生版为内核模块使用一个签名证书。默认情况下,你的计算机并不包含这个证书。
|
||||
|
||||
我推荐关闭启用模块签名的选项。具体如下所示:
|
||||
|
||||
```
|
||||
./scripts/config --file .config --set-str SYSTEM_TRUSTED_KEYS ''
|
||||
./scripts/config --file .config --set-str SYSTEM_REVOCATION_KEYS ''
|
||||
```
|
||||
|
||||
**如果你不这么做,在后面你进行 Linux 内核构建时,可能会导致构建失败。要注意这点。**
|
||||
|
||||
#### 使用自定义配置
|
||||
|
||||
如果你出于学习内核开发的目的学习如何构建 Linux 内核,那你应该这样做。
|
||||
|
||||
> 🚧 **请注意,偏离你的 Linux 发行版的配置可能无法在实体硬件上“正常”工作。** 问题可能是特定硬件无法工作、Linux 内核无法启动等。
|
||||
>
|
||||
> 因此,我们只建议在虚拟机中使用。
|
||||
|
||||
你可以通过查看 [make help 的输出][9] 来查看 _所有_ 可用的选项,但我们主要关注三个 `make` 目标:
|
||||
|
||||
* `defconfig`: 默认配置。
|
||||
* `allmodconfig`: 根据当前系统状态,尽可能地把项目构建为可加载模块(而非内建)。
|
||||
* `tinyconfig`: 极简的 Linux 内核。
|
||||
|
||||
由于 `tinyconfig` 目标只会构建少数项目,构建时间将会缩短。我个人选择它的原因主要有:
|
||||
|
||||
1. 检查我在代码/工具链中做的修改是否正确,以及代码是否可以编译。
|
||||
2. 在虚拟机中只进行少数选项的测试。
|
||||
|
||||
> 🚧 在为 ARM 或 RISC-V 机器构建 Linux 内核时,你可能需要 DTB(设备树的二进制文件)。**使用 `tinyconfig` 目标将不会启用构建 DTB 的选项,你的内核很可能无法启动。**
|
||||
>
|
||||
> 当然,你可以用 QEMU 在没有任何 DTB 的情况下启动 Linux 内核。但这篇文章并不会聚焦在此。或许你可以通过评论,让我在之后的时间里覆盖这个话题 ;)
|
||||
|
||||
**除非你确切地知道自己在做什么,否则你应当使用 `defconfig` 目标。** 以下是我在我的电脑上运行的效果:
|
||||
|
||||
```
|
||||
$ make defconfig
|
||||
HOSTCC scripts/basic/fixdep
|
||||
HOSTCC scripts/kconfig/conf.o
|
||||
HOSTCC scripts/kconfig/confdata.o
|
||||
HOSTCC scripts/kconfig/expr.o
|
||||
LEX scripts/kconfig/lexer.lex.c
|
||||
YACC scripts/kconfig/parser.tab.[ch]
|
||||
HOSTCC scripts/kconfig/lexer.lex.o
|
||||
HOSTCC scripts/kconfig/menu.o
|
||||
HOSTCC scripts/kconfig/parser.tab.o
|
||||
HOSTCC scripts/kconfig/preprocess.o
|
||||
HOSTCC scripts/kconfig/symbol.o
|
||||
HOSTCC scripts/kconfig/util.o
|
||||
HOSTLD scripts/kconfig/conf
|
||||
*** Default configuration is based on 'defconfig'
|
||||
#
|
||||
# configuration written to .config
|
||||
#
|
||||
```
|
||||
|
||||
#### 修改配置
|
||||
|
||||
无论你是使用 Linux 发行版的配置并更新它,还是使用 `defconfig` 目标创建新的 `.config` 文件,你都可能希望熟悉如何修改这个配置文件。**最可靠的修改方式是使用 `menuconfig` 或 `nconfig` 目标。**
|
||||
|
||||
这两个目标的功能是相同的,只不过提供给你的界面有所不同。这是这两者间唯一的区别。我个人更偏向于使用 `menuconfig` 目标,但近来我发现 `nconfig` 在搜索选项时似乎更具直观性,所以我逐渐转向使用它。
|
||||
|
||||
首先,带着 `menuconfig` 目标运行 `make` 命令:
|
||||
|
||||
```
|
||||
$ make menuconfig
|
||||
HOSTCC scripts/kconfig/mconf.o
|
||||
HOSTCC scripts/kconfig/lxdialog/checklist.o
|
||||
HOSTCC scripts/kconfig/lxdialog/inputbox.o
|
||||
HOSTCC scripts/kconfig/lxdialog/menubox.o
|
||||
HOSTCC scripts/kconfig/lxdialog/textbox.o
|
||||
HOSTCC scripts/kconfig/lxdialog/util.o
|
||||
HOSTCC scripts/kconfig/lxdialog/yesno.o
|
||||
HOSTLD scripts/kconfig/mconf
|
||||
```
|
||||
|
||||
在此界面,你可以根据各选项的类型来进行切换操作。
|
||||
|
||||
有两类可切换选项:
|
||||
|
||||
* 布尔状态选项:这类选项只能关闭(`[ ]`)或作为内建组件开启(`[*]`)。
|
||||
* 三态选项:这类选项可以关闭(`< >`)、内建(`<*>`),或作为可加载模块(`<M>`)进行构建。
|
||||
|
||||
想要了解更多关于某个选项的信息,使用上/下箭头键导航至该选项,然后按 `<TAB>` 键,直至底部的 `< Help >` 选项被选中,然后按回车键进行选择。此时就会显示关于该配置选项的帮助信息。
|
||||
|
||||
**在修改选项时请务必谨慎。**
|
||||
|
||||
当你满意配置后,按 `<TAB>` 键直到底部的 `< Save >` 选项被选中。然后按回车键进行选择。然后再次按回车键(**记住,此时不要更改文件名**),就能将更新后的配置保存到 `.config` 文件中。
|
||||
|
||||
### 构建 Linux 内核
|
||||
|
||||
构建 Linux 内核实际上十分简单。然而,在开始构建之前,让我们为自定义内核构建添加一个标签。我将使用字符串 `-pratham` 作为标签,并利用 `LOCALVERSION` 变量来实施。你可以使用以下命令实现配置:
|
||||
|
||||
```
|
||||
./scripts/config --file .config --set-str LOCALVERSION "-pratham"
|
||||
```
|
||||
|
||||
这一命令将 `.config` 文件中的 `CONFIG_LOCALVERSION` 配置选项设为我在结尾指定的字符串,即 `-pratham`。当然,你也不必非得使用我所用的名字哦 ;)
|
||||
|
||||
`LOCALVERSION` 选项可用于设置一个“本地”版本,它会被附加到通常的 `x.y.z` 版本方案之后,并在你运行 `uname -r` 命令时一并显示。
|
||||
|
||||
由于我正在构建的是 6.5.5 版本内核,而 `LOCALVERSION` 字符串被设为 `-pratham`,因此,对我来说,最后的版本名将会是 `6.5.5-pratham`。这么做的目的是确保我所构建的自定义内核不会与发行版所提供的内核产生冲突。
|
||||
|
||||
接下来,我们来真正地构建内核。可以用以下的命令完成此步骤:
|
||||
|
||||
```
|
||||
make -j$(nproc) 2>&1 | tee log
|
||||
```
|
||||
|
||||
**这对大部分(99%)用户来说已经足够了。**
|
||||
|
||||
其中的 `-j` 选项用于指定并行编译任务的数量。而 `nproc` 命令用于返回可用处理单位(包括线程)的数量。因此,`-j$(nproc)` 其实意味着“使用我拥有的 CPU 线程数相同数量的并行编译任务”。
|
||||
|
||||
`2>&1` 会将 STDOUT 和 STDIN 重定向到相同的文件描述符,并通过管道传输给 `tee` 命令,这会将输出存储在一个名为 `log` 的文件,并且在控制台打印出完全相同的文本。如果你在构建时遇到错误,并希望回顾日志来检查出了什么问题,这将会十分有用。遇到那种情况,你只需要简单执行 `grep Error log` 命令就能找到线索。
|
||||
|
||||
#### 自定义 make 目标
|
||||
|
||||
在 Linux 内核的源文件夹中,`make` 命令有一些自定义的目标可供执行各种操作。这些主要作为开发者的参考。如果你的唯一目标是安装一个比你当前发行版更新的 Linux 内核,那么你完全可以跳过这部分内容 ;)
|
||||
|
||||
##### 构建目标
|
||||
|
||||
作为一名开发者,你可能只想构建 Linux 内核,或者只想构建模块,或者只想构建设备树二进制(DTB)。在这种情况下,你可以指定一个构建目标,然后 `make` 命令只会构建指定的项目,而不会构建其他的。
|
||||
|
||||
以下是一些构建目标:
|
||||
|
||||
* `vmlinux`:纯粹的 Linux 内核。
|
||||
* `modules`:可加载模块。
|
||||
* `dtbs`:设备树二进制文件(主要用于 ARM 和 RISC-V 架构)。
|
||||
* `all`:构建所有被标记了星号 `*` 的项目(从 `make help` 的输出中可以查看)。
|
||||
|
||||
通常情况下,你并不需要指定构建目标,因为它们都已经在构建列表中。所列出的目标是在你只想要测试某一个构建目标,而不是其他目标时的情况。
|
||||
|
||||
依据你的 [计算机架构][10],构建完成的 Linux 内核镜像(存放在 `/boot` 目录)的名称会有所不同。
|
||||
|
||||
对于 `x86_64`,Linux 内核的默认镜像名称是 `bzImage`。因此,如果你只需要构建引导所需的 Linux 内核,你可以像下面这样设定 `bzImage` 为目标:
|
||||
|
||||
```
|
||||
### 对于 x86_64
|
||||
$ make bzImage
|
||||
```
|
||||
|
||||
“那么如何在我的架构上找到用来调用 `make` 的目标名称呢?”
|
||||
|
||||
有两种方法。要么你可以执行 `make help` 之后查找在 `Architecture specific targets` 下,第一个前面带有星号 `*` 的选项。
|
||||
|
||||
或者,如果你希望自动完成,你可以利用 `image_name` 目标得到镜像的完全路径(相对路径),选择性地添加 `-s` 标志来获得有用的输出。
|
||||
|
||||
以下是我拥有的三台电脑的输出,一台是 `x86_64`,另一台是 `AArch64`,还有一台是 `riscv` :
|
||||
|
||||
```
|
||||
### x86_64
|
||||
$ make -s image_name
|
||||
arch/x86/boot/bzImage
|
||||
|
||||
### AArch64
|
||||
$ make -s image_name
|
||||
arch/arm64/boot/Image.gz
|
||||
|
||||
### RISC-V
|
||||
$ make -s image_name
|
||||
arch/riscv/boot/Image.gz
|
||||
```
|
||||
|
||||
现在,要只构建 Linux 内核镜像,你可以这样进行:
|
||||
|
||||
```
|
||||
make $(make -s image_name | awk -F '/' '{print $4}')
|
||||
```
|
||||
|
||||
##### 清理目标
|
||||
|
||||
如果你需要清理构建产生的文件,你可以用以下的目标来实现你的需求:
|
||||
|
||||
* `clean`:除了 `.config` 文件外,删除几乎所有其他内容。
|
||||
* `mrproper`:执行了 `make clean` 的所有操作外,还会删除 `.config` 文件。
|
||||
* `distclean`:除了执行 `make mrproper` 的所有操作外,还会清理任何补丁文件。
|
||||
|
||||
### 安装
|
||||
|
||||
一旦成功编译了 Linux 内核,接下来就是启动安装一些东西的时候了。“*一些* 东西?” 没错,我们至少构建了两种不同的东西,如果你使用的是 ARM 或 RISC-V 架构,那就有三种。我会在以下内容中详细解释。
|
||||
|
||||
> 🚧 虽然我将告诉你不同的安装方式,尤其是关于如何改变默认安装路径的方法,但**如果你不确定自己在做什么,那么我不建议你这么做!** 请慎重考虑,如果你决定走自定义的路线,那你需要自己负责后果。默认设置之所以存在,是因为它们有其特殊的原因 ;)
|
||||
|
||||
#### 安装内核模块
|
||||
|
||||
Linux 内核有部分在系统启动时并非必需的。这些部分被构建为可加载模块,即在需要时才进行加载和卸载。
|
||||
|
||||
所以,首先需要安装这些模块。这可以通过 `modules_install` 目标完成。**必须使用 `sudo`**,因为模块会被安装在 `/lib/modules/<kernel_release>-<localversion>` 这个需要 `root` 权限的路径下。
|
||||
|
||||
这个过程不仅会安装内核模块,还会对其进行签名,所以可能需要一些时间。好消息是你可以通过之前提到的 `-j$(nproc)` 选项来并行执行安装任务,这样会快一些。;)
|
||||
|
||||
```
|
||||
sudo make modules_install -j$(nproc)
|
||||
```
|
||||
|
||||
> **给开发者的提示:** 你可以通过设定 `INSTALL_MOD_PATH` 变量来指定一个不同的路径存放 Linux 模块,而不用默认的 `/lib/modules/<kernel_release>-<localversion>`,具体如下:
|
||||
>
|
||||
> ```
|
||||
> sudo make modules_install INSTALL_MOD_PATH=<path>
|
||||
> ```
|
||||
|
||||
> **另一个给开发者的提示:** 你可以使用 `INSTALL_MOD_STRIP` 变量来决定是否需要剥离模块的调试符号。如果未设定该变量,调试符号**不会被剥离**。当设为 `1` 时,符号信息将会被使用 `--strip-debug` 选项剥离,随后该选项会传递给 `strip`(或者在使用 Clang 的时候传递给 `llvm-strip`)工具。
|
||||
|
||||
#### (可选)安装 Linux 内核头文件
|
||||
|
||||
如果你打算使用这个内核来支持树外模块,比如 ZFS 或英伟达 DKMS,或者打算尝试自行编写模块,你可能会需要 Linux 内核提供的头文件。
|
||||
|
||||
可以通过以下方式使用 `headers_install` 目标来安装 Linux 内核头文件:
|
||||
|
||||
```
|
||||
sudo make headers_install
|
||||
```
|
||||
|
||||
**应使用 `sudo` 命令**,因为这些头文件会被安装到 `/usr` 目录。同时还会在 `/usr` 目录内创建子目录 `include/linux`,然后将头文件安装到 `/usr/include/linux` 内。
|
||||
|
||||
> **给开发者的提示:** 通过设定 `INSTALL_HDR_PATH` 变量,你可以修改 Linux 内核头文件的安装路径。
|
||||
|
||||
#### 安装 DTB(只针对 ARM 和 RISC-V)
|
||||
|
||||
**如果你使用的是 x86_64 架构,那么你可以跳过此步骤!**
|
||||
|
||||
如果你针对 ARM 或者 RISC-V 构建了内核,那么在运行 `make` 的过程中,设备树的二进制文件可能已经被编译出来了。你可以通过在 `arch/<machine_architecture>/boot/dts` 目录查找 `.dtb` 文件来确认这一点。
|
||||
|
||||
这里提供了一个快速检查的技巧:
|
||||
|
||||
```
|
||||
### 对于 AArch32
|
||||
$ find arch/arm/boot/dts -name "*.dtb" -type f | head -n 1 > /dev/null && echo "DTBs for ARM32 were built"
|
||||
|
||||
### 对于 AArch64
|
||||
$ find arch/arm64/boot/dts -name "*.dtb" -type f | head -n 1 > /dev/null && echo "DTBs for ARM64 were built"
|
||||
|
||||
### 对于 RISC-V
|
||||
$ find arch/riscv/boot/dts -name "*.dtb" -type f | head -n 1 > /dev/null && echo "DTBs for RISC-V were built"
|
||||
```
|
||||
|
||||
如果你看到出现 `DTBs for <arch> were built` 的消息,那么你可以开始安装 DTB。这可以通过 `dtbs_install` 目标来实现。
|
||||
|
||||
**需要使用 `sudo`**,因为它们会被安装在 `/boot/dtb-<kernel_release>-<localversion>` 中,而这个目录是由 `root` 所拥有的。
|
||||
|
||||
```
|
||||
sudo make dtbs_install
|
||||
```
|
||||
|
||||
> **给开发者的提示:** 就像安装模块一样,你可以使用 `INSTALL_DTBS_PATH` 变量指定一个自定义的路径来安装设备树二进制文件。
|
||||
|
||||
#### 安装 Linux 内核
|
||||
|
||||
最后,我们来安装 Linux 内核本身!这可以通过 `install` 目标来完成,就像这样:
|
||||
|
||||
```
|
||||
sudo make install
|
||||
```
|
||||
|
||||
**在这里必须使用 `sudo`**,因为 Linux 内核将被安装在 `/boot` 目录,而这个目录不允许普通用户写入。
|
||||
|
||||
> 💡 一般来讲,`install` 目标也会更新引导加载程序,但是如果它没有成功,那可能是不支持你使用的引导加载程序。如果你没有使用 GRUB 作为你的引导加载程序,请一定要阅读你引导加载程序的使用手册 ;)
|
||||
|
||||
> **给开发者的提示:** 并不奇怪,`INSTALL_PATH` 变量被用来设定 Linux 内核的安装位置,而非默认的 `/boot` 目录。
|
||||
|
||||
#### 针对 Arch Linux 用户的说明
|
||||
|
||||
如果你尝试执行了 `make install` 命令,可能已经注意到产生了错误。错误如下:
|
||||
|
||||
```
|
||||
$ sudo make install
|
||||
INSTALL /boot
|
||||
Cannot find LILO.
|
||||
```
|
||||
|
||||
要在 Arch Linux 上实际完成 Linux 内核的安装,我们需要手动复制 Linux 内核镜像文件。别担心,如果你使用的是 Arch Linux,手动操作应该是家常便饭了。( ͡° ͜ʖ ͡°)
|
||||
|
||||
可以使用以下命令完成这个步骤:
|
||||
|
||||
```
|
||||
sudo install -Dm644 "$(make -s image_name)" /boot/vmlinuz-<kernel_release>-<localversion>
|
||||
```
|
||||
|
||||
因为我编译的是 6.5.5 版本的内核,所以我将会执行下面这条命令,你可以根据你的实际情况进行适当调整:
|
||||
|
||||
```
|
||||
sudo install -Dm644 "$(make -s image_name)" /boot/vmlinuz-6.5.5-pratham
|
||||
```
|
||||
|
||||
虽然不是必须的,但最好复制一份名为 `System.map` 的文件。既然你已经在操作了,一并也复制了 `.config` 文件吧 ;)
|
||||
|
||||
```
|
||||
sudo cp -vf System.map /boot/System.map-<kernel_release>-<localversion>
|
||||
sudo cp -vf .config /boot/config-<kernel_release>-<localversion>
|
||||
```
|
||||
|
||||
##### 生成初始 RAM 磁盘
|
||||
|
||||
当你安装 Arch Linux 时,可能已经了解过 `mkinitcpio` 这个工具。现在,我们将使用它来创建初始的 RAM 磁盘。
|
||||
|
||||
首先,我们需要创建一个预设文件。向 `/etc/mkinitcpio.d/linux-<localversion>.preset` 文件中添加以下内容,根据实际需要来替换 `<kernel_release>` 和 `<localversion>`。
|
||||
|
||||
```
|
||||
ALL_config="/etc/mkinitcpio.conf"
|
||||
ALL_kver="/boot/vmlinuz-<kernel_release>-<localversion>"
|
||||
|
||||
PRESETS=('default' 'fallback')
|
||||
|
||||
default_image="/boot/initramfs-<kernel_release>-<localversion>.img"
|
||||
fallback_options="-S autodetect"
|
||||
```
|
||||
|
||||
配置完成后,执行下面的命令来生成初始 RAM 磁盘:
|
||||
|
||||
```
|
||||
sudo mkinitcpio -p linux-<localversion>
|
||||
```
|
||||
|
||||
我自己的电脑上得到的输出如下,你的结果应该会类似!
|
||||
|
||||
```
|
||||
$ sudo mkinitcpio -p linux-pratham
|
||||
==> Building image from preset: /etc/mkinitcpio.d/linux-pratham.preset: 'default'
|
||||
==> Using configuration file: '/etc/mkinitcpio.conf'
|
||||
-> -k /boot/vmlinuz-6.5.5-pratham -c /etc/mkinitcpio.conf -g /boot/initramfs-6.5.5-pratham.img
|
||||
==> Starting build: '6.5.5-pratham'
|
||||
-> Running build hook: [base]
|
||||
-> Running build hook: [udev]
|
||||
-> Running build hook: [autodetect]
|
||||
-> Running build hook: [modconf]
|
||||
-> Running build hook: [kms]
|
||||
-> Running build hook: [keyboard]
|
||||
==> WARNING: Possibly missing firmware for module: 'xhci_pci'
|
||||
-> Running build hook: [keymap]
|
||||
-> Running build hook: [consolefont]
|
||||
==> WARNING: consolefont: no font found in configuration
|
||||
-> Running build hook: [block]
|
||||
-> Running build hook: [filesystems]
|
||||
-> Running build hook: [fsck]
|
||||
==> Generating module dependencies
|
||||
==> Creating zstd-compressed initcpio image: '/boot/initramfs-6.5.5-pratham.img'
|
||||
==> Image generation successful
|
||||
==> Building image from preset: /etc/mkinitcpio.d/linux-pratham.preset: 'fallback'
|
||||
==> Using configuration file: '/etc/mkinitcpio.conf'
|
||||
==> WARNING: No image or UKI specified. Skipping image 'fallback'
|
||||
```
|
||||
|
||||
初始 RAM 磁盘已成功生成,现在我们可以进入下一步,更新引导加载器!
|
||||
|
||||
##### 更新 GRUB
|
||||
|
||||
一旦所有必要的文件已成功复制到其对应的位置,接下来,我们将进行 GRUB 的更新。
|
||||
|
||||
使用以下命令对 GRUB 引导加载器进行更新:
|
||||
|
||||
```
|
||||
sudo grub-mkconfig -o /boot/grub/grub.cfg
|
||||
```
|
||||
|
||||
> 💡 如果你使用的引导加载器不是 GRUB,请参看 Arch Wiki 中相关的引导加载器文档。
|
||||
|
||||
**注意,更新 GRUB 并不会直接使新的内核版本设为默认启动选项。在引导时,请在启动菜单中手动选择新的内核版本。**
|
||||
|
||||
你可以通过选择 `Advanced options for Arch Linux` 菜单,并在随后的菜单中选择 `Arch Linux, with Linux <kernel_release>-<localversion>` 来启用新版的 Linux 内核。
|
||||
|
||||
### 重启电脑
|
||||
|
||||
恭喜你!你已经完成了获取 Linux 内核源代码、进行配置、构建以及安装等所有步骤。现在只需要通过重启电脑并进入新构建和安装的 Linux 内核,就可以开始享受你的努力成果了。
|
||||
|
||||
启动时,请确保从引导加载器中选择正确的 Linux 内核版本。系统启动后,运行 `uname -r` 命令来确认你正在使用预期的 Linux 内核。
|
||||
|
||||
以下是我自己的电脑输出的内容:
|
||||
|
||||
```
|
||||
$ uname -r
|
||||
6.5.5-pratham
|
||||
```
|
||||
|
||||
**是时候开始庆祝了!** 🎉
|
||||
|
||||
### 卸载操作
|
||||
|
||||
> 🚧 提示:在删除当前正在使用的内核版本之前,你应该首先切换至较旧的内核版本。
|
||||
|
||||
可能你的 Linux 发行版所使用的 Linux 内核版本就是你手动编译的版本,或者你自行编译了新的内核并注意到应卸载旧的内核以节省空间,于是你开始想如何才能卸载。当然,虽然我们无法简单地运行 `make uninstall` 命令,但这并不代表没有其他的方法!
|
||||
|
||||
我们清楚各个文件的安装位置,因此删除它们相对简单。
|
||||
|
||||
```
|
||||
### 删除内核模块
|
||||
$ rm -rf /lib/modules/<kernel_release>-<localversion>
|
||||
|
||||
### 删除设备树二进制文件
|
||||
$ rm -rf /boot/dtb-<kernel_release>-<localversion>
|
||||
|
||||
### 删除 Linux 内核本身
|
||||
$ rm -vf /boot/{config,System,vmlinuz}-<kernel_release>-<localversion>
|
||||
```
|
||||
|
||||
### 总结
|
||||
|
||||
这个过程不是一次简单的旅程,是吧?但是现在,我们终于抵达了终点。我们一起学习了手动编译 Linux 内核的全过程,包括安装依赖、获取和验证源码、解压源码、配置 Linux 内核、构建内核以及安装内核。
|
||||
|
||||
如果你喜欢这个详细的步骤指南,请给我留言反馈。如果在操作过程中遇到问题,也欢迎提出,让我知道!
|
||||
|
||||
*(题图:MJ/853481c5-87e3-42aa-8ace-e9ddfa232f75)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/compile-linux-kernel/
|
||||
|
||||
作者:[Pratham Patel][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/pratham/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/upgrade-linux-kernel-ubuntu/
|
||||
[2]: https://en.wikipedia.org/wiki/History_of_Linux#Naming
|
||||
[3]: https://news.itsfoss.com/linux-kernel-support/
|
||||
[4]: https://www.kernel.org/category/releases.html
|
||||
[5]: https://lwn.net/Articles/945378/
|
||||
[6]: https://kernel.org/
|
||||
[7]: https://itsfoss.com/content/images/2023/09/Screenshot-2023-09-24-at-2.21.00-PM.png
|
||||
[8]: https://itsfoss.com/content/images/2023/09/tar_2x.png
|
||||
[9]: https://www.kernel.org/doc/makehelp.txt
|
||||
[10]: https://itsfoss.com/arm-aarch64-x86_64/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/04/115142ggqqhuclvxdxsb14.jpg
|
||||
@@ -0,0 +1,100 @@
|
||||
[#]: subject: "Finally! The Popular DAW \"Studio One\" Adds Linux Support 🥰"
|
||||
[#]: via: "https://news.itsfoss.com/studio-one-linux/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16254-1.html"
|
||||
|
||||
备受欢迎的数字音频工作站 Studio One 新增了对 Linux 的支持
|
||||
===
|
||||
|
||||
![][0]
|
||||
|
||||
> 音乐制作人们,这是你们翘首以待的消息。
|
||||
|
||||
[数字音频工作站(DAW)][1] 已经成为音乐制作专业人士重要工具之一。
|
||||
|
||||
遗憾的是,对于 Linux 用户而言,选择十分有限。最受欢迎的选择通常是开源 DAW,如 [Ardour][2]、[Audacity][3] 和闭源的 [Bitwig][4]。
|
||||
|
||||
当然,这些工具都有一定的优点。然而像 **Cubase、Nuendo 和 Pro Tools** 这类在音乐产业内广泛使用的热门 DAW 却没有 Linux 版 🥺
|
||||
|
||||
随着 [Studio One][5] 的出现,这个局面正在发生变化 🎉
|
||||
|
||||
[Studio One][5] 是专业音响设备制造商 [PreSonus][6] 所推出的一款广受欢迎的 DAW,它**自 2009 年推出以来一直受到许多专业人士的青睐**,被视为 Steinberg Cubase、 Avid Pro Tools、 Apple GarageBand 等软件的有效替代品。
|
||||
|
||||
> 🚧 需要指出的是,Studio One 并不是 FOSS(自由与开源软件),我们在这里谈论的是其新增的 Linux 支持。
|
||||
|
||||
### Studio One:登陆 Linux! 🐧
|
||||
|
||||
![][7]
|
||||
|
||||
最初作为公开的测试版本发布的是 **[Studio One 6.5][8],这是首个为 Linux 用户提供的版本。**
|
||||
|
||||
官方明确说明了该软件的系统需求为 **Ubuntu 23.04**,并且需要使用 **Wayland 会话**。
|
||||
|
||||
作为 DAW,它拥有大量高级特性,用于创作、录制和混音。其中一些关键特性包括:
|
||||
|
||||
* 多轨工具
|
||||
* 内置节拍制造器
|
||||
* 支持 <ruby>草稿本<rt>Scratch pad</rt></ruby>
|
||||
* 为音频和 MIDI 提供和声编辑
|
||||
|
||||
无论你有没有 PreSonus 音频设备,这个消息都是兴奋的。
|
||||
|
||||
想必这会对其他商业上成功的 DAW 考虑 Linux 成为新的平台产生影响 🤩
|
||||
|
||||
这对于 Linux 的桌面应用肯定会有巨大的推动作用,有望提升 [当前的市场份额][9] 📈
|
||||
|
||||
更重要的是,Studio One 支持在所有三个平台上无缝地创作音乐,这也是它的另一大优势。你可以使用自己最喜欢的 DAW 创作音乐,而不需要被依赖于某个特定的平台。这听起来很不错,_对吗?_
|
||||
|
||||
**需要注意的是**:PreSonus 当前并未提供任何官方的 Linux 方面的支持。而未来的稳定版本可能会改变这个局面。
|
||||
|
||||
尽管如此,公司推荐用户在他们的用户论坛的 [Linux 版块][10] 中讨论与 Linux 相关的问题,以获得解答和分享社区反馈。
|
||||
|
||||
> 🚧 请注意,这是一个测试版,**还不应该在实际生产中使用**。开发者已在 Studio One 的 [Linux 支持页面][11] 上列出了一些已知的问题。一些功能,如 CD 刻录、视频支持、DDP 导入/导出等,在 Linux 版本中完全不可用。
|
||||
|
||||
尽管 **Studio One 是闭源的**,但它对 Linux 的支持将使 Linux 平台对音频工程师、制作人乃至艺术家更加友好。
|
||||
|
||||
### 📥 获取 Studio One 测试版
|
||||
|
||||
要想体验这个公开的测试版,你首先需要**注册一份订阅计划**。我建议你首先进行**30 天的免费试用**,看看它在你的 Linux 系统上的表现如何。
|
||||
|
||||
想了解更多,欢迎访问他们的 [官方网站][12]。
|
||||
|
||||
> **[Studio One][12]**
|
||||
|
||||
💬 对于这个新闻,你有多兴奋?你试用过了吗?欢迎在下方评论留言分享你的想法!
|
||||
|
||||
参考来源:[omg! ubuntu][13]
|
||||
|
||||
*(题图:MJ/4d6d0f4b-c16d-4164-ad1e-90e6bd2b4843)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/studio-one-linux/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://en.wikipedia.org/wiki/Digital_audio_workstation
|
||||
[2]: https://news.itsfoss.com/ardour-7-3-release/
|
||||
[3]: https://news.itsfoss.com/audacity-3-2-release/
|
||||
[4]: https://www.bitwig.com/
|
||||
[5]: https://www.presonus.com/en/studio-one.html
|
||||
[6]: https://www.presonus.com/en/start
|
||||
[7]: https://news.itsfoss.com/content/images/2023/10/Studio_One_Linux.png
|
||||
[8]: https://blog.presonus.com/2023/09/29/you-can-do-immersive-audio-right-now/
|
||||
[9]: https://itsfoss.com/linux-market-share/
|
||||
[10]: https://forums.presonus.com/viewforum.php?f=419
|
||||
[11]: https://support.presonus.com/hc/en-us/articles/19214558269581-Linux-Getting-Started
|
||||
[12]: https://www.presonus.com/en/studio-one-compare.html
|
||||
[13]: https://www.omgubuntu.co.uk/2023/10/pro-audio-app-studio-one-now-supports-linux
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/04/182440b2evk5fiqfzv5k4v.jpg
|
||||
@@ -0,0 +1,73 @@
|
||||
[#]: subject: "Linux Mint 21.2 Edge ISO Empowers Newer Hardware with Kernel 6.2!"
|
||||
[#]: via: "https://news.itsfoss.com/linux-mint-21-2-edge/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16275-1.html"
|
||||
|
||||
Linux Mint 21.2 Edge:为更新的硬件提供支持
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Linux Mint 21.2 Edge ISO 来了!
|
||||
|
||||
Linux Mint 背后的人们一直在努力推出主要版本,例如 [Linux Mint 21.2][1] 和 [LMDE 6][2]。
|
||||
|
||||
一系列的发布似乎并没有停止,因为我们现在以 “**Linux Mint 21.2 Edge**” 的形式得到了另一个版本。
|
||||
|
||||
请允许我告诉你更多相关信息。
|
||||
|
||||
### Linux Mint 21.2 Edge:可以期待什么?
|
||||
|
||||
![][3]
|
||||
|
||||
Linux Mint 21.2 Edge 采用 [Linux 内核 6.2][4],**为那些希望运行较新硬件**而不喜欢 [Linux 内核 5.15][5] LTS(常规 Linux Mint 21.2 版本的特性)的用户量身定制。
|
||||
|
||||
现在对于 Intel Arc 显卡用户来说绝对是一个不错的 Linux 发行版选择!
|
||||
|
||||
如果你对 “_Edge_” ISO 感到好奇,请参阅 [文档][6]:
|
||||
|
||||
> 除了常规 ISO 镜像之外,Linux Mint 有时还会为其最新版本提供 “Edge” ISO 镜像。该镜像附带更新的组件,能够支持最现代的硬件芯片组和设备。
|
||||
|
||||
此外,此 ISO 还**恢复了对安全启动的支持**。对于那些想要它的人来说,这应该是一个有用的附加组件。
|
||||
|
||||
不要忘记,Linux Mint 21.2 Edge **仅提供 “Cinnamon” 风格桌面**,没有任何 XFCE 或 MATE 风格。
|
||||
|
||||
不过,除了更新的硬件支持之外,与常规版本相比,使用 Edge 版本时你不会发现任何差异。
|
||||
|
||||
**想要试一试?**
|
||||
|
||||
前往 [官方网站][7] 从众多可用的下载镜像之一获取 ISO。
|
||||
|
||||
> **[Linux Mint 21.2 Edge][7]**
|
||||
|
||||
请注意,此版本**仅提供 64 位版本**,没有 32 位选项。
|
||||
|
||||
💬 你会尝试 Edge ISO 吗? 请在下面告诉我们!
|
||||
|
||||
*(题图:MJ/f49e0353-86d5-4ebb-a503-58716d8b54fb)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/linux-mint-21-2-edge/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[geekpi](https://github.com/geekpi)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/linux-mint-21-2/
|
||||
[2]: https://news.itsfoss.com/lmde-6/
|
||||
[3]: https://news.itsfoss.com/content/images/2023/10/LinuxMint_21.2_Edge.png
|
||||
[4]: https://news.itsfoss.com/linux-kernel-6-2-release/
|
||||
[5]: https://news.itsfoss.com/linux-kernel-5-15-release/
|
||||
[6]: https://linuxmint-user-guide.readthedocs.io/en/latest/edge.html
|
||||
[7]: https://www.linuxmint.com/edition.php?id=310
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/11/224116oso9krhjqqoq5qji.jpg
|
||||
@@ -0,0 +1,117 @@
|
||||
[#]: subject: "Fixing 'Bash: man command not found' error in Arch Linux"
|
||||
[#]: via: "https://itsfoss.com/man-command-not-found/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16270-1.html"
|
||||
|
||||
修复 Arch Linux 中的 “Bash: man command not found” 错误
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 我遇到 “找不到 man 命令” 错误的小插曲,以及我是如何解决的。
|
||||
|
||||
多年后,我再次尝试 Arch Linux。我忘记了 [pacman 命令的用法][1],所以我尝试访问它的手册页。
|
||||
|
||||
接下来发生的事情让我震惊(是的!我一直在阅读 BuzzFeed 😜)。它向我展示了这个错误:
|
||||
|
||||
> bash: man: command not found
|
||||
|
||||
当然,这不仅是 pacman,所有命令都是这样。
|
||||
|
||||
![][2]
|
||||
|
||||
这让我感到困惑,因为我以前从未遇到过无法使用 `man` 命令的情况。
|
||||
|
||||
如果你发现自己处于找不到 `man` 命令的类似情况,我向你保证,修复很简单:
|
||||
|
||||
* 安装 `man-db` 包(安装手册页)
|
||||
* 更新 `mandb` 缓存(用于索引所有命令的手册页)
|
||||
|
||||
让我们更详细地看看。
|
||||
|
||||
### 在 Linux 中安装手册页
|
||||
|
||||
我从未想过我必须明确安装手册页。但是 [Arch Linux][3] 将你带入未知领域。这在某种程度上是件好事,因为你会发现以前从未遇到过的事情。
|
||||
|
||||
**这里的关键是安装手册页的包名为 `man-db`**。这对我来说也是一个发现。
|
||||
|
||||
你可以使用发行版的包管理器来安装它。
|
||||
|
||||
[对于 Arch 和 Manjaro][4],使用:
|
||||
|
||||
```
|
||||
sudo pacman -S man-db
|
||||
```
|
||||
|
||||
![][5]
|
||||
|
||||
对于 Ubuntu 和 Debian,请使用:
|
||||
|
||||
```
|
||||
sudo apt install man-db
|
||||
```
|
||||
|
||||
对于 Fedora,请使用:
|
||||
|
||||
```
|
||||
sudo dnf install man-db
|
||||
```
|
||||
|
||||
对于 Red Hat Linux,请使用:
|
||||
|
||||
```
|
||||
sudo yum install man-db
|
||||
```
|
||||
|
||||
**你明白了要点**。为手册页构建缓存也是明智的一步。
|
||||
|
||||
### 构建手册页缓存
|
||||
|
||||
要刷新或构建手册页缓存,请运行 [mandb 命令][6]:
|
||||
|
||||
```
|
||||
sudo mandb
|
||||
```
|
||||
|
||||
它将在不同位置查找手册页并构建缓存,以便你可以快速访问手册页。
|
||||
|
||||
![][7]
|
||||
|
||||
完成后,我就可以像往常一样使用 `man` 命令。
|
||||
|
||||
### 结论
|
||||
|
||||
这确实让我感到震惊,因为我一直认为手册页是 Linux 的核心部分。从未想过我必须安装它们。
|
||||
|
||||
我应该将其添加到 [安装 Arch Linux 后要做的事情列表][8] 吗?我还没有把握。
|
||||
|
||||
也许我是在 Arch 中遇到这个缺少 `man` 命令问题的极少数用户之一。也许不是。如果你遇到过这样的“意外错误”,请在评论中告诉我。
|
||||
|
||||
*(题图:MJ/a582366a-ee9d-4583-9025-eed6a4e96108)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/man-command-not-found/
|
||||
|
||||
作者:[Abhishek Prakash][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://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/pacman-command/
|
||||
[2]: https://itsfoss.com/content/images/2023/10/bash-man-command-not-found-error.png
|
||||
[3]: https://archlinux.org/
|
||||
[4]: https://itsfoss.com/manjaro-vs-arch-linux/
|
||||
[5]: https://itsfoss.com/content/images/2023/10/installing-man-command-arch-linux.png
|
||||
[6]: https://www.man7.org/linux/man-pages/man8/mandb.8.html
|
||||
[7]: https://itsfoss.com/content/images/2023/10/updating-man-command-database-linux.png
|
||||
[8]: https://itsfoss.com/things-to-do-after-installing-arch-linux/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/09/231716f6ehhv6u9sueuts4.jpg
|
||||
184
published/202310/20231004 Install and Use Yay on Arch Linux.md
Normal file
184
published/202310/20231004 Install and Use Yay on Arch Linux.md
Normal file
@@ -0,0 +1,184 @@
|
||||
[#]: subject: "Install and Use Yay on Arch Linux"
|
||||
[#]: via: "https://itsfoss.com/install-yay-arch-linux/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16284-1.html"
|
||||
|
||||
在 Arch Linux 上安装和使用 Yay
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Yay 是最流行的 AUR 助手之一,用于处理 Arch 用户资源库中的软件包。学习在 Arch Linux 中安装它。
|
||||
|
||||
你可以在 <ruby>[Arch 用户仓库][1]<rt>Arch User Repository</rt></ruby>(AUR)中找到社区成员打包的大量软件。
|
||||
|
||||
由于它来自第三方,纯粹主义者建议从 AUR 手动下载并构建每个所需的包。
|
||||
|
||||
但这是一项乏味的任务,这就是为什么会有 AUR 助手来避免麻烦。
|
||||
|
||||
Yay 是最受欢迎的 AUR 帮助程序之一,在本教程中,我将分享如何在 Arch Linux 上安装 Yay。我还将分享一些有关使用 Yay 管理 AUR 包的技巧。
|
||||
|
||||
|
||||
> 💡 Yay 可在 Manjaro 的仓库中找到。因此,Manjaro 用户只需使用 `pacman -S yay` 即可安装
|
||||
|
||||
### 在 Arch Linux 上安装 Yay
|
||||
|
||||
在继续安装 Yay 之前,你需要一些构建它所需的软件包。
|
||||
|
||||
让我把它分成几个步骤。
|
||||
|
||||
#### 步骤 1:安装必备包
|
||||
|
||||
首先刷新包缓存并更新系统是一个好主意:
|
||||
|
||||
```
|
||||
sudo pacman -Syu
|
||||
```
|
||||
|
||||
安装所需的 `base-devel`(包含 `makepkg` 等工具)和 `git`(克隆 yay 的 Git 仓库所需的)。
|
||||
|
||||
```
|
||||
sudo pacman -S --needed base-devel git
|
||||
```
|
||||
|
||||
使用 `--needed` 标志,它不会重新安装已经安装的软件包。
|
||||
|
||||
它看起来是这样的:
|
||||
|
||||
![][2]
|
||||
|
||||
现在你已经有了所需的软件包,是时候在你的系统上安装 [Yay][3]。
|
||||
|
||||
#### 步骤 2:克隆 Yay Git 仓库并切换到它
|
||||
|
||||
[使用 git 命令][4] “克隆” Yay 仓库。你可以在系统中的任何位置执行此操作,无论是主目录还是其他目录。
|
||||
|
||||
```
|
||||
git clone https://aur.archlinux.org/yay.git
|
||||
```
|
||||
|
||||
完成后,切换到克隆的目录:
|
||||
|
||||
```
|
||||
cd yay
|
||||
```
|
||||
|
||||
![][5]
|
||||
|
||||
终于可以安装 Yay 了。
|
||||
|
||||
#### 步骤 3:安装 Yay
|
||||
|
||||
事实上,你是在构建它。你将在此处看到 `PKGBUILD` 文件。使用以下命令从此处构建包:
|
||||
|
||||
```
|
||||
makepkg -si
|
||||
```
|
||||
|
||||
按照屏幕上的说明进行操作。当系统要求你确认时,按 `Y`。
|
||||
|
||||
![][6]
|
||||
|
||||
该过程完成后,通过检查其版本来验证 Yay 是否已成功安装。
|
||||
|
||||
```
|
||||
yay --version
|
||||
```
|
||||
|
||||
现在你已经成功安装了它,你可以删除克隆的 Yay Git 仓库。不再需要它了。
|
||||
|
||||
### 使用 Yay 进行包管理
|
||||
|
||||
Yay 遵循与 [pacman][7] 类似(但不相同)的命令结构。所以你用 Yay 管理 AUR 包应该不难。
|
||||
|
||||
搜索软件包:
|
||||
|
||||
```
|
||||
yay search_term
|
||||
```
|
||||
|
||||
安装软件包:
|
||||
|
||||
```
|
||||
yay -S package_name
|
||||
```
|
||||
|
||||
删除软件包:
|
||||
|
||||
```
|
||||
yay -R package_name
|
||||
```
|
||||
|
||||
要删除包及其依赖项:
|
||||
|
||||
```
|
||||
yay -Rns package_name
|
||||
```
|
||||
|
||||
仅升级 AUR 包:
|
||||
|
||||
```
|
||||
yay -Sua
|
||||
```
|
||||
|
||||
Yay 还能够升级非 AUR 软件包。上面的 `a` 标志将其限制为 AUR。
|
||||
|
||||
### 将 Yay 升级到新版本
|
||||
|
||||
现在,你可能想知道如何将 Yay 升级到可用的新版本。
|
||||
|
||||
答案是你不需要做任何特别的事情。当你运行以下命令时,Yay 可以自行更新:
|
||||
|
||||
```
|
||||
yay -Sua
|
||||
```
|
||||
|
||||
### 从 Arch 系统中删除 Yay
|
||||
|
||||
如果你不喜欢 Yay 或不再需要它,你可以使用 `pacman` 命令像删除任何其他软件包一样删除它:
|
||||
|
||||
```
|
||||
sudo pacman -Rs yay
|
||||
```
|
||||
|
||||
### 总结
|
||||
|
||||
这是对 Yay AUR 助手的快速介绍。你可以访问其 GitHub 仓库以了解有关其工作的更多详细信息。
|
||||
|
||||
Arch 用户仓库(AUR)是[为什么有些人喜欢使用 Arch Linux][9] 的原因之一。
|
||||
|
||||
虽然纯粹的 Arch 用户一般都会嘲笑 AUR,特别是 [AUR 助手][10],但它们仍然因其提供的易用性而受到欢迎。
|
||||
|
||||
我希望你发现这个快速教程有助于在 [Arch Linux][11] 上获得 Yay。如果你仍有疑问或发现任何技术错误,请告诉我。
|
||||
|
||||
*(题图:MJ/f01331ab-ee70-45c4-8fd1-163e63497a6a)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/install-yay-arch-linux/
|
||||
|
||||
作者:[Abhishek Prakash][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://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/aur-arch-linux/
|
||||
[2]: https://itsfoss.com/content/images/2023/10/install-prerequisite-yay.png
|
||||
[3]: https://github.com/Jguer/yay
|
||||
[4]: https://itsfoss.com/basic-git-commands-cheat-sheet/
|
||||
[5]: https://itsfoss.com/content/images/2023/10/git-clone-yay.png
|
||||
[6]: https://itsfoss.com/content/images/2023/10/building-yay-package.png
|
||||
[7]: https://itsfoss.com/pacman-command/
|
||||
[8]: https://github.githubassets.com/pinned-octocat.svg
|
||||
[9]: https://itsfoss.com/why-arch-linux/
|
||||
[10]: https://itsfoss.com/best-aur-helpers/
|
||||
[11]: https://archlinux.org/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/14/224808sb66bbdrd4zrqk6q.jpg
|
||||
@@ -0,0 +1,132 @@
|
||||
[#]: subject: "Linux Gaming's Next Big Secret Weapon: Bottles Next-Gen Upgrade 🔥"
|
||||
[#]: via: "https://news.itsfoss.com/bottles-next-linux-gaming/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16258-1.html"
|
||||
|
||||
Linux 游戏的下一个秘密武器:Bottles Next
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Bottles 的发展计划充满激动人心,目标是成为在 Linux 上运行 Windows 应用和游戏的更优秀工具。
|
||||
|
||||
如今,Wine 和 Steam 的 Proton 让 Linux 用户获得了升级的游戏体验。
|
||||
|
||||
而 Lutris、Heroic Games Launcher 等应用利用这些技术,让你能够轻松管理、安装和启动游戏。
|
||||
|
||||
**Bottles** 是一款此类的实用工具,它帮助你在 Linux 上 [运行 Windows 应用和游戏][1]。这是在 Linux 上使用 [Epic 游戏商店][2] 的最佳方法之一。
|
||||
|
||||
我深信,它在不久的将来会成为一个更令人激动的工具!_为什么?_ 🤔
|
||||
|
||||
嗯,我发现了一些关于 Bottles 下一代升级计划的有趣更新 🤯
|
||||
|
||||
### Bottles Next:完全变革
|
||||
|
||||
当前版本的 [Bottles][3] 是一款简洁且可以定制的应用,帮助你仅需点击几次便可管理和运行 Windows 应用和游戏。
|
||||
|
||||
![Bottles 当前版本的截图][4]
|
||||
|
||||
根据其未来升级计划(_尽管目前还没有具体的时间表_),开发者们准备提升用户体验,以及提供一个**更强大的后端**。与之配合的是,他们还计划**重新设计用户界面**,以满足初级和资深用户的需求。
|
||||
|
||||
现在,我来告诉你更多它的计划信息...
|
||||
|
||||
#### 用户界面的重新设计
|
||||
|
||||
这是其创建者 [Mirko Brombin][5] 分享的 Bottles Next 的一些效果图:
|
||||
|
||||
![Bottles Next 展示两种模式的设计][6]
|
||||
|
||||
如你所见,他们的目标是推出两种使用模式,即 “<ruby>Next 模式<rt>Next Mode</rt></ruby>” 针对初级用户,以及 “<ruby>经典模式<rt>Classic Mode</rt></ruby>” 针对资深用户。
|
||||
|
||||
> 🚧 这些效果图可能不代表 Bottles Next 的最终设计。
|
||||
|
||||
Bottles Next 的更新旨在提供更简洁的用户体验,同时依然保持了工具的可定制性。
|
||||
|
||||
![][7]
|
||||
|
||||
游戏信息界面看起来很吸引人,显示了重要信息,并提供了进入高级设置的选项。
|
||||
|
||||
![][8]
|
||||
|
||||
我个人觉得这个设计不错,_你觉得呢?_
|
||||
|
||||
#### 核心的变化
|
||||
|
||||
计划中的技术变动很大,但当然,你可能无法从用户界面上看出其变化。
|
||||
|
||||
后端重写的一些目标包括:
|
||||
|
||||
* 让后端独立于图形用户界面
|
||||
* 重新定义应用如何与其创建的 “<ruby>前置瓶<rt>bottle</rt></ruby>” 联系,重点是单一应用。
|
||||
* 引入新功能(如取消创建 “前置瓶” 的能力)
|
||||
|
||||
(LCTT 译注:Wine 使用一个被称之为 “Wineprefix” 的配置目录来控制使用 Wine 运行的 Windows 程序,这个目录也被比喻作 “bottle”,而 “Bottles” 是一个基于此机制的软件。在此,我将 “Wineprefix” 和 “bottle” 尝试翻译为 “Wine 前置配置” 和 “前置瓶”。)
|
||||
|
||||
为了使后端独立于图形用户界面,他们计划使用客户端和本地服务器的概念。因此,其他应用也可以使用 Bottles 服务器来处理已创建的 <ruby>Wine 前置配置<rt>Wineprefix</rt></ruby>。
|
||||
|
||||
> 💡 <ruby>Wine 前置配置<rt>Wineprefix</rt></ruby> 是 Wine 用于存储配置文件及已安装的 Windows 程序的目录(更多关于 Wine 的信息参见 [Arch Linux Wiki][10])。
|
||||
|
||||
换句话说,他们目标是改变所有的工作方式,同时保证他们的后端对其他应用管理 Wine 是有利的。
|
||||
|
||||
关于技术变化,Mirko 提到:
|
||||
|
||||
> 这种全新的架构允许在任何需要管理 Wine 前置配置的应用中使用 Bottles。你可以用任何工具包,例如 qt、GTK 等写客户端。我们正朝着 Electron 的道路前进,同时也在开发一个 GTK 客户端。
|
||||
|
||||
(计划中)Bottles Next 工作方式的一个**有趣的地方**:
|
||||
|
||||
> Bottles Next 将会是第一款能够从内部管理 Wine 前置配置的管理器。我们正在编写一个名为 [WineBridge][11] 的项目,它运行在 Wine 前置配置内部,然后通过协议与 Bottles 通信。这样我们便可以避免使用 Shell 命令来启动程序或调整 <ruby>Wine 前置配置<rt>Wineprefix</rt></ruby>,大大降低了痛苦。
|
||||
|
||||
此外,他提到将基于 Go 编程语言进行重写。
|
||||
|
||||
简而言之,即将在底层和前端出现大量重大的变化。这些整合后,必然能够在 Bottles 上提升用户体验。
|
||||
|
||||
随着他们透露的关于 Bottles Next 更多的计划和进展信息,我们可能会获得更多值得关注的消息。
|
||||
|
||||
### 🙌 如果可以,帮助他们!
|
||||
|
||||
我敢肯定,至此为止,作为一个 Linux 游戏狂热爱好者,你一定迫不及待想要看到下一代的更新!
|
||||
|
||||
然而,已经分享的**开发计划**会需要一段时间去实践,最后才能推出。
|
||||
|
||||
**但不用担心,你可以伸出援手!**
|
||||
|
||||
你可以在 [GitHub][12] 上为项目做出贡献,提出你的想法/反馈到 [论坛][13], 加入他们的 [Discord][14] 服务器找出更多参与 **Bottles Next** 项目的方式。
|
||||
|
||||
> **[Bottles][3]**
|
||||
|
||||
💬 你对 Bottles Next 有什么看法?在下方的评论中分享你的观点。
|
||||
|
||||
*(题图:MJ/e6b335c1-70d9-4404-b62f-e9b27fd128bb)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/bottles-next-linux-gaming/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/use-windows-applications-linux/
|
||||
[2]: https://itsfoss.com/epic-games-linux/
|
||||
[3]: https://usebottles.com/
|
||||
[4]: https://news.itsfoss.com/content/images/2023/10/bottle-dark-screenshot.png
|
||||
[5]: https://news.itsfoss.com/interview-mirko-brombin/
|
||||
[6]: https://news.itsfoss.com/content/images/2023/10/bottles-next.jpg
|
||||
[7]: https://news.itsfoss.com/content/images/2023/10/bottles-next-ui.jpg
|
||||
[8]: https://news.itsfoss.com/content/images/2023/10/bottles-next-game-info.jpg
|
||||
[9]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[10]: https://wiki.archlinux.org/title/wine
|
||||
[11]: https://github.com/bottlesdevs/winebridge
|
||||
[12]: https://github.com/bottlesdevs
|
||||
[13]: https://forum.usebottles.com/
|
||||
[14]: https://discord.gg/wF4JAdYrTR
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/06/123651ctvakzantvupnezt.jpg
|
||||
@@ -0,0 +1,124 @@
|
||||
[#]: subject: "Wait's Over: elementary OS 7.1 Releases With a Focus on Privacy"
|
||||
[#]: via: "https://news.itsfoss.com/elementary-os-7-1/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16260-1.html"
|
||||
|
||||
elementary OS 7.1 发布,重点关注隐私
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> elementary OS 的精致更新已到来!
|
||||
|
||||
2023 年即将结束,而我们得到了一次全新的 elementary OS 更新。今年早些时候,我们对 [elementary OS 7][1] 版本进行了概览,该版本带来了众多改进。
|
||||
|
||||
而今,让我们来探索一下新发布的 **elementary OS 7.1**版本。
|
||||
|
||||
### 🆕 elementary OS 7.1: 新增了什么?
|
||||
|
||||
![][2]
|
||||
|
||||
作为 [最美 Linux 发行版][3] 之一,这次的 elementary OS 发行版**主要集中在隐私和辅助功能上**。
|
||||
|
||||
此版本的一些显著亮点包括:
|
||||
|
||||
* 隐私优化
|
||||
* 加强辅助功能
|
||||
* <ruby>应用中心<rt>AppCenter</rt></ruby> 的改进
|
||||
* 手势和键盘导航有所提升
|
||||
|
||||
### 隐私优化
|
||||
|
||||
![][4]
|
||||
|
||||
在此发行版中,已引入新系统,用于**管理应用程序的自动启动**,并且当应用程序在后台运行时会向你**发出警告**。
|
||||
|
||||
因为这个新的 “<ruby>后台 & 自启动<rt>Background & Autostart</rt></ruby>” 管理面板的引入,现在众多如日历、邮件和任务等核心应用的自启动行为可以得到控制。
|
||||
|
||||
该管理面板还负责管理应用程序的权限,其中 “<ruby>定位服务<rt>Location Services</rt></ruby>” 的管理,采用了一个**更安全的方法**来允许应用程序请求位置访问。
|
||||
|
||||
符合最新的 [FreeDesktop.org][5] 标准的实现。
|
||||
|
||||
### 加强辅助功能
|
||||
|
||||
![][6]
|
||||
|
||||
收到来自**具有视觉障碍用户的反馈**后,elementary OS 团队实施了一些有用的可访问性功能。
|
||||
|
||||
一项功能是,安装过程中会自动播放 **音频提示** ,以**让了解用户屏幕阅读器的键盘快捷方式**。这个音频提示在首次安装和设置过程中都会提供。
|
||||
|
||||
另一项功能是,为了**帮助 [色觉缺陷][7] 人群**在发行版中导航,实施了**五种不同的显示过滤器**。
|
||||
|
||||
这些过滤器是为解决 **红色盲**、**绿色盲** 和 **黄蓝色盲** 这些问题的人们设计的。他们还增添了一些 **高对比度选项** ,并增加了大量的 **辅助文字**。
|
||||
|
||||
### 应用中心的改进
|
||||
|
||||
![][8]
|
||||
|
||||
**<ruby>应用中心<rt>AppCenter</rt></ruby> 也有了改进**,现在它会显示所有列出或侧载的 Flatpak 应用运行所需的权限。
|
||||
|
||||
现在,它可以显示如位置、发送通知、自启动、读/写系统设置等应用权限。
|
||||
|
||||
这让用户在安装应用程序时能更清楚地了解哪些权限是必要的。
|
||||
|
||||
### 提升手势和键盘导航
|
||||
|
||||
![][9]
|
||||
|
||||
同样地,**多点触控手势和键盘导航得到了加强**,这归功于在整个系统中更广泛的实施。
|
||||
|
||||
现在,用户可以**使用手势控制工作区**,并**使用新添加的各种键盘快捷键导航**。对键盘行为的设置也有所优化,提供了大量调整选项。
|
||||
|
||||
### 🛠️ 其他修改和改进
|
||||
|
||||
像每个 elementary OS 发布版本一样,许多微妙的改进效果显著。其他的亮点包括:
|
||||
|
||||
* “<ruby>文件<rt>Files</rt></ruby>” 应用的标题栏中新增应用菜单,具有新的缩放控制和能同时重命名多个文件的 “批量重命名” 功能。
|
||||
* 引入了最新的长期支持,来自 Ubuntu 的 [硬件支持栈][10]。
|
||||
* “<ruby>反馈<rt>Feedback</rt></ruby>” 应用已被改进,现在包含有搜索栏并已迁移到 GTK 4。
|
||||
* “<ruby>邮件<rt>Mail</rt></ruby>” 应用完全重做,带来了更稳定的用户体验。
|
||||
* 已集成 [GNOME Web 44.6][11]。
|
||||
* 核心应用得到了各种更新。
|
||||
|
||||
我建议你阅读官方的 [发布说明][12] ,以更深入地了解此版本。
|
||||
|
||||
### 📥 下载 elementary OS 7.1
|
||||
|
||||
由于 elementary OS 是一种 “看着给” 发行版,你可以前往 [官方网站][13] 购买或免费下载它。
|
||||
|
||||
> **[elementary OS 7.1][13]**
|
||||
|
||||
你也可以选择他们网站上列出的一些硬件零售商,他们提供预装发行版的笔记本电脑和台式机。
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/elementary-os-7-1/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/elementary-os-7-release/
|
||||
[2]: https://news.itsfoss.com/content/images/2023/10/elementary-OS-7.1_1.jpg
|
||||
[3]: https://itsfoss.com/beautiful-linux-distributions/
|
||||
[4]: https://news.itsfoss.com/content/images/2023/10/elementary-OS-7.1_2.png
|
||||
[5]: https://www.freedesktop.org/wiki/
|
||||
[6]: https://news.itsfoss.com/content/images/2023/10/elementary-OS-7.1_3.png
|
||||
[7]: https://en.wikipedia.org/wiki/Color_blindness
|
||||
[8]: https://news.itsfoss.com/content/images/2023/10/elementary-OS-7.1_4.png
|
||||
[9]: https://news.itsfoss.com/content/images/2023/10/elementary-OS-7.1_5.png
|
||||
[10]: https://wiki.ubuntu.com/Kernel/LTSEnablementStack
|
||||
[11]: https://gitlab.gnome.org/GNOME/epiphany/-/releases/44.6
|
||||
[12]: https://blog.elementary.io/os-7-1-available-now/
|
||||
[13]: https://elementary.io/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/06/232453yxlnckyvn3bb28n9.jpg
|
||||
126
published/202310/20231005 Install Brave on Arch Linux.md
Normal file
126
published/202310/20231005 Install Brave on Arch Linux.md
Normal file
@@ -0,0 +1,126 @@
|
||||
[#]: subject: "Install Brave on Arch Linux"
|
||||
[#]: via: "https://itsfoss.com/install-brave-arch-linux/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16291-1.html"
|
||||
|
||||
在 Arch Linux 上安装 Brave
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 在这篇初学者教程中,学习在 Arch Linux 中安装 Brave 浏览器。
|
||||
|
||||
Firefox 和 Brave 是我日常浏览网页的程序。
|
||||
|
||||
当我安装带有 GNOME 的 Arch Linux 时,它有 GNOME Web 浏览器。这是一个不错的浏览器,但我不能接受它,因为我需要保存的密码、浏览历史记录和插件。
|
||||
|
||||
因此,我开始安装我最喜欢的网络浏览器,因此本教程是关于在 Arch Linux 中安装 Brave。
|
||||
|
||||
如果你安装了 Yay(或任何其他 AUR 帮助程序),那么安装 Brave 就像使用以下命令一样简单:
|
||||
|
||||
```
|
||||
yay -S brave-bin
|
||||
```
|
||||
|
||||
是的!就这么简单。让我们详细看看。
|
||||
|
||||
> 💡 Manjaro 内置了 AUR 支持。你可以使用 Pamac 软件中心或 `pamac`/`pacman` 命令在 Manjaro 中安装 Brave。
|
||||
|
||||
### 在 Arch Linux 上安装 Brave 浏览器
|
||||
|
||||
Brave 在官方 Arch 仓库中不可用。但是,它可以在 AUR(Arch 用户仓库)中使用,并且可以使用 Yay 等 AUR 帮助程序轻松安装。
|
||||
|
||||
如果你没有 Yay 或任何其他 AUR 帮助程序,请逐一使用这些命令来 [安装 Yay][1]:
|
||||
|
||||
```
|
||||
sudo pacman -S --needed base-devel git
|
||||
git clone https://aur.archlinux.org/yay.git
|
||||
cd yay
|
||||
makepkg -si
|
||||
```
|
||||
|
||||
安装 Yay 后,用它来安装 Brave:
|
||||
|
||||
```
|
||||
yay -S brave-bin
|
||||
```
|
||||
|
||||
不用担心。它最终会要求你输入密码。
|
||||
|
||||
如果这是你第一次安装浏览器,系统可能会要求你选择字体提供方。使用默认选择或选择任何其他选项。
|
||||
|
||||
![][2]
|
||||
|
||||
接下来,它会询问你有关清理构建的问题。Yay 询问你是否应该重新下载软件包(和依赖项)并再次构建它或使用早期构建的缓存(如果有)。
|
||||
|
||||
你可以按回车键继续操作,这应该意味着不清理构建。
|
||||
|
||||
![][3]
|
||||
|
||||
事实上,当你看到默认选项时,你可以继续按回车键。
|
||||
|
||||
在实际安装之前,系统会要求你输入帐户密码。输入你的密码并继续该过程。它将下载大小约为 350 MB 的文件:
|
||||
|
||||
![][4]
|
||||
|
||||
安装后,在系统菜单中查找 [Brave browser][5] 并从那里运行它。
|
||||
|
||||
![][6]
|
||||
|
||||
### 保持 Brave 更新
|
||||
|
||||
你可以使用以下命令更新通过 Yay 安装的 AUR 软件包来保持 Brave 浏览器更新:
|
||||
|
||||
```
|
||||
yay -Sua
|
||||
```
|
||||
|
||||
### 从 Arch 中删除 Brave
|
||||
|
||||
不喜欢 Brave? 不用担心。你可以轻松将其删除。
|
||||
|
||||
与任何其他软件一样,使用 `pacman` 命令从 Arch 中删除 Brave:
|
||||
|
||||
```
|
||||
sudo pacman -Rs brave-bin
|
||||
```
|
||||
|
||||
### 总结
|
||||
|
||||
AUR 再次拯救你! 安装 Brave 变得非常简单。
|
||||
|
||||
顺便说一句,我注意到 Brave 不知何故成为打开图像的默认应用。这意味着,双击图像将在新的 Brave 窗口中打开它们。
|
||||
|
||||
我必须通过右键单击图像并选择“打开方式”选项再次将图像查看器设置为默认值。
|
||||
|
||||
![Somehow Brave becomes the default image viewer. You should change it][7]
|
||||
|
||||
在接下来的几天里,我将分享更多我的 Arch 经验。敬请关注!
|
||||
|
||||
*(题图:MJ/46bf8413-5fe1-41aa-b6f3-a5e660efce2b)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/install-brave-arch-linux/
|
||||
|
||||
作者:[Abhishek Prakash][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://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/install-yay-arch-linux/
|
||||
[2]: https://itsfoss.com/content/images/2023/10/yay-install-brave-font-install.png
|
||||
[3]: https://itsfoss.com/content/images/2023/10/clean-build-yay.png
|
||||
[4]: https://itsfoss.com/content/images/2023/10/installing-brave-arch-linux.png
|
||||
[5]: https://brave.com/
|
||||
[6]: https://itsfoss.com/content/images/2023/10/run-brave-arch-linux.png
|
||||
[7]: https://itsfoss.com/content/images/2023/10/open-images-in-viewer-not-brave.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/17/103648le2r0e688pef1v22.jpg
|
||||
@@ -0,0 +1,135 @@
|
||||
[#]: subject: "This Open-Source App Helps You Stay Focused"
|
||||
[#]: via: "https://news.itsfoss.com/pomatez/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16268-1.html"
|
||||
|
||||
开源应用 Pomatez 使你保持专注
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Pomatez 应用可以提升你的效率,它为你的时间管理带来了巨大帮助。
|
||||
|
||||
你是否对 “番茄工作法” 有所了解呢?
|
||||
|
||||
这是一种 **时间管理方法**,于 1980 年代末期开发,通过定时器将工作划分为一定的时间间隔,每间隔 25 分钟后进行短暂的休息,如此循环直至任务完成。
|
||||
|
||||
这种方法在近些年变得越来越流行,有很多应用程序以 <ruby>[番茄工作法][1]<rt>Pomodoro Technique</rt></ruby> 作为主要的卖点。
|
||||
|
||||
这里我们将介绍一个采用这种方法的应用,它名为 “Pomatez”,并且是 **原生支持 Linux 平台的开源应用**。Pomatez 为时间管理提供了所需的全部工具。
|
||||
|
||||
其实这并不是我们第一次介绍这种应用,之前有一种应用叫 “Reminders”,功能类似,但并未采用番茄工作法。
|
||||
|
||||
> **[Reminders:一个漂亮的开源 Linux 应用,可帮助你完成工作][2]**
|
||||
|
||||
现在我来详述一下你可以用 Pomatez 应用做些什么。
|
||||
|
||||
### Pomatez: 概述 ⭐
|
||||
|
||||
![][4]
|
||||
|
||||
Pomatez 使用 TypeScript 编程语言编写,是一款极好的工具,能让你在执行重要任务的同时安排适时的休息,保持专注。
|
||||
|
||||
Pomatez 的关键特性包括:
|
||||
|
||||
* 内置的任务列表
|
||||
* 桌面通知
|
||||
* 可定制的规则
|
||||
|
||||
#### 初次使用感受 👨💻
|
||||
|
||||
我在我的 Ubuntu 22.04 LTS 系统上安装了它,体验了它的功能表现。
|
||||
|
||||
首先,我在 “<ruby>任务列表<rt>Task List</rt></ruby>” 部分填充了一些当日必须完成的重要任务和一些不太重要的任务。
|
||||
|
||||
一切就绪后,你将不会感到失望的 👇
|
||||
|
||||
![][7]
|
||||
|
||||
然后,我进入 “<ruby>配置<rt>Config</rt></ruby>” 栏,按照自己的喜好进行了规则调整。
|
||||
|
||||
“<ruby>保持专注<rt>Stay focus</rt></ruby>” 为执行任务的时间长度,“<ruby>短暂休息<rt>Short break</rt></ruby>” 为短暂的休息时间,“<ruby>长休息<rt>Long break</rt></ruby>” 为更长的休息时间,以及 “<ruby>会话轮次<rt>Session rounds</rt></ruby>” 为定时器的会话数量。
|
||||
|
||||
这里还有一个 “<ruby>特殊休息<rt>Special Breaks</rt></ruby>” 部分,可以用来安排比如午餐、晚餐的特定休息时间。
|
||||
|
||||
![][9]
|
||||
|
||||
接下来,我进入 “<ruby>计时器<rt>Timer</rt></ruby>” 栏,此处显示了首个待处理任务,一列显示的是会话数以及控制定时器/会话的选项。
|
||||
|
||||
这里有一个重置定时器的按钮,一个开始/停止定时器的按钮,一个按规则进入下一阶段的按钮,一个调节音量的按钮,以及一个切换至 “<ruby>精简模式<rt>Compact mode</rt></ruby>”(位于右下角)的按钮。
|
||||
|
||||
![][10]
|
||||
|
||||
我按下 “开始” 按钮启动了定时器,并开始查看了任务的可执行操作。我可以标记任务为 “<ruby>完成<rt>Done</rt></ruby>”,跳过任务,或者从应用中删除任务。
|
||||
|
||||
![][11]
|
||||
|
||||
随着任务的推进,我通过按下带一个框和向下箭头图标的按钮,将 Pomatez 切换到了 “<ruby>精简模式<rt>Compact mode</rt></ruby>”。
|
||||
|
||||
这样我得到了一个更小巧的,节省空间的界面。当我完成任务后,我停止了计时器并将任务标记为 “<ruby>完成<rt>Done</rt></ruby>”。
|
||||
|
||||
![][12]
|
||||
|
||||
随后,我转到 “<ruby>设置<rt>Settings</rt></ruby>” 栏,看看我可以调整哪些选项,我发现它给我了不少惊喜。
|
||||
|
||||
我可以调整应用行为,如设置为 “<ruby>始终在顶部<rt>Always On Top</rt></ruby>”, 启用“<ruby>深色主题<rt>Dark Theme</rt></ruby>” 和 “<ruby>语音助手<rt>Voice Assiastance</rt></ruby>” 等。
|
||||
|
||||
![][13]
|
||||
|
||||
Pomatez 还支持键盘快捷键,虽然我期望它能提供通过键盘快捷键控制计时器的功能。
|
||||
|
||||
或许他们可以考虑在未来的版本中参考我的反馈意见?我希望他们可以!
|
||||
|
||||
![][14]
|
||||
|
||||
总体而言,如果你希望改进日常工作流程,这款应用值得尝试。
|
||||
|
||||
最好的是,它是一个跨平台的应用,不仅可以在 Linux 所有现代发行版上运行,你在 Windows 和 macOS 系统上也可以试用。
|
||||
|
||||
### 📥 下载 Pomatez
|
||||
|
||||
Pomatez 提供了 Linux 平台的 .deb、AppImage 和 .rpm 安装包。你还可以找到它的 Snap 包。
|
||||
|
||||
你可以从官方网站,Snap 商店 或其在 GitHub 上的仓库获取你需要的包。
|
||||
|
||||
> **[Pomatez(GitHub)][15]**
|
||||
|
||||
你之前用过这样的应用吗?请在下方的评论区告诉我们吧!
|
||||
|
||||
*(题图:MJ/af06ca24-ec64-471f-92e0-76cedf3837ea)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/pomatez/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://en.wikipedia.org/wiki/Pomodoro_Technique
|
||||
[2]: https://linux.cn/article-15852-1.html
|
||||
[3]: https://news.itsfoss.com/content/images/size/w256h256/2022/08/android-chrome-192x192.png
|
||||
[4]: https://news.itsfoss.com/content/images/2023/09/Pomatez_1.png
|
||||
[5]: https://www.typescriptlang.org/
|
||||
[6]: https://news.itsfoss.com/ubuntu-22-04-release/
|
||||
[7]: https://news.itsfoss.com/content/images/2023/09/Pomatez_2.png
|
||||
[8]: https://giphy.com/gifs/cute-sloth-slothilda-26xoplW0VhLLByrAY
|
||||
[9]: https://news.itsfoss.com/content/images/2023/09/Pomatez_3.png
|
||||
[10]: https://news.itsfoss.com/content/images/2023/09/Pomatez_4.png
|
||||
[11]: https://news.itsfoss.com/content/images/2023/09/Pomatez_5a.png
|
||||
[12]: https://news.itsfoss.com/content/images/2023/10/Pomatez_5b.png
|
||||
[13]: https://news.itsfoss.com/content/images/2023/09/Pomatez_6.png
|
||||
[14]: https://news.itsfoss.com/content/images/2023/09/Pomatez_7.png
|
||||
[15]: https://zidoro.github.io/pomatez/
|
||||
[16]: https://snapcraft.io/pomatez
|
||||
[17]: https://github.com/zidoro/pomatez/releases/tag/v1.3.0
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/09/135249tc48b4ophxcbcxuz.jpg
|
||||
@@ -0,0 +1,235 @@
|
||||
[#]: subject: "Ubuntu vs Kubuntu: Which is the Better Choice for You?"
|
||||
[#]: via: "https://itsfoss.com/ubuntu-vs-kubuntu/"
|
||||
[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16263-1.html"
|
||||
|
||||
Ubuntu 与 Kubuntu:哪一个更适合你?
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 对于 Ubuntu 和其相关版本如 Kubuntu 的选择可能会令人迷惑。那就让我们简化这个选择过程吧。
|
||||
|
||||
Ubuntu 是桌面用户最选择的 Linux 发行版。其特色是一个定制的 GNOME 桌面,可以提供流畅的用户体验。振奋人心!
|
||||
|
||||
而另一方面,Kubuntu 是 [Ubuntu 发行版家族][1] 中的一员,特色在于其 **KDE Plasma 桌面**。
|
||||
|
||||
本质上,这两种发行版非常类似,主要区别在于 [桌面环境][2]。
|
||||
|
||||
_那么,它二者有何明显不同点?是否一个比另外一个更好?对于你来说,何种发行版更为适合?_
|
||||
|
||||
接下来,我们将比较下它们之间的主要不同,并提供一些基本信息以助你做出选择。
|
||||
|
||||
> 📋 本篇文章的对比依据是 Ubuntu 23.04 以及 Kubuntu 23.04。随着未来版本的发布,可能会有一些变动,我们也会持续进行更新。
|
||||
|
||||
### 桌面环境
|
||||
|
||||
Ubuntu 的特色在于使用了 [GNOME][3] 桌面的定制外观。对于新的 Linux 用户来说,这个布局独特且易用。
|
||||
|
||||
![Ubuntu 23.04 主屏幕截图][4]
|
||||
|
||||
它并不与 Fedora Linux 的原生 GNOME 体验完全相同。Ubuntu 的桌面环境体验经过了一些改动。
|
||||
|
||||
Kubuntu 提供了原生的 [KDE Plasma][5] 体验。对于从 Windows 平台转换来的用户,布局会感到相当熟悉,包含开始菜单、系统小工具等等。
|
||||
|
||||
![Kubuntu 23.04 截图][6]
|
||||
|
||||
如果你尝试过任何其他带有 KDE Plasma 桌面的发行版,其体验应该差不多。
|
||||
|
||||
它们都是一些极为出色的 [桌面环境][7],所以,你基于各种布局、定制性和特性选择它们中的哪一个都没有什么问题。
|
||||
|
||||
为了进行更多的参考,下面是 Ubuntu 的登录页面所呈现的样子:
|
||||
|
||||
![][8]
|
||||
|
||||
接下来,我们看一下带有 X11 桌面会话的 Kubuntu 登录屏幕:
|
||||
|
||||
![][9]
|
||||
|
||||
此外,我为你提供了一份详细的指南,如果你想深入研究,可以参考这份 [KDE 与 GNOME][10] 的对比指南:
|
||||
|
||||
> **[KDE 与 GNOME:Linux 桌面终极之选][10]**
|
||||
|
||||
> 💡 根据发行版版本,例如 [长期支持版][12](LTS)还是非 LTS,桌面环境及特征集会有所不同。
|
||||
>
|
||||
> 举例来说,如果你选择像 Ubuntu 23.10 或 Kubuntu 23.10 这样的非 LTS 版本,你可以获得更新的桌面版本 —— [GNOME 45][13] 或 [KDE Plasma 5.27][14]。
|
||||
>
|
||||
> 而对于 Ubuntu 22.04 LTS,提供的则是稍旧一些的桌面版本—— [GNOME 42][15] 或 [KDE Plasma 5.24][16]。
|
||||
|
||||
### 软件管理
|
||||
|
||||
由于 Ubuntu 和 Kubuntu 其核心都是 Ubuntu(或 Debian),因此可以期待在这两个版本上安装同样的应用程序。
|
||||
|
||||
但是,你用来管理或安装应用程序的应用商店在每个版本中都是不同的。
|
||||
|
||||
![][17]
|
||||
|
||||
对于 Ubuntu,它使用 <ruby>软件中心<rt>Software Center</rt></ruby> 或者 <ruby>Ubuntu 应用中心<rt>Ubuntu App Center</rt></ruby>(从 [Ubuntu 23.10][18] 开始的新版本),默认集成了 Snap。因此,如果你更倾向于使用 Snap 而不是 Flatpak,Ubuntu 就可以提供以无缝的安装体验。
|
||||
|
||||
![][19]
|
||||
|
||||
想要使用 Flathub 的包,你可以按照我们的 [Flatpak 使用指南][20] 进行操作,但 Ubuntu 的软件管理器并未提供整合。
|
||||
|
||||
提及 Kubuntu,你得到的软件管理器是 “<ruby>发现<rt>Discover</rt></ruby>” 应用。你也可以从软件仓库以及 Snap 包中安装应用。
|
||||
|
||||
![][21]
|
||||
|
||||
与 Ubuntu 的软件商店相较,“发现”应用在轻松整合 Flatpak 方面更具**灵活性**。
|
||||
|
||||
你只需多击几下,就可以在设置菜单中通过 **Flatpak 后端插件** 在“发现”应用里列出来自 Flathub 的应用。
|
||||
|
||||
![][22]
|
||||
|
||||
### 软件与功能点差异
|
||||
|
||||
有些用户更注重在特定发行版中能做什么,以及开箱即用的软件工具。
|
||||
|
||||
![Kubuntu 中的屏幕截图操作][23]
|
||||
|
||||
他们并不在意桌面布局或锁屏和登录屏幕的界面如何。他们只在乎**功能特性**,就如你在这里看到的图片展示的那样。
|
||||
|
||||
![Ubuntu 的快速切换菜单][24]
|
||||
|
||||
> 📋 可用的功能会依据发行版的版本和软件而有所不同。然而,我相信,一些让它们各自独特之处值得你了解,这些可能有助于你的选择。
|
||||
|
||||
一些重要的功能点如下:
|
||||
|
||||
* Kubuntu 的默认屏幕截图工具提供了注释和编辑功能,而 Ubuntu 则没有这功能。
|
||||
* Kubuntu 的文件管理器比 Ubuntu 的包含更多的特性。
|
||||
* 作为桌面环境选项,Kubuntu 提供了更多的预装应用。
|
||||
* 相比于 Ubuntu,Kubuntu 提供了更多的外观定制选项。
|
||||
* Kubuntu 默认使用 KDE “<ruby>连接<rt>Connect</rt></ruby>” 应用连接你的移动设备。你也可以在 Ubuntu 进行相同的安装以获取这个功能。
|
||||
* 在 Ubuntu 上,简易化并自动化的工作空间增加功能易于改进工作流。你可以在 Kubuntu 上增加虚拟桌面,但需手动操作。
|
||||
* Ubuntu 具有快捷切换到深色/浅色模式的功能。
|
||||
* Ubuntu 针对经常被海量选项所困扰的用户,更加注重简单易用的操作方式。
|
||||
|
||||
### 发布周期
|
||||
|
||||
如 Ubuntu 18.04 和 Ubuntu 22.04 这类的 Ubuntu LTS 版本,会在其发布之日后的**五年**内接受软件更新和安全补丁。
|
||||
|
||||
此外,如果你希望长期使用同一版本,你可以选择开通 [Ubuntu Pro 订阅][25](个人使用免费),它将为你提供**额外五年的更新支持**。
|
||||
|
||||
而对于非 LTS 版本,如 Ubuntu 22.10 和 Ubuntu 23.04,则会提供**九个月的维护更新**。
|
||||
|
||||
> 💡 对大部分用户来说,我们推荐使用 LTS 版本。只有在你准备好在九个月之后升级你的系统,以获取最新最好的软件时,才推荐尝试非 LTS 版本。
|
||||
|
||||
如果你对这些术语感到不熟,我建议你阅读我们的一些资源,深入理解发布周期:
|
||||
|
||||
* [Ubuntu 的生命周期终止期指的是什么?][26]
|
||||
* [长期支持版是什么意思?][12]
|
||||
|
||||
总的来说,选择 Ubuntu,你可以获得**相当长的支持选项**。
|
||||
|
||||
大部分用户可能会认为,由于 Kubuntu 是 Ubuntu 的官方发行版,它们应该具有相同的更新周期。遗憾的是,**并非如此**。
|
||||
|
||||
在 Kubuntu 中,其**长期支持版从发布之日起仅支持三年**。非长期支持版的更新维护期仅为**九个月**。并无任何扩展软件更新期的选项。
|
||||
|
||||
### 安装
|
||||
|
||||
不论是 Ubuntu 还是 Kubuntu,其安装过程都相当直观且易于理解。
|
||||
|
||||
你将注意到的唯一不同之处在于用户界面及其一些选项。
|
||||
|
||||
以下是 Kubuntu 的截图:
|
||||
|
||||
![][27]
|
||||
|
||||
![][28]
|
||||
|
||||
尽管它们的界面有所不同,但安装过程都极其简便。
|
||||
|
||||
这里是 Ubuntu 的一个安装界面截图:
|
||||
|
||||
![][29]
|
||||
|
||||
![][30]
|
||||
|
||||
Ubuntu 近期发布的版本极大地改进了安装器的用户体验。所以,用户在点击步骤进行安装时,可能会觉得更加简洁明了。
|
||||
|
||||
例如,安装 Ubuntu 后,你或许可以立即选择深色或浅色模式,然而在 Kubuntu 中这样的选项并不可用。
|
||||
|
||||
![][31]
|
||||
|
||||
### 系统资源使用
|
||||
|
||||
这里不会有赢家或输家,但基本上,Kubuntu 上的桌面环境(KDE Plasma)更轻量也更注重性能。
|
||||
|
||||
Ubuntu 的 GNOME 则设计得直观,为你提供了顺畅的用户体验。
|
||||
|
||||
举个例子,基于我的测试,Ubuntu 在启动后会马上占用大约 **1.5 GB 的内存**:
|
||||
|
||||
![][32]
|
||||
|
||||
而在 Kubuntu 中,启动后占用的内存约为 1.2 GB:
|
||||
|
||||
![][33]
|
||||
|
||||
没错,Kubuntu 的系统监控看起来功能稍多一些。但这就是全部了。
|
||||
|
||||
因此,在资源使用方面,虽然你在纸面上可能观察到明显的差异,但在实践中,它可能根本不会对你产生影响。
|
||||
|
||||
### 你应该选择哪个?
|
||||
|
||||
在选择一个适合日常使用的 Linux 发行版时,你的工作流以及布局都是需要考虑的因素。
|
||||
|
||||
**如果你熟悉 Windows 平台,Kubuntu 应是一个好选择**(甚至是从 Windows 平台转换过来的用户)。
|
||||
|
||||
**如果你理解并乐意接受 GNOME 的布局,Ubuntu 可以为你提供简单且现代的体验。**
|
||||
|
||||
但不管是哪种情况,**如果你希望能有高度的可定制性和大量实用工具,Kubuntu 会是一个理想的选择**。反而,**如果你更偏爱简约清晰的布局,选择 Ubuntu 一定不会错**。
|
||||
|
||||
💬 你更偏好哪一个 Linux 发行版,是什么让你做出这样的选择呢?
|
||||
|
||||
*(题图:MJ/dbde3529-ecea-4411-a53e-6e75b4e388db)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/ubuntu-vs-kubuntu/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/which-ubuntu-install/
|
||||
[2]: https://itsfoss.com/what-is-desktop-environment/
|
||||
[3]: https://www.gnome.org/
|
||||
[4]: https://itsfoss.com/content/images/2023/10/ubuntu-23-04-home-with-wallpaper.jpg
|
||||
[5]: https://kde.org/plasma-desktop/
|
||||
[6]: https://itsfoss.com/content/images/2023/10/kubuntu-23-04-home.png
|
||||
[7]: https://itsfoss.com/best-linux-desktop-environments/
|
||||
[8]: https://itsfoss.com/content/images/2023/10/ubuntu-log-in-screen.jpg
|
||||
[9]: https://itsfoss.com/content/images/2023/10/kubuntu-login.jpg
|
||||
[10]: https://itsfoss.com/kde-vs-gnome/
|
||||
[11]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[12]: https://itsfoss.com/long-term-support-lts/
|
||||
[13]: https://news.itsfoss.com/gnome-45/
|
||||
[14]: https://news.itsfoss.com/kde-plasma-5-27-release/
|
||||
[15]: https://news.itsfoss.com/gnome-42-features/
|
||||
[16]: https://news.itsfoss.com/kde-plasma-5-24-lts-release/
|
||||
[17]: https://itsfoss.com/content/images/2023/10/ubuntu-23-04-software-center.png
|
||||
[18]: https://news.itsfoss.com/ubuntu-23-10/
|
||||
[19]: https://itsfoss.com/content/images/2023/10/ubuntu-softwar-center-app.png
|
||||
[20]: https://itsfoss.com/flatpak-guide/
|
||||
[21]: https://itsfoss.com/content/images/2023/10/kde-discover.png
|
||||
[22]: https://itsfoss.com/content/images/2023/09/kubuntu-discover-23-04.jpg
|
||||
[23]: https://itsfoss.com/content/images/2023/10/kde-spectacle.jpg
|
||||
[24]: https://itsfoss.com/content/images/2023/10/quick-toggles-on-ubuntu.jpg
|
||||
[25]: https://ubuntu.com/pro
|
||||
[26]: https://itsfoss.com/end-of-life-ubuntu/
|
||||
[27]: https://itsfoss.com/content/images/2023/10/kubuntu-installation-1.jpg
|
||||
[28]: https://itsfoss.com/content/images/2023/10/kubuntu-installation.jpg
|
||||
[29]: https://itsfoss.com/content/images/2023/10/8-location.png
|
||||
[30]: https://itsfoss.com/content/images/2023/10/6-Disk-layout.png
|
||||
[31]: https://itsfoss.com/content/images/2023/10/10-light-and-dark-mode.png
|
||||
[32]: https://itsfoss.com/content/images/2023/10/ubuntu-resources.png
|
||||
[33]: https://itsfoss.com/content/images/2023/10/kubuntu-system-resources.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/08/104715hv9msvt1segmozs4.jpg
|
||||
@@ -0,0 +1,93 @@
|
||||
[#]: subject: "Add Minimize and Maximize Buttons in GNOME"
|
||||
[#]: via: "https://itsfoss.com/gnome-minimize-button/"
|
||||
[#]: author: "Abhishek Prakash https://itsfoss.com/author/abhishek/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16295-1.html"
|
||||
|
||||
在 GNOME 中添加最小化和最大化按钮
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 缺少了 GNOME 中的最小化按钮选项?下面教你如何轻松找回它。
|
||||
|
||||
与 Ubuntu 不同,[Fedora][1] 和 Arch Linux 等发行版为你提供了原生的 GNOME,但可能让你烦恼的一件事是应用窗口上缺少最小化和最大化按钮。
|
||||
|
||||
![No minimize or maximize button in application windows, only close button][2]
|
||||
|
||||
GNOME 希望你使用应用切换器(`Alt+Tab`)或使用活动区(`Super` 键)在正在运行的应用之间切换,而不是最小化它。
|
||||
|
||||
好消息是,如果你不喜欢的话,你不必这样。
|
||||
|
||||
让我分享一下如何使用 GUI 和命令行选项恢复 GNOME 中的最小化和最大化按钮。
|
||||
|
||||
### 方法 1:使用 GNOME 优化工具启用最小化和最大化按钮
|
||||
|
||||
GNOME <ruby>优化<rt>Tweaks</rt></ruby> 工具允许你自定义 GNOME 的各个方面。启用最小化窗口按钮就是其中之一。
|
||||
|
||||
首先使用发行版的包管理器安装 GNOME 优化工具。
|
||||
|
||||
运行应用并从左侧边栏进入 Windows 标题栏。你将在此处看到添加最小化和最大化按钮的选项,
|
||||
|
||||
![][3]
|
||||
|
||||
你可以选择其中一个或两者。如果你不再需要它,**你可以在 GNOME 调整工具中以相同的方式禁用按钮**。
|
||||
|
||||
> 💡 如果需要,你还可以选择将这些控制按钮放在左侧。该选项位于标题栏按钮选项的末尾。
|
||||
|
||||
### 方法 2:使用命令行启用最小化和最大化按钮
|
||||
|
||||
`gsettings` 命令可以选择更改按钮布局并添加最小化和最大化按钮。
|
||||
|
||||
```
|
||||
gsettings set org.gnome.desktop.wm.preferences button-layout ":minimize,maximize,close"
|
||||
```
|
||||
|
||||
正如你所猜测的,如果你想要**禁用任何按钮,你可以运行相同的命令,但从命令中省略不需要的按钮**。
|
||||
|
||||
> 💡 你还可以通过将冒号放在命令的右侧来将 Windows 控制按钮移动到左侧:
|
||||
>
|
||||
> ```
|
||||
> gsettings set org.gnome.desktop.wm.preferences button-layout "close,minimize,maximize:"
|
||||
> ```
|
||||
|
||||
### 受到 macOS 的启发并不总是一件好事
|
||||
|
||||
显然,这种“无最小化按钮”的设计灵感来自苹果的 macOS。我记得大约 10 年前,macOS 曾经将窗口控件放在左侧。因此 Ubuntu Unity 也尝试默认将控件保留在左侧。
|
||||
|
||||
苹果很奇怪。他们大多数时候都有很好的设计,但有时他们会优先考虑设计而不是使用体验。“Magic Mouse” 就是一个例子。
|
||||
|
||||
> “Magic Mouse 深受用户喜爱”。你确定?
|
||||
>
|
||||
> ![][4]
|
||||
>
|
||||
> — Stuart (@stuwieface) [2021 年 4 月 20 日][5]
|
||||
|
||||
我不明白为什么 GNOME 开发者需要从各种设计中获得灵感,尤其是那些糟糕的设计。
|
||||
|
||||
但那只是我的个人意见。我很高兴有一个快速简单的解决方案可以恢复 GNOME 中的最小化和最大化按钮。
|
||||
|
||||
*(题图:MJ/f8ce0441-3d9b-498c-8e23-e48f7a90d040)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/gnome-minimize-button/
|
||||
|
||||
作者:[Abhishek Prakash][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://itsfoss.com/author/abhishek/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/best-fedora-linux-distributions/
|
||||
[2]: https://itsfoss.com/content/images/2023/10/missing-minimize-button-gnome.png
|
||||
[3]: https://itsfoss.com/content/images/2023/10/enable-minimize-maximize-windows-option-gnome-tweaks.png
|
||||
[4]: https://pbs.twimg.com/media/EzbzOQOXsAAwdE0?format=jpg&name=medium
|
||||
[5]: https://twitter.com/stuwieface/status/1384561367223521286?ref_src=twsrc%5Etfw
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/18/104631i5gbbz3mwkfp5gmu.jpg
|
||||
@@ -0,0 +1,85 @@
|
||||
[#]: subject: "Cloudflare Unveils Free Privacy-Friendly Replacement to the Annoying CAPTCHA System"
|
||||
[#]: via: "https://news.itsfoss.com/cloudflare-captcha-replacement/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16271-1.html"
|
||||
|
||||
Cloudflare 推出免费的、更注重隐私的替代验证码系统
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Cloudflare 最终提出了一种可结束视觉难题的解决方案。
|
||||
|
||||
自 [去年][1] 以来,Cloudflare 一直在研发一种更加注重隐私的验证码(CAPTCHA)替代系统。
|
||||
|
||||
可恶的验证码(尤其是谷歌的 reCAPTCHA)的问题是其无必要地收集用户数据、延迟体验时间、在网络导航中造成不便。
|
||||
|
||||
当然,验证码在一定程度上具有其用处。如果我声称它一无是处,无疑会显得无知。然而,随着技术的发展,以及为了提供无缝体验,我们所有的 [隐私保护工具][2] 都在不断进步,我们也需要一个连贯的系统来保护网站免受机器人的侵扰。
|
||||
|
||||
令人感兴趣的是,Cloudfare 设法整合了一项**每个人都可以免费使用作为替代品的技术**,那就是**Cloudflare Turnstile**。和每个 Cloudflare 的产品一样,你可以得到一个 "_Enterprise_" 计划,能够移除其品牌标识,并做一些其他操作。
|
||||
|
||||
### Cloudflare Turnstile:彻底摆脱验证码!
|
||||
|
||||
有了 [Cloudflare Turnstile][4],你将永远不再需要解答任何视觉难题。
|
||||
|
||||
一开始,即使是它的自家隐私优先的验证码系统也会向部分用户展示难题。
|
||||
|
||||
现在,所有这些都已被他们的新产品替换。你只需进行一次点击,就可以验证你是人类:
|
||||
|
||||
![来源:Cloudflare 博客][5]
|
||||
|
||||
为了确保隐私保护目标的实现,Cloudflare 作出了以下说明:
|
||||
|
||||
> 我们创立 Turnstile 就是为了保护隐私。Turnstile 达到了 <ruby>[电子隐私指令][6]<rt>ePrivacy Directive</rt></ruby>、[GDPR][7] 及 [CCPA][8] 的合规性要求,也符合我们自己严格的隐私承诺。此外,Cloudflare 的 [FedRAMP Moderate 授权套餐][9]、"Cloudflare for Government" 现在也包括 Turnstile。我们并不依赖于追踪用户数据,比如用户访问过其他哪些网站,来判断用户是人还是机器人。我们的业务是保护网站,而不是卖广告,因此,运营商可以放心部署 Turnstile,知道他们的用户数据安全无虞。
|
||||
|
||||
此外,Cloudflare 认为,即使不向用户提供任何交互元素,它也能比现有的验证码系统更有效。它可以保护网站免受机器人流量,以及欺诈行为的侵害。
|
||||
|
||||
所以,有些人可能甚至不会看到人类验证的挑战,因为 Cloudflare 已经通过后台进行了一系列的检查和分析以发现可疑行为。
|
||||
|
||||
**有什么更让人兴奋的吗?**
|
||||
|
||||
![][10]
|
||||
|
||||
所有这些都是免费提供的。任何不使用 Cloudflare 作为防火墙或 CDN 的网站或平台,只需添加**几行代码**,即可选择使用本服务。
|
||||
|
||||
> **[Cloudflare Turnstile][4]**
|
||||
|
||||
你还可以按照官方 [文档][14] 的指南,从 [reCAPTCHA][12] 或 [hCAPTCHA][13] 迁移到该系统。
|
||||
|
||||
欲了解更多技术信息,你可以查看 [Cloudflare 的公告][15]。
|
||||
|
||||
💬 你如何评价 Cloudflare 的新系统,能在无需验证码的情况下阻挡机器人并提升用户体验呢?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/cloudflare-captcha-replacement/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/cloudflare-pat/
|
||||
[2]: https://itsfoss.com/privacy-tools/
|
||||
[3]: https://proton.go2cloud.org/favicons/apple-touch-icon.png
|
||||
[4]: https://www.cloudflare.com/en-in/products/turnstile/
|
||||
[5]: https://news.itsfoss.com/content/images/2023/10/cloudflare-turnstile.gif
|
||||
[6]: https://www.cloudflare.com/learning/privacy/what-is-eprivacy-directive/
|
||||
[7]: https://www.cloudflare.com/learning/privacy/what-is-the-gdpr/
|
||||
[8]: https://www.cloudflare.com/learning/privacy/what-is-the-ccpa/
|
||||
[9]: https://marketplace.fedramp.gov/products/FR2000863987
|
||||
[10]: https://news.itsfoss.com/content/images/2023/10/turnsite-dashboard.jpg
|
||||
[11]: https://linuxhandbook.com/content/images/size/w256h256/2021/08/Linux-Handbook-New-Logo.png
|
||||
[12]: https://www.google.com/recaptcha/about/
|
||||
[13]: https://www.hcaptcha.com/
|
||||
[14]: https://developers.cloudflare.com/turnstile/migration/
|
||||
[15]: https://blog.cloudflare.com/turnstile-ga/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/10/104321aioinl13v7i9nz6b.jpg
|
||||
187
published/202310/20231010 How to Add Comments in Bash Scripts.md
Normal file
187
published/202310/20231010 How to Add Comments in Bash Scripts.md
Normal file
@@ -0,0 +1,187 @@
|
||||
[#]: subject: "How to Add Comments in Bash Scripts"
|
||||
[#]: via: "https://itsfoss.com/bash-comments/"
|
||||
[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16298-1.html"
|
||||
|
||||
如何在 Bash 脚本中添加注释
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 你有要说明的地方吗?请将它们添加到你的 Bash 脚本中。
|
||||
|
||||
在 Bash 脚本中添加注释是保持代码整洁且易于理解的最有效方法之一。
|
||||
|
||||
你可能会问为什么。
|
||||
|
||||
假设你的脚本包含一个复杂的正则表达式或多个复杂的代码块,在这种情况下,你可以添加注释,以便其他开发人员或你可以了解该代码块的含义。
|
||||
|
||||
注释掉部分代码也有助于调试脚本。
|
||||
|
||||
在本教程中,我将引导你了解在 Bash 脚本中添加注释的三种方法:
|
||||
|
||||
* 单行注释
|
||||
* 行内评论
|
||||
* 多行注释
|
||||
|
||||
那么让我们从第一个开始。
|
||||
|
||||
### Bash 中的单行注释
|
||||
|
||||
要添加单行注释,你必须将哈希符号(`#`)放在行的开头并编写注释。
|
||||
|
||||
这是一个简单的例子:
|
||||
|
||||
````
|
||||
#!/bin/bash
|
||||
# This is a comment
|
||||
echo "Hello, World!"
|
||||
````
|
||||
|
||||
执行时,注释将被忽略,当我执行上面的命令时,它看起来像这样:
|
||||
|
||||
![][1]
|
||||
|
||||
> 💡 `#` 注释规则的唯一例外是脚本开头的 `#!/bin/bash` 行。它称为 [释伴][2],用于指定运行脚本时要使用的解释器。有不同的 Shell,语法也可能不同。因此,一个好的做法是指定脚本是为哪个 Shell 编写的。例如,如果是 ksh,则可以使用 `#!/bin/ksh`.
|
||||
|
||||
### Bash 脚本中的内联注释
|
||||
|
||||
或者,你可以将注释放在代码块内以记录该特定行的用途。
|
||||
|
||||
> 🚧 `#` 之后的任何内容在该行结束之前都不会执行,因此请确保在代码末尾添加注释。
|
||||
|
||||
这是一个简单的例子:
|
||||
|
||||
````
|
||||
#!/bin/bash
|
||||
echo "Hello, World!" #Prints hello world
|
||||
````
|
||||
|
||||
![][3]
|
||||
|
||||
### Bash 中的多行注释
|
||||
|
||||
> 🚧 Bash 中没有内置的多行注释功能。但是,有一些解决方法可以实现多行注释效果。
|
||||
|
||||
顾名思义,Bash 脚本中的多行注释允许你在多行中编写注释,或者通过将它们放在多行注释部分来阻止执行代码块:
|
||||
|
||||
1. 在每行的开头使用 `#`
|
||||
2. [冒号表示法][4](使用冒号后跟单引号)
|
||||
3. 现场文档(使用 `<<` 后跟分隔符)
|
||||
|
||||
那么让我们从第一个开始。
|
||||
|
||||
#### 1、对块注释的每一行使用 `#`
|
||||
|
||||
如果你的目的是解释脚本的一部分,我建议使用此方法。毕竟,`#` 才是真正的注释功能。
|
||||
|
||||
这也是许多开发人员使用的方法。
|
||||
|
||||
假设你必须在一开始就解释脚本的用途、作者信息或许可信息。你可以这样写:
|
||||
|
||||
```
|
||||
#!/bin/bash
|
||||
|
||||
######################################
|
||||
## This script is used for scanning ##
|
||||
## local network ##
|
||||
## Licensed under GPL 2.0 ##
|
||||
######################################
|
||||
|
||||
这个 Bash 脚本的其它部分……
|
||||
|
||||
```
|
||||
|
||||
当你想说明 Bash 脚本的行为方式时这不错。如果你正在调试 Bash 脚本并希望隐藏部分脚本,则在所需代码的每一行开头添加 `#` 并在调试后将其删除是一项耗时的任务。
|
||||
|
||||
接下来的两节将帮助你做到这一点。
|
||||
|
||||
#### 2、冒号表示法
|
||||
|
||||
要使用冒号表示法,请在 `: '` 和结束的 `'` 之间编写块注释,如下所示:
|
||||
|
||||
```
|
||||
#!/bin/bash
|
||||
|
||||
: '
|
||||
This is how you can use colon notation
|
||||
And this line too will be ignored
|
||||
'
|
||||
echo "GOODBYE"
|
||||
|
||||
```
|
||||
|
||||
当你执行上面的脚本时,它应该只打印 `GOODBYE`。
|
||||
|
||||
![][5]
|
||||
|
||||
#### 3、现场文档
|
||||
|
||||
到目前为止,这是在 Bash 中编写多行注释的最流行的方法,你可以使用 `<<` 后跟分隔符(一组用于指定注释开始和结束的字符)。
|
||||
|
||||
(LCTT 译注:在编程领域,“**here document**” 是一个常见的术语,特指在脚本语言(如 Perl、Bash)中,能够直接在代码内部嵌入并处理一个数据块或文本串的技术。尽管传统上我们将它翻译为“嵌入式文档” 或不翻译,但这个译法似乎并不能完全地体现出原文的感觉和含义。为了让这个概念变得更为直观和易理解,我们建议将 “here document” 翻译为 “**现场文档**”。“现场”相比于“嵌入式”,更好的传达了文档就在代码的当前位置,或代码“现场”的含义。这样的译法也与原文 “here document” 中 “here”(这里)的含义更为契合。我们希望这个译法能够在未来得到更广泛的使用和认可,让编程的世界因语言的精准而变得更美好。PS., 该译法和解释得到了 ChatGPT 的建议和生成。)
|
||||
|
||||
使用方法如下:
|
||||
|
||||
```
|
||||
#!/bin/bash
|
||||
|
||||
<<DELIMITER
|
||||
Comment line 1
|
||||
Comment line 2
|
||||
DELIMITER
|
||||
|
||||
echo "Hello, World!"
|
||||
```
|
||||
|
||||
还困惑吗? 这是一个简单的例子:
|
||||
|
||||
```
|
||||
#!/bin/bash
|
||||
|
||||
<<COMMENT
|
||||
This is a multi-line comment using a here document.
|
||||
You can add as many lines as you want between <<COMMENT and the terminating keyword.
|
||||
This block won't be executed by the shell.
|
||||
COMMENT
|
||||
|
||||
echo "Hello, World!"
|
||||
```
|
||||
|
||||
在上面的示例中,我使用了 `COMMENT` 作为分隔符,但你可以使用任何内容,但要确保它从注释中脱颖而出,否则会造成混乱。
|
||||
|
||||
当我执行上面的脚本时,它给出了以下输出:
|
||||
|
||||
![][6]
|
||||
|
||||
正如你所看到的,它忽略了从 `<<COMMENT` 到 `COMMENT` 的所有内容。
|
||||
|
||||
我希望本指南对你有所帮助。
|
||||
|
||||
*(题图:MJ/7c2a3ef4-5256-405e-b757-23e0ba1f0bc5)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/bash-comments/
|
||||
|
||||
作者:[Sagar Sharma][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://itsfoss.com/author/sagar/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/content/images/2023/10/Use-single-line-comments-in-bash.png
|
||||
[2]: https://linux.cn/article-3664-1.html
|
||||
[3]: https://itsfoss.com/content/images/2023/10/How-to-use-the-single-line-comments-in-bash.png
|
||||
[4]: https://stackoverflow.com/questions/3224878/what-is-the-purpose-of-the-colon-gnu-bash-builtin
|
||||
[5]: https://itsfoss.com/content/images/2023/10/Use-multi-line-comments-using-colon-notation-in-bash.png
|
||||
[6]: https://itsfoss.com/content/images/2023/10/Use-multi-line-comments-in-bash-using----and-delimeter.png
|
||||
[7]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/19/113658dld7b9987xa89l99.jpg
|
||||
@@ -0,0 +1,127 @@
|
||||
[#]: subject: "Ardour 8.0 is an Apple-Friendly Update With Novation Launchpad Pro Support"
|
||||
[#]: via: "https://news.itsfoss.com/ardour-8-0-release/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16288-1.html"
|
||||
|
||||
Ardour 8.0 发布,加入对 Novation Launchpad Pro 的支持
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Ardour 8.0 这个重大升级为我们带来了对新硬件的支持,完善的自动化创建流程等。
|
||||
|
||||
Ardour 作为最好的 Linux [数字音频工作站(DAW)][1] 之一,允许音频专业人士进行包括创建、录音、混音音乐和其他各类音频的各种工作。
|
||||
|
||||
这一次,我们迎来了这款 DAW 的重大升级。 **Ardour 8.0** 的发布距离它的 [7.0 发布][2] 近一年,不过这还是它发展历程中的一次显著进步。
|
||||
|
||||
下面就让我们来详细探讨一下它都带来了哪些新的变化。
|
||||
|
||||
### 🆕 Ardour 8.0: 有哪些新功能?
|
||||
|
||||
![][4]
|
||||
|
||||
Ardour 8.0 版本承诺提供丰富的新特性以及大量的修复。
|
||||
|
||||
而且,开发者在此次发布时也特别强调,**Ardour 的会话文件格式没有发生改变**,这就意味着,所有在之前 7.x 版本的 Ardour 创建的会话在加载时都不会出现问题。
|
||||
|
||||
以下是一些主要亮点:
|
||||
|
||||
* 支持 Novation Launchpad Pro
|
||||
* MIDI 音轨头部进行了全新设计
|
||||
* MIDI 动力性的提高
|
||||
* 支持区域分组功能
|
||||
* macOS 的公证服务
|
||||
|
||||
#### 支持 Novation Launchpad Pro
|
||||
|
||||
![][5]
|
||||
|
||||
Ardour 8.0 版本的增加了对 Novation 公司发售的 [Launchpad Pro][6] 的支持,它是一款电子乐器,包括一个 8×8 格的 RGB,可以检测力度的触摸垫,可以完成各种各样的任务。
|
||||
|
||||
对于 Ardour 来说,它可以用于 **触发音频切片和线索**、**控制音频增益水平**、**操作声音平移** 甚至 **设置音轨/总线的水平**。
|
||||
|
||||
#### MIDI 音轨头部全新设计
|
||||
|
||||
![][7]
|
||||
|
||||
**全新设计的 MIDI 音轨头** 带来了一些引人注目的变化,最值得注意的包括:
|
||||
|
||||
* 八度音符如 C3、C4 将会永久显示。
|
||||
* 可以通过钢琴卷动键来记录 MIDI。
|
||||
* <ruby>滚动+缩放<rt>scroomer</rt></ruby> 功能的直观设计。
|
||||
* 在 <ruby>滚动+缩放<rt>scroomer</rt></ruby> 功能中可以显示音符名称,可以使用 MIDNAM 数据,泛用音符编号或 12TET 名。
|
||||
|
||||
#### MIDI 动力学的改进
|
||||
|
||||
在一直以来的用户需求驱动下,Ardour 的开发者终于新增了一款 **传统的 <ruby>动力棒棒糖<rt>velocity lollipop</rt></ruby>界面**。
|
||||
|
||||
这个界面由带有顶部圆点的垂直横条组成,可以用这个横条调节音符力度。我建议你可以在上面的视频中了解更多关于这个在 Ardour 8.0 版本中实施的一项功能。
|
||||
|
||||
#### 支持区域分组功能
|
||||
|
||||
![][8]
|
||||
|
||||
这也是用户长期以来的一项需求。**区域分组** 提供了一个选取多个 [区域][9] 并将它们组合成一个单一元素的功能。
|
||||
|
||||
这个功能可以赋予你将多个元素整合移动/剪辑的能力,减少对每个元素重复操作的需要。
|
||||
|
||||
#### macOS 验证
|
||||
|
||||
当你在苹果电脑上安装第三方软件时,计算机会警告你该软件可能会对你的系统产生损害或含有恶意软件,当然,对于用户而言,这可能是一个糟糕的用户体验,他们可能不会尝试运行它。
|
||||
|
||||
为了改善用户体验,Ardour 决定参加并支付一个苹果开发者账户以使用它的验证系统 [Notarization][10]。
|
||||
|
||||
因此,下次当你在 macOS 上安装 Ardour 时,你会看到软件已经被苹果检查/验证没有携带恶意软件,这会让用户对 Ardour 有更多的信心。
|
||||
|
||||
#### 🛠️ 其它的改变
|
||||
|
||||
最后,以下还有一些其他带来的改变:
|
||||
|
||||
* 支持自由手绘自动化曲线。
|
||||
* 新增了三个新的 MIDI 算法插件。
|
||||
* 集成有序排列组成特性的专专用标尺。
|
||||
* BBT 标记提供了多项提升。
|
||||
|
||||
你也可以查看 [官方发布说明][11] 来更多地了解这次发布的信息。
|
||||
|
||||
### 📥 下载 Ardour 8.0
|
||||
|
||||
由于 Ardour 是一个跨平台的应用程序,你可以在它的 [官方网站][12] 上找到适用于 **Linux**、**Windows** 和 **macOS** 的软件包。
|
||||
|
||||
> **[Ardour][12]**
|
||||
|
||||
如果你对源代码感兴趣,你也可以查看它的 [GitHub 仓库][13]。
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/ardour-8-0-release/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[译者ID](https://github.com/译者ID)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/best-daw-linux/
|
||||
[2]: https://news.itsfoss.com/ardour-7-0-release/
|
||||
[3]: https://news.itsfoss.com/content/images/size/w256h256/2022/08/android-chrome-192x192.png
|
||||
[4]: https://news.itsfoss.com/content/images/2023/10/Ardour_8.0_1.png
|
||||
[5]: https://news.itsfoss.com/content/images/2023/10/Ardour_8.0_2.png
|
||||
[6]: https://novationmusic.com/products/launchpad-pro
|
||||
[7]: https://news.itsfoss.com/content/images/2023/10/Ardour_8.0_3.png
|
||||
[8]: https://news.itsfoss.com/content/images/2023/10/Ardour_8.0_4.png
|
||||
[9]: https://manual.ardour.org/working-with-regions/
|
||||
[10]: https://developer.apple.com/documentation/security/notarizing_macos_software_before_distribution
|
||||
[11]: https://ardour.org/whatsnew.html
|
||||
[12]: https://community.ardour.org/download
|
||||
[13]: https://github.com/Ardour/ardour
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/16/143813ue8eue89mt44btum.jpg
|
||||
@@ -0,0 +1,104 @@
|
||||
[#]: subject: "How to Record Your Screen with VLC [For Fun]"
|
||||
[#]: via: "https://itsfoss.com/vlc-record-screen/"
|
||||
[#]: author: "Sreenath https://itsfoss.com/author/sreenath/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16310-1.html"
|
||||
|
||||
如何使用 VLC 录制屏幕
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 用途广泛的 VLC 可以做很多事情。屏幕录制就是其中之一。
|
||||
|
||||
VLC 不仅仅是一个视频播放器。它还是一款多功能视频工具,具有普通用户永远无法了解的众多功能。
|
||||
|
||||
你可以 [使用 VLC 下载 YouTube 视频][1],甚至可以用它修剪视频。
|
||||
|
||||
VLC 的另一个不寻常用途是屏幕录制。
|
||||
|
||||
**我仍然建议使用合适的屏幕录像机来完成此任务,欢迎你探索这个 VLC 功能以获取乐趣。**
|
||||
|
||||
### 使用 VLC 进行屏幕录制
|
||||
|
||||
> 🚧 虽然我可以使用 VLC 录制桌面屏幕,但无法录制任何声音和鼠标光标。在我看来,它并不能替代合适的屏幕录制工具。
|
||||
|
||||
要使用 [VLC][2] 录制屏幕,请打开它并单击 “<ruby>媒体<rt>Media</rt></ruby>”,然后选择 “<ruby>转换/保存…<rt>Convert/Save...</rt></ruby>”。(或者直接点击 “<ruby>媒体<rt>Media</rt></ruby>”→“<ruby>打开采集设备…<rt>Open Capture Device...</rt></ruby>”)
|
||||
|
||||
![Select Convert/ Save option][3]
|
||||
|
||||
转到 “<ruby>捕获设备<rt>Capture Device</rt></ruby>” 选项卡,然后从 “<ruby>捕获模式<rt>Capture Mode</rt></ruby>” 下拉列表中选择桌面。
|
||||
|
||||
![Capture Mode: Desktop][4]
|
||||
|
||||
现在,这里为你的录制提供了一些帧率。10、24 fps 等都不错,如果你需要更高的质量,请选择更高的。请注意,这会增加文件大小和系统要求。然后,按 “<ruby>转换/保存<rt>Convert/Save</rt></ruby>” 按钮。
|
||||
|
||||
![Set Frame Rate][5]
|
||||
|
||||
在下一页上,从下拉列表中选择一个配置文件,然后单击相邻的按钮来编辑该配置文件。
|
||||
|
||||
![Set Output Profile][6]
|
||||
|
||||
设置你需要的视频格式,然后按 “<ruby>保存<rt>Save</rt></ruby>”。
|
||||
|
||||
![Edit the Output Profile][7]
|
||||
|
||||
现在,你需要给出目标文件名。单击 “<ruby>浏览<rt>Browse</rt></ruby>”按钮,选择位置,然后输入输出文件的名称。单击 “<ruby>保存<rt>Save</rt></ruby>”。
|
||||
|
||||
![Output file location and Name][8]
|
||||
|
||||
按 “<ruby>开始<rt>Start</rt></ruby>” 按钮,开始录制屏幕。
|
||||
|
||||
![Start Recording][9]
|
||||
|
||||
这将开始录制。完成录制后,使用面板按钮停止。
|
||||
|
||||
![Stop Recording][10]
|
||||
|
||||
或者单击 VLC 上的停止按钮。
|
||||
|
||||
![Stop Button in VLC][11]
|
||||
|
||||
就是这样。你可以在保存屏幕录像的位置查看屏幕录像。
|
||||
|
||||
![Output File][12]
|
||||
|
||||
### 总结
|
||||
|
||||
如你所见,虽然可以使用 VLC 录制桌面屏幕,但它并不能替代 [专用屏幕录制工具][13]。缺乏录音是一个重大的遗憾。
|
||||
|
||||
仅当你没有任何其他选项时才使用 VLC 进行屏幕录制。你怎么认为?
|
||||
|
||||
*(题图:MJ/f48c22e9-a2d1-4567-a265-6c3aaf147aff)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/vlc-record-screen/
|
||||
|
||||
作者:[Sreenath][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://itsfoss.com/author/sreenath/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/download-youtube-videos-vlc/
|
||||
[2]: https://www.videolan.org/vlc/
|
||||
[3]: https://itsfoss.com/content/images/2023/09/click-on-convert-save.png
|
||||
[4]: https://itsfoss.com/content/images/2023/09/desktop-in-capture-device.png
|
||||
[5]: https://itsfoss.com/content/images/2023/09/set-frame-rate-and-press-convert.png
|
||||
[6]: https://itsfoss.com/content/images/2023/09/Select-profile-and-edit.png
|
||||
[7]: https://itsfoss.com/content/images/2023/09/profile-settings.png
|
||||
[8]: https://itsfoss.com/content/images/2023/09/give-name-to-output-file-and-save.png
|
||||
[9]: https://itsfoss.com/content/images/2023/09/press-start-button-to-start-recrding.png
|
||||
[10]: https://itsfoss.com/content/images/2023/09/stop-button-in-panel-1.png
|
||||
[11]: https://itsfoss.com/content/images/2023/09/Stop-button-in-VLC.png
|
||||
[12]: https://itsfoss.com/content/images/2023/09/recorded-output.png
|
||||
[13]: https://itsfoss.com/best-linux-screen-recorders/
|
||||
[14]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/23/153033pej4f9egegjbtbbs.jpg
|
||||
115
published/202310/20231012 Kubuntu 23.10 Release is Here.md
Normal file
115
published/202310/20231012 Kubuntu 23.10 Release is Here.md
Normal file
@@ -0,0 +1,115 @@
|
||||
[#]: subject: "Kubuntu 23.10 Release is Here!"
|
||||
[#]: via: "https://news.itsfoss.com/kubuntu-23-10/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16281-1.html"
|
||||
|
||||
Kubuntu 23.10 版本已发布!
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Kubuntu 预装了必要的 KDE Plasma 及应用更新。
|
||||
|
||||
如果你期待在 Ubuntu 基础之上更新你的 KDE 体验,那么欢迎尝试 Kubuntu 23.10。
|
||||
|
||||
虽然这不是一次重大的发布,但如果你正在从 Kubuntu 23.04 升级,遇到了问题,这个新版本会带来更愉快的使用体验。
|
||||
|
||||
> 💡 记住,Kubuntu 23.10 将享有 **九个月**(即至 **2024 年 7 月**)的技术支持。
|
||||
|
||||
### Kubuntu 23.10:有什么新特性?
|
||||
|
||||
![][1]
|
||||
|
||||
这个版本的亮点包括:
|
||||
|
||||
* KDE Plasma 5.27.8
|
||||
* KDE 应用的更新
|
||||
* Linux 内核 6.5
|
||||
* Firefox 118
|
||||
* LibreOffice 7.6
|
||||
* Thunderbird 115
|
||||
|
||||
#### KDE Plasma 5.27.8
|
||||
|
||||
可能你会好奇,为何在这次新的更新中还停留在 KDE Plasma 5.27阶段?
|
||||
|
||||
这是因为它是 [KDE Plasma 6][2] 升级(计划在 _2024 年 2 月_ 进行)前的最后一个版本。所以,你不会看到 KDE Plasma 5.28 的发布。
|
||||
|
||||
![][3]
|
||||
|
||||
在 KDE Plasma 5.27.8,做了许多显著的问题修复以及改进,包括对混合睡眠的支持、利用 Plasma <ruby>系统监视器<rt>System Monitor</rt></ruby> 对多 GPU 配置中的英伟达 GPU 的监控。
|
||||
|
||||
也优化了 KRunner 在 X11 上的性能,系统设置中的关键词搜索更加高效。
|
||||
|
||||
![][4]
|
||||
|
||||
对于 Kubuntu 的软件中心 “<ruby>发现<rt>Discover</rt></ruby>” 应用,改进了一些 Flatpak 错误的处理方式,你将享受更佳的用户体验。
|
||||
|
||||
#### Linux 内核 6.5
|
||||
|
||||
Linux 内核 6.5 带来了硬件兼容性的改进,以及对英特尔 Arc 图形的全方位支持,你现在可以在最新的系统上尝试 Kubuntu。
|
||||
|
||||
[Linux 内核 6.5][5] 引入了一些包括 Wi-Fi 7 和 USB 4 在内的尖端技术支持。关于更多变化,你可以在我们的报道中详细了解:
|
||||
|
||||
> **[Linux 内核 6.5 发布,首次支持 Wi-Fi 7 和 USB4][5]**
|
||||
|
||||
#### 应用程序更新
|
||||
|
||||
![][7]
|
||||
|
||||
Kubuntu 为你预装了最新版 [Firefox 118][8],你可以试用其内建的翻译功能(LCTT 译注:不支持中文)。
|
||||
|
||||
升级版的 [LibreOffice 7.6][9] 也在本次更新中登场,与之前的版本相比,其表现出显著的进步,提供了新的主题、更好的用户体验以及更优的兼容性。
|
||||
|
||||
此外,我们还预装了漂亮的 [Thunderbird 115][10]。
|
||||
|
||||
除此之外,你还会获取常规的 KDE 应用更新、问题修复,以及 KDE 框架的改进。
|
||||
|
||||
#### 其他改进
|
||||
|
||||
随着所有的 KDE 更新、软件包升级和桌面改进,相信你会在用户体验上感受到很多细微的变化。
|
||||
|
||||
一些其他的技术更新包括:
|
||||
|
||||
* Qt 5.15.10
|
||||
* Kate 23.08.1
|
||||
|
||||
### 📥 如何获取 Kubuntu 23.10
|
||||
|
||||
你可以在 [官方网站][11] 或 [Ubuntu 的仓库][12] 下载 Kubuntu 23.10 的 ISO 文件。
|
||||
|
||||
> **[Kubuntu 23.10][13]**
|
||||
|
||||
(题图:[Ubuntu](https://ubuntu.com/blog/into-the-labyrinth))
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/kubuntu-23-10/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/content/images/2023/10/kubuntu-23-10-1.jpg
|
||||
[2]: https://news.itsfoss.com/kde-plasma-6-dev/
|
||||
[3]: https://news.itsfoss.com/content/images/2023/10/kubuntu-23-10-sys-info.png
|
||||
[4]: https://news.itsfoss.com/content/images/2023/10/kubuntu-23-10-discover.png
|
||||
[5]: https://news.itsfoss.com/linux-kernel-6-5-release/
|
||||
[6]: https://news.itsfoss.com/content/images/size/w256h256/2022/08/android-chrome-192x192.png
|
||||
[7]: https://news.itsfoss.com/content/images/2023/10/kubuntu-23-10-application-update.jpg
|
||||
[8]: https://news.itsfoss.com/firefox-118-release/
|
||||
[9]: https://news.itsfoss.com/libreoffice-7-6/
|
||||
[10]: https://news.itsfoss.com/thunderbird-115/
|
||||
[11]: https://kubuntu.org/getkubuntu/
|
||||
[12]: http://cdimage.ubuntu.com/kubuntu/releases/23.10
|
||||
[13]: http://cdimage.ubuntu.com/kubuntu/releases/23.10/release/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/14/104118g6gqg1cp81gitqg5.jpg
|
||||
@@ -0,0 +1,133 @@
|
||||
[#]: subject: "Raspberry Pi OS Upgrade: Ditching X11, A New Browser, and Debian 12"
|
||||
[#]: via: "https://news.itsfoss.com/raspberry-pi-os-bookworm/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16285-1.html"
|
||||
|
||||
树莓派操作系统升级:基于 Debian 12、淘汰 X11
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 为了匹配最新的树莓派 5 硬件,树莓派操作系统已做好准备,该系统中融入了 Debian 12 以及其他重大更新。
|
||||
|
||||
这个新版本的 <ruby>树莓派操作系统<rt>Raspberry Pi OS</rt></ruby> 能够完善支持新推出的 [树莓派 5][1]。
|
||||
|
||||
为此,开发者们投入了大量的心血和精力。新系统带来了诸多改进,同时还标志着向更现代化的窗口系统的迁移。
|
||||
|
||||
下面,我们来看看他们的具体成果。
|
||||
|
||||
### 树莓派操作系统: 新的变化有哪些?
|
||||
|
||||
![][2]
|
||||
|
||||
开发者基于最新的 [Debian 12 “Bookworm”][3] 版本,对树莓派桌面进行了 **重大的架构更新**。
|
||||
|
||||
一些显著的新特性包括:
|
||||
|
||||
* 全面采用 Wayland
|
||||
* 网络性能显著提升
|
||||
* 默认使用 PipeWire
|
||||
* 为树莓派优化的 Firefox
|
||||
|
||||
显然,你将会享受到 Debian “Bookworm” 的核心优点,同时还能体验到上述提到的一些新变化。
|
||||
|
||||
#### 全面采用 Wayland
|
||||
|
||||
没错,你没有看错。
|
||||
|
||||
树莓派桌面已经默认启用 [Wayland][4] 窗口系统,正式摒弃了因多种限制不再使用的 [X11][5] 窗口系统。Wayland 的主要优点是其**在现代硬件上有更出色的性能表现**。
|
||||
|
||||
这一切的实现离不开 [Wayfire][6] 合成器的支持,这使得开发者能够在更新中**保持用户熟知的体验**。
|
||||
|
||||
以下是开发者在发布公告中的引述:
|
||||
|
||||
> 如果你在树莓派 4 或 5 上启动树莓派操作系统,现在你会看到的是一个 Wayfire 桌面。它看起来和你之前在 Bullseye 上使用的桌面几乎一模一样,但在一致的外观背后,我们为了使两个桌面环境看起来一样已进行了大量的工作!
|
||||
|
||||
**我们对此并不感到惊讶。**
|
||||
|
||||
近期,我们注意到有很多桌面正在从 X11 和 [Openbox][7] 这样的旧窗口系统转向 Wayland。
|
||||
|
||||
比如,GNOME 最近的更新开启了向 **[全面使用 Wayland 的未来][8]** 的转变。即使是 Fedora Linux 40 也准备弃用 X11 会话,转向使用 [Plasma 6][9] 的 XWayland 方式。
|
||||
|
||||
看到树莓派操作系统已经率先进行了这样的变化,实在是让人感到十分有趣 😄
|
||||
|
||||
> 📋 不过别担心,**对于仍希望使用 X11/Openbox 显示系统的用户**,他们可以在 `raspi-config` 中的 “<ruby>高级设置<rt>Advanced Settings</rt></ruby>” 菜单中重新启用它。
|
||||
|
||||
#### 网络性能显著提升
|
||||
|
||||
![][10]
|
||||
|
||||
开发者在之前实现的 [NetworkManager][11] 网络控制器的基础上进行了优化,他们为 **任务栏增加了网络插件**。
|
||||
|
||||
虽然新版本的插件和旧版本看上去差不多,但新增了一个 “<ruby>高级选项<rt>Advanced Options</rt></ruby>” 选项,用户可以通过它访问 NetworkManager 提供的更多功能。
|
||||
|
||||
#### 默认使用 PipeWire
|
||||
|
||||
现在,树莓派 Desktop 使用 [PipeWire][12] 来处理所有与音频/视频相关的任务。它取代了 [PulseAudio][13],使**音频/视频处理迈向更现代化和灵活的方式**。
|
||||
|
||||
在用户端,你可以得到**更优化的蓝牙音频设备管理**、**更低的延迟时间**,**和 Wayland 的更好互操作性**等等。
|
||||
|
||||
用户也可以通过和切换窗口系统类似的步骤**选择回退使用 PulseAudio**。
|
||||
|
||||
#### 为树莓派优化的 Firefox
|
||||
|
||||
![][14]
|
||||
|
||||
这次,我们看到了一个**由官方支持且专门为树莓派优化的 [Mozilla Firefox][15] 版本**,它在这次树莓派操作系统的发布版中首次被引入。
|
||||
|
||||
现在,用户可以使用 **V4L2 编码支持** 来启用他们的树莓派上的硬件 h.264 解码器,这将会有助于**实现更好的 HD 视频播放效果**。
|
||||
|
||||
此外,他们也启用了 [Widevine DRM][16],以在主流的视频流媒体平台上提供**无障碍的流媒体观看体验**。
|
||||
|
||||
在这次发布的版本中还有其他一些细微的变化。想了解更多,请参考 [官方博客][17]。
|
||||
|
||||
### 📥 下载树莓派操作系统
|
||||
|
||||
由于操作系统细节的大量变化,开发者建议你**从全新安装开始** (重新烧录你的 SD 卡)。
|
||||
|
||||
当然,你也可以选择自行升级,但需要自担风险。
|
||||
|
||||
你可以访问 [官方网站][18] 进行下载。
|
||||
|
||||
> **[树莓派操作系统][18]**
|
||||
|
||||
💬 你对新的树莓派操作系统升级感到兴奋吗?欢迎在评论区告诉我们。
|
||||
|
||||
*(题图:MJ/2fe701cd-5ced-41e2-b00e-1454c6f3fa4a)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/raspberry-pi-os-bookworm/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/raspberry-pi-5/
|
||||
[2]: https://news.itsfoss.com/content/images/2023/10/RaspberryPi_OS_Bookworm_1.png
|
||||
[3]: https://news.itsfoss.com/debian-12-release/
|
||||
[4]: https://wayland.freedesktop.org/
|
||||
[5]: https://en.wikipedia.org/wiki/X_Window_System
|
||||
[6]: https://github.com/WayfireWM/wayfire
|
||||
[7]: https://en.wikipedia.org/wiki/Openbox
|
||||
[8]: https://news.itsfoss.com/gnome-wayland-xorg/
|
||||
[9]: https://fedoraproject.org/wiki/Changes/KDE_Plasma_6
|
||||
[10]: https://news.itsfoss.com/content/images/2023/10/RaspberryPi_OS_Bookworm_2.png
|
||||
[11]: https://networkmanager.dev/
|
||||
[12]: https://pipewire.org/
|
||||
[13]: https://www.freedesktop.org/wiki/Software/PulseAudio/
|
||||
[14]: https://news.itsfoss.com/content/images/2023/10/RaspberryPi_OS_Bookworm_3.png
|
||||
[15]: https://www.mozilla.org/en-US/firefox/new/
|
||||
[16]: https://www.widevine.com/solutions/widevine-drm
|
||||
[17]: https://www.raspberrypi.com/news/bookworm-the-new-version-of-raspberry-pi-os/
|
||||
[18]: https://www.raspberrypi.com/software/operating-systems/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/14/233127bc5jlvhkphkgngjh.jpg
|
||||
@@ -0,0 +1,173 @@
|
||||
[#]: subject: "Ubuntu 23.10: The Big Release is Here!"
|
||||
[#]: via: "https://news.itsfoss.com/ubuntu-23-10-release/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16278-1.html"
|
||||
|
||||
Ubuntu 23.10:全新版本来袭!
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Ubuntu 23.10 “Mantic Minotaur” 再度亮相,搭载了 GNOME 45,以及众多引人瞩目的升级。
|
||||
|
||||
又一次,一如既往的一年一度,我们迎来全新的 Ubuntu 发布!
|
||||
|
||||
这次发布的版本是 **Ubuntu 23.10** ,这不是一个 [长期支持][1](LTS)版本,它的代号是 “Mantic Minotaur” (预言牛头人)。
|
||||
|
||||
非 LTS 版本更偏向于满足那些想要获取到 Ubuntu 最新以及最出众特性的用户。
|
||||
|
||||
对于那些希望长时间坚守一个版本的用户,我们建议使用 LTS 版本,比如 [Ubuntu 20.04][2] 和 [Ubuntu 22.04][3]。
|
||||
|
||||
总之,让我们深入了解这次发布的新版本,去发现其中的亮点。
|
||||
|
||||
> 💡 Ubuntu 23.10 将会 **提供九个月的支持**,一直到 2024 年 7 月为止。
|
||||
|
||||
### ⭐ Ubuntu 23.10:新版调整了什么?
|
||||
|
||||
![][4]
|
||||
|
||||
即使这是一个非 LTS 发布,但是 **Ubuntu 23.10 却包含了许多有趣的新特性和升级**。
|
||||
|
||||
一些主要亮点包括:
|
||||
|
||||
* 更新升级的安装程序
|
||||
* 受限的非特权用户命名空间
|
||||
* GNOME 45
|
||||
* 全新的壁纸
|
||||
* 基于 Flutter 的应用商店
|
||||
* Linux 内核 6.5
|
||||
|
||||
### 更新升级的安装程序
|
||||
|
||||
![][5]
|
||||
|
||||
首先,Ubuntu 23.10 的安装程序 **开始实验性地支持两大重要功能** :
|
||||
|
||||
其一是 [TPM 支持的全盘加密(FDE)][6],这意味着采用全新的加密机制。它将与你主板上的 TPM 芯片协同运作。
|
||||
|
||||
其二是期待已久的 [ZFS 支持][7] 再次回归到安装程序中,它在 [Ubuntu 23.04][8] 被移除。
|
||||
|
||||
> 📋 更广泛的 TPM 支持的全盘加密硬件支持将在 Ubuntu 24.04 LTS 中推出。
|
||||
|
||||
### 受限的非特权用户命名空间
|
||||
|
||||
![][9]
|
||||
|
||||
Ubuntu 23.10 首次推出一项新的安全功能。它限制了内核的 “非特权用户命名空间” 特性,这有助于应用程序创建更安全的沙箱环境。
|
||||
|
||||
这个特性很有用,那为什么要限制它呢? 原因在于,这个内核特性可能被攻击者利用。
|
||||
|
||||
为了消除与这个特性相关的风险,[AppArmor][10] 将被用于有选择地允许/禁止非特权用户命名空间。
|
||||
|
||||
这个安全特性默认是关闭的,但可以通过命令行选择开启。Canonical 将搜集用户反馈,然后可能决定通过更新将其设为默认。
|
||||
|
||||
### GNOME 45
|
||||
|
||||
![][11]
|
||||
|
||||
Ubuntu 23.10 提供了最新发布的 [GNOME 45][12] 桌面环境,它包括了 **优化过的系统设置应用**、**更新的核心应用**,并 **新增了两个应用**,名为 <ruby>[放大镜][13]<rt>Loupe</rt></ruby> 和 <ruby>[快照][14]<rt>Snapshot</rt></ruby>。
|
||||
|
||||
新的 [药丸形工作空间指示器][15] 也在这次发布中首次亮相,虽然不是每个人都会喜欢。
|
||||
|
||||
### 新的壁纸
|
||||
|
||||
![][17]
|
||||
|
||||
Ubuntu 23.10 版本发布,也不忘继续传统,**推出了全新的壁纸** ,这些壁纸主题都与其代号保持一致。所有壁纸看起来都非常不错,这些都是从几个月前举行的 Mantic Minotaur [壁纸比赛][18] 中被选中的。
|
||||
|
||||
你可以通过 [官方博客][19] 查找更多有关这些极酷壁纸的信息。
|
||||
|
||||
> 📋 我个人特别喜欢 “Bodacious Bovine” 的浅色/深色版本。
|
||||
|
||||
### 基于 Flutter 的应用商店
|
||||
|
||||
![][20]
|
||||
|
||||
得益于在 Ubuntu 23.10 上推出了 **全新的 [基于 Flutter 的商店][21]** ,Canonical 推将 Ubuntu 各种元素 Flutter 化的努力见到了效果。这个新商店拥有 **更新的布局**、**全新的应用视图** ,以及 **更好的搜索功能**。
|
||||
|
||||
你在其中可以找到 Snap 和 Deb 包。
|
||||
|
||||
### Linux 内核 6.5
|
||||
|
||||
![][23]
|
||||
|
||||
首先,让我们来了解下让一切变为可能的原动力。Ubuntu 23.10 版本采用了相对更新的 [Linux 内核 6.5][24]。
|
||||
|
||||
这一特性让 Ubuntu 能够使用到一些新的硬件支持,如 **Wi-Fi 7**、**USB4**、**针对 AMD FreeSync 视频的即插即用支持**,以及**对 AMD Radeon RX 7000 系列显卡的超频支持** 等。
|
||||
|
||||
### 🛠️ 其他变动
|
||||
|
||||
除了之前提到的特性,还有一些其他值得注意的变动:
|
||||
|
||||
* 支持最新发布的 [树莓派 5][25] 和 [HiFive Pro P550][26]。
|
||||
* [为 PPA 提供增强的安全性][27]。
|
||||
* 对 Rust 的支持进一步增强。
|
||||
* 加入了 [Shotwell 0.32][28]。
|
||||
* 推出了全新升级的平铺辅助工具。
|
||||
|
||||
想要了解更多关于此版本的详细信息,你可以查阅我们之前发布的关于 [Ubuntu 23.10 特性][29] 的报告,或者直接阅读官方的版本发布说明。
|
||||
|
||||
### 📥 下载 Ubuntu 23.10
|
||||
|
||||
> 📋 请注意,在发布公告后,下载可能还需要一段时间。
|
||||
|
||||
你可以在 [官方网站][30] 或是 Ubuntu 的镜像 [仓库][31] 中获取最新的 ISO 文件。
|
||||
|
||||
> **[Ubuntu 23.10][32]**
|
||||
|
||||
**对于现有用户,** 你可以参考我们的 [如何升级 Ubuntu][33] 教程来获取此最新版本。
|
||||
|
||||
💬 你是否对试用这个版本感到兴奋?在下方告诉我们你的想法吧!
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/ubuntu-23-10-release/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/long-term-support-lts/
|
||||
[2]: https://itsfoss.com/things-to-do-after-installing-ubuntu-20-04/
|
||||
[3]: https://itsfoss.com/ubuntu-22-04-release-features/
|
||||
[4]: https://news.itsfoss.com/content/images/2023/10/Ubuntu_23.10_1-1.png
|
||||
[5]: https://news.itsfoss.com/content/images/2023/10/Ubuntu_23.10_2.png
|
||||
[6]: https://linux.cn/article-16187-1.html
|
||||
[7]: https://news.itsfoss.com/ubuntu-23-10-zfs/
|
||||
[8]: https://news.itsfoss.com/ubuntu-23-04-release/
|
||||
[9]: https://news.itsfoss.com/content/images/2023/10/apparmor-ubuntu-23-10.png
|
||||
[10]: https://ubuntu.com/server/docs/security-apparmor
|
||||
[11]: https://news.itsfoss.com/content/images/2023/10/Ubuntu_23.10_3.png
|
||||
[12]: https://linux.cn/article-16215-1.html
|
||||
[13]: https://linux.cn/article-15887-1.html
|
||||
[14]: https://linux.cn/article-15789-1.html
|
||||
[15]: https://news.itsfoss.com/gnome-activities-indicator/
|
||||
[16]: https://news.itsfoss.com/content/images/size/w256h256/2022/08/android-chrome-192x192.png
|
||||
[17]: https://news.itsfoss.com/content/images/2023/10/Ubuntu_23.10_4.png
|
||||
[18]: https://discourse.ubuntu.com/t/mantic-minotaur-23-10-wallpaper-competition/37235
|
||||
[19]: https://ubuntu.com/blog/into-the-labyrinth
|
||||
[20]: https://news.itsfoss.com/content/images/2023/10/Ubuntu_23.10_5.png
|
||||
[21]: https://news.itsfoss.com/ubuntu-23-10-ubuntu-store/
|
||||
[22]: https://news.itsfoss.com/content/images/2023/04/Follow-us-on-Google-News.png
|
||||
[23]: https://news.itsfoss.com/content/images/2023/10/Ubuntu_23.10_6.png
|
||||
[24]: https://news.itsfoss.com/linux-kernel-6-5-release/
|
||||
[25]: https://news.itsfoss.com/raspberry-pi-5/
|
||||
[26]: https://www.sifive.com/boards/hifive-pro-p550
|
||||
[27]: https://news.itsfoss.com/ubuntu-23-10-ppa/
|
||||
[28]: https://gitlab.gnome.org/GNOME/shotwell/-/blob/master/NEWS
|
||||
[29]: https://news.itsfoss.com/ubuntu-23-10/
|
||||
[30]: https://ubuntu.com/download/desktop
|
||||
[31]: https://cdimage.ubuntu.com/ubuntu/releases/
|
||||
[32]: https://releases.ubuntu.com/23.10/
|
||||
[33]: https://itsfoss.com/upgrade-ubuntu-to-newer-version/
|
||||
[34]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/13/095752pfbbxdci1xoqcfb1.jpg
|
||||
@@ -0,0 +1,110 @@
|
||||
[#]: subject: "Ubuntu MATE 23.10 Released: A Modest Upgrade"
|
||||
[#]: via: "https://news.itsfoss.com/ubuntu-mate-23-10/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16300-1.html"
|
||||
|
||||
Ubuntu MATE 23.10发布: 一个适度的升级
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Ubuntu MATE 23.10 发布了!
|
||||
|
||||
在所有的 Ubuntu 版本中,Ubuntu MATE 的升级总是非常有趣的。
|
||||
|
||||
不过,最近发布的 Ubuntu MATE 决定坚持小幅改动,并进行预期的软件包升级和修复。你可能知道为什么!
|
||||
|
||||
**对于不了解的读者**:这是为了开发我们去年报道过的 [计划中的 Debian MATE 定制版][1]。
|
||||
|
||||
说到这里,让我重点介绍一下这些变化。
|
||||
|
||||
> 💡 Ubuntu MATE 23.10 将支持**九个月,直至 2024 年 7 月**。
|
||||
|
||||
### Ubuntu MATE 23.10:有什么新功能?
|
||||
|
||||
![][2]
|
||||
|
||||
Ubuntu MATE 23.10 受益于 [Ubuntu 23.10][3] 推出的所有好东西。
|
||||
|
||||
此外,这里还有一些改进:
|
||||
|
||||
* MATE 桌面更新至 v1.26.2。
|
||||
* 添加更多人工智能生成的壁纸。
|
||||
* 应用更新。
|
||||
|
||||
#### MATE 桌面升级
|
||||
|
||||
在最新的 MATE 桌面 1.26.2 中,你将获得大量错误修复和一些小的改进。
|
||||
|
||||
升级包括以下内容:
|
||||
|
||||
* 更新 MATE 用户指南 v1.26.2-1
|
||||
* 改进门户支持
|
||||
* 改进系统监视器,以便从 `/usr/libexec` 获取 `libexec` 文件
|
||||
* 修正 MATE 会话管理器,使其更好地与系统监视器配合使用
|
||||
* mate-utils 1.26.1-1 修复了内存泄漏问题
|
||||
|
||||
#### 额外的人工智能生成的壁纸
|
||||
|
||||
![][5]
|
||||
|
||||
虽然你已经可以从 [Ubuntu 23.10 更新合集][6] 中下载一些有趣的壁纸,但在这里你还能获得额外的壁纸(如上面的截图所示)。
|
||||
|
||||
Simon Butcher 是使用前沿的 Diffusion 模型制作这款壁纸的人,他提到:
|
||||
|
||||
> 由于牛头人是一种想象中的生物,因此对其的解释往往千差万别。我想制作一个具有漫画小说风格的强大生物图像,尽管不像许多描述那样令人毛骨悚然。
|
||||
>
|
||||
> 最新开源的 Stable Diffusion XL 基本模型在更高分辨率下进行了训练,质量上的差异非常明显,尤其是在整体一致性和细节方面,同时减少了图像中的解剖不规则性。图像是使用 Linux 和英伟达 A100 80GB GPU 在本地制作的,从最初的文本提示开始,使用 img2img、修复和放大功能进行完善。
|
||||
|
||||
#### Linux 内核 6.5
|
||||
|
||||
当然,[Linux 内核 6.5][7] 还能为硬件带来更好的兼容性、新代组件和其他改进。
|
||||
|
||||
![][8]
|
||||
|
||||
#### 其他改进
|
||||
|
||||
主要的应用程序升级包括 [Firefox 118][9]、Celluloid 0.25、Evolution 3.50 和 LibreOffice 7.6.1。
|
||||
|
||||
所有这些都将改善用户体验。
|
||||
|
||||
### 📥 获取 Ubuntu MATE 23.10
|
||||
|
||||
你可以从 [官方网站][10] 或 [Ubuntu 仓库][11] 下载 Ubuntu MATE 23.10 ISO。
|
||||
|
||||
> **[Ubuntu MATE 23.10][12]**
|
||||
|
||||
如果你是现有用户并希望升级,请按照 [发布说明][13] 中的官方说明进行操作。
|
||||
|
||||
*(题图:[Ubuntu Mate](https://ubuntu-mate.org/blog/ubuntu-mate-mantic-minotaur-release-notes/))*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/ubuntu-mate-23-10/
|
||||
|
||||
作者:[Ankush Das][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://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://linux.cn/article-15119-1.html
|
||||
[2]: https://news.itsfoss.com/content/images/2023/10/ubuntu-mate-23-10.jpg
|
||||
[3]: https://news.itsfoss.com/ubuntu-23-10/
|
||||
[5]: https://news.itsfoss.com/content/images/2023/10/ubuntu-mate-23-10-new-wall.jpg
|
||||
[6]: https://ubuntu.com/blog/into-the-labyrinth
|
||||
[7]: https://news.itsfoss.com/linux-kernel-6-5-release/
|
||||
[8]: https://news.itsfoss.com/content/images/2023/10/ubuntu-mate-23-10-neofetch.jpg
|
||||
[9]: https://news.itsfoss.com/firefox-118-release/
|
||||
[10]: https://ubuntu-mate.org/download/
|
||||
[11]: https://cdimage.ubuntu.com/ubuntu-mate/releases/23.10/
|
||||
[12]: https://cdimage.ubuntu.com/ubuntu-mate/releases/23.10/release/
|
||||
[13]: https://ubuntu-mate.org/blog/ubuntu-mate-lunar-lobster-release-notes/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/19/160226cp45xfznfzw2xjj0.jpg
|
||||
@@ -0,0 +1,139 @@
|
||||
[#]: subject: "Ubuntu Studio 23.10 Release Aims for Effortless Audio Production"
|
||||
[#]: via: "https://news.itsfoss.com/ubuntu-studio-23-10/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16290-1.html"
|
||||
|
||||
Ubuntu Studio 23.10:致力于简化音频制作
|
||||
=====
|
||||
|
||||
![][0]
|
||||
|
||||
> 创作者们,Ubuntu Studio 23.10 来了!它包含了你开始创作旅程所需的一切。
|
||||
|
||||
Ubuntu 的新版本如同雨后的春笋般持续涌现!☔ 其中一款新版本就是 Ubuntu Studio 23.10,它带来了一些实用的更新和改进。
|
||||
|
||||
下面就让我们详细了解一下它。
|
||||
|
||||
> 💡 Ubuntu Studio 23.10 将会提供**九个月**的支持,直到 **2024 年 7 月**。
|
||||
|
||||
### 🆕 Ubuntu Studio 23.04: 新增了哪些特性?
|
||||
|
||||
![][1]
|
||||
|
||||
对于那些刚接触的朋友,[Ubuntu Studio][2] 是针对 **内容创作者**特制的官方 [Ubuntu 发行版][3]。
|
||||
|
||||
Ubuntu Studio 预装了许多在音频/视频制作、摄影、网络直播、图形设计等多种领域中使用的应用程序。
|
||||
|
||||
Ubuntu Studio 的这个版本基于 Ubuntu 23.10 发行版,进行了一些关键性的改进:
|
||||
|
||||
* KDE Plasma 的升级提升
|
||||
* 全新壁纸
|
||||
* 更新的应用套件
|
||||
* Linux 内核升级到 6.5 版本
|
||||
* 安装程序中加入的音频配置工具
|
||||
|
||||
#### KDE Plasma 的升级提升
|
||||
|
||||
![][4]
|
||||
|
||||
Ubuntu Studio 23.10 带有新的 **KDE Plasma 5.27.8** 桌面环境,以及新的翻译、各种修复,和三个关键的问题修复:
|
||||
|
||||
- 系统设置搜索栏中移除了软连字符;
|
||||
- Powerdevil 默认情况下不会在虚拟机中自动挂起;
|
||||
- 提升了在 X11 上运行的 KRunner 启动速度。
|
||||
|
||||
你可以通过查阅 [发布说明][5],来了解所有技术性的变动。
|
||||
|
||||
#### Ubuntu Studio 的音频配置
|
||||
|
||||
Ubuntu Studio 的安装工具现在包括了一个音频配置向导,让系统级音频设置更为方便。
|
||||
|
||||
![][6]
|
||||
|
||||
你可以根据自己的需求,调整音频的延迟和采样率。
|
||||
|
||||
![][7]
|
||||
|
||||
这个功能对于使用 Ubuntu Studio 进行音频制作的创作者会特别实用。
|
||||
|
||||
#### 全新壁纸
|
||||
|
||||
![][8]
|
||||
|
||||
新版本的 Ubuntu Studio 引入了一款新壁纸,名为 “Ubuntu Studio Mantic Minotaur”,其设计习得了 Ubuntu 23.10 默认壁纸 “Mantic Minotaur” 的灵感。
|
||||
|
||||
我个人很喜欢它的暗色调设计 🤓
|
||||
|
||||
#### 更新的应用套件
|
||||
|
||||
![][9]
|
||||
|
||||
Ubuntu Studio 23.10 提供了 **一系列更新的应用** ,其中一些重要的应用包括:
|
||||
|
||||
* Ardour 7.5.0
|
||||
* Blender 3.6.2
|
||||
* Inkscape 1.2.2
|
||||
* Audacity 3.3.3
|
||||
* Darktable 4.2.1
|
||||
* Kdenlive 23.08.1
|
||||
* OBS Studio 29.1.3
|
||||
|
||||
#### Linux 内核升级至 6.5 版本
|
||||
|
||||
![][10]
|
||||
|
||||
所有的这些,全都运行在**Linux 内核 6.5**之上,让 Ubuntu Studio 23.10 能够支持如 **USB4/Wi-Fi 7 的初始支持**和**AMD 的各种优化**等。
|
||||
|
||||
#### 🛠️ 其他的改进
|
||||
|
||||
此外,还有一些你应该了解的改变:
|
||||
|
||||
* 由于引入了 0.3.79 版本,提升了 PipeWire 的性能。
|
||||
* Ubuntu Studio 的安装程序已去掉了 Backports PPA 的选项。
|
||||
* 将 Carla 升级到了 2.5.6版。
|
||||
|
||||
你可以访问 [官方发布说明][12] 以了解关于升级和技术变动的更多细节。
|
||||
|
||||
### 📥 下载 Ubuntu Studio 23.10
|
||||
|
||||
你可以在 [官方网站][13] 或者 Ubuntu 的 [镜像仓库][14] 中下载到最新的Ubuntu Studio版本。
|
||||
|
||||
> **[Ubuntu Studio 23.10][15]**
|
||||
|
||||
💬 你以前用过 Ubuntu Studio 吗?你的使用体验如何?
|
||||
|
||||
*(题图:[Ubuntu](https://ubuntu.com/blog/into-the-labyrinth))*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/ubuntu-studio-23-10/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/content/images/2023/10/Ubuntu_Studio_23.10_1.jpg
|
||||
[2]: https://ubuntustudio.org/
|
||||
[3]: https://ubuntu.com/desktop/flavours
|
||||
[4]: https://news.itsfoss.com/content/images/2023/10/Ubuntu_Studio_23.10_2.jpg
|
||||
[5]: https://kde.org/announcements/plasma/5/5.27.8/
|
||||
[6]: https://news.itsfoss.com/content/images/2023/10/ubuntu-studio-audio-setup.png
|
||||
[7]: https://news.itsfoss.com/content/images/2023/10/ubuntu-studio-sample-rate.png
|
||||
[8]: https://news.itsfoss.com/content/images/2023/10/Ubuntu_Studio_23.10_3.jpg
|
||||
[9]: https://news.itsfoss.com/content/images/2023/10/Ubuntu_Studio_23.10_4.jpg
|
||||
[10]: https://news.itsfoss.com/content/images/2023/10/Ubuntu_Studio_23.10_5.jpg
|
||||
[11]: https://news.itsfoss.com/content/images/size/w256h256/2022/08/android-chrome-192x192.png
|
||||
[12]: https://ubuntustudio.org/ubuntu-studio-23-10-release-notes/
|
||||
[13]: https://ubuntustudio.org/download/
|
||||
[14]: https://cdimage.ubuntu.com/ubuntustudio/releases/23.10/
|
||||
[15]: https://cdimage.ubuntu.com/ubuntustudio/releases/23.10/release/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/17/091121v09u1105s09olbbm.jpg
|
||||
@@ -0,0 +1,119 @@
|
||||
[#]: subject: "Xubuntu 23.10 Release is Here With Subtle Improvements"
|
||||
[#]: via: "https://news.itsfoss.com/xubuntu-23-10/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16282-1.html"
|
||||
|
||||
Xubuntu 23.10 发布,提供细微但重要的改进
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Xubuntu 23.10 版本包括了问题修复,更新了内核,同时一些应用也进行了升级,使得它成为一个稳定而不错的升级选择。
|
||||
|
||||
[Xubuntu 23.04][1] 的生命周期即将结束,新的升级版本正好到来。
|
||||
|
||||
Xubuntu 23.10 这个发布版本对其前身进行了进一步的改良,下面我们来看看它提供了哪些新鲜内容。
|
||||
|
||||
> 💡 请注意,Xubuntu 23.10 将持续得到**九个月的支持**,一直到 2024 年 7 月。
|
||||
|
||||
### 🆕 Xubuntu 23.10:有什么新内容?
|
||||
|
||||
![][2]
|
||||
|
||||
这个版本的 Xubuntu 基于 **Ubuntu 23.10 “Mantic Minotaur”** 版本,带来了许多崭新的改进。部分重要的亮点包括:
|
||||
|
||||
* 对 Xfce 的优化
|
||||
* 应用程序的更新
|
||||
* Linux 内核 6.5
|
||||
|
||||
#### 对 Xfce 的优化
|
||||
|
||||
![][3]
|
||||
|
||||
Xubuntu 23.10 搭载了与之前相同的 [Xfce 4.18][4] 桌面环境。但在此基础上,它针对一些如 **garcon**、**libxfce4ui**、**tumbler** 和 **xfconf** 之类的 Xfce 库进行了**多项问题修复**。
|
||||
|
||||
此外,对于音频设备处理和媒体播放器,**Xfce PulseAudio 插件** 也进行了大量的修复。
|
||||
|
||||
在上一版本中,用户曾遇到的关于 **Xfce 电源管理器** 和 **Xfce 屏幕保护程序** 的一些问题,也在这个版本中得到了修复。
|
||||
|
||||
最后, **Xfce 截屏** 新增了对 **AVIF 和 JPEG XL 文件格式的支持**。
|
||||
|
||||
> **[Xfce 4.18 版本发布:令人印象深刻][5]**
|
||||
|
||||
#### 应用程序的更新
|
||||
|
||||
在 Xubuntu 23.10 版本中,有了**一整套更新的应用程序**,其中大部分来源于 XFCE、GNOME 和 MATE 的核心应用的更新。
|
||||
|
||||
其中一些显著的更新包括:
|
||||
|
||||
* Catfish 4.16.4
|
||||
* Mousepad 0.6.1
|
||||
* Thunar 文件管理器 4.18.7
|
||||
* MATE 日历 1.26.0
|
||||
* GNOME 软件 45
|
||||
* Rhythmbox 3.4.7
|
||||
* GIMP 2.10.34
|
||||
|
||||
#### Linux 内核 6.5
|
||||
|
||||
![][6]
|
||||
|
||||
Xubuntu 23.10 由最新发布的 [Linux 内核 6.5][7] 进行驱动,这样便可以支持最新的硬件,比如 **USB4、Wi-Fi 7** ,并且提供了 **良好的 Rust 环境支持**、**AMD FreeSync 视频** 等。
|
||||
|
||||
> [][6A]
|
||||
|
||||
#### 🛠️ 其他的改进
|
||||
|
||||
除了以上提到的内容,还有一些值得一提的变化:
|
||||
|
||||
* 引入了 [Greybird 3.23.3][8],以便得到更好的 GTK 3/4 支持。
|
||||
* 在 PipeWire 环境下加强了对蓝牙耳机的支持。
|
||||
* Firefox、Thunderbird 以及其他新的应用程序中现在使用的是彩色表情符。
|
||||
* 刷新了 [elementary-xfce 0.18][9] 主题,带给你全新的桌面图标体验。
|
||||
* 引入了 Ristretto 0.13.1,给 Xubuntu 的默认图像查看器添加了打印支持功能。
|
||||
|
||||
你可以查阅 [官方发布说明][10] 来更深入地了解 Xubuntu 23.10 发行版特性。
|
||||
|
||||
### 📥 如何下载 Xubuntu 23.10
|
||||
|
||||
为了获取 Xubuntu 的最新发布版,你可以访问 [官方网站][11] 或者 Ubuntu 的 [镜像仓库][12]。
|
||||
|
||||
> **[Xubuntu 23.10][13]**
|
||||
|
||||
对于现有的用户们,你们可以参阅 [官方升级指南][14] 进行版本升级。
|
||||
|
||||
*(题图:[Ubuntu](https://ubuntu.com/blog/into-the-labyrinth))*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/xubuntu-23-10/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/xubuntu-23-04/
|
||||
[2]: https://news.itsfoss.com/content/images/2023/10/Xubuntu_23.10_1.png
|
||||
[3]: https://news.itsfoss.com/content/images/2023/10/Xubuntu_23.10_2.png
|
||||
[4]: https://news.itsfoss.com/xfce-4-18-release/
|
||||
[5]: https://linux.cn/article-15355-1.html
|
||||
[6]: https://news.itsfoss.com/content/images/2023/10/Xubuntu_23.10_3.png
|
||||
[6A]: https://linux.cn/article-16140-1.html
|
||||
[7]: https://news.itsfoss.com/linux-kernel-6-5-release/
|
||||
[8]: https://github.com/shimmerproject/Greybird/releases/tag/v3.23.3
|
||||
[9]: https://github.com/shimmerproject/elementary-xfce/releases/tag/v0.18
|
||||
[10]: https://wiki.xubuntu.org/releases/23.10/release-notes
|
||||
[11]: https://xubuntu.org/download/
|
||||
[12]: https://cdimage.ubuntu.com/xubuntu/releases/23.10/
|
||||
[13]: https://cdimage.ubuntu.com/xubuntu/releases/23.10/release/
|
||||
[14]: https://docs.xubuntu.org/latest/user/C/migrating-upgrading.html
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/14/113232y7wgzcj565q57cjl.jpg
|
||||
@@ -0,0 +1,85 @@
|
||||
[#]: subject: "Focusrite Extends Help to Linux Developer to Enable Driver Support"
|
||||
[#]: via: "https://news.itsfoss.com/focusrite-linux/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16323-1.html"
|
||||
|
||||
Focusrite 帮助 Linux 开发人员提供驱动程序支持
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Focusrite 正在大力支持 Linux 。
|
||||
|
||||
尽管 Linux 作为桌面平台正在快速发展,但与 Windows 和 macOS 相比,它仍然是少数音乐制作人的选择。一个主要原因是缺乏一些 DAW 和硬件制造商的官方支持。
|
||||
|
||||
幸运的是,随着大牌企业涉足 Linux,这一切都在改变。好奇么? 嗯,最近,[PreSonus 宣布其 Studio One DAW 支持 Linux][1]。
|
||||
|
||||
现在,[PreSonus][3] 的直接竞争对手之一 [Focusrite][2] 也加入了进来🤩,他们也生产音频接口和其他专业音频设备。
|
||||
|
||||
如果你是音乐制作人或音乐爱好者,你应该知道这些名字往往是彼此的代名词。虽然我目前使用 PreSonus 而不是 Focusrite,但这两家公司及其产品对于大众市场来说都很重要。
|
||||
|
||||
### Focusrite 对 Linux 支持的承诺
|
||||
|
||||
**Geoffrey Bennett** 是 [LinuxMusicians][5] 论坛的用户,他因致力于为流行的 Focusrite 音频接口(Scarlett 第二代和第三代)提供 Linux 支持而闻名。
|
||||
|
||||
当然,这是一项艰巨的非官方任务。
|
||||
|
||||
为了更进一步,他最近发起了一项筹款活动,以获得 Focusrite 的最新音频接口,即 [Scarlett 第四代][6]。
|
||||
|
||||
除此之外,他的目标是购买 Focusrite 的播客设备。
|
||||
|
||||
![][7]
|
||||
|
||||
筹款活动取得成功的同时,**也得到了 Focusrite 的关注**,**他们提供了大量资金**来帮助他购买最新的音频接口。
|
||||
|
||||
**Focusrite 还表示愿意在产品发布前,向他寄送他没有的设备以及未来的产品。**
|
||||
|
||||
最重要的是,他们提到了他们的**工程团队如何帮助他改进开发工作**。
|
||||
|
||||
> 虽然我之前一直很难与 Focusrite 的工程师或管理层取得联系,但这次筹款活动获得热烈反响的消息传到了 Focusrite 的高层。考虑到 Linux 音频的小众性质,我一直控制着自己的期望值,但这超出了我的想象。
|
||||
>
|
||||
> 我刚刚与他们通了电话,除了提供硬件之外,他们还询问支持开发的其他方式。
|
||||
>
|
||||
> Focusrite 不仅主动提出给我寄来我收藏中没有的设备,而且还提议,对于未来的产品发布,他们将尽最大努力提前向我发送设备。这意味着 Linux 支持可以从产品发布之日起就做好准备!
|
||||
>
|
||||
> 此外,他们正在讨论他们的工程团队如何更好地帮助我简化开发流程,并消除大部分猜测。
|
||||
>
|
||||
> —— Geoffrey 来自 [LinuxMusicians][8]
|
||||
|
||||
因此,Focusrite 希望确保 Linux 社区能够以更好的体验使用他们的产品。也就是说,间接为 Linux 平台提供官方支持。
|
||||
|
||||
这是个大新闻!
|
||||
|
||||
这两家大型音频制造商**也应该会说服其他软件和硬件公司**。无论是对驱动程序的官方支持,还是对客户的故障排除支持,任何方式都是可行的。
|
||||
|
||||
对 Linux 平台的任何关注都将有助于改善 Linux 音频生态系统。
|
||||
|
||||
如果更多的音频公司添加了 Linux 支持,音频专业人士就不必被锁定在专有平台上,也不必支付许可证费用来获得操作系统。
|
||||
|
||||
💬我对未来充满希望!你怎么看呢?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/focusrite-linux/
|
||||
|
||||
作者:[Ankush Das][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://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://linux.cn/article-16254-1.html
|
||||
[2]: https://focusrite.com/
|
||||
[3]: https://www.presonus.com/
|
||||
[5]: https://linuxmusicians.com/
|
||||
[6]: https://focusrite.com/scarlett/4th-generation
|
||||
[7]: https://news.itsfoss.com/content/images/2023/10/go-fund-me-focusrite.jpg
|
||||
[8]: https://linuxmusicians.com/viewtopic.php?t=26173&start=15
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/27/231035gjnehjvraytiwtbw.jpg
|
||||
@@ -0,0 +1,211 @@
|
||||
[#]: subject: "Install and Use Nix Package Manager on non-Nix OS like Ubuntu"
|
||||
[#]: via: "https://itsfoss.com/ubuntu-install-nix-package-manager/"
|
||||
[#]: author: "Sagar Sharma https://itsfoss.com/author/sagar/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16307-1.html"
|
||||
|
||||
在 Ubuntu 等非 Nix 操作系统上安装和使用 Nix 包管理器
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Nix 软件包管理器可以安装在任何 Linux 发行版上。具体方法如下。
|
||||
|
||||
[人们喜欢使用不可变的 NixOS][1] 的原因之一是它的 Nix 包管理器。
|
||||
|
||||
它有超过 80,000 个软件包,这可能与 Debian 软件包的数量相差比较大,但仍然令人印象深刻。
|
||||
|
||||
好处是你不必仅仅为了包管理器而 [安装 NixOS][2]。与 [Homebrew][3] 和 Rust 的 [Cargo 包管理器][4] 一样,你可以在当前发行版中使用 Nix 包管理器。
|
||||
|
||||
为什么要这么做?因为有时,你可能会发现仅以 Nix 打包格式提供的新应用。这种情况很少见,但有可能。
|
||||
|
||||
在本教程中,我将引导你完成以下内容:
|
||||
|
||||
* 安装 Nix 包管理器
|
||||
* 搜索并安装包
|
||||
* 尝试/测试软件包而不安装它们
|
||||
* 更新包
|
||||
* 删除包
|
||||
|
||||
### 在其他 Linux 发行版上安装 Nix 包管理器
|
||||
|
||||
Nix 包管理器有两种安装方式:全局安装和本地安装。
|
||||
|
||||
> 📋 全局安装意味着系统上的每个可用用户都可以访问 nix 包管理器,而本地安装仅适用于当前用户。[Nix 官方文档][5] 建议你使用全局安装。
|
||||
|
||||
#### 全局安装
|
||||
|
||||
如果你想全局安装 Nix 包管理器,那么,你需要执行以下命令:
|
||||
|
||||
````
|
||||
sh <(curl -L https://nixos.org/nix/install) --daemon
|
||||
````
|
||||
|
||||
执行上述命令后,需要输入 `y` 键并按回车键:
|
||||
|
||||
![][6]
|
||||
|
||||
完成后,关闭当前终端,因为它不会在当前终端会话上运行。
|
||||
|
||||
#### 本地安装
|
||||
|
||||
如果你更喜欢本地安装并且不想每次都使用 `sudo`,则执行以下命令:
|
||||
|
||||
````
|
||||
sh <(curl -L https://nixos.org/nix/install) --no-daemon
|
||||
````
|
||||
|
||||
输入 `y` 并在要求确认时按回车键。
|
||||
|
||||
完成后,关闭当前终端会话并启动一个新终端会话以使用 Nix 包管理器。
|
||||
|
||||
### 搜索并安装包
|
||||
|
||||
安装 Nix 包管理器后,下一步是搜索包。
|
||||
|
||||
首先,[访问 Nix 搜索的官方页面][7] 并输入你要安装的软件包的名称。
|
||||
|
||||
从给定的描述中,你可以找到所需的软件包,然后选择 `nix-env` 进行永久安装。
|
||||
|
||||
在这里,你可以添加一些额外的关键字以获得更好的搜索结果。例如,在这里,我搜索 “Firefox browser”:
|
||||
|
||||
![][8]
|
||||
|
||||
我上面提到的最后一步(“复制命令”)什么也不做,只是为你提供了一个用于安装的命令。
|
||||
|
||||
现在,你所要做的就是在终端中执行该命令。
|
||||
|
||||
就我而言,它给了我以下命令来安装 Firefox:
|
||||
|
||||
````
|
||||
nix-env -iA nixpkgs.firefox
|
||||
````
|
||||
|
||||
完成后,你可以使用以下命令列出已安装的软件包:
|
||||
|
||||
````
|
||||
nix-env -q
|
||||
````
|
||||
|
||||
![][9]
|
||||
|
||||
### 使用包而不安装它们
|
||||
|
||||
到目前为止,这是 Nix 包管理器的最佳功能,因为你可以使用/测试包甚至不用安装它!
|
||||
|
||||
为此,你可以使用 Nix Shell,它允许你将交互式 Shell 与指定的包一起使用,关闭后,你将无法再访问该包。
|
||||
|
||||
很酷,对吧?
|
||||
|
||||
要使用 nix-shell 访问你喜欢的软件包,请使用以下命令语法:
|
||||
|
||||
````
|
||||
nix-shell -p <package_name>
|
||||
````
|
||||
|
||||
例如,我想使用一次 `neofetch`,所以我使用了以下命令:
|
||||
|
||||
````
|
||||
nix-shell -p neofetch
|
||||
````
|
||||
|
||||
![][10]
|
||||
|
||||
要退出 Shell,你所要做的就是执行 `exit` 命令:
|
||||
|
||||
````
|
||||
exit
|
||||
````
|
||||
|
||||
### 使用 Nix 包管理器更新包
|
||||
|
||||
使用 Nix 包管理器更新包非常简单。
|
||||
|
||||
要更新软件包,首先,你需要使用以下命令更新频道:
|
||||
|
||||
````
|
||||
nix-channel --update
|
||||
````
|
||||
|
||||
接下来,你可以通过试运行更新命令来列出过时的软件包:
|
||||
|
||||
````
|
||||
nix-env --upgrade --dry-run
|
||||
````
|
||||
|
||||
![][11]
|
||||
|
||||
就我而言,Firefox 浏览器已经过时,需要更新!
|
||||
|
||||
要更新单个包,请使用以下命令:
|
||||
|
||||
````
|
||||
nix-env -u <Package_name>
|
||||
````
|
||||
|
||||
如果你想一次更新所有软件包,请使用以下命令:
|
||||
|
||||
````
|
||||
nix-env -u
|
||||
````
|
||||
|
||||
### 使用 Nix 包管理器删除包
|
||||
|
||||
要删除软件包,你只需按以下方式执行 `nix-env` 命令即可:
|
||||
|
||||
````
|
||||
nix-env --uninstall [package_name]
|
||||
````
|
||||
|
||||
例如,如果我想删除 Firefox 浏览器,那么,我将使用以下命令:
|
||||
|
||||
````
|
||||
nix-env --uninstall firefox
|
||||
````
|
||||
|
||||
![][12]
|
||||
|
||||
### 通过 NixOS 释放其全部潜力
|
||||
|
||||
如果你喜欢 Nix 包管理器背后的想法,请相信我,你一定会喜欢 [NixOS][13]。
|
||||
|
||||
仅使用一个配置文件来复制整个系统就足以说服我切换到 NixOS,但还有更多原因:
|
||||
|
||||
我喜欢 NixOS。以至于我写了整个系列,这样你就不必阅读文档(基础知识):
|
||||
|
||||
> **[NixOS 系列][1]**
|
||||
|
||||
我希望你能像我一样喜欢使用它。
|
||||
|
||||
*(题图:MJ/da586165-eadb-4ed7-9a0b-9c92903344d5)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/ubuntu-install-nix-package-manager/
|
||||
|
||||
作者:[Sagar Sharma][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://itsfoss.com/author/sagar/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://linux.cn/article-15606-1.html
|
||||
[2]: https://linux.cn/article-15624-1.html
|
||||
[3]: https://linux.cn/article-14065-1.html
|
||||
[4]: https://linux.cn/article-13938-1.html
|
||||
[5]: https://nixos.org/learn
|
||||
[6]: https://itsfoss.com/content/images/2023/10/Install-nix-package-manager-globally.png
|
||||
[7]: https://search.nixos.org/packages
|
||||
[8]: https://itsfoss.com/content/images/2023/10/Search-packages-to-install-using-the-Nix-package-manager.png
|
||||
[9]: https://itsfoss.com/content/images/2023/10/List-installed-packages-using-the-nix-package-manager.png
|
||||
[10]: https://itsfoss.com/content/images/2023/10/Use-packages-wihout-installing-them-using-the-nix-package-manager.png
|
||||
[11]: https://itsfoss.com/content/images/2023/10/List-outdated-packages-using-the-nix-package-manager.png
|
||||
[12]: https://itsfoss.com/content/images/2023/10/Remove-packages-using-the-nix-package-manager-1.png
|
||||
[13]: https://nixos.org/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/22/082116ket5ed87padptmbw.jpg
|
||||
@@ -0,0 +1,113 @@
|
||||
[#]: subject: "Tor Browser 13.0 Release is an Exciting Upgrade for Privacy-Focused Users"
|
||||
[#]: via: "https://news.itsfoss.com/tor-browser-13-0-release/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16303-1.html"
|
||||
|
||||
Tor 浏览器 13.0 发布
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 通过新的 Tor 浏览器更新提升你的私人网络体验!
|
||||
|
||||
Tor 浏览器是访问 [Tor 网络][1] 的流行方式之一,它一直是许多想要规避对其施加的限制的人的首选,甚至是那些注重隐私的人的首选。
|
||||
|
||||
当然,使用 Tor 浏览器是最简单的 [提高隐私的方法][2]。
|
||||
|
||||
虽然 Tor 浏览器基于 Mozilla Firefox,但它也进行了一些调整。
|
||||
|
||||
在最新的主要更新中,让我们看看发生了什么变化。
|
||||
|
||||
### 🆕 Tor 浏览器 13.0:有什么新变化?
|
||||
|
||||
![][3]
|
||||
|
||||
据开发人员介绍,Tor 浏览器 13.0 基于 [Firefox ESR 115][4],并带来了一年的推送到上游的修改。
|
||||
|
||||
过渡到较新的 Firefox 版本还**允许他们利用 [Firefox 113][5] 中引入的改进的辅助功能引擎**。
|
||||
|
||||
因此,使用屏幕阅读器等**辅助技术**的用户现在可以在使用 Tor 浏览器时获得**比以往更好的性能**。
|
||||
|
||||
此版本的亮点包括:
|
||||
|
||||
* 改进的 “<ruby>信封打印<rt>Letterboxing</rt></ruby>” 功能
|
||||
* 更新主页
|
||||
* 更新徽标
|
||||
|
||||
#### 改进的 “<ruby>信封打印<rt>Letterboxing</rt></ruby>” 功能
|
||||
|
||||
![][7]
|
||||
|
||||
Tor 浏览器 13.0 版本中的 “<ruby>信封打印<rt>Letterboxing</rt></ruby>” 功能得到了重要更新。
|
||||
|
||||
(LCTT 译注:“<ruby>信封打印<rt>Letterboxing</rt></ruby>” 是一种网络浏览隐私保护技术,它通过为浏览器窗口添加白色填充(看起来像一个信封的周围),来防止网站跟踪你的浏览行为。当你改变浏览器窗口的大小时,“信封打印” 功能会在周边提供白色填充,确保窗口大小始终为特定的大众标准尺寸。这意味着即使你改变窗口大小,那些尝试通过窗口尺寸来跟踪你的网站也无法获取独特的信息。)
|
||||
|
||||
开发人员发现 **1000×1000 像素的默认 “信封打印” 尺寸**存在问题,许多现代网站无法正常运行,导致这些网站切换到适用于平板电脑和智能手机的布局。
|
||||
|
||||
有些网站甚至会显示桌面网站,但只有横向滚动条。为了解决这个问题,他们调整了**窗口的大小**,最大为 1400×900 像素。
|
||||
|
||||
对于最终用户来说,这意味着你无需手动调整窗口大小即可获得合适的尺寸。
|
||||
|
||||
他们还补充说:
|
||||
|
||||
> 桌面版 Tor 浏览器不应再在大屏幕上触发响应断点,并且我们的绝大多数桌面用户将看到熟悉的横向纵横比,更符合现代浏览器的要求。
|
||||
>
|
||||
> 通过计算,我们选择了这一特定尺寸,以便为新窗口提供更大的空间,同时又不会增加过多的桶数量。
|
||||
|
||||
#### 更新了主页
|
||||
|
||||
![][9]
|
||||
|
||||
Tor 浏览器主页的更新已经等了很长时间了。在此版本中,它展示了更新的徽标(更多内容见下文)以及一个新功能 —— **“洋葱化的” DuckDuckGo**,用于访问其 “.onion 站点”。
|
||||
|
||||
这也**与我之前提到的改进的辅助功能引擎**齐头并进,从而为屏幕阅读器和其他辅助技术的用户提供更好的支持。
|
||||
|
||||
他们还修复了可怕的“**红屏死亡**”错误,该错误在打开新的主页选项卡时偶尔会弹出。
|
||||
|
||||
#### 更新徽标
|
||||
|
||||
![][10]
|
||||
|
||||
从文章的开头你就可能已经注意到 Tor 浏览器的徽标有些不同。
|
||||
|
||||
实际上,**Tor 浏览器所有版本的徽标都已更新**,外观更加干净和现代。
|
||||
|
||||
这个熟悉的“洋葱标志”已经存在了一段时间,它是由当时的社区民意调查选出的。很高兴看到他们仍在努力改进它。
|
||||
|
||||
这些只是该版本的主要亮点,你可以通过 [官方发行说明][11] 了解所有技术修复和其他改进。
|
||||
|
||||
### 📥 下载 Tor 浏览器 13.0
|
||||
|
||||
此版本的 Tor 浏览器适用于 **Linux**、**Windows**、**Android、** 和 **macOS**。你可以前往[官方网站][12]获取你选择的套餐。
|
||||
|
||||
> **[Tor 浏览器 13.0][12]**
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/tor-browser-13-0-release/
|
||||
|
||||
作者:[Sourav Rudra][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://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://en.wikipedia.org/wiki/Tor_(network)
|
||||
[2]: https://itsfoss.com/improve-privacy/
|
||||
[3]: https://news.itsfoss.com/content/images/2023/10/Tor_Browser_13.0_1.png
|
||||
[4]: https://www.mozilla.org/en-US/firefox/115.0esr/releasenotes/
|
||||
[5]: https://www.mozilla.org/en-US/firefox/113.0/releasenotes/
|
||||
[7]: https://news.itsfoss.com/content/images/2023/10/Tor_Browser_13.0_2.png
|
||||
[8]: https://news.itsfoss.com/content/images/2023/04/Follow-us-on-Google-News.png
|
||||
[9]: https://news.itsfoss.com/content/images/2023/10/Tor_Browser_13.0_3.png
|
||||
[10]: https://news.itsfoss.com/content/images/2023/10/Tor_Browser_13.0_4.png
|
||||
[11]: https://blog.torproject.org/new-release-tor-browser-130/
|
||||
[12]: https://www.torproject.org/download/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/21/055646urkd0upcknv0znv5.jpg
|
||||
@@ -0,0 +1,152 @@
|
||||
[#]: subject: "Warehouse: A Powerhouse Tool to Manage Flatpak Apps"
|
||||
[#]: via: "https://news.itsfoss.com/warehouse/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16321-1.html"
|
||||
|
||||
Warehouse:管理 Flatpak 应用的强大工具
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 你是否使用 Flatpak 应用?Warehouse 可以让你更轻松。
|
||||
|
||||
有一个应用,可以为你提供有关 Flatpak 应用的所有重要信息,以及管理它的工具,这不是很好吗?
|
||||
|
||||
这一次你很幸运!
|
||||
|
||||
在这次的首次尝试中,我们有一个有趣的应用程序,名为 “**Warehouse**”,**它可以帮助你管理 Flatpak 应用**。
|
||||
|
||||
我们以前介绍过一个类似的应用,名为 “[Flatseal][1]”,但它更侧重于管理 Flatpak 的权限。
|
||||
|
||||
让我们看看 Warehouse 提供了哪些功能。
|
||||
|
||||
### Warehouse:概述 ⭐
|
||||
|
||||
![][2]
|
||||
|
||||
开发人员将其称为“**多功能工具箱**”,Warehouse 可用于**管理 Flatpak 用户数据**、**查看 Flatpak 的信息**,甚至**批量管理系统上安装的 Flatpaks**。
|
||||
|
||||
它主要使用 **Python 语言**编写,具有以下主要特点:
|
||||
|
||||
* 轻松管理用户数据
|
||||
* 批量操作功能
|
||||
* 清除残余数据
|
||||
|
||||
### 初步印象 👨💻
|
||||
|
||||
我一开始是在我的 Ubuntu 系统上测试 Warehouse。从 **Flathub** 上安装它很简单。
|
||||
|
||||
打开后,显示了所有**已安装的 Flatpak 应用**的列表。它们**都以有序的方式排列**。
|
||||
|
||||
在我看来,如果它们添加了切换到网格布局的选项,会看起来更好。
|
||||
|
||||
![][4]
|
||||
|
||||
> 📋 你是否对列在 Firefox 之上的应用感到好奇?我们最近介绍过它,它是一个名为 “[Mission Center][5]” 的系统监控应用。
|
||||
|
||||
接下来,我**查看了 Flatpak 应用的属性**,我点击应用旁边的“信息”标志,打开了应用属性窗口。
|
||||
|
||||
它提供了有关应用程序的各种信息,从**名称**、**描述**、**应用 ID**,一直到**活动提交**和**安装大小**。
|
||||
|
||||
![][6]
|
||||
|
||||
类似地,我可以点击“垃圾桶”图标,要么**完全卸载 Flatpak 应用**,要么为将来重新安装**保留用户数据**,并恢复设置/内容。
|
||||
|
||||
![][7]
|
||||
|
||||
Warehouse 还具有**搜索功能**,允许你搜索特定的应用。当你安装了很多 Flatpak 应用时,这可能会很有用。
|
||||
|
||||
只需点击应用程序左上角的**放大镜**图标即可开始搜索。
|
||||
|
||||
![][8]
|
||||
|
||||
你还可以**设置过滤器**,以**应用甚至运行时(系统完成各种任务所需的)进行排序**。
|
||||
|
||||
点击应用程序左上角的“漏斗”图标以开始筛选。
|
||||
|
||||
![][9]
|
||||
|
||||
然后,我查看了**批量操作功能**。我首先点击了应用右上方的“勾号”标志。
|
||||
|
||||
然后,我就可以选择多个应用,执行**复制信息**、**删除应用数据**和**卸载它们**等操作。
|
||||
|
||||
应用程序右下角的三个小按钮可以方便地执行上述操作。
|
||||
|
||||
![][10]
|
||||
|
||||
之后,我进入菜单,其中有一些重要选项。
|
||||
|
||||
![][11]
|
||||
|
||||
第一个选项“<ruby>从文件安装<rt>Install from file</rt></ruby>”允许我使用 `.flatpakref` 文件安装 Flatpak 应用。
|
||||
|
||||
![][12]
|
||||
|
||||
在安装过程中,它问我是要为特定用户安装,还是要为使用系统的所有人安装。我选择了后者。
|
||||
|
||||
![][13]
|
||||
|
||||
随后,我查看了“<ruby>管理残余数据<rt>Manage Leftover Data</rt></ruby>”选项。它向我显示了一个旧的 Flatpak 应用留下了多少数据。
|
||||
|
||||
我可以选择通过“<ruby>安装<rt>Install</rt></ruby>”选项重新安装应用并恢复数据,也可以使用“<ruby>垃圾桶<rt>Trash</rt></ruby>”选项彻底清除系统中的任何痕迹。有时,残留数据会占用大量空间。
|
||||
|
||||
![][14]
|
||||
|
||||
如果你经常安装/删除应用,那么你的系统中可能会有很多剩余数据。
|
||||
|
||||
如果你想管理 Flatpak 仓库,可以前往“<ruby>管理远程仓库<rt>Manage Remotes</rt></ruby>”选项,该选项允许你添加或删除它们。
|
||||
|
||||
![][15]
|
||||
|
||||
虽然你可以在 Fedora 和其他一些发行版的软件中心完成这项工作,但在一个应用中就能获得所有基本功能,这将是一种无缝体验。
|
||||
|
||||
最后,你还可以使用大量的“**键盘快捷键**”,通过键盘快速浏览应用的所有功能。
|
||||
|
||||
![][16]
|
||||
|
||||
### 📥 下载 Warehouse
|
||||
|
||||
你可以前往 [Flathub 商店][17]下载最新版本。
|
||||
|
||||
> **[Warehouse(Flathub)][17]**
|
||||
|
||||
你还可以访问其 [GitHub 仓库][18] 查看源代码。
|
||||
|
||||
你对 Warehouse 应用有何看法?请在下面的评论中分享你的想法。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/warehouse/
|
||||
|
||||
作者:[Sourav Rudra][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://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/flatseal/
|
||||
[2]: https://news.itsfoss.com/content/images/2023/10/Warehouse_1.png
|
||||
[3]: https://news.itsfoss.com/content/images/2023/04/Follow-us-on-Google-News.png
|
||||
[4]: https://news.itsfoss.com/content/images/2023/10/Warehouse_2a.png
|
||||
[5]: https://news.itsfoss.com/mission-center/
|
||||
[6]: https://news.itsfoss.com/content/images/2023/10/Warehouse_2b.png
|
||||
[7]: https://news.itsfoss.com/content/images/2023/10/Warehouse_2c.png
|
||||
[8]: https://news.itsfoss.com/content/images/2023/10/Warehouse_3.png
|
||||
[9]: https://news.itsfoss.com/content/images/2023/10/Warehouse_4.png
|
||||
[10]: https://news.itsfoss.com/content/images/2023/10/Warehouse_5.png
|
||||
[11]: https://news.itsfoss.com/content/images/2023/10/Warehouse_6.png
|
||||
[12]: https://news.itsfoss.com/content/images/2023/10/Warehouse_7a.png
|
||||
[13]: https://news.itsfoss.com/content/images/2023/10/Warehouse_7b.png
|
||||
[14]: https://news.itsfoss.com/content/images/2023/10/Warehouse_8.png
|
||||
[15]: https://news.itsfoss.com/content/images/2023/10/Warehouse_9.png
|
||||
[16]: https://news.itsfoss.com/content/images/2023/10/Warehouse_10.png
|
||||
[17]: https://flathub.org/apps/io.github.flattool.Warehouse
|
||||
[18]: https://github.com/flattool/warehouse
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/26/224157oonzwjd1vp0d2p85.jpg
|
||||
@@ -0,0 +1,95 @@
|
||||
[#]: subject: "An Interesting Bluetooth App for Linux Just Appeared!"
|
||||
[#]: via: "https://news.itsfoss.com/bluetooth-app-linux-overskride/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16315-1.html"
|
||||
|
||||
Overskride:刚刚出现的一款有趣的 Linux 蓝牙应用!
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 通过这个全新的应用可以实现所有蓝牙功能!
|
||||
|
||||
一款适用于 Linux 的新应用已经出现,它可能是满足你所有蓝牙需求的一站式应用。
|
||||
|
||||
这款名为 “**Overskride**” 的开源应用首次发布。尽管它还处于开发阶段,但已经提供了一些不错的功能。
|
||||
|
||||
请允许我带你看一下。
|
||||
|
||||
### Overskride:可以期待什么?
|
||||
|
||||
![][1]
|
||||
|
||||
Overskride 将会吸引 Rust 爱好者,因为它**主要是用 Rust 语言**编写的,带有 **GTK4/libadwaita 风格**。
|
||||
|
||||
根据开发人员的说法,它是一个**简单的蓝牙和 Obex 客户端** _(未来计划)_,无论使用什么桌面环境或窗口管理器都可以工作。
|
||||
|
||||
一些主要功能包括:
|
||||
|
||||
* 信任/阻止设备。
|
||||
* 能够发送/接收文件。
|
||||
* 设置连接超时时间。
|
||||
* 支持配置适配器。
|
||||
|
||||
查看上面的截图,你可以看到自定义蓝牙设备和连接的所有基本选项,包括适配器名称。
|
||||
|
||||
当然,考虑到这是该应用的第一次发布,人们不应该抱有太高的期望。因此,还有改进的空间。
|
||||
|
||||
以下是 **Overskride 的一些预览**,以查看它提供的功能。
|
||||
|
||||
我在 Ubuntu 22.04 LTS 和 GNOME 42.9 上使用提供的 Flatpak 包进行安装。在此安装上运行似乎没有任何问题。
|
||||
|
||||
Overskride 能够检测到我的智能手机,并提供多种配置选项。
|
||||
|
||||
![][3]
|
||||
|
||||
你可以将设备添加到受信任列表或阻止列表、重命名并发送文件。
|
||||
|
||||
我尝试了**文件传输功能**,但在此之前,我必须使用 [Flatseal][4] 允许访问用户文件,以便它可以读取我系统上的文件。
|
||||
|
||||
![][5]
|
||||
|
||||
我在手机上接受文件传输后,传输开始。速度还可以,文件确实完整地到达那里,没有任何问题。
|
||||
|
||||
![][6]
|
||||
|
||||
我必须说,在其首次发布时,开发人员为我们提供了一个有用的实用程序。我很高兴看到其未来版本将提供什么样的改进。
|
||||
|
||||
一位 Reddit 用户 [询问][7] 是否有任何计划**支持显示无线耳机的电池百分比**。对此,开发人员提到这样做很棘手,因为 每个设备都遵循不同的规范,这使得这一目标更难实现。
|
||||
|
||||
### 📥 获得 Overskride
|
||||
|
||||
目前,Overskride 只能通过 [GitHub 仓库][9] 以 Flatpak 软件包的形式提供。或者,你也可以从源代码开始编译。
|
||||
|
||||
> **[Overskride (GitHub)][10]**
|
||||
|
||||
我希望开发者在发布稳定版本后将其发布在 [Flathub][11] 上,以便用户可以使用。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/bluetooth-app-linux-overskride/
|
||||
|
||||
作者:[Sourav Rudra][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://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://news.itsfoss.com/content/images/2023/10/Overskride_1.png
|
||||
[2]: https://news.itsfoss.com/content/images/2023/04/Follow-us-on-Google-News.png
|
||||
[3]: https://news.itsfoss.com/content/images/2023/10/Overskride_2.png
|
||||
[4]: https://itsfoss.com/flatseal/
|
||||
[5]: https://news.itsfoss.com/content/images/2023/10/Overskride_3.png
|
||||
[6]: https://news.itsfoss.com/content/images/2023/10/Overskride_4.png
|
||||
[7]: https://www.reddit.com/r/gnome/comments/17a5m99/full_release_of_my_bluetooth_app_d/k5b3ybg/
|
||||
[9]: https://github.com/kaii-lb/overskride
|
||||
[10]: https://github.com/kaii-lb/overskride/releases/
|
||||
[11]: https://flathub.org/en
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/25/092956c1jb1bqxx8qryrju.jpg
|
||||
@@ -0,0 +1,80 @@
|
||||
[#]: subject: "Is This The Ultimate Video Streaming App?"
|
||||
[#]: via: "https://news.itsfoss.com/video-streaming-app/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16318-1.html"
|
||||
|
||||
Grayjay:可能是一个终极视频流应用程序
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 一款可提供源代码的应用,让视频流应用不再烦恼。你怎么看?
|
||||
|
||||
视频流媒体服务大多包含 DRM,并限制下载离线媒体拷贝,即使你拥有这些媒体。
|
||||
|
||||
每个平台都有自己的一套规则,这些规则对创作者来说可能公平也可能不公平。那么,对于消费者来说呢?要关注多个网络,而且平台可用的订阅选项也很混乱。
|
||||
|
||||
如果我们有一个**单一应用让我们访问所有这些网络的视频怎么样?**
|
||||
|
||||
**不仅如此:**如果我们可以拥有**离线下载**的福利以及更多功能,例如能够在同一应用中**将视频投射到电视**,而无需使用多个应用,那会怎么样?
|
||||
|
||||
而且,这些功能都以**应用的形式存在,其源码可以检查和修改**。听起来令人印象深刻,对吧?
|
||||
|
||||
嗯,这就是一个组织 [FUTO][1]([**Louis Rossmann**][2] 是其成员之一)提出的。
|
||||
|
||||
来认识一下 “**Grayjay**”,你可以在该应用中**跨多个网络关注内容创作者,没有 DRM 和任何不必要的限制**。
|
||||
|
||||
### Grayjay:专注于创作者
|
||||
|
||||
![][3]
|
||||
|
||||
Grayjay 是一款媒体应用,旨在让创作者控制他们拥有的视频以及任何获利机会。
|
||||
|
||||
该应用处于初始阶段,因此其主要目标尚未反映在该应用中。
|
||||
|
||||
目前,该应用是一个**提供源码**的产品,你可以在其中观看来自你喜爱的网络的视频,同时摆脱跟踪器、广告和平台的其他烦恼。
|
||||
|
||||
**Louis Rossmann** 是这个项目的中心,我相信这让我们值得去看一下:
|
||||
|
||||
> 💡 Louis 是一位颇受欢迎的 YouTuber,他发布的视频涉及可维修性、反竞争行为等。他总是说出自己的想法,这使我们大多数人都喜欢他。
|
||||
|
||||
具体大家可以观看视频,我给大家总结一下,节省大家的时间:
|
||||
|
||||
* Grayjay 的目标是成为 [Newpipe][4] 和 [YouTube ReVanced][5] 等应用的**更好替代品**。
|
||||
* 该应用**提供源码**,它允许你查看源代码,根据你的要求制作你自己的版本(但不能用于商业用途)。
|
||||
* 该应用**不是免费的**,其商业模式将用户视为客户,而不是产品。然而,如果没有任何 DRM,该应用最终将为你提供无限的免费试用期。
|
||||
* 虽然 Louis 将其称为“开源”以让大多数人理解,但它并不具有你通常期望的标准许可证。他们选择使用非标准许可证,以便能够阻止该应用的恶意重新分发。
|
||||
|
||||
你可以在其 [GitLab 页面][6] 及其 [官方网站][7] 上仔细查看它。
|
||||
|
||||
> **[Grayjay][7]**
|
||||
|
||||
目前仅适用于安卓。考虑到它仍在开发中,你可以决定安装 APK 来尝试一下。
|
||||
|
||||
💬 该应用提供了源代码,Louis 提到它可以针对个人使用场景重新分发。你对 Grayjay 有何看法? 分享你的意见。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/video-streaming-app/
|
||||
|
||||
作者:[Ankush Das][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://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://futo.org/
|
||||
[2]: https://www.youtube.com/@rossmanngroup
|
||||
[3]: https://news.itsfoss.com/content/images/2023/10/gray-jay.jpg
|
||||
[4]: https://newpipe.net/
|
||||
[5]: https://revanced.app/
|
||||
[6]: https://gitlab.futo.org/videostreaming/grayjay
|
||||
[7]: https://grayjay.app/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/26/115233ydzdt8kedtkkt7ti.jpg
|
||||
@@ -0,0 +1,97 @@
|
||||
[#]: subject: "Geany 2.0 Release Makes it a More Versatile Text Editor and IDE"
|
||||
[#]: via: "https://news.itsfoss.com/geany-2-0/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16327-1.html"
|
||||
|
||||
Geany 2.0 发布使其成为更通用的文本编辑器和 IDE
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> Geany 2.0 带来了新的文件类型和其他改进。
|
||||
|
||||
[Geany][1] 被认为是 [Linux 上最好的 Python IDE][2] 之一,它是**一个基于 GTK3 工具包的开源、轻量级 IDE**。
|
||||
|
||||
考虑到 Geany 的功能集对各种用户的吸引力,它也可以算作 [Linux 上 Notepad++ 的替代品][3]之一。
|
||||
|
||||
现在,新版本已以 “**Geany 2.0**” 的形式推出,提供了许多改进。
|
||||
|
||||
让我们看看有什么。
|
||||
|
||||
### 🆕 Geany 2.0:有什么新变化?
|
||||
|
||||
![][4]
|
||||
|
||||
Geany 版本的亮点可以分为两个不同的部分,主要涵盖界面和对文件类型的更好支持。
|
||||
|
||||
#### 文件类型升级
|
||||
|
||||
通过更新 [基本类型][5],改进了 **Kotlin** 的文件类型配置。同样,对于 **Python** ,针对 Python 3 重写了标准库标签创建脚本,并改进了对 **ctags** 文件格式的支持。
|
||||
|
||||
最后,Geany 添加了对 [AutoIt][6] 和 [GDScript][7] 等新文件类型的**支持,并更新了 **Nim** 和 **PHP** 的文件类型配置,以解决一些长期存在的问题。
|
||||
|
||||
#### 界面改进
|
||||
|
||||
![][8]
|
||||
|
||||
Geany 2.0 在文档列表的侧边栏中提供了**新的树视图**。它是默认启用的,因此你无需执行任何操作。
|
||||
|
||||
当你有大量单独的文件需要检查时,它非常实用。你还可以折叠特定文件夹以最大程度地减少混乱。
|
||||
|
||||
![][9]
|
||||
|
||||
**编译器消息现在使用深色主题友好的颜色**,以便你可以轻松阅读消息。这在深夜编码时应该很有帮助。
|
||||
|
||||
此外,**一个新的确认对话框**添加到整个会话的“搜索和替换”功能中,并且**添加了一个选项以在符号树中显示符号**,而无需类别组。
|
||||
|
||||
#### 🛠️ 其他变化
|
||||
|
||||
除了上述内容之外,还有一些值得注意的变化:
|
||||
|
||||
* Geany 现在需要 GTK 3.24。
|
||||
* 你现在可以滚动文档选项卡。
|
||||
* 更新了多种语言的翻译。
|
||||
* 修复了文件类型更改时的关键词着色问题。
|
||||
* 现在默认启用“更改历史记录”功能。
|
||||
|
||||
有关此版本的更多详细信息,你可以浏览[官方发行说明][10]。
|
||||
|
||||
### 📥 下载 Geany 2.0
|
||||
|
||||
由于它是 **跨平台 IDE**,Geany 2.0 可用于 **Linux**、**Windows** 和 **macOS**。你可以前往 [Flathub 商店][11]或其 [官方网站][12]下载你选择的包。
|
||||
|
||||
> **[Geany][12]**
|
||||
|
||||
如果你对源代码感兴趣,你还可以访问其 [GitHub 仓库][13]。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/geany-2-0/
|
||||
|
||||
作者:[Sourav Rudra][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://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://www.geany.org/
|
||||
[2]: https://itsfoss.com/best-python-ides-linux/
|
||||
[3]: https://itsfoss.com/notepad-alternatives-for-linux/
|
||||
[4]: https://news.itsfoss.com/content/images/2023/10/Geany_2.0_1.png
|
||||
[5]: https://kotlinlang.org/docs/basic-types.html
|
||||
[6]: https://en.wikipedia.org/wiki/AutoIt
|
||||
[7]: https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/index.html
|
||||
[8]: https://news.itsfoss.com/content/images/2023/10/Geany_2.0_2.png
|
||||
[9]: https://news.itsfoss.com/content/images/2023/10/Geany_2.0_3.png
|
||||
[10]: https://www.geany.org/documentation/releasenotes/
|
||||
[11]: https://flathub.org/apps/org.geany.Geany
|
||||
[12]: https://www.geany.org/download/releases/
|
||||
[13]: https://github.com/geany/geany
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/29/171811kqqcqggcg2h517go.jpg
|
||||
192
published/202310/20231020 Some miscellaneous git facts.md
Normal file
192
published/202310/20231020 Some miscellaneous git facts.md
Normal file
@@ -0,0 +1,192 @@
|
||||
[#]: subject: "Some miscellaneous git facts"
|
||||
[#]: via: "https://jvns.ca/blog/2023/10/20/some-miscellaneous-git-facts/"
|
||||
[#]: author: "Julia Evans https://jvns.ca/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "KaguyaQiang"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16316-1.html"
|
||||
|
||||
一些被忽略的 Git 知识
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
我一直在慢慢地撰写关于 Git 工作原理的文章。尽管我曾认为自己对 Git 非常了解,但像往常一样,当我尝试解释某事的时候,我又学到一些新东西。
|
||||
|
||||
现在回想起来,这些事情都不算太令人吃惊,但我以前并没有清楚地思考过它们。
|
||||
|
||||
事实是:
|
||||
|
||||
* “索引”、“暂存区” 和 `-cached` 是一回事
|
||||
* 隐匿文件就是一堆提交
|
||||
* 并非所有引用都是分支或标签
|
||||
* 合并提交不是空的
|
||||
|
||||
下面我们来详细了解这些内容。
|
||||
|
||||
### “索引”、“暂存区” 和 `-cached` 是一回事
|
||||
|
||||
当你运行 `git add file.txt`,然后运行 `git status`,你会看到类似以下的输出:
|
||||
|
||||
```
|
||||
$ git add content/post/2023-10-20-some-miscellaneous-git-facts.markdown
|
||||
$ git status
|
||||
Changes to be committed:
|
||||
(use "git restore --staged <file>..." to unstage)
|
||||
new file: content/post/2023-10-20-some-miscellaneous-git-facts.markdown
|
||||
```
|
||||
|
||||
人们通常称这个过程为“暂存文件”或“将文件添加到暂存区”。
|
||||
|
||||
当你使用 `git add` 命令来暂存文件时,Git 在后台将文件添加到其对象数据库(在 `.git/objects` 目录下),并更新一个名为 `.git/index` 的文件以引用新添加的文件。
|
||||
|
||||
Git 中的这个“暂存区”事实上有 3 种不同的名称,但它们都指的是同一个东西(即 `.git/index` 文件):
|
||||
|
||||
* `git diff --cached`
|
||||
* `git diff --staged`
|
||||
* `.git/index` 文件
|
||||
|
||||
我觉得我早该早点认识到这一点,但我之前并没有,所以在这里提醒一下。
|
||||
|
||||
### 隐匿文件就是一堆提交
|
||||
|
||||
当我运行 `git stash` 命令来保存更改时,我一直对这些更改究竟去了哪里感到有些困惑。事实上,当你运行 `git stash` 命令时,Git 会根据你的更改创建一些提交,并用一个名为 `stash` 的引用来标记它们(在 `.git/refs/stash` 目录下)。
|
||||
|
||||
让我们将此博客文章隐匿起来,然后查看 `stash` 引用的日志:
|
||||
|
||||
```
|
||||
$ git log stash --oneline
|
||||
6cb983fe (refs/stash) WIP on main: c6ee55ed wip
|
||||
2ff2c273 index on main: c6ee55ed wip
|
||||
... some more stuff
|
||||
```
|
||||
|
||||
现在我们可以查看提交 `2ff2c273` 以查看其包含的内容:
|
||||
|
||||
```
|
||||
$ git show 2ff2c273 --stat
|
||||
commit 2ff2c273357c94a0087104f776a8dd28ee467769
|
||||
Author: Julia Evans <julia@jvns.ca>
|
||||
Date: Fri Oct 20 14:49:20 2023 -0400
|
||||
|
||||
index on main: c6ee55ed wip
|
||||
|
||||
content/post/2023-10-20-some-miscellaneous-git-facts.markdown | 40 ++++++++++++++++++++++++++++++++++++++++
|
||||
```
|
||||
|
||||
毫不意外,它包含了这篇博客文章。这很合理!
|
||||
|
||||
实际上,`git stash` 会创建两个独立的提交:一个是索引提交,另一个是你尚未暂存的改动提交。这让我感到很振奋,因为我一直在开发一款工具,用于快照和恢复 Git 仓库的状态(也许永远不会发布),而我提出的设计与 Git 的隐匿实现非常相似,所以我对自己的选择感到满意。
|
||||
|
||||
显然 `stash` 中的旧提交存储在 reflog 中。
|
||||
|
||||
### 并非所有引用都是分支或标签
|
||||
|
||||
Git 文档中经常泛泛地提到 “引用”,这使得我有时觉得很困惑。就个人而言,我在 Git 中处理 “引用” 的 99% 时间是指分支或 HEAD,而剩下的 1% 时间是指标签。事实上,我以前完全不知道任何不是分支、标签或 `HEAD` 的引用示例。
|
||||
|
||||
但现在我知道了一个例子—— `stash` 是一种引用,而它既不是分支也不是标签!所以这太酷啦!
|
||||
|
||||
以下是我博客的 Git 仓库中的所有引用(除了 `HEAD`):
|
||||
|
||||
```
|
||||
$ find .git/refs -type f
|
||||
.git/refs/heads/main
|
||||
.git/refs/remotes/origin/HEAD
|
||||
.git/refs/remotes/origin/main
|
||||
.git/refs/stash
|
||||
```
|
||||
|
||||
人们在本帖回复中提到的其他一些参考资料:
|
||||
|
||||
- `refs/notes/*`,来自 [`git notes`][5]
|
||||
- `refs/pull/123/head` 和 `refs/pull/123/head`` 用于 GitHub 拉取请求(可通过 `git fetch origin refs/pull/123/merge` 获取)
|
||||
- `refs/bisect/*`,来自 `git bisect`
|
||||
|
||||
### 合并提交不是空的
|
||||
|
||||
这是一个示例 Git 仓库,其中我创建了两个分支 `x` 和 `y`,每个分支都有一个文件(`x.txt` 和 `y.txt`),然后将它们合并。让我们看看合并提交。
|
||||
|
||||
```
|
||||
$ git log --oneline
|
||||
96a8afb (HEAD -> y) Merge branch 'x' into y
|
||||
0931e45 y
|
||||
1d8bd2d (x) x
|
||||
```
|
||||
|
||||
如果我运行 `git show 96a8afb`,合并提交看起来是“空的”:没有差异!
|
||||
|
||||
```
|
||||
git show 96a8afb
|
||||
commit 96a8afbf776c2cebccf8ec0dba7c6c765ea5d987 (HEAD -> y)
|
||||
Merge: 0931e45 1d8bd2d
|
||||
Author: Julia Evans <julia@jvns.ca>
|
||||
Date: Fri Oct 20 14:07:00 2023 -0400
|
||||
|
||||
Merge branch 'x' into y
|
||||
```
|
||||
|
||||
但是,如果我单独比较合并提交与其两个父提交之间的差异,你会发现当然**有**差异:
|
||||
|
||||
```
|
||||
$ git diff 0931e45 96a8afb --stat
|
||||
x.txt | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
$ git diff 1d8bd2d 96a8afb --stat
|
||||
y.txt | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
```
|
||||
|
||||
现在回想起来,合并提交并不是实际上“空的”(它们是仓库当前状态的快照,就像任何其他提交一样),这一点似乎很明显,只是我以前从未思考为什么它们看起来为空。
|
||||
|
||||
显然,这些合并差异为空的原因是合并差异只显示**冲突** —— 如果我创建一个带有合并冲突的仓库(一个分支在同一文件中添加了 `x`,而另一个分支添加了 `y`),然后查看我解决冲突的合并提交,它看起来会像这样:
|
||||
|
||||
```
|
||||
$ git show HEAD
|
||||
commit 3bfe8311afa4da867426c0bf6343420217486594
|
||||
Merge: 782b3d5 ac7046d
|
||||
Author: Julia Evans <julia@jvns.ca>
|
||||
Date: Fri Oct 20 15:29:06 2023 -0400
|
||||
|
||||
Merge branch 'x' into y
|
||||
|
||||
diff --cc file.txt
|
||||
index 975fbec,587be6b..b680253
|
||||
--- a/file.txt
|
||||
+++ b/file.txt
|
||||
@@@ -1,1 -1,1 +1,1 @@@
|
||||
- y
|
||||
-x
|
||||
++z
|
||||
```
|
||||
|
||||
这似乎是在告诉我,一个分支添加了 `x`,另一个分支添加了 `y`,合并提交通过将 `z` 替代冲突解决了它。但在前面的示例中,没有冲突,所以 Git 并未显示任何差异。
|
||||
|
||||
(感谢 Jordi 告诉我合并差异的工作原理)
|
||||
|
||||
### 先这样吧
|
||||
|
||||
些写到这里吧,也许我将在学到更多 Git 知识时撰写另一篇关于 Git 的知识的博客文章。
|
||||
|
||||
*(题图:MJ/03bfecc3-944e-47a0-a4fd-575293d2ba92)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://jvns.ca/blog/2023/10/20/some-miscellaneous-git-facts/
|
||||
|
||||
作者:[Julia Evans][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[KaguyaQiang][c]
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://jvns.ca/
|
||||
[b]: https://github.com/lujun9972
|
||||
[c]: https://github.com/KaguyaQiang
|
||||
[1]: tmp.0vBZr0yeF0#the-index-staging-area-and-cached-are-all-the-same-thing
|
||||
[2]: tmp.0vBZr0yeF0#the-stash-is-a-bunch-of-commits
|
||||
[3]: tmp.0vBZr0yeF0#not-all-references-are-branches-or-tags
|
||||
[4]: tmp.0vBZr0yeF0#merge-commits-aren-t-empty
|
||||
[5]: https://tylercipriani.com/blog/2022/11/19/git-notes-gits-coolest-most-unloved-feature/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/25/122259mfu0uowyppuyfdyo.jpg
|
||||
@@ -0,0 +1,242 @@
|
||||
[#]: subject: "Bitwarden vs. Proton Pass: Comparing Top Open-Source Password Managers"
|
||||
[#]: via: "https://itsfoss.com/bitwarden-vs-proton-pass/"
|
||||
[#]: author: "Ankush Das https://itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16306-1.html"
|
||||
|
||||
Bitwarden 与 Proton Pass:顶级开源密码管理器的比较
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 你最钟爱哪一个开源密码管理器?
|
||||
|
||||
Bitwarden 和 Proton Pass 是两个杰出的开源密码管理器。
|
||||
|
||||
Bitwarden 已经成为一个可靠的选择,运行稳定已经超过六年了,而 Proton Pass 则是较新的参与者。
|
||||
|
||||
你应该选哪一个呢?是**选择已被大众信任的密码管理器还是选择由以隐私为导向的 Proton 新开发的产品**?
|
||||
|
||||
我一直使用 Bitwarden 和带高级特性的 Proton Pass。主要使用的是 Bitwarden,但自 Proton Pass 推出后我也在试用它。
|
||||
|
||||
在这里,我会分享我对两者的使用体验,以及在选择密码管理器时需要了解的一些注意事项。
|
||||
|
||||
### 应用场景和应用程序的可用性
|
||||
|
||||
选用密码管理器时,应用程序的可用情况和你的使用场景起着重要角色。
|
||||
|
||||
你需要提些问题给自己:
|
||||
|
||||
* 我在哪些地方(如桌面、移动设备或网页浏览器)需要密码管理器?
|
||||
* 它有提供哪些额外功能?
|
||||
* 是否坚持使用一个服务满足多种功能需求?
|
||||
|
||||
我会在文章的后半部分详细阐述这些功能特性。但首先,你需要确定你想在哪里使用密码管理器,以及是否希望单独保持密码管理器服务。
|
||||
|
||||
#### Proton Pass
|
||||
|
||||
在编写本文时,Proton Pass 仅以 **浏览器扩展** 形式存在,同时提供给 **移动平台** 使用。
|
||||
|
||||
![][1]
|
||||
|
||||
你可以为 **Mozilla Firefox、Google Chrome、Brave、Edge** 及其它基于 Chrome 的浏览器获取扩展。你也可以选择在你的 **安卓或 iOS** 设备上安装它。
|
||||
|
||||
![][2]
|
||||
|
||||
✅ _如果你不需要桌面应用的密码管理器,同时希望继续使用 Proton 提供的全部服务,那么 Proton Pass 是一个适合的选择。_
|
||||
|
||||
#### Bitwarden
|
||||
|
||||
反之,Bitwarden 可以作为 **桌面应用**,支持在 **Windows、 macOS、Linux** 上运行。
|
||||
|
||||
此外,你可以为 **Google Chrome、Firefox、Vivaldi, Opera、Edge、Tor 和 DuckDuckGo for Mac** 获取相应的扩展。
|
||||
|
||||
![][3]
|
||||
|
||||
对于移动平台来说,Bitwarden 支持 iPhone、Apple Watch 和安卓手机。你也可以从 F-Droid 安装到安卓设备上。
|
||||
|
||||
还不仅限于这些,你可以将 Bitwarden 作为一款 **网页应用**,或通过 **命令行接口** 来使用。
|
||||
|
||||
✅ _如果你需要一个能够在多个平台上无缝使用的密码管理器,那么 Bitwarden 就是你完美的选择。_
|
||||
|
||||
### 用户体验
|
||||
|
||||
#### Bitwarden
|
||||
|
||||
Bitwarden 的用户体验简洁且低调。
|
||||
|
||||
以下是浏览器插件的界面样式:
|
||||
|
||||
![][4]
|
||||
|
||||
虽然用户界面随着年份的推移有所改进建,但始终忠于其核心理念,也就是 **注重简洁而不是华丽的 UI**。
|
||||
|
||||
它不会打扰你的操作,始终提供熟悉的用户体验。
|
||||
|
||||
![][5]
|
||||
|
||||
你可以在预设的 “dark”、“light”、“solarized dark” 和 “nord” 主题间自由切换。
|
||||
|
||||
![][6]
|
||||
|
||||
无论你正在使用桌面应用、移动应用还是浏览器扩展,它都能给你带来同样的便利。
|
||||
|
||||
#### Proton Pass
|
||||
|
||||
Proton Pass 在其布局方面 **颇具特色** ,每次你访问该扩展时,它都会给出一个详细的凭证概览。
|
||||
|
||||
![][7]
|
||||
|
||||
有些用户可能更倾向于 **现代化的 UI 处理方式**,这完全看你的个人喜好。
|
||||
|
||||
我个人更倾向于 Bitwarden 的传统设计方式。
|
||||
|
||||
### 价格
|
||||
|
||||
你可以免费开始使用这两种服务。
|
||||
|
||||
Bitwarden 和 Proton Pass 在其免费计划中都不限制存储的登录凭证数量和可使用设备的数量。
|
||||
|
||||
如果你需要包括紧急访问、家庭共享、安全存储、二次验证、电子邮箱别名隐藏等特性,你需要升级为高级版。
|
||||
|
||||
![][8]
|
||||
|
||||
[Bitwarden][9] 的年费仅为 **10 美元**,而其家庭计划(_包含六个账户_)的年费为 **40 美元**。这个价格对大多数人来说是**极其实惠**的。
|
||||
|
||||
相比之下,[Proton Pass][10] 的价格较高,其 Plus 计划的年费为 **47.88 欧元**。
|
||||
|
||||
![][11]
|
||||
|
||||
不过,如果你使用了所有其他 Proton 的服务,并选择了 Proton 的无限制订阅,你就可以获得包括 **Proton Pass、Mail、VPN、Drive 和 Calendar** 在内的高级特性。
|
||||
|
||||
### 功能
|
||||
|
||||
这两个密码管理器功能都十分完善,因此每一种都能提供人们所需要的核心特性。
|
||||
|
||||
它们共同拥有的特性包括:
|
||||
|
||||
* 密码生成器
|
||||
* 安全笔记
|
||||
* 自动填充
|
||||
* 卡片信息和登录凭证
|
||||
* 便于随时获取凭证的手机应用
|
||||
|
||||
接下来,让我来突出一下根据我个人的使用经验,每一种服务各自独特的优点:
|
||||
|
||||
#### Bitwarden
|
||||
|
||||
Bitwarden 的一项关键功能是其 “<ruby>发送<rt>Send</rt></ruby>” 功能,它允许你发送一个文件(最大 500 MB)或一段文本/便笺给任何人,这都是通过一个安全连接实现的,并且在整个过程中都实现了端到端的加密。这项功能可以在 **桌面应用、扩展插件和网页保险库** 中使用。
|
||||
|
||||
![][13]
|
||||
|
||||
你可以通过添加一段只有接收者知道的密码短语来保护这个链接。还有更多的自定义选项,例如设定链接的过期时间,或在文件被下载后销毁链接。
|
||||
|
||||
我不认为这是一种安全发送文件的方法,更多的是适合发送私人文件(如电子邮件附件)和文本文件。
|
||||
|
||||
接下来,Bitwarden 提供了一个 **家庭计划**,允许你与 **其他五个账户** 共享一个订阅。Proton Pass 并没有此类服务。
|
||||
|
||||
我想着重强调的另一个功能是:**紧急访问**。
|
||||
|
||||
因为密码管理器储存了你所有的登录信息,它就是一个包含 **所有你的访问密钥** 的地方。你可以设置紧急访问功能,以方便你信任的朋友或者家庭成员在你不幸出现紧急状况后访问你的密码。
|
||||
|
||||
![][14]
|
||||
|
||||
当然,在授权用户访问你的账户之前,你可以设定一个期限以确认或拒绝这个访问请求。如果你没有采取任何行动,那么这个访问权限将会授予你的信任用户。
|
||||
|
||||
![][15]
|
||||
|
||||
> 📋 紧急联系人选项只能在 [网络保险库][16] 中访问。
|
||||
|
||||
**值得注意的是:** 这两种服务的密码生成器都包含历史记录,但 Bitwarden **保留历史时间更长**,而 Proton Pass 只保留一天的历史记录。
|
||||
|
||||
![][17]
|
||||
|
||||
其他功能差异包括:
|
||||
|
||||
* 导出为 .CSV 文件
|
||||
* 调整自动填充行为
|
||||
* 访问网络保险库
|
||||
* 桌面应用
|
||||
* 记录身份信息
|
||||
|
||||
对于所有列出的功能,在我使用 Bitwarden 的过程中,我都没有遇到任何重大的问题。
|
||||
|
||||
**我唯一注意到的问题**:有时在我的安卓手机上,自动填充功能并没有在键盘应用中作为建议显示。当然,这取决于各个智能手机制造商提供的定制安卓体验,因此不一定是 Bitwarden 特有的问题。
|
||||
|
||||
#### Proton Pass
|
||||
|
||||
如果我们从“功能数量”上进行比较,Bitwarden 会占据优势。
|
||||
|
||||
但是,作为一个以隐私为重点的工具,Proton Pass 实现了密码管理器所有你需要的重要功能,甚至超越了这些。
|
||||
|
||||
![][19]
|
||||
|
||||
得益于对 [SimpleLogin][20] 的专业研究,Proton Pass 支持生成电子邮件别名。
|
||||
|
||||
如果你不太了解:SimpleLogin 是最受欢迎的 [工具之一,用于保护你的电子邮件地址][21]。
|
||||
|
||||
所以,当 Proton Pass 集成了这个功能后,用户可以 **便捷地创建电子邮件别名**,并同时保存登录信息。你在 Proton Pass 上注册的电子邮件将会是实际的电子邮件地址。
|
||||
|
||||
我希望他们提供一个设定新的目标电子邮件地址的选项,这将使 Proton Pass 的额外费用更具价值。
|
||||
|
||||
此外,如果你是一位使用了部分或所有 Proton 服务的用户,使用 Proton Pass 将会是一种良好的用户体验。因为你无需为其他平台切换或注册。
|
||||
|
||||
使用 Proton Pass 还可以获得基本的 **导入/导出,控制某些安全措施,修改密码管理器行为** 的功能。
|
||||
|
||||
![][22]
|
||||
|
||||
因此,对于 Proton 用户而言,Proton Pass 可以是一种一站式的解决方案。
|
||||
|
||||
是的,我暂时没有注意到任何关于其移动应用的问题,Proton Pass 到目前为止很好。
|
||||
|
||||
### 你应该选择哪个?
|
||||
|
||||
考虑到它们的共性,这主要取决于你个人的使用体验、预算(如果选择付费),以及功能集。
|
||||
|
||||
对于我个人的使用,我暂时没有看到 Proton Pass 替换 Bitwarden 的需要。
|
||||
|
||||
然而,如果我决定购买 Proton 的无限制订阅,或是更加投入到 Proton 的各项服务中去,我可能会放弃 Bitwarden。
|
||||
|
||||
💬 你怎么认为呢?你认为 Proton Pass 值得额外付费吗,或者对于 Proton 的捆绑订阅你有什么看法?Bitwarden 是你的最爱吗?欢迎在下方评论分享你的想法。
|
||||
|
||||
*(题图:MJ/a2f5d428-b853-4312-837c-9d66371dd5dc)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://itsfoss.com/bitwarden-vs-proton-pass/
|
||||
|
||||
作者:[Ankush Das][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/content/images/2023/10/proton-pass.jpg
|
||||
[2]: https://itsfoss.com/content/images/2023/10/proton-pass-ui-1.jpg
|
||||
[3]: https://itsfoss.com/content/images/2023/10/bitwarden-extension-ui.jpg
|
||||
[4]: https://itsfoss.com/content/images/2023/10/bitwarden-extension-firefox.jpg
|
||||
[5]: https://itsfoss.com/content/images/2023/10/bitwarden-login.jpg
|
||||
[6]: https://itsfoss.com/content/images/2023/10/bitwarden-theme.jpg
|
||||
[7]: https://itsfoss.com/content/images/2023/10/proton-pass-ui-2.jpg
|
||||
[8]: https://itsfoss.com/content/images/2023/10/bitwarden-pricing.jpg
|
||||
[9]: https://bitwarden.com/pricing/
|
||||
[10]: https://account.proton.me/pass/signup
|
||||
[11]: https://itsfoss.com/content/images/2023/10/protonpass-pricing.jpg
|
||||
[12]: https://proton.go2cloud.org/favicons/apple-touch-icon.png
|
||||
[13]: https://itsfoss.com/content/images/2023/10/bitwarden-send-web-vault.jpg
|
||||
[14]: https://itsfoss.com/content/images/2023/10/emergency-access-bitwarden.jpg
|
||||
[15]: https://itsfoss.com/content/images/2023/10/bitwarden-emergency-invite.jpg
|
||||
[16]: https://vault.bitwarden.com/
|
||||
[17]: https://itsfoss.com/content/images/2023/10/bitwarden-password-generator.jpg
|
||||
[18]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[19]: https://itsfoss.com/content/images/2023/10/proton-pass-password-generator.jpg
|
||||
[20]: https://simplelogin.io/
|
||||
[21]: https://itsfoss.com/protect-email-address/
|
||||
[22]: https://itsfoss.com/content/images/2023/10/proton-pass-settings.jpg
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/22/075735dk7c6b4raibhkutq.jpg
|
||||
@@ -0,0 +1,70 @@
|
||||
[#]: subject: "KDE Plasma 6 Will Not Support Older Desktop Widgets"
|
||||
[#]: via: "https://news.itsfoss.com/kde-plasma-6-widgets/"
|
||||
[#]: author: "Ankush Das https://news.itsfoss.com/author/ankush/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "geekpi"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16333-1.html"
|
||||
|
||||
KDE Plasma 6 将不支持较旧的桌面小部件
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> KDE Plasma 6 进行了一些修改,需要小部件作者进行调整。开发人员,移植时间到了!
|
||||
|
||||
KDE Plasma 6 是备受期待的桌面环境版本升级版本。
|
||||
|
||||
最近,其发布时间表公布,第一个 Alpha 版本将于 **2023 年 11 月 8 日**上线,最终 **Beta 版本于 2023 年 1 月 31 日**上线,稳定版计划于 **2024 年 2 月 28 日**上线。
|
||||
|
||||
考虑到 KDE Plasma 5.x 系列包含多项改进和功能添加,许多用户对 KDE Plasma 6 带来的功能感到期待。
|
||||
|
||||
如果你好奇,我们已经介绍了 [KDE Plasma 6 的主要变化][1]。因此,它会发生重大变化也就不足为奇了。
|
||||
|
||||
然而,在进行重大修改后,可能会出现一些破坏体验的改动,例如无法在 Plasma 6 上运行任何旧版小部件。
|
||||
|
||||
### 给小部件开发者的移植通知
|
||||
|
||||
在 KDE 的 _Nate Graham_ 最近发表的一篇 [博客文章][2] 中,向 Plasma 5 小部件作者发出了正式的警告。
|
||||
|
||||
其重点指出的信息是:
|
||||
|
||||
> **你需要将你的小部件移植到更新的 API,以使它们与 Plasma 6 兼容!**
|
||||
|
||||
Plasma 小部件 API 已随着即将发布的版本进行了修改。而且,为了适应这种变化并保持运行,小部件开发人员必须将他们的创作移植到更新的 API。
|
||||
|
||||
如果开发人员不移植小部件以使用更新的 API,它将无法在 KDE Plasma 6 中运行。
|
||||
|
||||
当然,流行的小部件开发人员很可能会进行移植。但是,如果你使用的小部件虽然还能使用,但没有积极维护,那么你将不得不在 KDE Plasma 6 中放弃它。
|
||||
|
||||
他们已提供了一份 [移植指南][4] 供开发人员遵循。
|
||||
|
||||
你可以在 “[Plasma 6 扩展][5]” 下找到与 Plasma 6 兼容的小部件。在撰写本文时,只能看到列出了两个第三方小部件。
|
||||
|
||||
![][6]
|
||||
|
||||
因此,当你喜欢的小部件被移植到 KDE Plasma 6 并由相关开发者上传后,你就会发现它们的踪迹。
|
||||
|
||||
💬 你期待移植哪些 KDE 小部件? 你认为你会错过某些不再维护的小部件吗?在下面的评论中分享你的想法。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/kde-plasma-6-widgets/
|
||||
|
||||
作者:[Ankush Das][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://news.itsfoss.com/author/ankush/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://linux.cn/article-15821-1.html
|
||||
[2]: https://pointieststick.com/2023/10/24/its-time-to-port-your-widgets-to-plasma-6/
|
||||
[3]: https://news.itsfoss.com/content/images/2023/04/Follow-us-on-Google-News.png
|
||||
[4]: https://develop.kde.org/docs/plasma/widget/porting_kf6/
|
||||
[5]: https://store.kde.org/browse?cat=705&ord=latest
|
||||
[6]: https://news.itsfoss.com/content/images/2023/10/kde-plasma-6-extension.jpg
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/30/225133j5bvbvb5bzdgg4gn.jpg
|
||||
@@ -0,0 +1,170 @@
|
||||
[#]: subject: "Moosync: A Feature-Rich Open-Source Music Player"
|
||||
[#]: via: "https://news.itsfoss.com/moosync/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16329-1.html"
|
||||
|
||||
Moosync:一款充满特色的开源音乐播放器
|
||||
==========
|
||||
|
||||
![][0]
|
||||
|
||||
> Moosync 音乐播放器是一个适用于本地收藏与流媒体音乐的魅力十足的跨平台应用。
|
||||
|
||||
想听好音乐吗?🎶
|
||||
|
||||
首次亮相的**跨平台开源音乐播放器 Moosync** ,希望成为“欢迎全社区参与”的音乐播放器。
|
||||
|
||||
过去我们曾介绍过像 [Harmonoid][1] 和 [MusicPod][2] 这样的应用,但是它们**主要是专注于离线使用**。
|
||||
|
||||
与之不同的是,Moosync 的独特之处。让我告诉你为什么。
|
||||
|
||||
### Moosync:概况 ⭐
|
||||
|
||||
![][3]
|
||||
|
||||
Moosync 是一个主要基于 **Vue** 和 **TypeScript** 编程语言开发的音乐播放器。
|
||||
|
||||
Moosync **高度可定制**且支持 [YouTube][4]、[Spotify][5] 以及 [LastFM][6] 等多种服务。其关键特性包含:
|
||||
|
||||
* 支持显示歌词
|
||||
* 无广告播放
|
||||
* 支持本地音乐文件
|
||||
|
||||
#### 初次体验 👨💻
|
||||
|
||||
在我在我的 Ubuntu 系统上安装它之后,我开始了**快速设置向导**。
|
||||
|
||||
首先设定我的音乐库的位置,它将会从此处获取本地音乐文件,过程包含了许多步骤。
|
||||
|
||||
![][7]
|
||||
|
||||
然后,显示了**可以连接的服务选项**。
|
||||
|
||||
我**试图连接我的 Spotify 账户**,然而尽管我向 Moosync 提供了需要的信息,**操作无法成功**。不过幸运的是,**这一步并非必要**,所以我选择跳过。
|
||||
|
||||
![][8]
|
||||
|
||||
随后,它显示了空白的 “<ruby>所有歌曲<rt>All Songs</rt></ruby>” 标签页,由于目前我未连接任何服务或者本地文件,所以这里是空的。
|
||||
|
||||
![][9]
|
||||
|
||||
考虑我没有本地音乐或 Spotify 音乐,我点击了 YouTube 过滤器并**搜寻我喜欢的曲目**以填充 Moosync。
|
||||
|
||||
搜索功能还包括歌曲、艺术家、播放列表和专辑的过滤器。
|
||||
|
||||
![][11]
|
||||
|
||||
我可以以右键点击单曲,并添加至播放队列或者立即播放。除此之外还有其他选项,会有所不同。
|
||||
|
||||
![][12]
|
||||
|
||||
我在 Spotify 数据库进行搜索时,尝试做相同操作,但不幸的是,我**必须要登录 Spotify 才能在 Moosync 使用它** 这一计划之前被搁置。
|
||||
|
||||
![][13]
|
||||
|
||||
> 📋 如果你在寻找更好的 Spotify 支持,我建议你尝试一下 [BlackHole][14] 这个音乐应用。
|
||||
|
||||
而我选择继续,去**了解这个音乐播放器**。进入 “<ruby>队列<rt>Queue</rt></ruby>” 标签页或者点击应用程序右下角向上指向的箭头都可以访问它。
|
||||
|
||||
整齐的布局使人感到熟悉和舒适。
|
||||
|
||||
![][15]
|
||||
|
||||
在 “<ruby>所有歌曲<rt>All Songs</rt></ruby>” 标签页,我添加进 Moosync 的所有歌曲都在这,我可以**选择从列表开头播放**,或者**添加到当前队列**,甚至可以在其中**随机播放 100 首歌曲**。
|
||||
|
||||
![][16]
|
||||
|
||||
在 “<ruby>播放列表<rt>Playlists</rt></ruby>” 标签页,我保存的所有来自 YouTube 的播放清单都在这。它还提供了本地文件和 YouTube 间的排序选项。
|
||||
|
||||
![][17]
|
||||
|
||||
在 “<ruby>专辑<rt>Albums</rt></ruby>” 标签页,我保存的所有专辑都以一个整齐的网格布局排列。
|
||||
|
||||
![][18]
|
||||
|
||||
类似的,“<ruby>艺术家<rt>Artists</rt></ruby>” 标签页展示了我添加到 Moosync 库的艺术家。出于某种原因,它没有加载缩略图。
|
||||
|
||||
“<ruby>类别<rt>Genres</rt></ruby>” 标签页我也跳过了,因为它**似乎不能正常工作**。
|
||||
|
||||
![][19]
|
||||
|
||||
最后是 “<ruby>探索<rt>Explore</rt></ruby>” 标签页,这里显示了我**听过多少分钟的音乐**。
|
||||
|
||||
![][20]
|
||||
|
||||
此外,**你可以在 Moosync 中找到许多有用的自定义设置**来优化你的使用体验。
|
||||
|
||||
首先在 “<ruby>主题<rt>Theme</rt></ruby>”设置中,你可以在**三个主题**和**两种布局视图**中选择,还有选项**上传或设计自定义主题**。
|
||||
|
||||
![][21]
|
||||
|
||||
应用还有**许多扩展**,一种是**在 Discord 上开启丰富的存在支持**,另一种是**与 Soundcloud 集成**,此外还有很多。
|
||||
|
||||
![][22]
|
||||
|
||||
显然,**Moosync 支持键盘快捷方式**,你可以根据个人的喜好进行设置。
|
||||
|
||||
![][23]
|
||||
|
||||
在我写这篇文章的时候,Moosync 这里和那里都有一些小瑕疵,但我认为它作为 [最适合 Linux 的音乐播放器之一][24] 的竞争者非常有竞争力。
|
||||
|
||||
### 📥 下载 Moosync
|
||||
|
||||
Moosync 适用于 **Linux**,**Windows** 以及 **macOS**。你可以在其[官方网站][26]下载你需要的安装包。
|
||||
|
||||
> **[Moosync][26]**
|
||||
|
||||
**对于 Linux 用户**,你也可以在 [**Flathub 商店**][27],[**Snap 商店**][28] 和 [**AUR**][29] 下载 Moosync。
|
||||
|
||||
你还可以浏览他们的 [GitHub 仓库][30],获取源代码以及更多信息。
|
||||
|
||||
💬 对这款应用有何看法?欢迎在评论区告诉我。
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/moosync/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://itsfoss.com/harmonoid/
|
||||
[2]: https://news.itsfoss.com/musicpod/
|
||||
[3]: https://news.itsfoss.com/content/images/2023/10/Moosync_1.png
|
||||
[4]: https://www.youtube.com/
|
||||
[5]: https://open.spotify.com/
|
||||
[6]: https://www.last.fm/
|
||||
[7]: https://news.itsfoss.com/content/images/2023/10/Moosync_2.png
|
||||
[8]: https://news.itsfoss.com/content/images/2023/10/Moosync_3.png
|
||||
[9]: https://news.itsfoss.com/content/images/2023/10/Moosync_5.png
|
||||
[10]: https://news.itsfoss.com/content/images/2023/04/Follow-us-on-Google-News.png
|
||||
[11]: https://news.itsfoss.com/content/images/2023/10/Moosync_6.png
|
||||
[12]: https://news.itsfoss.com/content/images/2023/10/Moosync_7.png
|
||||
[13]: https://news.itsfoss.com/content/images/2023/10/Moosync_8.png
|
||||
[14]: https://news.itsfoss.com/blackhole-music-app/
|
||||
[15]: https://news.itsfoss.com/content/images/2023/10/Moosync_9.png
|
||||
[16]: https://news.itsfoss.com/content/images/2023/10/Moosync_11.png
|
||||
[17]: https://news.itsfoss.com/content/images/2023/10/Moosync_12-1.png
|
||||
[18]: https://news.itsfoss.com/content/images/2023/10/Moosync_13.png
|
||||
[19]: https://news.itsfoss.com/content/images/2023/10/Moosync_13b.png
|
||||
[20]: https://news.itsfoss.com/content/images/2023/10/Moosync_15.png
|
||||
[21]: https://news.itsfoss.com/content/images/2023/10/Moosync_18.png
|
||||
[22]: https://news.itsfoss.com/content/images/2023/10/Moosync_19.png
|
||||
[23]: https://news.itsfoss.com/content/images/2023/10/Moosync_22.png
|
||||
[24]: https://itsfoss.com/best-music-players-linux/
|
||||
[25]: https://itsfoss.com/content/images/size/w256h256/2022/12/android-chrome-192x192.png
|
||||
[26]: https://moosync.app/
|
||||
[27]: https://flathub.org/apps/app.moosync.moosync
|
||||
[28]: https://snapcraft.io/moosync
|
||||
[29]: https://aur.archlinux.org/packages/moosync
|
||||
[30]: https://github.com/Moosync/Moosync
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/30/062404f6xrcor9t6s1b9lc.jpg
|
||||
@@ -0,0 +1,143 @@
|
||||
[#]: subject: "Linux Kernel 6.6 Arrives With Numerous Refinements"
|
||||
[#]: via: "https://news.itsfoss.com/linux-kernel-6-6-release/"
|
||||
[#]: author: "Sourav Rudra https://news.itsfoss.com/author/sourav/"
|
||||
[#]: collector: "lujun9972/lctt-scripts-1693450080"
|
||||
[#]: translator: "ChatGPT"
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-16336-1.html"
|
||||
|
||||
Linux 内核 6.6 版本莅临,带来诸多变化
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 笔记本的支持得到了提升,服务器性能得到了改进,更多内容一一揭晓。
|
||||
|
||||
又到了迎接 Linux 内核新版本发布的时刻!
|
||||
|
||||
Linux 内核 6.6 的发布,是一次大规模更新,针对各类笔记本、网络硬件、处理器等提供了**大量全方位的改良**。
|
||||
|
||||
Linus Torvalds [表示][1]:
|
||||
|
||||
> 各种各样的修复散布各处,除了针对 r8152 驱动的一些重要修复外,其它的都相当小型。下面是上周的简短日志,供所有想要一探究竟、了解更多细节的读者。日志篇幅短小,可以快速翻阅。
|
||||
|
||||
### 🆕 Linux 内核 6.6:都有哪些新元素?
|
||||
|
||||
在我们开始之前,需要提醒大家,这一次发布的是**非长期支持版本**,因此不是每个人都必须进行升级,除非你想要享受最新、最棒的版本。
|
||||
|
||||
总的来说,让我们来看看这次发布版本的亮点:
|
||||
|
||||
* 针对英特尔芯片的优化
|
||||
* 对笔记本的更佳支持
|
||||
* 网络改进
|
||||
* AMD 芯片性能提升
|
||||
|
||||
#### 针对英特尔芯片的优化
|
||||
|
||||
![][3]
|
||||
|
||||
Linux 内核 6.6 版本新增了对英特尔的**神经处理单元(NPU)**的**支持**,这样的技术原先被称作通用处理器。
|
||||
|
||||
这项技术预计将于今年晚些时候,随着英特尔的“[Meteor Lake][4]”芯片亮相而首次公开登场。这些 **NPU 将被专门用于处理人工智能工作负载**。
|
||||
|
||||
英特尔甚至已经开始对即将发布的 “**Arrow Lake**”芯片进行**NPU 支持的初步工作**了!
|
||||
|
||||
此外,还新增了对英特尔的 [Shadow Stack][5] 的支持,因为他们的 [控制流执行技术][6](CET)被引入到了内核中。其主要目的是防止现代英特尔 CPU(从 Tiger Lake 起)上的**返回导向编程(ROP)攻击**。
|
||||
|
||||
#### 对笔记本的更佳支持
|
||||
|
||||
![][8]
|
||||
|
||||
**对于惠普笔记本,现在你可以直接在 Linux 中对 BIOS 进行管理了**,这要归功于 “**HP-BIOSCFG**” 驱动的实现。
|
||||
|
||||
根据报道,**从 2018 年起出产的惠普笔记本应该都可以支持这个驱动程序**。
|
||||
|
||||
**对于联想笔记本,驱动程序已经更新,为更多的 IdeaPad 笔记本**添加了键盘背光控制**。
|
||||
|
||||
同样,**对于华硕笔记本**,现在 [ROG Flow X16][9](2023 年款)游戏笔记本,当屏幕翻转时可以**正确地启用平板模式**。
|
||||
|
||||
#### 网络改进
|
||||
|
||||
![][10]
|
||||
|
||||
在网络方面,Linux 内核 6.6 版本带来了对如 [Atheros QCA8081][11]、**MediaTek MT7988**、**MediaTek MT7981**,[NXP TJA1120 PHY][12] 等新型硬件的**支持**。
|
||||
|
||||
同时,各类驱动程序也进行了升级,例如 **高通 Wi-Fi 7 (ath12k)驱动程序**,它现在**支持 Extremely High Throughput(EHT)PHY**。
|
||||
|
||||
此外,针对各类 Realtek(rtl8xxxu)Wi-Fi 芯片**启用了 AP 模式**。
|
||||
|
||||
关于特定于网络的变动,你可以在这个 [拉取请求][13] 中查阅更多的详细信息。
|
||||
|
||||
#### AMD 芯片的性能提升
|
||||
|
||||
![][14]
|
||||
|
||||
随着 Linux 内核 6.6 的发布,AMD 的开发人员推出了**两项尚未正式公开的新技术的支持**。
|
||||
|
||||
一项技术是对他们即将推出的 “**FreeSync Panel Replay**” 技术的支持,这一技术只用于游戏笔记本抖动屏,可以自动降低刷新率以节省电力和降低 GPU 工作负载。
|
||||
|
||||
另一项技术被称为 “**动态提速控制**”,这是一项能够**提高某些 Ryzen SoC 性能的功能**,但关于它的更多细节比较少。
|
||||
|
||||
关于它的实施,你可以在这个 [补丁序列][15] 中查阅更多的信息。
|
||||
|
||||
#### 🛠️ 其他的变化与改进
|
||||
|
||||
其他方面,还包括一些值得注意的变动:
|
||||
|
||||
* 针对 **龙芯** 的大量新特性。
|
||||
* **Rust 工具链** 升级至 v1.71.1 版本。
|
||||
* 对 **RISC-V** 和 **Btrfs** 的多项改进。
|
||||
* 完全移除了 [无线 USB][16] 和 [**Ultra-Wideband**][17] 的代码。
|
||||
* 对 **英伟达**、**英特尔** 和 **AMD** 的**开源图形驱动程序** 的众多优化。
|
||||
|
||||
你可以在 [更新日志][18] 中查阅更详细的信息。
|
||||
|
||||
### 安装 Linux 内核 6.6 版本
|
||||
|
||||
如果你的体验是像 Arch 或 Fedora 那类的滚动发行版,升级过程非常简单。
|
||||
|
||||
你只需要稍等片刻,因为这些发行版在发布更新时需要一些时间。
|
||||
|
||||
对于其他的用户,你可以等待主要版本更新,或者**根据我们的指南在 Ubuntu 中升级至最新的主线 Linux 内核**:
|
||||
|
||||
> **[在 Ubuntu 上安装最新的主线 Linux 内核][19]**
|
||||
|
||||
你可以在 [官方网站][20] 下载最新的 Linux 内核的 tarball (_发布后可能需要些时间才能得到_)。
|
||||
|
||||
💬 你对这次内核发布有何想法?
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://news.itsfoss.com/linux-kernel-6-6-release/
|
||||
|
||||
作者:[Sourav Rudra][a]
|
||||
选题:[lujun9972][b]
|
||||
译者:[ChatGPT](https://linux.cn/lctt/ChatGPT)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
[a]: https://news.itsfoss.com/author/sourav/
|
||||
[b]: https://github.com/lujun9972
|
||||
[1]: https://lkml.iu.edu/hypermail/linux/kernel/2310.3/06370.html
|
||||
[2]: https://news.itsfoss.com/content/images/size/w256h256/2022/08/android-chrome-192x192.png
|
||||
[3]: https://news.itsfoss.com/content/images/2023/10/Linux_Kernel_6.6_1.png
|
||||
[4]: https://www.intel.com/content/www/us/en/content-details/788851/meteor-lake-architecture-overview.html
|
||||
[5]: https://en.wikipedia.org/wiki/Shadow_stack
|
||||
[6]: https://www.intel.com/content/www/us/en/developer/articles/technical/technical-look-control-flow-enforcement-technology.html
|
||||
[7]: https://news.itsfoss.com/content/images/2023/04/Follow-us-on-Google-News.png
|
||||
[8]: https://news.itsfoss.com/content/images/2023/10/Linux_Kernel_6.6_2-1.png
|
||||
[9]: https://rog.asus.com/laptops/rog-flow/rog-flow-x16-2023-series/spec/
|
||||
[10]: https://news.itsfoss.com/content/images/2023/10/Linux_Kernel_6.6_3.png
|
||||
[11]: https://www.qualcomm.com/products/internet-of-things/networking/wi-fi-networks/qca8081
|
||||
[12]: https://www.nxp.com/products/interfaces/ethernet-/automotive-ethernet-phys/tja1120-automotive-ethernet-phy-1000base-t1-asil-b-and-tc-10:TJA1120
|
||||
[13]: https://lore.kernel.org/lkml/20230829125950.39432-1-pabeni@redhat.com/
|
||||
[14]: https://news.itsfoss.com/content/images/2023/10/Linux_Kernel_6.6_4.png
|
||||
[15]: https://lore.kernel.org/lkml/20230420163140.14940-1-mario.limonciello@amd.com/T/#m38ab23d70d213ceb67440168b3f71ad2be3aa564
|
||||
[16]: https://en.wikipedia.org/wiki/Wireless_USB
|
||||
[17]: https://en.wikipedia.org/wiki/Ultra-wideband
|
||||
[18]: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.6
|
||||
[19]: https://itsfoss.com/upgrade-linux-kernel-ubuntu/
|
||||
[20]: https://www.kernel.org/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202310/31/204603jy3e8ezhtyehn9po.jpg
|
||||
Reference in New Issue
Block a user