为什么Windows和Linux在DVD光驱上看到的文件不一样呢?

我有一张DVD ROM,上面有一些教学资源(Headway初学者英语教学教师DVD)。当我从Ubuntu机器查看DVD时,我看到一组文件(其中包括一个setup-linux文件等其他文件,但这并不起作用)。
当我从Windows机器查看同一张DVD时,我看到了另一组文件,包括一个setup-windows.exe文件。
两台机器都没有看到所有的文件,但是有一些是共同的。
我的问题是:
  1. 这是如何工作的?
  2. 我如何在使用Ubuntu时查看所有文件?
编辑:这不是由于在文件管理器中查看时文件被“隐藏”,更低级别的事情如“ls -a”也无法显示缺失的文件。
编辑2:我正在使用Ubuntu 18.04 LTS。

你没有说你使用的是哪个Ubuntu版本,但在nautilus(或者Gnome的文件管理器'Files')中,如果你进入图标视图模式并点击菜单,你可以选择“显示隐藏文件”,然后你就能看到所有的文件了。如果在详细信息(或列表)模式下,这个选项有点隐蔽(在我的19.04版本上;抱歉我平时不用nautilus)。Windows默认使用一个文件系统标志来隐藏文件,而*nix(Ubuntu、任何GNU/Linux、苹果或Unix)则使用'.'作为文件名的第一个字符来使文件“隐藏”。 - guiverc
2这不是一个隐藏文件的问题 - 在Linux中使用ls -a命令不会显示丢失的文件。在Windows资源管理器中也不能通过“显示隐藏文件”来显示它们。 - spookylukey
2个回答

我不确定这是正确答案,但也许它会为你提供一些细节,帮助你。
这可能是因为MS-Windows和Unix在DVD上使用不同的文件系统 - 即使是在同一张DVD上。光盘上的文件通常是按照ISO 9660标准中指定的文件系统协议来组织的(请参见末尾的注释)。
但是该标准允许扩展,Microsoft设计了自己的扩展名叫做"Joliet",它允许Microsoft Windows兼容的操作系统读取具有更多功能(更长的名称和支持Unicode)的不同文件名,而标准的ISO 9660文件系统不允许。
对于类Unix风格的操作系统(如Linux),还开发了另一个扩展名叫做"Rock Ridge",以允许更长的文件名、类Unix风格的权限和其他一些功能。

在同一光盘介质上同时具有Rock Ridge和Joliet扩展非常常见,但可能是该DVD的制作者巧妙地使用这些扩展,使得只有与MS-Windows相关的文件显示在系统的Joliet部分,而只有与Linux特定文件显示在系统的Rock Ridge部分。在this stackexchange回答中讨论的isoinfo程序可能提供更多信息。

注意:

正如评论中讨论所提到的,虽然许多媒体仍然使用ISO 9660及其扩展进行创作,其中OP中讨论的技巧可能会发生,但ISO 9660已经过时,现代媒体应使用UDF(ISO 13346)进行创作,它是一种通用磁盘格式,仅允许对整个文件系统进行单一视图 - 因此,在使用UDF进行创作的磁盘上可能无法实现此类技巧。


27谢谢,已经足够了 - isoinfo dev=/dev/dvd -J -ls 在Linux中显示了缺失的文件。 - spookylukey
25非常好的答案,但我发现一个重要细节缺失,那就是在Linux上你可以使用--norock--nojoliet挂载选项来决定你想要看到哪种树形布局。 - kasperd
8哇,这实际上出奇地优雅。 - Lightness Races in Orbit
@kasperd - 谢谢,我之前不知道这些挂载标志。 - Guss
4一些工具,例如mkisofs,实际上允许您指定如何生成这些内容。链接的手册页面中的“示例”部分展示了如何创建一个ISO文件,其中包含一个名为README的文件,但根据您用于查看CD的系统不同,其内容会有所不同。引用手册页面的话:“使用隐藏选项的组合可能会产生各种奇怪的结果...” - Herohtar
你是如何在2019年的回答中提到ISO-9660而没有提到UDF的? - user541686
1如果与问题中提到的证据不一致,那就是无关的。 - Ben Voigt
@BenVoigt:我指的是句子“光盘上的文件通常使用ISO 9660标准中指定的文件系统协议进行排列。”如果要包括这句话,我认为在2019年应该用UDF而不是ISO-9660,因为我认为后者不是光盘现在通常使用的。 (是否应该包括此内容并不是我的重点。) - user541686
3我很高兴评论中提到了UDF,但我不确定它是否与讨论相关 - 如果OP的DVD文件系统是通用格式,则无论在Windows和Linux中,您都无法获得不同的视图,就我所知。 - Guss
@Mehrdad:如果你用UDF替换ISO-9660,答案就会是错误的。可以以某种方式提到UDF,并且可能会更好地说“有时候安排... ISO 9660而不是较新的UDF”,因为ISO 9660是否仍然“常见”还有疑问。但是答案绝对是关于你可以在ISO 9660上做的巧妙事情,而不是UDF。 - Ben Voigt
@Guss:我只是删掉我上面引用的那句话就好了。ISO-9660在10年前就已经过时了,就像UDF一样,它并没有解释Windows和Linux之间的任何区别。[我们就到此为止吧,我不觉得继续下去有什么意义。] - user541686
@Mehrdad:最近手边有的光盘是用于申报2018年税务的H&B Block光盘,它采用的是ISO 9660 + Joliet格式。我记得UDF是用于可重写光盘,文件可以逐步添加到文件系统中,而ISO9660是用于制作光盘,所有文件在记录之前都要进行准备。但你忽略了一个问题,答案涉及到操作系统对ISO9660扩展的处理方式不同。你不能将ISO9660拿出来,也不能加入UDF。你关于"[ISO 9660]对Windows和Linux之间没有任何区别"的说法是错误的。 - Ben Voigt
1@Mehrdad - 我在我的回答中添加了一条关于UDF的存在和重要性的注释,尽管正如Ben Voigt所提到的那样 - 我相信问题本身告诉我们并没有使用UDF。 - Guss

很有可能,“rockridge”(unix)和“joliet”(microsoft)表以不同的方式映射裸的iso9660文件名。它们都涉及每个目录中的“映射”,基本上是说哪些实际的iso文件(8+点+3个字符)应该被视为哪个更长的名称。因此,每个文件实际上有两个名称,一个限制在8+3个字符内,另一个则没有限制。
在rockridge上,这种映射是一个实际的文件,会添加到每个目录中,我记得它的名字是“TRANS.TBL”或类似的。而在joliet上,这是一种非常丑陋和愚蠢的hack,其中“目录条目”不是一个实际的文件,而是为此目的保留的。

哦,我忘了补充一点:Windows只支持Joliet文件系统(这一点并不令人惊讶),而Linux则同时支持两种文件系统(这也不足为奇)。尽管如此,在Linux和大多数其他Unix系统中,默认情况下Rockridge文件系统优先。然而,有挂载选项可以禁用其中一种或两种文件系统。如果你禁用了两者,那么你将只能看到类似于DOS或Windows 3.x及之前版本的短8.3文件名。根据你使用的文件管理器和桌面环境,可能会有一种“用户友好”的方式来完成这个操作,而无需键入命令 :) - delt