사용자에게 du(디스크 사용량)를 실행하려면 실행 권한이 필요합니까? [복사]

사용자에게 du(디스크 사용량)를 실행하려면 실행 권한이 필요합니까? [복사]

다음 동작을 관찰하고 이것이 예상되는지 궁금합니다.

du가 소유한 디렉토리에서 디스크 사용량( )을 실행하려고 합니다 .user2test_directoryuser1

chmod 777 test_directory모든 사람에게 전체 액세스(사용 ) 를 허용하도록 권한을 변경하면 user1및 모두 user2예상대로 디스크 사용량을 올바르게 볼 수 있습니다.

여기에 이미지 설명을 입력하세요.

그러나 다른 사용자의 실행 가능한 액세스를 제한하면(을 사용하여 chmod 776 test_directory) user2실행이 실패 du하고 권한 오류가 발생합니다.

여기에 이미지 설명을 입력하세요.

또한 오류가 발생하는 경우 디렉터리 크기는 4096바이트로 나타납니다.

  1. du를 사용하여 디스크 사용을 요청하려면 사용자에게 실행 권한이 필요한 이유는 무엇입니까? 나는 순진하게 읽기 권한만 필요할 것이라고 예상했습니다(예: chmod 774). 실제로는 그런 것 같다둘 다du(즉)를 실행하려면 읽기 및 실행 권한이 필요합니다 chmod 775.

  2. 이 경우 디렉터리 크기가 기본적으로 4096바이트로 설정되는 이유는 무엇입니까?

감사해요!

답변1

실행/액세스( x) 권한이 없으면 dir호출할 수 없으며 stat()크기 dir/foo.bin가 얼마나 큰지도 알 수 없습니다. 읽기( r) 권한만 있으면 파일 이름만 나열할 수 있지만 일반적으로 얻을 수 있는 것은 이름뿐입니다.

일부 시스템에서는 readdir()이름보다 더 많은 정보를 제공할 수 있지만 파일 크기를 제공할 수 있는지는 확실하지 않습니다. Linux 파일 시스템에는 inode 및 디렉터리 항목의 수명 동안 절대 변경되지 않는 파일 형식이 제공될 수 있습니다. 그러나 inode가 디렉토리 목록과 분리되어 있는 파일 시스템의 디렉토리에서 크기를 가져오기 어려운 등 일부 사항은 계속 변경됩니다.

크기를 알더라도 readdir()읽기만 하면 dir/크기가 알 수 없으므로 dir/sub/bar.bin읽어야 합니다 dir/sub. 접근권이 없으면 dir할 수 없습니다.

디렉터리의 크기는 파일 자체의 크기가 아니라 파일 목록의 크기일 뿐입니다. 그래서 그것은 당신에게 많은 것을 말해주지 않습니다. 4kB는 ext4에 일반적이며 파일 시스템 블록일 뿐이며 파일 시스템이 할당해야 하는 최소값입니다. 파일과 마찬가지로 x크기를 얻으려면 해당 파일이 있는 디렉터리에 대한 권한만 있으면 됩니다. (예를 들어 또는 의 크기를 x얻으려면 on 이 필요합니다 .)dir/dir/file.txtdir/subdir/

그렇습니다. 전체 디렉토리 트리를 효과적으로 검색하려면 읽기 및 액세스 권한이 필요합니다.

또한보십시오:비트를 실행하고 읽습니다. Linux에서 디렉토리 권한은 어떻게 작동합니까?

관련 정보