"Ls" कमांड FAT32 विभाजन में फाइलों की अनुमति क्यों दिखा रहा है?


40

मुझे विश्वास है कि 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फाइलों की अनुमति क्यों प्रदर्शित कर रहा है?


अच्छा प्रश्न! स्वागत
0xSheepdog

जवाबों:


71

फ़ाइल सिस्टम डिस्क पर संग्रहीत के रूप में फ़ाइल अनुमतियाँ संग्रहीत नहीं करता है, लेकिन फ़ाइल सिस्टम ड्रायवर को उन्हें ऑपरेटिंग सिस्टम को प्रदान करना होता है क्योंकि वे यूनिक्स फाइल सिस्टम अवधारणा का एक अभिन्न अंग हैं और सिस्टम कॉल इंटरफेस को यह पेश करने का कोई तरीका नहीं है कि अनुमतियाँ हैं लापता।

यह भी विचार करें कि क्या होगा यदि किसी फाइल में कोई अनुमति बिट्स नहीं है? क्या यह वैसा ही होगा 0777, अर्थात सभी के लिए उपयोग; या के रूप में ही 0000, यानी किसी के लिए उपयोग नहीं? लेकिन उन दोनों के हैं फाइल अनुमति, तो क्यों उन्हें नहीं दिखा? या कुछ अधिक उपयोगी है और कुछ समझदार अनुमतियाँ सेट करने का एक तरीका है।

तो, ड्राइवर कुछ अनुमतियों, सभी फ़ाइलों के लिए एक ही फेक देता है। फ़ाइलों के स्वामी और समूह के साथ अनुमतियाँ माउंट समय पर कॉन्फ़िगर करने योग्य हैं। इन्हें माउंट (8) मैन पेज में "वसा के लिए माउंट विकल्प" के तहत वर्णित किया गया है :

वसा के लिए माउंट विकल्प
(नोट: वसा एक अलग फाइल सिस्टम नहीं है, लेकिन msdos, umsdos और vfat filesystems का एक सामान्य हिस्सा है।)

uid=valueऔर gid=value
सभी फ़ाइलों के स्वामी और समूह को सेट करें। (डिफ़ॉल्ट: वर्तमान प्रक्रिया का यूआईडी और जीआईडी।)

umask=value
Umask सेट करें (अनुमतियों के बिटमास्क जो मौजूद नहीं हैं)। डिफ़ॉल्ट वर्तमान प्रक्रिया का umask है। अष्टक में मान दिया जाता है।

dmask=value
Umask को केवल निर्देशिकाओं पर लागू करें सेट करें। डिफ़ॉल्ट वर्तमान प्रक्रिया का umask है। अष्टक में मान दिया जाता है।

fmask=value
Umask को केवल नियमित फ़ाइलों पर लागू करें। डिफ़ॉल्ट वर्तमान प्रक्रिया का umask है। अष्टक में मान दिया जाता है।

ध्यान दें कि अनुमतियाँ मास्क के रूप में प्रस्तुत की जाती हैं, इसलिए अंतिम अनुमतियाँ मास्क की उपेक्षा हैं। fmask=0133अनुमतियाँ वाले सभी फ़ाइलों में परिणाम होगा 0644, या rw-r--r--

इसके अलावा, चूक कॉलिंग प्रक्रिया से विरासत में मिली हैं mount(), इसलिए यदि आप mountकमांड लाइन से कॉल करते हैं, तो शेल की umaskइच्छा लागू होगी।


7
और इसका कारण यह है कि अनुमतियाँ नकली हैं, अन्यथा ls, और कोई भी अन्य प्रोग्राम जो फ़ाइल अनुमतियों को देखता है (यहां तक ​​कि आपके कोड को केवल एक फ़ाइल को पढ़ने की कोशिश कर रहा है) के लिए सभी अलग-अलग फ़ाइल सिस्टम संगठनों में निर्मित को संभालने के लिए तर्क रखना होगा।
jamesqf

