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
mvnão altera esse número de sublinhado, a menos que você o mova nos sistemas de arquivos (o que equivale a usarcp, em seguida,rmno 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
opens 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
openum arquivo para leitura, mas na verdade não o lê até depois do usuário comormed na linha de comando, e o programa ainda terá acesso aos dados - O que você encontrou:
mving 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
opened um arquivo para gravação, e o usuáriorms 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
opening. (Isto não é real segurança mental, apenas transforma um buraco em uma condição de corrida.)