按照 github 上的说明在 Ubuntu 21.10 上安装 youtube-dl 后,许多应用程序(包括默认文本编辑器)都崩溃了

按照 github 上的说明在 Ubuntu 21.10 上安装 youtube-dl 后,许多应用程序(包括默认文本编辑器)都崩溃了

这里有一位新用户,正在运行 21.10 impish 版本的 ubuntu。

我按照 github 页面上的说明安装 youtube-dl (https://github.com/ytdl-org/youtube-dl#installation):

$ sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
$ sudo chmod a+rx /usr/local/bin/youtube-dl

在命令下载了 Python 脚本后,多个应用程序完全停止运行,就好像它们已被 youtube-dl 替换一样 [更新 3:应用程序本身并未被替换,只是它们的链接和快捷方式被替换]。受影响的一些软件是 Ubuntu 的默认应用程序,例如默认文本编辑器 (gedit) 和 gnome-calculator,而其他一些则是手动安装的,例如 qbittorrent 和 steam。

Firefox、nano 和 lutris 等一些东西仍在运行。

例如,尝试从终端运行文本编辑器将得到以下输出:

$ gedit

Usage: gedit [OPTIONS] URL [URL...]

gedit: error: You must provide at least one URL.
Type youtube-dl --help to see a list of all options.

所有受影响的应用程序都出现相同的错误:

$ gnome-calculator

Usage: gnome-calculator [OPTIONS] URL [URL...]

gnome-calculator: error: You must provide at least one URL.
Type youtube-dl --help to see a list of all options.

到目前为止我唯一尝试过的是通过 apt 重新安装 gedit 但没有任何改变。

我想知道出了什么问题,是否可以修复或者是否需要重新安装。

更新 1:请求的命令的输出:

$ history 

  867  sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
  868  sudo chmod a+rx /usr/local/bin/youtube-dl
  869  youtube-dl sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
  870  sudo chmod a+rx /usr/local/bin/youtube-dl

不知道为什么它似乎被列出了两次。

$ which gedit
/usr/local/bin/gedit

$ which gnome-calculator
/usr/local/bin/gnome-calculator

$ ls -al $(which gedit)
lrwxrwxrwx 1 root root 17 loka   28 19:55 /usr/local/bin/gedit -> /usr/bin/firejail

$ ls -al $(which gnome-calculator)
lrwxrwxrwx 1 root root 17 loka   28 19:55 /usr/local/bin/gnome-calculator -> /usr/bin/firejail

$ file $(which gedit)
/usr/local/bin/gedit: symbolic link to /usr/bin/firejail

$ file $(which gnome-calculator)
/usr/local/bin/gnome-calculator: symbolic link to /usr/bin/firejail

“loka” 似乎是 October 的缩写,我有英语系统,但日期似乎仍使用芬兰语。

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin

更新 2:进一步请求来自的命令输出:

fsck 通过 U 盘运行

$ sudo fsck -p /dev/nvme0n1p1
fsck from util-linux 2.36.1
fsck.fat 4.2 (2021-01-31)
/dev/nvme0n1p1: 11 files, 1336/130812 clusters

$ sudo fsck -p /dev/nvme0n1p2
fsck from util-linux 2.36.1
/dev/nvme0n1p2: clean, 478908/31227904 files, 49277410/124895488 blocks

回到系统:

$ whereis gedit
gedit: /usr/bin/gedit /usr/lib/x86_64-linux-gnu/gedit /usr/local/bin/gedit /usr/share/gedit /usr/share/man/man1/gedit.1.gz

$ sha256sum /usr/bin/gedit /usr/local/bin/youtube-dl
27545f7fb059c356feeb88a872719c074d0fd5169564ec3fbb3cbb312b093184  /usr/bin/gedit
7880e01abe282c7fd596f429c35189851180d6177302bb215be1cdec78d6d06d  /usr/local/bin/youtube-dl

sudo ldconfig按照答案的建议尝试使用,但没有得到任何输出,也没有任何明显的变化。

更新 3:刚刚发现所有受影响的软件仍可使用完整路径(例如/usr/bin/gedit),问题似乎与这些应用程序的链接和快捷方式有关。诸如右键单击选项“使用文本编辑器打开”之类的功能也仍然无法使用。

答案1

这里有一个理论:

在运行第一个命令之前,/usr/local/bin/youtube-dl已经存在并且是 的符号链接/usr/bin/firejail。可能来自以前的安装。

curl ... -o /usr/local/bin/youtube-dl命令不会用新文件替换现有符号链接。相反,它会覆盖文件的内容,从而覆盖/usr/bin/firejail。通常,这是一个多调用二进制文件,它会检查调用它的名称并在沙箱中执行实际应用程序。但 youtube-dl 代码当然不会做这些事情。

正如评论中所证实的,重新安装 firejail 会替换/usr/bin/firejail为可用的版本。


作为参考,典型的 firejail 配置设置如下防火墙工作原理如下:对于每个沙盒应用程序,都有一个/usr/local/bin指向的符号链接/usr/bin/firejail。真正的可执行文件位于/usr/bin沙盒中并在沙盒内执行。这也是为什么使用完整/usr/bin路径启动程序仍然有效,但默认路径会选择符号链接。

相关内容