"ls"가 가끔 외부 드라이브의 루트 디렉터리에만 "."을 출력하는 이유는 무엇입니까?

"ls"가 가끔 외부 드라이브의 루트 디렉터리에만 "."을 출력하는 이유는 무엇입니까?

내 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동일한 결과를 제공합니다.

답변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에서도 동일한 결함이 나타납니다. TERM을 vt100으로 설정한 후에도 csh와 동일합니다 . sh이 해결 방법은 이러한 셸에도 적용됩니다.

Neil이 우리에게 지적한 질문 스레드에서 지적했듯이 stat64버그 가 있다는 데 동의합니다 . zsh(나는 문제가 결함이나 가짜 플래시 메모리로 인해 발생한다고 생각했지만 여전히 그것이 요인인지 궁금합니다.)

이 버그는 다음에도 영향을 미치는 것으로 나타났습니다.

  • Emacs의 dired 모드는 다음과 같습니다 ls.
  • lsEmacs의 쉘 모드에서 사용될 때.

답변3

가끔 드라이브를 삭제하는 경우 드라이브를 다시 삽입할 때마다 해당 디렉터리로 다시 CD를 이동해야 합니다. 이는 디렉터리를 읽기 위해 셸에서 연 파일 설명자가 드라이브를 제거하면 유효하지 않게 되고, 드라이브를 다시 삽입해도 자동으로 다시 초기화되지 않기 때문입니다(다른 터미널이나 파일 관리자에서 열었음에도 불구하고). 이 드라이브는 사용되는 안에 ).

드라이브가 제거되지 않은 경우 하드웨어 문제가 있거나 일부 소프트웨어가 어떤 이유로 드라이브를 마운트 해제했을 수 있습니다. 시스템 로그를 제공해야 합니다.

관련 정보