[unix] “ls”명령이 FAT32 파티션에있는 파일의 권한을 표시하는 이유는 무엇입니까?

FAT32 파일 시스템은 파일 권한을 지원하지 않는다고 생각하지만 ls -lFAT32 파티션에서 작업 할 때 파일에 권한이 ls -l있음을 보여줍니다.

-rw-r--r-- 1 john john 11 Mar 20 15:43 file1.txt
-rw-r--r-- 1 john john 5 Mar 20 15:49 file2.txt

ls -l파일의 권한 이 표시되는 이유는 무엇 입니까?



답변

디스크에 저장된 파일 시스템은 파일 권한을 저장하지 않지만 파일 시스템 드라이버는 Unix 파일 시스템 개념의 핵심 부분이며 시스템 호출 인터페이스는 권한을 나타내는 방법이 없으므로 운영 체제에 파일 시스템을 제공해야합니다. 밀집.

파일에 권한 비트가 전혀 없다면 어떻게 될까요? 그것은 0777모두에 대한 접근 과 동일 할 것인가? 또는 같은 0000, 즉 누구에게도 접근 할 수 없습니까? 하지만 그 둘 다 있는 파일 사용 권한, 왜 그들에게 보여주지? 또는 더 유용한 것을 수행하고 적절한 권한을 설정하는 방법이 있습니다.

따라서 드라이버는 모든 파일에 대해 동일한 권한을 일부 가짜로 만듭니다. 마운트시 파일 소유자 및 그룹과 함께 권한을 구성 할 수 있습니다. 이것들은 mount (8) 매뉴얼 페이지의 “지방 장착 옵션”에 설명되어 있습니다 :

fat에 대한 마운트 옵션
(참고 : fat는 별도의 파일 시스템이 아니라 msdos, umsdos 및 vfat 파일 시스템의 일반적인 부분입니다.)

uid=valuegid=value
모든 파일의 소유자와 그룹을 설정합니다. (기본값 : 현재 프로세스의 UID 및 GID)

umask=value
umask (존재하지 않는 권한의 비트 마스크)를 설정하십시오. 기본값은 현재 프로세스의 umask입니다. 값은 8 진수로 표시됩니다.

dmask=value
디렉토리에만 적용되는 umask를 설정하십시오. 기본값은 현재 프로세스의 umask입니다. 값은 8 진수로 표시됩니다.

fmask=value
일반 파일에만 적용되는 umask를 설정하십시오. 기본값은 현재 프로세스의 umask입니다. 값은 8 진수로 표시됩니다.

권한은 마스크로 표시되므로 최종 권한은 마스크의 부정입니다. fmask=0133모든 파일에 권한 0644이 있거나 rw-r--r--.

또한 기본값은 프로세스를 호출하는 프로세스에서 상속 mount()되므로 mount명령 줄에서 호출 하면 셸 umask이 적용됩니다.


답변

그러나 파일에는 권한이 있습니다. 사용자 john 은 RW 액세스 권한을 가지며 일부 임의 사용자는 읽기 권한 만 갖습니다. 이러한 권한은 파일 시스템 자체가 아니라 마운트 옵션 (-o uid / gid / umask)에서 비롯 되었기 때문에 실제보다 덜 실감 나지 않습니다.

다른 옵션으로 여러 vfat 파티션을 마운트 할 수 있으며 ls 를 사용 하여 해당 옵션이 무엇인지 확인할 수 있습니다 . mount –bind 를 사용 하여 단일 디렉토리에 다른 vfat 파티션의 파일이 포함되도록 할 수 있으며 ls 는 각 파일에 지정된 권한을 올바르게 표시합니다.


답변

lsFAT32는 모르지만 POSIX open/ readdir/ stat시스템 호출로 커널에 의해 노출되는 VFS (Virtual Filesystem) 인터페이스 만 알 수 있습니다.

리눅스는 파일의 개념을 지원하지 않습니다 이없는 사용자 / 그룹 / 기타 권한 비트를 struct stat단순히 포함 mode_t st_mode;커널이 해당 구성원 (및 UID, GID 회원) 해야 할 때 작성 ls -l하게 stat(2)시스템 호출을.

해당 필드에 대해 “사용할 수 없음”또는 “적용 할 수 없음”을 의미하는 특수 코드가 없으므로 커널의 vfat 드라이버 무언가를 구성 해야 합니다. FAT16 / FAT32에는 읽기 전용 플래그가 있지만 소유자 / 그룹은 마운트 옵션에서 왔으며 umask도 마찬가지입니다.


답변