Comment faire un lien symbolique avec un fichier sous Linux?
je veux faire un lien symbolique Linux. J'ai écrit cette commande bash où le premier chemin est le dossier dans lequel je veux le 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 exact?
17 réponses
Pour créer un lien symbolique (échouera si le lien 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 linkName
vous pouvez jeter un oeil à la page de manuel ici:
(parce qu'une image ASCII vaut mille caractères.)
une flèche peut être un mnémonique utile, d'autant plus que C'est presque exactement ce qu'il semble dans la direction D'Emacs.
et une grande image pour ne pas la confondre avec la version de Windows ""
Linux:
ln -s target <- linkName
Windows:
mklink linkName -> target
vous pouvez aussi les considérer comme
ln -s "to-here" <- "from-here"
mklink "from-here" -> "to-here"
le from-here
ne devrait pas encore exister, il doit être créé, tandis que le to-here
devrait déjà exister (IIRC).
(j'ai toujours mélangé à savoir si les différentes commandes et les arguments qui devrait impliquer une pré-existant, ou à être faite.)
EDIT: C'est encore couler lentement pour moi; j'ai une autre façon que j'ai écrit dans mes notes.
ln -s (target exists) (link is made)
mklink (link is made) (target exists)
à 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:
D'abord, il y a la page de manuel pour ln
. Vous pouvez y accéder en cherchant "man ln" dans google, ou tout simplement ouvrir une fenêtre de terminal et taper man ln
et vous obtiendrez les mêmes informations. La page de manuel dit clairement:
ln [OPTION]... [- T] LINK_NAME cible (1ère forme)
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) vers un nouveau fichier (le deuxième argument).
mv
déplace un fichier qui existe actuellement (le premier argument) vers un nouvel endroit (le second argument))
De même ln
relie un fichier qui existe actuellement (le premier argument) à un nouveau lien (le second argument)) *
la dernière option que je voudrais suggérer est que vous pouvez créer vos propres pages de manuel qui sont faciles à lire et facile (pour vous) à trouver/Se souvenir. Il suffit de faire un script shell simple qui vous donne l'indice dont vous avez besoin. Pour exemple ♦ :
dans votre .bash_aliases fichier 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 avez besoin, tapez simplement cmds
à partir de la ligne de commande et vous obtiendrez la syntaxe appropriée d'une façon que vous pouvez lire et comprendre rapidement. Vous pouvez rendre ces fonctions aussi avancé que vous voulez pour obtenir ce que l'information dont vous avez besoin, c'est à vous. Vous pouvez même les rendre interactifs de sorte que vous avez juste à suivre invite.. quelque chose comme:
makesymlink() {
echo "Symlink name:"
read sym
echo "File to link to:"
read fil
ln -s $fil $sym
}
alias 'symlink'=makesymlink
* - évidemment ils peuvent tous prendre des paramètres différents et faire des choses différentes et peuvent travailler sur des fichiers aussi bien que des répertoires... mais la prémisse est la même
♦ - exemples d'utilisation de la coque 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.
si vous êtes dans le répertoire où vous voulez créer un lien symbolique, ignorez le second chemin.
cd myfolder
ln -s target
il créera un lien symbolique de target
à l'intérieur de myfolder
.
syntaxe générale
ln -s TARGET LINK_NAME
ln -s sourcepath linkpathname
Note:
-s fait des liens symboliques plutôt que des liens en dur
Créer des liens Symboliques ou Soft-liens sur Linux:
ouvrir l'invite de Bash et taper 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 doux 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 chemin de nom de fichier 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
j'aimerais vous présenter une version anglaise 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 fichier-lien, et le "- s " spécifie que le type de lien sera symbolique. Un exemple de fichier de lien symbolique peut être trouvé dans une installation WINE (en utilisant "ls-la" pour afficher une ligne du contenu du répertoire):
lrwxrwxrwx 1 me power 11 Jan 1 00:01 a: -> /mnt/floppy
fichier Standard-info stuff est à gauche (bien que le premier caractère soit un " l" pour le "lien"); le nom de fichier est "a" et le "->" indique également le fichier est un lien. Il indique essentiellement à WINE comment Windows "Drive A:" doit être associé à un lecteur de disquettes sous Linux. Pour créer réellement un lien symbolique similaire à celui-ci (dans le répertoire courant, et le faire réellement pour le vin est plus compliqué; utilisez l'utilitaire" winecfg"):
ln -s /mnt/floppy a: //will not work if file a: already exists
C'est le débordement de la pile donc je suppose que vous voulez le code:
tout le code suivant suppose que vous voulez créer un lien symbolique nommé /tmp/link
qui renvoie à /tmp/realfile
.
attention : bien que ce code vérifie les erreurs, il ne vérifie pas si /tmp/realfile
existe réellement ! C'est parce qu'un lien mort est toujours valide et qu'en fonction de votre code vous pourriez (rarement) vouloir créer le lien avant le réel fichier.
Shell (bash, zsh, ...)
#!/bin/sh
ln -s /tmp/realfile /tmp/link
très simple, comme vous le feriez sur la ligne de commande (qui est le shell). Tout le traitement des erreurs est fait par l'interpréteur de commandes. Ce code suppose que vous avez un interpréteur de commande qui fonctionne à /bin/sh
.
si nécessaire, vous pouvez toujours implémenter votre propre gestion des erreurs en utilisant la variable $?
qui ne sera définie à 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ète perl 5 à /usr/bin/perl
. symlink
ne renvoie 1 si le lien peut être créé. Dans d'autres cas, j'imprime la raison de l'échec. à la sortie standard error.
pour créer un lien symbolique / lien souple, utilisez:
ln -s {source-filename} {symbolic-filename}
p.ex.:
ln -s file1 link1
il existe deux types de liens:
liens symboliques: se référer à un chemin symbolique indiquant l'emplacement abstrait d'un autre fichier
liens durs: se référer à l'emplacement spécifique des données physiques.
dans votre cas symlinks:
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
il est impossible de distinguer un lien dur vers un fichier de l'entrée originale dans le répertoire; toute modification apportée à un fichier est effectivement indépendante du nom utilisé pour faire référence au fichier. Les liens durs peuvent ne pas normalement renvoyer aux répertoires et ne pas couvrir les systèmes de fichiers.
ln source link
je trouve un peu déroutant les terminologies "cible" et "répertoire" dans l'homme de l'information.
la cible est le dossier vers lequel nous sommes en train de créer un lien symbolique et le répertoire le lien symbolique réel (pas le répertoire vers lequel vous allez créer un lien symbolique), si quelqu'un connaît la même confusion, ne vous sentez pas seul.
C'est 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 naviguer vers le dossier où vous voulez créer le lien symbolique et exécuter la commande ou spécifier le chemin complet pour votre lien symbolique au lieu du nom-de-votre-lien symbolique.
cd /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK
ou
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 aidera ceux (encore) légèrement confus.
comment créer un lien symbolique dans vagrant. Étapes:
- dans le fichier vagrant créer un dossier synchronisé. e.g config.vm.synced_folder "F:/Sunburst/source/sunburst/lms", " / source" F:/Sunburst/source/sunburst/lms :- lorsque le code source /source :- chemin d'accès au répertoire à l'intérieur de l'errance
- Erratique et type de vagrant ssh et aller à la source de l'annuaire électronique.g cd source
- vérifiez que votre structure de dossier code source est disponible dans le répertoire source. E. g / source / local
- puis allez dans le répertoire guest machine où se trouvent les fichiers associés au navigateur. Après obtenir la sauvegarde du fichier. e.g sudo mv local local_bk
- puis créer symlink E. g sudo ln-s/source / local local. lien moyen local-nom (nom de dossier dans la machine invitée que vous allez lier) si vous devez supprimer le lien symbolique:"