如何检查Appimage中的文件?

从我所了解的来看,Appimage文件是一个压缩的应用程序及其所有资源,当运行时会自动挂载并执行。
我想检查一下我下载的Appimage文件中的资源和文件,而不实际运行Appimage。
我该如何做到这一点?

在发布之前,我搜索了这个问题,并惊讶地发现没有任何已经发布的版本。因此,我将这个问题尽可能地保持简单。 - Wildcard
1目前似乎没有一种可靠的方法来在不执行二进制文件的情况下完成这个操作 :( 文档建议使用mount命令,但即使如此,你仍需要从文件中提取图像偏移量。他们的错误跟踪器中已经记录了一个关于创建能够自动挂载的外部命令的问题,编号为bug #830 - IMSoP
2个回答

不更改它们的扩展名:

因此,一个AppImage可以被挂载或提取。也就是说:

要挂载它们:(相当于执行它们,这是OP想要避免的 - 正因为如此,需要注意 - 如@Jasen在评论中所述)

my.AppImage --appimage-mount

The AppImage is unmounted when the application called in the example is interrupted (e.g., by pressing Ctrl+C, closing the terminal etc.).

Note: This is only available for type 2 AppImages. Type 1 AppImages do not provide any self-mounting mechanism. To mount type 1 AppImages, use

mount -o loop

提取它们的方法:

另一种挂载AppImage的替代方法是提取其内容。

这样可以修改内容。生成的目录是一个有效的AppDir,用户可以再次使用appimagetool从中创建AppImage。

类似于挂载AppImage,有一个简单的命令行开关可以无需外部工具来提取类型2的AppImage的内容。只需调用带有参数--appimage-extract的AppImage。这将导致运行时创建一个名为squashfs-root的新目录,其中包含AppImage的AppDir规范的内容。

类型1的AppImage需要使用已弃用的工具AppImageExtract来提取其内容。它在功能上非常有限,需要图形界面才能运行。它会在用户的桌面目录下创建一个新目录。

在superuser上有一个回答如何从AppImage中提取文件

看着我的应用图像,我发现只有其中一些可以使用gnome-disk-image-mounter挂载。还有这里

更改扩展名:

并非所有的AppImage都具有完全相同的结构,但它们都是存档文件。根据维基百科的说法:“版本1.0的AppImage是一个ISO 9660 Rock Ridge文件(可选择进行zisofs压缩),其中包含一个最小的AppDir和一个微小的运行时环境。(版本2可能使用其他文件系统镜像格式,如SquashFS)”。

因此,可以进行提取。通过这种方式,您可以检查文件。

只需将扩展名从AppImage更改为我的文件管理器file-roller可以读取的存档扩展名(我已经测试过zip7z等),然后双击该文件即可在file-roller中显示其内容:

enter image description here

当然,它们也可以被提取出来。"提取"文件管理器上下文菜单操作也可以用于提取存档。(正如评论中所说,使用"unzip"命令解压一个以".zip"扩展名重命名的文件会报错,所以将其重命名为".zip"并不是正确的选择,但在像"file-roller"这样的存档管理器中可以工作。)

我尝试将一个AppImage复制到test.zip并运行unzip test.zip,但是我收到了以下消息:未找到中央目录签名。这个文件要么不是一个zip文件,要么它是一个多部分存档的一部分。在后一种情况下,中央目录和zip文件注释将在此存档的最后一个磁盘上找到。 注意:test.zip可能是一个普通的可执行文件,而不是一个存档文件。 - Wildcard
2@Wildcard - 看起来一些档案管理器(如file-roller)并不在乎正确的档案扩展名,只要文件是带有档案扩展名的档案,它们就能够提取出来。而unzip工具则是以扩展名为导向,并寻找更多与扩展名相关的属性来进行操作。因此,可以使用文件管理器的提取操作或者file-roller -f来代替unzip。请参阅file-roller --help获取详细信息。 - cipricus
1我想指出的是,第一种方法实际上执行了appimage二进制文件,因此不适合检查不受信任的文件。 - Jasen
@Jasen - 我已经在那上面添加了一条注释。 - cipricus

根据AppImage的文档,documentation--appimage-mount选项允许您挂载和检查内容。
例如:
./Joplin.AppImage --appimage-mount /tmp/mount_myXXXX

应用程序的帮助通常可以通过像其他应用程序一样使用./whatever.AppImage --help来显示,但要查看AppImage特定选项,您可以运行:
./whatever.AppImage --appimage-help

这是输出的相关部分:
AppImage options:
...
  --appimage-mount                Mount embedded filesystem image and print
                                  mount point and wait for kill with Ctrl-C

你不需要为它创建挂载点,也不需要之后删除目录;AppImage会处理所有这些事情。

另外,使用 --appimage-extract 来进行解压。 - cipricus
8你正在尝试检查的文件不应该被执行。这是一个危险的操作。 - Syfer Polski
2尤其是在OP指定的情况下,“不实际运行Appimage”。 - Jon Bentley