मैं लिनक्स में किसी फाइल को कैसे सिमिलिंक कर सकता हूं? [बन्द है]


1937

मैं लिनक्स में एक प्रतीकात्मक लिंक बनाना चाहता हूं। मैंने यह बैश कमांड लिखा है, जहां पहला रास्ता वह फ़ोल्डर है जिसे मैं लिंक करना चाहता हूं और दूसरा रास्ता संकलित स्रोत है।

ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal 

क्या ये सही है?


आपको यह सवाल शायद unix.stackexchange.com
Guss

जवाबों:


3676

एक नया सिमलिंक बनाने के लिए (यदि सिम्कलिन पहले से मौजूद है तो विफल हो जाएगा):

ln -s /path/to/file /path/to/symlink

सिमलिंक बनाने या अपडेट करने के लिए:

ln -sf /path/to/file /path/to/symlink

381
@micapam lnसिंटैक्स सिंटैक्स के समान है cp, जैसे स्रोत गंतव्य
एंड्री

156
यहाँ आपके लिए एक mnemonic है: l (i) n (k) -s (ymbolic) <लक्ष्य> <वैकल्पिक नाम> (यह तथ्य कि अंतिम पैरामीटर वैकल्पिक है, आपको यह पता लगाने में मदद करता है कि यह लक्ष्य नहीं है) (btw बाहर जा रहा है) सिम्लिंक के लिए पथ वर्तमान निर्देशिका में लक्ष्य के समान
बेसन के

32
@micapam जैसा cpहै CoPy, वैसा lnहै LiNk। पहला और तीसरा अक्षर।
कोल जॉनसन

68
मैंने कई मिनट बिताए यह पता लगाने की कोशिश की कि यह मेरे लिए काम क्यों नहीं करता है। इसने एक स्व-लूप लिंक बनाया। ऐसा लगता है कि / पथ / से / फ़ाइल पूर्ण होना चाहिए और "वर्तमान फ़ोल्डर" के सापेक्ष नहीं होना चाहिए। शायद इस जवाब में इंगित करें?
अभिषेक आनंद

52
@AbhishekAnand यह एक दो साल हो गया है, लेकिन मैं सिर्फ यह नोट छोड़ना चाहता था कि यह रिश्तेदार रास्तों के साथ काम करता है; यह केवल परिणामी प्रतीकात्मक लिंक की निर्देशिका के सापेक्ष होना चाहिए न कि वर्तमान निर्देशिका के लिए। पहले पथ तर्क के रूप में आप जो लिखते हैं, वह वास्तव में शब्दशः होता है, जो पाठ प्रतीकात्मक लिंक के अंदर होने वाला है; इसीलिए, जब यह सापेक्ष होता है, तो यह लिंक के सापेक्ष होना चाहिए।
जोएल

302
ln -s TARGET LINK_NAME

जहां -sयह प्रतीकात्मक बनाता है।


2
TARGET और LINKNAME याद रखने का बेहतर तरीका है। सिम्लिंक उपयोग को हटाने के लिए btw:unlink LINK_NAME
सिल्वन

31
मैं इसे इस तरह से वाक्यांश करना पसंद करता हूं ln -s where-the-symlink-should-point where-to-place-the-symlink-itself:।
15

@Silvan के माध्यम से आप एक सिम्लिंक को हटा सकते हैं rm, लेकिन अधिकांश लोग अनुगामी को निकालना नहीं जानते हैं /
FreeSoftwareServers

288
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME

2
स्वीकार किए गए उत्तर से बेहतर है और अस्पष्ट संक्षिप्तता के साथ कवर किया गया है।
जोश हब्दास

3
सिवाय इसके नया सिम्क्लिन नाम नहीं है। यह नाम सहित नया सिमलिंक के लिए नाम या एक पूर्ण पथ (कर्व dir या निरपेक्ष के सापेक्ष) है।
डेविड स्पेक्टर

ln -s EXISTING_FILE_OR_DIRECTORY {वैकल्पिक पथ / /} SYMLINK_NAME और सिम्लिंक पर अनुगामी स्लैश न डालें, क्योंकि यह निर्देशिका नहीं है
comfytoday

