web-dev-qa-db-fra.com

Comment faire un lien symbolique vers un fichier sous Linux?

Je veux faire un lien symbolique sous Linux. J'ai écrit cette commande bash où le premier chemin est le dossier dans lequel je veux créer un lien et le deuxième chemin est la source compilée.

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

Est-ce correct?

1814
chrissygormley

Pour créer un nouveau lien symbolique (échouera si un lien symbolique existe déjà):

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

Pour créer ou mettre à jour un lien symbolique:

ln -sf /path/to/file /path/to/symlink
3523
hsz
ln -s TARGET LINK_NAME

Où le -s le rend symbolique.

283
cyborg
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME
275
codaddict
ln -s target linkName

Vous pouvez consulter la page de manuel ici:

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

91
rui

(Parce qu'une image ASCII vaut mille caractères.)

Une flèche peut être un mnémonique utile, d'autant plus que c'est à peu près exactement ce à quoi elle ressemble dans la direction d'Emacs.

Et la grande image pour ne pas confondre avec la version Windows

Linux:

ln -s target <- linkName

Les fenêtres:

mklink linkName -> target

Vous pouvez aussi regarder comme

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

Le from-here ne devrait pas encore exister, il doit être créé, alors que le to-here devrait déjà exister (IIRC).

(Je me demande toujours si différentes commandes et arguments doivent impliquer un emplacement préexistant ou un emplacement à créer.)

EDIT: Il s'enfonce toujours lentement pour moi; J'ai une autre manière que j'ai écrite dans mes notes.

ln -s (target exists) (link is made)
mklink (link is made) (target exists)
81
Brady Trainor
ln -s source_file target_file

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

24
Rob M

A la question initiale:


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

Cela créera en effet un lien symbolique (-s) à partir du fichier/répertoire:

<basebuild>/IpDome-kernel/kernel

à votre nouveau lien

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

Voici quelques façons de vous aider à vous souvenir:

Premièrement, il y a la page de manuel pour ln . Vous pouvez y accéder en effectuant une recherche sur "man ln" dans Google ou en ouvrant simplement une fenêtre de terminal et en tapant man ln pour obtenir les mêmes informations. La page de manuel indique clairement:

ln [OPTION] ... [-T] CIBLE LINK_NAME (1ère forme)


Si le fait de chercher ou de lire une page de manuel à chaque fois ne vous convient pas, vous aurez peut-être plus de facilité à vous souvenir que toutes les commandes nix fonctionnent de la même manière :

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

cp copie un fichier existant (le premier argument) dans un nouveau fichier (le second argument).
mv déplace un fichier existant (le premier argument) vers un nouvel emplacement (le second argument)

De même ln lie un fichier existant (le premier argument) à un nouveau lien (le deuxième argument)*


La dernière option que je voudrais suggérer est que vous pouvez créer vos propres pages de manuel faciles à lire et faciles (pour vous) à trouver/à mémoriser. Créez simplement un script Shell qui vous donne l’indice dont vous avez besoin. Par exemple:

Dans votre fichier .bash_aliases, vous pouvez placer quelque chose comme:

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

alias 'cmds'=commandsfx

Ensuite, lorsque vous en aurez besoin, entrez cmds dans la ligne de commande et vous obtiendrez la syntaxe appropriée de manière à pouvoir la lire et la comprendre rapidement. Vous pouvez rendre ces fonctions aussi avancées que vous le souhaitez pour obtenir les informations dont vous avez besoin, à vous de choisir. Vous pouvez même les rendre interactifs, il vous suffit donc de suivre les instructions .. quelque chose comme:

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

alias 'symlink'=makesymlink

* - bien évidemment, ils peuvent tous prendre différents paramètres et faire des choses différentes et peuvent travailler sur des fichiers aussi bien que sur des répertoires ... mais le principe est le même
♦ - exemples utilisant le shell bash

18
Mike
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
miku

Création de liens symboliques ou de liens symboliques sous Linux:

Ouvrez l'invite Bash et tapez la commande mentionnée ci-dessous pour créer un lien symbolique vers votre fichier:

A) Allez dans le dossier où vous voulez créer un lien symbolique et tapez la commande comme indiqué ci-dessous:

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

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

B) Allez à votre nouveau nom de fichier chemin et type:

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

Exemple:

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

12
Ankit Raj

ln -s sourcepath linkpathname

Note:

- s crée des liens symboliques au lieu de liens concrets

11
simranjeet

Si vous vous trouvez dans le répertoire où vous voulez créer un lien symbolique, ignorez alors le deuxième chemin.

cd myfolder
ln -s target

Cela créera un lien symbolique de target à l'intérieur de myfolder.

Syntaxe générale

