Dlaczego „ls” sporadycznie wyświetla tylko „.” w katalogu głównym dysku zewnętrznego?

9

W katalogu głównym mojego dysku flash USB, czasami po uruchomieniu ls, wyjście jest normalne i zawiera listę plików. W innych przypadkach dane wyjściowe są po prostu jednym wierszem:

$ ls
.

Jeśli spróbuję ls -law którymś z tych przypadków, otrzymam to:

$ ls -la
ls: .: Invalid argument

Jeśli lskilkakrotnie biegnę od siebie do siebie, wydaje się, że zwraca albo normalne, albo nienormalne wyjście w zasadzie losowo.

lswydaje się działać normalnie w innych katalogach. ls $drivenamenawet wydaje się działać dobrze z katalogu nadrzędnego i ls ..wydaje się działać dobrze z katalogu podrzędnego. (Chociaż nie mogę być w 100% pewien tych, które „działają normalnie”, ponieważ na początku zachowanie jest nieokreślone). Wypróbowałem dwa inne zewnętrzne dyski USB i uzyskałem to samo zachowanie.

Co tu się dzieje? Korzystam z systemu Mac OS X 10.11.3.

Edycja: Niezły pomysł, ale chyba nie używam aliasu i /bin/lsdaje ten sam rezultat.

leekaiinthesky
źródło
2
To niezwykłe zachowanie może być wynikiem nieprawidłowego działania aliasu. Co się stanie, jeśli użyjesz /bin/ls?
DopeGhoti
czy działa dobrze w innych katalogach?
Liam,
/bin/lsdaje ten sam rezultat, czasami generując .. lswydaje się działać normalnie w innych katalogach. ls NO\ NAMEnawet wydaje się działać dobrze z katalogu nadrzędnego i ls ..wydaje się działać dobrze z katalogu podrzędnego. (Chociaż nie mogę być w 100% pewien tych, które „działają normalnie”, ponieważ na początku zachowanie jest nieokreślone.)
leekaiinthesky
Jakiego systemu plików używasz w tych dyskach flash? Być może jest jakaś anomalia pochodzą z systemu plików z systemem Windows
RSFalcon7
Jakiej wersji lsużywasz? /bin/ls --versionpowinien działać
RSFalcon7

Odpowiedzi:

6

Może to być błąd w sterowniku systemu plików FAT32 w najnowszych wersjach OSX. Dzieje się tak również wtedy, gdy katalog roboczy znajduje się w katalogu głównym podłączonego dysku. Jeśli znajduje się w podkatalogu lub gdziekolwiek indziej w systemie, wydaje się, że wszystko działa.

W tym wątku jest kilka interesujących dyskusji, w tym ślady systemowe. https://github.com/robbyrussell/oh-my-zsh/issues/4161

Neil
źródło
2

Obejście problemu: (prawdopodobnie część tego, co pytający doceniłby, nawet gdyby nie poprosił o to specjalnie)

Zapoznaj się z bieżącym katalogiem prawie w jakikolwiek inny sposób niż .. Przykład:

cddo podkatalogu, a następnie uruchom lskatalog macierzysty. Oznacza to, że wpisz coś takiego:

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

Lub odwołaj się do niego, podając pełną nazwę ścieżki. Przykład:

ls /Volumes/microSD007

Dla mnie jedno z tych obejść działa (oznacza to, że dają oczekiwany wynik), gdy lsdaje mi to samo błędne wyjście, które zgłosił OP. (A dla mnie nie ma wyjścia w dmesg, gdy lsdziała dziwnie.)

Widzę te same awarie w wersji 10.12.6 w Terminal.app podczas uruchamiania bash. Samo w cshi sh, nawet po ustawieniu TERM na vt100. To obejście działa również w tych powłokach.

I zgadzam się, że jest błąd stat64, jak wskazano w zshwątku, na który wskazuje Neil. (Myślałem, że problem jest spowodowany wadliwą i / lub fałszywą pamięcią flash, i nadal zastanawiam się, czy to czasem jest czynnik).

Zauważyłem, że ten błąd wpływa również na:

  • Tryb diodowy Emacsa, ponieważ wywołuje lsi
  • ls gdy jest używany w trybie powłoki Emacsa.
Matthew Elvey
źródło
2
Nie rozumiem, dlaczego Goro dokonał edycji, którą zrobili i nie podano podsumowania edycji. Myślę, że pogorszyli odpowiedź, a teraz widzę, że otrzymała -1. Udostępniłem obejście, usunięcie mojego wskaźnika „obejścia” sprawia, że ​​wydaje się, że twierdzę / próbuję udzielić bezpośredniej odpowiedzi. Myślę, że oferuję coś więcej niż komentarz, ale mniej niż odpowiedź. Czy nie należy tego zachęcać? Zidentyfikowałem nowy; czy podsumowanie edycji i powód -1 nie byłyby odpowiednie? Goro usunął także krótszą, lepszą odpowiedź, którą dodałem. Nie rozumiem
Matthew Elvey
1
Jestem na płocie; odpowiedzi zazwyczaj wymagają odpowiedzi na pytanie, a nie tylko podania dodatkowych informacji, ale obejście problemu jest prawdopodobnie częścią tego, czego szukał pytający, nawet jeśli nie wspomniał o nim konkretnie. Większość zmian wydaje się trochę niepotrzebna i przynajmniej jeden zdecydowanie popsuwa formatowanie, więc wycofałem je. Nie jestem pewien, czy post miał kiedyś głosowanie negatywne, ale obecnie ma 2 głosy przychylne i 0 głosów negatywnych
Michael Mrozek
0

Jeśli czasami wyjmujesz dysk, odpowiedź brzmi: za każdym razem, gdy ponownie włożysz dysk, musisz wrócić do katalogu za pomocą cd. Wynika to z faktu, że deskryptor pliku otwarty przez powłokę w celu odczytania katalogu jest unieważniany po usunięciu dysku i nie jest ponownie inicjowany automatycznie po ponownym włożeniu dysku (nawet jeśli dysk był używany w innym terminalu lub menedżerze plików).

Jeśli dysk nigdy nie zostanie usunięty, przyczyną może być problem sprzętowy lub oprogramowanie, które z jakiegoś powodu odmontowuje dysk; powinieneś dostarczyć logi systemowe.

Law29
źródło