「ls」が時々外部ドライブのルートディレクトリにのみ「.」を出力するのはなぜですか?

「ls」が時々外部ドライブのルートディレクトリにのみ「.」を出力するのはなぜですか?

私のUSBドライブのルートディレクトリからを実行すると、時々ls出力が正常で、ファイルが一覧表示されます。それ以外の場合、出力は1行だけです。

$ ls
.

これらのいずれかを試してみると、ls -la次のような結果が得られます。

$ ls -la
ls: .: Invalid argument

ls連続して複数回実行すると、デフォルトでは正常出力または異常出力がランダムに返されるようです。

ls他のディレクトリではうまくいくようです。ls $drivename親ディレクトリでもうまく機能しているようで、ls ..下位ディレクトリでもうまく機能しているようです。 (最初から動作が不確実だったので、「ただ動作する」と100%確信することはできませんが。)2つの異なる外部USBドライブを試してみましたが、同じ動作が現れました。

ここで何が起こっているのでしょうか?私はMac OS X 10.11.3を使用しています。

編集する:良い考えですが、エイリアスを使用しないようで、/bin/ls同じ結果を提供します。

答え1

これは、OSの最新バージョンにある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でも同じ欠陥が表示されます。 TERMをvt100に設定した後もcsh同じです。shこの回避策はこれらのシェルにも適用されます。

Neilが私たちに指摘した質問スレッドで指摘したように、バグがあることにstat64同意します。zsh(私は問題が欠陥や偽のフラッシュメモリによって引き起こされると思いましたが、それでも要因かどうか疑問に思います。)

このバグは次にも影響を与えることがわかりました。

  • Emacsのdiredモードは次のとおりですls
  • lsEmacsのシェルモードで使用するとき。

答え3

時々ドライブを削除する場合は、ドライブを再挿入するたびにそのディレクトリにCDを再度移動する必要があります。これは、ディレクトリを読み取るためにシェルで開いたファイル記述子がドライブを削除すると無効になります。このドライブは使用されている内)。

ドライブが取り外されていない場合は、ハードウェアに問題があるか、一部のソフトウェアが何らかの理由でドライブをマウント解除した可能性があります。システムログを提供する必要があります。

関連情報