Wie kann ich eine Datei unter Linux symlinken? [geschlossen]

1939

Ich möchte eine symbolische Verknüpfung unter Linux herstellen. Ich habe diesen Bash-Befehl geschrieben, wobei der erste Pfad der Ordner ist, in den ich einen Link erstellen möchte, und der zweite Pfad die kompilierte Quelle ist.

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

Ist das richtig?

chrissygormley
quelle
Sie sollten diese Frage wahrscheinlich unter unix.stackexchange.com
Guss

Antworten:

3677

So erstellen Sie einen neuen Symlink (schlägt fehl, wenn der Symlink bereits vorhanden ist):

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

So erstellen oder aktualisieren Sie einen Symlink:

ln -sf /path/to/file /path/to/symlink
hsz
quelle
381
@micapam Die lnSyntax ist ähnlich der cpSyntax, zB Quellenziel .
Andrey
157
Hier ist eine Mnemonik für Sie: l (i) n (k) -s (ymbolisch) <Ziel> <optionaler Name> (die Tatsache, dass der letzte Parameter optional ist, hilft Ihnen herauszufinden, dass es nicht das Ziel ist) (übrigens ohne Pfad zum Symlink erstellt einen Link im aktuellen Verzeichnis mit dem gleichen Basisnamen wie das Ziel)
UncleZeiv
32
@micapam So wie es cpist CoPy, lnist LiNk. Erster und dritter Buchstabe.
Cole Johnson
68
Ich habe einige Minuten damit verbracht herauszufinden, warum dies bei mir nicht funktioniert hat. Es wurde ein selbstschleifender Link erstellt. Es scheint, dass die Datei / path / to / absolut und nicht relativ zum "aktuellen Ordner" sein sollte. Vielleicht in der Antwort darauf hinweisen?
Abhishek Anand
52
@AbhishekAnand es ist schon ein paar Jahre, aber ich wollte nur die Nachricht zukommen lassen , dass es tut Arbeit mit relativen Pfaden; Es muss nur relativ zum Verzeichnis des resultierenden symbolischen Links und nicht zum aktuellen Verzeichnis sein. Was Sie als erstes Pfadargument schreiben, ist wörtlich der Text, der sich innerhalb der symbolischen Verknüpfung befindet. Deshalb muss es, wenn es relativ ist, relativ zum Link sein.
JoL
302
ln -s TARGET LINK_NAME

Wo das -ses symbolisch macht.

Cyborg
quelle
2
TARGET & LINKNAME sind eine bessere Möglichkeit, sich zu erinnern. Übrigens zum Löschen des Symlinks verwenden:unlink LINK_NAME
Silvan
31
Ich formuliere es gerne so : ln -s where-the-symlink-should-point where-to-place-the-symlink-itself.
Totymedli
@Silvan Sie können einen Symlink über löschen rm, aber die meisten Leute wissen nicht, wie sie das Trailing entfernen sollen /.
FreeSoftwareServers
288
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME
Codaddict
quelle
2
Besser als die akzeptierte Antwort und mit eindeutiger Kürze bedeckt.
Josh Habdas
3
Nur dass es nicht der neue Symlink-Name ist. Dies ist der Name oder ein vollständiger Pfad (relativ zu aktuell oder absolut) für den neuen Symlink einschließlich des Namens.
David Spector
ln -s EXISTING_FILE_OR_DIRECTORY {optionaler Pfad zu /} SYMLINK_NAME und setzen Sie keinen abschließenden Schrägstrich auf den Symlink, da es sich nicht um ein Verzeichnis handelt
comfytoday
94
ln -s target linkName

Die Manpage finden Sie hier:

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

rui
quelle
6
gut zu erwähnen "Ziel" statt nur "Datei"
Alyas
88

(Weil ein ASCII-Bild mehr als tausend Zeichen wert ist.)

Ein Pfeil kann eine hilfreiche Mnemonik sein, zumal es in Emacs 'Regie fast genau so aussieht.

Und ein großes Bild, damit Sie es nicht mit der Windows-Version verwechseln

Linux:

ln -s target <- linkName