94
ln -s target linkName

आप यहाँ आदमी पृष्ठ पर एक नज़र डाल सकते हैं:

http://linux.die.net/man/1/ln


6
केवल "फ़ाइल" के बजाय "लक्ष्य" का उल्लेख करने के लिए अच्छा है
एलिअस

88

(क्योंकि ASCII की तस्वीर एक हजार अक्षरों के लायक है।)

एक तीर एक सहायक महामारी हो सकता है, खासकर जब से यह लगभग उसी तरह है जैसे यह Emacs के बिंदी में दिखता है।

और बड़ी तस्वीर ताकि आप इसे विंडोज के संस्करण के साथ भ्रमित न करें

लिनक्स:

ln -s target <- linkName

खिड़कियाँ:

mklink linkName -> target

आप इन पर भी नजर डाल सकते हैं

ln -s "to-here" <- "from-here"
mklink "from-here" -> "to-here"

from-hereअभी तक अस्तित्व में नहीं होना चाहिए, यह बनाया जा रहा है, जबकि to-hereपहले से मौजूद हो (IIRC)।

(मैं हमेशा इस बात पर घुलमिल जाता हूं कि क्या विभिन्न आदेशों और तर्कों में पहले से मौजूद स्थान शामिल होना चाहिए, या एक बनाया जाना चाहिए।)

संपादित करें: यह अभी भी मेरे लिए धीरे-धीरे डूब रहा है; मेरे पास एक और तरीका है जो मैंने अपने नोट्स में लिखा है।

ln -s (target exists) (link is made)
mklink (link is made) (target exists)

Emacs 'में dired, यह सुपर आसान है, क्योंकि आपने अपने लक्ष्य पर कर्सर रखा है S, और उस निर्देशिका को टाइप करें जहाँ आप लिंक बनाना चाहते हैं। वांछित परिणाम और टाइपिंग की कल्पना के बीच अंतर को कम करता है। Gnu.org/software/emacs/manual/html_node/emacs/… देखें ।
ब्रैडी ट्रेनर

2
My mnemonic is: ln -s Original Newfile (सिमलिंक)
robstarbuck

इसने मेरे लिए काम किया
हैदर अली


22

मूल प्रश्न के लिए:


'ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal'

यह वास्तव में फ़ाइल / निर्देशिका से एक प्रतीकात्मक लिंक ( -s) बनाएगा :

<basebuild>/IpDome-kernel/kernel

अपने नए लिंक के लिए

/home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal

यहां आपको याद रखने में मदद करने के कुछ तरीके दिए गए हैं:

सबसे पहले, के लिए मैन पेज हैln । आप Google में "man ln" खोज के माध्यम से इस तक पहुँच सकते हैं, या बस एक टर्मिनल विंडो खोलें और टाइप करें man lnऔर आपको एक ही जानकारी मिलेगी। आदमी पृष्ठ स्पष्ट रूप से बताता है:

ln [विकल्प] ... [-T] TARGET LINK_NAME (प्रथम फ़ॉर्म)


यदि आपके लिए हर बार किसी पुरुष पृष्ठ के माध्यम से खोज या पढ़ना हो, तो शायद आपके पास यह याद रखने का एक आसान समय होगा कि सभी निक्स कमांड काम करें:

cp /file/that/exists /location/for/new/file
mv /file/that/exists /location/its/moving/to
ln /file/that/exists /the/new/link

cp एक फ़ाइल की प्रतिलिपि बनाता है जो वर्तमान में मौजूद है (पहला तर्क) एक नई फ़ाइल (दूसरा तर्क) के लिए।
mv एक फ़ाइल है जो वर्तमान में मौजूद है (पहला तर्क) एक नई जगह पर (दूसरा तर्क)

इसी तरह lnएक फ़ाइल को लिंक करते हैं जो वर्तमान में मौजूद है (पहला तर्क) एक नई कड़ी (दूसरा तर्क) *


