Leia a sua página man: Questão 1 = 1º Formulário, isso porque no linux todos os itens são considerados arquivos, até diretórios. Como exemplo, use seu editor de texto para "abrir" / etc /, ou seja: nano -w / etc / nano irá educadamente dizer a você / etc / é um diretório Já que é tecnicamente legal criar links simbólicos sem fim. Antigamente, antes que a verificação dos limites fosse escrita, eu poderia ter um sistema FHS com 2 arquivos chamados / etc, um deles sendo um arquivo e um sendo um diretório, e o sistema sabia a diferença
(Veja a nota haha no guia do desenvolvedor do chromiumos :
There is a file system loop because inside ~/trunk you will find the chroot again. Don't think about this for too long. If you try to use du -s ${HOME}/chromiumos/chroot/home you might get a message about a corrupted file system. This is nothing to worry about, and just means that your computer doesn't understand this loop either. (If you can understand this loop, try something harder.
Eu te desafio, clique em algo mais difícil :) A fim de evitar o looping, o ln requer o caminho completo.
A pergunta 2 pode ser respondida lendo novamente a página de manual Veja a última frase:
DESCRIPTION
In the 1st form, create a link to TARGET with the name LINK_NAME. In the 2nd form, create a link to TARGET in the current directory. In the 3rd and 4th forms, create links to each TARGET in DIRECTORY. Create hard links by default, symbolic links with --symbolic. By default, each destination (name of new link) should not already exist. When creating hard links, each TARGET must exist. Symbolic links can hold arbitrary text; if later resolved, a relative link is interpreted in relation to its parent directory.
Re: Editar: "No entanto, por que o shell não pode analisar esse caminho quando você está executando o comando, em vez de forçar o usuário a descobrir qual é o caminho? & enter ela própria? "
Considere este exemplo: Aplicativo A instala versão da biblioteca 1.0.a. Você constrói os aplicativos X, Y, Z que dependem da Biblioteca A. O aplicativo A encontra um bug, atualiza-o e salva a biblioteca como 1.0.1.2.a. Como os Aplicativos X, Y e Z ainda usam a biblioteca 1.0, se eu substituir 1.0 diretamente w / 1.0.1.2, serei quebrado, mas se eu vincular simbolicamente a versão 1.0.1.2 à versão 1.0, nada quebrará,
ln -s /usr/lib64/libfoo-1.0.1.2.a /usr/lib64/libfoo-1.0.a
e os aplicativos X, Y e Z recebem a nova correção de bugs da biblioteca aplicada a eles também, porque o shell segue o link de 1.0 para 1.0.1.2, mas o chama de 1.0. Em casos como esse, você não deseja que o shell assuma o caminho, pois aumenta a chance de quebra do sistema. BTW em sistemas de 64 bits / usr / lib está vinculada a / usr / lib64, para remediar o exemplo que acabei de dar em larga escala, ou seja, aplicativos de 32 bits esperam que bibliotecas sejam instaladas em / usr / lib, e em 64 bits sistema não há bibliotecas de 32 bits, portanto / usr / lib está ligado a / usr / lib64 da seguinte forma:
ln -s /usr/lib64 /usr/lib