Estou tentando entender melhor os links simbólicos ... e não tendo muita sorte. Esta é minha saída real do shell com o nome de usuário / host alterado:
username@host:~$ mkdir actual
username@host:~$ mkdir proper
username@host:~$ touch actual/file-1.txt
username@host:~$ echo "file 1" > actual/file-1.txt
username@host:~$ touch actual/file-2.txt
username@host:~$ echo "file 2" > actual/file-2.txt
username@host:~$ ln -s actual/file-1.txt actual/file-2.txt proper
username@host:~$ # Now, try to use the files through their links
username@host:~$ cat proper/file-1.txt
cat: proper/file-1.txt: No such file or directory
username@host:~$ cat proper/file-2.txt
cat: proper/file-2.txt: No such file or directory
username@host:~$ # Check that actual files do in fact exist
username@host:~$ cat actual/file-1.txt
file 1
username@host:~$ cat actual/file-2.txt
file 2
username@host:~$ # Remove the links and go home :(
username@host:~$ rm proper/file-1.txt
username@host:~$ rm proper/file-2.txt
Eu pensei que um link simbólico deveria operar de forma transparente, no sentido de que você poderia operar no arquivo para o qual ele aponta como se estivesse acessando o arquivo diretamente (exceto, é claro, no caso de rm
onde, é claro, o link é simplesmente removido )
linux
ubuntu
bash
symbolic-link
orokusaki
fonte
fonte
df -T
) - o resultado acima é estranho para você também?Respostas:
Os links simbólicos tendem a gostar de caminhos completos ou relativos ao link; caso contrário, eles podem estar procurando
file-1.txt
localmente (por incrível que pareça).Navegue
proper
e executels -l
e você pode ver que o link simbólico está procurandoactual/file-1.txt
, quando deveria../actual/file-1.txt
.Então você tem duas opções:
Dê o caminho completo
Navegue até a pasta em que você deseja que o link esteja e vincule a partir daí
Editar : Uma dica para salvar a digitação.
Você poderia fazer
ln -s ~/actual/file-{1,2}.txt ~/proper
Os itens nos chavetas são substituídos e colocados um após o outro, criando o comando
fonte
rm -rf *
use uma pasta com link simbólico - você pode limpar a pasta à qual ele vincula. Apenas faça rm symlinkname. Apenas algumas coisas que eu cometi erros: DO problema é o uso de caminhos relativos. Se você especificar a criação do seu link com o caminho explícito completo, ele funcionará.
Seu exemplo cria links
proper
para procurar um subdiretório chamado real no diretório atual, em vez do pai ou pai de ambos.fonte
Links simbólicos podem ser complicados. Em essência, um link simbólico é um arquivo que contém um nome de arquivo / caminho para outro arquivo (e é sinalizado para tratamento especial). Se o nome do caminho no arquivo de link começar com '
/
', ele será tratado como um nome de caminho absoluto e as coisas serão bem diretas. Se não começar com uma barra, será tratado como um nome de caminho relativo - relativo ao diretório em que o link está localizado. (Isso é verdade independentemente de o nome conter ou não barras.) Então, você criouproper/file–1.txt
como um link para “actual/file–1.txt
” e, quando tentou acessá-lo, o sistema tentou acessarproper/actual/file–1.txt
. Você deveria ter ditoA propósito, você não precisava dos
touch
comandos.echo "file 1" > actual/file–1.txt
é suficiente para criaractual/file–1.txt
.fonte
Um problema relacionado, e pode ser óbvio para muitos, mas me surpreendeu por alguns minutos: se você estiver criando um link simbólico dentro de um diretório que é linkado por si mesmo ou se houver um link simbólico no caminho do diretório de trabalho atual, você pode encontrar problemas com links simbólicos que não estão funcionando.
Use
cd ..
els -l
repetidamente, para verificar se os próprios diretórios-pai estão vinculados.Se você precisar criar um link simbólico,
cd
para o diretório de destino original e criar novos links simbólicos, para que os caminhos relativos sejam precisos.Ou, dito de outra maneira: o caminho relativo é da Origem ao Destino. Se o Origin for posteriormente vinculado, tudo bem. Mas você pode ter problemas para configurar um novo nome de link de origem em um diretório que, de alguma forma, é de alguma forma vinculado.
fonte
cd ..
els -l
repetidamente", você pode usarnamei -mox $PWD
. Outra forma útil para descobrir se existem links simbólicos ao longo do caminho é a utilizaçãopwd -P
, que lhe dá um caminho para o diretório atual que não contém quaisquer links simbólicos (por isso, sepwd
epwd -P
dar saída diferente, você sabe que há um algum lugar link simbólico ao longo do caminho )Quando você tenta criar um link para um arquivo que não existe (ou você deu o caminho incorretamente), ln -s não gera um erro. Ele cria um link, mas quando você tenta 'cat' nesse link, ele diz que nenhum arquivo foi encontrado. Mesmo quando você pode vê-lo usando ls. Nesses casos, verifique sempre o caminho do arquivo.
Porque o arquivo etc / ufw / ufw.conf não existe. O caminho correto é /etc/ufw/ufw.conf
fonte
ln -s
"às vezes" não verifica a existência do alvo, está errada.