蚊章汇 - David Both
type: channel
link: https://linuxcn.bwsl.wang/author/488/
description: David Both
items: Linux 如何挽救老旧电脑（和地球）
items: 在 Linux 命令行上使用 dict 文字工具
items: 好奇心帮我解决了一个硬件问题
items: 在 Linux 上用 zram 替代传统交换空间
items: Linux 中的 su 和 sudo 命令有什么区别？
items: 我如何使用现场 USB 设备恢复我的 Linux 系统
items: 从命令行远程配置 Xfce4 工作区
items: 我如何在 Linux 上把 Vim 配置为默认编辑器
items: Linux 启动性能分析
items: 如何把 WordPress 网站迁移到新主机

Linux 如何挽救老旧电脑（和地球）
type: item
date: 2023-09-18T07:40:52+08:00
description: 请不要丢弃你的旧电脑。让我们跳过填埋场，利用 Linux 为它注入新的活力。我的两位孙子，Mint 和 Kasen，请求我帮助他们搭建游戏电脑。他们的请求让我感到非常欣喜。这不仅给了我一个与他们共度时光的美好机会，也让我能够帮助他们了解科技。同时，我能深入探讨电脑对环境产生的影响。等一下！这似乎有些离题，对吧？其实并非如此，本文就是为了阐述这个问题。旧电脑的命运是什么？关于旧电脑的处理（以及处理的原因）是我们讨论的核心。首先，普通电脑通常在提供服务五年左右后被替换。理由何在？我在一个名为《CHRON》的面向小企业的刊物的在线文章中找到 这样一篇文章，电脑的寿命被建议在三至五年。这个建议的部分原因是，假定电脑在生命周期的这个阶段开始变慢。这篇文章，以及其他的一些文章，都在鼓励人们在大约同样的时间段内更换更新、速度更快的电脑。当然，这些压力主要来源于电脑和芯片的厂商，他们想要保持收入的增长。再者，美国国税局也通过规定电脑所能完全折旧的时间是五年，以此间接强化了这个服务寿命的观念。我们首先来讨论一下关于电脑会变慢的迷思。电脑实际上是不会变慢的，恒定的时钟速度一直在运作。无论是 2.8GHz 还是 4.5GHz，当电脑忙碌时，它们总是以那个速度运行。当然，当电脑闲置或事情不多时，将会有意识地降低它的时钟速度以节省电力。电脑变慢并不是因为它们变老了。装有 Windows 系统的电脑在使用过程中，会积累大量的恶意软件、间谍软件、广告软件和恐吓软件。这些垃圾软件拖慢了电脑的运行。电脑用户逐渐认为这是正常的，安于电脑性能下降的境况。Linux 驰骋救援作为朋友和熟人心目中的电脑专家，人们有时会将他们不再需要的旧电脑送给我。他们认为电脑运行速度慢，因此选择交给我，并让我在将它们带到我家附近几个街区的电子设备回收中心之前清除硬盘数据。我总是建议他们，那些三到五年的老电脑其实仍然可用，但他们似乎更倾向于花费金钱换新，而非学习一个新的操作系统。我已经收到过几台他人赠送的旧电脑。其中一个十分特别的是一台 Dell Optiplex 755，它配备了一个 2.33 GHz 的 Core 2 Duo 处理器以及 8GB 的 RAM。它的 BIOS 日期为 2010 年，所以现在大约应有 12 岁。这是我拥有的最老的电脑，我总是让它忙个不停。我已经使用它好几年了，且它从未变慢，这是因为我在它上面运行的是 Linux —— 如今是 Fedora 35。如果你认为那是例外，那么我给你更多例子。十年前的 2012 年，我为自己组装了三台电脑，然后在它们所有上安装了 Fedora。至今，它们还在顺利运行，速度一如往昔。这里没有例外，只有 Linux 系统在旧电脑上的正常运作。使用 Linux 至少可以将电脑的使用寿命延长一倍，同时不需要任何额外花费。这就使得这些电脑在进入垃圾填埋场（最差情况）或回收中心（最好情况）之前，可以额外使用五到七年或更久。只要我能找到这些电脑的替换零件，就可以使它们继续运行，远离任何垃圾处理或回收途径。有些电脑的问题在于找到合适的零部件。非标准硬件让我们讨论一下非标准硬件，以及你能在一些知名公司买到的电脑。正如我之前提到的，我有一台旧电脑是 Dell 的。Dell 是一家历史悠久的企业。尽管我不会购买 Dell 的台式机或塔式电脑，但是我会接受捐赠或者作为礼物赠予的 Dell 电脑。我可以在这些旧电脑上安装 Linux，去除 Windows，让它们重新发挥作用。它们在我的家庭实验室里作为测试计算机使用，等等。然而，Dell 使用了一些你无法轻松替换的非标准零部件。当你能找到零部件（如电源和主板）时，它们并不便宜。原因在于，这些制造商设计了搭载非标准电源和主板的系统，只适配他们自家的非标准机箱。这是一种保持收入增长的策略。如果你在市场上找不到这些零部件，你就得去原厂买，并且价格通常非常高。举例来说，我拥有的那台 Dell Optiplex 就使用了不符合通用标准的主板、机箱和电源。换句话说，Dell 的主板或电源可能无法适配我在当地电脑店或亚马逊上购买的标准机箱。这些部件也不适合我孙子们会使用的游戏机箱。主板和电源的安装孔不会与标准机箱对齐。电源适配器不符合标准机箱中可用的空间。而主板上的 PCI 插槽和后板接口在标准机箱中的位置会不对，电源的连接器也与标准主板上的不匹配。最后，那些非标准部件中的一个或多个终究会出现故障，你可能完全找不到替代品，或者至少找不到价格合理的替代品。在这种情况下，处理旧电脑并采购新电脑就变得合情合理了。标准件组装让我们探讨一下使用标准化部件进行电脑组装，以及它们的长寿耐用如何适用于我正在帮助孙子们制造的游戏电脑。大部分主板采用的设计是标准化的，包括微型 ATX、ATX，以及扩展版的 ATX。这些主板在规定的位置上设…

