Como posso vincular um arquivo no Linux? [fechadas]


1941

Eu quero fazer um link simbólico no Linux. Eu escrevi este comando Bash em que o primeiro caminho é a pasta na qual eu quero vincular e o segundo caminho é a fonte compilada.

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

Isso está correto?


Você provavelmente deveria fazer esta pergunta em unix.stackexchange.com
Guss

Respostas:


3679

Para criar um novo link simbólico (falhará se o link simbólico já existir):

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

Para criar ou atualizar um link simbólico:

ln -sf /path/to/file /path/to/symlink

382
@micapam A lnsintaxe é semelhante à cpsintaxe, por exemplo, destino de origem .
187 Andrey

157
Aqui está um mnemônico para você: l (i) n (k) -s (simbólico) <alvo> <nome opcional> (o fato de o último parâmetro ser opcional ajuda a descobrir que esse não é o destino) (btw deixando de fora o caminho para o link simbólico cria um link no diretório atual com o mesmo nome base como o alvo)
UncleZeiv

32
@micapam Assim como cpé CoPy, lné LiNk. Primeira e terceira letras.
Cole Johnson

68
Passei vários minutos tentando descobrir por que isso não funcionou para mim. Criou um link com auto-loop. Parece que o / path / to / file deve ser absoluto e não relativo à "pasta atual". Talvez aponte isso na resposta?
Abhishek Anand

52
@AbhishekAnand tem sido um par de anos, mas eu só queria deixar a nota que faz o trabalho com caminhos relativos; ele só precisa ser relativo ao diretório do link simbólico resultante e não ao diretório atual. O que você escreve como argumento do primeiro caminho é, na verdade, literalmente, o texto que estará dentro do link simbólico; é por isso que, quando é relativo, deve ser relativo ao link.
27417 JoL

302
ln -s TARGET LINK_NAME

Onde o -storna simbólico.


2
TARGET & LINKNAME são a melhor maneira de lembrar. btw para eliminar o uso link simbólico:unlink LINK_NAME
Silvan

31
Eu gosto de frase desta forma: ln -s where-the-symlink-should-point where-to-place-the-symlink-itself.
totymedli

@ Silvan, você pode excluir um link simbólico via rm, mas a maioria das pessoas não sabe remover o final /.
FreeSoftwareServers

288
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME

2
Melhor que a resposta aceita e coberta com brevidade inequívoca.
Josh Habdas 7/08

3
Exceto que não é o novo nome do link simbólico. É o nome ou um caminho completo (relativo a dir dir ou absoluto) para o novo link simbólico, incluindo o nome.
David Spector #

ln -s EXISTING_FILE_OR_DIRECTORY {caminho opcional para /} SYMLINK_NAME e não colocar uma barra na ligação simbólica, pois não é um diretório
comfytoday


88

(Como uma imagem ASCII vale mais que mil caracteres.)

Uma flecha pode ser um mnemônico útil, especialmente porque é quase exatamente o que parece na direção de Emacs.

E um panorama geral para não confundir com a versão do Windows

Linux:

ln -s target <- linkName

Janelas:

mklink linkName -> target

Você também pode olhar para eles como

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

O from-hereainda não deveria existir, deve ser criado, enquanto o to-herejá deveria existir (IIRC).

(Eu sempre me confundo se vários comandos e argumentos devem envolver um local preexistente ou um a ser criado.)

Edição: Ainda está afundando lentamente para mim; Eu tenho outra maneira que escrevi nas minhas anotações.

ln -s (target exists) (link is made)
mklink (link is made) (target exists)

No Emacs ' dired, é super fácil, pois você coloca o cursor sobre o seu destino, pressiona Se digita o diretório onde deseja que o link seja criado. Reduz a diferença entre imaginar o resultado desejado e digitar. Consulte gnu.org/software/emacs/manual/html_node/emacs/… .
Brady Trainor

2
Meu mnemônico é ON: ln -s Original Newfile (ligação simbólica)
robstarbuck

Isso funcionou para mim
Haider Ali


22

Para a pergunta original:


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

