फ़ाइल का उपयोग करते समय यह चल रहा है - यह कैसे काम करता है?


31

मैंने देखा है कि गैर-विंडोज़ OS पर .... अर्थात linux / mac मैं ऐसा कर सकता है जैसे: - लक्ष्य पर किसी मित्र को एक ज़िप भेजें - स्थानांतरण के समय फ़ाइल को हटा दें

और स्थानांतरण विफल नहीं होता है।

या, मैं जैसे ऑपरेशन कर सकता हूं .. - एक फिल्म शुरू करें - फ़ाइल मिटाएं - फिल्म अभी भी पूरा करने के लिए खेलती है (डिस्क से पढ़ें, न कि केवल मेमोरी में बफ़र की गई)

हालाँकि फाइलें "डिलीट" की जा रही हैं, जैसा कि मैंने उल्लेख किया है, उन्हें वास्तव में फाइल सिस्टम पर एक अलग स्थान पर स्थानांतरित किया जा रहा है ... अर्थात ट्रैश निर्देशिका या कुछ और। तो यह मुझे ऐसा लगता है जैसे ओएस एक पॉइंटर @ फ़ाइल का उपयोग करता है जो अपडेट किया जाता है जब यह सीधे फाइलों तक पहुंचने के बजाय चलता है।

क्या कोई इस पर प्रकाश डाल सकता है कि यह वास्तविक क्षमता वास्तव में कैसे लागू की जाती है? मुझे भी यकीन नहीं है कि इसके बारे में अधिक जानने के लिए Google को क्या करना चाहिए।

धन्यवाद।


1
सिद्धांत रूप में मुझे लगता है कि यह हो सकता है 2 तरीके हैं। दोनों वास्तविकता हैं। फ़ाइल की मेमोरी में। या फ़ाइल सिस्टम में फ़ाइलों के संदर्भ हैं और केवल संदर्भ हटा दिया गया है। दोनों वास्तविकता हैं। संदर्भ तथ्य यह है कि कैसे हटाना कार्यक्रम चीजों को हटाना रद्द कर सकते हैं। यह विचार कि फाइल वास्तव में तब डिलीट हो जाती है जब सभी प्रोग्राम इसे बंद कर देते हैं, यह बकवास लगता है। आप लिंक की गई सूचियों के बारे में देख सकते हैं (अधिक गहराई में अवधारणा को समझने के लिए एक प्रोग्रामिंग डेटा संरचना)। या आप विशेष फ़ाइल सिस्टम के बारे में देख सकते हैं।
21

जवाबों:


29

निर्देशिका प्रविष्टि केवल इनकोड में एक संकेतक है। इनकोड में फ़ाइल के बारे में मेटा-जानकारी (नाम के अलावा) और फ़ाइल के डेटा (यदि कोई हो) के संकेत होते हैं। जब आप किसी फ़ाइल को कॉपी करना शुरू करते हैं तो आपको इनोड में एक हैंडल मिलता है।

ऑपरेटिंग सिस्टम इनोड में संदर्भों की एक गिनती रखता है। जब तक इनोड के संदर्भ हैं, तब तक इनोड और फाइल का डेटा रखा जाता है। एक बार जब इनोड के सभी संदर्भ हटा दिए जाते हैं, तो इनोड होता है और फ़ाइल द्वारा आवश्यक स्थान जारी हो जाता है।

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

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

एक ही फ़ाइल के लिए कई निर्देशिका प्रविष्टियाँ होना संभव है। इन्हें हार्ड लिंक कहा जाता है। वे मूल प्रविष्टि को हटाए बिना फ़ाइल के लिए एक नई निर्देशिका प्रविष्टि बनाकर बनाए गए हैं। फ़ाइल सिस्टम के इनकोड में फ़ाइल को इंगित करने वाली निर्देशिका प्रविष्टियों की संख्या रिकॉर्ड करने के लिए एक संदर्भ गणना है।

EDIT2: यदि प्रक्रिया क्रैश हो जाती है या मार दी जाती है, तो फ़ाइल को सफाई से हटा दिया जाएगा क्योंकि मेमोरी एक्सेस काउंट शून्य पर कम हो जाएगा। यह वह क्रिया है जो प्रोग्राम के सामान्य रूप से समाप्त होने पर होती है।

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


