Почему «ls» время от времени выдает только «.» в корневом каталоге внешнего диска?

9

В корневом каталоге моего флэш-накопителя USB иногда при запуске lsвыводится нормально и в нем перечислены файлы. В других случаях вывод - это просто одна строка:

$ ls
.

Если я попробую ls -laв один из тех случаев, я получу это:

$ ls -la
ls: .: Invalid argument

Если я бегу lsтуда-сюда несколько раз, кажется, что он возвращает либо нормальный выходной сигнал, либо ненормальный выходной сигнал в основном случайным образом.

lsкажется, работает нормально в других каталогах. ls $drivenameдаже кажется, что работает нормально из родительского каталога, и, ls ..кажется, работает нормально из дочернего каталога. (Хотя я не могу быть на 100% уверен в тех, которые «работают нормально», поскольку поведение с самого начала неопределенное.) Я попробовал два других внешних USB-накопителя и получил то же самое поведение.

Что тут происходит? Я на Mac OS X 10.11.3.

Изменить: хорошая идея, но я, кажется, не использую псевдоним, и /bin/lsдает тот же результат.

leekaiinthesky
источник
2
Это необычное поведение может быть результатом неправильного псевдонима. Что произойдет, если вы используете /bin/ls?
DopeGhoti
Ls отлично работает в других каталогах?
Лиам
/bin/lsдает тот же результат, иногда вывод .. lsкажется, работает нормально в других каталогах. ls NO\ NAMEдаже кажется, что работает нормально из родительского каталога, и, ls ..кажется, работает нормально из дочернего каталога. (Хотя я не могу быть на 100% уверен в тех, кто «работает нормально», так как поведение неопределенно с самого начала.)
leekaiinthesky
Какую файловую систему вы используете на этих флешках? Возможно, какая-то аномалия произошла от файловой системы на базе Windows
RSFalcon7
Какую версию lsвы используете? /bin/ls --versionдолжен работать
RSFalcon7

Ответы:

6

Это может быть ошибка в драйвере файловой системы для FAT32 в последних версиях OSX. Это также происходит только в том случае, если рабочий каталог находится в корне подключенного диска. Если это находится в подкаталоге или где-либо еще в системе, вещи, кажется, работают.

В этой теме есть интересное обсуждение, включая системные следы. https://github.com/robbyrussell/oh-my-zsh/issues/4161

Нил
источник
2

ВОЗМОЖНОЕ РЕШЕНИЕ: (вероятно, это было бы частью того, что просил бы спрашивающий, даже если бы он специально не просил об этом)

Обратитесь к текущему каталогу почти любым способом, кроме .. Пример:

cdв подкаталог, а затем запустите lsв родительском каталоге. То есть введите что-то вроде этого:

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

Или обратитесь к нему по полному пути. Пример:

ls /Volumes/microSD007

Для меня любой из этих обходных путей работает (то есть, они приводят к ожидаемому результату), когда lsдает мне тот же неправильный вывод, о котором сообщил OP. (И для меня нет вывода в dmesg, когда lsдействует странно.)

Я наблюдаю те же неисправности на 10.12.6 в Terminal.app под управлением bash. То же самое cshи sh, даже после установки TERM на vt100. Этот обходной путь работает и в этих оболочках.

И я согласен, что в баге есть ошибка stat64, на которую указывает zshНил. (Я думал, что проблема была вызвана некорректной и / или фальшивой флэш-памятью, и все еще удивляюсь, иногда ли это так.)

Я заметил, что эта ошибка также влияет на:

  • Dired режим Emacs, потому что он вызывает ls, и
  • ls когда он используется в режиме оболочки Emacs.
Мэтью Элви
источник
2
Я не понимаю, почему Горо сделал правки, которые они сделали, и сводка правок не была предоставлена. Я думаю, что они сделали ответ хуже, и теперь я вижу, что он получил -1. Я предоставил обходной путь, при удалении индикатора «обходного пути» создается впечатление, что я утверждаю / пытаюсь дать прямой ответ. Я думаю, что я предлагаю больше, чем комментарий, но меньше, чем ответ. Разве это не должно поощряться? Я опознан новый; не подойдет ли краткое изложение и причина -1? Горо также удалил короткий, лучший ответ, который я добавил. Я не понимаю
Мэтью Элви
1
Я на заборе; Как правило, ответы должны отвечать на вопрос, а не просто предоставлять больше информации, но решение этой проблемы, вероятно, является частью того, что искал спрашивающий, даже если они специально не упоминали об этом. Большинство правок кажутся ненужными, и, по крайней мере, одно из них явно портит форматирование, поэтому я откатил их назад. Я не уверен, что у поста было когда-либо отрицательное, но в настоящее время оно имеет 2 отрицательных голоса и 0 отрицательных голосов
Майкл
0

Если вы иногда удаляете диск, то ответ таков: каждый раз, когда вы снова вставляете диск, вы должны возвращаться в каталог с помощью cd. Это связано с тем, что дескриптор файла, открытый вашей оболочкой для чтения каталога, становится недействительным при извлечении диска и не инициализируется автоматически при повторной установке диска (даже если вы использовали диск в другом терминале или файловом менеджере).

Если диск никогда не удаляется, то это может быть аппаратная проблема или, возможно, какое-то программное обеспечение, которое по какой-то причине отключает диск; Вы должны предоставить системные журналы.

Law29
источник