Isso realmente criará um link simbólico ( -s) a partir do arquivo / diretório:

<basebuild>/IpDome-kernel/kernel

para o seu novo link

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

Aqui estão algumas maneiras de ajudar você a se lembrar:

Primeiro, há a página de manual paraln . Você pode acessá-lo através da pesquisa "man ln" no google ou basta abrir uma janela do terminal e digitar man lne obterá as mesmas informações. A página do manual afirma claramente:

Em [OPTION] ... [-T] TARGET LINK_NAME (1º formulário)


Se precisar pesquisar ou ler uma página de manual sempre que não for para você, talvez seja mais fácil lembrar que todos os comandos nix funcionam da mesma maneira:

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

cp copia um arquivo que existe atualmente (o primeiro argumento) para um novo arquivo (o segundo argumento).
mv move um arquivo que existe atualmente (o primeiro argumento) para um novo local (o segundo argumento)

Da mesma forma, lnvincula um arquivo que existe atualmente (o primeiro argumento) a um novo link (o segundo argumento) *


A opção final que eu gostaria de sugerir é que você pode criar suas próprias páginas de manual que são fáceis de ler e fáceis de encontrar / lembrar. Basta criar um script de shell simples que ofereça a dica de que você precisa. Por exemplo :

No seu arquivo .bash_aliases, você pode colocar algo como:

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

alias 'cmds'=commandsfx

Então, quando você precisar, na linha de comando, digite cmdse você receberá de volta a sintaxe correta de uma maneira que possa ler e entender rapidamente. Você pode tornar essas funções tão avançadas quanto desejar para obter as informações de que precisa, depende de você. Você pode até torná-los interativos, basta seguir as instruções .. algo como:

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

alias 'symlink'=makesymlink

* - bem, obviamente, todos eles podem ter parâmetros diferentes, fazer coisas diferentes e podem trabalhar em arquivos e diretórios ... mas a premissa é a mesma
♦ - exemplos usando o shell bash


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.

16

Criando links simbólicos ou soft links no Linux:

Abra o prompt do Bash e digite o comando abaixo mencionado para criar um link simbólico para o seu arquivo:

A) Vá para a pasta em que deseja criar um link virtual e digite o comando conforme mencionado abaixo :

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

B) Vá para o caminho do seu novo arquivo e digite :

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

Exemplo:

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

12

ln -s sourcepath linkpathname

Nota:

-s cria links simbólicos em vez de links físicos


11

Se você estiver no diretório em que deseja criar o link simbólico, ignore o segundo caminho.

cd myfolder
ln -s target

Ele criará um link simbólico de targetdentro myfolder.

Sintaxe geral

ln -s TARGET LINK_NAME

11

Este é Stack Overflow, então eu suponho que você queira código:

Todo o código a seguir pressupõe que você deseja criar um link simbólico denominado ao /tmp/linkqual está vinculado /tmp/realfile.

CUIDADO : Embora esse código verifique se há erros, NÃO verifica se /tmp/realfilerealmente existe! Isso ocorre porque um link morto ainda é válido e, dependendo do seu código, você pode (raramente) querer criar o link antes do arquivo real.


Shell (bash, zsh, ...)

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

Muito simples, assim como você faria na linha de comando (que é o shell). Todo o tratamento de erros é feito pelo interpretador de shell. Esse código pressupõe que você tenha um interpretador de shell em funcionamento /bin/sh.

Se necessário, você ainda pode implementar seu próprio tratamento de erros usando a $?variável que só será definida como 0 se o link tiver sido criado com sucesso.

C e C ++

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

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

symlinkretorna apenas 0 quando o link pode ser criado. Em outros casos, estou usando perrorpara contar mais sobre o problema.

Perl

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

Este código pressupõe que você tenha um intérprete perl 5 em /usr/bin/perl. symlinkretorna 1 apenas se o link puder ser criado. Em outros casos, estou imprimindo o motivo da falha na saída de erro padrão.


1
Explicação adicionada, também uma palavra de cautela para links mortos. Eu não estou verificando para isso, porque não se pode presumir que este não é desejado e também porque filetests não estão mais no tópico
Garo

