Hunter Wittenborn 发布的文章

随着在设备上使用各种程序的用户的需求变得越来越复杂,程序本身也需要跟上用户的现实需求和未来期望。

我发现我每天需要的东西是一个在网页浏览器保持登录多个账号的简单方法。我 可以 根据需要对我的每个账号进行登录和注销操作,但在短时间内切换多个账号时,这变得非常乏味。

最初,我使用谷歌浏览器,它拥有管理多个帐户的能力。这很有效,但管理起来略显繁琐,而且明明只需 一个 谷歌账号就能搞定的事却要创建一个新的谷歌账号来完成,这显得有点儿笨拙。

这是我转而使用 Firefox 多账户容器 Multi-Account Containers 功能的原因。它不仅比我在谷歌 Chrome 浏览器上的设置灵活得多,而且我还使用了由我的浏览器开发者自己创建的工具,从而在整体上获得了更流畅和更简单的体验。

Firefox 中的容器图示

Firefox 中的多帐户容器是什么?

如果你想将数字生活的各个部分彼此分开,多账户容器也非常有效。通过使用容器,你在一个容器中的浏览活动不会与其他容器共享。这种隔离意味着你可以在不同容器中登录同一网站上的两个不同帐户。你的登录会话、网站偏好和跟踪数据将被限制在你使用某个网站的容器中。

它还有什么其他优势?想象一下,你在亚马逊或其他电子商务网站上购物。你浏览了一些商品,但没有购买任何东西。现在,如果你浏览网络,你会看到与你浏览的产品相关的广告。尽管有广告拦截器,一些网站仍会显示广告。使用容器,你可以将你的购物网站与其他网站分开。(LCTT 校注:甚至根据你的浏览历史,你再次访问同一网站时看到的价格可能会被“宰熟”——反复浏览代表了你的购买倾向。)

再给大家分享一个例子。Firefox 默认提供一个 Facebook 容器。默认情况下,此容器包括 Facebook、Messenger 和 Instagram 网站。这意味着当你打开这三个网站中的任何一个时,它们都只会在“Facebook 容器”中打开。因此,Facebook 将无法跟踪你在其他网站上的活动。

这是 很少有人知道或使用的 Firefox 功能 之一。

使用多账户容器

安装 Firefox 多账户容器是一个非常简单的过程,只需点击几下。

首先,前往 Firefox 附加组件网站上的 扩展程序页面。之后你唯一需要做的就是单击 “添加到 Firefox” 按钮。

安装完成!现在我们可以实际使用一下这个新的扩展。

可能你还没有注意到,你的搜索栏右侧应该会出现一个新图标:

这是你将用于与 Firefox 多帐户容器交互的图标。如果你单击该图标,你将看到一个小菜单:

让我们使用这个扩展尝试一些例子,看看多账户容器是如何工作的。

设置容器

