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?
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
ln -s TARGET LINK_NAME
Où le -s
le rend symbolique.
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME
(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)
ln -s source_file target_file
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
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.
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
ln -s sourcepath linkpathname
Note:
- s crée des liens symboliques au lieu de liens concrets
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
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.
#!/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.
#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.
#!/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.
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
Pour créer un lien symbolique/un lien symbolique, utilisez:
ln -s {source-filename} {symbolic-filename}
par exemple.:
ln -s file1 link1
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
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.
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