分享一些我最喜欢的开源写作工具。在我的职业生涯中，我已经写过很多东西，主要是作为一名 IT 顾问，创建产品文档作为给的客户可交付成果。这些文档通常针对不同操作系统和软件产品提供说明。自 2018 年，我开始在 www.opensource.com 上发表关于开源软件的文章。当然，我使用开源软件进行协作。接下来我将介绍我使用过的四款开源编辑器。1、ViVi 也被称为 Vim（LCTT 校注：此外不确，Vi 和 Vim 是两个软件，只是 Vim 取代了 Vi，并以 vi 的名字运行。），是我学习的第一款开源编辑器。这是我在计算机科学课程中学习的编辑器，并且我所有的 C 语言编程都是通过它完成的。自 1995 年以来，实际上我一直使用它作为命令行编辑器。这款工具有多个迭代版本，以至于我都可以为之写一系列文章了。我只想说，在我的日常使用中，我坚持使用它的基本命令行形式，并进行最小的定制。2、LibreOffice WriterWriter 是 LibreOffice 开源办公套件的一部分。它是由 文档基金会 Document Foundation 维护的全功能文字处理器。它支持行业标准格式，例如开放文档格式 （ODF）、Open XML 和 MS Office DOC、DOCX。可以在其官方网站上 了解有关 Writer 的更多信息。3、GhostwriterGhostwriter 是一个用于 Markdown 的文本编辑器。它有一个很好的实时查看器和语法指南或备忘单功能。访问官方网站 了解更多内容。4、GeditGedit 是许多 Linux 发行版中的基本图形编辑器，被描述为“用于 GNOME 桌面的小型轻量级文本编辑器”。我最近开始使用它来创建 Asciidoc 格式的文章。使用 Asciidoc 的好处是语法易于管理并可导入到 Drupal 等 Web 渲染系统中。通过 Gedit Wiki 了解许多提示和技巧。编辑文本开源世界中有大量编辑软件。随着我继续写作，这个列表可能会增加。我的主要目标是格式简单。我希望我的文章易于在互联网平台上导入、转换和发布。你的写作风格、功能需求和目标受众将指导你确定首选工具。via: https://opensource.com/article/22/10/open-source-editors作者：Alan Formy-Duval 选题：lkxed 译者：Donkey-Hao 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
这份简要指南能够帮助你快速开始使用 Git，以及配置一些选项。在 Linux 中设置 Git 十分简单，但为了获得完美的配置，我做了以下五件事：创建全局配置设置默认名称设置默认邮箱地址设置默认分支名称设置默认编辑器我使用 Git 管理我的代码、命令行脚本以及文档版本。这意味着每次我开始一项新的任务，首先我需要创建一个文件目录并将其添加到 Git 库中：$ mkdir newproject $ cd newproject $ git init 有一些我一直想要的常规设置。不多，但可以避免我每次都进行配置。我喜欢利用 Git 的 全局 配置功能。Git 提供了进行手动配置的 git config 命令，但这有一些注意事项。例如，通常你会设置邮箱地址。你可以通过运行 git config user.email 你的邮件地址 命令进行设置。然而，这只会在你当前所在的 Git 目录下起作用。$ git config user.email alan@opensource.com fatal: not in a git directory 此外，当这个命令在 Git 仓库中运行时，它只会配置特定的一个仓库。在新的仓库中，你不得不重复这个步骤。我可以通过全局配置来避免重复。选项 --global 会指示 Git 将邮箱地址写入全局配置 ~/.gitconfig 文件中，甚至在必要时会创建它：请记住，波浪线（~）代表你的主文件夹。在我的电脑中它是 /home/alan。$ git config --global user.email alan@opensource.com $ cat ~/.gitconfig [user] email = alan@opensource.com 这里的缺点是，如果你有大量偏好设置，需要输入很多命令，这将花费大量时间并且很容易出错。Git 提供了更加快捷有效的方式，可以直接编辑你的全局配置文件——这是我列表中的第一项！1、创建全局配置如果你刚开始使用 Git，或许你还没有该文件。不用担心，让我们直接开始。只需要用 --edit 选项：$ git config --global --edit 如果没有该文件，Git 将会创建一个包含以下内容的新文件，并使用你终端的默认编辑器打开它：# This is Git's per-user configuration file. [user] # Please adapt and uncomment the following lines: # name = Alan # email = alan@hopper ~ ~ ~ "~/.gitconfig" 5L, 155B 1,1 All 现在我们已经打开了编辑器，并且 Git 已经在后台创建了全局配置文件，我们可以继续接下来的设置。2、设置默认名称名字是该文件中的首要条目，让我们先从它开始。用命令行设置我的名称是 git config --global user.name "Alan Formy-Duval"。不用在命令行中运行该命令，只需要在配置文件中编辑 name 条目就行：name = Alan Formy-Duval 3、设置默认邮箱地址邮箱地址是第二个条目，让我们添加它。默认情况下，Git 使用你的系统提供的名称和邮箱地址。如果不正确或者你想要更改，你可以在配置文件中具体说明。事实上，如果你没有配置这些，Git 在你第一次提交时会友好的提示你：Committer: Alan <alan@hopper> Your name and email address were configured automatically based on your username and hostname. Please check that they are accurate.... 在命令行中运行 git config --global user.email "alan@opensource.com" 会设置好我的邮箱。同样，我们在配置文件中编辑 email 条目，提供你的邮箱地址：email = alan@opensource.com 我喜欢设置的最后两个设置是默认分支名称和默认编辑器。当你仍在编辑器中时，需要添加这些指令。4、设置默认分支名称目前有一种趋势，即不再使用 master 作为默认分支名称。事实上，在新存储库初始化时，Git 将通过友好的消息提示更改默认分支名称：$ git init hint: Using 'master' as the name for the initial branch. This default branch name hint: is subject to change. To configure the initial branch name to use in all hint: of your new repositories, which will suppress this warning, call: hint: hint: git config --global init.defaultBranch <name> 这个名为 defaultBranch 的指令需要位于一个名为 init 的新部分中。现在普遍接受的是，许多程序员使用 main 这个词作为他们的默认分支。这是我喜欢使用的。将此部分后跟指令添加到配置中：[init] defaultBranch = main 5、设置默认编辑器第五个设置是设置默认的编辑器。这是指 Git 将使用的编辑器，用于在你每次将更改提交到存储库时输入你的提交消息。不论是 nano、emacs、vi 还是其他编辑器，每个人都有他喜欢的。我喜欢用 vi。添加 core 部分，并设置 editor 指令为你喜欢的编辑器。[core] editor = vi 这是最后一项。退出编辑器。Git 在主目录下保存全局配置文件。如果你再次运行编辑命令，将会看到所有内容。注意配置文件是明文存储的文本文件，因此它可以很容易使用文本工具查看，如 cat 命令。这是我的配置文件内容：$ cat ~/.gitconfig [user] email = alan@opensource.com name = Alan Formy-Duval [core] editor = vi [init] defaultBranch = main 这是一个简单的指南，可以让你快速开始使用 Git 和它的一些配置选项。via: https://opensource.com/article/22/9/git-configuration-linux作者：Alan Formy-Duval 选题：lkxed 译者：Donkey-Hao 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
有了 Linux，我可以用意想不到的方式与我的先辈们联系。Linux 不仅仅是在服务器上运行、为互联网提供动力的东西。它是你的数据、你的家庭历史和记忆、工作或娱乐以及现实生活的安全场所。这就是例子：现在我正在进行一个扫描家庭老照片的项目。我使用带有 GNOME 桌面的 Fedora Linux 已经有几年了，所以我不需要安装任何额外的软件包。我只是把扫描仪插入 USB 接口，启动扫描软件（ 文档扫描器 Document Scanner ），就可以了。请继续阅读，看看我是如何做到的。将记忆数字化许多人对了解他们的家族历史、先辈们和遗产感兴趣。随着现在技术的发展，将旧的人工制品数字化已经成为一种普遍的做法。无论是你的 80 年代的磁带收藏，还是高中的艺术作品，或者是家庭的老照片，把它们变成数字格式是一种现代的保存和未来验证的方法。我的妈妈最近给了我一些先辈们的照片，所以我有几张想保存的图片。扫描它们不仅提供了某种意义上的永久性，而且使我能够以在拍摄它们的时代闻所未闻的方式来处理它们。例如，我有一张我祖父的照片，他在我出生前几年不幸去世。通过将他的照片数字化，我可以放大，了解他，并可能以一种原本不可能的方式与他建立联系。工作流程首先要做的是把我的佳能扫描仪插入 USB 接口。当我打开文档扫描器时，它检测到我的 Canon LiDE 210 扫描仪。接下来，我把照片放到平板扫描仪上。我将设置调整为 2400 DPI 的图像分辨率，以确保我捕捉到每一个细节。然后我点击扫描。在这种分辨率下，扫描可能需要一些时间，但完成后，我可以根据需要裁剪图像并保存它。顺便说一下，在我扫描照片和写这篇文章的时候，我也在用一个开源的音频播放器 Clementine 在同一台电脑上欣赏我最喜欢的一些音乐。性能受到影响？一点也不。扫描完成后，我还可以选择裁剪图片并将其保存为 PDF、JPG 或任何我选择的格式。现实生活请允许我介绍我的祖父和我的叔叔乔治，大约在 1944 年。乔治是一名二战老兵，曾在欧洲与纳粹作战。我的祖父，在右边，是北卡罗来纳州东南部一家木材厂的工头。虽然他没有看到战场，但他负责分配到他的工厂工作的被俘纳粹战俘。他形容他们是年轻的男孩，只想回家和他们的家人在一起。（图片由：Alan Formy-Duval, CC BY-SA 4.0）总结作为一个专门的 Linux 桌面用户，我有时会听到有人说他们不使用 Linux，因为有一些任务它不能执行。Linux 是我使用的全部，而且在大约 14 年的时间里，我没有遇到这个问题。无论你是在寻找一种愉快的消遣，还是寻找一种提高工作效率的方法，都有可能有一种在 Linux 上运行的解决方案适合你。via: https://opensource.com/article/22/4/scan-family-photos-linux作者：Alan Formy-Duval 选题：lkxed 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
在树莓派上创建一个最小化的服务器
不要急着丢弃那台旧树莓派，这个详细步骤的指南展示了我怎样用最小化设置来充分利用我珍贵的树莓派系统资源。最近，我的 树莓派 上的 microSD 储存卡不工作了。它已经作为服务器持续使用将近两年了，这为我提供了一个开始探索和修正问题的好机会。在初始化安装完成以后，它开始出现一些磁盘方面的问题，并且官方的树莓派操作系统发布了一个有重大意义的更新（并从 Raspbian 更名为 树莓派操作系统 Raspberr Pi OS ）。所以我买了一个新的储存卡并开始重装。尽管树莓派 3B 不是最新的硬件，但对于运行多样化服务的最小化的服务器还是足够的。我认为我之前的安装使用了完整的安装镜像，包括了图形用户界面和许多其他的软件包是没有必要的。这个详细步骤的指南展示了我怎样用最小化设置来充分利用我珍贵的树莓派系统资源。开始首先，要为树莓派创建一个新的系统驱动器。这需要两样东西：系统镜像文件和一张 microSD 储存卡。下载树莓派系统镜像文件虽然有好几种操作系统可供选择，但我坚持选择树莓派官方支持的系统。第一步是从 树莓派操作系统 官方网站上下载最新的系统镜像文件到计算机，然后后写入储存卡。他们提供了三个不同的镜像，我选择了精简版。它是最小化的操作系统，只包含基本系统必要的文件，所以它占用最少的磁盘空间和系统内存。（当我下载系统的时候，发布日期是 2020 年 8 月 20 日，但是它现在肯定已经更新了。我觉得不会有什么巨大不同，但是我建议读一下发行说明。）将树莓派系统镜像写到储存卡第二步是写下载的系统镜像到储存卡。我的卡之前用过，当我把它插入我的 Linux 桌面计算机之后，它自动加载了两个存在的分区。在我卸载这两个分区前，我不能写入镜像。要这样做，我必须得用下面的 lsblk 命令来确定它们的路径，经确定，该设备路径为 /dev/mmcblk0：# lsblk -p 我用 umount 命令卸载了这两个分区：# umount /dev/mmcblk0p2 # umount /dev/mmcblk0p1 一旦分区被卸载，就可以将镜像文件写入到储存卡了。尽管有许多图形化的写入工具，我还是习惯是用古老的 dd 命令：# dd bs=4M if=/home/alan/Downloads/raspios/2020-08-20-raspios-buster-armhf-lite.img of=/dev/mmcblk0 status=progress conv=fsync 启动树莓派你只需要一个显示器、键盘、电源适配器来使用树莓派。我还有一个以太网网线用于网络连接，相比无线网络，我更喜欢通过网线来连接一个专用的服务器。插入储存卡并打开树莓派的电源。一旦成功启动，用默认的缺省密码来进行登录：用户名 pi，密码raspberry。系统设置按照以下步骤尽可能最小化设置磁盘空间、内存使用等。我建议尽可能的花时间研究每个配置，使之尽量正确。通常有几种应用配置的方法，有些配置文件和选项可能会被丢弃，所以要查看产品文档确保你没有应用过时的配置。运行 raspi-config树莓派系统的主设置程序叫做 raspi-config。登录以后立即运行它：# raspi-config 它出现了一个扩展根文件系统的选项，可以利用储存卡上所有可利用的空间。选择这个选项之后，重启并重新登录。用 df 命令来验证储存卡的总容量是否被完全使用：# df -h 如果你需要设置其他选项，请再次运行 raspi-config。它们中的一些选项可以根据你的偏好和配置进行变化。仔细检查所有这些选项，确定没有任何遗漏。为了获得最佳性能，我建议做以下调整。（我跳过了一些我们没有做任何变化的选项。） 系统选项 System options ：在此你可以设置主机名，最好使用完全限定的域名（FQDN）。你也能在这里更改你的密码，这始终是强烈建议的。 接口选项 Interface options ：开启 SSH 服务。 性能选项 Performance options ：将 GPU 内存减少到最低值（16MB）。 本地化选项 Localization options ：选择你的时区、位置、键盘类型。 高级选项 Advanced options ：这个选项包括扩展根文件系统的选项。如果你在上面没扩展，一定要在这里做。这样你可以访问储存卡上的所有可用空间。 更新 Update ：进入更新选项会立即检查 raspi-config 工具是否有更新。如果更新可用，它将被下载并应用，raspi-config 将在几秒钟后重启。一旦你在 raspi-config 中完成这些配置，选择“ 完成 Finish ”退出该工具。手动配置我还建议几个其他更改，它们全都要求编辑某种配置文件来手动更改设置。设置静态 IP 地址一般来说，最好用静态 IP 地址设置服务器。通过 ip 命令来验证网络接口，并设置 IP 地址和你的缺省网关（路由器）和域名服务（DNS）地址：# ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000 link/ether b8:27:eb:48:3f:46 brd ff:ff:ff:ff:ff:ff 你还需要知道你的缺省网关和一个及以上的 DNS 服务器地址。将这些信息添加到 /etc/dhcpcd.conf 配置文件中（我强烈建议更改之前对这个文件做一个备份）：# cd /etc # cp -a dhcpcd.conf dhcpcd.conf.original 按照以下来编辑文件：# vi dhcpcd.conf # static IP configuration: interface eth0 static ip_address=192.168.1.5/24 static routers=192.168.1.1 static domain_name_servers=192.168.1.3 192.168.1.4 关闭 IPv6 协议除非你有特别需要使用 IPv6，否则你可能倾向于禁用它。为此，你可以创建两个新文件，其中包括一个单行指令，指示 Linux 内核不要使用 IPv6。首先，创建 /etc/sysctl.d/disable-ipv6.conf 文件，其中包含一行指令：# cd /etc/sysctl.d # echo "net.ipv6.conf.all.disable_ipv6 = 1" > disable-ipv6.conf 然后创建 /etc/modprobe.d/blacklist-ipv6.conf 文件包含一行指令：# cd /etc/modprobe.d # echo "blacklist ipv6" > blacklist-ipv6.conf 关闭 Wi-Fi、蓝牙和音频我的服务器的具体用途并不需要蓝牙和音频，同时，它用以太网连接，并不使用无线（Wi-Fi）。除非你计划用它们，否则按照以下步骤来关闭它们。对 /boot/config.txt 这个文件做以下更改（再次强调，我建议为这个文件做个备份）：# cd /boot # cp -a config.txt config.txt.original 加入以下两个指令到文件底部来禁用蓝牙和 Wi-Fi：dtoverlay=disable-btdtoverlay=disable-wifi这些 echo 命令就可以完成：# cd /boot # echo "dtoverlay=disable-bt" >> config.txt # echo "dtoverlay=disable-wifi" >> config.txt 要关闭音频，更改 dtparam=audio 的参数为 off。你可以用一个简短的命令 sed 来完成：# sed -i '/dtparam=audio/c dtparam=audio=off' config.txt 最后一步是禁用 Wi-Fi 服务，用 systemctl mask 命令来操作：systemctl mask wpa_supplicant.service 如果你不需要其他服务的话，也可以禁用它们：禁用调制解调器服务：systemctl disable hciuart禁用 Avahi 守护进程：systemctl disable avahi-daemon.service最后一步检查你的内存使用量：# free -h 我震惊了：我的系统只用了 30MB 的内存。创建个人账户：建议为登录这台服务器的个人创建用户账户。你能分配他们到 sudo 组允许他们运行管理命令。举个例子，创建一个用户名为 George 的一个账户。# adduser george # usermod -a -G adm,sudo,users george 进行更新：这是一个重要的步骤。应用更新来获取树莓派操作系统的最新修复。# apt update # apt full-upgrade 重启：重启你的新服务器是一个好主意:# systemctl reboot` 安装 Cockpit：你可以在树莓派系统上安装著名的 Linux Web 控制台 Cockpit，它提供了一个基于 HTML 界面来远程管理和监控你的服务器。我最近写了一篇 Cockpit 入门 的文章。用这个命令来安装它# apt install cockpit 现在我的树莓派服务器已经准备好托管服务器了，我能用它来做 网页服务器、VPN 服务器、 Minetest 等游戏服务器，或者就像我做的基于 Pi-Hole 的广告屏蔽器 。保持旧硬件的活力不论你有什么硬件，仔细地精简并控制你的操作系统和软件包，可以使你的系统资源使用量保持在低水平，以便你获得最大收益。这还可以通过减少试图利用漏洞的潜在恶意行为者可用的服务和软件包数量，提高了安全性。因此，在你丢弃旧硬件之前，考虑一下能够继续使用的各种可能性。via: https://opensource.com/article/21/1/minimal-server-raspberry-pi作者：Alan Formy-Duval 选题：lujun9972 译者：hwlife 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
链接一直是 UNIX 文件系统的一个独特的高级功能。UNIX 和 Linux 用户发现链接有很多用途，特别是符号链接。我喜欢使用符号链接的一种方式是管理各种 IT 设备的配置备份。我有一个目录结构，用来存放我的文档、更新及网络上其他和计算机和设备有关的文件。设备可以包括路由器、接入点、NAS 服务器和笔记本电脑，通常有不同的品牌和版本。配置备份本身可能在目录树的深处，例如 /home/alan/Documents/network/device/NetgearRL5000/config。为了简化备份过程，我在主目录中有一个名为 Configuration 的目录。我使用这个目录的符号链接来指向特定的设备目录：:~/Configuration/ $ ls -F1 Router@ Accesspoint@ NAS@ 注意：ls 命令的 -F 选项在每个文件名上附加特殊字符以表示其类型。如上所示，@ 符号表示这些是链接。创建一个链接符号链接 Router 指向我的 Netgear RL5000 的 config 目录。创建它的命令是 ln -s：$ ln -s /home/alan/Documents/network/device/NetgearRL5000/config Router 然后，用 ls -l 看一下并确认：:~/Configuration/ $ ls -l Router -> /home/alan/Documents/network/device/NetgearRL5000/config NAS -> /home/alan/Documents/network/device/NFSBox/config ... 这样做的好处是，当对这个设备进行维护时，我只需进入 ~/Configuration/Router。如果我决定用一个新的型号替换这个路由器，使用符号链接的第二个好处就很明显了。我可能会把旧的路由器改成一个接入点。因此，它的目录并没有被删除。相反，我有一个新的目录，对应于新的路由器，也许是华硕 DF-3760。我创建这个目录并确认它的存在：$ mkdir -p ~/Documents/network/device/ASUSDF-3760/config :~/Documents/network/device/ $ ls NetgearRL5000 ASUSDF-3760 NFSBox ... 另一个例子是，如果你的办公室里有几个接入点。你可以使用符号链接在逻辑上代表每一个，用一个通用的名字，如 ap1，ap2，等等，或者你可以使用描述性的词语，如 ap_floor2，ap_floor3，等等。这样，当物理设备随时间变化时，你不必持续更新任何可能管理它们的进程，因为它们是在处理链接而不是实际的设备目录。更新一个链接由于我的主路由器已经改变，我想让路由器的符号链接指向它的目录。我可以使用 rm 和 ln 命令来删除和创建一个新的符号链接，但是有一种方法可以只用 ln 命令和几个选项就可以一步完成：:~/Configuration/ $ ln -vfns ~/Documents/network/device/ASUSDF-3760/config/ Router 'Router' -> '/home/alan/Documents/network/device/ASUSDF-3760/config/' :~/Configuration/ $ ls -l Router -> /home/alan/Documents/network/device/ASUSDF-3760/config NAS -> /home/alan/Documents/network/device/NFSBox/config 根据手册页，这些选项如下：-v、--verbose：打印每个链接文件的名称-f、--force：删除目标文件（有必要，因为已经存在一个链接）-n、--no-dereference：如果链接名是一个目录的符号链接，就把它当作一个正常的文件-s、--symbolic：制作符号链接而不是硬链接总结链接是 UNIX 和 Linux 文件系统中最强大的功能之一。其他操作系统也曾试图模仿这种能力，但由于他们的文件系统缺乏基本的链接设计，这些系统从来没有工作得那么好，也没有那么可用。上面的演示只是利用链接在生活生产环境中无缝浏览不断变化的目录结构的众多可能性中的一种。链接提供了一个永远不会长期静态的组织所需的灵活性。via: https://opensource.com/article/21/11/update-linux-file-system-link作者：Alan Formy-Duval 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
使用 Linux cowsay 命令制作丰富多彩的节日问候
用这个有趣的 Linux 命令行工具来庆祝节日吧。你可能听说过这样一个小程序：它能接受输入信息（比如你通过键盘输入的消息），并输出一张引用了输入消息的牛的图像。这个小程序被称为 cowsay，之前我们已经 介绍 过了。所以，为了搞点有趣的事，我想用它来庆祝 亡灵节 Día de los Muertos （LCTT 译注：墨西哥传统的鬼节，著名动画电影《 寻梦环游记 Coco 》即以此为背景）。除了牛之外，其实还有一些其他的可用图像。当安装 cowsay 时，程序会自动安装其他几个图像，并存储在 /user/share/cowsay 目录中。你可以用 -l 参数来获取图像列表。$ sudo dnf install cowsay $ cowsay -l 实际上还有很多与 cowsay 或类似程序相关的开发活动。你可以创建自己的图像文件，也可以下载其他人制作的图像。例如，GitHub 上就有 Charc0al 的 cowsay 文件转换器。你可以用这一工具将自己的图片转换为 cowsay 所需的特殊 ASCII 格式文件。根据 Linux 或 FreeBSD 终端设置不同，你可能会启用颜色支持，而 cowsay 也可以显示彩色图像。Charc0al 的转换器也提供了许多现成的颜色文件。我选择了“ 甲壳虫汁 Beetlejuice ”（LCTT 译注：同名美国奇幻喜剧电影中的主角大法师）文件来开展我的“庆祝活动”。首先，我将 beetlejuice.cow 文件保存到了 /usr/share/cowsay 目录。这个目录权限属于 root 用户，你可以先将该文件保存到家目录，然后再复制过去。此外我们还需要将该文件的读取权限赋予所有用户。$ sudo cp beetlejuice.cow /usr/share/cowsay $ sudo chmod o+r /usr/share/cowsay/beetlejuice.cow 关注一下图像是如何生成的（过程很有趣）。首先将各种 ASCII 颜色控制代码设置为变量，然后用这些变量，以传统的 ASCII 艺术风格绘制图像。生成的图像几乎是全身的，并且在不滚动屏幕的情况下，不适配我的终端的高度，所以我编辑了一下该文件，删除了最后 15 行以降低高度。这个图像也可以被 cowsay 程序检测到，并展示在列表中。$ cowsay -l Cow files in /usr/share/cowsay: beavis.zen beetlejuice blowfish bud-frogs bunny cheese cower default dragon ... 现在，只要运行程序，并使用 -f 选项指定该图像就可以了。别忘了提供要输出的信息。$ cowsay -f beetlejuice "Happy Day of the Dead!" “甲壳虫汁”祝你亡灵节快乐 (CC BY-SA 4.0)cowsay 是 Linux 中一个有趣的搞怪小玩意。发挥你的创意，探索一下 cowsay 以及 ASCII 的艺术吧。via: https://opensource.com/article/21/11/linux-cowsay作者：Alan Formy-Duval 选题：lujun9972 译者：unigeorge 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
这里有一些我最喜欢的 ImageMagick 技巧，以及如何在没有 GUI 的情况下使用它们。Linux 对摄影师和图形艺术家很有用。它提供了许多工具来编辑包括照片在内的不同类型的图像文件和格式。这表明你甚至不需要一个图形界面来处理你的照片。这里有四种你可以在命令行中编辑图像的方法。给你的图片应用效果几年前，Seth Kenlon 写过一篇文章，4 个有趣的（半无用的）Linux 玩具，其中包括对 ImageMagick 编辑工具套件的介绍。在 2021 年的今天，ImageMagick 甚至更有意义。这篇文章让我们了解了 Fred 的 ImageMagick 脚本，这些脚本真的很有用。Fred Weinhaus 维护着 200 多个脚本，用于对你的图像文件应用各种效果。Seth 向我们展示了 Fred 的 vintage3 脚本的一个例子，该脚本使图像变得怀旧。创建照片拼贴画今年，Jim Hall 用他的文章 从 Linux 命令行创建照片拼贴 向我们展示了如何从照片中创建拼贴画。拼贴画在小册子和手册中使用得很多。它们是一种在一张照片中展示几张图片的有趣方式。可以应用效果来将它们进一步融合在一起。事实上，我以他的文章为指导，创造了上面的图片拼贴。这是我小时候的样子。以下是我使用的命令：$ montage Screenshot-20211021114012.png \ Screenshot-20211021114220.png \ Screenshot-20211021114257.png \ Screenshot-20211021114530.png \ Screenshot-20211021114639.png \ Screenshot-20211021120156.png \ -tile 3x2 -background black \ screenshot-montage.png 调整图像大小Jim 发表了另一篇文章，从 Linux 终端调整图像的大小。这个教程演示了如何使用 ImageMagick 改变一个图像文件的尺寸并将其保存为一个新的文件。例如，上面的 montage 命令所产生的拼贴画没有达到要求的尺寸。学习如何调整尺寸，使我能够调整宽度和高度，从而使它能够被包括在内。这是我用来调整这张图片大小的命令。$ convert screenshot-montage.png -resize 520x292\! alanfd-kid-montage.png 自动化图像处理最近，我决定自己看一下 ImageMagick 套件。这一次，我把它的工具组合成一个 Bash 脚本。文章的题目是 用这个 bash 脚本自动处理图像。这个例子是一个简单的脚本，可以自动为我的文章制作图片。它是根据 Opensource.com 上的要求定制的。如果你想使用这个脚本，我在文章中提供了一个 Git 仓库连接。它很容易修改和扩展，可以满足任何人的需要。总结我希望你喜欢这些文章并在你的艺术创作中使用 Linux。如果你想看看更多的 Linux 图像软件，可以看看 Fedora Design Suite Spin。它是一个完整的操作系统，包括许多不同的开源多媒体制作和发布工具，例如：GIMPInkscapeBlenderDarktableKritaScribus等等via: https://opensource.com/article/21/11/edit-photos-linux-command-line作者：Alan Formy-Duval 选题：lujun9972 译者：geekpi 校对：校对者ID本文由 LCTT 原创编译，Linux中国 荣誉推出
主机名是人类用来指代特定计算机的标签。计算机有网络地址，但人类通常很难记住它们。主机名是帮助人类参考特定计算机的标签。例如，你可能不会导航到 192.168.1.4，而是导航到 linuxlaptop 或 linuxlaptop.local。地址和名称所有联网的计算机（也被称为 主机 host ）都需要一个地址：一个与之相关的唯一数字，以使数据报文能够在它们之间进行正确的数据通信。这就是所谓的 互联网协议 Internet Protocol （IP）地址。数字 54.204.39.132 是一个 互联网协议第四版 Internet Protocol version 4 （IPv4）地址。较新的 IPv6 地址要长得多，像这样：2001:0db6:3c4d:0017:0000:0000:2a2f:1a2b。 哇！这将是很难记住的！$ ip addr show 计算机也可以被赋予标签。被称为 主机名 hostname ，这些是友好的名称，便于参考。我可以把我的计算机的主机名设置为 copperhead。只要这个名字在网络上是唯一的，所有其他用户和计算机都可以把 copperhead 作为地址，而不是 IP 地址。$ hostname -s 你可以更新你的计算机的主机名。阅读 Seth Kenlon 的文章 如何在 Linux 上更改主机名，了解如何在 Linux 上这样做。完全限定域名从技术上讲，主机名包括一个域名。如果我的域名是 mycompany.com，那么我的计算机的主机名是 copperhead.mycompany.com，以句点分隔。这就形成了一个 完全限定域名 fully qualified domain name （FQDN）。这很重要，因为 IP 地址可以解析为 FQDN。host.domain.topleveldomain 例如：www.example.com 是一个完全限定域名。你的域名一般已经确定了，所以你只负责提供主机部分。本文的重点是主机。名称解析将 IP 地址转换为相应的主机名的过程被称为名称解析。这个过程首先发生在本地主机表中。Linux 使用文件 /etc/hosts 来存储这个表。cat /etc/hosts 还有一个分层的、去中心化的基于网络的系统提供解析，称为 域名系统 Domain Name System （DNS）。这时 FQDN 变得非常重要。$ dig www.opensource.com 名称的乐趣为我们的计算机起名字可能很有趣。如果你有很多，你可以使用一个主题。我曾经为一家公司工作，该公司将所有的服务器都以蛇命名。后来我工作的一家公司，我是一个数据中心经理，使用啤酒品牌。当我们收到一个新的服务器时，这很令人兴奋，因为我会给开发团队发邮件征求建议。我们大约有 100 台服务器。这些提供了一个有趣的清单，反映了公司的多样性。我们有从库尔斯和百威到阿姆斯特尔和浅粉象的一切。我们有虎牌啤酒、胜狮啤酒和札幌啤酒等等！我们认为这很酷！然后，想象一下，当你试图记住卢云堡是拥有最多内存的虚拟化服务器，佩罗尼是 SQL 数据库服务器，喜力是新的域控制器时，会发生什么，特别是对于一个快速发展的公司的新员工。惯例当然，主机名是所有者的选择，所以请尽情发挥。然而，根据环境的不同，使用容易记忆的名字或基于命名惯例的名字可能更有意义，因为这些名字有利于描述主机。有用的名字如果你想放弃有趣的东西，并对你的系统进行有益的命名，也许可以考虑它们的功能。数据库服务器可以被命名为 database1、database2、database3 等等。Web 服务器可以命名为 webserver1、webserver2 等等。位置名称我在许多客户那里使用了一种技术，用一组字符的位置来命名服务器主机，这些字符描述了该系统的一个方面，有助于识别。例如，如果我正在为内政部（DOI）开发一个业务流程管理（BPM）系统，我就会在命名规则中加入他们的缩写词。此外，就像许多大型企业、金融机构和政府一样，他们可能有不同的数据中心，位于不同的地理位置，以达到性能或灾难恢复的目的。因此，比如说，位于北美大陆东海岸的数据中心被称为 ED（East Data center），而位于西海岸的数据中心则是 WD（West Data center）。所有这些信息将汇集到一个名称中，如 doibpm1ed 或 doibpm1wd。因此，虽然这些名字看起来不长，但在这个项目上工作的人可以很容易地识别它们的目的和位置，而且这个名字甚至可以对潜在的恶意者混淆它们的用途。换句话说，业主可以选择只对内部人员有意义的命名方式互联网标准有几个标准管理着主机名。你可以在 互联网工程任务组 Internet Engineering Task Force （IETF）维护的 意见征求 Requests for Comment （RFC）中找到这些标准。由此，请遵守以下规定：主机名的长度应该在 1 到 63 个 ASCII 字符之间一个 FQDN 的最大长度为 253 个 ASCII 字符不区分大小写允许的字符：a 到 z，0 到 9，-（连字符），和 _（下划线）。我希望这篇文章能帮助你澄清主机名。玩得开心，发挥创意。via: https://opensource.com/article/21/10/what-hostname作者：Alan Formy-Duval 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
系统上运行着诸多进程，通过 jps 命令能够快速有效识别 Java 进程。在 Linux 中，有一些用于查看系统上运行进程的命令。进程是指由内核管理的正在进行的事件。每启动一个应用程序时，就会产生一个进程，但也有许多在计算机后台运行的进程，如保持系统时间准确的进程、监听新文件系统的进程、索引化文件的进程等。有一些可以用来监测这些进程的实用程序，比如包含在 procps-ng 包 中的程序，但它们往往都是对各种进程通用的。它们会查看计算机上的所有进程，你可以根据需要过滤结果列表。在 Linux 中，可以通过 ps 命令查看进程。这是查看当前系统上运行进程最简单的方法。$ ps PID TTY TIME CMD 4486 pts/0 00:00:00 bash 66930 pts/0 00:00:00 ps 你也可以通过 ps 命令，并配合结果输出管道符进行 grep，从而查看系统上运行的 Java 进程，。$ ps ax |grep java 67604 pts/1 Sl+ 0:18 /usr/lib/jvm/java-11-openjdk-11.0.12.0.7-4.fc34.x86_64/bin/java -D[Standalone] -server -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true --add-exports=java.desktop/sun.awt=ALL-UNNAMED --add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.management/javax.management=ALL-UNNAMED --add-opens=java.naming/javax.naming=ALL-UNNAMED -Dorg.jboss.boot.log.file=/home/alan/wildfly/24.0.1/standalone/log/server.log -Dlogging.configuration=file:/home/alan/wildfly/24.0.1/standalone/configuration/logging.properties -jar /home/alan/wildfly/24.0.1/jboss-modules.jar -mp /home/alan/wildfly/24.0.1/modules org.jboss.as.standalone -Djboss.home.dir=/home/alan/wildfly/24.0.1 -Djboss.server.base.dir=/home/alan/wildfly/24.0.1/standalone 然而，OpenJDK 有自己专属的进程监视器。 Java 虚拟机进程状态 Java Virtual Machine Process Status （jps）工具可以帮你扫描系统上所有运行的 Java 虚拟机（JVM）实例。要想实现与 ps 命令类似的输出，可以使用 -v 选项。这很实用，这与 ps 相比，可以减少你的输入。$ jps -v 67604 jboss-modules.jar -D[Standalone] -Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true --add-exports=java.desktop/sun.awt=ALL-UNNAMED --add-exports=java.naming/com.sun.jndi.ldap=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.security=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.management/javax.management=ALL-UNNAMED --add-opens=java.naming/javax.naming=ALL-UNNAMED -Dorg.jboss.boot.log.file=/home/alan/wildfly/24.0.1/standalone/log/server.log -Dlogging.configuration=file:/home/alan/wildfly/24.0.1/standalone/configuration/logging.properties jps 命令的默认输出包含进程标识符，类名或 Jar 文件名。$ jps 67604 jboss-modules.jar 69430 Jps 注意： jps 的手册页指出此命令是试验性且不受支持的。尽管如此，它仍然是一个不错的选择，因为一个系统通常运行着许多进程，这种只识别 Java 进程的快速方法是很有用的。当下的 Java 仍然是一种流行的语言，所以熟悉 Java 开发工具包和运行时环境仍然很重要。它们包含着许多适用于 Java 应用程序开发和维护的工具。via: https://opensource.com/article/21/10/check-java-jps作者：Alan Formy-Duval 选题：lujun9972 译者：unigeorge 校对：turbokernel本文由 LCTT 原创编译，Linux中国 荣誉推出
手动安装可以让用户更好的控制 Java 运行时环境。使用 Linux 发行版的软件包管理工具来安装 Java 软件包 是很容易的。然而，有时你需要手动安装 Java。这对基于 Java 的应用服务器（如 Tomcat 或 JBoss）的管理员特别重要。许多开源和专有软件产品都依赖于这些服务。开发者或运行时套件？ Java 虚拟机 Java Virtual Machine （JVM）以两种不同的形式提供： Java 开发工具包 Java Development Kit （JDK）或 Java 运行时环境 Java Runtime Environment （JRE）。软件开发人员通常需要 JDK。它包含编译、运行和测试源代码所需的二进制文件。部署一个预先建立的 Java 应用程序通常只需要 JRE。它不包括编译器和其他开发工具。由于安全性的提高和空间的限制，通常在生产环境中安装 JRE。获取 Java你可以从网上下载开源的 Java 软件。你可以在 Red Hat Developer、Adoptium.net 下载 OpenJDK 打包文件，或从 Azul 下载 Zulu 社区版 。安装 Java设置一个目录来存放 Java 文件。我喜欢创建一个简单的名为 java 的目录，这样我就可以在一个专门的目录中下载并解压打包文件：$ mkdir -p java/jdk 让我们在这个例子中使用 JDK。将下载的文件保存到 jdk 目录下。然后换到该目录：$ cd java/jdk $ ls OpenJDK11U-jdk_x64_linux_hotspot_11.0.12_7.tar.gz 提取该打包文件。注意，tar 会创建一个新的目录：$ tar xvzf OpenJDK11U-jdk_x64_linux_hotspot_11.0.12_7.tar.gz $ ls jdk-11.0.12+7 OpenJDK11U-jdk_x64_linux_hotspot_11.0.12_7.tar.gz 使用 -version 选项确认新 JVM 的版本。$ cd jdk-11.0.12+7/bin $ ./java -version JVM 的版本输出看起来类似这样：openjdk version "11.0.12" 2021-07-20 OpenJDK Runtime Environment Temurin-11.0.12+7 (build 11.0.12+7) OpenJDK 64-Bit Server VM Temurin-11.0.12+7 (build 11.0.12+7, mixed mode) 环境变量为了确保一个特定的应用程序能够正常工作，它需要确切地知道如何定位 JVM。有两个主要的变量需要设置：JAVA_HOME 和 PATH。$ echo $JAVA_HOME $ echo $PATH 这些可以在用户的 .bashrc 文件中设置。确保这些变量出现在 任何设置 PATH 的现有代码 之后：#Set the JAVA_HOME export JAVA_HOME=~/java/jdk/jdk-11.0.12+7 #Add the JAVA_HOME to the PATH export PATH="$JAVA_HOME/bin:$PATH" 手动安装的情况有几种情况需要手动安装 Java。请考虑以下三种情况：一种情况可能是要求使用不同的，也许是较早的，在你的 Linux 发行版的软件库中已经没有的 Java 版本。另一个例子可能是由安全推动的决定，即 Java 不会被默认安装在操作系统上或在“根级别”上。第三种情况是可能需要几个不同版本的 Java，通常是因为 J2EE Web 应用程序的多个实例在同一台服务器上运行。由于越来越多地使用虚拟机和容器来隔离进程，这种操作系统共享在今天已经不太常见了。然而，由于需要维护不同的容器镜像，对手动安装的理解仍然至关重要。总结我演示了我手动安装 Java 运行时环境的方式，但你可以制定一个最适合你需求的惯例。最终，手动安装让用户可以更好的控制 Java 运行时环境。via: https://opensource.com/article/21/9/install-java-manually-linux作者：Alan Formy-Duval 选题：lujun9972 译者：wxy 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出