首先,我们需要生成一个容器。点击多账户容器菜单中的 ` 管理容器 Manage Containers ,然后点击 新建容器 New Container

接着输入新容器的名称,选择颜色和图标。然后,点击 “OK” 保存新容器。

大功告成!我们现在可以返回主菜单在新容器中打开一个新选项卡:

你还会注意到新选项卡有一些样式,表示它正在容器内运行:

观察容器工作

现在让我们看看容器在使用时实际做了什么。

我们将在一个普通的浏览器选项卡中访问 Linode 管理网站,我已经在其中登录:

现在让我们尝试在 Firefox 容器中打开相同的页面,此时我被重定向到 Linode 登录页面:

为什么我被重定向了?因为现在我没有登录。这就是 Firefox 容器的乐趣之一:在一个浏览器会话中登录后,再进入一个容器,就好像你以前从未访问过该站点一样。

如果你在容器内完成对某个网站的登录,你从容器中访问该网站时将会保持登录状态。你还可以使用此功能从容器内登录网站,从而使该网站的所有数据与你的正常浏览器数据相隔开。

注意:你的浏览器历史记录本身之类的内容仍会暴露给你的正常浏览器会话。容器功能只是提供了一种方法来分离本文中提到的登录帐户等内容。

总结

对于那些在乎自己的隐私,或者只是想真正尝试对其系统的安全性进行严格控制的人来说,多账户容器被证明是一个很棒的功能。

例如,你可以在容器内登录你的谷歌帐户,谷歌永远不会知悉你在容器外的信息。 对拥有多个帐户的人来说,此扩展程序是一个不错的选择。有了它无需为你要使用的每样东西创建单独的浏览器帐户。

好了,这就是 Firefox 的多帐户容器的基本知识。

需要任何帮助,或者只是有点问题?请随时在评论区指出。


via: https://itsfoss.com/firefox-containers/

作者:Hunter Wittenborn 选题:lujun9972 译者:hanszhao80 校对:校对者ID

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

首先,什么是 Seafile ?

Seafile 是一个自托管文件同步程序,采用客户端/服务器模式,即你有笔记本、手机等多个设备,能够连接到一个中心服务器。

不像类似 Nextcloud 或 ownCloud 这些更流行的替代品一样,Seafile 试图遵循 “只做一件事,但是要做好” 的理念。同样,Seafile 没有内置额外的类似联系人或者日历聚合的功能。

相反,Seafile 只专注于文件同步、共享及与之相关的事情,仅此而已。但正因为如此,它最终做的非常好。

使用 Docker 和 NGINX 部署 Seafile 服务器

高级教程

我们的许多教程都是针对初学者的。这篇则不然,它是为那些经常鼓捣 DIY 项目和喜欢自托管的高级用户设计的。这个教程假定你可以熟练的使用命令行,而且你至少对我们将要使用的程序有一定的了解。

虽然整个过程完全可以不使用 NGINX ,但是使用 NGINX 更加容易配置,而且在将来更加容易的自托管更多的服务。

如果你想完全使用 Docker 环境,你也可以 在 Docker 内部设置 NGINX ,但是它这会使事情变得更加复杂,并且不能够带来太多好处。同样,在本教程里也不会涉及这些。

安装设置 NGINX

在这个教程中,我会使用 Ubuntu,因此会使用 apt 来安装软件包。如果你使用 Fedora 或者一些其他非 Debian 发行版,请使用你的发行版的 包管理器

NGINX 既是一个网页浏览器,又是一个代理服务器。它将起到 Seafile 服务器和互联网之间网络连接的作用,同时也使一些任务更容易处理。

要安装 NGINX ,使用以下命令:

sudo apt install nginx

如果你想使用 HTTPS(也就是浏览器中的小挂锁),你需要安装 Certbot

sudo apt install certbot python3-certbot-nginx

下一步,你需要设置 NGINX 来连接我们之后将要设置的 Seafile 实例。

首先,运行以下命令:

sudo nano /etc/nginx/sites-available/seafile.conf

键入下方的文本到文件中:

server {
  server_name localhost;
  location / {
    proxy_pass http://localhost:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }
}

重要: 将 server_name 一行的 localhost 替换为你要访问你的服务器的地址(比如 seafile.example.com 或者 192.168.0.0)。不确定要输入什么吗?

  • 如果你只是为了测试,使用 localhost 。这个设置将 只允许你从你的电脑访问服务器 ,仅此而已。
  • 如果你想通过你的本地 Wi-Fi 连接使用 Seafile(与你在同一 Wi-Fi 网络上),你应该键入 你的计算机 IP 地址。你也可以考虑 设置一个静态 IP 地址,尽管这不是必须的。
  • 如果你有一个公网 IP 地址,你知道它指向你的系统,就使用它。
  • 如果你有一个域名(比如 example.comexample.org)和公网 IP 地址,更改你的 DNS 设置,将域名指向你的系统的 IP 地址。这也需要将公网 IP 指向你的系统。

现在你需要复制配置文件到 NGINX 的查找目录中,然后重启 NGINX :

sudo ln -s /etc/nginx/sites-available/seafile.conf /etc/nginx/sites-enabled/seafile.conf
sudo systemctl restart nginx

如果你要安装 Cerbot,你也需要运行以下命令来设置 HTTPS :

sudo certbot

如果要重定向 HTTP 流量 到 HTTPS ,选择 2

现在可以来确认我们目前设置的一切都是否正常工作。如果你访问你的站点,你应该看到一个屏幕上写着 502 Bad Gateway 字样。

安装 Docker 和 Docker Compose

现在要进入有趣的部分了!

首先,你需要安装 DockerDocker Compose 。Docker Compose 需要利用 docker-compose.yml 文件,这将使管理多个 Docker 容器 的 Seafile 需求变得更加容易。

Docker 和 Docker Compose 可以用以下的命令来安装:

sudo apt install docker.io docker-compose

检查 Docker 是否安装并运行,运行以下命令:

sudo docker run --rm hello-world

如果你完全安装成功,你应该在终端能看到这几行文字:

如果你想避免在 docker 命令的开始添加 sudo 的话,你可以运行以下的命令将你自己添加到 docker 组:

sudo groupadd docker
sudo usermod -aG docker $USER

这个教程的其余部分假定你已经运行了以上两个命令。如果你没有运行,在所有 dockerdocker-compose 的命令都添加 sudo

安装 Seafile 服务器

这部分比之前部分明显容易的多。你所需要做的是输入一些文本到文件,然后运行一些命令。

打开一个终端,然后创建一个 Seafile 服务器用来储存内容的目录,并进入目录中:

mkdir ~/seafile-server && cd ~/seafile-server

转到你创建的目录然后运行以下命令:

nano docker-compose.yml

下一步,在弹出的窗口中键入以下文本内容:

version: '2.0'
services:
  db:
    image: mariadb
    container_name: seafile-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_LOG_CONSOLE=true
    volumes:
      - ./data/mariadb:/var/lib/mysql
    networks:
      - seafile-net

  memcached:
    image: memcached
    container_name: seafile-memcached
    entrypoint: memcached -m 256
    networks:
      - seafile-net
          
  seafile:
    image: seafileltd/seafile-mc
    container_name: seafile
    ports:
      - "8080:80"
    volumes:
      - ./data/app:/shared
    environment:
      - DB_HOST=db
      - DB_ROOT_PASSWD=password
      - TIME_ZONE=Etc/UTC
      - [email protected]
      - SEAFILE_ADMIN_PASSWORD=password
      - SEAFILE_SERVER_LETSENCRYPT=false
      - SEAFILE_SERVER_HOSTNAME=docs.seafile.com
    depends_on:
      - db
      - memcached
    networks:
      - seafile-net

networks:
  seafile-net:

在保存文件之前,一些参数需要更改:

  • MYSQL_ROOT_PASSWORD:更换强壮的密码,你不必记住它,所以不要尝试挑选简单的密码。如果你需要帮助生成一个,请使用 密码生成器 。我建议使用 20 位字符长度并且避免使用任何的特殊字符(!@#$%^&* 等符号)。
  • DB_ROOT_PASSWD:更改你为 MYSQL_ROOT_PASSWORD 设置的值 。
  • SEAFILE_ADMIN_EMAIL:设置管理员帐户的电子邮件地址。
  • SEAFILE_ADMIN_PASSWORD:设置管理员帐户密码。避免与MYSQL_ROOT_PASSWORD 或者 DB_ROOT_PASSWD 密码相同。
  • SEAFILE_SERVER_HOSTNAME:在 NGINX 配置中设置 Seafile 的服务器主机名。

完成之后,你可以运行 docker-compose 整个运行起来:

docker-compose up -d

可能需要花一到两分钟,取决于你的网速,因为需要拉下几个 Seafile 需要运行的几个容器。

完成以后,还需要几分钟来完成。你也可以通过以下命令来检查运行状态:

docker logs seafile

当完成了,你将会看到如下输出:

下一步,你只需要在你的浏览器里键入你设置的 SEAFILE_SERVER_HOSTNAME 的地址,然后你应该看到登录屏幕的页面。

就这样!现在一切功能齐全,准备用客户端来使用。

安装 Seafile 客户端

Seafile 移动客户端在 Google PlayF-Droid苹果商店 都是可用的。Seafile 也有 Linux、Windows 和 Mac 桌面客户端可用,可在 此处 找到。

通过 seafile-gui 软件包,可以在 Ubuntu 系统轻松获得 Seafile :

sudo apt install seafile-gui

通过 seafile-client 软件包 Seafile 也包含在 Arch 用户的 AUR 包管理器中。

结语

请尽情探索客户端及其所能提供的一切。我将在未来的一篇文章中详细阐述 Seafile 客户端的所有功能。(敬请期待 ?)

总的来说,如果有什么错误,或者你有什么问题,请在下方评论 – 我会尽我所能回应。


via: https://itsfoss.com/deploy-seafile-server-docker/

作者:Hunter Wittenborn 选题:lujun9972 译者:hwlife 校对:wxy

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

在本期的《Linux 黑话解释》系列文章中,你将了解到 Linux 中的 定时任务 cron job 功能。你将通过学习编辑 crontab 文件来创建定时任务。

何为定时任务

cron 是一个用于按计划运行短小且快速的命令的实用命令行工具。该工具是一个方便、经典的系统管理工具,通过和其他工具结合使用可以自动运行各式各样的任务。比如,有些人通过把 rsynccron 结合使用,在特定的时间自动创建每日备份和每周备份。也有些人使用 cron 来分析服务器日志,并且结合邮件系统功能,在日志检测到错误时自动发送告警邮件。

cron 就如同“瑞士军刀”一样,可以多场景多样化使用。尽可能发挥你的想象,去挖掘它的功能。

其实 cron 的使用很容易上手,只需要几秒钟。不过在我们开始上手之前,先来讨论下几个经常容易混淆的概念。

cron、定时任务、crontab

有三个术语比较容易混淆:cron、定时任务和 crontab,让我们来看看它们的含义:

术语含义
cron这是安装在系统上的实际执行定时任务的 守护进程
定时任务“任务”是指一段启动并运行的程序。cron 可以按照约定的时间计划运行各种任务,这样的任务通常叫做“定时任务”。
crontab这是一个文件,用于定义定时任务。一个 crontab 文件可以通过表格形式(每一行就是一个定时任务)定义多个定时任务。

来看一个简单例子:创建一个定时任务,每小时向 crontabl_log.txt 文件打印 Linux is cool!

0 * * * *  echo "Linux is Cool!" >> ~/crontab_log.txt

是不是这么个简单定时任务的例子都让你感到惊恐,这是因为你需要懂得如何去读懂一个定时任务的属性。

我将在后文中讲述这个基础理论知识。

上手 cron

我们通过另一个例子来看看 cron 如何工作。

为了创建定时任务(或者说 cron 将要执行的命令任务),你只需要运行:

crontab -e

这将会打开一个文件,用于编辑定时任务:

Crontab default view

其中,所有以 # 开头的行都是注释,用于指导你如何使用 cron,如果觉得没用可以删除它们。

我们将创建如下任务,作为我们的第一个定时任务:

* * * * * touch ~/crontab_test

让我快速看看该任务将会做什么:

定时任务都是以 “分钟 小时 天 月 周 命令” 形式呈现:

  • 分钟:指该任务在哪一分钟会被执行。所以,该值为 0 则代表在每个小时开始时运行,5 则代表在每个小时的第 5 分钟会运行。
  • 小时:指该任务在一天中的哪个小时会被执行,取值范围为 0-23。没有 24 的原因是 23 时的末尾是半夜 11:59,然后就是每天的开始 0 时。分钟的取值范围定义逻辑与之类似。
  • 天:指一个月中的哪一天执行该任务,取值范围是 1-31(不同于前面的分钟和小时从 0 开始取值)。
  • 月:指该任务在哪个月被执行,取值范围是 1-12
  • 周:指该任务在星期几被执行,从周日开始算起,取值范围是 0-6(分别对应周日、周一到周六)。
  • 命令:是你想要运行的命令任务。

如果想对 “分钟 小时 天 月 周” 部分有更详细的理解,可以参考 Crontab guru 网站,该网站可以帮助你理解正在执行什么。

接着之前的例子 * * * * * touch ~/crontab_test,表示每分钟创建一次 ~/crontab_test 文件。

让我们将该任务编辑进 crontab 然后看看执行结果:

等到下一分钟,你就会发现你的家目录下多了文件 crontab_test:

这便是 cron 的基础应用示例。

一个实用的定时任务示例

假设你想创建一个脚本,用于拷贝多个目录内容到一个路径并打包作为备份,该如何实现?

通过 cron 定时任务就可以很容易实现该功能。

请看如下脚本:

#!/usr/bin/bash
echo "Backing up..."
mkdir -p ~/.local/tmp/
tar -Pc ~/Documents/ -f ~/.local/tmp/backup.gz

该脚本做了如下事情:

  1. 确保备份路径目录 ~/.local/tmp/ 存在。
  2. 将目录 ~/Documents/ 下的所有内容打包至文件 ~/.local/tmp/backup.gz

我们先来手动运行该脚本,看看它到底如何工作。

首先,我们在家目录(~)下创建该脚本,命令为 backup_script,如下图所示:

然后编辑 backup_script 脚本,写入上面那个脚本代码。

接着,赋予 backup_script 可执行权限:

最后运行脚本 ~/backup_script,进行功能验证:

你可以通过运行命令 tar -xf ~/.local/tmp/backup.gz -C <output_dir> 来进行备份恢复,这里 <output_dir> 是指文件要恢复到的路径目录。

接下来,就可以用 cron 工具来进行定时任务运行该脚本了。

举个例子,假设需要每天的凌晨 3 点运行该备份脚本,你可以在 crontab 中输入如下命令:

* 3 * * * ~/backup_script

这样你就可以每天自动进行备份操作了。

后记

本文简单介绍了定时任务功能。尽管我不确定 Linux 桌面用户使用该功能多不多,但我知道定时任务功能被许多系统管理员广泛应用。如果你有什么想法,欢迎在评论区留言。


via: https://itsfoss.com/cron-job/

作者:Hunter Wittenborn 选题:lujun9972 译者:jrglinux 校对:wxy

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

GnuPG,俗称 GPG,是一个非常通用的工具,被广泛用作电子邮件、信息、文件或任何你需要安全地发送给别人的东西的加密行业标准。

学习使用 GPG 很容易,你可以在几分钟内就学会使用它。

在本教程中,我将告诉你如何用 GPG 加密和解密文件。这是一个简单的教程,你可以在你的 Linux 系统上尝试所有的练习。这将帮助你练习 GPG 命令,并在你完全陌生的情况下理解它。

请先阅读整个教程,然后开始自己做。

GPG 是如何进行加密的?

GPG 加密

要使用 GPG,你首先需要有一个 GPG 密钥。

GPG 密钥是你在后面的教程中用来加密(或解密)文件的东西。它也是用来识别你的身份的,你的名字和电子邮件也会与密钥绑定。

GPG 密钥的工作原理是使用两个文件,一个私钥和一个公钥。这两个密钥是相互联系的,并且 GPG 的所有功能都需要使用它们,特别是对文件加密和解密。

当你用 GPG 加密一个文件时,它使用的是私钥。然后,这个新的加密文件只能用配对的公钥进行解密。

私钥,顾名思义,是以私下的、不给任何人看的方式来存储的密钥。

另一方面,公钥是用来给其他人的,或者你希望能够解密你的文件的任何人。

这就是 GPG 的加密方法的主要作用。它允许你对文件进行本地加密,然后允许其他人确保他们收到的文件实际上是由你发送的。因为他们能够解密文件的唯一方法是使用你的公钥,而这只有在文件首先使用你的私钥加密的情况下才有效。

反之,其他人可以用你的公钥对文件进行加密,而唯一能够解密的方法是用你的私钥。因此,允许其他人公开发布文件,而不用担心除了你以外的人能够阅读它们。(LCTT 译注:另外一个常见的用例是你用你的私钥对公开发布的文件进行签名,别人使用你的公钥通过验证你的签名而确信文件是你发布的、并没有被篡改。但本文没有涉及这个用例。)

换句话说,如果一个文件是用私钥加密的,它只能用相应的公钥解密。而如果一个文件是用公钥加密的,它只能用相应的私钥解密。

你已经在使用 GPG 而没有意识到

一个最常见的使用 GPG 的例子是在 Linux 软件包管理器中,特别是 外部仓库。你把开发者的公钥添加到你系统的可信密钥中。开发者用他/她的私钥签署软件包(生成签名)。由于你的 Linux 系统拥有该公钥文件,它就能理解该软件包实际上是来自受信任的开发者。

许多加密服务在你没有意识到的情况下使用了某种 GPG 的实现。但现在最好不要去研究这些细节。

现在你对这个概念有点熟悉了,让我们看看如何使用 GPG 来加密一个文件,然后用它来解密。

用 GPG 对文件进行加密和解密

这是一个非常简单的场景。我假定你只有一个系统,你想看看 GPG 是如何工作的。你并没有把文件发送到其他系统。你对文件进行加密,然后在同一个系统上解密。

当然,这不是一个实际的用例,但这也不是本教程的目的。我的目的是让你熟悉 GPG 命令和功能。之后,你可以在现实世界中使用这些知识(如果需要的话)。为此,我将告诉你如何与他人分享你的公钥。

第一步:安装 GPG

GPG 可以在大多数发行版的软件库中找到,开箱即用。

在基于 Debian 和 Ubuntu 的系统中,安装 gpg 包:

sudo apt install gpg

如果你使用 基于 Arch 的发行版,用 pacman 命令 安装 gnupg 软件包:

sudo pacman -S gnupg

第二步:生成一个 GPG 密钥

在你的系统上生成一个 GPG 密钥只需要一条简单的命令。

只要运行下面的命令,就会生成你的密钥(你可以对大多数问题使用默认值,如下面的下划线部分所示)。

gpg --full-generate-key

生成 GPG 密钥

检查 GPG 密钥

然后你可以通过使用 --list-secret-keys--list-public-keys 参数,分别看到私钥和公钥都是通过 pub 下显示的那个 ID 相互绑定的。

列出 GPG 密钥

第三步:用 GPG 加密一个文件

现在你已经设置了 GPG 密钥,你可以开始对我们的文件进行加密了。

使用下面的命令来加密文件:

gpg --encrypt --output file.gpg --recipient [email protected] file

让我们快速浏览一下该命令的内容:

首先,你指定了 —encrypt 选项。这告诉 GPG,我们将对一个文件进行加密。

接下来,你指定了 --output file.gpg。这可以是任何名字,不过惯例是给你要加密的文件的名称加上 .gpg 扩展名(所以 message.txt 会变成 message.txt.gpg)。

接下来,你输入 —recipient [email protected]。这指定了一个相应的 GPG 密钥的电子邮件,这个密钥实际上在这个系统上还不存在。

有点迷惑?

工作原理是,你在这里指定的电子邮件必须与你本地系统中的公钥相联系。

通常情况下,这将是来自另外一个人的 GPG 公钥,你要用它来加密你的文件。之后,该文件将只能用该用户的私钥进行解密。

在这个例子中,我将使用我以前的与 [email protected] 关联的 GPG 密钥。因此,其逻辑是,我用 [email protected]公钥 对文件进行加密,然后只能用 [email protected]私钥 进行解密。

如果你是为别人加密文件,你只有该公钥,但由于你是为自己加密文件,你的系统上有这两个密钥。

最后,你只需指定你要加密的文件。在这个例子中,让我们使用一个名为 message.txt 的文件,内容如下:

We're encrypting with GPG!

文本文件样本

同样地,如果电子邮件是 [email protected],新的 GPG 命令将如下所示:

gpg --encrypt --output message.txt.gpg --recipient [email protected] message.txt

用 GPG 加密文件

如果你尝试阅读该文件,你会看到它看起来像乱码。这是预料之中的,因为该文件现在已经被加密了。

读取加密文件会产生乱码

现在让我们删除未加密的 message.txt 文件,这样你就可以看到 message.txt.gpg 文件实际上在没有原始文件的情况下也能正常解密。

第四步:用 GPG 解密加密的文件

最后,让我们来实际解密加密的信息。你可以用下面的命令来做。

gpg --decrypt --output file file.gpg

通过这里的参数,我们首先指定 —decrypt,它告诉 GPG 你将会解密一个文件。

接下来,你输入 —output 文件,这只是告诉 GPG,在你解密后,你将把我们文件的解密形式保存到哪个文件。

最后,你输入 file.gpg,这是你的加密文件的路径。

按照这个例子,我使用的命令是这样的。

gpg --decrypt --output message.txt message.txt.gpg

用GPG解密文件

然后就完成了!当你想用 GPG 加密和解密文件时,这就是全部内容了。

剩下你可能想知道的是如何与他人分享你的公钥,以便他们在将文件发送给你之前对其进行加密。

发送和接收 GPG 密钥

要给别人发送一个 GPG 密钥,你首先需要从你的钥匙链中导出它,它包含了你所有的公钥和私钥。

要导出一个密钥,只需在你的钥匙链中找到密钥的 ID,然后运行以下命令,用密钥的 ID 替换 id,用你想保存的文件名替换 key.gpg

gpg --output key.gpg --export id

导出 GPG 公钥

要导入一个密钥,只需把输出文件(来自前面的命令)给其他用户,然后让他们运行下面的命令。

gpg --import key.gpg

但要正常使用该密钥,你需要验证该密钥,以便 GPG 正确地信任它。

这可以通过在其他用户的系统上使用 --edit-key 参数来完成,然后对密钥进行签名。

首先运行 gpg --edit-key id

GPG 编辑密钥

接下来,使用 —fpr 参数,它将显示密钥的指纹。这个命令的输出应该与你自己机器上的输出进行验证,这可以通过在你的系统上运行同样的 --edit-key 参数来找到。

GPG 密钥的指纹

如果一切吻合,只需使用 —sign 参数,一切就可以开始了。

签署 GPG 密钥

就是这样!其他用户现在可以开始用你的公钥加密文件了,就像你之前做的那样,这可以确保它们只有在你用你的私钥解密时才能被你读取。

这就是使用 GPG 的所有基础知识!

总结

现在你已经了解了开始使用 GPG 所需要的一切,包括为自己和他人加密文件。正如我前面提到的,这只是为了了解 GPG 的加密和解密过程是如何工作的。你刚刚获得的基本 GPG 知识在应用于真实世界的场景中时可以更上一层楼。

还需要一些帮助来弄清楚一些东西,或者有一些不工作的东西?欢迎在下面的评论中留下任何内容。


via: https://itsfoss.com/gpg-encrypt-files-basic/

作者:Hunter Wittenborn 选题:lujun9972 译者:wxy 校对:wxy

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

PKGBUILD 文件是为 Arch Linux 及其衍生版(如 Manjaro)构建和创建软件包的方式。

如果你曾经使用过 AUR(即 Arch Linux 的用户维护的 PKGBUILD 存储库),你甚至可能也遇到过它们。

但是,到底是如何从 PKGBUILD 到可安装软件包的呢?这两者之间到底发生了什么,如何把自己的软件制作成软件包呢?你将在这篇文章中了解这些。

PKGBUILD 基础知识

对于那些熟悉 Bash 或其他 shell 的人来说,你可能知道,PKGBUILD 就是一个带有一些变量的 shell 脚本。

PKGBUILD 文件由变量和函数组成,所有这些都是用来定义软件包本身,以及如何构建它。

为了从 PKGBUILD 中创建一个软件包,需要使用 makepkg 命令行工具。在获得 PKGBUILD 文件后,你只需在包含 PKGBUILD 的目录中运行 `makepkg',就可以得到一个可安装的软件包了。