5
ठीक ठीक। मैं इसे खुद बेहतर नहीं बना सकता था। संयोग से, एक सामान्य ट्रिक, यदि आपको किसी प्रोग्राम के भीतर कुछ स्क्रैच फाइल स्टोरेज की आवश्यकता है, तो एक फाइल बनाना है /tmp, और तुरंत unlink(2)। उस बिंदु पर, निर्देशिका में कोई फ़ाइल नहीं है (इसलिए बाहर निकलने या क्रैश करने के लिए कुछ भी नहीं), लेकिन आपकी प्रक्रिया में अभी भी फ़ाइल तक पहुंच है, और कोई अन्य प्रक्रिया गलती से या जानबूझकर इसके साथ गड़बड़ नहीं कर सकती है। यह ब्याज की संपत्ति को दिखाता है।
नॉर्मन ग्रे

क्या इसका मतलब यह है कि यदि प्रोग्राम का उपयोग करते समय एक खुली फाइल को हटा दिया जाता है और एक बिजली की विफलता होती है, तो फंसे हुए डेटा ड्राइव पर जगह घेरे रहेंगे? अगर फाइल क्रैश हो जाती है या मार दिया जाता है तो क्या होगा?
जेसन सी

1
@JasonC मैंने आपके सवालों के जवाब देने के लिए अद्यतन किया है।
बिलथोर

6

जैसा कि मैट जेनकिन्स द्वारा समझाया गया है, ओएस (फाइलसिस्टम) उन फाइलों का ट्रैक रखता है जिन्हें अनुप्रयोगों द्वारा खुला रखा जाता है। जब तक एक प्रक्रिया एक फ़ाइल को खुला रखती है, तब तक उसका डेटा डिस्क पर रहता है (भले ही इसे हटा दिया गया हो और अब अन्य कार्यक्रमों के लिए दृश्यमान या सुलभ नहीं है।

ध्यान दें कि इसका परिणाम यह है कि किसी फ़ाइल द्वारा कब्जा कर लिया गया स्थान केवल एक बार प्राप्त किया जा सकता है क्योंकि अंतिम प्रक्रिया का उपयोग करके इसे बंद कर दिया गया है। यह लिनक्स / यूनिक्स फ़ाइल सिस्टम संचालन के लिए एक FAQ है: "'df' कमांड का कहना है कि विभाजन पूर्ण है, जबकि 'du' मुक्त स्थान की रिपोर्ट करता है" (देखें http://batleth.sapienti-sat.org/projects/FAQs-ext3- faq.html )। यदि आपको स्थान खाली करने की आवश्यकता है, तो यह बड़ी फ़ाइलों (जैसे लॉगफ़ाइल्स) को हटाने के लिए पर्याप्त नहीं है, आपको यह भी सुनिश्चित करना होगा कि कोई प्रक्रिया उन्हें खुली न रखें (आमतौर पर लॉगफ़ाइल्स के साथ एक समस्या)।


OS X / HFS + के मामले में सही नहीं है: आप फ़ाइलों को स्थानांतरित कर सकते हैं, जैसे कि कचरा में, लेकिन विभाजन के पार नहीं या उन्हें हटाएं (यानी कचरा खाली करना)।
डैनियल बेक

2

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

इसके अलावा, फ़ाइल को स्थानांतरित करने के साथ - यदि यह एक ही फाइल सिस्टम के भीतर है - फ़ाइल वास्तव में इस तरह से नहीं चलती है, तो यह केवल सूचक को उस निर्देशिका में बदल देता है जो फ़ाइल में है।


"फ़ाइल संदर्भों की सूची बनाए रखती है"?
डैनियल बेक

फ़ाइल "OS या एक्सप्लोरर" होना चाहिए।
मोआब

2
यह वास्तव में फाइल-सिस्टम होगा।
JRobert

OS फ़ाइल में संदर्भों को संग्रहीत करने के लिए फाइल सिस्टम का उपयोग करता है (फ़ाइल हेडर संरचना में nlinks) - वहां - हम सभी खुश हैं;)
माजेंको

1
"संदर्भ" फ़ाइल के लिए एक खुले हैंडल और फ़ाइल के हार्ड लिंक (पहले फ़ाइल नाम सहित) दोनों प्रक्रियाएं हैं। डेटा ब्लॉक को मुफ्त में चिह्नित नहीं किया जाता है और जब तक संदर्भ संख्या शून्य नहीं हो जाती है तब तक पुन: उपयोग के लिए उपलब्ध है।
mpez0

0

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


1
सच है, लेकिन यह यहाँ नहीं हो रहा है। मुद्दा यह है कि अंतिम हार्डलिंक को हटा दिए जाने के बाद भी , फ़ाइल तब तक रहती है जब तक कि सभी पोकेसेस ने उनके हैंडल को बंद नहीं कर दिया।
21
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.