GNU/Linux में हार्ड लिंक हटाना, और inode की बात
नमस्ते, मैं अक्षम हूँ।
काफी समय बाद जब मैंने ln कमांड से लिंक बनाने की कोशिश की, तो गलती से -s विकल्प हटाना भूल गया और एक हार्ड लिंक बन गया, इसलिए मैं अनावश्यक हार्ड लिंक को हटा रहा हूँ।
हार्ड लिंक बनाना
ln कमांड को बिना विकल्प के चलाने से एक हार्ड लिंक बनता है।
alleycat:[haturatu]:~/git/hardlink$ ls
alleycat:[haturatu]:~/git/hardlink$ touch hardlink1
alleycat:[haturatu]:~/git/hardlink$ echo "You are an idiot" >> hardlink1
alleycat:[haturatu]:~/git/hardlink$ cat hardlink1
You are an idiot
alleycat:[haturatu]:~/git/hardlink$ ls -la
कुल 12
drwxr-xr-x 2 haturatu haturatu 4096 1月 12 15:00 .
drwxr-xr-x 114 haturatu haturatu 4096 1月 12 15:00 ..
-rw-r--r-- 1 haturatu haturatu 17 1月 12 15:01 hardlink1
मैंने ऊपर दिखाए अनुसार एक फ़ाइल बनाने की कोशिश की।
alleycat:[haturatu]:~/git/hardlink$ ln hardlink1 hardlink2
alleycat:[haturatu]:~/git/hardlink$ ls -la
कुल 16
drwxr-xr-x 2 haturatu haturatu 4096 1月 12 15:02 .
drwxr-xr-x 114 haturatu haturatu 4096 1月 12 15:00 ..
-rw-r--r-- 2 haturatu haturatu 17 1月 12 15:01 hardlink1
-rw-r--r-- 2 haturatu haturatu 17 1月 12 15:01 hardlink2
अब एक हार्ड लिंक बन गया है।
और, आइए नीचे दिए गए मानक आउटपुट को देखें।
-rw-r--r-- 2 haturatu haturatu 17 1月 12 15:01 hardlink1
-rw-r--r-- 2 haturatu haturatu 17 1月 12 15:01 hardlink2
-rw-r--r-- 2 में यह 2 हार्ड लिंक की संख्या है। आप देख सकते हैं कि हार्ड लिंक बनने से पहले की तुलना में मान बढ़ गया है।
और, चूंकि यह केवल एक लिंक है, यह डिस्क स्थान को स्वयं नहीं भरता है। यह एक ही डेटा को संग्रहीत करता है, और inode संख्या समान होती है, जो एक ही फ़ाइल को इंगित करती है।
-i विकल्प के साथ inode संख्या की जाँच करें।
alleycat:[haturatu]:~/git/hardlink$ ls -lia
कुल 16
13238408 drwxr-xr-x 2 haturatu haturatu 4096 1月 12 15:02 .
11406555 drwxr-xr-x 114 haturatu haturatu 4096 1月 12 15:00 ..
13265123 -rw-r--r-- 2 haturatu haturatu 17 1月 12 15:01 hardlink1
13265123 -rw-r--r-- 2 haturatu haturatu 17 1月 12 15:01 hardlink2
inode क्या है?
यह फ़ाइल सिस्टम पर निर्भर करता है, इसलिए उपरोक्त GNU/Linux वातावरण के तहत है, और BSD-आधारित फ़ाइल सिस्टम के लिए, यह vnode हो सकता है, या ZFS के लिए znode, आदि थोड़ा अलग हैं, लेकिन ऐतिहासिक रूप से, इसे मूल UNIX फ़ाइल सिस्टम के विस्तार के रूप में कल्पना करना ठीक है।
और, सिंबॉलिक लिंक के विपरीत, यदि आप hardlink1 को हटाते हैं तो hardlink2 बना रहता है, और यदि आप hardlink2 को हटाते हैं तो hardlink1 बना रहता है। इस संबंध में, ऐसा लगता है कि स्पष्टीकरण यह होगा कि फ़ाइल सिस्टम स्वयं फ़ाइल का प्रबंधन करता है, लेकिन यह अभी भी थोड़ा मुश्किल है, है ना?
हालांकि, इस तरह से देखने पर, हार्ड लिंक सुविधाजनक होते हैं, लेकिन जबकि सिंबॉलिक लिंक विभिन्न डिस्क पर फ़ाइलों को संदर्भित कर सकते हैं, हार्ड लिंक विभिन्न डिस्क पर नहीं बनाए जा सकते हैं।
सरल शब्दों में, पिछली व्याख्या के आधार पर, फ़ाइल सिस्टम एक ही डिस्क के inode आधार पर काम करता है, इसलिए यदि यह एक अलग डिस्क पर है, तो यह फ़ाइल सिस्टम के अधिकार क्षेत्र से बाहर है और परत संरचना के कारण संदर्भित नहीं किया जा सकता है।
इसलिए, यदि यह एक अलग डिस्क पर मौजूद है, तो एक सिंबॉलिक लिंक बनाने की आवश्यकता उत्पन्न होती है।
और, फ़ाइल सिस्टम के दृष्टिकोण से, इसका उपयोग डिस्क रिकवरी और पुनर्प्राप्ति कार्यों के दौरान पिछले inode जानकारी से यह पहचानने के लिए किया जाता है कि कौन सी inode संख्या वाली फ़ाइलें बनाई गई थीं या हटाई गई थीं।
यहां एक जाल है: यदि एक फ़ाइल अधिलिखित हो जाती है, तो यह inode संख्या भी अपडेट हो जाती है। इसका मतलब है कि बैकअप स्क्रिप्ट आदि बनाते समय, आपको ऐसी स्क्रिप्ट बनाने के बारे में जागरूक रहने की आवश्यकता हो सकती है जिसमें अधिलेखन प्रक्रिया शामिल न हो। (मैंने एक बार गड़बड़ कर दी थी)
समान inode संख्या वाली फ़ाइलों की पहचान करना
आप find कमांड से जाँच कर सकते हैं।
alleycat:[haturatu]:~/git/hardlink$ find . -inum 13265123
./hardlink2
./hardlink1
तो, अब, आइए hardlink1 को हटाने का प्रयास करें।
alleycat:[haturatu]:~/git/hardlink$ rm -i hardlink1
rm: सामान्य फ़ाइल 'hardlink1' को हटाएँ? y
alleycat:[haturatu]:~/git/hardlink$ ls -lai
कुल 12
13238408 drwxr-xr-x 2 haturatu haturatu 4096 1月 12 15:23 .
11406555 drwxr-xr-x 114 haturatu haturatu 4096 1月 12 15:00 ..
13265123 -rw-r--r-- 1 haturatu haturatu 17 1月 12 15:01 hardlink2
alleycat:[haturatu]:~/git/hardlink$ cat hardlink2
You are an idiot
अब, हार्ड लिंक का मान भी 1 हो गया है, और यह पुष्टि हो गई है कि hardlink2, जो मूल रूप से ln hardlink1 hardlink2 का उपयोग करके hardlink1 के लिंक के रूप में बनाया गया था और hardlink1 के समान जानकारी रखता है, मौजूद है और वही डेटा रखता है।
व्यावहारिक उपयोग के संदर्भ में
मैंने इसे काफी समय बाद छुआ, लेकिन यदि आप एक ही डिस्क के भीतर बड़ी फ़ाइलों को कॉपी करना चाहते हैं लेकिन डिस्क की खपत को कम करना चाहते हैं, तो हार्ड लिंक का उपयोग करना बेहतर लगता है।
खैर, यह शायद ऐसा कुछ नहीं है जिसका आप अक्सर सचेत रूप से उपयोग करते हैं, लेकिन यह दिलचस्प है क्योंकि यह आपको फ़ाइल सिस्टम संरचना के बारे में थोड़ा समझने में मदद करता है।
तो फिर मिलते हैं।
सादर।