在本教程中,你将会看到我刚刚制作的软件包,它在运行时打印出 “Hello World!”。

准备

为了继续学习本教程,你需要创建几个文件。

首先,你需要创建一个名为 PKGBUILD 的文件,它将作为构建你的软件包的“配方”。

你需要做的另一个文件是一个叫 hello-world.sh 的文件。我稍后会解释它的用途。

你也可以用一个命令来创建这两个文件:

touch PKGBUILD hello-world.sh

你可以用 ls 命令检查这些文件是否被创建。

然后你就可以开始了!

设置你的 PKGBUILD 文件

我不会让你复制粘贴整个文件,而是和你一起键入每一行,这样你就能更好地理解每一行的目的。如果你不喜欢这种学习方式,我强烈推荐 Arch 维基 中为 Arch Linux 创建软件包的文章。

这篇文章也没有介绍 PKGBUILD 中可以设置的每一个选项,只是介绍了一些常用的选项,以便你能尽快上手。

说完了这些,打开你的文本编辑器,让我们直接进入正题吧。

pkgname

首先是 pkgname 变量。这是安装时定义软件包名称的东西,也是 Arch Linux 的软件包管理器 pacman 跟踪软件包的方式。

这个变量(以及其他一些变量)的格式是 variable=value,变量名在左边,变量的值在右边,用等号隔开。