在 Linux 命令行上使用 dict 文字工具
type: item
date: 2023-03-08T23:26:55+08:00
description: Linux 上的 dict 命令对作家来说非常有用，可以为他们的选词提供大量的字典和同义词。作为一个作家，我经常需要确定单词的正确拼写或定义。我还需要使用词库来寻找替代词，这些词的内涵可能与我可能使用的词有些不同。因为我经常使用 Linux 命令行和文本模式工具来完成我的大部分工作，所以使用命令行词典是有意义的。我非常喜欢使用命令行，原因有很多，其中最主要的原因是它对我来说更有效率。它也比任何一本或多本实体纸质字典，都要全面得多。我使用 Linux 的 dict 命令已经很多年了，我已经开始依赖它了。在 Linux 上安装 dictdict 程序在 Fedora 上没有默认安装，但它很容易安装。以下是如何在 Fedora 或类似发行版上安装：$ sudo dnf install dictd 在 Debian 和类似发行版上，你还必须安装字典定义：$ sudo apt install dictd dict-gcide 不需要额外的配置。这个非常简单的 /usr/share/doc/dictd/dict1.conf 文件指定了字典数据库的远程服务器。这个工具使用字典服务器协议（DICT），端口为 2628。在 Linux 上使用 dict在终端会话中，以非 root 用户的身份，输入 dict <word> 来获取一个或多个字典和词库的定义列表。例如，以这种方式查找 memory 这个词。$ dict memory | less 6 definitions found From The Collaborative International Dictionary of English v.0.48 [gcide]: Memory \Mem"o*ry\, n.; pl. {Memories}. [OE. memorie, OF. memoire, memorie, F. m['e]moire, L. memoria, fr. memor mindful; cf. mora delay. Cf. {Demur}, {Martyr}, {Memoir}, {Remember}.] [1913 Webster] 1. The faculty of the mind by which it retains the knowledge of previous thoughts, impressions, or events. [1913 Webster] Memory is the purveyor of reason. --Rambler. [1913 Webster] 2. The reach and positiveness with which a person can remember; the strength and trustworthiness of one's power to reach and represent or to recall the past; as, his memory was never wrong. [1913 Webster] <SNIP> From WordNet (r) 3.0 (2006) [wn]: memory n 1: something that is remembered; "search as he would, the memory was lost" 2: the cognitive processes whereby past experience is remembered; "he can do it from memory"; "he enjoyed remembering his father" [syn: {memory}, {remembering}] 3: the power of retaining and recalling past experience; "he had <SNIP> From Moby Thesaurus II by Grady Ward, 1.0 [moby-thesaurus]: 78 Moby Thesaurus words for "memory": RAM, anamnesis, anniversaries, archetypal pattern, archetype, awareness, celebrating, celebration, ceremony, cognizance, commemoration, consciousness, disk memory, dressing ship, <SNIP> From The Free On-line Dictionary of Computing (30 Decem…

好奇心帮我解决了一个硬件问题
type: item
date: 2023-02-22T00:43:20+08:00
description: 好奇心能激发人们对于知识和真理的渴求，无论是对于硬件、开源软件、编程、组装个人电脑、优化系统设置，还是只是学习使用一个新软件。我通常在家架设运行一个由一打计算机组成的家庭网络 —— 没错，正好 12 台计算机。同时我还负责其它地方的一些计算机维护工作。由于计算机很多，总会出现各种各样的故障，其中有很多最终确诊为硬件问题。但是要判定出是哪个硬件设备引发的故障却是一件难事。就在这周，我的主工作站上出现了一个棘手的问题，导致我两次误判了问题的原因。本文将带你跟随我排查问题的过程。我将告诉你我在哪一步做了错误的判断以及为什么，还有误判是多么容易发生。最初的症状我手上一直有好几个项目。最近，我在几台台式机上打开了很多应用程序，我刚开始工作，突然就黑屏了。主工作站的大多数（不是全部）风扇都停了，这让我倒吸一口凉气。我从来没有遇到过这种情况，但显然我的系统出问题了。我有两条主要线索可以跟进：一是显示黑屏，二是有些风扇不转了。但是前面板上的电源和磁盘活动指示灯还是亮的，只是比平常要暗一点。大多数安装在主板、内存条和风扇上的 RGB 装饰灯也都灭了。我试过按电源键和重启键，都没有反应。我直接按供电单元的船型开关关闭了电源。重新供电后还是出现了刚才的症状。最初的猜想问题的现象和我数十年处理各类故障的经验将原因指向了供电问题。我将供电单元拆了下来并用电源测试仪对它进行了检查。结果是供电单元没有任何问题，各项电压都符合规范。当然测试仪的结果也可能是错误的。测试仪并没有在满负荷状态下进行测试，比如计算机运行中耗电几百瓦的情况。我凭直觉更换了一个一千瓦的备用电源。由于我的家庭网络中有 12 台计算机，我已经习惯准备了一些备用配件在身边。这样当有配件损坏时，我就不必非得跑一趟附近的电脑城或者网购后等快递了。由于计算机这么多，配件损坏是经常的事。虽然电源测试仪告诉我电源没有问题，但更换电源后问题确实消失了。即便检测仪在过去都是正确的，我的经验、知识和直觉告诉我就是电源问题。不幸的是，我的直觉错了。第二个猜想没过多久我的工作站再次又了相同的问题。但两个不同的供电单元有相同问题的可能性太低了。我马上想到那一定是主板出问题了。我没有备用的主板，所以网购了一块新主板。我想到其实可以用上手上多余的内存条，然后把 CPU 连同一体水冷单元一起装到新主板上。专业的故障排查新主板需要几天天才能送到，所以我决定先将工作站上的旧主板拆下来。就在拔掉主板供电之前，我的好奇心显现，并驱使我给只剩主板、CPU 和内存的系统开机。我已经把其它的部分都拆掉了。好的故障排除过程需要分离所有潜在变量，目前我只是对供电单元进行了测试。我需要对每个组件都进行测试。这需要我先拔掉前面板上的扬声器和多功能面板连接线。多功能面板上集成了各种 USB、SATA 和内存卡插槽。令人惊讶的是，当只有主板通电时竟然一切正常。计算机本身无法开机，因为根本没有连接存储器。也不会有显示输出，因为我已经把显卡拆掉了。但是没有电源或主板故障的迹象。这进一步激发了我的好奇心。如果主板真的有问题的话，故障现象应该仍然存在才对。所以我开始一系列的重复试验：断电，安装一个已经拆掉的配件，重新上电。最终发现问题上由前置多功能面板引发的。我拆除了多功能面板并将其它零件全部装了回去。工作站开机正常，运行良好。终于让我逮到罪魁祸首了。起因弄清真正的问题之后，我立刻就明白了问题的根本原因。这还要从几天前说起。那时我正在测试一些外接 USB 设备，包括几种摄像头、几个用于备份的存储设备和一个外接 USB 集线器。我把一根 USB 连接线插到了多功能面板上的一个 USB 2.0 插口中。所有东西都停摆了，大部分灯熄灭了，风扇也不转了。USB 连接线发热很严重，我拔掉它时还把手指烫伤了。原来我不小心将连接线的 C 型插头插到了一个 USB 3.0 A 型插口里，导致了供电短路。拔掉 USB 连接线之后，一切都恢复了“正常” —— 但事实并非如此。我粗心的错误对多功能面板造成了损伤，它在坚持了几天之后彻底短路了。妄下结论知识和经验有时候比电源测试仪之类的工具更重要。当然知识跟经验有时候也不管用。我最终找到了问题的真正原因，但其实我本该早就发现的。尽管我在问题跟供电有关这一点上是对的，但还是误入歧途了。原因是我没能正确解读问题现象并根据线索调查得出逻辑结论导致的。我本可以更早找出问题的根本原因的，这样就不至于在修好主工作站之前浪费那么多时间在将我的笔记本变成临时主要设备上了。系统管理员总与复杂的设备打交道，过早下结论在所难免。我有超过 50 年的从业经验，还是犯了这样的错误。我只需记住做几个 深呼吸，然后刨根问底直到找到问题的根本原因。好奇心至少在等待新主板到货期间，我遵循了自己的好奇心。这让我比等新主板到货要早得多将事情恢复正常。同时也避免了我…

在 Linux 上用 zram 替代传统交换空间
type: item
date: 2023-01-28T19:39:43+08:00
description: zram 是一个用于创建内存压缩缓存的工具，特别是可以用作交换空间。我在我的电脑上花了很多时间（我是说工作），我发现了很多有趣的东西。其中最近引起我注意的是 zram0 设备。我是在几个月前写一篇文章时第一次注意到它，它显示在 lsblk 命令的输出中：# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 931.5G 0 disk ├─sda1 8:1 0 600M 0 part [...] zram0 252:0 0 8G 0 disk [SWAP] 它被识别为交换空间，这就是首先引起我的好奇心的原因，所以我做了一些研究。zram 最初被称为 “ 压缩缓存 compcache ”，即 “压缩的高速缓存”。事实证明，zram 是一个用于创建内存内压缩缓存的工具，特别是作为交换空间使用。但为什么呢？当我开始研究 zram 时，我只发现了几篇关于将 zram 用于交换空间的基础文章。起初，这对我来说似乎有点违反直觉。毕竟，如果你的内存快用完了，你把页面交换到内存中的虚拟驱动器中，有什么好处呢？然后我找到了 Fedora 项目的维基页面，它提议使用 zram 交换空间 swap-on-zram 。该建议说：“交换是有用的，除了它的速度很慢。zram 是一个使用了压缩的内存驱动器。在启动时创建一个 zram 交换空间，并且不再使用默认的交换分区。”该页面的其余部分是关于它的细节、好处、副作用和反馈。Linux 上用于交换空间的 zram使用 zram 作为交换空间，与常规的基于分区或基于文件的交换空间做的事情相同。当内存压力过大时，一些最近使用最少的数据会被移到交换空间。平均来说，它会被压缩到其原始大小的 50% 左右，并被放置在内存的 zram 空间中。这比将这些内存页存储在硬盘上要快得多，并可以释放出它所使用的内存用于其他用途。节省交换空间我试图找到关于配置多少交换空间或 zram 交换空间的总结建议。这使我重新回顾了交换空间的设置，以及我之前的文章《现代 Linux 系统的正确交换空间是多少？》。就我所知，从 RHEL 和 Fedora 的最新文档来看，推荐的交换空间数量并没有改变。不过，该文档忽略了 zram 的使用。然而，在不使用 zram 的旧版 Linux 或 zram 被禁用的情况下，之前文章中的表格仍然为交换空间的分配提供了一个好的起点。我找到的关于 zram 功能的文档在 zram 如何根据内存大小分配空间，以及分配给 zram 交换空间的数量方面是不一致的。由于缺乏权威性的文档，我进行了一些实验来凭经验确定用于分配 zram 交换空间的算法。我为此使用了我自己的物理和虚拟系统。结果很有趣，与我迄今为止发现的任何文档都不一致。在所有足够大的系统上，zram 的默认大小是 8GB，但在内存较小的主机上通常会大大减少。在我用于测试的一台虚拟机（VM）上，可以访问 4GB 的内存，zram 的虚拟交换空间被分配为 3.8GB。我的一台旧戴尔电脑拥有 8GB 的内存，zram 被设置为 7.6GB。当内存减少到 2GB 时，zram 就减少到 1.9GB。我拥有的所有内存超过 8GB 的物理和虚拟主机都显示正好是 8GB 的 zram。这包括我拥有 64GB 内存的主工作站和其他拥有 16GB 或 32GB 内存的主机。基于这几个数据点，我可以得出这样的结论：目前的默认设置是最多 8GB 的 zram，而在 8GB 或以下的主机上，zram 占内存的 95%。我读过一些文章，其中提到了 zram 交换空间的其他大小，甚至高达 100% 的内存，但这些似乎都是理论上的，而不是现实。你的发行版可能不同，但这里是 Fedora 和类似发行版的实际 zram 交换空间的分配情况：内存 ⇐ 8 GB：0.95 × 内存内存 > 8 GB:8 GB请注意，zram 交换空间大小的算法并没有基于对任何给定的现实世界的系统或应用程序的 “最佳” 交换大小的建议。这种 zram 交换空间的分配是一种相当概率性的方法，它应该在广泛的 Linux 主机上运行良好。然而，最大的 zram 交换空间大小被配置为 8GB，而且我一直推荐 8GB 作为传统交换空间的最大容量，我想我可以说它反映了 zram 交换空间的最佳大小。管理 zram 交换空间zram 的默认值保存在 /usr/lib/systemd/zram-generator.conf 配置文件中。以下是我的一个测试虚拟机，分配了 5097GB 的内存。# cat /usr/lib/systemd/zram-generator.conf # This config file enables a /dev/zram0 devic…

Linux 中的 su 和 sudo 命令有什么区别？
type: item
date: 2022-12-15T01:12:22+08:00
description: 本文将比较非 root 用户提权为 root 用户的两个 Linux 命令 的区别。su 和 sudo 命令都允许用户执行非特权用户不允许做的系统管理任务，即只有 root 用户能执行的命令。有些人更喜欢 sudo 命令：例如 Seth Kenlon 最近发布的一篇 《在 Linux 上使用 sudo 的 5 个理由》，他在其中详细阐述了 sudo 命令的许多优点。但是，相较于 sudo 命令，我更偏好于 su 命令 来做系统管理工作。在本文中，我比较了这两个命令的区别，并解释了为什么我更喜欢 su 而不是 sudo，但我仍然同时使用这两个命令的原因。过去的系统管理员主要使用 su 命令su 和 sudo 命令是为不同的世界设计的。早期的 Unix 计算机需要全职系统管理员，他们使用 root 用户作为唯一的管理帐户。在这个古老的世界里，有管理员密码的人会在电传打字机或 CRT 终端（例如 DEC VT100）上以 root 用户登录，然后执行一些管理 Unix 计算机的工作。管理员还会有一些非 root 帐户，用于执行一些非 root 的任务，例如编写文档和管理电子邮件等。在这些 Unix 计算机上通常有许多非 root 帐户，他们都不需要完全的 root 访问权限，只需要以 root 权限运行很少的命令，大约 1 至 2 个就可以了。许多系统管理员以 root 用户登录，完成 root 工作，并在任务完成后，退出 root 会话。有时候，系统管理员需要整天以 root 用户来登录，因为 sudo 命令需要键入更多的内容才能运行必要的命令，因此大多数系统管理员很少使用 sudo 命令。sudo 和 su 这两个命令都能够提权为 root 用户，但它们实现的方式大不相同。这种差异是由于它们最初打算用于不同的情况。sudo 命令sudo 命令的初衷是让 root 用户能够让几个非 root 用户访问他们经常需要的一两个特权命令。sudo 命令允许非 root 用户暂时地获得更高权限，来执行一些特权命令，例如添加和删除用户、删除属于其他用户的文件、安装新软件以及管理现代 Linux 主机所需的任何命令。sudo 命令允许非 root 用户访问一两个 需要更高权限 的常用命令，这样可以帮助系统管理员节省来自用户的许多请求，并减少等待时间。sudo 命令不会将用户帐户切换为 root 用户，因为大多数非 root 用户永远不应该拥有完全的 root 访问权限。在大多数情况下，sudo 允许用户执行一两个命令，然后提权就会过期。在这个通常为 5 分钟的短暂的提权时间内，用户可以执行任何需要提权的管理命令。需要继续使用提权的用户可以运行 sudo -v 命令来重新验证 root 访问权限，并将提权时间再延长 5 分钟。使用 sudo 命令还有一些副作用，例如生成非 root 用户使用命令的日志条目及其 ID。这些日志可以在之后作为出现问题的检验，来给用户更多的操作培训。（你以为我会说“问责”用户，对吧？）su 命令su 命令能够将非 root 用户提权到 root 权限 —— 事实上，能让非 root 用户成为 root 用户。唯一的要求是用户知道 root 密码。因为用户已经以 root 权限登录，所以之后的操作就没有限制了。su 命令所提供的提权没有时间限制。用户可以作为 root 执行命令，不需要进行重新验证是否有 root 权限。完成任务后，用户可以执行退出命令 exit，从 root 用户恢复到自己原来的非 root 帐户。su 和 sudo 在使用上的争议和变化最近在 su 与 sudo 的使用上存在一些分歧。真正的系统管理员不会使用 sudo。—— Paul VeneziaVenezia 在他的 InfoWorld 文章 中辩称，对于许多担任系统管理员的人来说，sudo 是一个不必要的工具。他没有花太多时间为这个观点进行解释，他只是把它说成了一个事实。我同意他对于系统管理员的观点，因为我们不需要 sudo 来完成我们的工作。事实上，sudo 使得事情变得更复杂了。然而，时代在“改变”。—— Bob DylanBob Dylan 是对的，尽管他唱的歌不是指计算机（LCTT 译注：Bob Dylan 是美国创作歌手、艺术家和作家，这里指他不是针对于电脑而说的）。自从人手一台的个人计算机时代到来，计算机的管理方式发生了重大变化。在许多环境中，计算机的使用者也是它的管理员，这使得为这些用户提供一些对 root 权限的访问是有必要的。一些现代发行版，例如 Ubuntu 及其衍生版本，只能使用 sudo 命令来执行特权命令。在这些发行版中，用户无法直接以 root 用户身份登录，甚至无法通过 su 切换到 root，因此需要 sudo …

我如何使用现场 USB 设备恢复我的 Linux 系统
type: item
date: 2022-09-28T20:12:00+08:00
description: Fedora 现场 USB 发行版为引导和进入恢复模式提供了有效的解决方案。我的家庭实验室里有十几台物理计算机以及更多的虚拟机。这些系统中的大多数是我用来进行测试和实验的。我经常写使用自动化来简化系统管理任务的文章。我还在多个地方写过，我从自己的错误中学到的东西比几乎任何其他方式都多。在过去的几周里，我学到了很多东西。我给自己制造了一个大麻烦。作为多年的系统管理员，我写了数百篇关于 Linux 的文章和五本书，我应该对 Linux 更了解。话又说回来，我们都会犯错，这是一个重要的教训：你永远不会因为有经验而不犯错。我不打算讨论我的错误的细节。告诉你这是一个错误就足够了，在我做之前我应该多考虑一下我在做什么。此外，细节并不是重点。经验不能让你免于犯下的每一个错误，但它可以帮助你恢复。这就是本文要讨论的内容：使用现场 USB 发行版启动并进入恢复模式。问题首先，我制造了问题，这本质上是 /etc/default/grub 文件的错误配置。接下来，我使用 Ansible 将错误配置的文件分发到我所有的物理计算机并运行 grub2-mkconfig。全部 12 个。这真的，真的很快。除了两台之外，所有的都无法启动。它们在 Linux 启动的早期阶段崩溃，出现各种无法定位 /root 文件系统的错误。我可以使用 root 密码进入“维护”模式，但是如果没有挂载 /root，即使是最简单的工具也无法访问。直接引导到恢复内核也不起作用。系统真的被破坏了。Fedora 恢复模式解决此问题的唯一方法是找到进入恢复模式的方法。当一切都失败时，Fedora 提供了一个非常酷的工具：用于安装 Fedora 新实例的 现场 USB Live USB 驱动器。将 BIOS 设置为从现场 USB 设备启动后，我启动到 Fedora 36 Xfce 的 现场 live 用户桌面。我在桌面上打开了两个相邻的终端会话，并在两者中都切换到了 root 权限。我在其中一个运行了 lsblk 以供参考。我使用该结果来识别 / 根分区以及 boot 和 efi 分区。我使用了我的一台虚拟机，如下所示。在这种情况下没有 efi 分区，因为此 VM 不使用 UEFI。# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 1.5G 1 loop loop1 7:1 0 6G 1 loop ├─live-rw 253:0 0 6G 0 dm / └─live-base 253:1 0 6G 1 dm loop2 7:2 0 32G 0 loop └─live-rw 253:0 0 6G 0 dm / sda 8:0 0 120G 0 disk ├─sda1 8:1 0 1G 0 part └─sda2 8:2 0 119G 0 part ├─vg01-swap 253:2 0 4G 0 lvm ├─vg01-tmp 253:3 0 10G 0 lvm ├─vg01-var 253:4 0 20G 0 lvm ├─vg01-home 253:5 0 5G 0 lvm ├─vg01-usr 253:6 0 20G 0 lvm └─vg01-root 253:7 0 5G 0 lvm sr0 11:0 1 1.6G 0 rom /run/initramfs/live zram0 252:0 0 8G 0 disk [SWAP] /dev/sda1 分区很容易识别为 /boot，根（/）分区也很明显。在另一个终端会话中，我执行了一系列步骤来恢复我的系统。特定的卷组名称和设备分区（例如 /dev/sda1）因系统而异。此处显示的命令特定于我的情况。目标是使用现场 USB 引导并完成启动，然后仅在镜像目录中挂载必要的文件系统，并运行 chroot 命令在 chroot 镜像目录中运行 Linux。这种方法绕过损坏的 GRUB（或其他）配置文件。但是，它提供了一个完整的运行系统，其中安装了所有原始文件系统以进行恢复，既是所需工具的来源，也是要进行更改的目标。以下是步骤和相关命令：创建目录 /mnt/sysimage 以提供 chroot 目录的位置。将根分区挂载到 /mnt/sysimage：# mount /dev/mapper/vg01-root /mnt/sysimage 将 /mnt/sysimage 设为你的工作目录：# cd /mnt/sysimage 挂载 /boot 和 /boot/efi 文件系统。挂载其他主要文件系统。此步骤不需要像 /home 和 /tmp 这样的文件系统：# mount /dev/mapper/vg01-usr usr # mount /dev/mapper/vg01-var var …

从命令行远程配置 Xfce4 工作区
type: item
date: 2022-06-30T19:47:51+08:00
description: 几乎所有的事情都可以从 Linux 命令行完成，包括对 Xfce4 进行远程配置。与专有操作系统相比，我很欣赏 Linux 的一个特点是，几乎所有的东西都可以从命令行中进行管理和配置。意味着几乎所有的事情都可以在本地或者通过 SSH 远程登录进行管理。虽然有时候需要花费一点时间在互联网上搜索，但是你能想到的任务，是有可能从命令行完成的。问题有时候需要使用命令行对桌面进行远程配置。在这种特殊情况下，我需要响应远程用户的请求将在 Xfce 控制板上的工作区从四个减少到三个。这种配置只需要在互联网上搜索约 20 分钟就找到了。xfwm4 的默认工作区数量和许多其他设置可以在 /usr/share/xfwm4/defaults 这个文件中找到和修改。因此将 workspace_count=2 设置为 workspace_count=4 就改变了主机上所有用户的默认值。同时，非 root 用户可以执行 xfconf-query 命令来查询和设置 xfwm4 窗口管理器的各种属性。它应该由需要改变设置的用户使用，而不是由 root 使用。在下面的例子中，首先我验证了当前工作区数量为 4 ，然后将数量改为 2，最后确认了新设置。[user@test1 ~]# xfconf-query -c xfwm4 -p /general/workspace_count 4 [user@test1 ~]# xfconf-query -c xfwm4 -p /general/workspace_count -s 2 [user@test1 ~]# xfconf-query -c xfwm4 -p /general/workspace_count 2 [user@test1 ~]# 此更改会立即生效，用户可以马上看到，无需重新启动，甚至无需注销并重新登录。我曾在我的工作站上玩过这个游戏，当我输入设置不同数量的工作空间的命令时，可以观察到工作空间切换器的变化。我在哪儿都能找到乐子。;- )更多探索现在我解决了这个问题，我决深入了解一下 xfconf-query 命令。不幸的是，该工具没有手册或信息页，/usr/share 中也没有任何文档。退而求其次，使用 -h 选项获取一些帮助信息。$ xfconf-query -h Usage: xfconf-query [OPTION…] - Xfconf commandline utility Help Options: -h, --help 显示帮助选项 Application Options: -V, --version 版本信息 -c, --channel 查询/修改通道 -p, --property 查询/修改属性 -s, --set 更新权限的值 -l, --list 罗列属性（或者通道，如果没有用 -c 指定） -v, --verbose 详细输出 -n, --create 当新属性不存在，则创建它 -t, --type 指定属性值类型 -r, --reset 重置属性 -R, --recursive 递归（与 -r 一起使用） -a, --force-array 即使只有一个元素也强制采用数组 -T, --toggle 反转现有的布尔属性 -m, --monitor 监视属性更改的通道 这没有多大帮助，但我们还是可以从中找出一些有用的东西。首先，通道 是可以修的属性的分组。我对 general 通道下的 workspace_count 属性进行了更改。让我们看看完整的通道列表：$ xfconf-query -l Channels: xfwm4 xfce4-keyboard-shortcuts xfce4-notifyd xsettings xfdashboard thunar parole xfce4-panel xfce4-appfinder xfce4-settings-editor xfce4-power-manager xfce4-session keyboards displays keyboard-layout ristretto xfcethemer xfce4-desktop pointers xfce4-settings-manager xfce4-mixer 给定通道的属性也可以用下列的命令来查看。我使用 less 分页器，因为结果是一长串数据。我对下面的列表进行了裁剪，但留下了足够多的条目，你可以看到这些条目的类型。$ xfconf-query -c xfwm4 -l | less /general/activate_action /general/borderless_maximize /general/box_move /general/box_resize /general/b…

我如何在 Linux 上把 Vim 配置为默认编辑器
type: item
date: 2022-04-16T01:29:00+08:00
description: Vim 是我最喜爱的编辑器。对于那些默认使用其他编辑器的程序，我对系统所做的这些改变可以使得 Vim 成为它们默认编辑器。我使用 Linux 大概有 25 年了，在那之前我还使用了几年的 Unix。在这段时间里，我对一些日常使用的工具形成了偏好。Vim 是我使用的最重要的工具之一。我在 90 年代初学习 Solaris 时，就开始使用 Vi 了，因为有人告诉我，它在任何系统上都能使用。从我的经验来看，确实是这样。我也试过其他编辑器，它们都能够胜任工作。但是，对于我来说，Vim 的使用效果最好。我经常使用它，以至于形成了肌肉记忆，甚至我在使用其他编辑器时也会下意识地去按 Vim 的快捷键。另外，我只是单纯地喜欢 Vim 而已。许多配置文件使用的名字是 Vi 而不是 Vim，你可以运行 vi 命令。不过，vi 命令其实是 vim 命令的一个链接。许多 Linux 工具使用的编辑器都是在模拟或是直接调用的 Nano、Emacs 或者 Vim。其他的一些工具允许用户（比如那些有着明确偏好的用户）使用他们喜欢的编辑器。举两个对我影响最大的例子，一个是 Bash 命令行，它默认使用 Emacs；另一个是 Alpine 文本模式的邮件客户端，它默认使用 Pico。事实上，Pico 是专门为 Pine 邮件客户端编写的，而 Pine 是 Alpine 的前身。并非所有使用外部编辑器的程序都是可配置的。有些程序只使用开发者指定的编辑器。对于那些可配置的应用程序，有不同的方法来选择你喜欢的编辑器。在 Linux 命令行中编辑除了实际编辑文本文件外，另一个我经常使用，且和编辑密切相关的工具是 Bash shell。Bash 的默认编辑器是 Emacs。虽然我也用过 Emacs，但我肯定更喜欢 Vim。所以很多年前，我把 Bash 命令行的默认编辑器从 Emacs 换成了 Vim，这对我来说更舒服。有很多种方法可以配置 Bash。你可以使用一个本地配置文件，比如 /home/yourhomedirectory/.bashrc，它只对你的用户账户进行默认修改，而不对同一系统的其他用户进行修改。我个人倾向于让这些改变成为全局性的，基本上就是我的个人账户和 root。如果你也想全局配置，你可以创建你自己的配置文件，并把它放在 /etc/profile.d 目录中。我在 /etc/profile.d 中添加了一个名为 myBashConfig.sh 的文件。/etc/profile.d 目录中存放了所有已安装的 shell 的启动文件。在启动终端会话时，每个 shell 仅会根据文件名的扩展名，读取为其准备的启动文件。例如，Bash shell 只读取扩展名为 .sh 的文件。<截断> alias vim='vim -c "colorscheme desert" ' # 把 vi 设置为 Bash 的默认编辑器 set -o vi # 为所有检查 $EDITOR 变量的程序设置默认编辑器为 vi EDITOR=vi <截断> 在这个全局 Bash 配置文件段中，set -o vi 将 Vi 设置为默认编辑器。这个 set 命令中的 -o 选项将 vi 定义为编辑器。为使配置生效，你需要关闭所有正在运行的 Bash 会话，并打开新的会话。现在，你现在可以使用所有你熟悉的 Vim 命令，包括光标移动。只要按下 Esc 键就可以进入 Vim 编辑模式。我特别喜欢多次使用 b 将光标移回多个字的功能。将 Vim 设置为其他程序的默认值一些 Linux 命令行工具和程序会检查 $EDITOR 环境变量来决定使用哪个编辑器。你可以用下面的命令检查这个变量的当前值。我在一个新安装的虚拟机上运行过该命令，以查看默认的编辑器到底是什么。# echo $EDITOR /usr/bin/nano # 默认情况下，检查 $EDITOR 环境变量的 Fedora 程序会使用 Nano 编辑器。在 myBashConfig.sh 中添加一行 EDITOR=vi（如上面的片段所示），可以将默认值改为 Vi（Vim）编辑器。然而，不是所有使用外部编辑器的命令行程序都会检查这个环境变量。在 Alpine 中编辑电子邮件几周前，我认为 Pico 不太适合作为我的电子邮件编辑器。我可以使用它，而且在从 Thunderbird 转到 Alpine 之后的一段时间内我也用了一段时间。但我发现，Pico 妨碍了我，我总是习惯使用 Vim 按键序列，这影响了我的工作效率。我在 Alpine 的用户帮助中看到，默认编辑器是可以修改的。我决定把它改成 Vim。实际上这很容易做到。在 Alpine 主菜单上，按 S 键进入设置，然后按 C 键进行配置。在 “ 编辑器设置 Composer Preference…

Linux 启动性能分析
type: item
date: 2022-04-12T20:09:18+08:00
description: 用 systemd-analyze 洞悉并解决 Linux 启动性能问题。系统管理员的一部分工作就是分析系统性能，发现并解决引起性能不佳、启动时间长的问题。系统管理员也需要去检查 systemd 的配置和使用的其它方面。systemd 初始化系统提供了 systemd-analyze 工具，可以帮助发现性能问题和其他重要的 systemd 信息。在以前的文章《分析 systemd 日历和时间跨度》里，我用了 systemd-analyze 去分析 systemd 里的时间戳和时间跨度，但是这个工具还有很多其他用法，这个文章里我将再揭示一些。（LCTT 译注：systemd 是目前主流 Linux 发行版采用的系统管理系统）（LCTT 译注：为了区分英文的 “boot” 和 “startup” 的不同涵义，此处将 “boot” 翻译为“引导”，“startup” 翻译为“启动”。）概述启动Linux 启动过程是值得学习关注的地方，因为 systemd-analyze 工具很多功能聚焦在 启动 startup 过程。但是首先，要理解 引导 boot 和 启动 startup 。引导阶段从 BIOS 加电自检（POST）开始，结束于内核完成加载并控制主机系统，然后是开始了启动过程，也是 systemd 日志的开始点。这个系列的第二篇文章《理解 Linux 启动时的 systemd》中，我详细讨论了启动阶段的内容和过程。在这篇文章里，我想研究一下启动过程，看看需要多少时间和大部分时间花费在哪里。下面我将展示的结果来自我的主要工作站，这比虚拟机的结果要有趣得多。这个工作站包括一块 华硕 TUF X299 Mark 2 主板、一个英特尔 i9-7960X CPU（16 核 32 线程），64 G 内存。下面的一些命令非 root 用户也可以使用，但是我在这篇文章里使用了 root 用户，以避免在用户之间切换。检查启动过程有几种方法，最简单的 systemd-analyze 命令显示了启动的几个主要部分耗费的时间，包括内核启动、装载运行 initrd（即初始 ramdisk，这是一个用来初始化一些硬件、挂载 / 根文件系统的临时系统镜像），还有用户空间（加载所有使主机达到可用状态的程序和守护程序）。如果没有像该命令传递子命令，默认是 systemd-analyze time：[root@david ~]$ systemd-analyze Startup finished in 53.921s (firmware) + 2.643s (loader) + 2.236s (kernel) + 4.348s (initrd) + 10.082s (userspace) = 1min 13.233s graphical.target reached after 10.071s in userspace [root@david ~]# 这个输出中最值得注意的数据是在固件（BIOS）中花费的时间：几乎 54 秒。这是一个不太正常的时间，我的其他物理系统都没有花费这么长的时间来通过 BIOS。我的 System76 Oryx Pro 笔记本在 BIOS 阶段只花了 8.506 秒，我家里所有的系统都在 10 秒以内。在线搜索一阵之后，我发现这块主板以其超长的 BIOS 引导时间而闻名。我的主板从不“马上启动”，总是挂起，我需要关机再开机，BIOS 报错，按 F1 进入 BIOS 设置，选择要引导的驱动器完成引导，多花费的时间就是这样用掉的。不是所有主机都会显示固件数据（LCTT 译注：固件引导中不涉及 systemd）。我的不科学的实验使我相信，这个数据只显示给英特尔 9 代或以上的处理器。但这可能是不正确的。这个关于引导、启动的概述提供了很好的（虽然有限）的信息，但是还有很多关于启动的信息，我将在下面描述。分配责任你可以用 systemd-analyze blame 来发现哪个 systemd 单元的初始化时间最长。其结果按照初始化时间长短排序，从多到少：[root@david ~]$ systemd-analyze blame 5.417s NetworkManager-wait-online.service 3.423s dracut-initqueue.service 2.715s systemd-udev-settle.service 2.519s fstrim.service 1.275s udisks2.service 1.271s smartd.service 996ms upower.service 637ms lvm2-monitor.service 533ms lvm2-pvscan@8:17.service 520ms dmrai…

如何把 WordPress 网站迁移到新主机
type: item
date: 2022-03-19T20:43:23+08:00
description: 使用这个简单的方法来迁移一个网站以及管理防火墙配置。你有过把一个 WordPress 网站迁移到一台新主机上的需求吗？我曾经迁移过好多次，迁移过程相当简单。当然，的的市场时候我都不会用通用的推荐方法，这次也不例外 —— 我用更简单的方法，这才是我推荐的方法。这个迁移方法没有破坏性，因此如果出于某些原因你需要还原到原来的服务器上，很容易可以实现。一个 WordPress 网站的组成部分运行一个基于 WordPress 的网站有三个重要组成部分：WordPress 本身，一个 web 服务器，如 Apache（我正在用），以及 MariaDB。MariaDB 是 MySQL 的一个分支，功能相似。业界有大量的 Web 服务器，由于我使用了 Apache 很长时间，因此我推荐用 Apache。你可能需要把 Apache 的配置方法改成你用的 Web 服务器的方法。初始配置我使用一台 Linux 主机作为防火墙和网络路由。在我的网络中 Web 服务器是另一台主机。我的内部网络使用的是 C 类私有网络地址范围，按 无类别域间路由 Classless Internet Domain Routing （CIDR）方式简单地记作 192.168.0.0/24。对于防火墙，相比于更复杂的 firewalld，我更喜欢用非常简单的 IPTables。这份防火墙配置中的一行会把 80 端口（HTTP）接收到的包发送给 Web 服务器。在 /etc/sysconfig/iptables 文件中，你可以在注释中看到，我添加了规则，把其他入站服务器连接转发到同一台服务器上合适的端口。# Reroute ports for inbound connections to the appropriate web/email/etc server. # HTTPD goes to 192.168.0.75 -A PREROUTING -d 45.20.209.41/255.255.255.248 -p tcp -m tcp --dport 80 \ -j DNAT --to-destination 192.168.0.75:80 我使用 命名虚拟主机 named virtual host 来配置原来的 Apache Web 服务器，因为我在这个 HTTPD 实例上运行着多个网站。使用命名虚拟主机配置是个不错的方法，因为（像我一样）未来你可能会在运行其他的网站，这个方法可以使其变得容易。/etc/httpd/conf/httpd.conf 中需要迁移的虚拟主机的网站相关部分请参考下面代码。这个片段中不涉及到 IP 地址的修改，因此在新服务器上使用时不需要修改。<VirtualHost *:80> ServerName www.website1.org ServerAlias server.org DocumentRoot "/var/website1/html" ErrorLog "logs/error_log" ServerAdmin me@website1.org <Directory "/var/website1/html"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> </VirtualHost> 在迁移之前，你需要在 httpd.conf 的最顶端附近找到 Listen 声明并修改成类似下面这样。这个地址是服务器的真实私有 IP 地址，不是公开 IP 地址。Listen 192.168.0.75:80 你需要修改新主机上 Listen 的 IP 地址。前期工作准备工作分为以下三步：安装服务配置防火墙配置 web 服务器安装 Apache 和 MariaDB如果你的新服务器上还没有 Apache 和 MariaDB，那么就安装它们。WordPress 的安装不是必要的。dnf -y install httpd mariadb 新服务器防火墙配置确认下新服务器上的防火墙允许访问 80 端口。你\_每台\_电脑上都有一个防火墙，对吗？大部分现代发行版使用的初始化配置包含的防火墙会阻止所有进来的网络流量，以此来提高安全等级。下面片段的第一行内容可能已经在你的 IPTables 或其他基于防火墙的网络过滤器中存在了。它标识已经被识别为来自可接受来源的入站包，并绕过后面的其它 INPUT 过滤规则，这样可以节省时间和 CPU 周期。片段中最后一行标识并放行 80 端口新进来的请求到 HTTPD 的连接。-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT <删节> # HTTP -A IN…