Guia do Linux/Iniciante+Intermediário/Comandos diversos/ln

Cria links para arquivos e diretórios no sistema. O link é um mecanismo que faz referência a outro arquivo ou diretório em outra localização. O link em sistemas GNU/Linux faz referência reais ao arquivo/diretório podendo ser feita cópia do link (será copiado o arquivo alvo), entrar no diretório (caso o link faça referência a um diretório), etc.

ln [opções] [origem] [link]

Onde:

origem
Diretório ou arquivo de onde será feito o link.
link
Nome do link que será criado. Se já existe um arquivo de nome link, o comando ln funcionará de forma errada, criando um link para um outro arquivo. Ver abaixo para mais detalhes.
opções
-s
Cria um link simbólico. Usado para criar ligações com o arquivo/diretório de destino.
-v
Mostra o nome de cada arquivo antes de fazer o link.
-d
Cria um hard link para diretórios. Somente o root pode usar esta opção.
editar

Existem 2 tipos de links: simbólicos e hardlinks.

  • O link simbólico cria um arquivo especial no disco (do tipo link) que tem como conteúdo o caminho para chegar até o arquivo alvo (isto pode ser verificado pelo tamanho do arquivo do link). Use a opção -s para criar links simbólicos.
  • O hardlink faz referência ao mesmo inodo do arquivo original, desta forma ele será perfeitamente idêntico, inclusive nas permissões de acesso, ao arquivo original.

Ao contrário dos links simbólicos, não é possí­vel fazer um hardlink para um diretório ou fazer referência a arquivos que estejam em partições diferentes.

Problemas

editar

Se o link já existe, o comando ln dará erro ou fará uma coisa errada. Exemplo (feito na conta usuario; use outra conta para verificar)

mkdir -p /home/usuario/teste1/arquivos  # cria um diretorio
echo "teste1" > /home/usuario/teste1/arquivos/teste1.txt
mkdir -p /home/usuario/teste2/arquivos    # cria um diretorio
ln -sv /home/usuario/teste1/arquivos /home/usuario/teste2/arquivos  # erro
ls -lart /home/usuario/teste2
ls -lart /home/usuario/teste2/arquivos

Como pode ser visto pela sequencia acima, o erro foi criar o diretório link /home/usuario/teste2/arquivos, com isso, ao se criar o link simbolico, ele foi colocado como /home/usuario/teste2/arquivos/arquivos.

Sequencia certa:

mkdir -p /home/usuario/teste1/arquivos  # cria um diretorio
echo "teste1" > /home/usuario/teste1/arquivos/teste1.txt
mkdir -p /home/usuario/teste2    # cria um diretorio
ln -sv /home/usuario/teste1/arquivos /home/usuario/teste2/arquivos  # certo
ls -lart /home/usuario/teste2
ls -lart /home/usuario/teste2/arquivos
cat /home/usuario/teste2/arquivos/teste1.txt
editar

Para remover o link, usa-se o comando rm; como este comando também é usado para apagar arquivos, é bom tomar muito cuidado antes de remover o link para não remover coisas erradas:

rm [nome do link]

Observações

editar
  • Se for usado o comando rm com um link, somente o link será removido.
  • Se for usado o comando cp com um link, o arquivo original será copiado ao invés do link.
  • Se for usado o comando mv com um link, a modificação será feita no link.
  • Se for usado um comando de visualização (como o cat), o arquivo original será visualizado.

Exemplos:

  • ln -s /dev/ttyS1 /dev/modem - Cria o link /dev/modem para o arquivo /dev/ttyS1.
  • ln -s /tmp ~/tmp - Cria um link ~/tmp para o diretório /tmp.