अंतिम विकल्प जो मैं आपको बताना चाहता हूं वह यह है कि आप अपने स्वयं के मैन पेज बना सकते हैं जो पढ़ने में आसान हैं और आपको (याद करने के लिए) आसान है। बस एक सरल शेल स्क्रिप्ट बनाएं जो आपको आपकी आवश्यकता के संकेत देती है। उदाहरण के लिए :

अपनी .bash_aliases फ़ाइल में आप कुछ इस तरह रख सकते हैं:

commandsfx() {
    echo "Symlink:  ln -s /path/to/file /path/to/symlink"
    echo "Copy:     cp /file/to/copy /destination/to/send/copy"
}

alias 'cmds'=commandsfx

फिर जब आपको इसकी आवश्यकता होती है, कमांड लाइन से बस टाइप करें cmdsऔर आप उचित सिंटैक्स को इस तरह से वापस प्राप्त करेंगे कि आप इसे जल्दी से पढ़ और समझ सकें। आप इन कार्यों को उतना ही उन्नत बना सकते हैं जितना आप चाहते हैं कि आपको क्या जानकारी चाहिए, यह आपके ऊपर है। आप उन्हें इंटरेक्टिव भी बना सकते हैं ताकि आपको केवल संकेतों का पालन करना पड़े .. कुछ इस तरह:

makesymlink() {
    echo "Symlink name:"
    read sym
    echo "File to link to:"
    read fil
    ln -s $fil $sym
}

alias 'symlink'=makesymlink

* - अच्छी तरह से वे सभी अलग-अलग मापदंडों को ले सकते हैं और अलग-अलग चीजें कर सकते हैं और फाइलों के साथ-साथ निर्देशिकाओं पर भी काम कर सकते हैं ... लेकिन आधार एक ही is है
- उदाहरण जो बैश शेल का उपयोग करते हैं


18
ln [-Ffhinsv] source_file [target_file]

    link, ln -- make links

        -s    Create a symbolic link.

    A symbolic link contains the name of the file to which it is linked. 

    An ln command appeared in Version 1 AT&T UNIX.

16

लिनक्स पर प्रतीकात्मक लिंक या सॉफ्ट-लिंक्स बनाना:

बैश प्रॉम्प्ट खोलें और अपनी फ़ाइल का प्रतीकात्मक लिंक बनाने के लिए नीचे दी गई कमांड टाइप करें:

ए) उस फ़ोल्डर को गोटो जहां आप एक सॉफ्ट लिंक बनाना चाहते हैं और नीचे दिए गए अनुसार कमांड टाइप करें :

$ ln -s (path-to-file) (symbolic-link-to-file)
$ ln -s /home/user/file new-file

बी) अपने नए फ़ाइल नाम पथ और प्रकार :

$ ls -lrt (To see if the new-file is linked to the file or not)

उदाहरण:

user@user-DT:[~/Desktop/soft]# ln -s /home/user/Desktop/soft/File_B /home/user/Desktop/soft/File_C
user@user-DT:[~/Desktop/soft]# ls -lrt
total 0
-rw-rw-r-- 1 user user  0 Dec 27 16:51 File_B
-rw-rw-r-- 1 user user  0 Dec 27 16:51 File_A
lrwxrwxrwx 1 user user 31 Dec 27 16:53 File_C -> /home/user/Desktop/soft/File_B


Note: Where, File_C -> /home/user/Desktop/soft/File_B  Means, File_C is symbolically linked to File_B

12

ln -s sourcepath linkpathname

ध्यान दें:

-s हार्ड लिंक के बजाय प्रतीकात्मक लिंक बनाता है


11

यदि आप उस निर्देशिका में हैं, जहाँ आप सिमिलिंक बनाना चाहते हैं, तो दूसरे रास्ते को अनदेखा करें।

cd myfolder
ln -s target

यह targetअंदर की सहानुभूति पैदा करेगा myfolder

सामान्य वाक्यविन्यास

ln -s TARGET LINK_NAME

11

यह स्टैक ओवरफ्लो है इसलिए मुझे लगता है कि आप कोड चाहते हैं:

सभी निम्नलिखित कोड मानते हैं कि आप एक प्रतीकात्मक लिंक बनाना चाहते हैं जिसका नाम /tmp/linkलिंक है /tmp/realfile

