2020年7月

显示和解释有关 Linux 版本的信息比看起来要复杂一些。

与引用一个简单的版本号不同,识别 Linux 版本有很多种方法。即使只是快速查看一下 uname 命令的输出,也可以告诉你一些信息。这些信息是什么,它告诉你什么?

在本文中,我们将认真研究 uname 命令的输出以及其他一些命令和文件提供的版本说明。

使用 uname

每当在 Linux 系统终端窗口中执行命令 uname -a 时,都会显示很多信息。那是因为这个小小的 a 告诉 uname 命令你想查看该命令能提供的全部输出。结果显示的内容将告诉你许多有关该系统的各种信息。实际上,显示的每一块信息都会告诉你一些关于系统的不同信息。

例如,uname -a 输出看起来像这样:

$ uname -a
Linux dragonfly 5.4.0-37-generic #41-Ubuntu SMP Wed Jun 3 18:57:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

尽管这可能不太重要,但你可以使用一个按适当的顺序包含 uname 所有选项来显示相同的信息:

$ uname -snmrvpio
Linux dragonfly 5.4.0-37-generic #41-Ubuntu SMP Wed Jun 3 18:57:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

要将这一长串信息分解为单独的块,可以使用类似这样的 for 循环来遍历每个选项:

$ for option in s n m r v p i o; do echo -n "$option: "; uname -$option; done
s: Linux
n: dragonfly
m: x86_64
r: 5.4.0-37-generic
v: #41-Ubuntu SMP Wed Jun 3 18:57:02 UTC 2020
p: x86_64
i: x86_64
o: GNU/Linux

