यह थोड़ा विदेशी सवाल है, लेकिन इस बारे में नेट पर ज्यादा जानकारी नहीं है। मैंने अभी ज़िप प्रारूप की बाहरी फ़ाइल विशेषता के बारे में एक प्रश्न का उत्तर जोड़ा है । जैसा कि आप मेरे जवाब से देख सकते हैं, मैं यह निष्कर्ष निकालता हूं कि केवल दूसरी बाइट (4 बाइट्स) वास्तव में यूनिक्स के लिए उपयोग की जाती है। जाहिरा तौर पर इसमें पर्याप्त जानकारी शामिल होती है जब यह हटाने के लिए कि क्या वस्तु एक फाइल या एक निर्देशिका है, और अन्य अनुमति और विशेषता जानकारी के लिए भी जगह है। मेरा सवाल है, यह नक्शा सामान्य यूनिक्स अनुमतियों के लिए कैसा है? क्या सामान्य यूनिक्स अनुमतियाँ (जैसे नीचे) 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 पैच ऊपर मेरा उत्तर में उद्धृत, आप नीचे दिए गए अजगर के स्निपेट के साथ एक ज़िप फ़ाइल बना सकते हैं।
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()
संपादित करें: इस पर फिर से विचार करने पर, मुझे लगता है कि मेरा निष्कर्ष यह है कि यूनिक्स की अनुमति केवल एक बाइट के अनुरूप है, गलत हो सकता है, लेकिन मैं वर्तमान के लिए उपरोक्त रुख रखने दूंगा, क्योंकि मुझे यकीन नहीं है कि सही उत्तर क्या है।
EDIT2: मैं वास्तव में केवल 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 बेस में है ।