Comando Linux ln
Em sistemas operacionais do tipo Unix, o comando ln cria links entre arquivos, associando nomes de arquivos aos dados do arquivo.
Este documento cobre a versão GNU / Linux do ln .
Descrição
Cria um link para o arquivo TARGET com o nome LINKNAME . Se LINKNAME for omitido, um link para TARGET será criado no diretório atual, usando o nome de TARGET como LINKNAME .
Por padrão, cria links físicos ou links simbólicos se a opção -s ( –symbolic ) for especificada. Ao criar links físicos , cada TARGET deve existir.
O que é um link?
Antes de discutirmos o comando ln , vamos discutir primeiro o comando link , bem como o que é um link e como ele se relaciona com os arquivos como os conhecemos.
Um link é uma entrada no seu sistema de arquivos que conecta um nome de arquivo aos bytes reais de dados no disco . Mais de um nome de arquivo pode “vincular” aos mesmos dados. Aqui está um exemplo. Vamos criar um arquivo chamado file1.txt :
eco "Este é um arquivo." > file1.txt
Este comando ecoa a sequência ” Este é um arquivo “. Normalmente, isso ecoaria em nosso terminal, mas o operador > redireciona o texto da string para um arquivo, neste caso, file1.txt . Podemos verificar se funcionou usando cat para exibir o conteúdo do arquivo:
cat file1.txt
Este é um arquivo.
Quando esse arquivo foi criado, o sistema operacional gravou os bytes em um local no disco e também vinculou esses dados a um nome de arquivo, file1.txt , para que possamos nos referir ao arquivo em comandos e argumentos . Se você renomear o arquivo, seu conteúdo não será alterado; apenas as informações que apontam para ele. O nome do arquivo e os dados do arquivo são duas entidades separadas.
Aqui está uma ilustração do nome do arquivo e dos dados para ajudá-lo a visualizá-lo:
Usando o comando link
O que o comando link faz é nos permitir criar manualmente um link para arquivar dados que já existem. Então, vamos usar o link para criar nosso próprio link para os dados do arquivo criados recentemente. Em essência, criaremos outro nome de arquivo para os dados que já existem.
Vamos chamar nosso novo link file2.txt . Como a criamos?
A forma geral do comando link é: ” link file_name linkname “. Nosso primeiro argumento é o nome do arquivo cujos dados estamos vinculando; o segundo argumento é o nome do novo link que estamos criando.
link file1.txt file2.txt
Agora, file1.txt e file2.txt apontam para os mesmos dados no disco:
cat file1.txt
Este é um arquivo.
cat file2.txt
Este é um arquivo.
O importante é perceber que não fizemos uma cópia desses dados. Os dois nomes de arquivos apontam para os mesmos bytes de dados no disco. Aqui está uma ilustração para ajudá-lo a visualizá-lo:
Se alterarmos o conteúdo dos dados apontados por um desses arquivos, o conteúdo do outro arquivo também será alterado. Vamos acrescentar uma linha a um deles usando o operador >> :
eco "Aponta para dados no disco." >> file1.txt
Agora vamos ver o conteúdo de file1.txt :
cat file1.txt
Este é um arquivo. Aponta para dados no disco.
… e agora vamos ver o segundo arquivo, o que criamos com o comando link :
cat file2.txt
Este é um arquivo. Aponta para dados no disco.
Ambos os arquivos mostram a alteração porque compartilham os mesmos dados no disco. Alterações nos dados de um desses arquivos alterarão o conteúdo do outro.
Mas e se excluirmos um dos arquivos? Os dois arquivos serão excluídos?
Não. Se excluirmos um dos arquivos, excluiremos um dos links para os dados. Como criamos outro link manualmente, ainda temos um ponteiro para esses dados; ainda temos uma maneira, no nível do usuário, de acessar os dados que colocamos lá. Portanto, se usarmos o comando rm para remover nosso primeiro arquivo:
rm file1.txt
… ele não existe mais como um arquivo com esse nome:
cat file1.txt
cat: file1.txt: Esse arquivo ou diretório não existe
… mas o link para os dados que criamos manualmente ainda existe e ainda aponta para os dados:
cat file2.txt
Este é um arquivo. Aponta para dados no disco.
Como você pode ver, os dados permanecem no disco mesmo após a remoção do “arquivo” (que na verdade é um link para os dados). Ainda podemos acessar esses dados desde que haja um link para eles. É importante saber quando você está removendo arquivos – “remover” um arquivo torna os dados inacessíveis, desvinculando -os. Os dados ainda existem na mídia de armazenamento, em algum lugar inacessível ao sistema, e esse espaço no disco está marcado como disponível para uso futuro.
O tipo de link com o qual trabalhamos aqui às vezes é chamado de “rígido”. Um link físico e os dados aos quais ele vincula sempre devem existir no mesmo sistema de arquivos; você não pode, por exemplo, criar um link físico em uma partição para arquivar dados armazenados em outra partição. Você também não pode criar um link físico para um diretório. Somente links simbólicos podem ser vinculados a um diretório; chegaremos a isso em um momento.
A diferença entre ln e link
Então, e quanto a ln ? É por isso que estamos aqui, certo?
Por padrão, cria um link físico como o link cria. Portanto, este comando ln :
ln file1.txt file2.txt
… é o mesmo que o seguinte comando de link :
link file1.txt file2.txt
… porque ambos os comandos criam um link físico chamado file2.txt que se vincula aos dados de file1.txt .
No entanto, também podemos usar ln para criar links simbólicos com a opção -s . Então o comando:
ln -s arquivo1.txt arquivo2.txt
Crie um link simbólico para file1.txt chamado file2.txt . Em contraste com o nosso exemplo de link físico, aqui está uma ilustração para ajudá-lo a visualizar nosso link simbólico:
O que são links simbólicos?
Links simbólicos, às vezes chamados de links “flexíveis”, são diferentes de links “físicos”. Em vez de vincular aos dados de um arquivo, eles vinculam a outro link . Portanto, no exemplo acima, file2.txt aponta para o link file1.txt , que por sua vez aponta para os dados do arquivo.
Isso tem vários benefícios em potencial. Por um lado, links simbólicos (também chamados de “links simbólicos”) podem ser vinculados a diretórios. Além disso, os links simbólicos podem cruzar os limites do sistema de arquivos, portanto, um link simbólico para dados em uma unidade ou partição pode existir em outra unidade ou partição.
Você também deve estar ciente de que, diferentemente dos links físicos, a remoção do arquivo (ou diretório) para o qual um link simbólico aponta quebrará o link. Portanto, se criarmos file1.txt :
eco "Este é um arquivo." > file1.txt
… e crie um link simbólico para ele:
ln -s arquivo1.txt arquivo2.txt
… podemos criar um desses itens para ver o conteúdo:
cat file1.txt
Este é um arquivo.
cat file2.txt
Este é um arquivo.
… mas se removermos file1.txt :
rm file1.txt
… não podemos mais acessar os dados contidos em nosso link simbólico:
cat file2.txt
cat: file2.txt: Esse arquivo ou diretório não existe
Essa mensagem de erro pode ser confusa no início, porque o arquivo2.txt ainda existe no seu diretório. No entanto, é um link simbólico quebrado – um link simbólico que aponta para algo que não existe mais. O sistema operacional tenta seguir o link simbólico para o arquivo que deveria estar lá ( file1.txt ), mas não encontra nada e, portanto, retorna a mensagem de erro.
Embora os links físicos sejam um componente essencial de como o sistema operacional funciona, os links simbólicos geralmente são mais convenientes. Você pode usá-los para se referir, da maneira que desejar, às informações que já estão no disco em outro lugar.
Criando links simbólicos para diretórios
Para criar um link simbólico para um diretório, especifique o nome do diretório como o destino. Por exemplo, digamos que tenhamos um diretório chamado documents , que contém um arquivo chamado file.txt .
Vamos criar um link simbólico para documentos chamados dox . Este comando fará o truque:
ln -s documentos / dox
Agora temos um link simbólico chamado dox, ao qual podemos nos referir como se fossem os documentos do diretório . Por exemplo, se usarmos ls para listar o conteúdo do diretório e, em seguida, para listar o conteúdo do diretório com link simbólico, ambos mostrarão o mesmo arquivo:
ls documentos
file.txt
ls dox
file.txt
Quando trabalharmos no diretório dox agora, estaremos trabalhando em documentos , mas veremos a palavra dox em vez de documentos em todos os nomes de caminho.
Links simbólicos são uma maneira útil de criar atalhos para nomes de caminho longos e complicados. Por exemplo, este comando:
ln -s documentos / trabalho / orçamentos / engenharia / 2014 / aprbudge de abril
… nos poupará bastante digitação; agora, em vez de alterar o diretório com o seguinte comando:
documentos em cd / trabalho / orçamentos / engenharia / 2014 / abril
… podemos fazer isso:
cd aprbudge
Normalmente, você remove diretórios (uma vez vazios) com o comando rmdir . Mas nosso link simbólico não é realmente um diretório: é um arquivo que aponta para um diretório. Portanto, para remover nosso link simbólico, usamos o comando rm :
rm aprbudge
Isso removerá o link simbólico, mas o diretório original e todos os seus arquivos não são afetados.
Sintaxe
Em [ OPÇÃO ] ... ALVO [...] [ LINKNAME [...]]
Opções
Aqui estão as opções que podem ser passadas para o comando ln .
– backup [ = CONTROL ] | Use esta opção para criar adicionalmente um backup de cada arquivo de destino existente. O estilo de backup é opcionalmente definido pelo valor de CONTROL . Veja abaixo para mais informações. |
-b | Isso funciona como – backup , mas você não pode especificar o CONTROL ; o estilo padrão ( simples ) é usado. |
-d , -F , –diretório | Essa opção permite que o superusuário tente vincular diretórios (embora provavelmente falhe devido a restrições do sistema, mesmo para o superusuário). |
-f , –force | Se o arquivo ou os arquivos de destino já existirem, substitua-os. |
-i , –interativo | Avise o usuário antes de substituir os arquivos de destino. |
-L , –logical | Dereferência TARGET s que são links simbólicos. Em outras palavras, se você estiver tentando criar um link (ou um link simbólico) para um link simbólico, vincule ao que ele vincula, não ao link simbólico em si. |
-n , – sem desreferencia | Trate LINKNAME como um arquivo normal se for um link simbólico para um diretório. |
-P , –físico | Crie links físicos diretamente para links simbólicos, em vez de desreferenciá-los. |
-r , –relativo | Crie links simbólicos em relação ao local do link. |
-s , –simbólico | Faça links simbólicos em vez de links físicos. |
-S , –suffix = SUFIXO | Use o sufixo do arquivo SUFFIX em vez do sufixo padrão ” ~ “. |
-t , –target-directory = DIRECTORY | Especifique o DIRECTORY no qual criar os links. |
Diretório -T , –no-target- | Sempre trate LINKNAME como um arquivo normal. |
-v , –verbose | Opere verbalmente ; imprima o nome de cada arquivo vinculado. |
–Socorro | Exiba uma mensagem de ajuda e saia. |
–versão | Exiba informações da versão e saia. |
A opção –backup
Ao usar a opção –backup (ou -b ), o sufixo do arquivo padrão para backups é ‘ ~ ‘. Você pode alterar isso, no entanto, usando a opção –suffix ou configurando a variável de ambiente SIMPLE_BACKUP_SUFFIX .
O argumento CONTROL para a opção –backup especifica o método de controle de versão. Como alternativa, ele pode ser especificado configurando a variável de ambiente VERSION_CONTROL . Aqui estão os valores a serem usados para qualquer um deles:
nenhum , fora | Nunca faça backups (mesmo se –backup for fornecido). |
numerado , t | Faça backups numerados. |
existente , nulo | Numerado se existirem backups numerados, simples caso contrário. |
simples , nunca | Sempre faça backups simples. |
Se você usar -b em vez de – backup , o método CONTROL será sempre simples .
Se você especificar a opção -s (que simboliza), ln ignorará as opções -L e -P . Caso contrário (se você estiver criando links físicos), a última opção especificada controla o comportamento quando um TARGET é um link simbólico. O padrão é agir como se -P tivesse sido especificado.
Exemplos
em public_html / myfile1.txt
Crie um link físico para o arquivo public_html / myfile1.txt no diretório atual.
ln -s public_html / myfile1.txt
Crie um link simbólico para o arquivo public_html / myfile1.txt no diretório atual.
ln -s public_html / webstuff
Crie um link simbólico para o diretório public_html chamado webstuff .
ln -s -b file1.txt file2.txt
Cria um link simbólico para o arquivo file1.txt chamado file2.txt . Se file2.txt já existir, ele será renomeado para file2.txt ~ antes da criação do novo link simbólico file2.txt .
Comandos relacionados
chmod – Altere as permissões de arquivos ou diretórios.
link – Crie um link físico para um arquivo comum.
ls – lista o conteúdo de um diretório ou diretórios.
readlink – Imprima o valor de um link simbólico ou nome de arquivo canônico.
desvincular – remova um arquivo.