Qual é o significado de 'ln -sT' no Linux?

0

Para ser mais preciso: eu sei o que as opções -s significam - eu uso diariamente. Mas eu vi alguém em um tutorial, que estava movendo a raiz do documento de seu site de /var/www/html/project para ~/www/project para aumentar a segurança (mais tarde ele alterou os direitos e assim por diante, mas isso não é significativo nesse contexto). Então ele criou o seguinte link simbólico:

ln -sT ~/www/project /var/www/html/project

Eu queria saber para que serve o -T , porque normalmente eu usaria apenas -s . Na página man, recebo as seguintes informações esparsas sobre a opção -T :

-T, --no-target-directory
     treat LINK_NAME as a normal file always

Eu realmente não entendo o que é isso. Por que devo usar -T em conjunto com -s ao criar um symlink? Existe algum grande benefício em fazê-lo?

    
por chevallier 30.04.2018 / 14:15

2 respostas

6
A sinopse de

ln é a seguinte:

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

Sem -T , se LINK_NAME já existir e for um diretório (ou um link simbólico verificado para, eventualmente, resolver um diretório), o primeiro e terceiro formulários são ambíguos e ln escolhe o terceiro formulário: cria o link dentro do diretório. Assim

ln -s ~/www/project /var/www/html/project

criará um link chamado project dentro de /var/www/html/project se este já existir.

-T remove a ambigüidade e força ln a considerar apenas o primeiro formulário: se o link não existir, o link será criado como nomeado; se já houver um arquivo ou diretório com o dado LINK_NAME , ln falhará com um erro (a menos que -f seja especificado também).

Então

ln -sT ~/www/project /var/www/html/project

garante que você termine com um link /var/www/html/project apontando para ~/www/project ou com uma mensagem de erro (e um código de saída diferente de zero).

    
por 30.04.2018 / 14:21
2

Garante que o caminho (no seu exemplo /var/www/html/project ) é o caminho final, portanto, o link será 100% /var/www/html/project e não /var/www/html/project/**project** se /var/www/html/project existir ...

Porque isso pode ser confuso, mostrando o exemplo da diferença

Configuração: %código%; %código%; cd /tmp ;

mkdir /tmp/aa resultará em novo symlink mkdir /tmp/bb

enquanto

ln -s /tmp/aa /tmp/bb resultará em /tmp/bb/aa -> /tmp/aa

o parâmetro ln -sT /tmp/aa /tmp/bb não tem nada a ver com isso. É (como sempre) explicado no thedocs: link

    
por 30.04.2018 / 14:23

Tags