Os programas conectam-se a arquivos através de um número mantido pelo sistema de arquivos (chamado de inode em sistemas de arquivos unix tradicionais), para o qual o nome é apenas uma referência (e possivelmente não uma referência única).
Tantas coisas para se conhecer:
- Mover um arquivo usando
mv
não altera esse número de sublinhado, a menos que você o mova nos sistemas de arquivos (o que equivale a usarcp
, em seguida,rm
no original). - Como mais de um nome pode se conectar a um único arquivo (ou seja, temos hard links), os dados dos arquivos "excluídos" não desaparecem até que todas as referências ao arquivo subjacente desapareçam .
- Talvez o mais importante: quando um programa
open
s um arquivo faz uma referência a ele que é (para os propósitos de quando os dados serão excluídos) equivalente a ter um nome de arquivo conectado a ele.
Isso dá origem a vários comportamentos como:
- Um programa pode
open
um arquivo para leitura, mas na verdade não o lê até depois do usuário comorm
ed na linha de comando, e o programa ainda terá acesso aos dados - O que você encontrou:
mv
ing de um arquivo não desconecta o relacionamento entre o arquivo e nenhum programa que o tenha aberto (a menos que você se mova pelos limites do sistema de arquivos, caso em que o programa ainda tem uma versão do original trabalhar em). - Se um programa tiver
open
ed um arquivo para gravação, e o usuáriorm
s for o último nome de arquivo na linha de comando, o programa pode continuar colocando coisas no arquivo, mas assim que ele for fechado não haverá mais referência a esses dados e desaparecerá. - Dois programas que se comunicam por meio de um ou mais arquivos podem obter uma segurança total e parcial, removendo o (s) arquivo (s) depois que terminarem
open
ing. (Isto não é real segurança mental, apenas transforma um buraco em uma condição de corrida.)