Como criar um link simbólico para fazer root

13

Eu quero criar um link simbólico para a /pasta root ( ) no meu diretório pessoal. No entanto, se eu tentar isso, recebo

~$ ln -s /
ln: failed to create symbolic link './': File exists

Eu posso fazer isso usando o Nautilus Ctrl+ D, é claro, então eu sei que é possível.

Como fazer isso usando o terminal?

Ankur S
fonte
Embora essa seja uma boa pergunta, quero saber o motivo pelo qual você gostaria de fazer isso. É muito difícil digitar cd /? Ou você gosta de criar um link que continuaria repetindo um loop repetidamente? exemplo: cd root/home/terrance/root/home/terrance/root/home/terrance/root. . . etc
Terrance
realmente não. você poderia fazer isso sem precisar vincular ao root. Na verdade, eu estava apenas curioso porque você não pode fazê-lo
Ankur S
Justo. Obrigado por responder minha pergunta. =)
Terrance

Respostas:

17

Está faltando o nome do link, deve ser:

cd ~
ln -s / root

O que criaria um link simbólico chamado raiz no diretório inicial. Portanto, o uso correto é:

ln -s <target> <link-name>

A mensagem de erro que você vê é que ./sempre existe e um link não pode ser criado com esse nome; o melhor é usar o lncomando 2 com os dois parâmetros para evitar vinculação incorreta.

De man ln:

SINOPSE

(1st form) ln [OPTION]... [-T] TARGET LINK_NAME  
(2nd form) ln [OPTION]... TARGET  
(3rd form) ln [OPTION]... TARGET... DIRECTORY  
(4th form) ln [OPTION]... -t DIRECTORY TARGET...  

DESCRIÇÃO

No 1º formulário, crie um link para TARGETcom o nome LINK_NAME. No segundo formulário, crie um link para TARGETno diretório atual. No 3º e 4º formas, criar links para cada um TARGETno DIRECTORY. Crie links físicos por padrão, links simbólicos com --symbolic. Por padrão, cada destino (nome do novo link) já não deve existir 4 . Ao criar links físicos, cada um TARGETdeve existir. Links simbólicos podem conter texto arbitrário; se posteriormente resolvido, um link relativo será interpretado em relação ao diretório pai.

Argumentos obrigatórios para opções longas também são obrigatórios para opções curtas.

OPÇÕES

O parâmetro final,, <link-name>assume como padrão a última parte do destino. Portanto, quando o destino for /path/diro nome do link, o padrão será dirse não for especificado. 1 E se você, por exemplo, criar ~/etccom mkdir ~/etce em seguida, executar ln -s /etcem ~que não pode criar o link, porque o nome / diretório já existe. 3

E você pode ver o link criado em seu diretório pessoal (aqui, por exemplo, é claro que você pode nomeá-lo como quiser):

$ ls -l ~/root
lrwxrwxrwx 1 videonauth videonauth 1 Dez 14 00:28 root -> /

1 Obrigado a @thomasrutter por apontar isso.
2 Veja também man linke man symlink
3 Obrigado a @steeldriver por fornecer um exemplo nos comentários.
4 Parte enfatizada para destacar o texto, uma vez que é relevante para a pergunta.

Videonauth
fonte
minha única dúvida restante é por que um comando como o ln -s /etctrabalho, mas não este? Obrigado pela resposta,
Ankur S
Ele é criado porque possui um nome de diretório, /pode ser root ou um componente de caminho, para que o programa não saiba o que significa agora. /etcé apenas um caminho distinto e explícito.
Videonauth
7
@AnkurSonawane porque ./vai sempre existir - ./etcnão tão provável. Tente mkdir etcprimeiro e, em seguida ln -s /etc- você também receberáFile exists
steeldriver
8
O parâmetro final, nome do link, assume como padrão a última parte do destino, se omitido. Portanto, quando o destino for /some/diro nome do link, o padrão será dirse não for especificado. Quando o objetivo é justo /, no entanto, isso não vai funcionar.
thomasrutter
Não acho que isso seja extremamente significativo, mas a explicação do @steeldriver parece mais razoável, dada a File Existssaída. Não que isso importe de qualquer maneira como este é o caso degenerado
Ankur S