为什么“ls”偶尔只输出“.”在外部驱动器的根目录中?

为什么“ls”偶尔只输出“.”在外部驱动器的根目录中?

在我的U盘根目录下,有时运行时ls,输出正常,并列出了文件。在其他时候,输出只是一行:

$ ls
.

如果我尝试ls -la其中一个时间,我会得到以下结果:

$ ls -la
ls: .: Invalid argument

如果我ls连续运行多次,它似乎基本上随机返回正常输出或异常输出。

ls在其他目录中似乎可以正常工作。ls $drivename甚至在父目录中似乎工作正常,并且ls ..在子目录中似乎工作正常。 (虽然我不能 100% 确定那些“正常工作”,因为行为一开始就不确定。)我尝试了另外两个外部 USB 驱动器并得到了相同的行为。

这里发生了什么?我使用的是 Mac OS X 10.11.3。

编辑:好主意,但我似乎没有使用别名,并/bin/ls给出了相同的结果。

答案1

这可能是最新版本 OSX 上 FAT32 文件系统驱动程序中的错误。这也仅当工作目录位于已安装驱动器的根目录时才会发生。如果它位于子目录或系统上的其他任何位置,则一切似乎都可以正常工作。

该线程中有一些有趣的讨论,包括系统跟踪。 https://github.com/robbyrussell/oh-my-zsh/issues/4161

答案2

解决方法:(即使提问者没有特别要求,这可能也是提问者会欣赏的部分)

除了 . 之外,几乎可以用任何方式引用当前目录.。例子:

cd到子目录,然后ls在父目录上运行。也就是说,输入如下内容:

mkdir S; cd S ; /bin/ls -al ..

或者通过它的完整路径名引用它。例子:

ls /Volumes/microSD007

ls对我来说,当给我OP报告的相同错误输出时,这些解决方法都有效(也就是说,它们会产生预期的输出) 。 (对我来说,当ls行为异常时 dmesg 中没有输出。)

我在 10.12.6 上运行 bash 的 Terminal.app 中看到同样的故障。csh和中相同sh,即使将 TERM 设置为 vt100 后也是如此。此解决方法也适用于这些 shell。

我同意 中存在一个错误stat64,正如zshNeil 向我们指出的问题线程中所指出的那样。 (我曾认为该问题是由有缺陷和/或假闪存引起的,有时仍然想知道这是否是一个因素。)

我注意到这个错误也会影响:

  • Emacs 的 dired 模式,因为它调用ls, 和
  • ls当它在 Emacs 的 shell 模式下使用时。

答案3

如果您有时删除驱动器,那么答案是每次重新插入驱动器时,都必须使用 cd 返回到该目录。这是因为当驱动器被移除时,由 shell 打开的用于读取目录的文件描述符将失效,并且在重新插入驱动器时不会自动重新初始化(即使您可能已在另一个终端或文件管理器中使用了该驱动器)。

如果驱动器从未被移除,则可能是硬件问题,或者可能是某些软件出于某种原因卸载了驱动器;您应该提供系统日志。

相关内容