8

Eu gostaria de apresentar uma versão em inglês mais claro das descrições já apresentadas.

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

O comando "ln" cria um link-FILE e o "-s" especifica que o tipo de link será simbólico. Um exemplo de arquivo de link simbólico pode ser encontrado em uma instalação do WINE (usando "ls -la" para mostrar uma linha do conteúdo do diretório):

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

Informações padrão sobre informações de arquivo estão à esquerda (embora observe que o primeiro caractere é um "l" para "link"); o nome do arquivo é "a:" e o "->" também indica que o arquivo é um link. Ele basicamente diz ao WINE como o Windows "Drive A:" deve ser associado a uma unidade de disquete no Linux. Para criar um link simbólico SIMILAR a ele (no diretório atual, e fazer isso para o WINE é mais complicado; use o utilitário "winecfg"):

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

7

Para criar um link simbólico / link virtual, use:

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

por exemplo:

ln -s file1 link1

4

Existem dois tipos de links:

links simbólicos: consulte um caminho simbólico indicando a localização abstrata de outro arquivo

links físicos: consulte o local específico dos dados físicos.

No seu caso, os links simbólicos:

ln -s source target

você pode consultar http://man7.org/linux/man-pages/man7/symlink.7.html

você pode criar links muito rígidos

Um link físico para um arquivo é indistinguível da entrada do diretório original; quaisquer alterações em um arquivo são efetivamente independentes do nome usado para fazer referência ao arquivo. Os links físicos normalmente não se referem a diretórios e podem não abranger sistemas de arquivos.

ln source link

4

Os links são basicamente de dois tipos:

Links simbólicos (soft): vincula a um caminho simbólico indicando a localização abstrata de outro arquivo

Links físicos: link para o local específico dos dados físicos.

Exemplo 1:

ln /root/file1 /root/file2

O exemplo acima é um exemplo de um link físico no qual você pode ter uma cópia dos seus dados físicos.

Exemplo 2:

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

O comando acima criará um link simbólico para file1.txt.

Se você excluir um arquivo de origem, não terá nada para o destino no software.

Quando você faz:

ls -lai

Você verá que há um número de inode diferente para os links simbólicos.

Para mais detalhes, você pode ler a página de manual do ln no seu sistema operacional Linux.


hard link where you can have a copy of your physical dataAcho que não criamos cópia de dados físicos. Apenas outro nome para os mesmos dados físicos.
Alexander Radchenko

3

Acho um pouco confuso as terminologias "target" e "directory" nas informações do homem.

O destino é a pasta na qual estamos ligando o link simbólico e o diretório o link simbólico real (não o diretório para o qual você enviará o link simbólico); se alguém estiver enfrentando a mesma confusão, não se sinta sozinho.

Esta é minha interpretação de criar um link simbólico (em linux):

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

Você pode navegar para a pasta em que deseja criar o link simbólico e executar o comando ou especificar o CAMINHO COMPLETO para o link simbólico em vez 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

OU

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

Espero que isso ajude aqueles (ainda) um pouco confusos.


-2

Como criar link simbólico no vagrant. Passos:

  1. No arquivo vagrant, crie uma pasta sincronizada. por exemplo, config.vm.synced_folder "F: / Sunburst / fonte / sunburst / lms", "/ source" F: / Sunburst / fonte / sunburst / lms: - onde o código fonte, / source: - caminho do diretório dentro do vagrant
  2. Faça um backup e digite vagrant ssh e vá para o diretório de origem, por exemplo, cd source
  3. Verifique se a estrutura da pasta do código fonte está disponível no diretório de origem. por exemplo, / source / local
  4. Em seguida, vá para o diretório da máquina convidada, onde os arquivos associados ao navegador. Depois de obter backup do arquivo. por exemplo, sudo mv local local_bk
  5. Em seguida, crie um link simbólico, por exemplo, sudo ln -s / source / local local. local mean link-name (nome da pasta na máquina convidada à qual você vinculará) se precisar remover o link simbólico: - Digite sudo rm local
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.