एक निर्देशिका में फ़ाइलों का "निर्देशिका क्रम" क्या है (जिसका उपयोग `ls -U` द्वारा किया जाता है)?


19

Ls के लिए मैन पेज के अनुसार, ls -Uइसका मतलब है:

क्रमबद्ध न करें; निर्देशिका क्रम में प्रविष्टियों की सूची।

"निर्देशिका क्रम" का क्या अर्थ है, और यह कैसे निर्धारित किया जाता है?

निम्न परीक्षण (एक एक्स 3 फ़ाइल सिस्टम पर निष्पादित) से पता चलता है कि यह वह क्रम नहीं है जिसमें फाइलें बनाई गई थीं:

root@sv1010vm0007:/tmp# mkdir test
root@sv1010vm0007:/tmp# touch test/2
root@sv1010vm0007:/tmp# touch test/1
root@sv1010vm0007:/tmp# touch test/3
root@sv1010vm0007:/tmp# ls -U test
2  3  1

जवाबों:


14

यह फाइलसिस्टम पर निर्भर करता है। कुछ filesystems (उनके बीच ext3) के लिए, एक निर्देशिका वास्तव में एक प्रसिद्ध प्रारूप के साथ एक फ़ाइल है, और इसकी अनुमतियों या मोड में 'd' बिट सेट है। उस मामले में, किस लंबाई के फ़ाइल नाम ने इतिहास बनाया है और हटाए जाने से कोई फर्क नहीं पड़ता। कर्नेल निर्देशिका फ़ाइल में पहली प्रविष्टि को भरेगा जिसमें नई फ़ाइल का नाम रखने के लिए पर्याप्त जगह होगी। अधिक विवरण के लिए http://e2fsprogs.sourceforge.net/ext2intro.html देखें , जिसका शीर्षक "भौतिक विवरण" है।

कुछ अन्य फाइल सिस्टम के लिए, उनके बीच Reiserfs, एक निर्देशिका वास्तव में B + ट्री में कुछ प्रविष्टियां हैं जो कि फाइलसिस्टम में दिखाई नहीं देती हैं, इसलिए lsReiserfs फाइलसिस्टम में एक डायरेक्टरी का एक प्लेक्स शाब्दिक क्रम में है।


@ ब्रूस: तो, इस "निर्देशिका" फ़ाइल की सामग्री वास्तव में क्या हैं?
फहीम मीठा

परंपरागत रूप से, कुछ बहुत कुछ जैसे कि डायरेंट, जो मुझे एक RHEL बॉक्स पर /usr/include/bits/dirent.h में और स्लैकवेयर 11.0 बॉक्स में परिभाषित किया गया है। वे दोनों मशीनें सीधे एक निर्देशिका को खोलने से मना कर देती हैं। मुझे पता है कि मैं एक निर्देशिका को एक नियमित फ़ाइल में बदलने के लिए "बिल्ली।> dot.as.file" जैसी चीजें करता था, आखिरी बार मैंने यह सुनिश्चित करने के लिए किया था कि सोलारिस 8, मुझे लगता है। मूल रूप से, स्ट्रक्चर डाइरेंट में एक इनोड (एक संख्या), एक रिकॉर्ड लंबाई, एक नाम की लंबाई और एक स्ट्रिंग होती है, जिसे मैं याद करता हूं, ASCII-Nul समाप्त नहीं हो सकता है या नहीं हो सकता है।
ब्रूस एडगर

@ ब्रूस: ठीक है। और यह C संरचना उन फ़ील्ड में मौजूद फ़ाइलों और उपनिर्देशिकाओं के बारे में सभी जानकारी प्राप्त करने का प्रबंधन करती है?
फहीम मीठा

Ext2, या BSD FFS या मूल यूनिक्स फाइलसिस्टम जैसे फाइल सिस्टम में एक निर्देशिका, बस इनोड संख्या और इसी फ़ाइल नामों की एक सूची शामिल है। बिना तर्क के "ls" को आमंत्रित करने से आपको फ़ाइल नामों की एक सूची मिल गई। यदि आपने "ls -l" किया, तो "ls" स्वयं फ़ाइल नाम पर स्टेट (2) सिस्टम कॉल करके प्रत्येक फ़ाइल नाम को देखेगा, और स्ट्रक्चर स्टेट से, अनुमतियाँ, आकार, "फ़ाइल प्रकार", आदि प्राप्त करें। तो, नहीं, एक निर्देशिका फ़ाइल में सारी जानकारी नहीं है, बस नामों की एक सूची है।
ब्रूस एडिगर

2
ext2.sourceforge.net/2005-ols/paper-html/node3.html बताता है कि dir_index फ़ीचर में फ़ाइल का नाम और एक फ़ाइल सिस्टम-विशिष्ट रहस्य हैश है। यदि सुविधा सक्षम है, तो उसके फाइलसिस्टम फीचर लाइन में डम्प 2 एफईएस में dir_index शामिल है।
मार्टिन डोरी

3

वास्तव में, उम्मीद करने के लिए कोई विशिष्ट आदेश नहीं है। यह OS पर निर्भर है और फ़ाइल सिस्टम को प्रविष्टियों को पसंद करने के लिए इसे लागू करना है। इस विकल्प का एक लक्ष्य तेजी से लिस्टिंग संभव है जो बहुत बड़ी निर्देशिकाओं के साथ एक महत्वपूर्ण कारक हो सकता है।


कर्नेल और फाइलसिस्टम ड्राइवरों में शेड्यूलिंग / कैशिंग एल्गोरिदम हैं जो डिस्क पर डेटा लिखे जाने पर प्रभाव डालते हैं। यह प्रदर्शन बढ़ाने के लिए किया जाता है। इस अनुकूलन की वजह से आप वास्तव में यह नहीं बता सकते कि लिखना कब होगा। इसके अलावा, फाइल सिस्टम में पुराने इनकोड का पुन: उपयोग किया जा सकता है इसलिए नई फाइलें निर्देशिका स्लॉट में दिखाई दे सकती हैं जहां पुरानी फाइलें थीं। इसलिए सृजन का आदेश आवश्यक नहीं है "निर्देशिका आदेश।"
लॉरेंस

@ultrasawblade: निश्चित नहीं कि आपने ऐसा क्यों लिखा है कि एक टिप्पणी के रूप में मेरे खुद के जवाब के बजाय स्वयं या जो भी हो।
जूलियाग्रे

@ultrasawblade: सख्ती से बोलना, "पुराने इनोड्स [पुन: उपयोग किए जा रहे हैं" का पुराने निर्देशिका स्लॉट्स के पुन: उपयोग से कोई लेना-देना नहीं है। यह तब हो सकता है जब भी पुरानी निर्देशिका प्रविष्टियों को अनलिंक किया जाता है; यदि वे सभी हार्ड लिंक हैं, तो इनकोड के परिणाम की आवश्यकता नहीं है।
जी-मैन का कहना है कि 'मोनिका'

2

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


-1

निर्देशिका सिर्फ एक और फ़ाइल है, जो वास्तविक फ़ाइलों के मेटाडेटा को सूचीबद्ध करती है। "ls -U" केवल निर्देशिका फ़ाइल में उसी क्रम में एंटायर को सूचीबद्ध करता है।

आदेश ओएस और फाइलसिस्टम कार्यान्वयन द्वारा निर्धारित किया जाता है।

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