O que acontece se mover acidentalmente um link suave seguido por “/”?

2

Eu criei um link para o diretório atual,

$ ln -s "$PWD" math

Eu queria então movê-lo para outro diretório.

$ mv math/ ~/dirlinks/maths/

Então percebi que deveria

$ mv math ~/dirlinks/maths/

Então, eu ctrl-c para cancelar o processo antes de terminar.

Descobri que há um dir math em ~/dirlinks/maths/ e parece que os arquivos em . foram copiados para ~/dirlinks/maths/math , porque vi que os arquivos em ~/dirlinks/maths/math também aparecem em . . Mas eu não entendo porque é mv não cp . O que aconteceu quando eu corri mv math/ ~/dirlinks/maths/ ?

Obrigado.

    
por Tim 13.10.2014 / 21:03

1 resposta

1

Vamos dar uma olhada no que seu primeiro comando fez: ele criou um link simbólico math em seu diretório atual que aponta para o caminho absoluto do diretório atual. Vamos inspecionar um pouco mais perto:

user@host:/free$ ls -al /free
total 4
drwxrwxrwt  2 root root   40 Oct 14 10:29 .
drwxr-xr-x 24 root root 4096 Oct  1 22:28 ..
user@host:/free$ ln -vs /free math
‘math’ -> ‘/free’
user@host:/free$ ls -al /free
total 4
drwxrwxrwt  2 root root    60 Oct 14 10:29 .
drwxr-xr-x 24 root root  4096 Oct  1 22:28 ..
lrwxrwxrwx  1 user users    5 Oct 14 10:29 math -> /free

Agora, se você adicionar alguns arquivos a $PWD e executar a movimentação:

user@host:/free$ touch a b
user@host:/free$ mv -vi math/ /tmp/Q
‘math/’ -> ‘/tmp/Q’
‘math/math’ -> ‘/tmp/Q/math’
‘math/b’ -> ‘/tmp/Q/b’
‘math/a’ -> ‘/tmp/Q/a’
removed ‘math/math’
removed ‘math/b’
removed ‘math/a’
mv: cannot remove ‘math/’: No such file or directory

Basicamente, ele move todo o diretório apontado por math para o destino. Como aponta para o diretório atual, ele é completamente movido para o local onde você o anunciou. Se você estivesse em algum lugar diretamente acima do destino, você poderia ter resultado em um interessante problema de looping.

    
por 14.10.2014 / 10:39

Tags