unlink exclui arquivos que não são links [duplicados]

1

Eu criei um link físico

$ ln hours.sh hours_link

teste-o

$ ls -l hours* 
-rw-r--r-- 2 me staff 653 Apr 12  2018 hours.sh
-rw-r--r-- 2 me staff 653 Apr 12  2018 hours_link

remova-o com unlink

$ unlink hours_link
$ ls -l hours* 
-rw-r--r-- 1 me staff 653 Apr 12  2018 hours.sh

até aí tudo bem, mas unlink pode deletar o arquivo original que não é um link

$ cp hours.sh hours.bak.sh
$ unlink hours.sh
$ ls | grep hours.sh
#not return anything, hours.sh is deleted

verifique o manual e fique muito surpreso

   unlink - call the unlink function to remove the specified file
   rm - remove files or directories

Se você não apenas considerar isso como devo entender essa conversão?

    
por JawSaw 13.11.2018 / 11:19

1 resposta

3

Cada entrada em um diretório é um link físico para o arquivo. Tanto rm como unlink removem hard-links. Um arquivo é excluído quando e somente quando, todos os links para ele são removidos e nenhum processo o abre.

Portanto, não há diferença (no formulário, apenas o nome) entre o nome original e o nome criado com ln .

    
por 13.11.2018 / 11:56