Jak dowiązać symbolicznie plik w Linuksie?

Chcę utworzyć dowiązanie symboliczne w Linuksie. Napisałem to polecenie bash, gdzie pierwsza ścieżka jest folderem, do którego chcę link, a druga ścieżka jest skompilowanym źródłem.

ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal 
Czy to prawda?
 1537
Author: Eric Leschinski, 2009-12-23

17 answers

Utworzenie nowego dowiązania symbolicznego (nie powiedzie się, jeśli dowiązanie symboliczne już istnieje):

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

Aby utworzyć lub zaktualizować dowiązanie symboliczne:

ln -sf /path/to/file /path/to/symlink
 3072
Author: hsz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-11 08:19:48
ln -s TARGET LINK_NAME

Gdzie -s czyni to symbolicznym.

 255
Author: cyborg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-11 07:40:34
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME
 239
Author: codaddict,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-20 16:14:49
ln -s target linkName

Możesz spojrzeć na stronę man tutaj:

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

 81
Author: rui,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-23 09:52:45

(ponieważ obraz ASCII jest wart tysiąca znaków.)

Strzałka może być pomocnym mnemonikiem, zwłaszcza, że prawie tak wygląda w dired Emacsa.

I big picture, aby nie pomylić go z wersją Windows

Linux:

ln -s target <- linkName

Windows:

mklink linkName -> target

Można też spojrzeć na nie jako

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

from-here nie powinno jeszcze istnieć, ma być utworzone, podczas gdy to-here powinno już istnieć (IIRC).

(I zawsze mieszaj się w kwestii tego, czy różne polecenia i argumenty powinny obejmować istniejącą wcześniej lokalizację, czy taką, która ma być wykonana.)

EDIT: to wciąż powoli tonie dla mnie; mam inny sposób, który napisałem w moich notatkach.

ln -s (target exists) (link is made)
mklink (link is made) (target exists)
 71
Author: Brady Trainor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-15 15:53:14
ln -s source_file target_file

Http://unixhelp.ed.ac.uk/CGI/man-cgi?ln

 22
Author: Rob M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-26 08:56:46

Do pytania pierwotnego:


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

To rzeczywiście stworzy dowiązanie symboliczne (-s) z pliku / katalogu:

<basebuild>/IpDome-kernel/kernel

Do twojego nowego linku

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

Oto kilka sposobów, które pomogą Ci zapamiętać:

Po pierwsze, jest strona man dla ln. Możesz uzyskać dostęp do tego poprzez wyszukiwanie "man ln" w google, lub po prostu otwórz okno terminala i wpisz man ln, a otrzymasz te same informacje. Strona podręcznika wyraźnie stwierdza:

Ln [opcja]... [- T] TARGET LINK_NAME (1st form)


Jeśli konieczność przeszukiwania lub czytania strony podręcznika za każdym razem nie jest dla ciebie, być może będziesz miał łatwiejszy czas, pamiętając, że wszystkie polecenia {37]} nix działają w ten sam sposób:

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

cp kopiuje istniejący plik (pierwszy argument) do nowego pliku (drugi argument).
mv przenosi plik, który aktualnie istnieje (pierwszy argument) do nowego miejsca (drugi argument)
Podobnie ln łączy plik, który obecnie istnieje (pierwszy argument) z nowym dowiązaniem (drugi argument)*


Ostatnią opcją, którą chciałbym zaproponować, jest możliwość tworzenia własnych stron podręcznika, które są łatwe do odczytania i łatwe (dla Ciebie) do znalezienia/zapamiętania. Wystarczy zrobić prosty skrypt powłoki, który daje wskazówkę, której potrzebujesz. Na przykład:

W Twoim .bash_aliases plik możesz umieścić w następujący sposób:

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

alias 'cmds'=commandsfx

Następnie, gdy jest to potrzebne, z linii poleceń po prostu wpisz cmds i odzyskasz właściwą składnię w sposób, który możesz szybko przeczytać i zrozumieć. Możesz uczynić te funkcje tak zaawansowanymi, jak chcesz, aby uzyskać potrzebne informacje, to zależy od Ciebie. Możesz nawet uczynić je interaktywnymi, więc po prostu musisz postępować zgodnie z instrukcjami.. coś w stylu:

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

alias 'symlink'=makesymlink

* - oczywiście wszystkie mogą przyjmować różne parametry i robić różne rzeczy i może pracować na plikach, a także katalogach... ale założenie jest takie samo
♦ - przykłady użycia powłoki bash

 17
Author: Mike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-06 13:42:42
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.
 14
Author: miku,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-23 09:56:55

Jeśli znajdujesz się w katalogu, w którym chcesz utworzyć dowiązanie symboliczne, zignoruj drugą ścieżkę.

cd myfolder
ln -s target

Utworzy dowiązanie symboliczne target wewnątrz myfolder.

Składnia Ogólna

ln -s TARGET LINK_NAME
 10
Author: Fizer Khan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-16 10:56:44

ln -s sourcepath linkpathname

Uwaga:

-S tworzy dowiązania symboliczne zamiast dowiązań twardych

 10
Author: simranjeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-17 00:51:10

Tworzenie dowiązań symbolicznych lub miękkich na Linuksie:

Otwórz wiersz polecenia Bash i wpisz poniższe polecenie, aby utworzyć dowiązanie symboliczne do pliku:

A) Przejdź do folderu, w którym chcesz utworzyć soft link i wpisz polecenie wymienione poniżej:

$ ln -s (path-to-file) (symbolic-link-to-file)

$ ln -s /home/user/file new-file

B) Goto your new-file name path and type :

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

Przykład:

ls -lrt

