NAME ln -- make a link
SYNOPSIS ln name1[ name2 ]
DESCRIPTION ln creates a link to an existing file name1.
If name2 is given, the link has that name;
1971 यूनिक्स फर्स्ट एडिशन मैनुअल से ।
एक दूसरा , सरल, वाक्य रचना रूप है।
संपादित करें: मैं लक्ष्य के बजाय फ़ाइल या FILENAME डाल --- टिप्पणियों को देखने के आदि भी तल पर बहुत लंबे अलावा देखते हैं, को संबोधित हिमशैल, हार्ड और सॉफ्ट की ln
, न कि केवल यह की नोक।
तो GNU ln
में यह है:
ln [opt] FILENAME
In the 2nd form, create a link to FILENAME in the current directory.
जहां आपको लिंक नाम की आवश्यकता नहीं है। ln -s /usr/lib/modules
तुम्हारे जाने के बाद ए
modules -> /usr/lib/modules
FILENAME ("लक्ष्य" या "स्रोत") के समान नाम के साथ, आप जहां हैं वहीं। कोई विकल्प नहीं, कोई भ्रम नहीं।
अब यदि आप अधिक मांग कर रहे हैं और किसी अन्य नाम और / या कहीं और के तहत बनाई गई लिंक चाहते हैं , तो आप उस इच्छा को नाम या पथ के रूप में जोड़ते हैं । असली लक्ष्य पहले आता है, अतिरिक्त काल्पनिक नया लिंक नाम दूसरा।
या आप कहते हैं: "मैं इस तीर संकेतन को ls -l
लिंक के लिए जानता हूं । मेरे पास अपने लिंक की दिशा दिखाने के लिए शेल में एक तीर नहीं है। इसलिए मुझे इसे चालू करना होगा।"
आप इसे एक दिशा में बनाते हैं, इसलिए आप इसे दूसरे में उपयोग कर सकते हैं।
(उत्तर-प्रश्न भाग का अंत)
एक अन्य स्तर पर, "लिंक" शब्द स्वयं एक गहरे छिपे हुए दोहरे अर्थ को वहन करता है। प्रतीकात्मक लिंक बाद में आए, इसलिए शुरुआती दिनों में एक लिंक सिर्फ एक लिंक था। कोई नरम और कठोर नहीं था, कोई -s
विकल्प नहीं था। और अब मैं स्रोत-लक्ष्य प्रतीकवाद का भी उपयोग करता हूं:
mv A B --- move the whole file to B (dir or new name)
cp A B --- copy whole file (mv and cp are "the same" here)
ln A B --- copy whole file MINUS data blocks (=copy only inode and name), and increase "link count" for track keeping
इस स्तर पर, लिंक हैं, लेकिन कोई हार्ड और सॉफ्ट नहीं है, और ls -l
तीर नहीं दिखाता है, क्योंकि लिंक (हार्ड) में कोई दिशा नहीं है। यूनिक्स विकास के उस स्तर पर एक "लिंक" का मतलब था कि फाइल सिस्टम में फ़ाइल नाम "बी" (निर्देशिका प्रविष्टि "बी") एक ही इनोड की ओर इशारा करता है जैसा कि फाइलनाम "ए" इंगित कर रहा है।
फ़ाइलें A और B एक साथ "लिंक" हैं, क्योंकि वे समान ब्लॉक साझा करते हैं। तो अब हर आरएम के साथ, कर्नेल को जांचना होगा: क्या मैं डिस्क पर इस फ़ाइल के ब्लॉक को हटा / मुक्त करता हूं, या क्या कोई अन्य फ़ाइल उसी ब्लॉकों से जुड़ी है? उसके लिए, एक लिंक काउंटर का उपयोग किया जाता है।
कहते हैं कि आप एक बड़ी फ़ाइल को चालू रखना चाहते हैं / हटाए जा रहे हैं ln /tmp/bigfile
। अब आपके पास काम कर रहे डायर में एक बड़ा बिगफुल है। "ओरिजिनल" की सफाई / tmp और rmoving के बाद, आप खुशी से उसी डेटा ब्लॉक का उपयोग करते हैं। आपको एक मृत या झूलने वाली कड़ी नहीं मिलती है, आपके पास एक सामान्य फाइल है। हर फाइल प्रविष्टि के रूप में कोई फाइल नहीं बल्कि केवल फाइलसिस्टम ब्लॉक की ओर इशारा करता है। केवल अब "सफाई" / tmp उतनी प्रभावी नहीं है जितनी कि थी। यह खाली दिखता है, और यह है, लेकिन विभाजन पर ब्लॉक मुक्त नहीं हुआ है।
भले ही हार्ड लिंक में स्पेस की लागत नहीं होती, क्योंकि cp अप्रत्यक्ष रूप से, यह कर सकता है।
ln -s
ऊपर दिए गए अनुक्रम में जोड़ना :
ln -s A B --- copy only the file's name to "B"
अब "बी", सॉफ्ट लिंक, केवल पथनाम के साथ एक स्ट्रिंग है। यह "सॉफ्ट" जानकारी है। तकनीकी रूप से "ए" और "बी" असंबंधित हैं। लेकिन फिर भी बी नए अर्थों में एक "लिंक" है जिसे आप "ए" के शॉर्टकट के रूप में उस संग्रहीत पथनाम का उपयोग कर सकते हैं । अब यह "ए" (अवधि) का लिंक है न कि "फाइल ए के इनोड से जुड़ा"
दोनों प्रकार के लिंक न केवल मनुष्यों को भ्रमित कर सकते हैं बल्कि कर्नेल / एफएस भी कर सकते हैं। 1971 का मैन पेज नोट: "BUGS: लिंक दो बार बैकअप मिलता है, और अलग इनोड के साथ अलग फ़ाइलों के रूप में पुनर्स्थापित किया जाता है।"
निर्देशिकाओं के लिए हार्ड लिंक (दुर्लभ / अनुमति नहीं) आसानी से रोक के लिए नेतृत्व कर सकते हैं।
निर्देशिकाओं के लिए नरम लिंक (बहुत आम) अनन्त छोरों को जन्म दे सकता है - उपयोगिताओं / कर्नेल द्वारा पहचाना जाना चाहिए।
बाश में व्यावहारिक उदाहरण
एक नियमित फ़ाइल "F" से शुरू ...
ln F Fhard
... Fhard को F के समान आकार देता है, लेकिन वे बिना तीर के गहरे लाल रंग में दिखाई देते हैं ls -l --color
। stat
"इनोड: xyz" के संबंध में "लिंक: 2" दिखाने के कारण । हार्ड लिंकिंग F, F को हार्ड लिंक में बदल देता है। दोनों "नियमित फ़ाइल" के लिए फ़ाइल नाम लिखें / रहें। लेकिन दोनों में 1 से ऊपर एक लिंक गिनती के साथ एक इनकोड है।
ln -s F Fsoft
... बनाता है एक छोटे से "अनियमित" फ़ाइल "Fsoft" filetype "प्रतीकात्मक लिंक" के साथ --- एक खाली अमीर से भी अधिक अंतरिक्ष की बचत। एक ls -l
"एफ" के लिए कुछ खास नहीं दिखाता है। Fsoft के लिए, दिखाया गया आकार 1 बाइट है क्योंकि स्ट्रिंग 'F' है, और Fsoft -> F
नाम के रूप में प्रदर्शित किया जाता है। किसी को पहचानने के लिए सॉफ्ट लिंक को रंगीन करने की आवश्यकता नहीं है। क्योंकि संक्षिप्त रूप में ls -F
आपको एक @
संलग्न श्रृंखला मिलती है :Fsoft@
इसके साथ ls -l
ऐसा दिखता है:
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 F
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 Fhard
lrwxrwxrwx 1 root root 1 Sep 16 16:31 Fsoft -> F
Fhard में F का आकार और प्रकार होता है।
Fsoft में F का नाम और F का नाम आकार के रूप में, और एक अलग फ़ाइल प्रकार है।
लघु ls -sF
:
5932 F 5932 Fhard 0 Fsoft@
जोड़ने से --block-size=1
समान आकार नहीं मिलते हैं। Fsoft का आकार "एक बाइट, शून्य ब्लॉक" है। F और Fhard समानांतर में विचलित होते हैं:
6074368 F 6074368 Fhard 0 Fsoft@
यह देखने के लिए कि Fsoft झूल रहा है या नहीं, ls
आपको रंगों का उपयोग करने देता है।
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
a
, और इसे कॉल करते हैंb
" तो इसे कभी-कभी कहने में मदद मिलती है