"--color=auto|always"를 사용하여 "ls"를 실행하려면 실행 권한이 필요합니다.

"--color=auto|always"를 사용하여 "ls"를 실행하려면 실행 권한이 필요합니다.

ls나는 꽤 오랫동안 완전히 혼란스러워서 읽기 권한이 있음에도 불구하고 특정 장소에서 일하는 것을 거부했습니다. 약간의 혼란 끝에 lsor 를 사용하여 실행하는 한 제대로 작동하는 것으로 나타났습니다 . 그러나 or --color=never를 사용하여 실행하자마자 실행 권한이 부족한 모든 항목에 대해 익숙한 오류가 발생합니다 .autoalwaysPermission denied

이 문제의 원인은 무엇이며 ls출력 색상을 유지하면서 이를 방지하는 방법은 무엇입니까?

업데이트: 좋아, 드디어 알아냈습니다(평소처럼 도움을 요청한 직후). 디렉토리에 들어가려면 실행 권한이 필요하므로 cd 및 ls --color는 이 권한이 없는 디렉토리에서는 작동하지 않습니다. 왜 그것이 없는 디렉토리에서 ls --color=never를 계속 사용할 수 있는지 모르겠습니다. 왜 그런지 궁금하세요?

답변1

디렉토리의 내용(항목 이름)을 보려면 해당 디렉토리에 대한 읽기 권한만 필요합니다.

/bin/ls이는 문제 없이 모든 이름을 실행하고 볼 수 있음을 의미합니다 .

그러나 이름을 표시할 색상을 결정하려면 ls항목에서 다른 속성을 사용하세요. 파일의 메타데이터(권한, 크기, 파일 형식 등)를 사용합니다. 이를 위해서는 파일이어야 stat()하며 성공하려면 디렉터리에 대한 실행 권한이 필요합니다.

디렉토리에 있는 파일 이름만 있으면 됩니다. 읽기 권한만 있으면 됩니다. 디렉터리에 있는 파일의 메타데이터: 읽기 및 실행 권한이 필요합니다.

답변2

유형 등을 고려하지 않고 디렉토리에 있는 항목의 이름만 나열하려면 디렉토리에 대한 읽기 권한만 있으면 됩니다.

디렉토리 내용에 색상을 지정하려면 ls항목 유형(다른 디렉토리, 일반 파일, 장치, 심볼릭 링크 등), 크기, 심볼릭 링크 대상에 대한 정보를 알아야 합니다. 항목에 이러한 내용을 호출합니다. 이를 위해서는 +x해당 프로젝트가 포함된 디렉터리의 권한 비트가 필요합니다. (실제로 커널 버전에 따라 여전히 일부 색상을 얻을 수 있습니다. getdents이름과 유형이 제공될 수 있습니다.)

그런데 내 버전은 ls권한 거부 오류를 뱉어낸 후에도 (모든 색상에도 불구하고) 여전히 디렉토리를 나열합니다. 다른 이상한 것들을 보고 싶다면 다음을 시도해 보세요 -l:

$ ls -l test 2>/dev/null 
total 0
l????????? ? ? ? ?            ? badsymlink
-????????? ? ? ? ?            ? empty
p????????? ? ? ? ?            ? fifo
l????????? ? ? ? ?            ? goodsymlink
-????????? ? ? ? ?            ? notempty

관련 정보