lrwxrwxrwx 1 user user 24 Aug 6 23:40 new-file -> /home/user/file

Note: Where, A -> B Means, A is symbolically linked to B

 9
Author: Ankit Raj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-16 14:30:06

Chciałbym przedstawić prostszą, angielską wersję przedstawionych już opisów.

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

Polecenie" ln "tworzy plik-dowiązania, A" - s " określa, że typ dowiązania będzie symboliczny. Przykład pliku dowiązania symbolicznego można znaleźć w instalacji WINE (używając "ls-la" do pokazania jednej linii zawartości katalogu):

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

Standardowe informacje o plikach są po lewej stronie (chociaż zauważ, że pierwszy znak to " l "jako " link"); nazwa pliku to " a:", a także" ->" wskazuje, że plik jest łączem. Zasadniczo mówi WINE, jak Windows "Drive A:" ma być powiązany z dyskietką w Linuksie. Aby utworzyć dowiązanie symboliczne podobne do tego (w bieżącym katalogu, a faktycznie zrobić to dla WINE jest bardziej skomplikowane; użyj narzędzia "winecfg"): {]}

 ln -s  /mnt/floppy  a:   //will not work if file a: already exists
 7
Author: vernonner3voltazim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-16 07:14:49

To jest przepełnienie stosu więc zakładam, że chcesz kod:

Cały następujący kod zakłada, że chcesz utworzyć dowiązanie symboliczne o nazwie /tmp/link, które łączy się z /tmp/realfile.

Uwaga : chociaż ten kod sprawdza pod kątem błędów, nie sprawdza, czy /tmp/realfile rzeczywiście istnieje ! Dzieje się tak dlatego, że martwe łącze jest nadal ważne i w zależności od kodu możesz (rzadko) chcieć utworzyć łącze przed prawdziwym plikiem.


Shell (bash, zsh,...)

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

Real simple, tak jak byś to zrobił w wierszu poleceń (którym jest powłoka). Cała obsługa błędów jest wykonywana przez interpreter powłoki. Ten kod zakłada, że masz działający interpreter powłoki w /bin/sh.

W razie potrzeby nadal możesz zaimplementować własną obsługę błędów, używając zmiennej $?, która będzie ustawiona na 0 tylko wtedy, gdy link został pomyślnie utworzony.

C i C++

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

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

symlink zwraca 0 tylko wtedy, gdy można utworzyć łącze. W innych przypadkach używam perror, aby powiedzieć więcej o problemie.

Perl

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

Ten kod zakłada, że masz interpreter perl 5 w /usr/bin/perl. symlink zwraca tylko 1, jeśli można utworzyć łącze. W innych przypadkach drukuję przyczynę awarii na standardowym wyjściu błędu.

 5
Author: Garo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-07 16:36:15

Aby utworzyć dowiązanie symboliczne / dowiązanie miękkie, użyj:

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

Np.:

ln -s file1 link1
 4
Author: Prem S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-25 15:50:51

Istnieją dwa rodzaje linków:

Dowiązania symboliczne: odnoszą się do symbolicznej ścieżki wskazującej abstrakcyjne położenie innego pliku

Twarde linki: odnoszą się do konkretnej lokalizacji danych fizycznych.

W Twoim przypadku dowiązania symboliczne:

ln -s source target

Możesz odnieść się do http://man7.org/linux/man-pages/man7/symlink.7.html

Możesz tworzyć zbyt twarde linki

Twarde łącze do pliku jest nie do odróżnienia od oryginalnego wpisu katalogu; wszelkie zmiany w pliku są skutecznie niezależne od nazwy używanej do odwoływania się do pliku. Łącza twarde mogą zwykle nie odnosić się do katalogów i nie obejmować systemów plików.

ln source link
 2
Author: wpp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-27 17:55:06

Znajduję trochę mylące terminologie " cel " i "katalog" w informacji o człowieku.

Celem jest katalog, do którego dowiązujemy symbolicznie, oraz katalog, do którego dowiązujemy symbolicznie (Nie katalog, do którego będziemy dowiązywać symbolicznie), jeśli ktoś doświadcza tego samego zamieszania, nie czuj się samotny.

Oto moja interpretacja tworzenia dowiązania symbolicznego (w Linuksie):

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

Możesz przejść do folderu, w którym chcesz utworzyć dowiązanie symboliczne i uruchomić polecenie lub określ pełną ścieżkę dla dowiązania symbolicznego zamiast nazwy dowiązania symbolicznego.

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

Lub

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

Mam nadzieję, że to pomoże tym (wciąż) skąpo zdezorientowanym.

 1
Author: mmmdearte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-16 10:35:06

Jak utworzyć dowiązanie symboliczne w vagrant. Kroki:

  1. w pliku vagrant Utwórz zsynchronizowany folder. np. config.vm.synced_folder "F:/Sunburst/source/sunburst/lms", " /źródło" F:/Sunburst/source/sunburst/lms : - where the source code, / source :- directory path inside the vagrant
  2. Vagrant w górę i wpisz Vagrant ssh i przejdź do katalogu źródłowego np. cd source
  3. Sprawdź, czy struktura folderów kodu źródłowego jest dostępna w katalogu źródłowym. e. g/source / local
  4. Następnie przejdź do katalog guest machine, w którym pliki kojarzone są z przeglądarką. Po uzyskaniu kopii zapasowej pliku. np. sudo mv local local_bk
  5. następnie utwórz dowiązanie symboliczne np. sudo ln-s/source / local local. local mean link-name (nazwa folderu w komputerze gościa, który zamierzasz połączyć) jeśli chcesz usunąć dowiązanie symboliczne: - wpisz sudo rm local
 -1
Author: Vayodya Tamari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-15 09:54:44