Windows:

mklink linkName -> target

Sie können diese auch als betrachten

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

Das from-heresollte noch nicht existieren, es soll erstellt werden, während das to-hereschon existieren soll (IIRC).

(Ich bin immer durcheinander, ob verschiedene Befehle und Argumente einen bereits vorhandenen oder einen zu erstellenden Speicherort betreffen sollten.)

EDIT: Es sinkt immer noch langsam für mich; Ich habe eine andere Art, wie ich in meinen Notizen geschrieben habe.

ln -s (target exists) (link is made)
mklink (link is made) (target exists)
Brady Trainor
quelle
In Emacs diredist es ganz einfach, wenn Sie den Mauszeiger über Ihr Ziel bewegen, drücken Sund das Verzeichnis eingeben, in dem der Link erstellt werden soll. Verkürzt die Lücke zwischen der Vorstellung des gewünschten Ergebnisses und der Eingabe. Siehe gnu.org/software/emacs/manual/html_node/emacs/… .
Brady Trainor
2
Meine Mnemonik ist ON: ln -s Original Newfile (Symlink)
Robstarbuck
das hat bei mir funktioniert
Haider Ali
25
ln -s source_file target_file

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

Rob M.
quelle
4
das ist die entgegengesetzte Definition von "Ziel" im Vergleich zu man ln, was es nenntln -s TARGET LINK_NAME
wisbucky
22

Zur ursprünglichen Frage:


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

Dadurch wird in der Tat ein symbolischer Link ( -s) aus der Datei / dem Verzeichnis erstellt:

<basebuild>/IpDome-kernel/kernel

zu Ihrem neuen Link

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

Hier sind einige Möglichkeiten, wie Sie sich erinnern können:

Erstens gibt es die Manpage fürln . Sie können darauf zugreifen, indem Sie in Google nach "man ln" suchen, oder einfach ein Terminalfenster öffnen und eingeben, man lnund Sie erhalten die gleichen Informationen. In der Manpage heißt es eindeutig:

ln [OPTION] ... [-T] TARGET LINK_NAME (1. Form)


Wenn Sie nicht jedes Mal eine Manpage durchsuchen oder lesen müssen, fällt es Ihnen möglicherweise leichter, sich daran zu erinnern, dass alle nix-Befehle auf dieselbe Weise funktionieren::

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

cp kopiert eine aktuell vorhandene Datei (das erste Argument) in eine neue Datei (das zweite Argument).
mv verschiebt eine aktuell vorhandene Datei (das erste Argument) an einen neuen Ort (das zweite Argument)

Ebenso lnverbindet eine Datei , die zur Zeit (das erste Argument) zu einer neuen Verbindung besteht (das zweite Argument) *


Die letzte Option, die ich vorschlagen möchte, ist, dass Sie Ihre eigenen Manpages erstellen können, die leicht zu lesen und (für Sie) leicht zu finden / zu merken sind. Erstellen Sie einfach ein einfaches Shell-Skript, das Ihnen den Hinweis gibt, den Sie benötigen. Zum Beispiel :

In Ihrer .bash_aliases-Datei können Sie Folgendes platzieren:

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

alias 'cmds'=commandsfx

Wenn Sie es dann brauchen, geben Sie einfach über die Befehlszeile ein cmdsund Sie erhalten die richtige Syntax zurück, so dass Sie sie schnell lesen und verstehen können. Sie können diese Funktionen so erweitern, wie Sie möchten, welche Informationen Sie benötigen. Es liegt an Ihnen. Sie können sie sogar interaktiv gestalten, sodass Sie nur den Anweisungen folgen müssen. So etwas wie:

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

alias 'symlink'=makesymlink

* - Natürlich können sie alle unterschiedliche Parameter annehmen und unterschiedliche Aufgaben ausführen und sowohl an Dateien als auch an Verzeichnissen arbeiten ... aber die Prämisse ist dieselbe
♦ - Beispiele mit der Bash-Shell

Mike
quelle
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.
miku
quelle
16

Erstellen symbolischer Links oder Softlinks unter Linux:

Öffnen Sie die Eingabeaufforderung Bash und geben Sie den folgenden Befehl ein, um einen symbolischen Link zu Ihrer Datei herzustellen:

A) Wechseln Sie zu dem Ordner, in dem Sie einen Softlink erstellen möchten, und geben Sie den folgenden Befehl ein :

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

B) Gehen Sie zu Ihrem Pfad für den neuen Dateinamen und geben Sie Folgendes ein :

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

Beispiel:

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
Ankit Raj
quelle
12

ln -s sourcepath linkpathname

Hinweis:

-s macht symbolische Links anstelle von harten Links

simranjeet
quelle
11

Wenn Sie sich in dem Verzeichnis befinden, in dem Sie einen Symlink erstellen möchten, ignorieren Sie den zweiten Pfad.

cd myfolder
ln -s target

Es wird ein Symlink von targetinnen erstelltmyfolder .

Allgemeine Syntax

ln -s TARGET LINK_NAME
Fizer Khan
quelle
11

Dies ist ein Stapelüberlauf, daher gehe ich davon aus, dass Sie Code möchten:

Der folgende Code setzt voraus, dass Sie einen symbolischen Link mit dem Namen erstellen möchten /tmp/link , die Links zu/tmp/realfile .

VORSICHT : Obwohl dieser Code nach Fehlern sucht, prüft er NICHT, ob/tmp/realfile tatsächlich vorhanden ist! Dies liegt daran, dass ein toter Link noch gültig ist und Sie abhängig von Ihrem Code (selten) den Link vor der eigentlichen Datei erstellen möchten.


Shell (bash, zsh, ...)

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

Ganz einfach, genau wie Sie es in der Befehlszeile tun würden (das ist die Shell). Die gesamte Fehlerbehandlung erfolgt durch den Shell-Interpreter. Dieser Code setzt voraus, dass Sie einen funktionierenden Shell-Interpreter bei haben/bin/sh .

Bei Bedarf können Sie trotzdem Ihre eigene Fehlerbehandlung implementieren, indem Sie die $? Variable verwenden, die nur dann auf 0 gesetzt wird, wenn der Link erfolgreich erstellt wurde.

C und C ++

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

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

symlinkGibt nur 0 zurück, wenn der Link erstellt werden kann. In anderen Fällen benutze ichperror erzähle ich mehr über das Problem.

Perl

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

Dieser Code setzt voraus, dass Sie einen Perl 5-Interpreter bei haben /usr/bin/perl. symlinkGibt nur 1 zurück, wenn der Link erstellt werden kann. In anderen Fällen drucke ich den Fehlergrund in die Standardfehlerausgabe.

Garo
quelle
1
Erklärung hinzugefügt, auch ein Wort der Vorsicht für tote Links. Ich überprüfe dies nicht, weil nicht angenommen werden kann, dass dies nicht erwünscht ist und auch weil Filetests nicht mehr zum Thema gehören
Garo
8

Ich möchte eine einfachere englische Version der bereits vorgestellten Beschreibungen präsentieren.

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

Der Befehl "ln" erstellt eine Link-DATEI und das "-s" gibt an, dass der Link-Typ symbolisch ist. Ein Beispiel für eine symbolische Linkdatei finden Sie in einer WINE-Installation (mit "ls -la" wird eine Zeile des Verzeichnisinhalts angezeigt):

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

Standard-Datei-Info-Zeug ist links (obwohl zu beachten ist, dass das erste Zeichen ein "l" für "Link" ist); Der Dateiname ist "a:" und das "->" zeigt auch an, dass die Datei ein Link ist. Grundsätzlich wird WINE mitgeteilt, wie Windows "Laufwerk A:" mit einem Diskettenlaufwerk unter Linux verknüpft werden soll. Das Erstellen eines symbolischen Links ÄHNLICH dazu (im aktuellen Verzeichnis und dies tatsächlich für WINE zu tun ist komplizierter; verwenden Sie das Dienstprogramm "winecfg"):

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

Verwenden Sie zum Erstellen eines symbolischen Links / Softlinks:

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

z.B:

ln -s file1 link1
Prem S.
quelle
4