4
@jamesqf, हाँ, और यहां तक ​​कि सिस्टम कॉल इंटरफेस में "अनुमतियाँ नहीं होने" का विकल्प नहीं है, क्योंकि अनुमतियाँ हमेशा रहती हैं। (यही मैं सोच रहा था जब मैंने लिखा था कि वे एक "अभिन्न अंग" हैं।) इसलिए, अनुमतियाँ हमेशा वहाँ रहेंगी, और एसीएल जैसी चीजें भी बनाई जाती हैं ताकि उन्हें सार्थक रखा जा सके।
इलकाचु

2
मैंने आमतौर पर FAT फाइलसिस्टम (FAT16 में पुराने ड्राइवर के साथ, कम से कम) सभी फाइलों के लिए मोड 777 देखा है।
वन

2
@forest जो कि umaskमाउंट विकल्प पर निर्भर करता है , जिसके लिए डिफ़ॉल्ट मान mountप्रक्रिया का umask है (इस उत्तर में जुड़ा मैन पेज देखें)।
रुस्लान

लेकिन FAT कुछ अनुमतियों / विशेषताओं (रीड-ओनली, हिडन, सिस्टम इत्यादि) को स्टोर करता है , भले ही वे यूनिक्स के लिए बिल्कुल मैप न करें। chmod ugo-wएक फ़ाइल पर केवल-पढ़ने के लिए विशेषता चालू हो जाएगी। fmask=0133आपके उदाहरण के रूप में विकल्प का उपयोग करने से 0644 की अनुमति वाली सभी फ़ाइलों का परिणाम नहीं होगा । FAT जो बिल्कुल स्टोर नहीं करता है वह प्रत्येक फाइल के लिए एक यूआईडी और एक जीआईडी ​​है। कृपया स्पष्ट करें; इसका उत्तर बहुत ही भ्रामक है।
मोशे

22

लेकिन फाइलों की अनुमति है। उपयोगकर्ता जॉन के पास आरडब्ल्यू पहुंच है, जबकि कुछ यादृच्छिक उपयोगकर्ता केवल एक्सेस पढ़ चुके हैं। ये अनुमतियाँ फाइलसिस्टम से ही नहीं आईं, बल्कि माउंट विकल्पों (-o uid / gid / umask) से आईं, जो उन्हें कम वास्तविक नहीं बनाती हैं।

आपके पास विभिन्न विकल्पों के साथ कई vfat विभाजन आरोहित हो सकते हैं और आप उन विकल्पों को निर्धारित करने के लिए ls का उपयोग कर सकते हैं । तुम भी माउंट का उपयोग कर सकते हैं - एक ही निर्देशिका के लिए अलग vfat विभाजन से फाइल होते हैं, और ls सही ढंग से दिखाएगा कि प्रत्येक फ़ाइल के लिए क्या अनुमतियाँ निर्दिष्ट की गई हैं।


15

lsFAT32 के बारे में पता नहीं है, यह केवल POSIX के साथ गिरी द्वारा उजागर वर्चुअल फ़ाइल (वीएफएस) इंटरफेस के बारे में जानता open/ readdir/ statसिस्टम कॉल।

लिनक्स फ़ाइलें जो की अवधारणा का समर्थन नहीं करता नहीं है उपयोगकर्ता / समूह / अन्य अनुमति बिट्स, struct statबस एक में शामिल mode_t st_mode;सदस्य (और यूआईडी, gid सदस्य) कि गिरी चाहिए द्वारा भरे जाने वाले ls -lबनाता stat(2)सिस्टम कॉल।

उन क्षेत्रों में से किसी के लिए कोई विशेष कोड नहीं है, जिसका अर्थ है "उपलब्ध नहीं" या "लागू नहीं", इसलिए कर्नेल के vfat ड्राइवर को कुछ बनाना चाहिए । FAT16 / FAT32 में केवल-पठन ध्वज होता है, लेकिन अन्यथा स्वामी / समूह माउंट विकल्पों में से आते हैं, और इसलिए एक umask है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.