ln -s TARGET LINK_NAME
10
Fizer Khan

C'est un dépassement de pile, je suppose donc que vous voulez du code:

Tout le code suivant suppose que vous souhaitez créer un lien symbolique nommé /tmp/link qui mène à /tmp/realfile.

CAUTION: Bien que ce code vérifie les erreurs, il NE vérifie PAS si /tmp/realfile existe réellement! En effet, un lien mort est toujours valide et, en fonction de votre code, vous souhaiterez (rarement) créer le lien avant le fichier réel.


Shell (bash, zsh, ...)

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

Vraiment simple, comme vous le feriez sur la ligne de commande (qui est le shell). Toute la gestion des erreurs est effectuée par l'interpréteur Shell. Ce code suppose que vous avez un interpréteur Shell en état de fonctionnement à /bin/sh.

Si nécessaire, vous pouvez toujours implémenter votre propre gestion des erreurs en utilisant la variable $? qui ne sera définie sur 0 que si le lien a été créé avec succès.

C et C++

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

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

symlink ne renvoie 0 que lorsque le lien peut être créé. Dans d'autres cas, j'utilise perror pour en savoir plus sur le problème.

Perl

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

Ce code suppose que vous avez un interpréteur Perl 5 à /usr/bin/Perl. symlink ne renvoie 1 que si le lien peut être créé. Dans d'autres cas, j'imprime le motif de l'échec sur la sortie d'erreur standard.

9
Garo

Je voudrais présenter une version en anglais plus simple des descriptions déjà présentées.

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

La commande "ln" crée un lien-FILE, et le "-s" spécifie que le type de lien sera symbolique. Vous trouverez un exemple de fichier de lien symbolique dans une installation de WINE (utilisez "ls -la" pour afficher une ligne du contenu du répertoire):

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

Les informations sur les fichiers standard sont à gauche (bien que le premier caractère soit un "l" pour "lien"); le nom de fichier est "a:" et le "->" indique également que le fichier est un lien. Il indique en gros à WINE comment le "lecteur A:" de Windows doit être associé à un lecteur de disquette sous Linux. Pour créer un lien symbolique semblable à celui-ci (dans le répertoire courant, et le faire pour WINE est plus compliqué; utilisez l'utilitaire "winecfg"):

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

Pour créer un lien symbolique/un lien symbolique, utilisez:

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

par exemple.:

ln -s file1 link1
6
Prem S

Il y a deux types de liens:

liens symboliques: fait référence à un chemin symbolique indiquant l'emplacement abstrait d'un autre fichier

liens durs: référez-vous à l'emplacement spécifique des données physiques.

Dans votre cas, des liens symboliques:

ln -s source target

vous pouvez vous référer à http://man7.org/linux/man-pages/man7/symlink.7.html

vous pouvez créer des liens trop durs

Un lien physique vers un fichier ne peut pas être distingué de l'entrée de répertoire d'origine; toute modification apportée à un fichier est en réalité indépendante du nom utilisé pour référencer le fichier. Les liens physiques ne peuvent normalement pas faire référence à des répertoires et ne peuvent pas s'étendre aux systèmes de fichiers.

ln source link
3
wpp

Je trouve un peu déroutant les terminologies "cible" et "répertoire" dans les informations man.

La cible est le dossier vers lequel nous établissons un lien symbolique et le répertoire, le lien symbolique lui-même (et non le répertoire vers lequel vous souhaitez créer un lien symbolique), si quelqu'un vit la même confusion, ne vous sentez pas seul.

Voici mon interprétation de la création d'un lien symbolique (sous Linux):

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

Vous pouvez accéder au dossier dans lequel vous voulez créer le lien symbolique et exécuter la commande ou spécifier le chemin complet pour votre lien symbolique au lieu de 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

OR

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

J'espère que cela aide ceux qui sont (encore) légèrement confus.

2
mmmdearte

les liens sont essentiellement de deux types:

liens symboliques (Soft): lien vers un chemin symbolique indiquant l'emplacement abstrait d'un autre fichier

liens durs: lien vers l'emplacement spécifique des données physiques.

Exemple 1: ln /root/file1 /root/file2

Vous trouverez ci-dessus un exemple de lien physique dans lequel vous pouvez obtenir une copie de vos données physiques.

Exemple 2: ln -s /path/to/file1.txt /path/to/file2.txt

La commande ci-dessus créera un lien symbolique vers file1.txt.

Si vous supprimez un fichier source, votre destination ne sera plus disponible dans Soft.

quand tu fais:

ls -lai

Vous verrez qu'il existe un numéro d'inode différent pour les liens symboliques.

Pour plus de détails, vous pouvez lire man of ln sur votre système Linux.

Merci

2
Prabhat Singh