이것은 약간 이국적인 질문이지만 이것에 관한 정보는 많지 않습니다. 방금 zip 형식의 외부 파일 속성에 대한 질문에 대한 답변을 추가 했습니다 . 내 대답에서 알 수 있듯이 실제로 두 번째 바이트 (4 바이트) 만 실제로 Unix에 사용된다는 결론을 내립니다. 분명히 이것은 압축 해제시 오브젝트가 파일인지 디렉토리인지를 추론하기에 충분한 정보를 포함하고 있으며 다른 권한 및 속성 정보를위한 공간도 있습니다. 제 질문은 이것이 일반적인 Unix 권한에 어떻게 매핑됩니까? ls
정확히 1 바이트에 맞는 일반적인 유닉스 권한 (예 : 아래)을 수행 하고 있다면 누군가 레이아웃을 설명하거나 참조 할 수 있습니까?
$ ls -la
total 36
drwxr-xr-x 3 faheem faheem 4096 Jun 10 01:11 .
drwxrwxrwt 136 root root 28672 Jun 10 01:07 ..
-rw-r--r-- 1 faheem faheem 0 Jun 10 01:07 a
drwxr-xr-x 2 faheem faheem 4096 Jun 10 01:07 b
lrwxrwxrwx 1 faheem faheem 1 Jun 10 01:11 c -> b
구체적인 질문을 통해보다 구체적으로 설명하겠습니다. 별 Trac에 패치 위의 내 대답 인용, 아래 파이썬의 조각을 가진 zip 파일을 만들 수 있습니다.
040755 << 16L
값은 권한을 가진 빈 디렉토리의 생성에 해당한다 drwxr-xr-x
. (나는 그것을 테스트했다). 패턴에 0755
해당한다는 것을 알고 rwxr-xr-x
있지만의 04
경우는 어떻습니까? 그리고 전체 값이 바이트에 어떻게 대응합니까? 또한 << 16L
16 자리의 비트 단위 왼쪽 시프트에 해당하므로 최상위 바이트에서 두 번째로 끝납니다.
def makezip1():
import zipfile
z = zipfile.ZipFile("foo.zip", mode = 'w')
zfi = zipfile.ZipInfo("foo/empty/")
zfi.external_attr = 040755 << 16L # permissions drwxr-xr-x
z.writestr(zfi, "")
print z.namelist()
z.close()
편집 : 이것을 다시 읽을 때 Unix 권한이 1 바이트에만 해당한다는 결론은 틀릴 수 있지만 정답이 무엇인지 확실하지 않기 때문에 위의 내용을 현재 상태로 두겠습니다.
EDIT2 : 실제로 1 바이트에 해당하는 유닉스 값에 대해서는 틀 렸습니다. @ Random832가 설명했듯이 상위 2 바이트를 모두 사용합니다. @ Random832의 답변에 040755
따라 아래 표에서 원하는 값을 구성 할 수 있습니다. 즉:
__S_IFDIR + S_IRUSR + S_IWUSR + S_IXUSR + S_IRGRP + S_IXGRP + S_IROTH + S_IXOTH
0040000 + 0400 + 0200 + 0100 + 0040 + 0010 + 0004 + 0001
= 40755
여기에 추가 된 내용은 기본 8에 있습니다.