चेतावनी : हालाँकि यह कोड त्रुटियों के लिए जाँच करता है, यह जाँच नहीं करता है कि क्या /tmp/realfileवास्तव में मौजूद है! ऐसा इसलिए है क्योंकि एक मृत लिंक अभी भी मान्य है और आपके कोड के आधार पर आप (शायद ही कभी) वास्तविक फ़ाइल से पहले लिंक बनाना चाहते हैं।


शेल (बाश, ज़श, ...)

#!/bin/sh
ln -s /tmp/realfile /tmp/link

असली सरल, जैसे आप इसे कमांड लाइन (जो कि शेल है) पर करेंगे। सभी त्रुटि हैंडलिंग शेल दुभाषिया द्वारा की जाती है। यह कोड मानता है कि आपके पास एक कार्यशील शेल दुभाषिया है /bin/sh

यदि आवश्यक हो तो आप अभी भी $?चर का उपयोग करके अपनी स्वयं की त्रुटि से निपटने को लागू कर सकते हैं जो केवल 0 पर सेट किया जाएगा यदि लिंक सफलतापूर्वक बनाया गया था।

C और C ++

#include <unistd.h>
#include <stdio.h>

int main () {
  if( symlink("/tmp/realfile", "/tmp/link") != 0 )
    perror("Can't create the symlink");
}

symlinkकेवल 0 तब देता है जब लिंक बनाया जा सकता है। अन्य मामलों में मैं perrorसमस्या के बारे में अधिक बताने के लिए उपयोग कर रहा हूं ।

पर्ल

#!/usr/bin/perl
if( symlink("/tmp/realfile", "/tmp/link") != 1) {
  print STDERR "Can't create the symlink: $!\n"
}

यह कोड मानता है कि आपके पास एक पर्ल 5 दुभाषिया है /usr/bin/perlsymlinkयदि लिंक बनाया जा सकता है तो केवल 1 रिटर्न। अन्य मामलों में मैं विफलता का कारण मानक त्रुटि आउटपुट को प्रिंट कर रहा हूं।


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

8

मैं पहले से ही प्रस्तुत विवरण का एक सादा-अंग्रेजी संस्करण पेश करना चाहता हूं।

 ln -s  /path-text/of-symbolic-link  /path/to/file-to-hold-that-text

"Ln" कमांड एक लिंक-फाइल बनाता है, और "-s" निर्दिष्ट करता है कि लिंक का प्रकार प्रतीकात्मक होगा। एक प्रतीकात्मक-लिंक फ़ाइल का एक उदाहरण WINE स्थापना (निर्देशिका सामग्री की एक पंक्ति दिखाने के लिए "ls -la" का उपयोग करके पाया जा सकता है):

 lrwxrwxrwx 1 me power 11 Jan  1 00:01 a: -> /mnt/floppy

मानक फ़ाइल-जानकारी सामान बाईं ओर है (हालांकि ध्यान दें कि पहला वर्ण "लिंक" के लिए एक "एल" है); फ़ाइल-नाम "a:" है और "->" भी इंगित करता है कि फ़ाइल एक लिंक है। यह मूल रूप से वाइन को बताता है कि कैसे लिनक्स में फ्लॉपी ड्राइव के साथ विंडोज "ड्राइव ए:" जुड़ा होना है। वास्तव में (वर्तमान निर्देशिका में, और वास्तव में ऐसा करने के लिए वाइन के लिए ऐसा करने के लिए एक प्रतीकात्मक लिंक SIMILAR बनाने के लिए और अधिक जटिल है; "winecfg" उपयोगिता का उपयोग करें):

 ln -s  /mnt/floppy  a:   //will not work if file a: already exists

7

एक प्रतीकात्मक लिंक / सॉफ्ट लिंक बनाने के लिए, उपयोग करें:

ln -s {source-filename} {symbolic-filename}

उदाहरण के लिए:

ln -s file1 link1

4

लिंक के दो प्रकार के होते हैं:

