Abhishek Prakash 发布的文章

就算你是素食主义者或对海鲜有过敏反应,也值得试试 Fish ?

Bash 是使用最广泛的 Shell,Zsh 则是开发者圈里最受青睐的,但 Fish 往往被许多人忽视。

这绝非夸张之辞。Fish 的确是个备受忽视的 Shell,它对新手和资深的自由开源软件用户,都可能是极好的选择。

Fish 提供了一系列吸引人的功能,使其具有鲜明优势。这其中包括了从语法高亮到缩写(我个人最喜欢的部分),这里面充满了种种新奇。

下面,我要和大家分享一些我最青睐的 Fish Shell 特性。

1、语法高亮

在错误的命令被执行之前就识别出它们将大大节省你的时间,同时降低你的挫败感。

现代的许多代码编辑器都内置了语法高亮功能,而 Fish 不仅将此功能内置在了 Shell 中,而且对于 Linux 命令也同样有效。

命令有误?你会发现其被红色高亮。同样的,对于不符合上下文的参数和选项也是如此。

错误高亮为红色

2、自动建议

当你输入命令时,Fish Shell 会自动推荐命令,然后你可以按照提示,使用 Tab 键进行相应的补全操作。

Fish 自动补全

随着你的输入,建议会以灰色显示,使其更易于识别。如果整条建议都对你的胃口,你可以按右箭头键来完成整个命令的补全

3、命令选项的交互式手册页

这是一个炫酷的功能,你可以交互性地参考手册页完成命令选项的填写。

首先,你需要先解析手册页,这可以通过以下命令来完成:

fish_update_completions

这会对手册页进行解析。

手册页解析

现在,如果你输入一个命令,添加连字符作为选项,然后按下 Tab 键,就能看到手册页给出的可能选项及其简短描述:

Fish 手册页帮助

你可以通过滚动一览这些选项,并在阅读了作用说明后,从弹出的分页器中进行选择。

要比直接输入 command -h 更便利一些对吧。

4、缩写优于别名

在 Fish 里,缩写的作用就如同文本扩展工具。你可以为一些常用的代码设置易于调用的缩写。

比如说,我把 sch 设为 pacman -Ss 的缩写,用以搜索软件包。

abbr -a sch pacman -Ss

于是,每次我输入 sch 并按空格键后,它就会被替换成 pacman -Ss

Fish Shell 缩写

你甚至可以把它写入配置文件,让其成为永久设置。

? 别名和缩写的关键区别在于,别名的工作是内部完成的,你看不到其背后真正运行的命令。而缩写不仅会展示实际的命令,而且会让它们在历史记录里也正确地出现。

5、丰富的基于 Web 的帮助

Linux 纯粹主义者常常依赖手册页来寻求命令帮助,而新一代的 Linux 用户则更多地依赖网络资源。

Fish 则结合了这两者优点,提供了详尽的“基于 Web 的帮助”功能,并且且易于使用,即便在无网络连接的情况下也同样可用,因为它是本地化存储的。

在运行 Fish Shell 时,仅需输入:

help

就可以在你的网络浏览器上打开帮助页面了。

Fish Shell 网页帮助

如今,你可以随时方便地查阅这份详细的文档。

6、基于 Web 的配置

没错,这是另一个“基于 Web”的功能。

要改变提示符颜色或其他配置,你不必在终端里编辑配置文件,相反地,你可以运行基于 Web 的配置。

在运行 Fish Shell 时,只需输入以下命令:

fish_config

这会打开你的浏览器,并显示出配置设置。

Fish Shell 基于 Web 的配置

在这里,你可以更改颜色,从现有列表中选择一个不同的提示符等等。

提示符选择

通过这种方式来改变配置更方便,对吗?

7、自动切换目录

如果你想切换到某个目录,你不需要输入 cd 命令。只需要键入该目录名称就行了。

例如,如果你位于主目录,并希望切换到 Downloads 目录,只需要输入 Downloads。输入过程中,它会进一步给出补全建议。

自动 cd

如果你正在某个特定目录中,想要跳转到一个完全不同的路径,则需要使用绝对路径。

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

Fish 隐私模式

工作完成后,通过键入 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 配置时,请始终使用 visudo

sudo 命令是通过 /etc/sudoers 文件进行配置的。

虽然你可以用你最喜欢的 终端文本编辑器 编辑这个文件,比如 Micro、NeoVim 等,但你千万不要这么做。

为什么这么说呢?因为该文件中的任何语法错误都会让你的系统出问题,导致 sudo 无法工作。这可能会使得你的 Linux 系统无法正常使用。

你只需要这样使用即可:

sudo visudo

传统上,visudo 命令会在 Vi 编辑器中打开 /etc/sudoers 文件。如果你用的是 Ubuntu,那么会在 Nano 中打开。

这么做的好处在于,visudo 会在你试图保存更改时执行语法检查。这能确保你不会因为语法错误而误改 sudo 配置。

visudo 在保存到 sudoers 文件的变更前检查语法

好了!现在你可以看看 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 下看到添加新键盘布局的选项。单击 “+” 号。

Add new keyboard layout

你将看到一些键盘选项,但如果单击三个点,你可以获得更多选项。你可以在此处滚动浏览或搜索。

There are more keyboard layouts available

单击你想要的键盘布局。请记住,所选的键盘布局可能有子布局。

例如,当我单击**英语(印度)时,它会向我显示从丹麦到加纳等的一些英语键盘布局。在这里,我选择了英语(印度,卢比)**键盘。这是将要添加的键盘布局。

你将在“输入源”下看到新添加的键盘布局。

这与我之前在 Ubuntu 中添加印地语键盘布局 时使用的方法相同。

步骤 2:切换键盘布局

这样,你就成功添加了另一个键盘布局。但它没有被使用。你必须在可用的输入源之间切换。

有两种方法可以做到这一点。

方法 1:同时使用 Super+Space 键

切换键盘布局的更快方法是 使用键盘快捷键 ,同时按 Super 键(Windows 键)和空格键。它将立即显示所有启用的键盘布局。

你可以在按住 Super 键的同时多次按空格键在可用选项之间移动。

方法 2:使用鼠标切换键盘布局

记住所有这些键盘快捷键并不容易,这是可以理解的。

当你在系统上启用多个键盘布局时,你会注意到键盘布局名称显示在面板的右上角。单击它,你将看到在布局之间切换的选项或查看所选的键盘布局。

Switch between keyboard layouts

额外提示:删除额外的键盘布局

不喜欢系统中的多个键盘布局? 不用担心。你可以轻松删除它们。

如你之前所见,再次进入键盘设置。单击你选择的键盘旁边的三个垂直点符号。你应该在这里看到删除选项。

使用命令行更改键盘布局(不推荐)

如果你是桌面用户,我强烈推荐上面讨论的图形方法。

如果你在服务器上并且必须使用其他键盘布局,则可以选择命令行。

现在,有多种方法可以更改 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” 拼写)。

在极少数情况下,可能会混淆是 lI 或者 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

听起来很容易,对吧? 但我将在这里详细讨论文件重命名:

  • 向你展示重命名的实际示例
  • 显示通过结合 findexec 命令批量重命名多个文件的示例
  • 讨论用于批量重命名文件的专用程序

我们来一一看看。

使用 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 命令的结果执行命令。

使用 findexecmv 命令没有固定标准的结构。你可以根据需要组合它们。

假设你想通过在名称中添加 _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中国 荣誉推出