就算你是素食主义者或对海鲜有过敏反应，也值得试试 Fish ?Bash 是使用最广泛的 Shell，Zsh 则是开发者圈里最受青睐的，但 Fish 往往被许多人忽视。这绝非夸张之辞。Fish 的确是个备受忽视的 Shell，它对新手和资深的自由开源软件用户，都可能是极好的选择。Fish 提供了一系列吸引人的功能，使其具有鲜明优势。这其中包括了从语法高亮到缩写（我个人最喜欢的部分），这里面充满了种种新奇。下面，我要和大家分享一些我最青睐的 Fish Shell 特性。1、语法高亮在错误的命令被执行之前就识别出它们将大大节省你的时间，同时降低你的挫败感。现代的许多代码编辑器都内置了语法高亮功能，而 Fish 不仅将此功能内置在了 Shell 中，而且对于 Linux 命令也同样有效。命令有误？你会发现其被红色高亮。同样的，对于不符合上下文的参数和选项也是如此。2、自动建议当你输入命令时，Fish Shell 会自动推荐命令，然后你可以按照提示，使用 Tab 键进行相应的补全操作。随着你的输入，建议会以灰色显示，使其更易于识别。如果整条建议都对你的胃口，你可以按右箭头键来完成整个命令的补全。3、命令选项的交互式手册页这是一个炫酷的功能，你可以交互性地参考手册页完成命令选项的填写。首先，你需要先解析手册页，这可以通过以下命令来完成：fish_update_completions 这会对手册页进行解析。现在，如果你输入一个命令，添加连字符作为选项，然后按下 Tab 键，就能看到手册页给出的可能选项及其简短描述：你可以通过滚动一览这些选项，并在阅读了作用说明后，从弹出的分页器中进行选择。要比直接输入 command -h 更便利一些对吧。4、缩写优于别名在 Fish 里，缩写的作用就如同文本扩展工具。你可以为一些常用的代码设置易于调用的缩写。比如说，我把 sch 设为 pacman -Ss 的缩写，用以搜索软件包。abbr -a sch pacman -Ss 于是，每次我输入 sch 并按空格键后，它就会被替换成 pacman -Ss。你甚至可以把它写入配置文件，让其成为永久设置。? 别名和缩写的关键区别在于，别名的工作是内部完成的，你看不到其背后真正运行的命令。而缩写不仅会展示实际的命令，而且会让它们在历史记录里也正确地出现。5、丰富的基于 Web 的帮助Linux 纯粹主义者常常依赖手册页来寻求命令帮助，而新一代的 Linux 用户则更多地依赖网络资源。Fish 则结合了这两者优点，提供了详尽的“基于 Web 的帮助”功能，并且且易于使用，即便在无网络连接的情况下也同样可用，因为它是本地化存储的。在运行 Fish Shell 时，仅需输入：help 就可以在你的网络浏览器上打开帮助页面了。如今，你可以随时方便地查阅这份详细的文档。6、基于 Web 的配置没错，这是另一个“基于 Web”的功能。要改变提示符颜色或其他配置，你不必在终端里编辑配置文件，相反地，你可以运行基于 Web 的配置。在运行 Fish Shell 时，只需输入以下命令：fish_config 这会打开你的浏览器，并显示出配置设置。在这里，你可以更改颜色，从现有列表中选择一个不同的提示符等等。通过这种方式来改变配置更方便，对吗？7、自动切换目录如果你想切换到某个目录，你不需要输入 cd 命令。只需要键入该目录名称就行了。例如，如果你位于主目录，并希望切换到 Downloads 目录，只需要输入 Downloads。输入过程中，它会进一步给出补全建议。如果你正在某个特定目录中，想要跳转到一个完全不同的路径，则需要使用绝对路径。8、更简洁的路径导航如果你需要在浏览过的目录之间来回切换，没必要输入路径或使用 cd .. 等。只要按 ALT + ← 或 ALT + →，分别向前和向后移动就行了。或者，你可以键入 cdh 并按回车，这会呼出一个分页器界面，你可以使用对应的数字来回到你想去的目录。9、交互式历史搜索你可以在 Fish 中交互式地搜索某个特定的历史命令。做这个的时候，就使用我们熟悉的 CTRL+R 就行了。这会呼出一个类似于分页器的界面，显示一个搜索提示。输入你想要查找的命令，就能看到搜索结果：10、全局变量在 Fish Shell 中，如果你将一个变量设置为全局的，那么它将在重启 Shell 或者重启系统后仍然可用。要设置一个全局变量，可以使用：set -U my_variable 10 这时，my_variable 的值将会被设置为 10，即使系统重启后也不变。是的，不需要将它们添加到你的 RC 或 profile 中。11、隐私模式Fish Shell 有一个隐私模式，该模式下输入的命令将不会被保存到历史记录或存储在硬盘上。要进入隐私模式，使用命令：fish -P 工作完成后，通过键入 exit 就可以退出隐私模式。Fish 还有更多你可以探索的Fish Shell 提供了许多其他的用户友好特性，比如：使用 ALT+Enter 实现简单的多行命令编辑切换 Emacs（默认）/Vim 键位绑定提供简洁明了的脚本编写语法当然，你可以在其他 Shell 中通过一些努力实现大部分 Fish Shell 的特性，但默认启用这些特性可就完全是另一回事了。Fish 可以帮助你在掌控开发环境的前提下，提高开发工作的效率。别把为 Fish Shell 编写脚本运行在 Bash 中，在多用户系统的共享环境中可能会引发 Shell 兼容性问题。如果你喜欢这些特性，试试 Fish Shell 看看效果如何。也许你会将 Fish 设为 你的默认 Shell。即使你不想在终端里看到 “Fish”，也许你会喜欢 ASCII 水族馆 ?在 Linux 终端利用 Asciiquarium 打造海底世界? 请在评论中分享你对 Fish Shell 的看法 ?（题图：DA/8522d28f-40ab-4eaa-b2b5-bc627f114224）via: https://itsfoss.com/fish-shell-features/作者：Abhishek Prakash 选题：lujun9972 译者：ChatGPT 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
用这些技巧释放 sudo 的力量 ?你应该熟悉 sudo 吧？肯定有过使用的经验。对多数 Linux 用户来说，sudo 就像一个神器，赋予了他们作为 root 用户执行任意命令或切换到 root 用户身份的能力。其实这只掌握了一半的真相。sudo 绝非仅仅只是一条命令，sudo 是一款你可以根据需求和偏好去定制的工具。Ubuntu、Debian 以及其他的发行版在默认的配置下，赋予了 sudo 以 root 用户的身份执行任意命令的权限。这让很多用户误以为 sudo 就像一个魔法开关，瞬间可以获取到 root 权限。比如说，系统管理员可以设置成只有属于特定的 dev 组的部分用户才能用 sudo 来执行 nginx 命令。这些用户将无法用 sudo 执行任何其他命令或切换到 root 用户。如果你对此感到惊讶，那很可能是你一直在使用 sudo，但对其底层的工作原理并没有太多了解。在这个教程中，我并不会解释 sudo 是如何运作的，这个主题我会在另一天讲解。在这篇文章中，你将看到 sudo 的不同特性可以如何被调试和改进。有些可能真的很有用，有些可能完全没什么帮助，但是挺有趣。? 请不要随意去尝试所有提到的改进。如果处理不慎，你可能会遭遇无法运行 sudo 的混乱状态。在大多数情况下，平静阅读并知道这些就好。如果你决定尝试一些改进步骤，请先备份你的系统设置，这样在需要的时候能把事情恢复到正常。1、编辑 sudo 配置时，请始终使用 visudosudo 命令是通过 /etc/sudoers 文件进行配置的。虽然你可以用你最喜欢的 终端文本编辑器 编辑这个文件，比如 Micro、NeoVim 等，但你千万不要这么做。为什么这么说呢？因为该文件中的任何语法错误都会让你的系统出问题，导致 sudo 无法工作。这可能会使得你的 Linux 系统无法正常使用。你只需要这样使用即可：sudo visudo 传统上，visudo 命令会在 Vi 编辑器中打开 /etc/sudoers 文件。如果你用的是 Ubuntu，那么会在 Nano 中打开。这么做的好处在于，visudo 会在你试图保存更改时执行语法检查。这能确保你不会因为语法错误而误改 sudo 配置。好了！现在你可以看看 sudo 配置的一些改变。? 我建议你备份 /etc/sudoers 文件（sudo cp /etc/sudoers /etc/sudoers.bak）。这样，如果你不确定你做了哪些更改，或者你想恢复到默认的 sudo 配置，那你可以从备份文件中复制。2、输入 sudo 密码时显示星号我们的这种输入行为是从 UNIX 系统中继承下来的。当你在终端输入 sudo 密码时，屏幕上不会有任何显示。这种缺乏反馈的现象，往往让新的 Linux 用户怀疑自己的系统已经卡住了。人们常说，这是一项安全功能。或许在上个世纪是这样，但我个人觉得我们没有必要继续这样下去。不过，一些发行版，如 Linux Mint，已经对 sudo 进行了优化，当你输入密码时会显示星号。这样的方式更符合我们的日常经验。如果想让 sudo 输入密码时显示星号，运行 sudo visudo 并找到以下行：Defaults env_reset 然后将其更改为：Defaults env_reset,pwfeedback ? 在某些发行版中，比如 Arch，你可能找不到 Defaults env_reset 这一行。如果这样的话，只需新增一行 Defaults env_reset, pwfeedback 就可以了。现在，当 sudo 需要你输入密码时，你会看到输入的密码变成了星号。✋ 如果你注意到即使密码正确也无法通过一些图形化应用，如软件中心，那就该撤销这项更改。一些较旧的论坛帖子曾提到过此类问题，虽然我自己还未遇到过。3、增加 sudo 密码超时时限当你首次使用 sudo 时，它会要求输入密码。但在随后相当一段时间里，你使用 sudo 执行命令就无需再次输入密码。我们将这个时间间隔称为 sudo 密码超时 （暂且称为 SPT，这是我刚刚编的说法，请不要真的这样称呼 ?）。不同的发行版有不同的超时时间。可能是 5 分钟，也可能是 15 分钟。你可以根据自己的喜好来改变这个设置，设定一个新的 sudo 密码超时时限。像你之前看到的，编辑 sudoers 文件，找到含有 Defaults env_reset 的行，并在此行添加 timestamp_timeout=XX，使其变成如下形式：Defaults env_reset, timestamp_timeout=XX 其中 XX 是以分钟为单位的超时时长。如果你还有其他参数，例如你在上一节中看到的星号反馈，它们都可以在一行中组合起来：Defaults env_reset, timestamp_timeout=XX, pwfeedback ? 同样地，你还可以控制密码重试的次数上限。使用 passwd_tries=N 来修改用户可以输入错误密码的次数。4、在不输入密码的情况下使用 sudo行！你已经增加了 sudo 密码超时时限（或者称之为 SPT。哇塞！你还在坚持这个叫法 ?）。这样很好。我的意思是，毕竟没人愿意每几分钟就输入一次密码。扩大超时时限是一方面，另一方面则是尽可能不去使用它。是的，你没听错。你就是可以在无需输入密码的情况下使用 sudo。从安全角度来看，这听起来似乎很冒险，对吧？的确如此，但在某些实际情况下，你确实会更青睐无密码的 sudo。例如，如果你需要远程管理多台 Linux 服务器，并为了避免总是使用 root，你在这些服务器上创建了一些 sudo 用户。辛酸的是，你会有太多的密码。而你又不想对所有的服务器使用同一的 sudo 密码。在这种情况下，你可以仅设置基于密钥的 SSH 访问方式，并允许使用无需密码的 sudo。这样，只有获得授权的用户才能访问远程服务器，也不用再记住 sudo 密码。我在 DigitalOcean 上部署的测试服务器上就采用了这种方法，用来测试开源工具和服务。好处是这可以按用户进行设置。使用以下命令打开 /etc/sudoers 文件进行编辑：sudo visudo 然后添加如下行：user_name ALL=(ALL) NOPASSWD:ALL 当然，你需要将上面行中的 user_name 替换为实际的用户名。保存文件后，你就可以享受无密码的 sudo 生活了。5、配置独立的 sudo 日志文件查阅 syslog 或 journal 日志，我们可以找到关于 sudo 的所有条目，但若需要单独针对 sudo 的记录，可以专门创建一个自定义的日志文件。例如，选择 /var/sudo.log 文件来存储日志。这个新的日志文件无需手动创建，如果不存在，系统会自动生成。编辑 /etc/sudoers 文件，采用 visudo 命令，并在其中添加以下内容：Defaults logfile="/var/log/sudo.log" 保存该文件后，便可以在其中查看哪些命令在何时、由哪位用户通过 sudo 运行了。6、限制特定用户组使用 sudo 执行特定命令这是一种高级解决方案，系统管理员在需要跨部门共享服务器的多用户环境中会使用。开发者可能会需要以 root 权限运行 Web 服务器或其他程序，但全权给予他们 sudo 权限会带来安全风险。我建议在群组级别进行此项操作。例如，创建命名为 coders 的群组，并允许它们运行在 /var/www 和 /opt/bin/coders 目录下的命令（或可执行文件），以及 inxi 命令（路径是 /usr/bin/inxi 的二进制文件）。这是一个假想情景，实际操作请谨慎对待。接下来，用 sudo visudo 编辑 sudoer 文件，再添加以下行:%coders ALL=(ALL:ALL) /var/www,/opt/bin/coders,/usr/bin/inxi 如有需要，可以添加 NOPASSWD 参数，这样允许使用 sudo 运行的命令就不再需要密码了。关于 ALL=(ALL:ALL) 的详细解读，我们将会在其他文章中进行讲解，毕竟这篇文章已经解释的内容足够多了。7、检查用户的 sudo 权限好吧，这是个小提示，而不是系统调优技巧。如何确认一个用户是否具有 sudo 权限呢？可能有人会说，查看他们是否是 sudo 组的成员。但这并不一定准确，因为有些发行版用的是 wheel 代替 sudo 分组。更佳的方法是利用 sudo 内建的功能，看看用户具有哪种 sudo 权限：sudo -l -U user_name 这将显示出用户具有执行部分命令或所有命令的 sudo 权限。如你所见，我拥有自定义日志文件、密码反馈以及执行所有命令的 sudo 权限。如果一个用户完全没有 sudo 权限，你将看到如下提示：User prakash is not allowed to run sudo on this-that-server. ? 附加内容：输错 sudo 密码时，让系统“侮辱”你这是个我在文章开头提到的“无用”小调整。我想你在使用 sudo 时肯定曾误输过密码，对吧？这个小技巧就是，在你每次输错密码时，让 sudo 抛出随机的“侮辱”。用 sudo visudo 修改 sudo 配置文件，然后添加以下行：Defaults insults 修改后，你可以故意输错密码，测试新的设置。你可能在想，谁会喜欢被侮辱呢？只有粉丝可以以直白的方式告诉你 ?你是如何运用 sudo 的？我知道定制化的可能性无穷无尽，但其实，一般的 Linux 用户并不会去自定义 sudo。尽管如此，我还是热衷于与你分享这些因为你可能会发现一些新奇且实用的东西。? 那么，你有发现什么新的东西吗？请在评论区告诉我。你有一些秘密的 sudo 技巧欢迎和大家分享！（题图：DA/a12900e5-e197-455e-adfc-0b52e4305b91）via: https://itsfoss.com/sudo-tips/作者：Abhishek Prakash 选题：lujun9972 译者：ChatGPT 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Bash 并不是唯一可供选择的 Shell。还存在数量众多的 Shell，它们都有一些独特的特性，例如 Zsh、Fish、Ksh 和 Xonsh。在你的系统中，你可以同时安装多个 Shell。要想将另一个 Shell 设为默认值，你可以按照以下方式使用 chsh 命令：chsh -s path_to_binary_of_shell 如需找到 Shell 的二进制路径，你可以查看 /etc/shells 文件的内容。另外，你也可使用以下自动获取所需 Shell 二进制路径的命令：chsh -s $(which new_shell) 接下来，让我们详细了解一下如何确定并更改 Shell。我现在用的是哪个 Shell？有很多方法可以帮你找出当前使用的是哪个 Shell，虽然专家可能会辩论这些方法的准确度。最常用的，也是最简单的方式是：echo $0 $0 是一个特别的 Shell 变量，这可以获取你正在使用的 Shell 或 Shell 脚本的名称（如果你在脚本中使用了它）。你还可以使用下面的命令检查进程：ps -p $ 其中，$ 代表的是当前进程 / Shell 的进程 ID。如何安装另一个 Shell？和其他软件包一样，大部分知名 Shell，例如 Fish 和 Zsh，都可以直接从你的发行版软件仓库中下载安装。新的，相对小众的 Shell，例如 Xonsh，可能就需要不同的安装步骤了。你可以在它们的项目网页上找到具体的安装指南。比如，你想 在 Ubuntu 上安装 Zsh，那么可以使用以下命令：sudo apt install zsh 如何更改当前的 Shell？假设你已经安装了另一个 Shell，那么我们来看一看如何切换过去。实际上，你只需要输入新 Shell 的名称即可。比方说，你想切换到 Zsh，那就输入：zsh 若要退出当前的 Shell，只需输入 exit 即可，你会回到你的默认 Shell。如何查看默认的 Shell 是哪个？有一个 SHELL 的环境变量，它可以告诉你当前账户的默认 Shell 是哪个：echo $SHELL 举个例子，我切换到了 Zsh。此时，当前 Shell 显示的信息是 zsh，而默认 Shell 依然显示为 bash：这说明更改 Shell 并不会改变默认的 Shell。也就是说，下次你再次登录到该终端或系统，你还会返回到旧的默认 Shell，而不是新的 Shell。如何知道系统中可用的 Shell 有哪些？你可以通过查看 /etc/shells 文件，来了解系统中具有哪些可用的 Shell：cat /etc/shells 下面就是我当前系统中所有可用的 Shell：如何更改默认的 Shell？/etc/shells 文件的内容显示了所有可用 Shell 的二进制文件位置。你需要将它与 chsh 命令一起使用。假设我想让 Zsh 成为默认的 Shell，我可以输入：chsh -s /usr/bin/zsh 更改后，你需要重新登入才能看到变化。请注意，以上操作只会更改当前用户的默认 Shell。如果你是管理员，并且想更改其他用户的默认 Shell，那么你可以使用以下命令：sudo chsh -s /usr/bin/zsh other_username 结论Linux 的一大特色就是，用户可以自主选择。你完全可以根据自己的需要进行更改。这就是另一个例子，你不必局限于发行版提供的默认 Shell 的选择。你很欢迎自选一款 Shell，让你的工作变得更顺手。最后，祝你使用愉快 ?（题图：DA/cf9b865d-2b98-4ada-88df-de1d1839aba1）via: https://itsfoss.com/linux-change-default-shell/作者：Abhishek Prakash 选题：lujun9972 译者：ChatGPT 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
在 Ubuntu 中拥有多个键盘布局并在它们之间切换非常简单。下面就教你怎么做。当 你安装Ubuntu 时，你可以选择键盘布局。你可能已经默认选择了美国英语布局，现在你想将其更改为英国英语、印度英语或你选择的任何其他键盘布局。好在你可以在同一个 Ubuntu 系统中拥有多种键盘布局。这是相当方便的。在本教程中，你将学习：在 Ubuntu 桌面中添加新的键盘布局在可用键盘布局之间切换删除额外的键盘布局改变键盘布局的命令行方法步骤 1：添加新的键盘布局要更改键盘布局，你需要先在系统上启用另一个键盘布局。进入系统设置。按 Ubuntu 中的 Super 键（Windows 键）并搜索“Setting”。在系统设置中，在左侧边栏中查找 键盘 Keyboard 。选择后，你应该会在 输入源 Input Sources 下看到添加新键盘布局的选项。单击 “+” 号。你将看到一些键盘选项，但如果单击三个点，你可以获得更多选项。你可以在此处滚动浏览或搜索。单击你想要的键盘布局。请记住，所选的键盘布局可能有子布局。例如，当我单击**英语（印度）时，它会向我显示从丹麦到加纳等的一些英语键盘布局。在这里，我选择了英语（印度，卢比）**键盘。这是将要添加的键盘布局。你将在“输入源”下看到新添加的键盘布局。这与我之前在 Ubuntu 中添加印地语键盘布局 时使用的方法相同。步骤 2：切换键盘布局这样，你就成功添加了另一个键盘布局。但它没有被使用。你必须在可用的输入源之间切换。有两种方法可以做到这一点。方法 1：同时使用 Super+Space 键切换键盘布局的更快方法是 使用键盘快捷键 ，同时按 Super 键（Windows 键）和空格键。它将立即显示所有启用的键盘布局。你可以在按住 Super 键的同时多次按空格键在可用选项之间移动。方法 2：使用鼠标切换键盘布局记住所有这些键盘快捷键并不容易，这是可以理解的。当你在系统上启用多个键盘布局时，你会注意到键盘布局名称显示在面板的右上角。单击它，你将看到在布局之间切换的选项或查看所选的键盘布局。额外提示：删除额外的键盘布局不喜欢系统中的多个键盘布局？ 不用担心。你可以轻松删除它们。如你之前所见，再次进入键盘设置。单击你选择的键盘旁边的三个垂直点符号。你应该在这里看到删除选项。使用命令行更改键盘布局（不推荐）如果你是桌面用户，我强烈推荐上面讨论的图形方法。如果你在服务器上并且必须使用其他键盘布局，则可以选择命令行。现在，有多种方法可以更改 Linux 中的键盘布局。但对于 Ubuntu，我更喜欢 dpkg 方式。sudo dpkg-reconfigure keyboard-configuration 输入你的密码，你将在终端中看到：要在此 TUI（终端用户界面）中导航，请使用箭头键在可用选项之间移动。使用 Tab 键转至 “OK” 或 “Cancel” 选项。当你位于其中之一时，请按回车键确认你的选择。选择你选择的国家/地区，然后你可以选择键盘布局。添加附加键盘后，系统会要求你分配键盘快捷键以在它们之间进行切换。你也可以将新键盘布局设置为系统中的默认布局和唯一布局。不过，如果你在不相似的语言之间执行此操作，这可能会存在风险。我的意思是，如果你使用英语美国键盘（物理）并将布局切换为匈牙利语，则你将无法使用所有按键。之后你会看到几个屏幕。如果你对新的键盘布局不满意，可以再次键入相同的命令，然后重新配置布局。（题图：MJ/f03362cf-72d0-4003-b334-44c533e113a0）via: https://itsfoss.com/ubuntu-change-keyboard/作者：Abhishek Prakash 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
如果在 Arch Linux 中安装软件包时遇到 “target not found” 错误，你可以采取以下措施。有一天，我尝试在 Arch Linux 上安装 Hyprland。当我使用 Pacman 命令安装 它时，它抛出 “target not found”（目标未发现）错误。$ sudo pacman -S hyprland [sudo] password for abhishek: error: target not found: hyprland 这是一个意外，因为我知道 Hyprland 是可用的。我的修复方法是更新系统，在大多数情况下，它可以解决此问题。sudo pacman -Syu 这里，本地包数据库不同步。我需要更新缓存。这里还建议更新系统。在大多数情况下，这就是修复此错误的方法。但是，你看到此错误的原因可能还有其他一些。让我在这里详细讨论它们。修复：更新系统Arch Linux 是一个 滚动发布发行版，并且它提供的更新非常频繁。如果你不每隔几天更新一次系统，你的本地包数据库将与远程镜像不同步，并且你将在安装软件包时遇到问题。本地包数据库仅保留包的元数据，例如版本号、用于获取包的仓库 URL 等。当你搜索软件包时，pacman 会提供搜索结果，表明该软件包可用。但是，该包在你的本地数据库中具有较旧的版本号。当 pacman 在远程仓库中搜索包（以获取实际的包）时，它不再找到旧版本的 URL。这就是导致 “target not found” 错误的原因。修复方法是更新本地数据库。这可以与 pacman -Sy 一起使用，但是，建议 更新整个 Arch Linux 系统 以避免依赖冲突等。sudo pacman -Syu ? 如果你已有几周没有更新系统，请做好更新超过 1 GB 的准备。这可能需要一些时间，具体取决于你的互联网速度和你使用的镜像。就我而言，Arch 安装在我的辅助系统上。由于我一周左右无法使用它，该系统已经过时了。更新后，我就可以安装 Hyprland。? 如果这不起作用，请通过添加额外的 y 强制刷新所有包数据库： sudo pacman -Syyu修复 “target not found” 错误的其他建议如果上述方法没有为你解决此错误，这里有一些修复此错误的提示。仔细检查包名称我亲爱的 Watson，这可能看起来很简单，但人们通常只是错误地输入了包名称。Linux 区分大小写，包通常以小写命名。因此，如果你要使用一个名为 Flameshot 的流行工具，那么它的包名称很可能是 flameshot。此外，某些软件的拼写与常见软件的拼写不同。例如，它是 hyprland，这使我错误地输入了 hyperland（使用通常的 “hyper” 拼写）。在极少数情况下，可能会混淆是 l、I 或者 1。基本上，确保你输入的包名称是正确的。查看该软件包在仓库中是否可用Arch Linux 的仓库中有大量软件包。但这并不意味着它拥有所有可能的 Linux 软件包。访问 Arch Linux 官方软件包网站：Arch Linux 软件包搜索在这里输入包名，查看该包是否可用。如果是，它是哪个仓库以及它在哪个设备上可用。x86_64 适用于英特尔架构，任何包含 ARM 架构的均适用于 树莓派类设备。? 如果在某些仓库中找到该软件包，但 pacman 即使在更新的系统上也找不到它，请检查 pacman.conf 文件并查看是否启用了所述仓库。确保它不是 AUR 包Arch 用户仓库（AUR） 是提供更新包的附加社区支持平台。现在，有多种使用 AUR 包的方法，但 pacman 不是其中之一。检查你尝试安装的软件包是否是 AUR 软件包。首先检查官方 Arch 仓库，如上所述。如果不存在，请检查 AUR 页面。如果它是 AUR 包，则必须 使用 yay 或一些 其他 AUR 帮助程序。你不能使用 pacman 安装 AUR 软件包。你能解决这个问题吗？在大多数情况下，更新系统可以解决此问题。在极少数情况下，可能还有其他原因，我已经提到了一些建议。现在轮到你了。如果你能够解决此问题，请在评论区告诉我。（题图：MJ/b71c9760-4cb1-41de-a336-3e38026bcfeb）via: https://itsfoss.com/target-not-found-arch-linux/作者：Abhishek Prakash 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
在这篇基本命令行教程中，你将学习在 Linux 终端重命名文件和目录的各种方法。如何在 Linux 终端中重命名文件和目录？你可以使用 mv 命令。是的，与用于将文件和文件夹从一个位置“移动”到另一个位置的 mv 命令相同。你可以在“移动文件和目录”时简单地指定文件和目录的新名称。要重命名文件，请使用：mv old_file new_file 同样，要重命名目录，请使用：mv old_dir new_dir 听起来很容易，对吧？ 但我将在这里详细讨论文件重命名：向你展示重命名的实际示例显示通过结合 find 和 exec 命令批量重命名多个文件的示例讨论用于批量重命名文件的专用程序我们来一一看看。使用 mv 命令重命名文件和目录使用 mv 命令重命名同一目录中的文件：mv file1.txt file2.txt 同样，你可以重命名同一位置的目录：mv dir1 dir2 这是我重命名文件和目录的示例：如你所见，与 cp 命令 不同，你不必使用递归选项来通过 mv 命令 处理目录。? 如果你尝试使用相同的名称重命名该文件，你会看到一个错误（显然）。你还可以在将文件移动到另一个位置时重命名它：mv old-file-name another_dir/new-file-name 在下面的示例中，我将名为 firefox-quiz.txt 的文件移动到示例目录。在这样做的同时，我将其重命名为 quiz.txt。我将其视为剪切粘贴操作。? 虽然你可以将多个文件移动到另一个位置（mv file1 file2 file2 dir），但你不能使用 mv 重命名多个文件。为此，你必须采用我在以下部分中讨论的其他策略。通过组合 mv、find 和 exec 命令重命名与某个模式匹配的多个文件? 批量重命名此类文件时要格外小心。一步错误的举动就会导致无法挽回的不良结果。find 命令用于根据文件名、类型、修改时间和其他参数在给定目录中查找文件。exec 命令与 find 结合使用，对 find 命令的结果执行命令。使用 find、exec 和 mv 命令没有固定标准的结构。你可以根据需要组合它们。假设你想通过在名称中添加 _old 来重命名当前目录中以 .txt 结尾的所有文件。所以 file_1.txt 变成 file_1.txt_old 等等。find . -type f -name "*.txt" -exec mv {} {}_old ; 这只是一个示例，你的重命名要求可能会有所不同。另外，以上仅适用于不带空格的文件名。专业提示：在处理这样的批量操作时，你可以巧妙地使用 echo 命令来查看将执行什么操作，而不是实际执行它。如果看起来不错，那就采取实际行动吧。例如，首先查看哪些文件将被重命名：find . -type f -name "*.txt" -exec echo mv {} {}_old \; 如你所见，实际上没有重命名任何文件。但是，如果你在没有使用回显（echo）命令的情况下运行上述命令，你将看到将执行什么命令。如果你觉得没问题，请删除 echo 命令并继续进行实际的重命名。find . -type f -name "*.txt" -exec mv {} {}_old \; 我在 《Efficient Linux 命令行》一书中学到了这个技巧。一本充满了这样的小宝石的优秀书。难怪它已成为 我最喜欢的 Linux 书籍之一。使用 rename 命令轻松重命名多个文件有一个名为 rename 的便捷命令行程序，可用于根据给定的 Perl 正则表达式模式批量重命名文件。该实用程序不是 GNU 工具链的一部分，也不是预安装的。因此，你必须首先使用发行版的包管理器来安装它。对于 Debian/Ubuntu，命令为：sudo apt install rename 你可以通过以下方式使用它：rename [options] perl_regex [files] 选项有：-v : 详细模式-n ：无操作，显示将被重命名的文件，但不重命名它们-o : 不覆盖-f : 强制覆盖现有文件-s : 不重命名软链接，只重命名其目标现在，让我们采用你在上一节中看到的相同示例。将 *.txt 重命名为 .txt_old。rename 's/\.txt$/.txt_old/' ** 我不打算在这里解释正则表达式。** 表示查看所有子目录中的所有文件。正如你所看到的，它按预期工作。总结我希望你喜欢这个技巧，它可以帮助你学习在 Linux 命令行中执行基本任务。当然是针对那些想学习和使用命令行的人。桌面用户始终拥有用于此类任务的 GUI 工具。如果你对 Linux 命令完全陌生，本系列将对你有很大帮助。终端基础：Linux 终端入门如果你有疑问或建议，请告诉我。via: https://itsfoss.com/linux-rename-files-directories/作者：Abhishek Prakash 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
Arch Linux 上的蓝牙无法工作？以下是对我有用的方法，以及解决 Arch 上蓝牙问题的其它技巧。我很轻松地安装了 Arch Linux，这要归功于 archinstall 脚本。在我开始使用它并探索之后，我尝试使用我的蓝牙耳机，却发现蓝牙无法工作。我可以看到蓝牙选项，但无法启用它。单击开关会只会切换回禁用状态。下面是我所做的以及有作用的事情。确保蓝牙服务正在运行如果该服务未运行，蓝牙将不会打开，你将无法连接到它。检查蓝牙服务的状态并查看其是否正在运行。systemctl status bluetooth 它给了我以下输出：[abhishek@itsfoss ~]$ systemctl status bluetooth ○ bluetooth.service - Bluetooth service Loaded: loaded (/usr/lib/systemd/system/bluetooth.service; disabled; preset: disabled) Active: inactive (dead) Docs: man:bluetoothd(8) 如你所见，bluetooth 服务处于非活动状态。它没有运行。并且状态被禁用。这意味着蓝牙守护程序当前未运行，也未设置为每次启动时自动启动。这让事情变得更容易了。我在第一次尝试中就找出了根本原因。在 Arch Linux 中这种情况并不常见。使用以下命令启动蓝牙守护进程：sudo systemctl start bluetooth 让蓝牙服务在系统启动时自动运行：systemctl enable bluetooth 它应该显示以下输出：[abhishek@itsfoss ~]$ systemctl enable bluetooth Created symlink /etc/systemd/system/dbus-org.bluez.service → /usr/lib/systemd/system/bluetooth.service. Created symlink /etc/systemd/system/bluetooth.target.wants/bluetooth.service → /usr/lib/systemd/system/bluetooth.service. 现在，蓝牙已启用，并且在系统设置中很明显：连接蓝牙设备的提示你可能已经知道应该首先将蓝牙设备置于配对模式。这很关键。之后，你可以尝试关闭然后再次打开蓝牙按钮，以便它搜索可用的设备。如果它没有立即显示，你可以单击其他一些系统设置并再次返回蓝牙。过去它对我有用过几次，不要问为什么。其他故障排除提示以下是修复 Arch Linux 中蓝牙连接问题的更多提示：确保未被阻止确保蓝牙未被阻止：rfkill list 检查输出：[abhishek@itsfoss ~]$ rfkill list 0: hci0: Bluetooth Soft blocked: no Hard blocked: no 1: phy0: Wireless LAN Soft blocked: no Hard blocked: no 如果你发现蓝牙被阻止，请使用以下命令取消阻止：rfkill unblock bluetooth Pipewire 与 Pulseaudio在某些情况下，如果你过去尝试过 Pipewire 和 Pulseaudio，它们可能会破坏工作。如果你使用 Pipewire，请确保安装了 pipewire-pulse：sudo pacman -Syu pipewire-pulse 如果你使用 Pulseaudio，bluez 和 pulseaudio-bluetooth 可以帮助你。查看 Arch Wiki 页面以获取更多信息。蓝牙耳机 - Arch 维基这对你有用吗？硬件兼容性问题是任何操作系统都会遇到的问题，Linux 也不例外。事情没有单一的解决方案。你的系统可能存在与我的系统不同的问题，此处提到的建议可能适合你，也可能不适用于你。完善的 Arch 维基提供的建议比我所能提供的要多得多。如果你仍然无法解决蓝牙问题，请执行此操作。现在看你的了。对你有用吗？如果有，是哪种方法？如果没有，你遇到了什么样的问题，以及到目前为止你尝试过哪些故障排除方法？（题图：MJ/60bd220b-bb4f-4d51-9c41-162c8c4714b3）via: https://itsfoss.com/bluetooth-arch-linux/作者：Abhishek Prakash 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
了解如何在 Arch Linux 上安装 Docker，并使用 Docker Compose 和制表符补全为运行容器做好准备。在 Arch Linux 上安装 Docker 很简单。它可以在 Extra 仓库中找到，你可以简单地 执行 pacman 魔法：sudo pacman -S docker 但要在 Arch Linux 上正确运行 Docker，还需要执行更多步骤。让 Arch Docker 做好准备这一切都归结为以下步骤：从 Arch 仓库安装 Docker启动 Docker 守护进程并在每次启动时自动运行将用户添加到 docker 组以运行 docker 命令而无需 sudo让我们看看详细步骤。步骤 1：安装 Docker 包打开终端并使用以下命令：sudo pacman -S docker 输入密码并在询问时按 Y。这可能需要一些时间，具体取决于你使用的镜像。? 如果你看到找不到包或 404 错误，那么你的同步数据库可能是旧的。使用以下命令更新系统（它将下载大量软件包并需要时间）： sudo pacman -Syu步骤 2：启动 docker 守护进程Docker 已安装但未运行。你应该在第一次运行 Docker 命令之前启动 Docker 守护进程：sudo systemctl start docker.service 我还建议启用 Docker 服务，以便 Docker 守护进程在系统启动时自动启动。sudo systemctl enable docker.service 这样，你就可以开始运行 docker 命令了。你不再需要手动启动 Docker 服务。步骤 3：将用户添加到 docker 组Docker 已安装并且 Docker 服务正在运行。你几乎已准备好运行 docker 命令。但是，默认情况下，你需要将 sudo 与 docker 命令一起使用。这很烦人。为了避免在每个 docker 命令中使用 sudo，你可以将自己（或任何其他用户）添加到 docker 组，如下所示：sudo usermod -aG docker $USER 你必须注销（或关闭终端）并重新登录才能使上述更改生效。如果你不想这样做，请使用以下命令：newgrp docker 现在已经准备好了。我们来测试一下。步骤 4：验证 docker 安装Docker 本身提供了一个很小的 Docker 镜像来测试 Docker 安装。运行它并查看是否一切正常：docker run hello-world 你应该看到类似这样的输出，表明 Docker 成功运行：恭喜！ 你已经在 Arch Linux 上成功安装了 Docker。可选：安装 Docker ComposeDocker Compose 已经成为 Docker 不可或缺的一部分。它允许你管理多个容器应用。较早的经典 Compose 由 docker-compose Python 软件包提供。Docker 还将其移植到 Go 中，并通过 docker compose 提供，但该软件包附带 Docker Desktop。在这个阶段，我建议使用经典的 docker-compose 插件并使用以下命令安装它：sudo pacman -S docker-compose 故障排除技巧以下是你可能遇到的一些常见问题以及可能的解决方案：制表符补全不适用于 docker 子命令如果你想对 docker 命令选项使用制表符补全（例如将 im 补全到 images 等），请安装 bash-completion 包：sudo pacman -S bash-completion 关闭终端并启动一个新终端。你现在应该能够通过 docker 命令使用制表符补全功能。无法连接到 Docker 守护进程错误如果你看到以下错误：docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?. See 'docker run --help'. 那是因为 Docker 守护进程没有运行。参考步骤 2，启动 Docker 服务，确保其正在运行并启用它，以便 Docker 守护进程在每次启动时自动运行。sudo systemctl start docker.service sudo systemctl enable docker.service 尝试连接到 Docker 守护程序套接字时权限被拒绝如果你看到此错误：ddocker: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied. See 'docker run --help'. 这是因为你需要使用 sudo 运行 docker 命令，或者将用户添加到 docker 组以在不使用 sudo 的情况下运行 docker 命令。我希望这篇简短的文章可以帮助你在 Arch Linux 上运行 Docker。（题图：MJ/9951f8bf-d2e5-4335-bd86-ebf89cba654d）via: https://itsfoss.com/install-docker-arch-linux/作者：Abhishek Prakash 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
想在 Ubuntu 上使用最新、最好的 LibreOffice？这里有一个简单的方法。LibreOffice 已预装在 Ubuntu 中。不过，如果你选择了最小化的 Ubuntu 安装，或者卸载它并安装了其他办公套件，你可以使用此命令轻松安装：sudo apt install libreoffice 这没问题。但 Ubuntu 仓库提供的 LibreOffice 版本可能不是最新的。如果你听说有新的 LibreOffice 版本发布，很可能你不会获得该新版本。这是因为 Ubuntu 将其保持在稳定版本上。这对大多数用户来说都很好。但是，如果你不是“大多数用户”，并且你想在 Ubuntu 中获取最新的 LibreOffice，那么你完全可以这样做。有两种方法可以做到这一点：使用官方 PPA（推荐）从 LibreOffice 下载 deb 文件让我们来看看。方法 1：通过官方 PPA 安装最新的 LibreOffice（推荐）你可以使用官方 “LibreOffice Fresh” PPA 在基于 Ubuntu 的发行版上安装 LibreOffice 的最新稳定版本。PPA 提供了 LibreOffice 的最新稳定版本，而不是开发版本。因此，这使其成为在 Ubuntu 上获取较新 LibreOffice 版本的理想选择。你甚至不需要使用此方法卸载以前的版本。它将把现有的 LibreOffice 更新到新版本。sudo add-apt-repository ppa:libreoffice/ppa sudo apt update sudo apt install libreoffice 由于你要添加 PPA，因此你还将获得以这种方式安装的新版本的更新。方法 2：从网站获取二进制文件（如果需要）你可以随时前往 LibreOfiice 网站的下载页面 下载最新版本的 deb 文件。你还会看到下载较旧但 LTS 稳定版本的选项。我相信你已经 知道如何从 deb 文件安装应用。右键单击 deb 文件，选择使用软件中心打开它。进入软件中心后，你可以单击安装按钮进行安装。结论第二种方法的缺点是，如果有更新，你必须再次下载 deb 文件，删除以前的 LibreOffice 版本，然后使用新下载的 deb 文件安装新版本。相比之下，PPA 会随着系统更新而自动更新。这就是我推荐 PPA 的原因，特别是当它由 LibreOffice 团队自己维护时。顺便说一句，这里有一些 充分利用 LibreOffice 的技巧：提高 LibreOffice 生产力的技巧我希望这个快速技巧可以帮助你在基于 Ubuntu 的发行版上获取最新的 LibreOffice。如果你有疑问，请告诉我。via: https://itsfoss.com/install-libreoffice-ubuntu/作者：Abhishek Prakash 选题：lujun9972 译者：geekpi 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出
本篇文章作为终端基础教程系列的一部分，介绍如何在 Linux 命令行中，利用绝对路径和相对路径实现目录切换。Linux 的 cd 命令让你可以轻松切换文件夹（即目录）。只需提供你要切换到的文件夹路径即可。cd path_to_directory 然而对于 Linux 新人来说，可能会在路径的指定上有所困扰。首先，让我们解决这个问题。理解 Linux 中的路径在 Linux 文件系统中，路径是用来追踪文件位置的信息。所有的路径都从根目录开始，然后向下延伸。你可以通过下面的方式查看当前所在的位置：pwd 结果可能是类似于 /home/username 的输出。注意，这里的 username 将会是你自己的用户名。你可以注意到，路径是由 / 符号和目录名组成的。比如路径 /home/abhishek/scripts， 表示 scripts 是在文件夹 abhishek 之内，而文件夹 abhishek 在 home 文件夹之内。要注意，第一个 '/' 是指根目录（即文件系统的开始处），后面的 '/' 则作为目录的分隔符。?️ 在终端中键入 ls /，然后按回车。你将会看到根目录下的所有内容，试试看！接下来，让我们学习两种常见的路径指定方式：绝对路径和相对路径。绝对路径：这种路径从根开始，然后一直扩展到你需要的位置。如果一个路径是以 / 开头，那就说明它是一个绝对路径。相对路径：这是相对于你文件系统中当前位置的路径。如果我当前位置在 /home/abhishek，并且我需要去 /home/abhishek/Documents， 我只需要简单地切换到 Documents，而不需要指定整个绝对路径 /home/abhishek/Documents。在我演示这两种路径的区别之前，有必要先熟悉两个特殊的目录标识：. （单点）表示当前目录。.. （双点）表示上一级目录，也就是当前目录的母目录。这里有一张图形化的表示。利用 cd 命令变更目录在你已对路径概念有所了解之后，我们来了解如何切换目录。?️ 如果你仅键入 cd 并按回车键，无论当前位置在哪，系统都会将你带回主目录。试一试吧。敲入以下命令，你就能看到主目录里的所有文件夹：ls 这是我看到的情况：abhishek@ituxedo:~$ ls Desktop Downloads Pictures Templates VirtualBoxVMs Documents Music Public Videos 你的情况可能与此类似，但未必完全一样。假如你希望跳转到 Documents 文件夹。由于它就在当前目录下，这里使用相对路径会比较方便：cd Documents ? 注意，大部分 Linux 发行版预设的终端模拟器会在提示符本身显示出当前所在的位置。因此你不必频繁使用 pwd 指令来确认自己的位置。假如你希望切换到位于主目录里的 Templates 文件夹。你可以使用相对路径 ../Templates（.. 会让你返回到上层目录，即 /home/username，然后你就可以进入 Templates 文件夹了）。但这次我们尝试使用绝对路径。请把下面的 abhishek 替换成你的用户名。cd /home/abhishek/Templates 此刻你已经在 Templates 文件夹里了。如何前往 Downloads 文件夹呢？这次我们再使用相对路径：cd ../Downloads 下面的图片会回顾一下你刚才学到的所有或有关目录切换的范例。? 别忘了你还可以使用终端的 tab 键自动补全功能。只需要键入命令或者文件夹名称的前几个字母，然后敲击 tab 键，系统就会尝试自动地补全命令或文件夹名称，或者给你显示出所有可能的选项。故障解决在 Linux 终端操作切换目录的过程中，你可能会遇到一些常见的错误。文件或目录不存在如果在你尝试切换目录时，出现类似下面的错误信息：bash: cd: directory\_name: No such file or directory那么你可能在路径或目录名称上犯了误解。这里有几点你需要注意的：请确定你输入的目录名中没有拼写错误。Linux 系统对大小写敏感，因此，Downloads 和 downloads 会被识别为不同的目录。你可能未正确指定路径。可能你所在的位置与你预期的不同？或者你遗漏了绝对路径中的开头的 / 字符？非目录错误如果你看到像下面这样的错误提示：bash: cd: filename: Not a directory这表示你尝试使用 cd 命令对一个文件进行操作，而不是一个目录（文件夹）。很明显，你不能像进入文件夹那样“进入”一个文件，因此会出现这样的错误。参数过多这是 Linux 新手常犯的另一个错误：bash: cd: too many argumentscd 命令只接受一个参数。也就是说，你只能对命令指定一个目录。如果你指定了超过一个的参数，或者在路径中误加了空格，你就会看到这个错误。?? 如果你输入 cd -，它将会把你带到前一个目录。当你在两个相隔较远的地方切换时非常方便，可以避免再次输入长路径。特殊目录符号在结束这个教程之前，我想快速告诉你关于特殊符号 ~。在 Linux 中，~ 是用户主目录的捷径。如果用户 abhi 运行它，~ 就会代表 /home/abhi，如果用户 prakash 运行，~ 就意味着 /home/prakash。总结一下你在这个基础教程系列中学到的所有特殊目录标识：符号描述.当前目录..上级目录~主目录-前一个目录测试你的知识下面是一些简单的练习，用来测试你刚刚学到的关于路径和 cd 命令的知识。移动到你的主目录，并使用这个命令创建一个嵌套的目录结构：mkdir -p sample/dir1/dir2/dir3 然后，一步步来试试这个：使用绝对路径或相对路径进入 dir3使用相对路径移动到 dir1使用你能想象到的最短路径进入 dir2使用绝对路径切换到 sample 目录返回你的主目录? 想知道你是否全都做对了吗？欢迎分享你的答案。现在你知道如何切换目录，是不是应该学习一下如何创建它们呢？我强烈推荐你阅读这篇文章，了解一些关于终端和命令的小技巧。如果你想了解 Linux 命令行的基础知识，记得关注我们的 Linux 终端基础系列教程的更多章节。via: https://itsfoss.com/change-directories/作者：Abhishek Prakash 选题：lkxed 译者：ChatGPT 校对：wxy本文由 LCTT 原创编译，Linux中国 荣誉推出