2021年8月

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

在 2014 年开始的一系列无人机测试之后,Alphabet 旗下的无人机公司 Wing 于 2019 年在澳大利亚推出。这项服务最初是 Alphabet 实验研究部门的一部分,允许用户通过移动应用程序订购食品等物品。去年向澳大利亚洛根的客户送去了 1 万杯咖啡、1700 个零食包和 1200 只烤鸡。

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

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

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

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

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

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

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

给你的 shell 脚本添加选项。

 title=

终端命令通常具有 选项或开关,用户可以使用它们来修改命令的执行方式。关于命令行界面的 POSIX 规范 中就对选项做出了规范,这也是最早的 UNIX 应用程序建立的一个由来已久的惯例,因此你在创建自己的命令时,最好知道如何将选项包含进 Bash 脚本 中。

与大多数语言一样,有若干种方法可以解决 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 数组 中。

#!/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 选题:lujun9972 译者:unigeorge 校对:wxy

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

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

 title=

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

在 Linux 上安装 ncdu

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

$ sudo dnf install ncdu

在 BSD 上,你可以使用 pkgsrc

在 macOS 上,你可以从 MacPortsHomeBrew 安装。

另外,你也可以 从源码编译 ncdu

使用 ncdu

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

 title=

这是 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 添加一些颜色。

 title=

包括符号链接

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 选题:lujun9972 译者:geekpi 校对:wxy

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

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

苹果公司今天宣布,它已经就美国的开发者对其提起的诉讼达成了拟议的和解。该协议最大的变化是开发者可以使用通信,如电子邮件,在其 iOS 应用程序之外分享支付购买的信息,这意味着他们可以告诉客户不受苹果佣金限制的支付方式。这样,开发者不会为在其应用或应用商店之外发生的任何购买行为向苹果支付佣金。

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

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

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

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

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

谷歌每年都会向苹果支付一笔巨款,以确保它仍然是 iPhone、iPad 和 Mac 的默认搜索引擎。根据分析师分析,谷歌向苹果支付的款项可能在 2021 年达到 150 亿美元,而 2020 年为 100 亿美元,2022 年将增加到 180 亿至 200 亿美元。苹果公司称,“现在,谷歌是最受欢迎的搜索引擎。我们确实支持谷歌,但我们也内置了对 DuckDuckGo 的支持”。

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

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

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

在制作临场镜像或可启动 USB 设备时,一些工具(比如 Rufus)会问你在用的磁盘分区情况。如果你在 MBR 分区的磁盘上选择 GPT 方案的话,制作出来的可启动 USB 设备可能会不起作用。

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

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

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

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

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

右键点击磁盘并选择属性

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

在卷标签页寻找磁盘分区形式属性

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

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

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

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

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

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

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

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

sudo parted -l

上述命令实际上是一个基于命令行的 Linux 分区管理器。命令参数 -l 会列出系统中的所有磁盘以及它们的详情,里面包含了分区方案信息。

在命令输出中,寻找以 Partition Table(分区表)开头的行:

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

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

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

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

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

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

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

其中一款流行的工具是 Gparted。你应该可以在大多数 Linux 发行版的软件源中找到它。如果系统中没有安装的话,使用你的发行版的软件中心或 包管理器安装 Gparted

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

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

同时我还要提一下,有时候磁盘还会有 混合分区方案。这不是很常见,大多数时候分区不是 MBR 就是 GPT。

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


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

作者:Abhishek Prakash 选题:lujun9972 译者:alim0x 校对:wxy

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

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

 title=

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

相关术语

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

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

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

在每台主机上激活 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 桌面上,该设置位于 共享 面板中:

 title=

开启安全外壳协议

现在你已经在远程计算机上安装并启用了 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 的地址。这是一个 环回 loopback 地址,系统使用它来找到自己。这在登录远程计算机时并没有什么用,因此在此示例中,远程计算机的正确 IP 地址为 10.1.1.5。在现实生活中,我的本地网络正在使用 10.1.1.0 子网,进而可得知前述正确的 IP 地址。如果远程计算机在不同的网络上,那么 IP 地址几乎可能是任何地址(但绝不会是 127.0.0.1),并且可能需要一些特殊的路由才能通过各种防火墙到达远程。如果你的远程计算机在同一个网络上,但想要访问比自己的网络更远的计算机,请阅读我之前写的关于 在防火墙中打开端口 的文章。

如果你能通过 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 [email protected]
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 [email protected]

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

操作成功后,使用 -i 选项将 SSH 命令指向对应的密钥(在本例中为 lan)再次尝试登录:

$ ssh -i ~/.ssh/lan [email protected]
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 选题:lujun9972 译者:unigeorge 校对:wxy

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