Crie um link simbólico de diretório no Ubuntu [fechado]

247

Abaixo está o meu código para criar um link simbólico de um diretório:

sudo ln -s /usr/local/nginx/conf/ /etc/nginx

Eu já criou o diretório /etc/nginx. Eu só quero que o conteúdo do diretório de origem ( /usr/local/nginx/conf/) esteja no conteúdo do diretório de destino ( /etc/nginx). Mas quando executo o código, /etc/nginxcontém um diretório chamado conf, em vez do conteúdo de conf. Esse diretório contém o conteúdo que eu quero, mas no local errado.

Por que ele colocou um diretório na pasta de destino, em vez de apenas colocar o conteúdo do diretório na pasta de destino?

nbro
fonte
Você também pode usar arquivos (navegador de arquivos padrão). Clique com o botão direito do mouse na pasta que você deseja vincular> opção "Criar link". Ele criará uma pasta vinculada que você pode mover e renomear conforme necessário.
John Linhart
4
Use o bind mountrecurso linux . exemplo
gkiko

Respostas:

254

Esse é o comportamento de lnse o segundo argumento for um diretório. Ele coloca um link para o primeiro argumento dentro dele . Se você deseja /etc/nginxser o link simbólico, remova esse diretório primeiro e execute o mesmo comando.

Erro fatal
fonte
10
Esse link Unix.SE resolve aqui. Parece que temos uma dependência circular.
Kaiser #
30

É o que lnestá documentado para fazer quando o destino já existe e é um diretório. Se você quiser /etc/nginxpara ser um link simbólico, em vez de conter um link simbólico, é melhor não tinha criá-lo como um diretório em primeiro lugar!

Celada
fonte
51
Sua resposta só faz sentido no contexto em que o leitor já sabe a resposta. É inútil para quem iria fazer a pergunta
Ricardo Saporta
1
Posso realmente criar um link simbólico para a raiz de um dispositivo USB montado (portanto, não posso apagar esta pasta primeiro)?
Grigory Kornilov
1
@GrigoryKornilov, você pode criar um link simbólico para o que quiser, incluindo algo que não existe. Essa pergunta era sobre o local onde o link simbólico é criado (não para onde ele aponta). Um nome de caminho específico no sistema de arquivos é um arquivo comum ou é um diretório ou um link simbólico (ou é um soquete, canal ou dispositivo). Não pode ser mais do que uma dessas coisas ao mesmo tempo (ou seja, você não pode ter mais de um arquivo distinto com o mesmo nome).
Celada
10

No script é útil algo como isto:

if [ ! -d /etc/nginx ]; then ln -s /usr/local/nginx/conf/ /etc/nginx > /dev/null 2>&1; fi

impede antes de recriar o link simbólico em loop "ruim" após executar novamente o script

kayn
fonte
1
Excelente! Esta é a solução exata. não é necessário criar o diretório, se ele já existir. É um ajuste muito bom para o hard link e afunda no buraco negro (/ dev / null)
Cosmo Arun