Para ser mais preciso: sei o que -s
significam as opções - uso diariamente. Mas eu vi alguém em um tutorial, que estava movendo a raiz do documento de seu site /var/www/html/project
para ~/www/project
aumentar a segurança (mais tarde ele mudou os direitos e assim por diante, mas isso não é significativo neste contexto). Então ele criou o seguinte link simbólico:
ln -sT ~/www/project /var/www/html/project
Eu queria saber -T
para que serve, porque normalmente eu teria usado apenas -s
. Na página do manual, obtenho as seguintes informações esparsas sobre a -T
opção:
-T, --no-target-directory
treat LINK_NAME as a normal file always
Eu realmente não entendo para que serve isso. Por que devo usar -T
em conjunto com -s
ao criar um link simbólico? Existe algum grande benefício em fazer isso?
ln
a sinopse de é a seguinte:Sem
-T
, seLINK_NAME
já existe e é um diretório (ou link simbólico verificado para eventualmente resolver para um diretório), a primeira e a terceira formas são ambíguas, eln
escolhe a terceira forma: cria o link dentro do diretório. Desta formacriará um link nomeado
project
dentro/var/www/html/project
se o último já existir.-T
remove a ambigüidade e obrigaln
a considerar apenas a primeira forma: se o link não existir, o link é criado como nomeado; se já houver um arquivo ou diretório com o dadoLINK_NAME
,ln
falha com um erro (a menos que-f
seja especificado também).Então
garante que você termine com um link
/var/www/html/project
apontando para~/www/project
, ou com uma mensagem de erro (e código de saída diferente de zero).Ele garante que seu caminho (no seu exemplo
/var/www/html/project
) seja o caminho final, então 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:
cd /tmp
;mkdir /tmp/aa
;mkdir /tmp/bb
;ln -s /tmp/aa /tmp/bb
resultará em um novo link simbólico/tmp/bb/aa -> /tmp/aa
enquanto
ln -sT /tmp/aa /tmp/bb
vai resultar emln: failed to create symbolic link '/tmp/bb': File exists
o
-s
parâmetro não tem nada a ver com isso. É (como sempre) explicado nos documentos: https://www.gnu.org/software/coreutils/manual/html_node/Target-directory.html