प्रतीकात्मक लिंक: एक प्रतीकात्मक पथ का संदर्भ लें जो किसी अन्य फ़ाइल के अमूर्त स्थान को दर्शाता है

हार्ड लिंक: भौतिक डेटा के विशिष्ट स्थान का संदर्भ लें।

आपके मामले में सहानुभूति है:

ln -s source target

आप http://man7.org/linux/man-pages/man7/symlink.7.html का उल्लेख कर सकते हैं

आप बहुत कठिन लिंक बना सकते हैं

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

ln source link

4

लिंक मूल रूप से दो प्रकार के होते हैं:

प्रतीकात्मक लिंक (नरम): एक प्रतीकात्मक पथ के लिए लिंक एक और फ़ाइल के सार स्थान का संकेत है

हार्ड लिंक: भौतिक डेटा के विशिष्ट स्थान के लिए लिंक।

उदाहरण 1:

ln /root/file1 /root/file2

ऊपर एक कड़ी का एक उदाहरण है जहाँ आप अपने भौतिक डेटा की एक प्रति रख सकते हैं।

उदाहरण 2:

ln -s /path/to/file1.txt /path/to/file2.txt

उपरोक्त कमांड file1.txt के लिए एक प्रतीकात्मक लिंक बनाएगी।

यदि आप कोई स्रोत फ़ाइल हटाते हैं, तो आपके पास सॉफ्ट में गंतव्य के लिए कुछ भी नहीं होगा।

जब तुम करोगे:

ls -lai

आप देखेंगे कि सिमिलिंक के लिए एक अलग आईनोड नंबर है।

अधिक जानकारी के लिए, आप अपने लिनक्स ओएस पर ln के मैन पेज को पढ़ सकते हैं।


hard link where you can have a copy of your physical data- मुझे लगता है कि हम भौतिक डेटा की प्रतिलिपि नहीं बनाते हैं । उसी भौतिक डेटा के लिए बस एक और नाम।
अलेक्जेंडर रेडचेंको

3

मुझे आदमी की जानकारी में शब्दावली "लक्ष्य" और "निर्देशिका" को भ्रमित करने वाला थोड़ा सा लगता है।

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

यह मेरी एक साइमलिंक बनाने की व्याख्या है (लिनक्स में):

ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK

आप उस फ़ोल्डर पर नेविगेट कर सकते हैं जहाँ आप सिमिलिंक बनाना चाहते हैं और कमांड को चला सकते हैं या NAME-OF-YOUR-SYMLINK के बजाय अपने सिम्कलिन के लिए पूर्ण पथ निर्दिष्ट कर सकते हैं।

cd /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK

या

ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER/NAME-OF-YOUR-SYMLINK

मुझे आशा है कि यह उन (अभी भी) को धीरे-धीरे भ्रमित करने में मदद करता है।


-2

योनि में सिमलिंक कैसे बनाएं। कदम:

  1. आवारा फाइल में एक सिंक किया हुआ फोल्डर बनाएं। उदा। config.vm.synced_folder "F: / Sunburst / source / sunburst / lms", "/ source" F: / Sunburst / source / sunburst / lms: - जहां स्रोत कोड, / स्रोत: - योनि के अंदर निर्देशिका पथ
  2. वैग्रंट अप और टाइप करें आवारा ssh और सोर्स डायरेक्टरी उदा cd सोर्स पर जाएं
  3. स्रोत स्रोत में उपलब्ध है अपने स्रोत कोड फ़ोल्डर संरचना की जाँच करें। जैसे / स्रोत / स्थानीय
  4. फिर अतिथि मशीन निर्देशिका पर जाएं जहां फाइलें जो ब्राउज़र के साथ संबद्ध हैं। फाइल का बैकअप लेने के बाद। जैसे sudo mv स्थानीय local_bk
  5. इसके बाद सिंबल बनाएं जैसे कि sudo ln -s / source / local स्थानीय। स्थानीय अर्थ लिंक-नाम (अतिथि मशीन में फ़ोल्डर का नाम जिसे आप लिंक करने जा रहे हैं) यदि आपको सिमलिंक को हटाने की आवश्यकता है: - टाइप करें sudom स्थानीय
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.