Es gibt zwei Arten von Links:

Symbolische Links: Beziehen Sie sich auf einen symbolischen Pfad, der den abstrakten Speicherort einer anderen Datei angibt

Hardlinks: Beziehen Sie sich auf den spezifischen Speicherort der physischen Daten.

In Ihrem Fall Symlinks:

ln -s source target

Sie können auf http://man7.org/linux/man-pages/man7/symlink.7.html verweisen

Sie können zu harte Links erstellen

Ein fester Link zu einer Datei ist vom ursprünglichen Verzeichniseintrag nicht zu unterscheiden. Änderungen an einer Datei sind praktisch unabhängig von dem Namen, mit dem auf die Datei verwiesen wird. Hardlinks verweisen normalerweise nicht auf Verzeichnisse und erstrecken sich möglicherweise nicht über Dateisysteme.

ln source link
wpp
quelle
4

Es gibt grundsätzlich zwei Arten von Links:

Symbolische Links (weich): Link zu einem symbolischen Pfad, der den abstrakten Speicherort einer anderen Datei angibt

Harte Links: Link zum spezifischen Speicherort der physischen Daten.

Beispiel 1:

ln /root/file1 /root/file2

Das Obige ist ein Beispiel für einen festen Link, über den Sie eine Kopie Ihrer physischen Daten erhalten können.

Beispiel 2:

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

Der obige Befehl erstellt einen symbolischen Link zu file1.txt.

Wenn Sie eine Quelldatei löschen, haben Sie in soft nichts am Ziel.

Wenn Sie das tun:

ls -lai

Sie werden sehen, dass es für die Symlinks eine andere Inode-Nummer gibt.

Weitere Informationen finden Sie in der Manpage von ln auf Ihrem Linux-Betriebssystem.

Prabhat Singh
quelle
hard link where you can have a copy of your physical data- Ich denke, wir erstellen keine Kopie der physischen Daten. Nur ein anderer Name für die gleichen physischen Daten.
Alexander Radchenko
3

Ich finde die Terminologien "Ziel" und "Verzeichnis" in den Manninformationen etwas verwirrend.

Das Ziel ist der Ordner, mit dem wir eine Verknüpfung herstellen, und das Verzeichnis der eigentliche Verknüpfung (nicht das Verzeichnis, mit dem Sie eine Verknüpfung herstellen). Wenn jemand die gleiche Verwirrung hat, fühlen Sie sich nicht allein.

Dies ist meine Interpretation zum Erstellen eines Symlinks (unter Linux):

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

Sie können zu dem Ordner navigieren, in dem Sie den Symlink erstellen und den Befehl ausführen möchten, oder den vollständigen Pfad für Ihren Symlink anstelle von NAME-OF-YOUR-SYMLINK angeben.

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

ODER

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

Ich hoffe das hilft denen (noch) etwas verwirrt.

mmmdearte
quelle
-2

So erstellen Sie einen Symlink in Vagrant. Schritte:

  1. Erstellen Sie in einer Vagrant-Datei einen synchronisierten Ordner. zB config.vm.synced_folder "F: / Sunburst / source / sunburst / lms", "/ source" F: / Sunburst / source / sunburst / lms: - wobei der Quellcode, / source: - Verzeichnispfad innerhalb des Vagabunden
  2. Vagrant up und tippe vagrant ssh ein und gehe zum Quellverzeichnis, zB cd source
  3. Stellen Sie sicher, dass Ihre Quellcode-Ordnerstruktur im Quellverzeichnis verfügbar ist. zB / source / local
  4. Wechseln Sie dann in das Gastcomputerverzeichnis, in dem sich die Dateien befinden, die dem Browser zugeordnet sind. Nach dem Sichern der Datei. zB sudo mv local local_bk
  5. Erstellen Sie dann einen Symlink, z. B. sudo ln -s / source / local local. lokaler mittlerer Linkname (Ordnername auf dem Gastcomputer, den Sie verknüpfen möchten), wenn Sie den Symlink entfernen müssen: - Geben Sie sudo rm local ein
Vayodya Tamari
quelle