要设置包的名称,请在 PKGBUILD 中输入以下内容:

pkgname="hello-world"
  • 要设置一个不同的软件包名称,用你的软件包的名称替换 hello-world
  • 这并不设置用于运行程序的命令,这将在下面的 package() 部分中处理。

pkgver

正如变量名称本身所述,它设置了你的软件包的版本(即 1.0.0)。这在用户更新他们的系统时很有用,因为设置更高的版本会提示用户升级。

要设置版本号,请在 PKGBUILD 中输入以下内容(在前一行之后):

pkgver="1.0.0"

pkgrel

这与 pkgver 变量有关,通常不需要知道。不过和 pkgver 变量一样,如果它被换到一个更高的数字,就将通知用户进行升级。

它适用于任何需要保持 pkgver 不变的情况下,例如 PKGBUILD 本身发生了变化。如果你为一个你使用的程序创建了一个 PKGBUILD(并希望保持软件包的版本相同),而你需要修复 PKGBUILD 本身的一个错误,这将是非常有用的。

要设置这个变量,请在 PKGBUILD 中输入以下内容:

pkgver="1"

这个变量应该 总是1 开始,然后一次一次地向上移动。当 pkgver 本身向上移动时,这个变量可以(也应该)重置为 1,因为 pkgver 本身会通知用户升级。

