硬核观察 #371 比特币 BSV 矿工在区块链上挖出 2GB 的区块

Summary: 更多：• 苹果专利使 W3C 的开放屏幕协议复杂化 • 美国一小镇要给居民每人价值 1000 美元的比特币

![](/data/attachment/album/202108/22/185537gf1o06c1pg13o1ff.jpg)

### 比特币 BSV 矿工在区块链上挖出 2GB 的区块

![](/data/attachment/album/202108/22/185446aeqbee2kz7bjdlbd.jpg)

比特币协会本周确认，在比特币分叉链 BSV 上挖出了一个 2GB 大小的区块。这是迄今为止在公链上挖出的最大区块。[700606](https://whatsonchain.com/block-height/700606) 区块记录于 2021 年 8 月 16 日，包含了 5,869 个交易。挖出这个区块的矿工除了得到固定的 6.25 BSV 奖励之外，还得到了约 10 BSV 的手续费，平均每笔交易付出 0.28 美元手续费。今年 8 月的前几天，BSV 上还挖出过 5 个超过 1GB 的区块。BSV 官方人员说，“在 BTC 网络上，经过多年的比特币扩容之战，仍然被限制在每秒可处理 7 笔交易的 1MB 区块上，毫无进展。”

>
> 虽然我对区块扩容持谨慎态度，但是似乎 BSV 的这些尝试还不错。
>
>
>

### 苹果专利使 W3C 的开放屏幕协议复杂化

![](/data/attachment/album/202108/22/185459eypxzw4ru2u345up.jpg)

W3C 一直研究的“[开放屏幕协议](https://www.w3.org/TR/openscreenprotocol/)”是为了制定一个 Web 标准，使网页能够驱动第二屏幕来显示网页内容。通过该协议，可以让网页内容/网站与第二屏幕互动，如控制连接互联网的电视、HDMI 加密狗、智能扬声器和其他连接互联网的第二设备。不幸的是，这些努力现在被苹果的一些[专利](https://www.w3.org/2021/08/secondscreen-pag/Overview.html#disclosures)所阻挠。W3C 将尝试解决这些问题，或以其他方式建议工作组考虑重新设计受专利要求影响的部分，甚至终止/撤销规范的工作。

>
> 不知道苹果是否会乐意将这些专利释放来支持开放标准。
>
>
>

### 美国一小镇要给居民每人价值 1000 美元的比特币

![](/data/attachment/album/202108/22/185508ohksl24clepq2eww.jpg)

美国一个人口只有 1500 人的小镇镇长正在筹集资金，向 1500 名居民每人提供价值 1000 美元比特币。但得到的比特币是不能使用，须持有五年后才能使用。他认为这些比特币可以改善每一个居民的生活，只要能保存几年。自 2009 年首次推出以来，比特币增长了 4500 倍。而且增长轨迹并没有真正意义上的放缓。根据目前的预测，这些给居民的比特币可能在几年内上涨至数万美元。

>
> 这是一个有趣的尝试，或许时间可以证明一切。
>
>
>


用 Linux 的 at 命令来安排一个任务

Summary: at 命令是一种在特定时间和日期安排一次性任务的 Linux 终端方法。

at 命令是一种在特定时间和日期安排一次性任务的 Linux 终端方法。

>
> at 命令是一种在特定时间和日期安排一次性任务的 Linux 终端方法。
>
>
>

![](/data/attachment/album/202108/23/144542rmmyzwxsnanm4wpj.jpg "Team checklist")

计算机擅长 [自动化](https://opensource.com/article/20/11/orchestration-vs-automation)，但不是每个人都知道如何使自动化工作。不过，能够在特定的时间为电脑安排一个任务，然后忘记它，这确实是一种享受。也许你有一个文件要在特定的时间上传或下载，或者你需要处理一批还不存在但可以保证在某个时间存在的文件，或者需要监控设置，或者你只是需要一个友好的提醒，在下班回家的路上买上面包和黄油。

这就是 `at` 命令的用处。

### 什么是 Linux at 命令？

`at` 命令是在 Linux 终端让你在特定时间和日期安排一次性工作的方法。它是一种自发的自动化，在终端上很容易实现。

### 安装 at

在 Linux 上，`at` 命令可能已经安装了。你可以使用 `at -V` 命令来验证它是否已经安装。只要返回一个版本号，就说明你已经安装了 `at`。

```
$ at -V
at version x.y.z

```

如果你试图使用 `at`，但没有找到该命令，大多数现代的 Linux 发行版会为你提供缺少的 `at` 软件包。

你可能还需要启动 `at` 守护程序，称为 `atd`。在大多数 Linux 系统中，你可以使用 `systemctl` 命令来启用该服务，并将它们设置为从现在开始自动启动：

```
$ sudo systemctl enable --now atd

```

### 用 at 交互式地安排一个作业

当你使用 `at` 命令并加上你希望任务运行的时间，会打开一个交互式 `at` 提示符。你可以输入你想在指定时间运行的命令。

做个比喻，你可以把这个过程看作是一个日历应用，就像你在你的手机上使用的那样。首先，你在某一天的某个时间创建一个事件，然后指定你想要发生什么。

例如，可以试试创建一个未来几分钟的任务，来给自己计划一个备忘录。这里运行一个简单的任务，以减少失败的可能性。要退出 `at` 提示符，请按键盘上的 `Ctrl+D`。

```
$ at 11:20 AM
warning: commands will be executed using /bin/sh
at> echo "hello world" > ~/at-test.txt
at> <EOT>
job 3 at Mon Jul 26 11:20:00 2021

```

正如你所看到的，`at` 使用直观和自然的时间定义。你不需要用 24 小时制的时钟，也不需要把时间翻译成 UTC 或特定的 ISO 格式。一般来说，你可以使用你自然想到的任何符号，如 `noon`、`1:30 PM`、`13:37` 等等，来描述你希望一个任务发生的时间。

等待几分钟，然后在你创建的文件上运行 `cat` 或者 `tac` 命令，验证你的任务是否已经运行：

```
$ cat ~/at-test.txt
hello world

```

### 用 at 安排一个任务

你不必使用 `at` 交互式提示符来安排任务。你可以使用 `echo` 或 `printf` 向它传送命令。在这个例子中，我使用了 `now` 符号，以及我希望任务从现在开始延迟多少分钟：

```
$ echo "echo 'hello again' >> ~/at-test.txt" | at now +1 minute

```

一分钟后，验证新的命令是否已被执行：

```
$ cat ~/at-test.txt
hello world
hello again

```

### 时间表达式

`at` 命令在解释时间时是非常宽容的。你可以在许多格式中选择，这取决于哪一种对你来说最方便：

* `YYMMDDhhmm[.ss]`（两位的年份、月、日、小时、分钟，及可选的秒）
* `CCYYMMDDhhmm[.ss]`（四位的年份、月、日、时、分钟，及可选的秒）
* `now`（现在）
* `midnight`（午夜 00:00）
* `noon`（中午 12:00）
* `teatime`（下午 16 点）
* `AM`（上午）
* `PM`（下午）

时间和日期可以是绝对时间，也可以加一个加号（`+`），使其与 `now` 相对。当指定相对时间时，你可以使用你可能用过的词语：

* `minutes`（分钟）
* `hours`（小时）
* `days`（天）
* `weeks`（星期）
* `months`（月）
* `years`（年）

### 时间和日期语法

`at` 命令对时间的输入相比日期不那么宽容。时间必须放在第一位，接着是日期，尽管日期默认为当前日期，并且只有在为未来某天安排任务时才需要。

这些是一些有效表达式的例子：

```
$ echo "rsync -av /home/tux me@myserver:/home/tux/" | at 3:30 AM tomorrow
$ echo "/opt/batch.sh ~/Pictures" | at 3:30 AM 08/01/2022
$ echo "echo hello" | at now + 3 days

```

### 查看你的 at 队列

当你爱上了 `at`，并且正在安排任务，而不是在桌子上的废纸上乱写乱画，你可能想查看一下你是否有任务还在队列中。

要查看你的 `at` 队列，使用 `atq` 命令：

```
$ atq
10 Thu Jul 29 12:19:00 2021 a tux
9 Tue Jul 27 03:30:00 2021 a tux
7 Tue Jul 27 00:00:00 2021 a tux

```

要从队列中删除一个任务，使用 `atrm` 命令和任务号。例如，要删除任务 7：

```
$ atrm 7
$ atq
10 Thu Jul 29 12:19:00 2021 a tux
9 Tue Jul 27 03:30:00 2021 a tux

```

要看一个计划中的任务的实际内容，你需要查看 `/var/spool/at` 下的内容。只有 root 用户可以查看该目录的内容，所以你必须使用 `sudo` 来查看或 `cat` 任何任务的内容。

### 用 Linux at 安排任务

`at` 系统是一个很好的方法，可以避免忘记在一天中晚些时候运行一个作业，或者在你离开时让你的计算机为你运行一个作业。与 `cron` 不同的是，它不像 `cron` 那样要求任务必须从现在起一直按计划运行到永远，因此它的语法比 `cron` 简单得多。

等下次你有一个希望你的计算机记住并管理它的小任务，试试 `at` 命令。

---

via: <https://opensource.com/article/21/8/linux-at-command>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


如何选择一台 Linux 手机

![](/data/attachment/album/202108/23/155159e5s33xo63tz5jddz.jpg)

>
> 未来取代安卓或 iOS 的可能是 Linux 手机，但如今，有哪些选择可以尝试一下呢？
>
>
>

虽然安卓是基于 Linux 内核的，但它经过了大量修改。因此，这意味着它不是一个完全意义上的基于 Linux 的操作系统。

谷歌正在努力使安卓内核更接近主线 Linux 内核，但这仍然是一个遥远的梦想。

那么，在这种情况下，如果你正在寻找一款 Linux 手机、一款由 Linux 操作系统驱动的智能手机，有哪些可以选择呢？

这并不是一个容易做出的决定，因为你的选择非常有限。因此，我试图推荐一些最好的、不同于主流选择的 Linux 手机。

### 如今你可以使用的顶级 Linux 手机

值得注意的是，这里提到的 Linux 手机或许无法取代你的安卓或 iOS 设备。因此，在做出购买决定之前，请确保你做了一些背景研究。

**注意：** 你需要仔细检查这些 Linux 手机是否可以购买到、预期的发货日期和使用风险。它们大多数只适合于发烧友或早期试用者。

#### 1、PinePhone

![](/data/attachment/album/202108/23/155316nuw1kqtun56i4mm5.jpg)

[PinePhone](https://www.pine64.org/pinephone/) 是最有性价比和最受欢迎的选择之一，我觉得它是一个有前途的 Linux 手机。

它并不局限于单一的操作系统。你可以尝试使用带有 Plasma mobile OS 的 Manjaro、UBports、Sailfish OS 等系统。PinePhone 的配置不错，它包括一个四核处理器和 2G 或3G 的内存。它支持使用可启动的 microSD 卡来帮助你安装系统，还可选 16/32GB eMMC 存储。

其显示屏是一个基本的 1440×720p IPS 屏幕。你还可以得到特殊的隐私保护，如蓝牙、麦克风和摄像头的断路开关。

PinePhone 还为你提供了使用六个可用的 pogo 引脚添加自定义的硬件扩展的方式。

其基本版（2GB 内存和 16GB 存储）默认加载了 Manjaro，价格为 149 美元；而融合版（3GB 内存和 32GB 存储）价格为 199 美元。

#### 2、Fairphone

![](/data/attachment/album/202108/23/155316kmcjj04medd1nyff.png)

与这个清单上的其他选择相比，[Fairphone](https://shop.fairphone.com/en/) 在商业上是成功的。它不是一款 Linux 智能手机，但它具有定制版的安卓系统，即 Fairphone OS，并且可以选择 [开源安卓系统替代品](https://itsfoss.com/open-source-alternatives-android/) 之一 [/e/ OS](https://itsfoss.com/e-os-review/)。如果你想使用 Linux 操作系统，也有一些社区移植版本，但可能有点碰运气。

Fairphone 有两个不同的版本，提供了一些不错的配置规格。你会发现 Fairphone 3+ 有一个 4800 万像素的相机传感器和一个全高清显示屏。另外，你还会发现先进的高通处理器为该设备提供了动力。

他们专注于制造可持续发展的智能手机，并使用了一定量的回收塑料制造。这也为了方便维修。

因此，它不仅是一个非主流智能手机的选择，而且如果你选择了它，你也将为保护环境出了力。

### 3、Librem 5

![](/data/attachment/album/202108/23/155316hyjq7iydljr0gqed.png)

[Librem 5](https://puri.sm/products/librem-5/) 是一款非常注重用户隐私的智能手机，同时它采用了开源的操作系统，即 PureOS，并非基于安卓。

它所提供的配置规格还不错，有 3GB 内存和四核 Cortex A53 芯片组。但是，这无法与主流选择相竞争。因此，你可能不会觉得它物美价廉。

它的目标是那些对尊重隐私的智能手机感兴趣的发烧友。

与其他产品类似，Librem 5 也专注于通过提供用户可更换的电池使手机易于维修。

在隐私方面，你会注意到有蓝牙、相机和麦克风的断路开关。他们还承诺了未来几年的安全更新。

### 4、Pro 1X

![](/data/attachment/album/202108/23/155316j06yk0rr9b5rr06r.jpg)

[Pro 1X](https://www.fxtec.com/pro1x) 是一款有趣的智能手机，同时支持 Ubuntu Touch、Lineage OS 和安卓。

它不仅是一款 Linux 智能手机，而且是一款带有独立 QWERTY 键盘的手机，这在现在是很罕见的。

Pro 1 X 的配置规格不错，包括了一个骁龙 662 处理器和 6GB 内存。它还带有一块不错的 AMOLED 全高清显示屏。

它的相机不是特别强大，但在大多数情况下应该是足够了。

### 5、Volla Phone

![](/data/attachment/album/202108/23/155316xq5d5526th8qtm5m.jpg)

[Volla Phone](https://www.indiegogo.com/projects/volla-phone-free-your-mind-protect-your-privacy#/) 是一个有吸引力的产品，运行在 UBports 的 Ubuntu Touch。

它配备了预制的 “虚拟专用网络” ，并专注于简化用户体验。它的操作系统是定制的，因此，可以快速访问所有重要的东西，而无需自己组织。

它的配置规格令人印象深刻，包括了一个八核联发科处理器和 4700 毫安时的电池。你会得到类似于一些最新的智能手机上的设计。

### 总结

Linux 智能手机不是到处都能买到的，当然也还不适合大众使用。

因此，如果你是一个发烧友，或者想支持这种手机的发展，你可以考虑购买一台。

你已经拥有一台这种智能手机了吗？请不要犹豫，在下面的评论中分享你的经验。

---

via: <https://itsfoss.com/linux-phones/>

作者：[Ankush Das](https://itsfoss.com/author/ankush/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #372 Windows XP 问世 20 年

Summary: 更多：• 谷歌市场上有 120 多款恶意加密货币应用 • 印度的 IPv6 采用率最高

![](/data/attachment/album/202108/23/164443omem6eiiejmfmme6.jpg)

### Windows XP 问世 20 年

![](/data/attachment/album/202108/23/164453ab5dp5r0dxwgp5ps.jpg)

微软的 Windows 系统有过很多经典，对当前一代的网民来说，Windows XP 系统可能是最难忘的，国内很多人触网都在 Windows XP。Windows XP 于 2001 年 2 月 5 日公布，10 月 25 日正式上市。Windows XP 在 2002 年到 2008 年之间发布了三个 SP3 服务包，最终在 2009 年结束了主流支持，扩展支持结束于 2014 年。据 Statcounter 的数据显示，它依然有 0.59% 的份额，比 Vista 的 0.26% 依然高出一倍多。

>
> 虽然 Windows XP 很经典，不过给我印象最深刻的是 Windows 95。
>
>
>

### 谷歌市场上有 120 多款恶意加密货币应用

![](/data/attachment/album/202108/23/164516o9cpo9jcfpoqfgzn.jpg)

这些应用程序旨在误导无辜和毫无戒心的用户将它们安装到自己的智能手机上。这些应用程序采用了通常的“快速致富”骗局，吸引用户投资于“云挖矿服务”并获得利润。趋势科技称，“尽管这些软件与云挖矿操作无关，也没有任何的加密货币挖矿特性，其中的一些应用程序提示用户付款，以增加挖矿能力。”除了谷歌已经禁止的 8 款恶意加密货币应用外，趋势科技称，目前市场上还有120多个假加密货币挖矿应用，这些应用程序在去年影响了 4500 多名用户。

>
> 贪婪就是原罪。
>
>
>

### 印度的 IPv6 采用率最高

![](/data/attachment/album/202108/23/164535g1mwmqe2aa8bomd2.jpg)

根据[谷歌用户数据的分析](https://www.google.com/intl/en/ipv6/statistics.html)，印度以 61.67% 的采用率领先全球。马来西亚和法属圭亚那分别位列第二和第三。第四是法国（48.38%），第五是中国台湾（48.0%）。美国排在第六位（47.5%）。由于众所周知的原因，这个报告里[中国大陆](https://www.aelius.com/njh/google-ipv6/cn.html)的数据很低，并不能反映中国实际的 IPv6 采用率。

>
> 不管你喜欢不喜欢，IPv6 都已经用的越来越多了。
>
>
>


在终端监控你的 Linux 系统

Summary: 如何找到一个程序的进程 ID（PID）。最常见的 Linux 工具是由 procps-ng 包提供的，包括 ps、pstree、pidof 和 pgrep 命令。

>
> 如何找到一个程序的进程 ID（PID）。最常见的 Linux 工具是由 procps-ng 包提供的，包括 `ps`、`pstree`、`pidof` 和 `pgrep` 命令。
>
>
>

![](/data/attachment/album/202108/24/092948gyyv6nvbn77x7y6o.jpg "System monitor")

在 [POSIX](https://opensource.com/article/19/7/what-posix-richard-stallman-explains) 术语中，<ruby> 进程 <rt>  process </rt></ruby>是一个正在进行的事件，由操作系统的内核管理。当你启动一个应用时就会产生一个进程，尽管还有许多其他的进程在你的计算机后台运行，包括保持系统时间准确的程序、监测新的文件系统、索引文件，等等。

大多数操作系统都有某种类型的系统活动监视器，因此你可以了解在任何特定时刻有哪些进程在运行。Linux 有一些供你选择，包括 GNOME 系统监视器和 KSysGuard。这两个软件在桌面环境都很有用，但 Linux 也提供了在终端监控系统的能力。不管你选择哪一种，对于那些积极管理自己电脑的人来说，检查一个特定的进程是一项常见的任务。

在这篇文章中，我演示了如何找到一个程序的进程 ID（PID）。最常见的工具是由 [procps-ng](https://gitlab.com/procps-ng) 包提供的，包括 `ps`、`pstree`、`pidof` 和 `pgrep` 命令。

### 查找一个正在运行的程序的 PID

有时你想得到一个你知道正在运行的特定程序的进程 ID（PID）。`pidof` 和 `pgrep` 命令可以通过命令名称查找进程。

`pidof` 命令返回一个命令的 PID，它按名称搜索确切的命令：

```
$ pidof bash
1776 5736

```

`pgrep` 命令允许使用正则表达式：

```
$ pgrep .sh
1605
1679
1688
1776
2333
5736
$ pgrep bash
5736

```

### 通过文件查找 PID

你可以用 `fuser` 命令找到使用特定文件的进程的 PID。

```
$ fuser --user ~/example.txt
/home/tux/example.txt: 3234(tux)

```

### 通过 PID 获得进程名称

如果你有一个进程的 PID 编号，但没有生成它的命令，你可以用 `ps` 做一个“反向查找”：

```
$ ps 3234
PID TTY   STAT  TIME COMMAND
5736 pts/1  Ss   0:00 emacs

```

### 列出所有进程

`ps` 命令列出进程。你可以用 `-e` 选项列出你系统上的每一个进程：

```
PID TTY          TIME CMD
  1 ?         00:00:03 systemd
  2 ?         00:00:00 kthreadd
  3 ?         00:00:00 rcu_gp
  4 ?         00:00:00 rcu_par_gp
  6 ?         00:00:00 kworker/0:0H-events_highpri
[...]
5648 ?        00:00:00 gnome-control-c
5656 ?        00:00:00 gnome-terminal-
5736 pts/1    00:00:00 bash
5791 pts/1    00:00:00 ps
5792 pts/1    00:00:00 less
(END)

```

### 只列出你的进程

`ps -e` 的输出可能会让人不知所措，所以使用 `-U` 来查看一个用户的进程：

```
$ ps -U tux | less
 PID TTY          TIME CMD
3545 ?        00:00:00 systemd
3548 ?        00:00:00 (sd-pam)
3566 ?        00:00:18 pulseaudio
3570 ?        00:00:00 gnome-keyring-d
3583 ?        00:00:00 dbus-daemon
3589 tty2     00:00:00 gdm-wayland-ses
3592 tty2     00:00:00 gnome-session-b
3613 ?        00:00:00 gvfsd
3618 ?        00:00:00 gvfsd-fuse
3665 tty2     00:01:03 gnome-shell
[...]

```

这样就减少了 200 个（可能是 100 个，取决于你运行的系统）需要分类的进程。

你可以用 `pstree` 命令以不同的格式查看同样的输出：

```
$ pstree -U tux -u --show-pids
[...]
├─gvfsd-metadata(3921)─┬─{gvfsd-metadata}(3923)
│           └─{gvfsd-metadata}(3924)
├─ibus-portal(3836)─┬─{ibus-portal}(3840)
│          └─{ibus-portal}(3842)
├─obexd(5214)
├─pulseaudio(3566)─┬─{pulseaudio}(3640)
│         ├─{pulseaudio}(3649)
│         └─{pulseaudio}(5258)
├─tracker-store(4150)─┬─{tracker-store}(4153)
│           ├─{tracker-store}(4154)
│           ├─{tracker-store}(4157)
│           └─{tracker-store}(4178)
└─xdg-permission-(3847)─┬─{xdg-permission-}(3848)
            └─{xdg-permission-}(3850)

```

### 列出进程的上下文

你可以用 `-u` 选项查看你拥有的所有进程的额外上下文。

```
$ ps -U tux -u
USER  PID %CPU %MEM    VSZ   RSS TTY STAT START  TIME COMMAND
tux  3545  0.0  0.0  89656  9708 ?   Ss   13:59  0:00 /usr/lib/systemd/systemd --user
tux  3548  0.0  0.0 171416  5288 ?   S    13:59  0:00 (sd-pam)
tux  3566  0.9  0.1 1722212 17352 ?  S<sl 13:59  0:29 /usr/bin/pulseaudio [...]
tux  3570  0.0  0.0 664736  8036 ?   SLl  13:59  0:00 /usr/bin/gnome-keyring-daemon [...]
[...]
tux  5736  0.0  0.0 235628  6036 pts/1 Ss 14:18  0:00 bash
tux  6227  0.0  0.4 2816872 74512 tty2 Sl+14:30  0:00 /opt/firefox/firefox-bin [...]
tux  6660  0.0  0.0 268524  3996 pts/1 R+ 14:50  0:00 ps -U tux -u
tux  6661  0.0  0.0 219468  2460 pts/1 S+ 14:50  0:00 less

```

### 用 PID 排除故障

如果你在某个特定的程序上有问题，或者你只是好奇某个程序在你的系统上还使用了什么资源，你可以用 `pmap` 查看运行中的进程的内存图。

```
$ pmap 1776
5736:   bash
000055f9060ec000   1056K r-x-- bash
000055f9063f3000     16K r---- bash
000055f906400000     40K rw---   [ anon ]
00007faf0fa67000   9040K r--s- passwd
00007faf1033b000     40K r-x-- libnss_sss.so.2
00007faf10345000   2044K ----- libnss_sss.so.2
00007faf10545000      4K rw--- libnss_sss.so.2
00007faf10546000 212692K r---- locale-archive
00007faf1d4fb000   1776K r-x-- libc-2.28.so
00007faf1d6b7000   2044K ----- libc-2.28.so
00007faf1d8ba000      8K rw--- libc-2.28.so
[...]

```

### 处理进程 ID

procps-ng 软件包有你需要的所有命令，以调查和监控你的系统在任何时候的使用情况。无论你是对 Linux 系统中各个分散的部分如何结合在一起感到好奇，还是要对一个错误进行调查，或者你想优化你的计算机的性能，学习这些命令都会为你了解你的操作系统提供一个重要的优势。

---

via: <https://opensource.com/article/21/8/linux-procps-ng>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


如何在免费 WiFi 中保护隐私（四）

Summary: 在 Linux 上安装好“虚拟专用网络” 之后，是时候使用它了。

在 Linux 上安装好“虚拟专用网络” 之后，是时候使用它了。

>
> 在 Linux 上安装好“虚拟专用网络” 之后，是时候使用它了。
>
>
>

![](/data/attachment/album/202108/24/101214ng2afee2gmefgj5z.jpg "Woman programming")

0penVPN 在两点之间创建了一个加密通道，以阻止第三方访问你的网络流量数据。通过设置你的 “虚拟专用网络” 服务，你可以成为你自己的 “虚拟专用网络” 服务商。许多流行的 “虚拟专用网络” 服务都使用 0penVPN，所以当你可以掌控自己的网络时，为什么还要将你的网络连接绑定到特定的提供商呢？

本系列的 [第一篇文章](/article-13680-1.html) 安装了一个“虚拟专用网络” 的服务器，[第二篇文章](/article-13702-1.html) 介绍了如何安装和配置一个 0penVPN 服务软件，[第三篇文章](/article-13707-1.html) 解释了如何配置防火墙并启动你的 0penVPN 服务。第四篇也是最后一篇文章将演示如何从客户端计算机使用你的 0penVPN 服务器。这就是你做了前三篇文章中所有工作的原因！

### 创建客户端证书

请记住，0penVPN 的身份验证方法要求服务器和客户端都拥有某些东西（证书）并知道某些东西（口令）。是时候设置它了。

首先，为你的客户端计算机创建一个客户端证书和一个私钥。在你的 0penVPN 服务器上，生成证书请求。它会要求你输入密码；确保你记住它：

```
$ cd /etc/openvpn/ca
$ sudo /etc/openvpn/easy-rsa/easyrsa \
  gen-req greglaptop

```

本例中，`greglaptop` 是创建证书的客户端计算机主机名。

无需将请求导入证书颁发机构（CA），因为它已经存在。审查它以确保请求存在：

```
$ cd /etc/openvpn/ca
$ /etc/openvpn/easy-rsa/easyrsa \
  show-req greglaptop

```

你也可以以客户端身份签署请求：

```
$ /etc/openvpn/easy-rsa/easyrsa \
  sign-req client greglaptop

```

### 安装 0penVPN 客户端软件

在 Linux 系统上，网络管理器可能已经包含了一个 0penVPN 客户端。如果没有，你可以安装插件：

```
$ sudo dnf install NetworkManager-openvpn

```

在 Windows 系统上，你必须从 0penVPN 下载网页下载和安装 0penVPN 客户端。启动安装程序并按照提示操作。

### 复制证书和私钥到客户端

现在你的客户端需要你为其生成的身份验证凭据。你在服务器上生成了这些，因此你必须将它们传输到你的客户端。我推荐使用 SSH 来完成传输。在 Linux 系统上，通过 `scp` 命令实现。在 Windows 系统上，你可以以管理员身份运行 [WinSCP](https://winscp.net/eng/index.php) 来推送证书和密钥。

假设客户端名称为 `greglaptop`，那么证书和私钥的文件名以及服务的位置如下：

```
/etc/openvpn/ca/pki/issued/greglaptop.crt
/etc/openvpn/ca/pki/private/greglaptop.key
/etc/openvpn/ca/pki/issued/ca.crt

```

在 Linux 系统上，复制这些文件到 `/etc/pki/tls/certs` 目录。在 Windows 系统上，复制它们到 `C:\Program Files\OpenVPN\config` 目录。

### 复制和自定义客户端配置文件

在 Linux 系统上，你可以复制服务器上的 `/etc/openvpn/client/OVPNclient2020.ovpn` 文件到 `/etc/NetworkManager/system-connections/` 目录，或者你也可以导航到系统设置中的网络管理器添加一个“虚拟专用网络” 连接。

连接类型选择“<ruby> 证书（TLS） <rt>  Certificates(TLS) </rt></ruby>”。告知网络管理器你从服务器上复制的证书和密钥。

![VPN displayed in Network Manager](/data/attachment/album/202108/24/101225t8mprpy33rpc4pry.jpg "VPN displayed in Network Manager")

在 Windows 系统上，以管理员身份运行 WinSCP，将服务器上的客户端配置模板 `/etc/openvpn/client/OVPNclient2020.ovpn` 文件复制到客户端上的 `C:\Program Files\OpenVPN\config` 目录。然后：

* 重命名它以匹配上面的证书。
* 更改 CA 证书、客户端证书和密钥的名称以匹配上面从服务器复制的名称。
* 修改 IP 信息，以匹配你的网络。

你需要超级管理员权限来编辑客户端配置文件。最简单的方式就是以管理员身份启动一个 CMD 窗口，然后从管理员 CMD 窗口启动记事本来编辑此文件。

### 将你的客户端连接到服务器

在 Linux 系统上，网络管理器会显示你的 “虚拟专用网络” 连接。选择它进行连接。

![Add a connection in Network Manager](/data/attachment/album/202108/24/101225w22puqsrqq9dgci0.jpg "Add a“虚拟专用网络” connection in Network Manager")

在 Windows 系统上，启动 0penVPN 图形用户界面。它会在任务栏右侧的 Windows 系统托盘中生成一个图标，通常位于 Windows 桌面的右下角。右键单击图标以连接、断开连接或查看状态。

对于第一次连接，编辑客户端配置文件的 `remote` 行以使用 0penVPN 服务器的内部 IP 地址。通过右键单击 Windows 系统托盘中的 0penVPN 图标并单击“<ruby> 连接 <rt>  Connect </rt></ruby>”，从办公室网络内部连接到服务器。调试此连接，这应该可以找到并解决问题，而不会出现任何防火墙问题，因为客户端和服务器都在防火墙的同一侧。

接下来，编辑客户端配置文件的 `remote` 行以使用 0penVPN 服务器的公共 IP 地址。将 Windows 客户端连接到外部网络并进行连接。调试有可能的问题。

### 安全连接

恭喜！你已经为其他客户端系统准备好了 0penVPN 网络。对其余客户端重复设置步骤。你甚至可以使用 Ansible 来分发证书和密钥并使其保持最新。

本文基于 D.Greg Scott 的 [博客](https://www.dgregscott.com/how-to-build-a-vpn-in-four-easy-steps-without-spending-one-penny/)，经许可后重新使用。

---

via: <https://opensource.com/article/21/7/openvpn-client>

作者：[D. Greg Scott](https://opensource.com/users/greg-scott) 选题：[lujun9972](https://github.com/lujun9972) 译者：[perfiffer](https://github.com/perfiffer) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #373 VISA 花 15 万美元购买了第一个 CryptoPunk NFT

Summary: 更多：• 数十万基于 Realtek 的设备受到物联网僵尸网络的攻击 • 在苹果 M1 上运行的 GNOME 桌面

Vist => Visa

![](/data/attachment/album/202108/24/161004c3b9fasf9fxbf9e2.jpg)

### VISA 花 15 万美元购买了第一个 CryptoPunk NFT

![](/data/attachment/album/202108/24/161020j55bk4ml0xlquu5q.jpg)

CryptoPunks 被认为是原始的 NFT，在 2017 年推出。尚出现在现在的 NFT 标准 ERC721 之前。这些是一万张怪人的像素艺术图片的集合。Vist 的加密货币主管[说](https://www.theblockcrypto.com/post/115333/visa-buys-cryptopunk-first-steps-nft-commerce)，“我们觉得 CryptoPunks 将是对我们的文物收藏的一个很好的补充，可以描绘和庆祝商业的过去、现在和未来。” 他们认为 CryptoPunks “开创了 NFT 技术和 NFT 商业浪潮”，所以想要[拥有一个](https://www.larvalabs.com/cryptopunks/details/7610)。CryptoPunks 在刚刚过去的 24 小时交易量突破 1 亿美元。

>
> 要是从把 NFT 当成文物来收藏这个角度看，就感觉可以理解了。
>
>
>

### 数十万基于 Realtek 的设备受到物联网僵尸网络的攻击

![](/data/attachment/album/202108/24/161046ooa6765o7f5bhmaa.jpg)

至少有 65 家供应商的数十万台路由器等设备中使用的 Realtek 芯片组存在一个危险的漏洞，目前正受到一个 DDoS 僵尸网络团伙的[攻击](https://therecord.media/hundreds-of-thousands-of-realtek-based-devices-under-attack-from-iot-botnet/)。这些攻击从上周开始，在安全公司发布了有关该漏洞的细节后仅三天就开始了。这些芯片由 Realtek 制造，其他公司将其作为自己设备的基本系统芯片（SoC）。

>
> 用 Realtek 芯片的设备太多了，尤其是各种路由器。看看你的路由器中招了没。
>
>
>

### 在苹果 M1 上运行的 GNOME 桌面

![](/data/attachment/album/202108/24/161101k2p2dtgx4x7xt0d0.jpg)

Asahi Linux 团队的一名成员[展示](https://www.theregister.com/2021/08/23/gnome_asahi_linux/)了在苹果 M1 芯片上运行的 GNOME 桌面。该团队说，“不是很好，但可以使用”。该团队自 1 月份以来一直致力于苹果 M1 GPU 的逆向工程，其目标是“在苹果 M1 Mac 上实现完美的 Linux 体验”。根据截图上的终端显示，它正在运行 5.14 Linux 内核的预发布版、Debian Linux 和 GNOME 3.38.4。但是该团队说，“它不是 GPU 加速的。”新的演示是今年 1 月份 Corellium 早期实验的一个相当大的进步，采用了“双缓冲”机制以减少撕裂现象。

>
> 距离成功又近了一步，Linus 快能用上啦。
>
>
>


Linux 中 cron 系统的 4 种替代方案

Summary: 在 Linux 系统中有一些其他开源项目可以结合或者替代 cron 系统使用。

在 Linux 系统中有一些其他开源项目可以结合或者替代 cron 系统使用。

>
> 在 Linux 系统中有一些其他开源项目可以结合或者替代 cron 系统使用。
>
>
>

![](/data/attachment/album/202108/25/104033ro6lasn54lq25r2l.jpg "Alarm clocks with different time")

[Linux cron 系统](https://opensource.com/article/21/7/cron-linux) 是一项经过时间检验的成熟技术，然而在任何情况下它都是最合适的系统自动化工具吗？答案是否定的。有一些开源项目就可以用来与 cron 结合或者直接代替 cron 使用。

### at 命令

cron 适用于长期重复任务。如果你设置了一个工作任务，它会从现在开始定期运行，直到计算机报废为止。但有些情况下你可能只想设置一个一次性命令，以备不在计算机旁时该命令可以自动运行。这时你可以选择使用 `at` 命令。

`at` 的语法比 cron 语法简单和灵活得多，并且兼具交互式和非交互式调度方法。（只要你想，你甚至可以使用 `at` 作业创建一个 `at` 作业。）

```
$ echo "rsync -av /home/tux/ me@myserver:/home/tux/" | at 1:30 AM

```

该命令语法自然且易用，并且不需要用户清理旧作业，因为它们一旦运行后就完全被计算机遗忘了。

阅读有关 [at 命令](https://opensource.com/article/21/7/intro-command) 的更多信息并开始使用吧。

### systemd

除了管理计算机上的进程外，`systemd` 还可以帮你调度这些进程。与传统的 cron 作业一样，systemd 计时器可以在指定的时间间隔触发事件，例如 shell 脚本和命令。时间间隔可以是每月特定日期的一天一次（例如在星期一的时候触发），或者在 09:00 到 17:00 的工作时间内每 15 分钟一次。

此外 systemd 里的计时器还可以做一些 cron 作业不能做的事情。

例如，计时器可以在一个事件 *之后* 触发脚本或程序来运行特定时长，这个事件可以是开机，可以是前置任务的完成，甚至可以是计时器本身调用的服务单元的完成！

如果你的系统运行着 systemd 服务，那么你的机器就已经在技术层面上使用 systemd 计时器了。默认计时器会执行一些琐碎的任务，例如滚动日志文件、更新 mlocate 数据库、管理 DNF 数据库等。创建自己的计时器很容易，具体可以参阅 David Both 的文章 [使用 systemd 计时器来代替 cron](https://opensource.com/article/20/7/systemd-timers)。

### anacron 命令

cron 专门用于在特定时间运行命令，这适用于从不休眠或断电的服务器。然而对笔记本电脑和台式工作站而言，时常有意或无意地关机是很常见的。当计算机处于关机状态时，cron 不会运行，因此设定在这段时间内的一些重要工作（例如备份数据）也就会跳过执行。

anacron 系统旨在确保作业定期运行，而不是按计划时间点运行。这就意味着你可以将计算机关机几天，再次启动时仍然靠 anacron 来运行基本任务。anacron 与 cron 协同工作，因此严格来说前者不是后者的替代品，而是一种调度任务的有效可选方案。许多系统管理员配置了一个 cron 作业来在深夜备份远程工作者计算机上的数据，结果却发现该作业在过去六个月中只运行过一次。anacron 确保重要的工作在 *可执行的时候* 发生，而不是必须在安排好的 *特定时间点* 发生。

点击参阅关于 [使用 anacron 获得更好的 crontab 效果](https://opensource.com/article/21/2/linux-automation) 的更多内容。

### 自动化

计算机和技术旨在让人们的生活更美好，工作更轻松。Linux 为用户提供了许多有用的功能，以确保完成重要的操作系统任务。查看这些可用的功能，然后试着将这些功能用于你自己的工作任务吧。（LCTT 译注：作者本段有些语焉不详，读者可参阅譬如 [Ansible 自动化工具安装、配置和快速入门指南](/article-13142-1.html) 等关于 Linux 自动化的文章）

---

via: <https://opensource.com/article/21/7/alternatives-cron-linux>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[unigeorge](https://github.com/unigeorge) 校对：[wxy](https://github.com/wxy)

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


改进你的脚本程序的 5 个方法

Summary: 巧用 Bash 脚本程序能帮助你完成很多极具挑战的任务。

巧用 Bash 脚本程序能帮助你完成很多极具挑战的任务。

>
> 巧用 Bash 脚本程序能帮助你完成很多极具挑战的任务。
>
>
>

![](/data/attachment/album/202108/25/131347yblk4jg4r6blebmg.jpg "工作者图片")

系统管理员经常写脚本程序，不论长短，这些脚本可以完成某种任务。

你是否曾经查看过某个软件发行方提供的安装用的<ruby> 脚本 <rt>  script </rt></ruby>程序？为了能够适应不同用户的系统配置，顺利完成安装，这些脚本程序经常包含很多函数和逻辑分支。多年来，我积累了一些改进脚本程序的一些技巧，这里分享几个，希望能对朋友们也有用。这里列出一组短脚本示例，展示给大家做脚本样本。

### 初步尝试

我尝试写一个脚本程序时，原始程序往往就是一组命令行，通常就是调用标准命令完成诸如更新网页内容之类的工作，这样可以节省时间。其中一个类似的工作是解压文件到 Apache 网站服务器的主目录里，我的最初脚本程序大概是下面这样：

```
cp january_schedule.tar.gz /usr/apache/home/calendar/
cd /usr/apache/home/calendar/
tar zvxf january_schedule.tar.gz

```

这帮我节省了时间，也减少了键入多条命令操作。时日久了，我掌握了另外的技巧，可以用 Bash 脚本程序完成更难的一些工作，比如说创建软件安装包、安装软件、备份文件系统等工作。

### 1、条件分支结构

和众多其他编程语言一样，脚本程序的条件分支结构同样是强大的常用技能。条件分支结构赋予了计算机程序逻辑能力，我的很多实例都是基于条件逻辑分支。

基本的条件分支结构就是 `if` 条件分支结构。通过判定是否满足特定条件，可以控制程序选择执行相应的脚本命令段。比如说，想要判断系统是否安装了 Java ，可以通过判断系统有没有一个 Java 库目录；如果找到这个目录，就把这个目录路径添加到可运行程序路径，也就可以调用 Java 库应用了。

```
if [ -d "$JAVA_HOME/bin" ] ; then
    PATH="$JAVA_HOME/bin:$PATH"

```

### 2、限定运行权限

你或许想只允许特定的用户才能执行某个脚本程序。除了 Linux 的权限许可管理，比如对用户和用户组设定权限、通过 SELinux 设定此类的保护权限等，你还可以在脚本里设置逻辑判断来设置执行权限。类似的情况可能是，你需要确保只有网站程序的所有者才能执行相应的网站初始化操作脚本。甚至你可以限定只有 root 用户才能执行某个脚本。这个可以通过在脚本程序里设置逻辑判断实现，Linux 提供的几个环境变量可以帮忙。其中一个是保存用户名称的变量 `$USER`， 另一个是保存用户识别码的变量 `$UID` 。在脚本程序里，执行用户的 UID 值就保存在 `$UID` 变量里。

#### 用户名判别

第一个例子里，我在一个带有几个应用服务器实例的多用户环境里指定只有用户 `jboss1` 可以执行脚本程序。条件 `if` 语句主要是判断，“要求执行这个脚本程序的用户不是 `jboss1` 吗?”当此条件为真时，就会调用第一个 `echo` 语句，接着是 `exit 1`，即退出这个脚本程序。

```
if [ "$USER" != 'jboss1' ]; then
     echo "Sorry, this script must be run as JBOSS1!"
     exit 1
fi
echo "continue script"

```

#### 根用户判别

接下来的例子是要求只有根用户才能执行脚本程序。根用户的用户识别码（UID）是 ０，设置的条件判断采用大于操作符（`-gt`），所有 UID 值大于 ０ 的用户都被禁止执行该脚本程序。

```
if [ "$UID" -gt 0 ]; then
     echo "Sorry, this script must be run as ROOT!"
     exit 1
fi
echo "continue script"

```

### 3、带参数执行程序

可执行程序可以附带参数作为执行选项，命令行脚本程序也是一样，下面给出几个例子。在这之前，我想告诉你，能写出好的程序并不只是写出我们想要它执行什么的程序，程序还需要不执行我们不要它执行的操作。如果运行程序时没有提供参数造成程序缺少足够信息，我愿意脚本程序不要做任何破坏性的操作。因而，程序的第一步就是确认命令行是否提供了参数，判定的条件就是参数数量 `$#` 是否为 0 ，如果是（意味着没有提供参数），就直接终止脚本程序并退出操作。

```
if [ $# -eq 0 ]; then
    echo "No arguments provided"
    exit 1
fi
echo "arguments found: $#"

```

#### 多个运行参数

可以传递给脚本程序的参数不止一个。脚本使用内部变量指代这些参数，内部变量名用非负整数递增标识，也就是 `$1`、`$2`、`$3` 等等递增。我只是扩展前面的程序，并在下面一行输出显示用户提供的前三个参数。显然，要针对所有的每个参数有对应的响应需要更多的逻辑判断，这里的例子只是简单展示参数的使用。

```
echo $1 $2 $3

```

我们在讨论这些参数变量名，你或许有个疑问，“参数变量名怎么跳过了 `$0`，（而直接从`$1` 开始）？”

是的，是这样，这是有原因的。变量名 `$0` 确实存在，也非常有用，它储存的是被执行的脚本程序的名称。

```
echo $0

```

程序执行过程中有一个变量名指代程序名称，很重要的一个原因是，可以在生成的日志文件名称里包含程序名称，最简单的方式应该是调用一个 `echo` 语句。

```
echo test >> $0.log

```

当然，你或许要增加一些代码，确保这个日志文件存放在你希望的路径，日志名称包含你认为有用的信息。

### 4、交互输入

脚本程序的另一个好用的特性是可以在执行过程中接受输入，最简单的情况是让用户可以输入一些信息。

```
echo "enter a word please:"
read word
echo $word

```

这样也可以让用户在程序执行中作出选择。

```
read -p "Install Software ?? [Y/n]: " answ
if [ "$answ" == 'n' ]; then
    exit 1
fi
    echo "Installation starting..."

```

### 5、出错退出执行

几年前，我写了个脚本，想在自己的电脑上安装最新版本的 Java 开发工具包（JDK）。这个脚本把 JDK 文件解压到指定目录，创建更新一些符号链接，再做一下设置告诉系统使用这个最新的版本。如果解压过程出现错误，在执行后面的操作就会使整个系统上的 Java 破坏不能使用。因而，这种情况下需要终止程序。如果解压过程没有成功，就不应该再继续进行之后的更新操作。下面语句段可以完成这个功能。

```
tar kxzmf jdk-8u221-linux-x64.tar.gz -C /jdk --checkpoint=.500; ec=$?
if [ $ec -ne 0 ]; then
     echo "Installation failed - exiting."
     exit 1
fi

```

下面的单行语句可以给你快速展示一下变量 `$?` 的用法。

```
ls T; ec=$?; echo $ec

```

先用 `touch T` 命令创建一个文件名为 `T` 的文件，然后执行这个单行命令，变量 `ec` 的值会是 ０。然后，用 `rm T` 命令删除文件，再执行该单行命令，变量 `ec` 的值会是 ２，因为文件 `T` 不存在，命令 `ls` 找不到指定文件报错。

在逻辑条件里利用这个出错标识，参照前文我使用的条件判断，可以使脚本文件按需完成设定操作。

### 结语

要完成复杂的功能，或许我们觉得应该使用诸如 Python、C 或 Java 这类的高级编程语言，然而并不尽然，脚本编程语言也很强大，可以完成类似任务。要充分发挥脚本的作用，有很多需要学习的，希望这里的几个例子能让你意识到脚本编程的强大。

---

via: <https://opensource.com/article/20/1/improve-bash-scripts>

作者：[Alan Formy-Duval](https://opensource.com/users/alanfdoss) 选题：[lujun9972](https://github.com/lujun9972) 译者：[fisherue](https://github.com/fisherue) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #374 Linux 操作系统诞生 30 周年

Summary: 更多：• 网红前往深圳公司寻求对方遵守 GPLv2 授权 • 三星远程让在南非被盗的电视机变砖

我喜欢机械妖姬。

要代码上门自取这要求属实过分.丢脸丢到外国去了

来自117.136.75.102的 Chrome Mobile 61.0|Android 8.0 用户

![](/data/attachment/album/202108/25/152601fs67semx1m6xfxx7.jpg)

### Linux 操作系统诞生 30 周年

![](/data/attachment/album/202108/25/152601md9jbdd5mxr7yyq1.jpg)

[1991 年 8 月 25 日](https://en.wikipedia.org/wiki/Linux_kernel)，Linux 之父 Linus Torvalds 在 USENET comp.os.minix 上发布了一个帖子：“你最想在 MINIX 里见到什么？”，首次透露出自己正在开发一个免费、开源的操作系统，并且不使用任何一行 MINIX 的源代码。这个时间被许多爱好者视为 Linux 的真正诞生日期，而非第一个 Linux 内核 0.01 发布的 9 月 17 日，也不是第一个正式版 0.02 的 10 月 5 日。

>
> 忽忽 30 年，Linux 已经不仅仅是改变了世界，而且已经成为了这个世界不可或缺的一部分。感谢 Linus Torvalds，感谢为之致力的一切贡献者！
>
>
>

### 网红前往深圳公司寻求对方遵守 GPLv2 授权

![](/data/attachment/album/202108/25/152621wy85b8n51m3w586m.jpg)

据 Solidot [报道](https://www.solidot.org/story?sid=68656)，一位波兰开发者根据 GPLv2 许可证要求深圳的一家手机制造商 Umidigi 提供内核源代码。Umidigi F2 运行了一个修改版的 Linux 内核，根据 GPLv2 许可证要求，该公司在发行产品时需要向消费者提供源代码。但该公司 Ben 的回答是如果要获得可共享的源代码可以在工作时间到该公司深圳办公室里来拿，并表示办公室员工只会说普通话。生活在深圳的 Youtube 网红机械妖姬，与这位波兰开发者在 Twitter 上达成协议，代替对方到深圳办公室去拿源代码。[结果](https://twitter.com/RealSexyCyborg/status/1428706989274583049)被告知 Ben 离开了。

>
> 就是需要有这样较真的人，虽然我之前不太喜欢这位机械妖姬。
>
>
>

### 三星远程让在南非被盗的电视机变砖

![](/data/attachment/album/202108/25/152633b3usdm4cfma0uuuz.jpg)

今年 7 月南非一些地区发生骚扰，三星公司在当地仓库中的电视机被盗。三星南非分公司[宣布](https://teeveetee.blogspot.com/2021/08/samsung-south-africa-activates-tv-block.html)，它激活了所有被盗电视机的 TV Block 功能，如果电视机的系列号被监测出属于被盗产品，那么在联网时 TV Block 功能将会被激活，所有电视功能将被禁用。三星认为，这足以限制掠夺的动机，并减轻销售非法商品的市场的产生。电视屏蔽技术已经预装在所有的三星电视上，不会局限于南非市场。

>
> 这一招比较厉害，互联网化之后的电视的新功能。
>
>
>


KDE Plasma 5.23 的新功能和发布日期

Summary: 我们在这篇文章中总结了 KDE Plasma 5.23（即将到来）的新功能，包括主要特点、下载和 测试说明。

不要用Wayland，就是个吹牛的玩意。

不太喜欢kde，感觉太机械了。更喜欢gnome点。但是现在最喜欢mate

之前装 Manjaro GNOME 时默认用的是 Wayland，结果不小心整出了 bug，shell 基本用不了，Alt + F2 输 r 提示 Wayland 会话不支持重启 GNOME Shell，从此 Wayland 是路人<br />
—— imgradeone

来自广西桂林的 Chrome Mobile 92.0|Android 10 用户

>
> 我们在这篇文章中总结了 KDE Plasma 5.23（即将到来）的新功能，包括主要特点、下载和测试说明。
>
>
>

![](/data/attachment/album/202108/25/222802zwhmvv1vwzusevzw.jpg)

KDE Plasma 桌面是当今最流行、最顶级的 Linux 桌面环境，而 KDE Plasma 的热度之高主要得益于其适应能力强、迭代发展迅速，以及性能不断提高。[KDE Plasma 5.22](https://www.debugpoint.com/2021/06/kde-plasma-5-22-release/) 发布以来，KDE 团队一直忙于为即将到来的 KDE Plasma 5.23 合并更改和测试新功能。目前 KDE Plasma 5.23 仍在开发中，如下是暂定的时间表。

### KDE Plasma 5.23 发布时间表

KDE Plasma 5.23 将于 2021 年 10 月 7 日发布，以下是时间表：

* Beta 公测 – 2021 年 9 月 16 日
* 最终发布 – 2021 年 10 月 7 日

正如每个 Plasma 版本更新一样，本次更新也同样承诺对核心 Plasma Shell 和 KDE 应用进行大幅更改、代码清理、性能改进、数百个 bug 修复、Wayland 优化等。我们在本篇文章中收集了一些重要的功能，让你对即将发布的新功能有基本了解。下面就让我们看看。

### KDE Plasma 5.23 – 新功能

* 本次版本更新基于 Qt 5.15 版本，KDE 框架 5.86 版本。

#### Plasma Shell 和应用程序更新

* 本次 KDE Plasma 的 Kickoff 程序启动器将有大幅更新，包括 bug 修复、减少内存占用、视觉更新、键鼠导航优化。
* Kickoff 程序启动器菜单允许使用固定按钮固定在桌面上，保持开启状态。
* Kickoff 的标签不会在你滚动时切换（从应用标签到位置标签）。
* Kickoff 里可以使用 `CTRL+F` 快捷键直接聚焦到搜索栏。
* Kickoff 中的操作按钮（如关机等）可以设置为仅显示图标。
* 现在可以针对所有 Kickoff 项目选择使用网格或列表视图（而不仅仅局限于收藏夹）。

![KDE Plasma 5.23 中 Kickoff 程序启动器新增的选项](/data/attachment/album/202108/25/222959vzo9r7c7w9oovcow.jpg)

![Kickoff 程序启动器的更改](/data/attachment/album/202108/25/222959yvs3sl42ahj4ztlh.jpg)

* 新增基于 QML 的全新概览视图（类似 GNOME 3.38 的工作区视图），用于展示所有打开的窗口（详见如下视频）。目前我找不到关于此合并请求的更多详情，而且这个新视图也很不稳定。

*视频作者：KDE 团队*

* 该概览效果将替代现有的“展现窗口”特效和“虚拟桌面平铺网格”特效（计划中）。
* 未连接触控板时将展示更易察觉的“未找到触摸板”提示。
* “电源配置方案”设置现在呈现于 Plasma UI（电池和亮度窗口）中。电源配置方案功能从 Linux 内核 5.12 版本开始已经登陆戴尔和联想的笔记本电脑了。因此，如果你拥有这些品牌的较新款笔记本电脑，你可以将电源配置方案设置为高性能或省电模式。*[注：Fedora 35（很大可能）会在 GNOME 41 中增加该功能]*

![新的“电源配置方案”设置](/data/attachment/album/202108/25/223000vny1b71ruybbxrn1.jpg)

* 如果你有多屏幕设置，包括垂直和横向屏幕，那么登录屏幕现在可以正确同步和对齐。这个功能的需求度很高。
* 新的 Breeze 主题预计会有风格上的更新。
* 如前序版本一样，预计会有全新的壁纸（目前壁纸大赛仍在进行中）。
* 新增当硬件从笔记本模式切换到平板模式时是否缩放系统托盘图标的设置。
* 你可以选择在登录时的蓝牙状态：总是启用、总是禁用、记住上一次的状态。该状态在版本升级后仍可保留。
* 用户现在可以更改传感器的显示名称。
* Breeze 风格的滚动条现在比之前版本的更宽。
* Dolphin 文件管理器提供在文件夹前之前优先显示隐藏文件的新选项。
* 你现在可以使用 `DEL` 键删除剪贴板弹窗中选中的项目。
* KDE 现在允许你直接从 Plasma 桌面，向 [store.kde.org](http://store.kde.org) 提交你制作的图标和主题。

#### Wayland 更新

* 在 Wayland 会话中，运行程序时光标旁也会展示图标反馈动画。
* 现在可以从通知中复制文字。
* 中键单击粘贴功能现在可以在 Wayland 和 XWayland 应用程序中正常使用。

请务必牢记，每个版本都有数以百计的 bug 修复和改进。本文仅仅包括了我收集的表面层次的东西。因此，如果想了解应用程序和 Plasma Shell 的变更详情，请访问 GitLab 或 KDE Planet 社区。

### 不稳定版本下载

你现在可以通过下方的链接下载 KDE neon 的不稳定版本来体验上述全部功能。直接下载 .iso 文件，然后安装测试即可。请务必在发现 bug 后及时反馈。该不稳定版本不适合严肃场合及生产力设备使用。

* [下载 KDE neon 不稳定版本](https://neon.kde.org/download)

### 结束语

KDE Plasma 5.23 每次发布都在改进底层、增加新功能。虽然这个版本不是大更新，但一切优化、改进最终都将累积成稳定性、适应性和更好的用户体验。当然，还有更多的 Wayland 改进（讲真，Wayland 兼容看上去一直都处在“正在进行中”的状态 - 就像十年过去了，却还在制作那样。当然这是另一个话题了）。

再会。

---

via: <https://www.debugpoint.com/2021/08/kde-plasma-5-23/>

作者：[Arindam](https://www.debugpoint.com/author/admin1/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[imgradeone](https://github.com/imgradeone) 校对：[wxy](https://github.com/wxy)

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


理解 systemd 启动时在做什么

Summary: systemd 启动过程提供的重要线索可以在问题出现时助你一臂之力。

systemd是不是把问题弄得太复杂了...

systemd 启动过程提供的重要线索可以在问题出现时助你一臂之力。

>
> systemd 启动过程提供的重要线索可以在问题出现时助你一臂之力。
>
>
>

![](/data/attachment/album/202108/26/110220piwnicwxvvc1s8io.jpg "People at the start line of a race")

在本系列的第一篇文章《[学着爱上 systemd](https://opensource.com/article/20/4/systemd)》，我考察了 systemd 的功能和架构，以及围绕 systemd 作为古老的 SystemV 初始化程序和启动脚本的替代品的争论。在这第二篇文章中，我将开始探索管理 Linux 启动序列的文件和工具。我会解释 systemd 启动序列、如何更改默认的启动目标（即 SystemV 术语中的运行级别）、以及在不重启的情况下如何手动切换到不同的目标。

我还将考察两个重要的 systemd 工具。第一个 `systemctl` 命令是和 systemd 交互、向其发送命令的基本方式。第二个是 `journalctl`，用于访问 systemd 日志，后者包含了大量系统历史数据，比如内核和服务的消息（包括指示性信息和错误信息）。

务必使用一个非生产系统进行本文和后续文章中的测试和实验。你的测试系统需要安装一个 GUI 桌面（比如 Xfce、LXDE、Gnome、KDE 或其他）。

上一篇文章中我写道计划在这篇文章创建一个 systemd 单元并添加到启动序列。由于这篇文章比我预期中要长，这些内容将留到本系列的下一篇文章。

### 使用 systemd 探索 Linux 的启动

在观察启动序列之前，你需要做几件事情得使引导和启动序列开放可见。正常情况下，大多数发行版使用一个开机动画或者启动画面隐藏 Linux 启动和关机过程中的显示细节，在基于 Red Hat 的发行版中称作 Plymouth 引导画面。这些隐藏的消息能够向寻找信息以排除程序故障、或者只是学习启动序列的系统管理员提供大量有关系统启动和关闭的信息。你可以通过 GRUB（<ruby> 大统一引导加载器 <rt>  Grand Unified Boot Loader </rt></ruby>）配置改变这个设置。

主要的 GRUB 配置文件是 `/boot/grub2/grub.cfg` ，但是这个文件在更新内核版本时会被覆盖，你不会想修改它的。相反，应该修改用于改变 `grub.cfg` 默认设置的 `/etc/default/grub` 文件。

首先看一下当前未修改的 `/etc/default/grub` 文件的版本：

```
[root@testvm1 ~]# cd /etc/default ; cat grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="resume=/dev/mapper/fedora_testvm1-swap rd.lvm.
lv=fedora_testvm1/root rd.lvm.lv=fedora_testvm1/swap rd.lvm.lv=fedora_
testvm1/usr rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
[root@testvm1 default]#

```

[GRUB 文档](http://www.gnu.org/software/grub/manual/grub) 的第 6 章列出了 `/etc/default/grub` 文件的所有可用项，我只关注下面的部分：

* 我将 GRUB 菜单倒计时的秒数 `GRUB_TIMEOUT`，从 5 改成 10，以便在倒计时达到 0 之前有更多的时间响应 GRUB 菜单。
* `GRUB_CMDLINE_LINUX` 列出了引导阶段传递给内核的命令行参数，我删除了其中的最后两个参数。其中的一个参数 `rhgb` 代表 “<ruby> 红帽图形化引导 <rt>  Red Hat Graphical Boot </rt></ruby>”，在内核初始化阶段显示一个小小的 Fedora 图标动画，而不是显示引导阶段的信息。另一个参数 `quiet`，屏蔽显示记录了启动进度和发生错误的消息。系统管理员需要这些信息，因此我删除了 `rhgb` 和 `quiet`。如果引导阶段发生了错误，屏幕上显示的信息可以指向故障的原因。

更改之后，你的 GRUB 文件将会像下面一样：

```
[root@testvm1 default]# cat grub
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="resume=/dev/mapper/fedora_testvm1-swap rd.lvm.
lv=fedora_testvm1/root rd.lvm.lv=fedora_testvm1/swap rd.lvm.lv=fedora_
testvm1/usr"
GRUB_DISABLE_RECOVERY="false"
[root@testvm1 default]#

```

`grub2-mkconfig` 程序使用 `/etc/default/grub` 文件的内容生成 `grub.cfg` 配置文件，从而改变一些默认的 GRUB 设置。`grub2-mkconfig` 输出到 `STDOUT`，你可以使用程序的 `-o` 参数指明数据流输出的文件，不过使用重定向也同样简单。执行下面的命令更新 `/boot/grub2/grub.cfg` 配置文件：

```
[root@testvm1 grub2]# grub2-mkconfig > /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.18.9-200.fc28.x86_64
Found initrd image: /boot/initramfs-4.18.9-200.fc28.x86_64.img
Found linux image: /boot/vmlinuz-4.17.14-202.fc28.x86_64
Found initrd image: /boot/initramfs-4.17.14-202.fc28.x86_64.img
Found linux image: /boot/vmlinuz-4.16.3-301.fc28.x86_64
Found initrd image: /boot/initramfs-4.16.3-301.fc28.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-7f12524278bd40e9b10a085bc82dc504
Found initrd image: /boot/initramfs-0-rescue-7f12524278bd40e9b10a085bc82dc504.img
done
[root@testvm1 grub2]#

```

重新启动你的测试系统查看本来会隐藏在 Plymouth 开机动画之下的启动信息。但是如果你没有关闭开机动画，又需要查看启动信息的话又该如何操作？或者你关闭了开机动画，而消息流过的速度太快，无法阅读怎么办？（实际情况如此。）

有两个解决方案，都涉及到日志文件和 systemd 日志 —— 两个都是你的好伙伴。你可以使用 `less` 命令查看 `/var/log/messages` 文件的内容。这个文件包含引导和启动信息，以及操作系统执行正常操作时生成的信息。你也可以使用不加任何参数的 `journalctl` 命令查看 systemd 日志，包含基本相同的信息：

```
[root@testvm1 grub2]# journalctl
-- Logs begin at Sat 2020-01-11 21:48:08 EST, end at Fri 2020-04-03 08:54:30 EDT. --
Jan 11 21:48:08 f31vm.both.org kernel: Linux version 5.3.7-301.fc31.x86_64 (mockbuild@bkernel03.phx2.fedoraproject.org) (gcc version 9.2.1 20190827 (Red Hat 9.2.1-1) (GCC)) #1 SMP Mon Oct >
Jan 11 21:48:08 f31vm.both.org kernel: Command line: BOOT_IMAGE=(hd0,msdos1)/vmlinuz-5.3.7-301.fc31.x86_64 root=/dev/mapper/VG01-root ro resume=/dev/mapper/VG01-swap rd.lvm.lv=VG01/root rd>
Jan 11 21:48:08 f31vm.both.org kernel: x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
Jan 11 21:48:08 f31vm.both.org kernel: x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
Jan 11 21:48:08 f31vm.both.org kernel: x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
Jan 11 21:48:08 f31vm.both.org kernel: x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
Jan 11 21:48:08 f31vm.both.org kernel: x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
Jan 11 21:48:08 f31vm.both.org kernel: BIOS-provided physical RAM map:
Jan 11 21:48:08 f31vm.both.org kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
Jan 11 21:48:08 f31vm.both.org kernel: BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
Jan 11 21:48:08 f31vm.both.org kernel: BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
Jan 11 21:48:08 f31vm.both.org kernel: BIOS-e820: [mem 0x0000000000100000-0x00000000dffeffff] usable
Jan 11 21:48:08 f31vm.both.org kernel: BIOS-e820: [mem 0x00000000dfff0000-0x00000000dfffffff] ACPI data
Jan 11 21:48:08 f31vm.both.org kernel: BIOS-e820: [mem 0x00000000fec00000-0x00000000fec00fff] reserved
Jan 11 21:48:08 f31vm.both.org kernel: BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
Jan 11 21:48:08 f31vm.both.org kernel: BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved
Jan 11 21:48:08 f31vm.both.org kernel: BIOS-e820: [mem 0x0000000100000000-0x000000041fffffff] usable
Jan 11 21:48:08 f31vm.both.org kernel: NX (Execute Disable) protection: active
Jan 11 21:48:08 f31vm.both.org kernel: SMBIOS 2.5 present.
Jan 11 21:48:08 f31vm.both.org kernel: DMI: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
Jan 11 21:48:08 f31vm.both.org kernel: Hypervisor detected: KVM
Jan 11 21:48:08 f31vm.both.org kernel: kvm-clock: Using msrs 4b564d01 and 4b564d00
Jan 11 21:48:08 f31vm.both.org kernel: kvm-clock: cpu 0, msr 30ae01001, primary cpu clock
Jan 11 21:48:08 f31vm.both.org kernel: kvm-clock: using sched offset of 8250734066 cycles
Jan 11 21:48:08 f31vm.both.org kernel: clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns
Jan 11 21:48:08 f31vm.both.org kernel: tsc: Detected 2807.992 MHz processor
Jan 11 21:48:08 f31vm.both.org kernel: e820: update [mem 0x00000000-0x00000fff] usable ==> reserved
Jan 11 21:48:08 f31vm.both.org kernel: e820: remove [mem 0x000a0000-0x000fffff] usable
<snip>

```

由于数据流可能长达几十万甚至几百万行，我在这里截断了它。（我的主要工作站上列出的日志长度是 1,188,482 行。）请确保是在你的测试系统尝试的这个命令。如果系统已经运行了一段时间 —— 即使重启过很多次 —— 还是会显示大量的数据。查看这些日志数据，因为它包含了很多信息，在进行问题判断时可能非常有用。了解这个数据文件在正常的引导和启动过程中的模样，可以帮助你在问题出现时定位问题。

我将在本系列之后的文章讨论 systemd 日志、`journalctl` 命令、以及如何整理输出的日志数据来寻找更详细的信息。

内核被 GRUB 加载到内存后，必须先将自己从压缩后的文件中解压出来，才能执行任何有意义的操作。解压自己后，内核开始运行，加载 systemd 并转交控制权。

<ruby> 引导 <rt>  boot </rt></ruby>阶段到此结束，此时 Linux 内核和 systemd 正在运行，但是无法为用户执行任何生产性任务，因为其他的程序都没有执行，没有命令行解释器提供命令行，没有后台进程管理网络和其他的通信链接，也没有任何东西能够控制计算机执行生产功能。

现在 systemd 可以加载所需的功能性单元以便将系统启动到选择的目标运行状态。

### 目标

一个 systemd <ruby> 目标 <rt>  target </rt></ruby>代表一个 Linux 系统当前的或期望的运行状态。与 SystemV 启动脚本十分类似，目标定义了系统运行必须存在的服务，以及处于目标状态下必须激活的服务。图表 1 展示了使用 systemd 的 Linux 系统可能的运行状态目标。就像在本系列的第一篇文章以及 systemd 启动的手册页（`man bootup`）所看到的一样，有一些开启不同必要服务的其他中间目标，包括 `swap.target`、`timers.target`、`local-fs.target` 等。一些目标（像 `basic.target`）作为检查点使用，在移动到下一个更高级的目标之前保证所有需要的服务已经启动并运行。

除非开机时在 GRUB 菜单进行更改，systemd 总是启动 `default.target`。`default.target` 文件是指向真实的目标文件的符号链接。对于桌面工作站，`default.target` 通常是 `graphical.target`，等同于 SystemV 的运行等级 5。对于服务器，默认目标多半是 `multi-user.target`，就像 SystemV 的运行等级 3。`emergency.target` 文件类似单用户模式。目标和<ruby> 服务 <rt>  service </rt></ruby>都是一种 systemd 单元。

下面的图表，包含在本系列的上一篇文章中，比较了 systemd 目标和古老的 SystemV 启动运行等级。为了向后兼容，systemd 提供了 systemd 目标别名，允许脚本和系统管理员使用像 `init 3` 一样的 SystemV 命令改变运行等级。当然，SystemV 命令被转发给 systemd 进行解释和执行。

| **systemd 目标** | **SystemV 运行级别** | **目标别名** | **描述** |
| --- | --- | --- | --- |
| `default.target` |  |  | 这个目标通常是一个符号链接，作为 `multi-user.target` 或 `graphical.target` 的别名。systemd 总是用 `default.target` 启动系统。`default.target** 不能作为`halt.target`、`poweroff.target`和`reboot.target` 的别名。 |
| `graphical.target` | 5 | `runlevel5.target` | 带有 GUI 的 `multi-user.target` 。 |
|  | 4 | `runlevel4.target` | 未使用。运行等级 4 和 SystemV 的运行等级 3 一致，可以创建这个目标并进行定制，用于启动本地服务，而不必更改默认的 `multi-user.target`。 |
| `multi-user.target` | 3 | `runlevel3.target` | 运行所有的服务，但是只有命令行界面（CLI） 。 |
|  | 2 | `runlevel2.target` | 多用户，没有 NFS，但是运行其他所有的非 GUI 服务 |
| `rescue.target` | 1 | `runlevel1.target` | 一个基本的系统，包括挂载文件系统，但是只运行最基础的服务，以及一个主控制台上的用于救援的命令行解释器。 |
| `emergency.target` | S |  | 单用户模式 —— 没有服务运行；文件系统没有挂载。这是最基础级的操作模式，只有一个运行在主控制台的用于紧急情况的命令行解释器，供用户和系统交互。 |
| `halt.target` |  |  | 不断电的情况下停止系统 |
| `reboot.target` | 6 | `runlevel6.target` | 重启 |
| `poweroff.target` | 0 | `runlevel0.target` | 停止系统并关闭电源 |

每个目标在配置文件中都描述了一组依赖关系。systemd 启动需要的依赖，即 Linux 主机运行在特定功能级别所需的服务。加载目标配置文件中列出的所有依赖并运行后，系统就运行在那个目标等级。如果愿意，你可以在本系列的第一篇文章《[学着爱上 systemd](https://opensource.com/article/20/4/systemd)》中回顾 systemd 的启动序列和运行时目标。

### 探索当前的目标

许多 Linux 发行版默认安装一个 GUI 桌面界面，以便安装的系统可以像工作站一样使用。我总是从 Fedora Live USB 引导驱动器安装 Xfce 或 LXDE 桌面。即使是安装一个服务器或者其他基础类型的主机（比如用于路由器和防火墙的主机），我也使用 GUI 桌面的安装方式。

我可以安装一个没有桌面的服务器（数据中心的典型做法），但是这样不满足我的需求。原因不是我需要 GUI 桌面本身，而是 LXDE 安装包含了许多其他默认的服务器安装没有提供的工具，这意味着初始安装之后我需要做的工作更少。

但是，仅仅因为有 GUI 桌面并不意味着我要使用它。我有一个 16 端口的 KVM，可以用于访问我的大部分 Linux 系统的 KVM 接口，但我和它们交互的大部分交互是通过从我的主要工作站建立的远程 SSH 连接。这种方式更安全，而且和 `graphical.target` 相比，运行 `multi-user.target` 使用更少的系统资源。

首先，检查默认目标，确认是 `graphical.target`：

```
[root@testvm1 ~]# systemctl get-default
graphical.target
[root@testvm1 ~]#

```

然后确认当前正在运行的目标，应该和默认目标相同。你仍可以使用老方法，输出古老的 SystemV 运行等级。注意，前一个运行等级在左边，这里是 `N`（意思是 None），表示主机启动后没有修改过运行等级。数字 5 是当前的目标，正如古老的 SystemV 术语中的定义：

```
[root@testvm1 ~]# runlevel
N 5
[root@testvm1 ~]#

```

注意，`runlevel` 的手册页指出运行等级已经被淘汰，并提供了一个转换表。

你也可以使用 systemd 方式，命令的输出有很多行，但确实用 systemd 术语提供了答案：

```
[root@testvm1 ~]# systemctl list-units --type target
UNIT                   LOAD   ACTIVE SUB    DESCRIPTION
basic.target           loaded active active Basic System
cryptsetup.target      loaded active active Local Encrypted Volumes
getty.target           loaded active active Login Prompts
graphical.target       loaded active active Graphical Interface
local-fs-pre.target    loaded active active Local File Systems (Pre)
local-fs.target        loaded active active Local File Systems
multi-user.target      loaded active active Multi-User System
network-online.target  loaded active active Network is Online
network.target         loaded active active Network
nfs-client.target      loaded active active NFS client services
nss-user-lookup.target loaded active active User and Group Name Lookups
paths.target           loaded active active Paths
remote-fs-pre.target   loaded active active Remote File Systems (Pre)
remote-fs.target       loaded active active Remote File Systems
rpc_pipefs.target      loaded active active rpc_pipefs.target
slices.target          loaded active active Slices
sockets.target         loaded active active Sockets
sshd-keygen.target     loaded active active sshd-keygen.target
swap.target            loaded active active Swap
sysinit.target         loaded active active System Initialization
timers.target          loaded active active Timers

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

21 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

```

上面列出了当前加载的和激活的目标，你也可以看到 `graphical.target` 和 `multi-user.target`。`multi-user.target` 需要在 `graphical.target` 之前加载。这个例子中，`graphical.target` 是激活的。

### 切换到不同的目标

切换到 `multi-user.target` 很简单：

```
[root@testvm1 ~]# systemctl isolate multi-user.target

```

显示器现在应该从 GUI 桌面或登录界面切换到了一个虚拟控制台。登录并列出当前激活的 systemd 单元，确认 `graphical.target` 不再运行：

```
[root@testvm1 ~]# systemctl list-units --type target

```

务必使用 `runlevel` 确认命令输出了之前的和当前的“运行等级”：

```
[root@testvm1 ~]# runlevel
5 3

```

### 更改默认目标

现在，将默认目标改为 `multi-user.target`，以便系统总是启动进入 `multi-user.target`，从而使用控制台命令行接口而不是 GUI 桌面接口。使用你的测试主机的根用户，切换到保存 systemd 配置的目录，执行一次快速列出操作：

```
[root@testvm1 ~]# cd /etc/systemd/system/ ; ll
drwxr-xr-x. 2 root root 4096 Apr 25  2018  basic.target.wants
<snip>
lrwxrwxrwx. 1 root root   36 Aug 13 16:23  default.target -> /lib/systemd/system/graphical.target
lrwxrwxrwx. 1 root root   39 Apr 25  2018  display-manager.service -> /usr/lib/systemd/system/lightdm.service
drwxr-xr-x. 2 root root 4096 Apr 25  2018  getty.target.wants
drwxr-xr-x. 2 root root 4096 Aug 18 10:16  graphical.target.wants
drwxr-xr-x. 2 root root 4096 Apr 25  2018  local-fs.target.wants
drwxr-xr-x. 2 root root 4096 Oct 30 16:54  multi-user.target.wants
<snip>
[root@testvm1 system]#

```

为了强调一些有助于解释 systemd 如何管理启动过程的重要事项，我缩短了这个列表。你应该可以在虚拟机看到完整的目录和链接列表。

`default.target` 项是指向目录 `/lib/systemd/system/graphical.target` 的符号链接（软链接），列出那个目录查看目录中的其他内容：

```
[root@testvm1 system]# ll /lib/systemd/system/ | less

```

你应该在这个列表中看到文件、目录、以及更多链接，但是专门寻找一下 `multi-user.target` 和 `graphical.target`。现在列出 `default.target`（指向 `/lib/systemd/system/graphical.target` 的链接）的内容：

```
[root@testvm1 system]# cat default.target
#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
Wants=display-manager.service
Conflicts=rescue.service rescue.target
After=multi-user.target rescue.service rescue.target display-manager.service
AllowIsolate=yes
[root@testvm1 system]#

```

`graphical.target` 文件的这个链接描述了图形用户接口需要的所有必备条件。我会在本系列的下一篇文章至少探讨其中的一些选项。

为了使主机启动到多用户模式，你需要删除已有的链接，创建一个新链接指向正确目标。如果你的 [PWD](https://en.wikipedia.org/wiki/Pwd) 不是 `/etc/systemd/system`，切换过去：

```
[root@testvm1 system]# rm -f default.target
[root@testvm1 system]# ln -s /lib/systemd/system/multi-user.target default.target

```

列出 `default.target` 链接，确认其指向了正确的文件：

```
[root@testvm1 system]# ll default.target
lrwxrwxrwx 1 root root 37 Nov 28 16:08 default.target -> /lib/systemd/system/multi-user.target
[root@testvm1 system]#

```

如果你的链接看起来不一样，删除并重试。列出 `default.target` 链接的内容：

```
[root@testvm1 system]# cat default.target
#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes
[root@testvm1 system]#

```

`default.target`（这里其实是指向 `multi-user.target` 的链接）其中的 `[Unit]` 部分现在有不同的必需条件。这个目标不需要有图形显示管理器。

重启，你的虚拟机应该启动到虚拟控制台 1 的控制台登录，虚拟控制台 1 在显示器标识为 `tty1`。现在你已经知道如何修改默认的目标，使用所需的命令将默认目标改回 `graphical.target`。

首先检查当前的默认目标：

```
[root@testvm1 ~]# systemctl get-default
multi-user.target
[root@testvm1 ~]# systemctl set-default graphical.target
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/graphical.target.
[root@testvm1 ~]#

```

输入下面的命令直接切换到 `graphical.target` 和显示管理器的登录界面，不需要重启：

```
[root@testvm1 system]# systemctl isolate default.target

```

我不清楚为何 systemd 的开发者选择了术语 `isolate` 作为这个子命令。我的研究表明指的可能是运行指明的目标，但是“隔离”并终结其他所有启动该目标不需要的目标。然而，命令执行的效果是从一个运行的目标切换到另一个——在这个例子中，从多用户目标切换到图形目标。上面的命令等同于 SystemV 启动脚本和 `init` 程序中古老的 `init 5` 命令。

登录 GUI 桌面，确认能正常工作。

### 总结

本文探索了 Linux systemd 启动序列，开始探讨两个重要的 systemd 工具 `systemctl` 和 `journalctl`，还说明了如何从一个目标切换到另一个目标，以及如何修改默认目标。

本系列的下一篇文章中将会创建一个新的 systemd 单元，并配置为启动阶段运行。下一篇文章还会查看一些配置选项，可以帮助确定某个特定的单元在序列中启动的位置，比如在网络启动运行后。

### 资源

关于 systemd 网络上有大量的信息，但大部分都简短生硬、愚钝、甚至令人误解。除了本文提到的资源，下面的网页提供了关于 systemd 启动更详细可靠的信息。

* Fedora 项目有一个优质实用的 [systemd 指南](https://docs.fedoraproject.org/en-US/quick-docs/understanding-and-administering-systemd/index.html)，几乎有你使用 systemd 配置、管理、维护一个 Fedora 计算机需要知道的一切。
* Fedora 项目还有一个好用的 [速查表](https://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet)，交叉引用了古老的 SystemV 命令和对应的 systemd 命令。
* 要获取 systemd 的详细技术信息和创立的原因，查看 [Freedesktop.org](http://Freedesktop.org) 的 [systemd 描述](http://www.freedesktop.org/wiki/Software/systemd)。
* [Linux.com](http://Linux.com) 上“systemd 的更多乐趣”提供了更高级的 systemd [信息和提示](https://www.linux.com/training-tutorials/more-systemd-fun-blame-game-and-stopping-services-prejudice/)。

还有一系列针对系统管理员的深层技术文章，由 systemd 的设计者和主要开发者 Lennart Poettering 所作。这些文章写于 2010 年 4 月到 2011 年 9 月之间，但在当下仍然像当时一样有价值。关于 systemd 及其生态的许多其他优秀的作品都是基于这些文章的。

* [Rethinking PID 1](http://0pointer.de/blog/projects/systemd.html)
* [systemd for Administrators, Part I](http://0pointer.de/blog/projects/systemd-for-admins-1.html)
* [systemd for Administrators, Part II](http://0pointer.de/blog/projects/systemd-for-admins-2.html)
* [systemd for Administrators, Part III](http://0pointer.de/blog/projects/systemd-for-admins-3.html)
* [systemd for Administrators, Part IV](http://0pointer.de/blog/projects/systemd-for-admins-4.html)
* [systemd for Administrators, Part V](http://0pointer.de/blog/projects/three-levels-of-off.html)
* [systemd for Administrators, Part VI](http://0pointer.de/blog/projects/changing-roots)
* [systemd for Administrators, Part VII](http://0pointer.de/blog/projects/blame-game.html)
* [systemd for Administrators, Part VIII](http://0pointer.de/blog/projects/the-new-configuration-files.html)
* [systemd for Administrators, Part IX](http://0pointer.de/blog/projects/on-etc-sysinit.html)
* [systemd for Administrators, Part X](http://0pointer.de/blog/projects/instances.html)
* [systemd for Administrators, Part XI](http://0pointer.de/blog/projects/inetd.html)

---

via: <https://opensource.com/article/20/5/systemd-startup>

作者：[David Both](https://opensource.com/users/dboth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[YungeG](https://github.com/YungeG) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #375 龙芯被指 LoongArch 的内核代码复制 MIPS 代码

Summary: 更多：• IEEE 调查显示 Python 才是最流行的编程语言 • 微软将不再允许 Chromebook 用户安装原生安卓 Office 应用

请linux中国社区提高水平，净只会抄老外的发言，自己都没调查过就瞎扯

那你拿出一个更高水平的论证来针对性的给出更好的观点来啊！只会口嗨谁不会

虽然支持龙芯,但不要再出现类似"汉芯事件",比国外差很多,没问题,但要正视自己的问题,不要搞出弄虚作假的事情,特别是这种卡脖子的事情!

你这个给的内核邮件列表里哪说过会拒绝提交了？而且这封邮件里只有这一句看起来比较冲，其他所有篇幅都是在讨论代码，你就拎出来这一句，又自己加了个臆测的评论在后面？<br />
我个人建议你们不要在新闻后面加评论了，没什么意义。

我很早就不看这种自大又政治倾向严重的评论了，可以使用ABP或AdGuard的规则把评论屏蔽掉

看操作系统和浏览器就大概知道你什么水平了

你调查一下再来怼不就跟显示你nb了？

人家老外要求的是新硬件架构用上社区已有的新特性，龙芯为了保持快速上线可用用了老方法，这没有太大的问题。老外不一定清楚loongarch是怎么做或要做什么，龙芯后续邮件也反馈新特性未必能够满足龙芯的要求，很可能不得不回去用旧方法，这是问题还在讨论之中没有结论。而不是像这个狗屁文渲染的观点。

以这个狗屁文章的观点，loongarch只是改变量名，啥都没有，但事实是loongarch 架构的acpi已经获得社区接纳，这个是mips完全没有的东西。

龙芯的的二进制兼容需求，这也是其他架构和mips所不具备的，已经使上游某些分支专家综合考虑龙芯的

引用一段话：LoongArch二进制的指令数量要比MIPS少很多。然后呢，就是两者的指令命名规则和汇编格式有明显的差异。最重要的就是它们的二进制操作码完全没有相似之处，说明这是两种不同的指令集，无法二进制兼容。最近有一些缺乏专业素养的媒体以及公司说LoongArch只是对MIPS的扩展，把“C/C++源代码兼容”和“指令集二进制兼容”混为一谈，还弄不清楚“二进制兼容”和“二进制翻译方式兼容”的区别，不知道他们怎么好意思自称技术博主和科技公司？

![](/data/attachment/album/202108/26/160415ncokoeac62fkdr0z.jpg)

### 龙芯被指 LoongArch 的内核代码复制 MIPS 代码

![](/data/attachment/album/202108/26/160426hvv8txgvuv2mgvft.jpg)

龙芯今年夏天推出了 3A5000 处理器，该处理器建立在龙芯的 LoongArch 指令集架构（ISA）上，龙芯将其描述为“一种新的 RISC ISA”。但 Linux 内核的上游维护者在审查 LoongArch 提交的代码时[质疑](https://lore.kernel.org/lkml/87pmu1q5ms.wl-maz@kernel.org/)，“你一直说 ‘不是 MIPS’，但我看到的只是 MIPS 代码的盲目复制。”在对提交的代码给出一些具体意见之后，维护者最后说，“从我审查的第一个版本以来，我没有看到太多进展。这仍然是同样过时的、破碎的 MIPS 代码，只是换了个名字而已。”据外媒 Phoronix [称](https://www.phoronix.com/scan.php?page=news_item&px=LoongArch-MIPS-Copy-Kernel)，LoongArch 的一些补丁确实是新的，但到目前为止还没有指出这些处理器的任何突破性的差异或令人兴奋的新功能，不幸的是，龙芯科技的公开文档也没有显示任何 ISA 差异等。

>
> 如果龙芯不能拿出本质上不同的改进，估计会被内核社区拒绝。
>
>
>

### IEEE 调查显示 Python 才是最流行的编程语言

![](/data/attachment/album/202108/26/160453g2rsbzuuszx71tzb.jpg)

根据 IEEE 的[研究](https://spectrum.ieee.org/top-programming-languages-2021)，Python、Java、C 和 C++ 是前四名编程语言。而通常在此类调查中名列前茅的 JavaScript 排在第五位。相比之下，StackOverflow 本月早些时候报告说，JavaScript 成为使用最多的语言。Redmonk 的分析师也把 JavaScript 放在首位，开发者工具公司 JetBrains 在其开发者生态系统状况调查中也是如此。IEEE 调查的[数据源](https://spectrum.ieee.org/ieee-top-programming-languages-design-methods-and-data-sources)来自 8 个来源的 11 个指标。IEEE 调查结果不同的原因可能是，虽然 JavaScript 可能是最受欢迎的语言，但它肯定不是搜索量最大或谈论最多的。

>
> 不管最流行的到底是 Python 还是 JavaScript，至少该学会其中一种。
>
>
>

### 微软将不再允许 Chromebook 用户安装原生安卓 Office 应用

![](/data/attachment/album/202108/26/160510bhoejhhcavikopxi.jpg)

从 9 月中旬开始，微软将建议想运行 Office 软件的 Chromebook 用户使用基于 Web 的 Office 应用，但将继续为其他安卓平台提供原生 Office 应用。微软解释说，网页版的应用程序“为 Chrome OS/Chromebook 用户提供了最优化的体验”。8 月 13 日，微软更新了其关于“[如何在 Chromebook 上安装和运行微软 Office](https://support.microsoft.com/en-us/office/how-to-install-and-run-microsoft-office-on-a-chromebook-32f14a23-2c1a-4579-b973-d4b1d78561ad)”的支持页面："安卓版本的 Office、Outlook、OneNote 和 OneDrive 目前在 Chromebook 上不被支持。“而在上周之前，同样的支持页面还建议 Chromebook 用户从 Google Play 商店安装 Office 应用程序的原生安卓版本。

>
> 这是微软看 Chrome OS 十分不顺眼了啊。
>
>
>


使用 SubSync 自动同步视频字幕

![](/data/attachment/album/202108/27/100003ts3j0odw05j0ooy3.jpg)

让我分享一个场景：当你想要观看一部电影或视频，而又需要字幕时，在你下载字幕后，却发现字幕没有正确同步，也没有其他更好的字幕可用。现在该怎么做？

你可以 [在 VLC 中按 G 或 H 键来同步字幕](https://itsfoss.com/how-to-synchronize-subtitles-with-movie-quick-tip/)。它可以为字幕增加延迟。如果字幕在整个视频中的时间延迟相同，这可能会起作用。但如果不是这种情况，就需要 SubSync 出场了。

### SubSync: 字幕语音同步器

[SubSync](https://subsync.online/) 是一款实用的开源工具，可用于 Linux、macOS 和 Windows。

它通过监听音轨来同步字幕，这就是它的神奇之处。即使音轨和字幕使用的是不同的语言，它也能发挥作用。如果有必要，它也支持翻译，但我没有测试过这个功能。

我播放一个视频不同步的字幕进行了一个简单的测试。令我惊讶的是，它工作得很顺利，我得到了完美的同步字幕。

使用 SubSync 很简单。启动这个应用，它会让你添加字幕文件和视频文件。

![SubSync 用户界面](/data/attachment/album/202108/27/100010fwxflhvlhilrsvhh.png)

你需要在界面上选择字幕和视频的语言。它可能会根据选择的语言下载额外的资源。

![SubSync 可下载附加语言支持包](/data/attachment/album/202108/27/100011tzxi4k59ijk5z9in.png)

请记住，同步字幕需要一些时间，这取决于视频和字幕的长度。在等待过程完成时，你可以喝杯茶/咖啡或啤酒。

你可以看到正在进行同步的状态，甚至可以在完成之前保存它。

![SubSync 同步中](/data/attachment/album/202108/27/100012mbcyyi7cc9e9ikcz.png)

同步完成后，你就可以点击保存按钮，把修改的内容保存到原文件中，或者把它保存为新的字幕文件。

![同步完成](/data/attachment/album/202108/27/100012ofsmr22u1s5zc5p1.png)

我不能保证所有情况下都能正常工作，但在我运行的样本测试中它是正常的。

### 安装 SubSync

SubSync 是一个跨平台的应用，你可以从它的 [下载页面](https://subsync.online/en/download.html) 获得 Windows 和 MacOS 的安装文件。

对于 Linux 用户，SubSync 是作为一个 Snap 包提供的。如果你的发行版已经提供了 Snap 支持，使用下面的命令来安装 SubSync：

```
sudo snap install subsync

```

请记住，下载 SubSync Snap 包将需要一些时间。所以要有一个稳定的网络连接或足够的耐心。

### 最后

就我个人而言，我很依赖字幕。即使我在 Netflix 上看英文电影，我也会把字幕打开。它有助于我清楚地理解每段对话，特别是在有强烈口音的情况下。如果没有字幕，我永远无法理解 [电影 Snatch 中 Mickey O'Neil（由 Brad Pitt 扮演）的一句话](https://www.youtube.com/watch?v=tGDO-9hfaiI)。

使用 SubSync 比 [Subtitle Editor](https://itsfoss.com/subtitld/) 同步字幕要容易得多。对于像我这样在整个互联网上搜索不同国家的冷门或推荐（神秘）电影的人来说，除了 [企鹅字幕播放器](https://itsfoss.com/penguin-subtitle-player/)，这是另一个很棒的工具。

如果你是一个“字幕用户”，你会喜欢这个工具。如果你使用过它，请在评论区分享你的使用经验。

---

via: <https://itsfoss.com/subsync/>

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

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


用 fastjar 和 gjar 构建一个 JAR 文件

>
> fastjar、gjar 和 jar 等工具可以帮助你手动或以编程方式构建 JAR 文件，而其他工具链，如 Maven 和 Gradle 提供了依赖性管理的功能。
>
>
>

![](/data/attachment/album/202108/27/105207oj4f44t4vbkkv4iq.jpg "Someone wearing a hardhat and carrying code ")

根据我的经验，Java 的许多优点之一是它能够以整齐方便的包（称为 JAR，或 Java 归档）来提供应用程序。JAR 文件使用户很容易下载并启动他们想尝试的应用，很容易将该应用从一台计算机转移到另一台计算机（而且 Java 是跨平台的，所以可以鼓励自由分享），而且对于新的程序员来说，查看 JAR 文件的内容，以找出使 Java 应用运行的原因是很容易理解的。

创建 JAR 文件的方法有很多，包括 Maven 和 Gradle 等工具链解决方案，以及 IDE 中的一键构建功能。然而，也有一些独立的命令，如 `jarfast`、`gjar` 和普通的 `jar`，它们对于快速和简单的构建是很有用的，并且可以演示 JAR 文件运行所需要的东西。

### 安装

在 Linux 上，你可能已经有了 `fastjar`、`gjar` 或作为 OpenJDK 包或 GCJ（GCC-Java）的一部分的 `jar` 命令。你可以通过输入不带参数的命令来测试这些命令是否已经安装：

```
$ fastjar
Try 'fastjar --help' for more information.
$ gjar
jar: must specify one of -t, -c, -u, -x, or -i
jar: Try 'jar --help' for more information
$ jar
Usage: jar [OPTION...] [ [--release VERSION] [-C dir] files] ...
Try `jar --help' for more information.

```

我安装了所有这些命令，但你只需要一个。所有这些命令都能够构建一个 JAR。

在 Fedora 等现代 Linux 系统上，输入一个缺失的命令你的操作系统提示安装它。

另外，你可以直接从 [AdoptOpenJDK.net](https://adoptopenjdk.net/) 为 Linux、MacOS 和 Windows [安装 Java](https://opensource.com/article/19/11/install-java-linux)。

### 构建 JAR

首先，你需要构建一个 Java 应用。

为了简单起见，在一个名为 `hello.java` 的文件中创建一个基本的 “hello world” 应用：

```
class Main {
public static void main(String[] args) {
    System.out.println("Hello Java World");
}}

```

这是一个简单的应用，在某种程度上淡化了管理外部依赖关系在现实世界中的重要性。不过，这也足以让你开始了解创建 JAR 所需的基本概念了。

接下来，创建一个清单文件。清单文件描述了 JAR 的 Java 环境。在这个例子里，最重要的信息是识别主类，这样执行 JAR 的 Java 运行时就知道在哪里可以找到应用的入口点。

```
$ mdir META-INF
$ echo "Main-Class: Main" > META-INF/MANIFEST.MF

```

### 编译 Java 字节码

接下来，把你的 Java 文件编译成 Java 字节码。

```
$ javac hello.java

```

另外，你也可以使用 GCC 的 Java 组件来编译：

```
$ gcj -C hello.java

```

无论哪种方式，都会产生文件 `Main.class`：

```
$ file Main.class
Main.class: compiled Java class data, version XX.Y

```

### 创建 JAR

你有了所有需要的组件，这样你就可以创建 JAR 文件了。

我经常包含 Java 源码给好奇的用户参考，这只需 `META-INF` 目录和类文件即可。

`fastjar` 命令使用类似于 [tar 命令](https://opensource.com/article/17/7/how-unzip-targz-file)的语法。

```
$ fastjar cvf hello.jar META-INF Main.class

```

另外，你也可以用 `gjar`，方法大致相同，只是 `gjar` 需要你明确指定清单文件：

```
$ gjar cvf world.jar Main.class -m META-INF/MANIFEST.MF

```

或者你可以使用 `jar` 命令。注意这个命令不需要清单文件，因为它会自动为你生成一个，但为了安全起见，我明确定义了主类：

```
$ jar --create --file hello.jar --main-class=Main Main.class

```

测试你的应用：

```
$ java -jar hello.jar
Hello Java World

```

### 轻松打包

像 `fastjar`、`gjar` 和 `jar` 这样的工具可以帮助你手动或以编程方式构建 JAR 文件，而其他工具链如 Maven 和 Gradle 则提供了依赖性管理的功能。一个好的 IDE 可能会集成这些功能中的一个或多个。

无论你使用什么解决方案，Java 都为分发你的应用代码提供了一个简单而统一的目标。

---

via: <https://opensource.com/article/21/8/fastjar>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


关于 Linux 内核的 30 件你不知道的事

Summary: Linux 内核今年 30 岁了。

Linux 内核今年 30 岁了。

>
> Linux 内核今年 30 岁了。
>
>
>

![](/data/attachment/album/202108/27/150006o152rdghq0zqr02f.jpg "30 years")

Linux 内核今年 30 岁了。这开创性的开源软件的三个十年，让用户能够运行自由软件，让他们能从运行的应用程序中学习，让他们能与朋友分享他们所学到的知识。有人认为，如果没有 Linux 内核，我们如今所享受的 [开源文化](https://opensource.com/article/18/1/creative-commons-real-world) 和自由软件的累累硕果，可能就不会应时而出现。如果没有 Linux 作为催化剂，苹果、微软和谷歌所开源的那些就不可能开源。Linux 作为一种现象，对开源文化、软件开发和用户体验的影响，是怎么强调都不为过的，但所有这一切，都滥觞于一个 Linux 内核。

Linux 内核是启动计算机、并识别和确保计算机内外所连接的所有组件之间通信的软件。这些对于大多数用户从未想过，更不用说能理解的代码，Linux 内核有很多令人惊讶的地方。以下是 Linux 内核在其三十年生命中每一年的一件事。顺序无关。

1. Linux 是第一个具有 USB 3.0 驱动的操作系统。Sarah Sharp 在 2009 年 6 月 7 日宣布她的 USB 3.0 设备的驱动程序可以使用了，她的代码被包含在内核 2.6.31 版本中。
2. 当某些事件发生时，内核会将自己标记为“受污染”，这在以后的故障排除中可能有用。运行一个“被污染”的内核并不是什么问题。但如果出现错误，首先要做的是在一个没有被污染的内核上重现该问题。
3. 你可以指定一个主机名或域名作为 `ip=` 内核命令行选项的一部分，Linux 会保留它，而不是用 DHCP 或 BOOTP 提供的主机名或域名来覆盖它。例如，`ip=::::myhostname::dhcp` 设置主机名 `myhostname`。
4. 在文本启动过程中，可以选择显示黑白的、16 色的或 224 色的 Tux 徽标之一。
5. 在娱乐业中，DRM 是一种用来防止访问媒介的技术。然而，在 Linux 内核中，DRM 指的是<ruby> 直接渲染管理器 <rt>  Direct Rendering Manager </rt></ruby>，它指的是用于与对接显卡的 GPU 的库（`libdrm`）和驱动程序。
6. 能够在不重启的情况下给 Linux 内核打补丁。
7. 如果你自己编译内核，你可以将文本控制台配置为超过 80 列宽。
8. Linux 内核提供了内置的 FAT、exFAT 和 NTFS（读和写）支持。
9. Wacom 平板电脑和许多类似设备的驱动程序都内置在内核中。
10. 大多数内核高手使用 `git send-email` 来提交补丁。
11. 内核使用一个叫做 [Sphinx](https://opensource.com/article/19/11/document-python-sphinx) 的文档工具链，它是用 Python 编写的。
12. Hamlib 提供了具有标准化 API 的共享库，可以通过你的 Linux 电脑控制业余无线电设备。
13. 我们鼓励硬件制造商帮助开发 Linux 内核，以确保兼容性。这样就可以直接处理硬件，而不必从制造商那里下载驱动程序。直接成为内核一部分的驱动程序也会自动从新版本内核的性能和安全改进中受益。
14. 内核中包含了许多树莓派模块（Pi Hats）的驱动程序。
15. netcat 乐队发布了一张只能作为 [Linux 内核模块](https://github.com/usrbinnc/netcat-cpi-kernel-module) 播放的专辑。
16. 受 netcat 发布专辑的启发，人们又开发了一个 [把你的内核变成一个音乐播放器](https://github.com/FlaviaR/Netcat-Music-Kernel-Expansion) 的模块。
17. Linux 内核的功能支持许多 CPU 架构：ARM、ARM64、IA-64、 m68k、MIPS、Nios II、PA-RISC、OpenRISC、PowerPC、s390、 Sparc、x86、Xtensa 等等。
18. 2001 年，Linux 内核成为第一个 [以长模式运行的 x86-64 CPU 架构](http://www.x86-64.org/pipermail/announce/2001-June/000020.html)。
19. Linux 3.4 版引入了 x32 ABI，允许开发者编译在 64 位模式下运行的代码，而同时只使用 32 位指针和数据段。
20. 内核支持许多不同的文件系统，包括 Ext2、Ext3、Ext4、JFS、XFS、GFS2、GCFS2、BtrFS、NILFS2、NFS、Overlay FS、UDF 等等。
21. <ruby> 虚拟文件系统 <rt>  Virtual File System </rt></ruby>（VFS）是 Linux 内核中的一个软件层，为用户运行的应用程序提供文件系统接口。它也是内核的一个抽象层，以便不同的文件系统实现可以共存。
22. Linux 内核包括一个实体的盲文输出设备的驱动程序。
23. 在 2.6.29 版本的内核中，启动时的 Tux 徽标被替换为 “Tuz”，以提高人们对当时影响澳大利亚的<ruby> 塔斯马尼亚魔鬼 <rt>  Tasmanian Devil </rt></ruby>（即袋獾）种群的一种侵袭性癌症的认识。
24. <ruby> 控制组 <rt>  Control Groups </rt></ruby>（cgroups）是容器（Docker、Podman、Kubernetes 等的基础技术）能够存在的原因。
25. 曾经花了大量的法律行动来解放 CIFS，以便将其纳入内核中，而今天，CIFS 模块已被内置于内核，以实现对 SMB 的支持。这使得 Linux 可以挂载微软的远程共享和基于云的文件共享。
26. 对于计算机来说，产生一个真正的随机数是出了名的困难（事实上，到目前为止是不可能的）。`hw_random` 框架可以利用你的 CPU 或主板上的特殊硬件功能，尽量改进随机数的生成。
27. *操作系统抖动* 是应用程序遇到的干扰，它是由后台进程的调度方式和系统处理异步事件（如中断）的方式的冲突引起的。像这些问题在内核文档中都有详细的讨论，可以帮助面向 Linux 开发的程序员写出更聪明的代码。
28. `make menuconfig` 命令可以让你在编译前使用 GUI 来配置内核。`Kconfig` 语言定义了内核配置选项。
29. 对于基本的 Linux 服务器，可以实施一个 *看门狗* 系统来监控服务器的健康状况。在健康检查间隔中，`watchdog` 守护进程将数据写入一个特殊的 `watchdog` 内核设备，以防止系统重置。如果看门狗不能成功记录，系统就会被重置。有许多看门狗硬件的实现，它们对远程任务关键型计算机（如发送到火星上的计算机）至关重要。
30. 在火星上有一个 Linux 内核的副本，虽然它是在地球上开发的。

---

via: <https://opensource.com/article/21/8/linux-kernel>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #376 字节跳动开源最新 GAN 压缩算法

Summary: 更多：• 微软警告数千名云服务客户，数据库或被暴露 • 首家销售 Ubuntu 手机的西班牙厂商 Bq 宣布破产

![](/data/attachment/album/202108/27/160126lbinnhh4a9pczibi.jpg)

### 字节跳动开源最新 GAN 压缩算法

![](/data/attachment/album/202108/27/160138faxqznmmbwlavplt.png)

字节跳动近期开源了一项名为 [OMGD](https://github.com/bytedance/OMGD) 的压缩技术。这是字节自研的 GAN（生成对抗网络）压缩算法，在保证生成效果不变的前提下，算力消耗最低可以减少到原来的 1/46，相比之前业界的最佳压缩效果提升一倍多。GAN 是人工智能领域重要的深度学习模型，在图像生成、音乐生成和视频生成等方面应用广泛。2020 年，麻省理工学院 、Adobe 和上海交通大学的研究者们提出一种 GAN 压缩算法，将算力消耗成功减少到 1/21。而此次字节跳动提出的 OMGD 方法则进一步提升了压缩能力。据悉，这项技术的[论文](https://paperswithcode.com/paper/online-multi-granularity-distillation-for-gan)已入选国际计算机视觉会议 ICCV 2021。

>
> 很高兴看到字节跳动也积极支持开源，并且能开源这样重要的技术。
>
>
>

### 微软警告数千名云服务客户，数据库或被暴露

![](/data/attachment/album/202108/27/160159g2up8leqoee28xer.jpg)

这一[漏洞](https://chaosdb.wiz.io/)出现在微软 Azure 的旗舰产品 Cosmos 数据库中。这是 Azure 的中央数据库，通过该漏洞，安全研究人员能够获得任何一个客户的数据库的访问权限。由于微软不能自行更改这些密钥，周四该公司给数千名客户发送了电子邮件，告知他们要设置新的密钥。微软将支付 4 万美元，以奖励安全研究人员发现并报告了这一漏洞。微软[表示](https://www.theregister.com/2021/08/27/chaos_db_azure_cosmos_flaw/)已经修复了这个漏洞，且没有证据表明这个漏洞已经被利用了。

>
> 规模越来越大的云服务，逐渐会成为关键故障点。
>
>
>

### 首家销售 Ubuntu 手机的西班牙厂商 Bq 宣布破产

![](/data/attachment/album/202108/27/160213xtfd1pvei1kzpp8f.jpg)

西班牙手机公司 Bq 曾在欧洲市场推出了几款比较成功的安卓手机和平板。在 2015 年的时候，该公司计划推出搭载 Ubuntu Touch 的手机。虽然受到了外界的广泛关注，但市场反响始终平平。首批 Bq Ubuntu 手机在推出后曾出现了供不应求的情况。但该手机的性价比并不高，规格较低，这遏制了人们的购买热情，导致销量远低于预期。这也可能是 Canonical 决定在 2017 年完全砍掉 Ubuntu 手机项目的原因之一。

>
> 结合前两天一篇介绍 Linux 手机的文章，感觉 Linux 在手机市场还尚处于早期。
>
>
>


Linux 远程连接之 SSH 新手指南

Summary: 学会使用安全外壳协议连接远程计算机。

学会使用安全外壳协议连接远程计算机。

>
> 学会使用安全外壳协议连接远程计算机。
>
>
>

![](/data/attachment/album/202108/28/105409ztj7akfjpcluwjp3.jpg "young woman working on a laptop")

使用 Linux，你只需要在键盘上输入命令，就可以巧妙地使用计算机（甚至这台计算机可以在世界上任何地方），这正是 Linux 最吸引人的特性之一。有了 OpenSSH，[POSIX](https://opensource.com/article/19/7/what-posix-richard-stallman-explains) 用户就可以在有权限连接的计算机上打开安全外壳协议，然后远程使用。这对于许多 Linux 用户来说可能不过是日常任务，但从没操作过的人可能就会感到很困惑。本文介绍了如何配置两台计算机的 <ruby> 安全外壳协议 <rt>  secure shell </rt></ruby>（简称 SSH）连接，以及如何在没有密码的情况下安全地从一台计算机连接到另一台计算机。

### 相关术语

在讨论多台计算机时，如何将不同计算机彼此区分开可能会让人头疼。IT 社区拥有完善的术语来描述计算机联网的过程。

* <ruby> 服务 <rt>  service </rt></ruby>： 服务是指在后台运行的软件，因此它不会局限于仅供安装它的计算机使用。例如，Web 服务器通常托管着 Web 共享 *服务*。该术语暗含（但非绝对）它是没有图形界面的软件。
* <ruby> 主机 <rt>  host </rt></ruby>： 主机可以是任何计算机。在 IT 中，任何计算机都可以称为 *主机*，因为从技术上讲，任何计算机都可以<ruby> 托管 <rt>  host </rt></ruby>对其他计算机有用的应用程序。你可能不会把自己的笔记本电脑视为 **主机**，但其实上面可能正运行着一些对你、你的手机或其他计算机有用的服务。
* <ruby> 本地 <rt>  local </rt></ruby>： 本地计算机是指用户或某些特定软件正在使用的计算机。例如，每台计算机都会把自己称为 `localhost`。
* <ruby> 远程 <rt>  remote </rt></ruby>： 远程计算机是指你既没在其面前，也没有在实际使用的计算机，是真正意义上在 *远程* 位置的计算机。

现在术语已经明确好，我们可以开始了。

### 在每台主机上激活 SSH

要通过 SSH 连接两台计算机，每个主机都必须安装 SSH。SSH 有两个组成部分：本地计算机上使用的用于启动连接的命令，以及用于接收连接请求的 *服务器*。有些计算机可能已经安装好了 SSH 的一个或两个部分。验证 SSH 是否完全安装的命令因系统而异，因此最简单的验证方法是查阅相关配置文件：

```
$ file /etc/ssh/ssh_config
/etc/ssh/ssh_config: ASCII text

```

如果返回 `No such file or directory` 错误，说明没有安装 SSH 命令。

SSH 服务的检测与此类似（注意文件名中的 `d`）：

```
$ file /etc/ssh/sshd_config
/etc/ssh/sshd_config: ASCII text

```

根据缺失情况选择安装两个组件：

```
$ sudo dnf install openssh-clients openssh-server

```

在远程计算机上，使用 systemd 命令启用 SSH 服务：

```
$ sudo systemctl enable --now sshd

```

你也可以在 GNOME 上的 **系统设置** 或 macOS 上的 **系统首选项** 中启用 SSH 服务。在 GNOME 桌面上，该设置位于 **共享** 面板中：

![在 GNOME 系统设置中激活 SSH](/data/attachment/album/202108/28/105418yn1ejybuv4jv6q8p.png "Activate SSH in GNOME System Settings")

### 开启安全外壳协议

现在你已经在远程计算机上安装并启用了 SSH，可以尝试使用密码登录作为测试。要访问远程计算机，你需要有用户帐户和密码。

远程用户不必与本地用户相同。只要拥有相应用户的密码，你就可以在远程机器上以任何用户的身份登录。例如，我在我的工作计算机上的用户是 `sethkenlon` ，但在我的个人计算机上是 `seth`。如果我正在使用我的个人计算机（即作为当前的本地计算机），并且想通过 SSH 连接到我的工作计算机，我可以通过将自己标识为 `sethkenlon` 并使用我的工作密码来实现连接。

要通过 SSH 连接到远程计算机，你必须知道其 IP 地址或可解析的主机名。在远程计算机上使用 `ip` 命令可以查看该机器的 IP 地址：

```
$ ip addr show | grep "inet "
inet 127.0.0.1/8 scope host lo
inet 10.1.1.5/27 brd 10.1.1.31 [...]

```

如果远程计算机没有 `ip` 命令，可以尝试使用 `ifconfig` 命令（甚至可以试试 Windows 上通用的 `ipconfig` 命令）。

`127.0.0.1` 是一个特殊的地址，它实际上是 `localhost` 的地址。这是一个<ruby> 环回 <rt>  loopback </rt></ruby>地址，系统使用它来找到自己。这在登录远程计算机时并没有什么用，因此在此示例中，远程计算机的正确 IP 地址为 `10.1.1.5`。在现实生活中，我的本地网络正在使用 `10.1.1.0` 子网，进而可得知前述正确的 IP 地址。如果远程计算机在不同的网络上，那么 IP 地址几乎可能是任何地址（但绝不会是 `127.0.0.1`），并且可能需要一些特殊的路由才能通过各种防火墙到达远程。如果你的远程计算机在同一个网络上，但想要访问比自己的网络更远的计算机，请阅读我之前写的关于 [在防火墙中打开端口](https://opensource.com/article/20/8/open-ports-your-firewall) 的文章。

如果你能通过 IP 地址 *或* 主机名 `ping` 到远程机器，并且拥有登录帐户，那么就可以通过 SSH 接入远程机器：

```
$ ping -c1 10.1.1.5
PING 10.1.1.5 (10.1.1.5) 56(84) bytes of data.
64 bytes from 10.1.1.5: icmp_seq=1 ttl=64 time=4.66 ms
$ ping -c1 akiton.local
PING 10.1.1.5 (10.1.1.5) 56(84) bytes of data.

```

至此就成功了一小步。再试试使用 SSH 登录：

```
$ whoami
seth
$ ssh sethkenlon@10.1.1.5
bash$ whoami
sethkenlon

```

测试登录有效，下一节会介绍如何激活无密码登录。

### 创建 SSH 密钥

要在没有密码的情况下安全地登录到另一台计算机，登录者必须拥有 SSH 密钥。可能你的机器上已经有一个 SSH 密钥，但再多创建一个新密钥也没有什么坏处。SSH 密钥的生命周期是在本地计算机上开始的，它由两部分组成：一个是永远不会与任何人或任何东西共享的私钥，一个是可以复制到任何你想要无密码访问的远程机器上的公钥。

有的人可能会创建一个 SSH 密钥，并将其用于从远程登录到 GitLab 身份验证的所有操作，但我会选择对不同的任务组使用不同的密钥。例如，我在家里使用一个密钥对本地机器进行身份验证，使用另一个密钥对我维护的 Web 服务器进行身份验证，再一个单独的密钥用于 Git 主机，以及又一个用于我托管的 Git 存储库，等等。在此示例中，我将只创建一个唯一密钥，以在局域网内的计算机上使用。

使用 `ssh-keygen` 命令创建新的 SSH 密钥：

```
$ ssh-keygen -t ed25519 -f ~/.ssh/lan

```

`-t` 选项代表 *类型* ，上述代码设置了一个高于默认值的密钥加密级别。`-f` 选项代表 *文件*，指定了密钥的文件名和位置。运行此命令后会生成一个名为 `lan` 的 SSH 私钥和一个名为 `lan.pub` 的 SSH 公钥。

使用 `ssh-copy-id` 命令把公钥发送到远程机器上，在此之前要先确保具有远程计算机的 SSH 访问权限。如果你无法使用密码登录远程主机，也就无法设置无密码登录：

```
$ ssh-copy-id -i ~/.ssh/lan.pub sethkenlon@10.1.1.5

```

过程中系统会提示你输入远程主机上的登录密码。

操作成功后，使用 `-i` 选项将 SSH 命令指向对应的密钥（在本例中为 `lan`）再次尝试登录：

```
$ ssh -i ~/.ssh/lan sethkenlon@10.1.1.5
bash$ whoami
sethkenlon

```

对局域网上的所有计算机重复此过程，你就将能够无密码访问这个局域网上的每台主机。实际上，一旦你设置了无密码认证，你就可以编辑 `/etc/ssh/sshd_config` 文件来禁止密码认证。这有助于防止其他人使用 SSH 对计算机进行身份验证，除非他们拥有你的私钥。要想达到这个效果，可以在有 `sudo` 权限的文本编辑器中打开 `/etc/ssh/sshd_config` 并搜索字符串 `PasswordAuthentication`，将默认行更改为：

```
PasswordAuthentication no

```

保存并重启 SSH 服务器：

```
$ sudo systemctl restart sshd && echo "OK"
OK
$

```

### 日常使用 SSH

OpenSSH 改变了人们对操作计算机的看法，使用户不再被束缚在面前的计算机上。使用 SSH，你可以访问家中的任何计算机，或者拥有帐户的服务器，甚至是移动和物联网设备。充分利用 SSH 也意味着解锁 Linux 终端的更多用途。如果你还没有使用过 SSH，请试一下它吧。试着适应 SSH，创建一些适当的密钥，以此更安全地使用计算机，打破必须与计算机面对面的局限性。

---

via: <https://opensource.com/article/20/9/ssh>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[unigeorge](https://github.com/unigeorge) 校对：[wxy](https://github.com/wxy)

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


如何在 Windows 和 Linux 上确定系统使用的是 MBR 还是 GPT 分区

![](/data/attachment/album/202108/28/165508gqjyigp3yz3gy6yy.jpg)

在你安装 Linux 或任何其他系统的时候，了解你的磁盘的正确分区方案是非常关键的。

目前有两种流行的分区方案，老一点的 MBR 和新一些的 GPT。现在大多数的电脑使用 GPT。

在制作临场镜像或可启动 USB 设备时，一些工具（比如 [Rufus](https://rufus.ie/en_US/)）会问你在用的磁盘分区情况。如果你在 MBR 分区的磁盘上选择 GPT 方案的话，制作出来的可启动 USB 设备可能会不起作用。

在这个教程里，我会展示若干方法，来在 Windows 和 Linux 系统上检查磁盘分区方案。

### 在 Windows 上检查系统使用的是 MBR 还是 GPT

尽管在 Windows 上包括命令行在内有不少方法可以检查磁盘分区方案，这里我还是使用图形界面的方式查看。

按下 Windows 按键然后搜索“disk”，然后点击“**创建并格式化硬盘分区**”。

![](/data/attachment/album/202108/28/165518h4ijiwe7hih2gwk2.png)

在这里，**右键点击**你想要检查分区方案的磁盘。在右键菜单里**选择属性**。

![右键点击磁盘并选择属性](/data/attachment/album/202108/28/165518b6z4ica3ic8y3ozj.png)

在属性窗口，切换到**卷**标签页，寻找**磁盘分区形式**属性。

![在卷标签页寻找磁盘分区形式属性](/data/attachment/album/202108/28/165519zlaamo5afjo8lf8f.png)

正如你在上面截图所看到的，磁盘正在使用 GPT 分区方案。对于一些其他系统，它可能显示的是 MBR 或 MSDOS 分区方案。

现在你知道如何在 Windows 下检查磁盘分区方案了。在下一部分，你会学到如何在 Linux 下进行检查。

### 在 Linux 上检查系统使用的是 MBR 还是 GPT

在 Linux 上也有不少方法可以检查磁盘分区方案使用的是 MBR 还是 GPT。既有命令行方法也有图形界面工具。

让我先给你演示一下命令行方法，然后再看看一些图形界面的方法。

#### 在 Linux 使用命令行检查磁盘分区方案

命令行的方法应该在所有 Linux 发行版上都有效。

打开终端并使用 `sudo` 运行下列命令：

```
sudo parted -l

```

上述命令实际上是一个基于命令行的 [Linux 分区管理器](https://itsfoss.com/partition-managers-linux/)。命令参数 `-l` 会列出系统中的所有磁盘以及它们的详情，里面包含了分区方案信息。

在命令输出中，寻找以 **Partition Table**（分区表）开头的行：

![](/data/attachment/album/202108/28/165519orwrjy28y7ag88qa.png)

在上面的截图中，磁盘使用的是 GPT 分区方案。如果是 **MBR**，它会显示为 **msdos**。

你已经学会了命令行的方式。但如果你不习惯使用终端，你还可以使用图形界面工具。

#### 使用 GNOME Disks 工具检查磁盘信息

Ubuntu 和一些其它基于 GNOME 的发行版内置了叫做 Disks 的图形工具，你可以用它管理系统中的磁盘。

你也可以使用它来获取磁盘的分区类型。

![](/data/attachment/album/202108/28/165519en3dc4pp90opjs4m.png)

#### 使用 Gparted 图形工具检查磁盘信息

如果你没办法使用 GNOME Disks 工具，别担心，还有其它工具可以使用。

其中一款流行的工具是 Gparted。你应该可以在大多数 Linux 发行版的软件源中找到它。如果系统中没有安装的话，使用你的发行版的软件中心或 [包管理器](https://itsfoss.com/package-manager/) 来 [安装 Gparted](https://itsfoss.com/gparted/)。

在 Gparted 中，通过菜单选择 **View->Device Information**（查看—>设备信息）。它会在左下区域显示磁盘信息，这些信息中包含分区方案信息。

![](/data/attachment/album/202108/28/165520y1o4x6rfx858cw18.jpg)

看吧，也不是太复杂，对吗？现在你了解了好几种途径来确认你的系统使用的是 GPT 还是 MBR 分区方案。

同时我还要提一下，有时候磁盘还会有 [混合分区方案](https://www.rodsbooks.com/gdisk/hybrid.html)。这不是很常见，大多数时候分区不是 MBR 就是 GPT。

有任何问题或建议，请在下方留下评论。

---

via: <https://itsfoss.com/check-mbr-or-gpt/>

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

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


硬核观察 #377 苹果公司将免除“苹果税”

Summary: 更多：• 微软放弃阻止在老式电脑上安装 Windows 11 • 谷歌将向苹果支付 150 亿美元，以继续作为默认搜索引擎

![](/data/attachment/album/202108/28/183820mo5ej6t0uf06u6ne.jpg)

### 苹果公司将免除“苹果税”

![](/data/attachment/album/202108/28/183830bm5e5qzxvhehsia1.jpg)

苹果公司今天[宣布](https://techcrunch.com/2021/08/26/apple-will-now-let-app-store-developers-talk-to-their-customers-about-buying-direct/)，它已经就美国的开发者对其提起的诉讼达成了拟议的和解。该协议最大的变化是开发者可以使用通信，如电子邮件，在其 iOS 应用程序之外分享支付购买的信息，这意味着他们可以告诉客户不受苹果佣金限制的支付方式。这样，开发者不会为在其应用或应用商店之外发生的任何购买行为向苹果支付佣金。

>
> 这将极大的改变应用商店生态，安卓商店也将受到影响。
>
>
>

### 微软放弃阻止在老式电脑上安装 Windows 11

![](/data/attachment/album/202108/28/183851a772irggggqz1p7c.jpg)

微软在 6 月宣布了 Windows 11 的最低硬件要求，并明确表示只有英特尔第八代及以上的 CPU 才被正式支持。现在微软[改变](https://www.theverge.com/22644194/microsoft-windows-11-minimum-system-requirements-processors-changes)了这一态度。虽然继续为 Windows 11 推荐了硬件要求，但只有当你试图通过 Windows Update 从 Windows 10 升级到 Windows 11 时，才会实施这些限制。这意味着任何拥有旧 CPU 的电脑，仍然可以下载 Windows 11 的 ISO 文件并手动安装它。但微软称，他们不能保证驱动程序的兼容性和整体系统的可靠性，因此不会向消费者推荐或宣传这种安装 Windows 11 的方法。而且，采用 ISO 安装方式可能导致 Windows 11 的更新受到影响。

>
> 好吧，其实我觉得微软还是想要装机量。
>
>
>

### 谷歌将向苹果支付 150 亿美元，以继续作为默认搜索引擎

![](/data/attachment/album/202108/28/183910d9ttx21a5vvvs9l8.jpg)

谷歌每年都会向苹果支付一笔巨款，以确保它仍然是 iPhone、iPad 和 Mac 的默认搜索引擎。根据分析师[分析](https://9to5mac.com/2021/08/25/analysts-google-to-pay-apple-15-billion-to-remain-default-safari-search-engine-in-2021/)，谷歌向苹果支付的款项可能在 2021 年达到 150 亿美元，而 2020 年为 100 亿美元，2022 年将增加到 180 亿至 200 亿美元。苹果公司称，“现在，谷歌是最受欢迎的搜索引擎。我们确实支持谷歌，但我们也内置了对 DuckDuckGo 的支持”。

>
> 默认搜索引擎也是 Mozilla 赖以生存的重要收入。
>
>
>


用 ncdu 检查 Linux 中的可用磁盘空间

Summary: 用 ncdu Linux 命令获得关于磁盘使用的交互式报告。

用 ncdu Linux 命令获得关于磁盘使用的交互式报告。

>
> 用 ncdu Linux 命令获得关于磁盘使用的交互式报告。
>
>
>

![](/data/attachment/album/202108/29/095819e87oz4ox6p40t6q0.jpg "Check disk usage")

计算机用户多年来往往积累了大量的数据，无论是重要的个人项目、数码照片、视频、音乐还是代码库。虽然现在的硬盘往往相当大，但有时你必须退一步，评估一下你在硬盘上实际存储了什么。经典的 Linux 命令 [df](https://opensource.com/article/21/7/check-disk-space-linux-df) 和 [du](https://opensource.com/article/21/7/check-disk-space-linux-du) 是快速了解硬盘上的内容的方法，它们提供了一个可靠的报告，易于解析和处理。这对脚本和处理来说是很好的，但人的大脑对数百行的原始数据并不总是反应良好。认识到这一点，`ncdu` 命令旨在提供一份关于你在硬盘上使用的空间的交互式报告。

### 在 Linux 上安装 ncdu

在 Linux 上，你可以从你的软件仓库安装 `ncdu`。例如，在 Fedora 或 CentOS 上：

```
$ sudo dnf install ncdu

```

在 BSD 上，你可以使用 [pkgsrc](https://opensource.com/article/19/11/pkgsrc-netbsd-linux)。

在 macOS 上，你可以从 [MacPorts](https://opensource.com/article/20/11/macports) 或 [HomeBrew](https://opensource.com/article/20/6/homebrew-mac) 安装。

另外，你也可以 [从源码编译 ncdu](https://dev.yorhel.nl/ncdu)。

### 使用 ncdu

`ncdu` 界面使用 ncurses 库，它将你的终端窗口变成一个基本的图形应用，所以你可以使用方向键来浏览菜单。

![ncdu interface](/data/attachment/album/202108/29/095833cw0wtcec32ywww48.jpg "ncdu interface")

这是 `ncdu` 的主要吸引力之一，也是它与最初的 `du` 命令不同的地方。

要获得一个目录的完整列表，启动 `ncdu`。它默认为当前目录。

```
$ ncdu
ncdu 1.16 ~ Use the arrow keys to navigate, press ? for help
--- /home/tux -----------------------------------------------
   22.1 GiB [##################] /.var
   19.0 GiB [###############   ] /Iso
   10.0 GiB [########          ] /.local
    7.9 GiB [######            ] /.cache
    3.8 GiB [###               ] /Downloads
    3.6 GiB [##                ] /.mail
    2.9 GiB [##                ] /Code
    2.8 GiB [##                ] /Documents
    2.3 GiB [#                 ] /Videos
[...]

```

这个列表首先显示了最大的目录（在这个例子中，那是 `~/.var` 目录，塞满了很多的 flatpak 包）。

使用键盘上的方向键，你可以浏览列表，深入到一个目录，这样你就可以更好地了解什么东西占用了最大的空间。

### 获取一个特定目录的大小

你可以在启动 `ncdu` 时提供任意一个文件夹的路径：

```
$ ncdu ~/chromiumos

```

### 排除目录

默认情况下，`ncdu` 包括一切可以包括的东西，包括符号链接和伪文件系统，如 procfs 和 sysfs。你可以用 `--exclude-kernfs` 来排除这些。

你可以使用 `--exclude` 选项排除任意文件和目录，并在后面加上一个匹配模式。

```
$ ncdu --exclude ".var"
   19.0 GiB [##################] /Iso
   10.0 GiB [#########         ] /.local
    7.9 GiB [#######           ] /.cache
    3.8 GiB [###               ] /Downloads
[...]

```

另外，你可以在文件中列出要排除的文件和目录，并使用 `--exclude-from` 选项来引用该文件：

```
$ ncdu --exclude-from myexcludes.txt /home/tux
   10.0 GiB [#########         ] /.local
    7.9 GiB [#######           ] /.cache
    3.8 GiB [###               ] /Downloads
[...]

```

### 颜色方案

你可以用 `--color dark` 选项给 `ncdu` 添加一些颜色。

![ncdu color scheme](/data/attachment/album/202108/29/095834h10vnvr7jvv17v1n.jpg "ncdu color scheme")

### 包括符号链接

`ncdu` 输出按字面意思处理符号链接，这意味着一个指向 9GB 文件的符号链接只占用 40 个字节。

```
$ ncdu ~/Iso
    9.3 GiB [##################]  CentOS-Stream-8-x86_64-20210427-dvd1.iso
@   0.0   B [                  ]  fake.iso

```

你可以用 `--follow-symlinks` 选项强制 ncdu 跟踪符号链接：

```
$ ncdu --follow-symlinks ~/Iso
    9.3 GiB [##################]  fake.iso
    9.3 GiB [##################]  CentOS-Stream-8-x86_64-20210427-dvd1.iso

```

### 磁盘使用率

磁盘空间用完并不有趣，所以监控你的磁盘使用情况很重要。`ncdu` 命令使它变得简单和互动。下次当你对你的电脑上存储的东西感到好奇时，或者只是想以一种新的方式探索你的文件系统时，不妨试试 `ncdu`。

---

via: <https://opensource.com/article/21/8/ncdu-check-free-disk-space-linux>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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


如何在 Bash shell 脚本中解析命令行选项

Summary: 给你的 shell 脚本添加选项。

给你的 shell 脚本添加选项。

>
> 给你的 shell 脚本添加选项。
>
>
>

![](/data/attachment/album/202108/29/110849lvhr1bjg1r43sfcx.jpg "Terminal commands")

终端命令通常具有 [选项或开关](https://opensource.com/article/21/8/linux-terminal#options)，用户可以使用它们来修改命令的执行方式。关于命令行界面的 [POSIX 规范](https://opensource.com/article/19/7/what-posix-richard-stallman-explains) 中就对选项做出了规范，这也是最早的 UNIX 应用程序建立的一个由来已久的惯例，因此你在创建自己的命令时，最好知道如何将选项包含进 [Bash 脚本](https://opensource.com/downloads/bash-scripting-ebook) 中。

与大多数语言一样，有若干种方法可以解决 Bash 中解析选项的问题。但直到今天，我最喜欢的方法仍然是我从 Patrick Volkerding 的 Slackware 构建脚本中学到的方法，当我第一次发现 Linux 并敢于冒险探索操作系统所附带的纯文本文件时，这些脚本就是我的 shell 脚本的引路人。

### Bash 中的选项解析

在 Bash 中解析选项的策略是循环遍历所有传递给 shell 脚本的参数，确定它们是否是一个选项，然后转向下一个参数。重复这个过程，直到没有选项为止。

```
#!/bin/bash

while [ True ]; do
if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
    ALPHA=1
    shift 1
else
    break
fi
done

echo $ALPHA

```

在这段代码中，我创建了一个 `while` 循环，它会一直进行循环操作，直到处理完所有参数。`if` 语句会试着将在第一个位置（`$1`）中找到的参数与 `--alpha` 或 `-a` 匹配。（此处的待匹配项是任意选项名称，并没有特殊意义。在实际的脚本中，你可以使用 `--verbose` 和 `-v` 来触发详细输出）。

`shift` 关键字会使所有参数位移一位，这样位置 2（`$2`）的参数移动到位置 1（`$1`）。处理完所有参数后会触发 `else` 语句，进而中断 `while` 循环。

在脚本的末尾，`$ALPHA` 的值会输出到终端。

测试一下这个脚本:

```
$ bash ./test.sh --alpha
1
$ bash ./test.sh

$ bash ./test.sh -a
1

```

可以看到，选项被正确地检测到了。

### 在 Bash 中检测参数

但上面的脚本还有一个问题：多余的参数被忽略了。

```
$ bash ./test.sh --alpha foo
1
$

```

要想捕获非选项名的参数，可以将剩余的参数转储到 [Bash 数组](https://opensource.com/article/18/5/you-dont-know-bash-intro-bash-arrays) 中。

```
#!/bin/bash

while [ True ]; do
if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
    ALPHA=1
    shift 1
else
    break
fi
done

echo $ALPHA

ARG=( "${@}" )
for i in ${ARG[@]}; do
    echo $i
done

```

测试一下新版的脚本：

```
$ bash ./test.sh --alpha foo
1
foo
$ bash ./test.sh foo

foo
$ bash ./test.sh --alpha foo bar
1
foo
bar

```

### 带参选项

有一些选项需要传入参数。比如，你可能希望允许用户设置诸如颜色或图形分辨率之类的属性，或者将应用程序指向自定义配置文件。

要在 Bash 中实现这一点，你仍然可以像使用布尔开关一样使用 `shift` 关键字，但参数需要位移两位而不是一位。

```
#!/bin/bash

while [ True ]; do
if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
    ALPHA=1
    shift 1
elif [ "$1" = "--config" -o "$1" = "-c" ]; then
    CONFIG=$2
    shift 2
else
    break
fi
done

echo $ALPHA
echo $CONFIG

ARG=( "${@}" )

for i in ${ARG[@]}; do
    echo $i
done

```

在这段代码中，我添加了一个 `elif` 子句来将每个参数与 `--config` 和 `-c` 进行比较。如果匹配，名为 `CONFIG` 的变量的值就设置为下一个参数的值（这就表示 `--config` 选项需要一个参数）。所有参数都位移两位：其中一位是跳过 `--config` 或 `-c`，另一位是跳过其参数。与上节一样，循环重复直到没有匹配的参数。

下面是新版脚本的测试：

```
$ bash ./test.sh --config my.conf foo bar
my.conf
foo
bar
$ bash ./test.sh -a --config my.conf baz
1
my.conf
baz

```

### Bash 让选项解析变得简单

还有一些其他方法也可以解析 Bash 中的选项。你可以替换使用 `case` 语句或 `getopt` 命令。无论使用什么方法，给你的用户提供选项都是应用程序的重要功能，而 Bash 让解析选项成为了一件简单的事。

---

via: <https://opensource.com/article/21/8/option-parsing-bash>

作者：[Seth Kenlon](https://opensource.com/users/seth) 选题：[lujun9972](https://github.com/lujun9972) 译者：[unigeorge](https://github.com/unigeorge) 校对：[wxy](https://github.com/wxy)

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


硬核观察 #378 Alphabet 的无人机在去年送出了 1 万杯咖啡

Summary: 更多：• 谷歌应用商店年收入超百亿美元 • 员工在 Chrome 浏览器安装扩展需管理员审核

![](/data/attachment/album/202108/29/160134hpkg7ty9vgz92gk1.jpg)

### Alphabet 的无人机在去年送出了 1 万杯咖啡

![](/data/attachment/album/202108/29/160201btndz0mdd6m9391j.jpg)

在 2014 年开始的一系列无人机测试之后，Alphabet 旗下的无人机公司 Wing 于 2019 年在澳大利亚推出。这项服务最初是 Alphabet 实验研究部门的一部分，允许用户通过移动应用程序订购食品等物品。去年向澳大利亚洛根的客户[送去](https://www.cnbc.com/2021/08/25/alphabet-wing-drones-delivered-10000-cups-of-coffee-in-the-last-year.html)了 1 万杯咖啡、1700 个零食包和 1200 只烤鸡。

>
> 不知道什么时候我们点外卖也可以通过无人机收到。
>
>
>

### 谷歌应用商店年收入超百亿美元

![](/data/attachment/album/202108/29/160223rhqq6r6qy1q9rgq6.jpg)

周六解封的法庭文件首次让外界清楚地一窥谷歌应用商店 Google Play 商店的财务业绩。文件显示，在 2019 年它就创造了 112 亿美元收入，其中营业利润 70 亿美元，营业利润率超过 62%。谷歌担心，一旦 Google Play 被开发者成功绕过，他们可能会损失 11 亿美元的年应用商店利润。

>
> 结合昨天苹果商店将免除“苹果税”的新闻，以后应用商店的主要收入可能不再是支付分成了。
>
>
>

### 员工在 Chrome 浏览器安装扩展需管理员审核

![](/data/attachment/album/202108/29/160238qvvxk9xyvvm5k8dv.jpg)

谷歌宣布，为企业用户带来了 Chrome 浏览器扩展管理功能，可以让管理员对员工的扩展安装进行审核。企业为 Chrome 浏览器启用该功能后，Chrome 扩展商店的“添加到 Chrome”按钮会变成“请求”字样，点击“请求”按钮就可以向管理员提出申请。管理员还能将某一扩展的版本号锁定，员工无法进行更新。

>
> 作为份额最大的浏览器，我惊讶的是居然才推出这样的企业级功能。
>
>
>


15 个被黑客利用来数百万次入侵 Linux 系统的顶级漏洞

投毒的不少！！！

<srcipt>alert("test")</srcipt>

![](/data/attachment/album/202108/29/225711zvygqg7olognh8ga.jpg)

有将近 1400 万基于 Linux 的系统直接暴露在互联网上，这使得它们成为有利可图的现实世界攻击目标，这些攻击可能会导致它们被部署恶意的 Webshell、加密货币矿工、勒索软件和其他木马。

网络安全公司 [趋势科技](https://www.trendmicro.com/vinfo/us/security/news/cybercrime-and-digital-threats/linux-threat-report-2021-1h-linux-threats-in-the-cloud-and-security-recommendations) 发布了一份对 Linux 威胁形势的深入研究，其根据从蜜罐、传感器和匿名遥测中收集的数据，详细介绍了 2021 年上半年影响 Linux 操作系统的首要威胁和漏洞。

该公司检测到近 1500 万个针对基于 Linux 的云环境的恶意软件事件，发现加密货币矿工和勒索软件占所有恶意软件的 54%，Webshell 占 29%。

![](/data/attachment/album/202108/29/225723flbwv7t22rtc7e2r.jpg)

此外，通过剖析同一时期 10 万台 Linux 主机报告的 5000 多万例事件，研究人员发现了 15 个顶级安全缺陷，这些缺陷已经在野外被广泛利用或有了概念证明（PoC）：

* [CVE-2017-5638](https://nvd.nist.gov/vuln/detail/CVE-2017-5638)（CVSS 评分：10.0） - Apache Struts 2 远程代码执行（RCE）漏洞
* [CVE-2017-9805](https://nvd.nist.gov/vuln/detail/CVE-2017-9805)（CVSS 评分：8.1） - Apache Struts 2 REST 插件 XStream RCE 漏洞
* [CVE-2018-7600](https://nvd.nist.gov/vuln/detail/CVE-2018-7600)（CVSS 评分：9.8） - Drupal Core RCE 漏洞
* [CVE-2020-14750](https://nvd.nist.gov/vuln/detail/CVE-2020-14750)（CVSS 评分：9.8） - Oracle WebLogic Server RCE 漏洞
* [CVE-2020-25213](https://nvd.nist.gov/vuln/detail/CVE-2020-25213)（CVSS 评分：10.0） - WordPress 文件管理器（wp-file-manager）插件 RCE 漏洞
* [CVE-2020-17496](https://nvd.nist.gov/vuln/detail/CVE-2020-17496)（CVSS score: 9.8） - vBulletin subwidgetConfig 未认证 RCE 漏洞
* [CVE-2020-11651](https://nvd.nist.gov/vuln/detail/CVE-2020-11651)（CVSS 评分: 9.8） - SaltStack Salt 授权弱点漏洞
* [CVE-2017-12611](https://nvd.nist.gov/vuln/detail/CVE-2017-12611)（CVSS 评分: 9.8） - Apache Struts OGNL 表达式 RCE 漏洞
* [CVE-2017-7657](https://nvd.nist.gov/vuln/detail/CVE-2017-7657)（CVSS score: 9.8） - Eclipse Jetty 块长度解析的整数溢出漏洞
* [CVE-2021-29441](https://nvd.nist.gov/vuln/detail/CVE-2021-29441)（CVSS 评分：9.8） - 阿里巴巴 Nacos AuthFilter 认证绕过漏洞
* [CVE-2020-14179](https://nvd.nist.gov/vuln/detail/CVE-2020-14179)（CVSS 评分：5.3） - Atlassian Jira 信息泄露漏洞
* [CVE-2013-4547](https://nvd.nist.gov/vuln/detail/CVE-2013-4547)（CVSS 评分：8.0） - Nginx 制作的 URI 字符串处理访问限制绕过漏洞
* [CVE-2019-0230](https://nvd.nist.gov/vuln/detail/CVE-2019-0230)（CVSS 评分：9.8） - Apache Struts 2 RCE 漏洞
* [CVE-2018-11776](https://nvd.nist.gov/vuln/detail/CVE-2018-11776)（CVSS 评分：8.1） - Apache Struts OGNL 表达式RCE 漏洞
* [CVE-2020-7961](https://nvd.nist.gov/vuln/detail/CVE-2020-7961)（CVSS 评分：9.8） - Liferay Portal 不受信任的反序列化漏洞

![](/data/attachment/album/202108/29/225723mw7fdpssftszptsi.jpg)

更令人不安的是，官方 Docker Hub 资源库中最常用的 15 个 Docker 镜像被发现存在数百个漏洞，这涉及 python、node、wordpress、golang、nginx、postgres、influxdb、httpd、mysql、debian、memcached、redis、mongo、centos 和 rabbitmq。这表明需要在开发管道的每个阶段[保护容器](https://www.trendmicro.com/vinfo/us/security/news/security-technology/container-security-examining-potential-threats-to-the-container-environment)免受广泛的潜在威胁。

研究人员总结说：“用户和组织应始终应用安全最佳实践，其中包括利用安全设计方法，部署多层虚拟补丁或漏洞屏蔽，采用最小特权原则，并坚持共同责任模式。”

---

via: <https://thehackernews.com/2021/08/top-15-vulnerabilities-attackers.html>

作者：[Ravie Lakshmanan](https://thehackernews.com/p/authors.html) 选题：[wxy](https://github.com/wxy) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](/article-13730-1.html) 荣誉推出


如何在 Linux 中实时监控日志文件

lnav 显示中文的时候会乱码，这个怎么解决呢？

写的不错~DZ改的也不错。

<script>alert(document.cookie)</script>

>
> 本教程解释了如何实时监控 Linux 日志文件（桌面、服务器或应用），以进行诊断和故障排除。
>
>
>

![](/data/attachment/album/202108/30/082607bmf6nlud6sdy49rm.jpg)

当你在你的 Linux 桌面、服务器或任何应用中遇到问题时，你会首先查看各自的日志文件。日志文件通常是来自应用的文本和信息流，上面有一个时间戳。它可以帮助你缩小具体的实例，并帮助你找到任何问题的原因。它也可以帮助从网络上获得援助。

一般来说，所有的日志文件都位于 `/var/log` 中。这个目录包含以 `.log` 为扩展名的特定应用、服务的日志文件，它还包含单独的其他目录，这些目录包含其日志文件。

![log files in var-log](/data/attachment/album/202108/30/082620sft4ibccc360o9i3.jpg)

所以说，如果你想监控一堆日志文件或特定的日志文件。这里有一些你可以做到方法。

### 实时监控 Linux 日志文件

#### 使用 tail 命令

使用 `tail` 命令是实时跟踪日志文件的最基本方法。特别是，如果你所在的服务器只有一个终端，没有 GUI。这是很有帮助的。

比如：

```
tail /path/to/log/file

```

![Monitoring multiple log files via tail](/data/attachment/album/202108/30/082620bw8835jb5w655w4t.jpg)

使用开关 `-f` 来跟踪日志文件，它是实时更新的。例如，如果你想跟踪 `syslog`，你可以使用以下命令：

```
tail -f /var/log/syslog

```

你可以用一个命令监控多个日志文件，使用：

```
tail -f /var/log/syslog /var/log/dmesg

```

如果你想监控 http 或 sftp 或任何服务器，你也可以在这个命令中监控它们各自的日志文件。

记住，上述命令需要管理员权限。

#### 使用 lnav（日志文件浏览器）

![lnav Running](/data/attachment/album/202108/30/082621jja113jtm20pz6pp.jpg)

`lnav` 是一个很好的工具，你可以用它来通过彩色编码的信息以更有条理的方式监控日志文件。在 Linux 系统中，它不是默认安装的。你可以用下面的命令来安装它：

```
sudo apt install lnav ### Ubuntu
sudo dnf install lnav ### Fedora

```

好的是，如果你不想安装它，你可以直接下载其预编译的可执行文件，然后在任何地方运行。甚至从 U 盘上也可以。它不需要设置，而且有很多功能。使用 `lnav`，你可以通过 SQL 查询日志文件，以及其他很酷的功能，你可以在它的 [官方网站](https://lnav.org/features) 上了解。

一旦安装，你可以简单地用管理员权限从终端运行 `lnav`，它将默认显示 `/var/log` 中的所有日志并开始实时监控。

#### 关于 systemd 的 journalctl 说明

今天所有的现代 Linux 发行版大多使用 systemd。systemd 提供了运行 Linux 操作系统的基本框架和组件。systemd 通过 `journalctl` 提供日志服务，帮助管理所有 systemd 服务的日志。你还可以通过以下命令实时监控各个 systemd 服务和日志。

```
journalctl -f

```

下面是一些具体的 `journalctl` 命令，可以在一些情况下使用。你可以将这些命令与上面的 `-f` 开关结合起来，开始实时监控。

* 对紧急系统信息，使用：

```
journalctl -p 0

```
* 显示带有解释的错误：

```
journalctl -xb -p 3

```
* 使用时间控制来过滤输出：

```
journalctl --since "2020-12-04 06:00:00"
journalctl --since "2020-12-03" --until "2020-12-05 03:00:00"
journalctl --since yesterday
journalctl --since 09:00 --until "1 hour ago"

```

如果你想了解更多关于 `journalctl` 的细节，我已经写了一个 [指南](https://www.debugpoint.com/2020/12/systemd-journalctl/)。

### 结束语

我希望这些命令和技巧能帮助你找出桌面或服务器问题/错误的根本原因。对于更多的细节，你可以随时参考手册，摆弄各种开关。如果你对这篇文章有什么意见或看法，请在下面的评论栏告诉我。

加油。

---

via: <https://www.debugpoint.com/2021/08/monitor-log-files-real-time/>

作者：[Arindam](https://www.debugpoint.com/author/admin1/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[geekpi](https://github.com/geekpi) 校对：[wxy](https://github.com/wxy)

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