该循环显示了该选项提供了哪些信息。uname 手册页提供了每个选项的描述。以下是清单:

  • Linux –- 内核名称(选项 s
  • dragonfly –- 节点名(选项 n
  • x86\_64 –- 机器硬件名(选项 m
  • 5.4.0-37-generic –- 内核发布版本(选项 r
  • 41-Ubuntu SMP Wed Jun 3 18:57:02 UTC 2020 -- 内核版本(选项 v

  • x86\_64 –- 处理器(选项 p
  • x86\_64 –- 硬件平台(选项 i
  • GNU/Linux –- 操作系统(选项 o

要更深入地研究显示的信息,请认真查看显示的内核发行数据。第四行中的 5.4.0-37 不仅仅是一串任意数字。每个数字都很重要。

  • 5 表示内核版本
  • 4 表示主要版本
  • 0 表示次要版本
  • 37 表示最新补丁

此外,在上面的循环中输出的第 5 行(内核版本)中的 #41 表示此发布版本已编译 41 次。

如果你只想显示所有信息中的一项,那么单个选项可能很有用。例如,命令 uname -n 可以仅告诉你系统名称,而 uname -r 仅可以告诉你内核发布版本。在盘点服务器或构建脚本时,这些和其他选项可能很有用。

在 Red Hat 系统时,uname -a 命令将提供相同种类的信息。这是一个例子:

$ uname -a
Linux fruitfly 4.18.0-107.el8.x86_64 #1 SMP Fri Jun 14 13:46:34 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

发行版信息

如果你需要了解运行的发行版是什么,那么 uname 的输出不会对你有太大帮助。毕竟,内核版本与发行版不同。关于这个信息,你可以在 Ubuntu 和其他基于 Debian 的系统上使用 lsb_release -r 命令,而在 Red Hat 上可以显示 /etc/redhat-release 文件的内容。

对于 Debian 系统:

$ lsb_release -r
Release: 20.04

对于 Red Hat 及相关系统:

$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.1 Beta (Ootpa)

使用 /proc/version

/proc/version 文件还可以提供有关 Linux 版本的信息。该文件中提供的信息与 uname -a 输出有很多共同点。以下是例子。

在 Ubuntu 上:

$ cat /proc/version
Linux version 5.4.0-37-generic (buildd@lcy01-amd64-001) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #41-Ubuntu SMP Wed Jun 3 18:57:02 UTC 2020

在 RedHat 上:

$ cat /proc/version
Linux version 4.18.0-107.el8.x86_64 ([email protected]) (gcc version 8.3.1 20190507 (Red Hat 8.3.1-4) (GCC)) #1 SMP Fri Jun 14 13:46:34 UTC 2019

总结

Linux 系统提供了很多关于内核和发行版安装的信息。你只需要知道在哪里或如何寻找并理解它的含义。


via: https://www.networkworld.com/article/3565432/how-to-decipher-linux-release-info.html

作者:Sandra Henry-Stocker 选题:lujun9972 译者:geekpi 校对:wxy

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

如果你运行的服务器有面向公众的 SSH 访问,你可能遇到过恶意登录尝试。本文介绍了如何使用两个实用程序来防止入侵者进入我们的系统。

为了防止反复的 ssh 登录尝试,我们来看看 fail2ban。而且,如果你不经常旅行,基本上停留在一两个国家,你可以将 FirewallD 配置为只允许从你选择的国家访问

首先,让我们为不熟悉这些应用程序的人员介绍一些术语,以完成这项工作:

fail2ban:一个守护进程,用于禁止发生多次认证错误的主机。fail2ban 将监控 SystemD 日志,以查找对任何已启用的“ 监狱 jail ”的失败的验证尝试。在达到指定失败次数后,它将添加一个防火墙规则,在配置的时间内阻止该特定 IP 地址。

FirewallD:一个带有 D-Bus 接口的防火墙守护进程,提供动态防火墙。除非你另行决定使用传统的 iptables,否则你已经在所有支持的 Fedora 和 CentOS 上安装了 FirewallD。

假定前提

  • 主机系统有一个互联网连接,并且要么是直接暴露在互联网上,要么是通过 DMZ(这两个都是非常糟糕的想法,除非你知道你在做什么),要么是有一个端口从路由器转发过来。
  • 虽然大部分的内容可能适用于其他系统,但本文假设当前系统是 Fedora(31 及以上)或 RHEL/CentOS 8 版本。在 CentOS 上,你必须用 sudo dnf install epel-release 启用 Fedora EPEL 仓库。

安装与配置

Fail2Ban

很有可能已经有某个 Firewalld 区已经允许 SSH 访问,但 sshd 服务本身默认没有启用。要手动启动它,并且不在启动时永久启用它:

$ sudo systemctl start sshd

或者在系统启动时启用,并同时启动它:

$ sudo systemctl enable --now sshd

下一步就是安装、配置、启用 fail2ban。和往常一样,安装可以通过命令行完成:

$ sudo dnf install fail2ban

安装完毕后,下一步就是配置“监狱”(你要以设置的任何阈值监视并禁止的服务)。默认情况下,IP 会被禁止 1 小时(这其实不够长)。最好的做法是使用 *.local 文件覆盖系统默认值,而不是直接修改 *.config 文件。如果我们查看我的 jail.local,我们可以看到:

# cat /etc/fail2ban/jail.local
[DEFAULT]

# "bantime" is the number of seconds that a host is banned.
bantime  = 1d

# A host is banned if it has generated "maxretry" during the last "findtime"
findtime  = 1h

# "maxretry" is the number of failures before a host get banned.
maxretry = 5

换成通俗的语言讲,就是在过去一小时内尝试 5 次后,该 IP 将被封禁 1 天。对于多次被封的 IP,也可以选择增加封禁时间,但这是另一篇文章的主题。

下一步是配置“监狱”。在本教程中显示的是 sshd,但其他服务的步骤大致相同。在 /etc/fail2ban/jail.d 中创建一个配置文件。这是我的文件:

# cat /etc/fail2ban/jail.d/sshd.local
[sshd]
enabled = true

就这么简单! 很多配置已经在为 Fedora 构建的软件包中处理了(提示:我是当前的维护者)。接下来启用并启动 fail2ban 服务:

$ sudo systemctl enable --now fail2ban

希望没有立即出错,如果没有,请使用下面的命令检查 fail2ban 的状态:

$ sudo systemctl status fail2ban

如果它没有错误地启动,应该是这样的:

$ systemctl status fail2ban
● fail2ban.service - Fail2Ban Service
Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2020-06-16 07:57:40 CDT; 5s ago
Docs: man:fail2ban(1)
Process: 11230 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
Main PID: 11235 (f2b/server)
Tasks: 5 (limit: 4630)
Memory: 12.7M
CPU: 109ms
CGroup: /system.slice/fail2ban.service
└─11235 /usr/bin/python3 -s /usr/bin/fail2ban-server -xf start
Jun 16 07:57:40 localhost.localdomain systemd[1]: Starting Fail2Ban Service…
Jun 16 07:57:40 localhost.localdomain systemd[1]: Started Fail2Ban Service.
Jun 16 07:57:41 localhost.localdomain fail2ban-server[11235]: Server ready

如果是刚刚启动的,fail2ban 不太可能显示任何有意思的信息,但要检查 fail2ban 的状态,并确保“监狱”被启用,请输入:

$ sudo fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd

sshd “监狱”的上级状态也会显示出来。如果启用了多个“监狱”,它们会在这里显示出来。

要查看一个“监狱”的详细状态,只需在前面的命令中添加“监狱”名称。下面是我的系统的输出,它已经运行了一段时间。我已经从输出中删除了被禁止的 IP:

$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 8
|  |- Total failed:     4399
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 101
   |- Total banned:     684
   `- Banned IP list:   ...

监控 fail2ban 日志文件是否有入侵尝试,可以通过“尾随”日志来实现:

$ sudo tail -f /var/log/fail2ban.log

tail 是一个很好的命令行工具,默认情况下,它可以显示一个文件的最后 10 行。添加 -f 告诉它尾随文件,这是个观察一个仍在被写入的文件的很好方式。

由于输出的内容中有真实的 IP,所以这里不会提供样本,但它的可读性很高。INFO 行通常是登录的尝试。如果从一个特定的 IP 地址进行了足够多的尝试,你会看到一个 NOTICE 行显示一个 IP 地址被禁止。在达到禁止时间后,你会看到一个 NOTICE 解禁行。

注意几个警告行。最常见的情况是,当添加了一个禁止后,fail2ban 发现该 IP 地址已经在其禁止数据库中,这意味着禁止可能无法正常工作。如果是最近安装的 fail2ban 包,它应该被设置为 FirewallD 的富规则。这个包在 fail2ban-0.11.1-6 版本时从 ipset 方式切换到了富规则方式,所以如果你的 fail2ban 安装时间较早,它可能还在尝试使用 ipset 方式,这种方式使用的是传统的 iptables,不是很可靠。

FirewallD 配置

被动还是主动?

有两种策略可以分开或一起使用:被动地将单个 IP 地址或主动地根据来源国将子网永久列入黑名单。

对于被动方式,一旦 fail2ban 运行了一段时间,最好再运行 sudo fail2ban-client status sshd 来看看有哪些坏蛋。很可能会有很多被禁止的 IP 地址。选择一个,然后试着对它运行 whois。在输出结果中可能会有很多有趣的信息,但是对于这个方法来说,只有来源国是重要的。为了保持简单,让我们过滤掉除了国家以外的所有信息。

在这个例子中,我们将使用一些著名的域名:

$ whois google.com | grep -i country
Registrant Country: US
Admin Country: US
Tech Country: US
$ whois rpmfusion.org | grep -i country
Registrant Country: FR
$ whois aliexpress.com | grep -i country
Registrant Country: CN

使用 grep -i 的原因是为了使 grep 不区分大小写,而大多数条目都使用的是 “Country”,而有些条目则是全小写的 “country”,所以这种方法无论如何都能匹配。

现在知道了尝试入侵的来源国,问题是,“是否有来自这个国家的人有合法的理由连接到这台计算机?”如果答案是否定的,那么封锁整个国家应该是可以接受的。

从功能上看,主动式方法它与被动式方法没有太大区别,然而,来自有些国家的入侵企图是非常普遍的。如果你的系统既不放在这些国家里,也没有任何源自这些国家的客户,那么为什么不现在就把它们加入黑名单而是等待呢?(LCTT 译注:我的经验是,动辄以国家的范畴而列入黑名单有些过于武断。建议可以将该 IP 所属的 WHOIS 网段放入到黑名单,因为这些网段往往具有相同的使用性质,如都用于用户接入或 IDC 托管,其安全状况也大致相同,因此,如果有来自该网段的某个 IP 的恶意尝试,可以预期该网段内的其它 IP 也可能被利用来做这样的尝试。)

黑名单脚本和配置

那么如何做到这一点呢?用 FirewallD ipset。我开发了下面的脚本来尽可能地自动化这个过程:

#!/bin/bash
# Based on the below article
# https://www.linode.com/community/questions/11143/top-tip-firewalld-and-ipset-country-blacklist

# Source the blacklisted countries from the configuration file
. /etc/blacklist-by-country

# Create a temporary working directory
ipdeny_tmp_dir=$(mktemp -d -t blacklist-XXXXXXXXXX)
pushd $ipdeny_tmp_dir

# Download the latest network addresses by country file
curl -LO http://www.ipdeny.com/ipblocks/data/countries/all-zones.tar.gz
tar xf all-zones.tar.gz

# For updates, remove the ipset blacklist and recreate
if firewall-cmd -q --zone=drop --query-source=ipset:blacklist; then
    firewall-cmd -q --permanent --delete-ipset=blacklist
fi

# Create the ipset blacklist which accepts both IP addresses and networks
firewall-cmd -q --permanent --new-ipset=blacklist --type=hash:net \
    --option=family=inet --option=hashsize=4096 --option=maxelem=200000 \
    --set-description="An ipset list of networks or ips to be dropped."

# Add the address ranges by country per ipdeny.com to the blacklist
for country in $countries; do
    firewall-cmd -q --permanent --ipset=blacklist \
        --add-entries-from-file=./$country.zone && \
        echo "Added $country to blacklist ipset."
done

# Block individual IPs if the configuration file exists and is not empty
if [ -s "/etc/blacklist-by-ip" ]; then
    echo "Adding IPs blacklists."
    firewall-cmd -q --permanent --ipset=blacklist \
        --add-entries-from-file=/etc/blacklist-by-ip && \
        echo "Added IPs to blacklist ipset."
fi

# Add the blacklist ipset to the drop zone if not already setup
if firewall-cmd -q --zone=drop --query-source=ipset:blacklist; then
    echo "Blacklist already in firewalld drop zone."
else
    echo "Adding ipset blacklist to firewalld drop zone."
    firewall-cmd --permanent --zone=drop --add-source=ipset:blacklist
fi

firewall-cmd -q --reload

popd
rm -rf $ipdeny_tmp_dir

这个应该安装到 /usr/local/sbin,不要忘了让它可执行!

$ sudo chmod +x /usr/local/sbin/firewalld-blacklist

然后创建一个配置文件 /etc/blacklist-by-country

# Which countries should be blocked?
# Use the two letter designation separated by a space.
countries=""

而另一个配置文件 /etc/blacklist-by-ip,每行只有一个 IP,没有任何额外的格式化。

在这个例子中,从 ipdeny 的区文件中随机选择了 10 个国家:

# ls | shuf -n 10 | sed "s/\.zone//g" | tr '\n' ' '
nl ee ie pk is sv na om gp bn

现在只要在配置文件中加入至少一个国家,就可以运行了!

$ sudo firewalld-blacklist
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   142  100   142    0     0   1014      0 --:--:-- --:--:-- --:--:--  1014
100  662k  100  662k    0     0   989k      0 --:--:-- --:--:-- --:--:--  989k
Added nl to blacklist ipset.
Added ee to blacklist ipset.
Added ie to blacklist ipset.
Added pk to blacklist ipset.
Added is to blacklist ipset.
Added sv to blacklist ipset.
Added na to blacklist ipset.
Added om to blacklist ipset.
Added gp to blacklist ipset.
Added bn to blacklist ipset.
Adding ipset blacklist to firewalld drop zone.
success

要验证 FirewallD 黑名单是否成功,请检查 drop 区和 blacklist ipset。

$ sudo firewall-cmd --info-zone=drop
drop (active)
  target: DROP
  icmp-block-inversion: no
  interfaces:
  sources: ipset:blacklist
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

$ sudo firewall-cmd --info-ipset=blacklist | less
blacklist
  type: hash:net
  options: family=inet hashsize=4096 maxelem=200000
  entries:

第二条命令将输出所有的子网,这些子网是基于被封杀的国家而添加的,可能会相当长。

那么现在我该怎么做?

虽然在开始的时候,监控的频率会比较高,但随着时间的推移,入侵尝试的次数应该会随着黑名单的增加而减少。那么目标应该是维护而不是主动监控。

为此,我创建了一个 SystemD 服务文件和定时器,这样每月都会刷新由 ipdeny 维护的每个国家的子网。事实上,这里讨论的所有内容都可以从我的 pagure.io 项目中下载。

是不是很高兴你看完了整篇文章?现在只要把服务文件和定时器下载到 /etc/systemd/system/,并启用定时器就行了:

$ sudo systemctl daemon-reload
$ sudo systemctl enable --now firewalld-blacklist.timer

via: https://fedoramagazine.org/protect-your-system-with-fail2ban-and-firewalld-blacklists/

作者:hobbes1069 选题:lujun9972 译者:wxy 校对:wxy

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

IBM 招聘广告要求应聘者具备至少 12 年 K8S 使用经验

IBM 全球技术服务部门近日发布了一则招聘广告,其中一条招聘说明要求应聘者“拥有 12 年以上 Kubernetes 使用经验”。这条要求有点令人迷惑,因为 Kubernetes 项目在 GitHub 的初次提交时间为2014年6月7日,直到2015年5月22日才宣布 1.0 版本进入功能冻结阶段,也就是说诞生至今才 6 年。

来源:开源中国

拍一拍:或许加班能将一天算成两天?

Mac 前主管:Windows PC 也终将积极拥抱 ARM 处理器

Mac 前主管 Jean-Louis Gassée 对苹果从英特尔处理器向自研 ARM 处理器转型一事发表了评论:A12Z Bionic 证明了未来的 Mac 将在不影响性能的前提下,大幅降低整机的热设计功耗。为了保持在市场上的竞争力,竞争对手也终将不得不提供对 ARM CPU 的更好支持。

来源:cnBeta.COM

拍一拍:不知道 Intel 怎么想?

Fedora 33 确认使用 Nano 作为默认文本编辑器

Fedora 工程和指导委员会(FESCo)上周全员批准 Fedora 33 使用 Nano 作为默认文本编辑器的提案。

来源:开源中国

拍一拍:好吧,毕竟还是要往前走的。虽然作为老系统管理员有点不适应,但是不能进步的技术人员就不是技术人员。

尽情地拍照吧,gphoto2 能够方便、快速地将照片从你的设备传输到 Linux 计算机上。

移动设备的最大缺点之一就是其将数据从设备传输到计算机很困难。移动设备在这一缺点上有着悠久的历史。早期的移动设备,如 Pilot 和掌上电脑 PDA 设备,需要使用特殊的同步软件来传输数据(你必须小心翼翼地做这件事,因为你的设备可能会因为电池耗尽而导致数据永久丢失);旧版 iPod 只提供特定平台的界面。现代移动设备默认将你的数据发送到在线帐户,以便你可以在计算机上再次下载。

好消息——如果你正在运行 Linux,你可以使用 gphoto2 命令与移动设备进行连接。gphoto2 最初是作为一种与数码相机通信的方式而开发的,那时的数码相机只有传统的相机功能,现在的 gphoto2 可以和许多不同种类的移动设备通讯。别让这个名字骗了你,它可以处理所有类型的文件,而不仅仅是照片。更棒的是,它可以编写脚本、很灵活、并且比大多数 GUI 界面功能强大得多。

如果你曾经为在计算机和移动设备之间同步数据而苦恼,请了解一下 gphoto2

安装 gPhoto2

很可能你的 Linux 系统已经安装了 libgphoto2,因为它是与移动设备连接的一个关键库,但你可能还需要安装命令 gphoto2,该命令可能在你的存储库中。

在 Fedora 或 RHEL 上:

$ sudo dnf install gphoto2

在 Debian 或 Ubuntu 上:

$ sudo apt install gphoto2

验证兼容性

若要确认你的移动设备是否受支持,请使用 --list-cameras,通过管道传输到 less

$ gPhoto2 --list-cameras | less

或者你可以通过管道把它传送到 grep 来搜索一个词。例如,如果你有三星 Galaxy,则使用 grep,并通过选项 -i 关闭区分大小写:

$ gphoto2 --list-cameras | grep -i galaxy
  "Samsung Galaxy models (MTP)"
  "Samsung Galaxy models (MTP+ADB)"
  "Samsung Galaxy models Kies mode"

这证实了三星 Galaxy 设备支持通过 MTP 连接和通过 ADB 连接 MTP。

如果你没有在列表中找到自己的移动设备,你仍然可以尝试使用 gphoto2,可能你的设备在列表中使用了不同的称呼。

查找移动设备

要使用 gPhoto2,首先必须将移动设备插入计算机,设置为 MTP 模式,并且授予计算机与它交互的权限。这通常需要在你的移动设备上操作,往往是在屏幕上按下一个按钮,以允许其文件系统被刚刚连接的计算机访问。

 title=

如果你不授权电脑访问移动设备,那么 gPhoto2 可以检测到你的移动设备,但它不能与之交互。

要确保计算机检测到你连接的移动设备,请使用 --auto-detect 选项:

$ gphoto2 --auto-detect
Model                       Port
---------------------------------------
Samsung Galaxy models (MTP) usb:002,010

如果你的移动设备没有被检测到,请先检查数据线,然后检查你的设备是否配置为通过 MTP、ADB 或其它 gPhoto2 支持的协议连接,如 --list-cameras 所示。

查询你的设备支持的特性

对于现代设备,通常有过多的潜在功能,但并非所有移动设备都支持这些功能。你可以用 --abilities 选项来确定自己的移动设备支持哪些功能。我觉得结果看起来直观。

$ gphoto2 --abilities
Abilities for camera            : Samsung Galaxy models (MTP)
Serial port support             : no
USB support                     : yes
Capture choices                 : Capture not supported by driver
Configuration support           : no
Delete selected files on camera : yes
Delete all files on camera      : no
File preview (thumbnail) support: no
File upload support             : yes

如果只连接一个设备,那么不需要指定查询的设备。但是,如果连接了多个 gPhoto2 可以与之交互的设备,则可以通过端口、相机型号或 usbid 指定设备。

与你的移动设备交互

如果你的设备支持拍摄功能,则可以从计算机调用你的摄像头来获取媒体。例如,要拍摄照片:

$ gphoto2 --capture-image

要拍摄照片并立即将其传输到连接的计算机:

$ gphoto2 --capture-image-and-download

你也可以录制视频和声音。如果连接了多个拍摄设备,可以按端口、相机型号或 usbid 指定要使用的设备:

$ gphoto2 --camera "Samsung Galaxy models (MTP)" \
--capture-image-and-download

文件和文件夹

要想更加智能地管理移动设备上的文件,你需要了解 gPhoto2 连接的文件系统的结构。

你可以使用 --get-folders 选项查看可用文件夹:

$ gphoto2 --list-folders
There are 2 folders in folder '/'.                                            
 - store_00010001
 - store_00020002
There are 0 folders in folder '/store_00010001'.
There are 0 folders in folder '/store_00020002'.

每个文件夹代表设备上的一个存储单元。在本例中,store_00010001 是内部存储器,store_00020002 是 SD 卡,这可能与你的设备的结构不同。

获取文件

现在你知道了设备的文件夹布局,就可以从设备获取照片了。你可以使用许多不同的选项,具体取决于你想从设备中获取什么。

如果你知道绝对路径,则可以获取指定的文件:

$ gphoto2 --get-file IMG_0001.jpg --folder /store_00010001/myphotos

你可以同时获得所有的文件:

$ gphoto2 --get-all-files --folder /store_00010001/myfiles

你可以只获取音频文件:

gphoto2 --get-all-audio-data --folder /store_00010001/mysounds

gPhoto2 还有其他的选择,其中大多数取决于你连接的设备和使用协议是否支持。

上传文件

现在你知道了潜在的目标文件夹,就可以将文件从计算机上传到你的设备。例如,假设有一个名为 example.epub 的文件在当前目录中,你可以使用 --upload-file 选项和 --folder 选项将文件发送到设备并指定要上传到的目录:

$ gphoto2 --upload file example.epub \
--folder store_00010001

如果你希望将多个文件上传到同一个位置,你可以在设备上创建一个目录:

$ gphoto2 --mkdir books \
--folder store_00010001
$ gphoto2 --upload-file *.epub \
--folder store_00010001/books

列出文件

若要查看设备上的文件,请使用 --list-files 选项:

$ gphoto2 --list-files --folder /store_00010001
There is 1 file in folder '/store_00010001'
#1     example.epub 17713 KB application/x-unknown
$ gphoto2 --list-files --folder /store_00010001/books
There is 1 file in folder '/store_00010001'
#1    example0.epub 17713 KB application/x-unknown
#2    example1.epub 12264 KB application/x-unknown
[...]

探索你的使用方式

gPhoto2 的大部分功能取决于你的设备,因此不同用户的体验可能不尽相同。在 gphoto2 --help 中列出了许多操作供你探索。使用gPhoto2,再也不用费劲把文件从你的设备传输到电脑上了!

这些开源图片库能够帮助你组织文件,并让的图片看起来很棒。


via: https://opensource.com/article/20/7/gphoto2-linux

作者:Seth Kenlon 选题:lujun9972 译者:summer2233 校对:wxy

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

左侧的启动器已成为 Ubuntu 桌面的标识。它是在 Unity 桌面中引入的,甚至在 Ubuntu 切换到 GNOME时就有了,它复刻了 “Dash to Panel”,以在 GNOME 上创建一个类似的 坞站 dock

就个人而言,我发现它对于快速访问常用应用非常方便,但并非所有人都希望它额外占用屏幕上的一些空间。

Ubuntu 20.04 开始,你可以轻松禁用坞站。在本教程中,让我向你展示如何以图形和命令的方式执行此操作。

通过扩展应用禁用 Ubuntu Dock

Ubuntu 20.04 的主要功能之一是引入“ 扩展 Extension ”应用来管理系统上的 GNOME 扩展。只需在 GNOME 菜单中查找它(按下 Windows 键并输入):

Look for Extensions app in the menu

没有找到扩展应用?

如果尚未安装,你应该启用 GNOME Shell 扩展,“扩展” GUI 是此软件包的一部分。

sudo apt install gnome-shell-extensions

这仅对 GNOME 3.36 或 Ubuntu 20.04(或更高版本) 中的更高版本有效。

启动“扩展”应用,你应该在“内置”扩展下看到 Ubuntu Dock。你只需要关闭即可禁用坞站。

Disable Ubuntu Dock

更改是即时的,你会看到坞站立即消失。

你可以用相同的方式恢复。只需打开它,它就会立即显示。

在 Ubuntu 20.04 中非常容易隐藏坞站,不是吗?

替代方法:通过命令行禁用 Ubuntu 坞站

如果你是终端爱好者,并且喜欢在终端中做事,那么我有一个对你而言的好消息。你可以从命令行禁用 Ubuntu 坞站。

使用 Ctrl+Alt+T 打开终端。你可能已经知道 Ubuntu 中的键盘快捷键

在终端中,使用以下命令列出所有可用的 GNOME 扩展:

gnome-extensions list

这将显示类似于以下的输出:

List GNOME Extensions

默认的 Ubuntu 坞站扩展是 [email protected]。你可以使用以下命令将其禁用:

gnome-extensions disable [email protected]

屏幕上不会显示任何输出,但是你会注意到启动器(坞站)从左侧消失了。

如果需要,你可以使用与上面相同的命令再次启用它,但使用启用选项:

gnome-extensions enable [email protected]

总结

在 Ubuntu 18.04 中也有禁用坞站的方法。但是,如果你尝试在 18.04 中删除它,这可能会导致不想要的结果。删除此软件包也会删除 ubuntu-desktop 包,最终可能会导致系统崩溃,例如没有应用菜单。

这就是为什么我不建议在 Ubuntu 18.04 上删除它的原因。

好消息是 Ubuntu 20.04 提供了一种隐藏任务栏的方法。用户拥有更大的自由度和更多的屏幕空间。说到更多的屏幕空间,你是否知道可以从 Firefox 移除顶部标题栏并获得更多的屏幕空间

我想知道你喜欢怎样的 Ubuntu 桌面?要坞站,不要坞站,还是不要 GNOME?


via: https://itsfoss.com/disable-ubuntu-dock/

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

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

使用 NFS 服务器将共享文件系统添加到你的家庭实验室。

共享文件系统是为家庭实验室增加通用性和功能性的好方法。在实验室中为客户端共享一个集中的文件系统,使得组织数据、进行备份和共享数据变得相当容易。这对于在多个服务器上进行负载均衡的 Web 应用和 Kubernetes 使用的持久化卷来说,尤其有用,因为它允许在任何数量的节点上用持久化数据来轮转 Pod。

无论你的家庭实验室是由普通计算机、多余的企业服务器,还是树莓派或其他单板计算机(SBC)组成,共享文件系统都是一种有用的资产,而网络文件系统(NFS)服务器是创建共享文件系统的好方法。

我之前写过关于建立“家庭私有云”的文章,这是一个由树莓派或其他 SBC 组成的家庭实验室,也许还有其他一些消费类硬件或台式 PC。NFS 服务器是这些组件之间共享数据的理想方式。由于大多数 SBC 的操作系统是通过 SD 卡运行的,所以存在一些挑战。尤其是在用作计算机的操作系统磁盘时,SD 卡的故障率会增加,它们并不是用来不断地读写的。你实际需要的是一个真正的硬盘:它们通常比 SD 卡的每 GB 价格便宜,特别是对于较大的磁盘,而且它们不太可能持续发生故障。树莓派 4 现在带有 USB 3.0 接口,而 USB 3.0 硬盘无处不在,价格也很实惠。这是一个完美的搭配。在这个项目中,我将使用一个 2TB 的 USB 3.0 外置硬盘插入到运行 NFS 服务器的树莓派 4 中。

 title=

安装 NFS 服务器软件

我在树莓派上运行 Fedora 服务器,但这个项目也可以在其他发行版上运行。要在 Fedora 上运行 NFS 服务器,你需要 nfs-utils 包,幸运的是它已经安装好了(至少在 Fedora 31 中是这样)。如果你打算运行 NFSv3 服务,你还需要 rpcbind 包,但它不是 NFSv4 的严格要求。

如果你的系统中还没有这些软件包,请使用 dnf 命令安装它们。

# 安装 nfs-utils 和 rpcbind
$ sudo dnf install nfs-utils rpcbind

Raspbian 是另一个与树莓派一起使用的流行操作系统,设置几乎完全相同。软件包名称不同而已,但这是唯一的主要区别。要在运行 Raspbian 的系统上安装 NFS 服务器,你需要以下软件包。

  • nfs-common:这些文件是 NFS 服务器和客户端的通用文件。
  • nfs-kernel-server:主要的 NFS 服务器软件包。

Raspbian 使用 apt-get 来管理软件包(而不是像 Fedora 那样使用 dnf),所以用它来安装软件包。

# 对于 Raspbian 系统,使用 apt-get 来安装 NFS 软件包
$ sudo apt-get install nfs-common nfs-kernel-server

准备一个 USB 硬盘作为存储设备

正如我上面提到的,USB 硬盘是为树莓派或其他 SBC 提供存储的好选择,尤其是用于操作系统磁盘镜像的 SD 卡并不适合这个用途。对于家庭私有云,你可以使用廉价的 USB 3.0 硬盘进行大规模存储。插入磁盘,使用 fdisk 找出分配给它的设备 ID,就可以使用它工作了。

# 使用 fdisk 找到你的硬盘
# 无关的硬盘信息已经省略
$ sudo fdisk -l

Disk /dev/sda: 1.84 TiB, 2000398933504 bytes, 3907029167 sectors
Disk model: BUP Slim BK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe3345ae9

Device     Boot Start        End    Sectors  Size Id Type
/dev/sda1        2048 3907028991 3907026944  1.8T 83 Linux

为了清楚起见,在上面的例子输出中,除了我感兴趣的那个磁盘,我省略了所有其它磁盘的信息。你可以看到我想使用的 USB 磁盘被分配了设备 /dev/sda,你可以看到一些关于型号的信息(Disk model: BUP Slim BK),这有助于我识别正确的磁盘。该磁盘已经有了一个分区,它的大小也证实了它就是我要找的磁盘。

注意:请确保正确识别你的设备的磁盘和分区。它可能与上面的例子不同。

在驱动器上创建的每个分区都有一个特殊的通用唯一标识符(UUID)。计算机使用 UUID 来确保它使用 /etc/fstab 配置文件将正确的分区挂载到正确的位置。你可以使用 blkid 命令检索分区的 UUID。

# 获取该分区的块设备属性
# 确保你使用了合适的分区,它应该有所不同。
$ sudo blkid /dev/sda1

/dev/sda1: LABEL="backup" UUID="bd44867c-447c-4f85-8dbf-dc6b9bc65c91" TYPE="xfs" PARTUUID="e3345ae9-01"

在这里,/dev/sda1 的 UUID 是 bd44867c-447c-4f85-8dbf-dc6b9bc65c91。你的 UUID 会有所不同,所以要记下来。

配置树莓派在启动时挂载这个磁盘,然后挂载它

现在你已经确定了要使用的磁盘和分区,你需要告诉计算机如何挂载它,每次启动时都要这样做。现在就去挂载它。因为这是一个 USB 磁盘,可能会被拔掉,所以你还要配置树莓派在启动时如果磁盘没有插入或有其它不可用情况时不要等待。

在 Linux 中,通过将分区添加到 /etc/fstab 配置文件中,包括你希望它被挂载的位置和一些参数来告诉计算机如何处理它。这个例子将把分区挂载到 /srv/nfs,所以先创建这个路径:

# 创建该磁盘分区的挂载点
$ sudo mkdir -p /srv/nfs

接下来,使用以下语法格式修改 /etc/fstab 文件:

<disk id>     <mountpoint>      <filesystem type>     <options>     <fs_freq> <fs_passno>

使用你之前确定的 UUID 作为磁盘 ID。正如我在上一步提到的,挂载点是 /srv/nfs。对于文件系统类型,通常最好选择其实际的文件系统,但是因为这是一个 USB 磁盘,所以使用 auto

对于选项值,使用 nosuid,nodev,nofail

关于手册页的一个旁白

其实,有很多可能的选项,手册页(man)是查看它们的最好方法。查看 fstab 的手册页是一个很好的开始。

# 打开 fstab 的手册页
$ man fstab

这将打开与 fstab 命令相关的手册/文档。在手册页中,每个选项都被分解成了不同的内容,以显示它的作用和常用的选择。例如,“第四个字段(fs\_mntopts)”给出了该字段中可用选项的一些基本信息,并引导你到 man 8 mount 中获取 mount 选项更深入的描述。这是有道理的,因为 /etc/fstab 文件,本质上是告诉计算机如何自动挂载磁盘,就像你手动使用 mount 命令一样。

你可以从 mount 的手册页中获得更多关于你将使用的选项的信息。数字 8 表示手册页的章节。在这里,第 8 章节是系统管理工具和守护进程

你可以从 man 的手册页中得到标准章节的列表。

回到挂载磁盘,让我们看看 man 8 mount

# 打开第 8 章节的 mount 手册页
$ man 8 mount

在这个手册页中,你可以查看上面列出的选项的作用。

  • nosuid:不理会 suid/guid 位。不允许放在 U 盘上的任何文件以 root 身份执行。这是一个良好的安全实践。
  • nodev:不识别文件系统中的字符或块特殊设备,即不理会在 U 盘上的任何设备节点。另一个良好的安全实践。
  • nofail:如果设备不存在,不要记录任何错误。这是一个 U 盘,可能没有插入,所以在这种情况下,它将被忽略。

回到你正在添加到 /etc/fstab 文件的那一行,最后还有两个选项:fs_freqfs_passno。它们的值与一些过时的选项有关,大多数现代系统对这两个选项都只用 0,特别是对 USB 磁盘上的文件系统而言。fs_freq 的值与 dump 命令和文件系统的转储有关。fs_passno 的值定义了启动时要 fsck 的文件系统及其顺序,如果设置了这个值,通常根分区是 1,其他文件系统是 2,将该值设置为 0 以跳过在该分区上使用 fsck

在你喜欢的编辑器中,打开 /etc/fstab 文件,添加 U 盘上分区的条目,将这里的值替换成前面步骤中得到的值。

# With sudo, or as root, add the partition info to the /etc/fstab file
UUID="bd44867c-447c-4f85-8dbf-dc6b9bc65c91"    /srv/nfs    auto    nosuid,nodev,nofail,noatime 0 0

启用并启动 NFS 服务器

安装好软件包,并将分区添加到你的 /etc/fstab 文件中,现在你可以开始启动 NFS 服务器了。在 Fedora 系统中,你需要启用和启动两个服务:rpcbindnfs-server。使用 systemctl 命令来完成这项工作。

# 启动 NFS 服务器和 rpcbind
$ sudo systemctl enable rpcbind.service
$ sudo systemctl enable nfs-server.service
$ sudo systemctl start rpcbind.service
$ sudo systemctl start nfs-server.service

在 Raspbian 或其他基于 Debian 的发行版上,你只需要使用 systemctl 命令启用并启动 nfs-kernel-server 服务即可,方法同上。

RPCBind

rpcbind 工具用于将远程过程调用(RPC)服务映射到其监听的端口。根据 rpcbind 手册页:

“当一个 RPC 服务启动时,它会告诉 rpcbind 它正在监听的地址,以及它准备服务的 RPC 程序号。当客户机想对给定的程序号进行 RPC 调用时,它首先与服务器机器上的 rpcbind 联系,以确定 RPC 请求应该发送到哪里的地址。”

在 NFS 服务器这个案例中,rpcbind 会将 NFS 的协议号映射到 NFS 服务器监听的端口上。但是,NFSv4 不需要使用 rpcbind。如果你使用 NFSv4 (通过从配置中删除版本 2 和版本 3),则不需要使用 rpcbind。我把它放在这里是为了向后兼容 NFSv3。

导出挂载的文件系统

NFS 服务器根据另一个配置文件 /etc/exports 来决定与哪些远程客户端共享(导出)哪些文件系统。这个文件只是一个 IP(或子网)与要共享的文件系统的映射,以及一些选项(只读或读写、root 去除等)。该文件的格式是:

<目录>     <主机>(选项)

在这个例子中,你将导出挂载到 /srv/nfs 的分区。这是“目录”部分。

第二部分,主机,包括你要导出这个分区的主机。这些主机可以是单个主机:使用具有完全限定域名(FQDN)或主机名、主机的 IP 地址来指定;也可以是一组主机:使用通配符字符来匹配域(如 *.example.org)、IP 网络(如无类域间路由 CIDR 标识)或网组表示。

第三部分包括应用于该导出的选项。

  • ro/rw:将文件系统导出为只读或读写。
  • wdelay:如果即将进行另一次写入,则推迟对磁盘的写入,以提高性能(如果你使用的是固态 USB 磁盘,这可能没有那么有用)
  • root_squash:防止客户机上的任何 root 用户在主机上有 root 权限,并将 root UID 设置为 nfsnobody 作为安全防范措施。

测试导出你挂载在 /srv/nfs 处的分区到一个客户端 —— 例如,一台笔记本电脑。确定你的客户机的 IP 地址(我的笔记本是 192.168.2.64,但你的可能会不同)。你可以把它共享到一个大的子网,但为了测试,请限制在单个 IP 地址上。这个 IP 的 CIDR 标识是 192.168.2.64/32/32 子网代表一个 IP。

使用你喜欢的编辑器编辑 /etc/exports 文件,写上你的目录、主机 CIDR 以及 rwroot_squash 选项。

# 像这样编辑你的 /etc/exports 文件,替换为你的系统上的信息
/srv/nfs    192.168.2.64/32(rw,root_squash)

注:如果你从另一个地方复制了 /etc/exports 文件,或者用副本覆盖了原文件,你可能需要恢复该文件的 SELinux 上下文。你可以使用 restorecon 命令来恢复。

# 恢复 /etc/exports 文件的 SELinux 上下文
$ sudo restorecon /etc/exports

完成后,重新启动 NFS 服务器,以接收对 /etc/exports 文件的更改。

# 重新启动 NFS 服务器
$ sudo systemctl restart nfs-server.service

给 NFS 服务打开防火墙

有些系统,默认不运行防火墙服务。比如 Raspbian,默认是开放 iptables 规则,不同服务打开的端口在机器外部立即就可以使用。相比之下,Fedora 服务器默认运行的是 firewalld 服务,所以你必须为 NFS 服务器(以及 rpcbind,如果你将使用 NFSv3)打开端口。你可以通过 firewall-cmd 命令来实现。

检查 firewalld 使用的区域并获取默认区域。对于 Fedora 服务器,这是 FedoraServer 区域。

# 列出区域
# 出于简洁省略了部分输出
$ sudo firewall-cmd --list-all-zones

# R获取默认区域信息
# 记下默认区域
$ sudo firewall-cmd --get-default-zone

# 永久加入 nfs 服务到允许端口列表
$ sudo firewall-cmd --add-service=nfs --permanent

# 对于 NFSv3,我们需要再加一些端口: nfsv3、 rpc-mountd、 rpc-bind
$ sudo firewall-cmd --add-service=(nfs3,mountd,rpc-bind)

# 查看默认区域的服务,以你的系统中使用的默认区域相应替换
$ sudo firewall-cmd --list-services --zone=FedoraServer

# 如果一切正常,重载 firewalld
$ sudo firewall-cmd --reload

就这样,你已经成功地将 NFS 服务器与你挂载的 U 盘分区配置在一起,并将其导出到你的测试系统中进行共享。现在你可以在你添加到导出列表的系统上测试挂载它。

测试 NFS 导出

首先,从 NFS 服务器上,在 /srv/nfs 目录下创建一个文件来读取。

# 创建一个测试文件以共享
echo "Can you see this?" >> /srv/nfs/nfs_test

现在,在你添加到导出列表中的客户端系统上,首先确保 NFS 客户端包已经安装好。在 Fedora 系统上,它是 nfs-utils 包,可以用 dnf 安装。Raspbian 系统有 libnfs-utils 包,可以用 apt-get 安装。

安装 NFS 客户端包:

# 用 dnf 安装 nfs-utils 软件包
$ sudo dnf install nfs-utils

一旦安装了客户端包,你就可以测试 NFS 的导出了。同样在客户端,使用带有 NFS 服务器 IP 和导出路径的 mount 命令,并将其挂载到客户端的一个位置,在这个测试中是 /mnt 目录。在这个例子中,我的 NFS 服务器的 IP 是 192.168.2.109,但你的可能会有所不同。

# 挂载 NFS 服务器的输出到客户端主机
# 确保替换为你的主机的相应信息
$ sudo mount 192.168.2.109:/srv/nfs /mnt

# 查看 nfs_test 文件是不是可见
$ cat /mnt/nfs_test
Can you see this?

成功了!你现在已经有了一个可以工作的 NFS 服务器,可以与多个主机共享文件,允许多个读/写访问,并为你的数据提供集中存储和备份。家庭实验室的共享存储有很多选择,但 NFS 是一种古老的、高效的、可以添加到你的“家庭私有云”家庭实验室中的好选择。本系列未来的文章将扩展如何在客户端上自动挂载 NFS 共享,以及如何将 NFS 作为 Kubernetes 持久卷的存储类。


via: https://opensource.com/article/20/5/nfs-raspberry-pi

作者:Chris Collins 选题:lujun9972 译者:wxy 校对:wxy

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