pkgdesc

这将设置软件包的描述,用于帮助更好地识别该软件包。

要设置它,只需将描述放在引号内:

pkgdesc="Hello world in your terminal!"

arch

这个变量设置软件包所兼容的 硬件架构。如果你不明白什么是架构,那也没关系,因为在大多数情况下,这个变量几乎是无用的。

无论如何,makepkg 仍然需要设置它,这样它就知道这个软件包与我们的系统是兼容的。

这个变量支持设置多个值,所以 makepkg 需要一个不同的语法,如下所示。

要设置它,请在 PKGBUILD 中输入以下内容:

arch=("x86_64")

如果你要设置多个值,需要用空格和引号分隔每个值,像这样。arch=(“x86_x64" "arm")

depends

这列出了提供了我们的软件包所需功能的所有软件包。与 arch 一样,它也可以包含多个值,因此必须使用括号语法。

由于我们的软件包没有任何依赖关系,所以我们不需要在 PKGBUILD 中输入这个字段。然而,如果我们的软件包有依赖关系,我们就会使用与 arch 相同的语法。

optdepends

这里列出了那些并不是提供所需功能而是额外功能的软件包。

这与 depends 的语法相同。

conflicts

这告诉 pacman 哪些软件包会导致我们的软件包出现问题,或者以我们不希望的方式行事。

这里列出的任何软件包都会在我们的软件包被安装之前被卸载。

这与 depends 的语法相同。

license

这定义了你的程序所采用的 软件许可证。如果你需要帮助你选择一个许可证,Arch 维基 提供了一些信息。如果你不知道该怎么设置,将其设置为 custom 也可以。

这与 archdepends 的语法相同:

license=("custom")

source

这就是 makepkg 如何知道要用什么文件来构建我们的软件包。它可以包含各种不同类型的源,包括本地文件和 URL。

在添加本地文件时,要输入相对于 PKGBUILD 文件的文件路径,比如以下目录布局:

PKGBUILD
file.txt
src/file.sh

如果你想在我们的 PKGBUILD 中包括 file.sh,你需要输入 src/file.sh 作为其名称。

当输入 URL 时,你只需输入完整的 URL,即 https://mirrors.creativecommons.org/presskit/logos/cc.logo.large.png

你的这个软件包只需要 hello-world.sh 文件,由于它和 PKGBUILD 在同一个目录中,你只需输入它的名字作为 source 的值。

这个变量也使用与 archdepends 相同的语法:

source=("hello-world.sh")

sha512sums

这是用来验证 source 中的文件没有被修改或下载错误。如何获得这个值的信息可以在 Arch 维基关于 PKGBUILD 的文章 中找到。

如果你宁愿不设置这个(或者你只是不需要,例如对于本地文件),你可以为 source 变量中的每个文件输入 SKIP

sha512sums=("SKIP")

package()

这是最后一个,也是实际制作我们的包的最重要的部分。在处理这个问题时,知道两个变量很重要。

  • ${srcdir}:这是 makepkg 放置 source 变量中文件的地方。在这个目录中,你可以与这些文件进行交互,并对文件进行任何其他需要的修改。
  • ${pkgdir}:这是我们放置将被安装在系统中的文件的地方。 ${pkgdir} 的文件夹结构是按照实际系统中的情况设置的(例如,使用 pacman 安装时,${pkgdir}/usr/bin/hello-world 会创建文件 /usr/bin/hello-world)。

package() 包含一个用于创建软件包的命令列表。

因此,如果(假设)你需要有个在 /usr/share/motto.txt 写着 “Linux is superior to Windows ”的文件,你会运行这样的东西:

package() {
  mkdir -p "${pkgdir}/usr/share"
  echo "Linux is superior to Windows" | tee "${pkgdir}/usr/share/motto.txt"
}

关于上述命令的一些说明:

  • ${pkgdir} 里面最初是 不包含 目录的。如果你跳过了 mkdir 命令tee 会输出一个错误,说这个目录不存在。
  • 在指定目录时,总是 在它们前面加上 ${pkgdir}${srcdir} 变量。如果输入 /usr/share/motto.txt,就会按照字面意义指向你当前运行的系统中的 /usr/share/motto.txt

对于你的 PKGBUILD,你将把 hello-world.sh 文件放在目标系统的 /usr/bin/hello-world 中。你还将使该文件在运行时说 “Hello to you!”。

要做到这一点,请在 PKGBUILD 中输入以下内容:

package() {
  echo 'Hello to you!' > "${srcdir}/hello-world.sh"
  mkdir -p "${pkgdir}/usr/bin"
  cp "${srcdir}/hello-world.sh" "${pkgdir}/usr/bin/hello-world"
  chmod +x "${pkgdir}/usr/bin/hello-world"
}

然后就完成了!用 makepkg -si 构建和安装软件包,然后在终端运行 hello-world,查看其输出。

总结

就这样,你已经制作了你的第一个 PKGBUILD!你走在了为自己甚至是为 AUR 制作实际的软件包的路上。

有什么问题,或者有什么地方不对吗?请随时在下面的评论区发表。


via: https://itsfoss.com/create-pkgbuild/

作者:Hunter Wittenborn 选题:lujun9972 译者:wxy 校对:wxy

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

有很多的图形化工具可以用来创建 临场 live USB 驱动器。Linux 上的 Etcher 可能是最受欢迎的。为此,Ubuntu 也开发了自己的启动盘创建工具。

但是,资深 Linux 用户可能更喜欢使用 dd 命令在 Linux 终端中创建临场 USB,这会更快速便捷。

dd 命令是一个 命令行 工具,它提供了用来复制和转换文件的强大功能。

一个常见的使用示例是,用户使用 dd 命令将 ISO 文件写入到他们的外部存储设备(例如 USB 驱动盘),以用来给他们的电脑或者笔记本安装一个新的 Linux 发行版。

这就是我将在本教程中展示的内容。我将带你认识需要的命令,从终端找到我们的 USB 驱动器,然后对 ISO 文件进行实际刷写。

使用 dd 命令从 ISO 镜像创建临场 USB

在我向你展示步骤前,让我带你快速过一下你将要使用到的命令并解释它的作用。

这是一个使用命令刷写 ISO 的例子:

dd if="./filename.iso" of="/dev/sdb" status="progress" conv="fsync"

让我们来看看 dd 命令 实际都做了些什么。

理解 dd 命令

Explanation of the dd command for live USB creation

首先,你输入 dd。没错,这就是你要运行的程序的名称。

接下来,你指定 if="./filename.iso"if 代表 输入文件 input file ,告诉 dd 命令你将要向外部存储设备写入哪个文件。

之后,你输入 of="/dev/sdb"。和 if 一样,of 代表的是 输出文件 output file

要记住的是,输出文件在技术上不必是系统上的文件。你还可以指定诸如外部设备路径之类的内容(如示例所示),它看起来像系统上的普通文件,但实际上指向连接到你机器的设备。

status 可以设定为 3 个选项:nonenoxferprogress

  • 你设置的 progress 选项将使 dd 任务显示有关已将多少 ISO 文件传输到存储驱动器的定期统计信息,以及对 dd 任务完成前需要多长时间的估计。
  • 如果你改为设置 none 选项,dd 任务在写入 ISO 文件期间只会打印错误消息,并且删除进度条之类的内容。
  • noxfer 选项隐藏了传输完成后打印的一些信息,例如从开始到完成所用的时间。

最后,你将 conv 选项设置为 fsync。这会导致 dd 任务在整个 ISO 文件写入 USB 驱动器之前不会报告成功写入。

如果你省略这个选项,dd 任务会工作的很好(并且实际上可能看起来运行得更快),但你可能会发现你的系统需要很长时间才能告诉你移除 USB 驱动器是安全的,因为它会在后台完成 ISO 的内容写入,从而允许你在此期间做其它事情。

现在你明白了你必须做什么,让我们看看如何去做。

注意事项

命令行是把双刃剑。当你在命令行使用类似于 dd 命令时必须十分小心。你必须确保你目标输出文件是正确的设备。一个错误的步骤就可能会格式化你的系统硬盘,你的操作系统也会因此而损坏。

第 0 步: 下载所需的 ISO 镜像

不用说,你需要有一个 ISO 镜像文件才能将其刷写到 USB 上。

我将使用 Ubuntu 20.04 ISO(可在此处下载)来测试我之前介绍的 dd 命令。

第 1 步: 获取 USB 盘符

插入你的 USB 驱动器。

我为 of 参数输入的具体路径是 /dev/sdb。USB 磁盘通常会标记为 /dev/sdb,但这不是硬性规定。

此路径可能因你的系统而异,你可以使用 lsblk 命令确认 USB 磁盘的路径。只需从列表中查找一个看起来像你的 USB 磁盘大小的驱动器,就可以了。

如果你更熟悉 GUI 程序,还可以使用 GNOME Disks 等工具找到驱动器的路径。

现在你已经确认了外部驱动器的路径,让我们开始创建临场 USB。

第 2 步:将 ISO 文件写入 USB 磁盘

在下载 ISO 文件的目录打开一个终端,然后运行以下命令(如果 /dev/sdb 与你的存储设备名称不同,请记住将其替换):

sudo dd if="./ubuntu-20.04.2.0-desktop-amd64.iso" of="/dev/sdb" status="progress" conv="fsync"

之后,让 dd 去做剩下的事情,它会在完成后打印一条完成消息:

就像这样,你已经在 Linux 终端中使用 dd 命令刷写了 ISO 文件!

总结

现在,你可以通过终端做更多的事情,让你的工作效率大大提高。

dd 命令有任何没解决的问题,或者无法正常工作?请随时在下面的评论部分中留下你的问题。


via: https://itsfoss.com/live-usb-with-dd-command/

作者:Hunter Wittenborn 选题:lujun9972 译者:perfiffer 校对:wxy

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