¿Por qué "ls" genera esporádicamente solo "." en el directorio raíz de una unidad externa?

9

En el directorio raíz de mi unidad flash USB, a veces cuando ejecuto ls, la salida es normal y enumera los archivos. En otras ocasiones, la salida es simplemente una línea:

$ ls
.

Si lo intento ls -laen uno de esos momentos, obtengo esto:

$ ls -la
ls: .: Invalid argument

Si corro lsuna y otra vez varias veces, parece devolver la salida normal o la anormal básicamente al azar.

lsparece funcionar normalmente en otros directorios. ls $drivenameincluso parece funcionar bien desde el directorio principal, y ls ..parece funcionar bien desde un directorio secundario. (Aunque no puedo estar 100% seguro de los que "funcionan normalmente" ya que el comportamiento es indeterminado al principio). Probé otras dos unidades USB externas y obtuve el mismo comportamiento.

¿Que está pasando aqui? Estoy en Mac OS X 10.11.3.

Editar: Buena idea, pero parece que no estoy usando un alias, y /bin/lsda el mismo resultado.

leekaiinthesky
fuente
2
Este comportamiento inusual podría ser el resultado de un alias que funciona mal. ¿Qué pasa si lo usas /bin/ls?
DopeGhoti
¿Funciona bien en otros directorios?
Liam
/bin/lsda el mismo resultado, a veces dando salida .. lsparece funcionar normalmente en otros directorios. ls NO\ NAMEincluso parece funcionar bien desde el directorio principal, y ls ..parece funcionar bien desde un directorio secundario. (Aunque no puedo estar 100% seguro de los que "funcionan normalmente" ya que el comportamiento es indeterminado para empezar).
leekaiinthesky
¿Qué sistema de archivos estás usando en esas unidades flash? Tal vez sea una anomalía derivada de un sistema de archivos basado en Windows
RSFalcon7
¿Qué versión de lsestás usando? /bin/ls --versiondebería funcionar
RSFalcon7

Respuestas:

6

Puede ser un error en el controlador del sistema de archivos para FAT32 en versiones recientes de OSX. Esto también parece ocurrir cuando el directorio de trabajo está en la raíz de la unidad montada. Si está en un subdirectorio o en cualquier otro lugar del sistema, las cosas parecen funcionar.

Hay una discusión interesante en este hilo que incluye rastros del sistema. https://github.com/robbyrussell/oh-my-zsh/issues/4161

Neil
fuente
2

SOLUCIÓN: (probablemente parte de lo que agradecería el autor de la pregunta, incluso si no lo pidieran específicamente)

Consulte el directorio actual en casi cualquier otra forma que no sea .. Ejemplo:

cda un subdirectorio y luego ejecutar lsen el directorio principal. Es decir, ingrese algo como esto:

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

O refiérase a él por su nombre de ruta completo. Ejemplo:

ls /Volumes/microSD007

Para mí, cualquiera de estas soluciones funciona (es decir, dan como resultado la salida esperada) cuando lsme da la misma salida incorrecta que informó el OP. (Y para mí, no hay salida en dmesg cuando lsactúa de manera extraña).

Estoy viendo el mismo mal funcionamiento en 10.12.6 en Terminal.app ejecutando bash. Lo mismo en cshe sh, incluso después de configurar TERM en vt100. Esta solución también funciona en esos depósitos.

Y estoy de acuerdo en que hay un error stat64, como se indica en el zshhilo del problema al que Neil nos señala. (Pensé que el problema era causado por una memoria flash defectuosa y / o falsa, y aún me pregunto si eso es un factor a veces).

Noté que este error también afecta:

  • Modo directo de Emacs, porque llama ls, y
  • ls cuando se usa en el modo shell de Emacs.
Matthew Elvey
fuente
2
No entiendo por qué Goro hizo las ediciones que hicieron, y no se proporcionó ningún resumen de edición. Creo que empeoraron la respuesta, y ahora veo que recibió un -1. Proporcioné una solución, al eliminar mi indicador de "solución" parece que estoy reclamando / tratando de proporcionar una respuesta directa. Creo que estoy ofreciendo más que un comentario, pero menos que una respuesta. ¿No es eso para alentar? Estoy identificado un nuevo; ¿No sería apropiado un resumen de edición y una razón para el -1? Goro también eliminó una respuesta mejor y más corta que había agregado. No lo entiendo
Matthew Elvey
1
Estoy en la cerca; en general, las respuestas deben responder a la pregunta, no solo proporcionar más información, sino que solucionar el problema probablemente sea parte de lo que estaba buscando el autor de la pregunta, incluso si no lo mencionaban específicamente. La mayoría de las ediciones parecen innecesarias, y al menos una definitivamente daña el formato, así que las revertí. No estoy seguro de si la publicación tuvo un voto negativo, pero actualmente tiene 2 votos a favor y 0 votos a favor
Michael Mrozek
0

Si a veces extrae la unidad, la respuesta es que cada vez que reinserta la unidad, debe volver al directorio utilizando cd. Esto se debe a que el descriptor de archivo abierto por su shell para leer el directorio se invalida cuando se extrae la unidad, y no se reinicializa automáticamente cuando se reinserta la unidad (aunque haya utilizado la unidad en otro terminal o administrador de archivos).

Si la unidad nunca se extrae, puede ser un problema de hardware o quizás algún software que desmonte la unidad por algún motivo; Debe proporcionar los registros del sistema.

Ley29
fuente