Ik wil een symbolische link maken in Linux. Ik heb deze bash-opdracht geschreven waar het eerste pad de map is waar ik een link naar wil en het tweede pad is de gecompileerde bron.
ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal
is dit correct?
1, Autoriteit 100%
Om een nieuwe Symlink te maken (zal falen als Symlink al bestaat):
ln -s /path/to/file /path/to/symlink
Een symlink maken of bijwerken:
ln -sf /path/to/file /path/to/symlink
2, Autoriteit 8%
ln -s TARGET LINK_NAME
Waar de -s
het symbolisch maakt.
3, Autoriteit 8%
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME
4, Autoriteit 3%
ln -s target linkName
U kunt de man pagina hier bekijken:
5, Autoriteit 2%
(Omdat een ASCII-afbeelding meer dan duizend tekens waard is.)
Een pijl is misschien een nuttige Mnemonic, vooral omdat dat bijna precies is hoe het eruit ziet in de hand van Emacs.
en grote foto, zodat u het niet in de war krijgt met de Windows-versie
Linux:
ln -s target <- linkName
Windows:
mklink linkName -> target
U kunt deze ook bekijken als
ln -s "to-here" <- "from-here"
mklink "from-here" -> "to-here"
De from-here
mag nog niet bestaan, het moet worden gemaakt, terwijl de to-here
al moet bestaan (IIRC).
(Ik raak altijd in de war over de vraag of verschillende commando’s en argumenten een reeds bestaande locatie moeten bevatten, of dat er een moet worden gemaakt.)
EDIT: Het dringt nog steeds langzaam tot me door; Ik heb een andere manier die ik in mijn aantekeningen heb geschreven.
ln -s (target exists) (link is made)
mklink (link is made) (target exists)
Antwoord 6
ln -s source_file target_file
http://unixhelp.ed.ac.uk/CGI/man- cgi?ln
Antwoord 7
Op de oorspronkelijke vraag:
'ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal'
Dit zal inderdaad een symbolische linkcreëren (-s
) uit het bestand/de map:
<basebuild>/IpDome-kernel/kernel
naar je nieuwe link
/home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal
Hier zijn een paar manieren om u te helpen herinneren:
Ten eerste is er de man-pagina voor ln
. U kunt dit openen door te zoeken op “man ln” in google, of gewoon een terminalvenster openen en man ln
typen en u krijgt dezelfde informatie. Op de man-pagina staat duidelijk:
ln [OPTION]… [-T] TARGET LINK_NAME (1e formulier)
Als het niet voor jou is om elke keer een man-pagina te moeten doorzoeken of lezen, is het misschien makkelijker om te onthouden dat alle nix-commando’s op dezelfde manier werken:
cp /file/that/exists /location/for/new/file
mv /file/that/exists /location/its/moving/to
ln /file/that/exists /the/new/link
cp
kopieert een bestand dat momenteel bestaat (de eerste argument) naar een nieuw bestand (het tweede argument).
mv
verplaatst een bestand dat momenteel bestaat (het eerste argument) naar een nieuwe plaats (het tweede argument)
Evenzo linkt ln
een bestand dat momenteel bestaat (het eerste argument ) naar een nieuwe link (het tweede argument)*
De laatste optie die ik zou willen voorstellen, is dat je je eigen man-pagina’s kunt maken die gemakkelijk te lezen en (voor jou) gemakkelijk te vinden/onthouden zijn. Maak gewoon een eenvoudig shellscript dat je de hint geeft die je nodig hebt. Bijvoorbeeld♦:
In je .bash_aliases-bestand kun je iets plaatsen als:
commandsfx() {
echo "Symlink: ln -s /path/to/file /path/to/symlink"
echo "Copy: cp /file/to/copy /destination/to/send/copy"
}
alias 'cmds'=commandsfx
Als je het nodig hebt, typ je gewoon cmds
vanaf de opdrachtregel en je krijgt de juiste syntaxis terug op een manier die je snel kunt lezen en begrijpen. U kunt deze functies zo geavanceerd maken als u wilt, welke informatie u nodig heeft, het is aan u. Je zou ze zelfs interactief kunnen maken, zodat je gewoon de aanwijzingen hoeft te volgen.. zoiets als:
makesymlink() {
echo "Symlink name:"
read sym
echo "File to link to:"
read fil
ln -s $fil $sym
}
alias 'symlink'=makesymlink
* – natuurlijk kunnen ze allemaal verschillende parameters gebruiken en verschillende dingen doen en zowel aan bestanden als mappen werken… maar het uitgangspunt is hetzelfde
♦ – voorbeelden van het gebruik van de bash-shell
Antwoord 8
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.
9
Symbolische links of soft-links op Linux maken:
Open Bash-prompt en typ de onderstaande opdracht om een symbolische link naar uw bestand te maken:
a) Ga naar de map waarin u een zachte link wilt maken en Typeout de opdracht zoals hieronder vermeld :
$ ln -s (path-to-file) (symbolic-link-to-file)
$ ln -s /home/user/file new-file
b) Ga naar uw NEW-bestandsnaampad en type :
$ ls -lrt (To see if the new-file is linked to the file or not)
Voorbeeld:
[email protected]:[~/Desktop/soft]# ln -s /home/user/Desktop/soft/File_B /home/user/Desktop/soft/File_C
[email protected]:[~/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
10
ln -s sourcepath linkpathname
Opmerking:
-S Maakt symbolische koppelingen in plaats van harde links
11
Als u in de map bent waar u Symlink wilt maken, negeert u het tweede pad.
cd myfolder
ln -s target
Het maakt Symlink van target
binnen myfolder
.
Algemene syntaxis
ln -s TARGET LINK_NAME
12
Dit is stapeloverloop, dus ik neem aan dat je wilt dat code:
Alle volgende code gaat ervan uit dat je een symbolische link met de naam /tmp/link
wilt maken die linkt naar /tmp/realfile
.
LET OP: hoewel deze code op fouten controleert, controleert hij NIET of /tmp/realfile
daadwerkelijk bestaat! Dit komt omdat een dode link nog steeds geldig is en afhankelijk van je code zou je (zelden) de link voor het echte bestand willen maken.
Shell (bash, zsh, …)
#!/bin/sh
ln -s /tmp/realfile /tmp/link
Heel eenvoudig, net zoals je het zou doen op de opdrachtregel (de shell). Alle foutafhandeling wordt gedaan door de shell-interpreter. Deze code gaat ervan uit dat je een werkende shell-interpreter hebt op /bin/sh
.
Indien nodig kunt u nog steeds uw eigen foutafhandeling implementeren door de variabele $?
te gebruiken, die alleen op 0 wordt gezet als de link met succes is gemaakt.
C en C++
#include <unistd.h>
#include <stdio.h>
int main () {
if( symlink("/tmp/realfile", "/tmp/link") != 0 )
perror("Can't create the symlink");
}
symlink
retourneert alleen 0 wanneer de link kan worden gemaakt. In andere gevallen gebruik ik perror
om meer over het probleem te vertellen.
Perl
#!/usr/bin/perl
if( symlink("/tmp/realfile", "/tmp/link") != 1) {
print STDERR "Can't create the symlink: $!\n"
}
Deze code gaat ervan uit dat je een perl 5-interpreter hebt op /usr/bin/perl
. symlink
retourneert alleen 1 als de link kan worden gemaakt. In andere gevallen druk ik de reden van de fout af naar de standaardfoutuitvoer.
Antwoord 13
Ik wil graag een duidelijker-Engelse versie van de reeds gepresenteerde beschrijvingen presenteren.
ln -s /path-text/of-symbolic-link /path/to/file-to-hold-that-text
Het “ln” commando creëert een link-FILE, en de “-s” specificeert dat het type link symbolisch zal zijn. Een voorbeeld van een symbolic-link-bestand is te vinden in een WINE-installatie (gebruik “ls -la” om één regel van de directory-inhoud weer te geven):
lrwxrwxrwx 1 me power 11 Jan 1 00:01 a: -> /mnt/floppy
Standaard bestandsinfo staat links (hoewel het eerste teken een “l” is voor “link”); de bestandsnaam is “a:” en de “->” geeft ook aan dat het bestand een link is. Het vertelt WINE in feite hoe Windows “Drive A:” moet worden geassocieerd met een diskettestation in Linux. Om daadwerkelijk een symbolische link te maken die gelijkaardig is aan die (in de huidige directory, en om dit daadwerkelijk te doen voor WINE is ingewikkelder; gebruik het hulpprogramma “winecfg”):
ln -s /mnt/floppy a: //will not work if file a: already exists
Antwoord 14
Om een symbolische link /soft link te maken, gebruik:
ln -s {source-filename} {symbolic-filename}
bijv.:
ln -s file1 link1
Antwoord 15
Er zijn twee soorten links:
symbolische links: verwijzen naar een symbolisch pad dat de abstracte locatie van een ander bestand aangeeft
harde links: verwijzen naar de specifieke locatie van fysieke gegevens.
In jouw geval symbolische links:
ln -s source target
je kunt verwijzen naar http://man7.org/linux /man-pages/man7/symlink.7.html
u kunt te harde links maken
Een harde link naar een bestand is niet te onderscheiden van de oorspronkelijke map-entry; Alle wijzigingen in een bestand zijn effectief onafhankelijk van de naam die wordt gebruikt om het bestand te verwijzen. Harde links kunnen normaal niet naar mappen verwijzen en mogen geen bestandssystemen overspannen.
ln source link
16
Ik vind een beetje verwarrend de terminologieën “Doel” en “Directory” in de man-informatie.
Het doel is de map die we symlinkt naar en de directory de daadwerkelijke symlink (niet de map waarnaar u ondervindt), als iemand dezelfde verwarring ervaart, voel dan niet alleen.
Dit is mijn interpretatie van het maken van een symlink (in Linux):
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK
U kunt naar de map navigeren waar u de Symlink wilt maken en de opdracht wilt uitvoeren of het volledige pad wilt opgeven voor uw Symlink in plaats van naam-of-Your-Symlink.
cd /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK
OF
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER/NAME-OF-YOUR-SYMLINK
Ik hoop dat dit helpt voor degenen die (nog) een beetje in de war zijn.
Antwoord 17
Hoe een symlink in zwerver te maken.
Stappen:
- Maak in een zwervend bestand een gesynchroniseerde map. bijv. config.vm.synced_folder “F:/Sunburst/source/sunburst/lms”, “/source”
F:/Sunburst/source/sunburst/lms :- waar de broncode, /source :- directorypad binnen de zwerver - Vagrant omhoog en typ vagrant ssh en ga naar de bronmap, bijvoorbeeld cd source
- Controleer of de mapstructuur van uw broncode beschikbaar is in de bronmap. bijv. /source/local
- Ga vervolgens naar de map van de gastmachine waar de bestanden staan die aan de browser zijn gekoppeld. Nadat u een back-up van het bestand hebt gekregen. bijv. sudo mv local local_bk
- Maak vervolgens een symbolische link, bijvoorbeeld sudo ln -s /source/local local. local mean link-name (mapnaam in guest machine die je gaat linken)
als u de symlink moet verwijderen: – Typ sudo rm local