Como remover com segurança o hard-link para a pasta home?

3

Em uma pasta de propriedade do meu usuário /sites/Website , há um diretório chamado ~ .

Quando eu cd para esse diretório, sou redirecionado para ~/ , minha pasta pessoal.

No começo eu pensei que este era um link simbólico, mas fazer ls -al mostra que é comum. Estou assumindo que é um link difícil. Eu corri:

$ rm -r /sites/Website/~

Isso começou a excluir minha pasta pessoal e perdi muitos dados. Eu parei rm com Ctrl c . Como posso me livrar desse link com segurança?

    
por protonpopsicle 18.04.2013 / 03:14

1 resposta

4

Muitos shells expandem um caractere til inicial ( ~ ) antes de uma barra em o início de um nome de caminho no caminho absoluto do seu diretório HOME. Você pode evitar essa expansão do shell citando o caractere til ou certificando-se de que o til não inicie o nome do caminho:

$ echo "$HOME"
/home/idallen
$ echo ~
/home/idallen
$ echo "~"
~
$ echo \~
~
$ echo ./~
./~

Não há nada especial sobre um caracter til no próprio Unix, então você pode criar um diretório chamado til, desde que você esconda o til de expansão pelo shell usando qualquer um dos métodos acima:

$ mkdir "~"
$ ls -ld '~'
drwxr-xr-x 2 idallen idallen 40 Oct 22 08:45 ~
$ ls -ld \~
drwxr-xr-x 2 idallen idallen 40 Oct 22 08:45 ~
$ ls -ld ./~
drwxr-xr-x 2 idallen idallen 40 Oct 22 08:45 ~
$ ls -ld /tmp/idallen/~
drwxr-xr-x 2 idallen idallen 40 Oct 22 08:45 /tmp/idallen/~

Se você não ocultar o caractere til inicial da casca, a casca expande para ser o seu diretório HOME. Adicionando um comando echo na frente de uma linha de comando pode mostrar o que o shell faz para sua linha de comando antes de ser executado:

$ echo cd ~
cd /home/idallen                 # would go to $HOME directory
$ echo cd ./~
cd ./~                           # would go into directory named ~

Você descobriu essa necessidade de citar o til, porque os comandos abaixo teria efeitos muito diferentes, dependendo da expansão da sua concha um til principal sem aspas:

$ echo rm -r ~       
rm -r /home/idallen              # would remove the $HOME directory
$ echo rm -r "~"
rm -r ~                          # would remove the directory named ~
$ echo rm -r ./~
rm -r ./~                        # would remove the directory named ~
$ echo rm -r /tmp/idallen/~
rm -r /tmp/idallen/~             # would remove the directory named ~

Apenas os tis sem nomes no início dos nomes de caminho se expandem para ser o seu diretório HOME.

    
por 22.10.2013 / 15:08