นี่เป็นคำถามที่แปลกใหม่เล็กน้อย แต่ดูเหมือนจะไม่มีข้อมูลมากมายเกี่ยวกับเรื่องนี้ ฉันเพิ่งเพิ่มคำตอบสำหรับคำถามเกี่ยวกับแอตทริบิวต์แฟ้มรูปแบบซิปของภายนอก อย่างที่คุณเห็นจากคำตอบของฉันฉันสรุปว่ามีเพียงไบต์ที่สอง (จาก 4 ไบต์) เท่านั้นที่ใช้สำหรับ Unix เห็นได้ชัดว่าสิ่งนี้มีข้อมูลเพียงพอเมื่อทำการคลายซิปเพื่ออนุมานว่าวัตถุนั้นเป็นไฟล์หรือไดเรกทอรีและยังมีพื้นที่สำหรับการอนุญาตและข้อมูลคุณลักษณะอื่น ๆ คำถามของฉันคือแผนที่นี้ใช้สิทธิ์ Unix อย่างไร สิทธิ์ Unix ตามปกติ (เช่นด้านล่าง) ที่ls
ให้พอดีกับหนึ่งไบต์และถ้าเป็นเช่นนั้นใครสามารถอธิบายเลย์เอาต์หรือให้การอ้างอิงได้ไหม
$ 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 ด้วยส่วนของ Python ด้านล่าง
040755 << 16L
ค่าสอดคล้องกับการสร้าง directory 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 นั้นสอดคล้องกับหนึ่งไบต์เท่านั้นอาจไม่ถูกต้อง แต่ฉันจะยอมให้การยืนเหนือสำหรับปัจจุบันเพราะฉันไม่แน่ใจว่าคำตอบที่ถูกต้องคืออะไร
แก้ไข 2: ฉันไม่ถูกต้องแน่นอนเกี่ยวกับค่า Unix ที่สอดคล้องกับ 1 ไบต์เท่านั้น ตามที่ @ Random832 อธิบายจะใช้ทั้งสองไบต์บนสุด ตามคำตอบของ @ 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