在已安装的驱动器上运行二进制文件

在已安装的驱动器上运行二进制文件

我很好奇,想知道是否有可能。我想要做的是运行安装在一台旧的、半破损的 Linux (solus) 笔记本电脑上的 Firefox 二进制文件,我无法再启动它了。我想在几年前的状态运行它,这样它仍然可以登录到同一个 Firefox 帐户来恢复一些丢失的书签。

因此,我启动了一个全新的 live solus usb 并挂载了驱动器,并且能够在 //usr/bin 中看到 Firefox 二进制文件,但是当我尝试运行它(或检查其版本)时,它会运行/报告 Firefox 89。这非常令人困惑,因为该二进制文件不应该是版本 89,因为自 Firefox 89 发布以来,该笔记本电脑甚至都没有打开过(并且 solus 不会自动更新)。我想它可能正在从 iso 映像中提取一些其他库或其他东西来运行 Firefox。为了避免这个显而易见的问题,是的,我正在使用挂载驱动器的 /usr/bin 的完整路径运行 Firefox,所以我真的很惊讶这种情况正在发生。当我尝试运行仅安装在驱动器上的其他二进制文件时,出现有关缺少共享库的错误。是否可以从这样的挂载驱动器完全运行二进制文件?我可能做了一些明显错误的事情才导致这种奇怪的版本行为?

答案1

实际看一下二进制文件。到目前为止,你只看到了某物名为“firefox”的地方有,但是没有什么是的。运行ls -l它来验证它是常规文件还是链接;或者file额外检查其内容。它真的是二进制文件吗?更可能是其他东西:a) 指向真实二进制文件的符号链接,或 b) 启动真实二进制文件的 shell 脚本。

$ ls -l /mnt/usr/bin/firefox
-rwxr-xr-x 1 root root 45 Aug 10 21:41 /mnt/usr/bin/firefox*
                       ^^- too small to be a real binary

$ file /mnt/usr/bin/firefox
/mnt/usr/bin/firefox: POSIX shell script, ASCII text executable

$ cat /mnt/usr/bin/firefox
#!/bin/sh
exec /usr/lib/firefox/firefox "$@"

因为它使用绝对路径执行另一个程序,所以它最终总是会执行在主机操作系统中找到的程序。

(在这种情况下,脚本根本没有做太多事情 - 事实上它可能只是一个符号链接 - 所以最简单的解决方法是转到已安装驱动器的 /usr/lib/firefox 并运行在那里找到的实际二进制文件。)

相关内容