部分磁盘格式化后,Shell 自动完成速度非常慢

部分磁盘格式化后,Shell 自动完成速度非常慢

我在本周早些时候正式公开发布当天升级到了 Fedora 26,长话短说,最终搞砸了我的安装,所以我进行了部分重新格式化。我的磁盘布局如下:

# df -h | grep dev
/dev/sdb3        40G  5.6G   32G  15% /
/dev/sdb2       477M  138M  311M  31% /boot
/dev/sdb1       200M   34M  167M  17% /boot/efi
/dev/sda2       9.8G  940M  8.4G  10% /var
/dev/sda1       493G  441G   27G  95% /home

/dev/sdb是安装 root 的 SSD,/dev/sda是我有分区的普通 HDD /home。我决定对 Fedora 26 进行全新安装,而不是尝试通过 修复失败的升级dnf,因此我重新格式化了/dev/sdbSSD 中的所有分区,并重新安装了 Fedora 26,保持/home分区完好无损。安装进行得很顺利,一切似乎都再次正常工作,除了一件事:Zhs 自动完成现在对于较大的目录来说非常慢。

Zsh 是我的默认 shell,我安装了过多的插件(哦,我的 Zsh、FZF 等),所以我认为其中一个插件可能在升级期间/之后出现了问题,所以我切换到 Bash:同样的事情,自动完成需要 10-30 秒(取决于目录大小)才能出现。我又安装了一些 shell 来解决问题,令我惊讶的是,tcsh工作fish完全正常。在相同的设置下,这两个执行得非常好,Bash 和 Zsh 会挂起 10 秒。

我已经用 Bash 完成了通常的诊断,与我的 Zsh 安装相比,Bash 的配置非常普通:straceset -x等,但找不到太多有趣的东西。还排除了 FZF 的问题,因为卸载后仍然缓慢...我的直觉仍然告诉我这一定是完成引擎的某种奇怪的散列/缓存问题,以某种方式影响了 Zsh 和 Bash,但我不知道确实有任何证据支持这一点。使用较小的文件夹(几个文件,几个子目录)进行自动补全在我尝试过的所有 shell 中都可以正常工作。我尝试过的其他事情是运行fsck -A -y以确保我没有任何损坏的分区并重新安装bash-completionzsh以防某些元数据或缓存损坏。

我认为这里真正有趣的是这样一个事实,tcshfish自动完成我扔给他们的任何东西都没有问题,但 Bash 和 Zsh 却没有。有人知道这是怎么回事吗?非常感谢任何对此事有所了解的人!

答案1

问题解决了!我正在摆弄perf trace,当一行一行的输出滚动过去时,我瞥见了一些从 Konsole(我的默认终端)对 libnotify 的奇怪调用。这看起来很奇怪,因为在重新格式化之后,我不再安装任何桌面通知守护程序(我使用 i3,它没有附带通知守护程序,你看)。这让我想到尝试不同的终端模拟器。所以我尝试了urxvt一下,结果发现问题消失了。我也尝试过gnome-terminal,完全没有问题!难道 Konsole 试图通过 dbus/systemd 发出桌面通知,但由于没有安装 libnotify 守护进程来响应请求而超时?所以我安装了dunst,这是我在升级之前使用的守护进程,正如我怀疑的那样,Konsole 中的自动完成缓慢已经消失了!

因此,我不知道调用自动完成功能时 Konsole 会尝试做什么,因为我从未看到弹出任何通知,即使在安装守护程序后也没有,但无论如何,问题现在似乎已得到解决。

我想我会把这个带到 KDE 团队,看看他们的想法是什么,因为尽管这是我没有安装通知守护进程的错,但我尝试的其他终端都很好地处理了这个问题。

不管怎样,谢谢大家的帮助!

相关内容