Casa > l > Linux: Existe Alguma Forma De Evitar A 'Eliminação'/'Renomeação' De Um Ficheiro Aberto?

Linux: Existe alguma forma de evitar a 'Eliminação'/'Renomeação' de um ficheiro aberto?

No Unix/Linux os atributos de um arquivo (seu nome, e até mesmo sua existência) são desacoplados de seu uso. Aqueles usuários que têm permissão apropriada no diretório contendo um arquivo são livres para movê-lo dentro do seu sistema de arquivos (com o mesmo nome ou com um diferente) ou para apagá-lo. Nenhuma das operações tem qualquer efeito sobre um processo que tenha o arquivo em questão aberto. Isto porque o caminho de um ficheiro é apenas um meio de o localizar em primeiro lugar. Uma vez que o arquivo tenha sido aberto, um descritor de arquivo (ou um ponteiro de arquivo) é usado para posteriormente referenciar os dados.

Note que em um sistema Unix a exclusão de um arquivo nada mais faz do que invocar "unlink" que simplesmente decreta a contagem do link file's. Isto porque o que se considera como o nome do arquivo nada mais é do que um link rígido para o arquivo real. Pode haver qualquer número de tais links, conservando assim espaço em disco, uma vez que existe apenas uma única instância do conteúdo do arquivo. Links rígidos são constrangidos a permanecer dentro do mesmo sistema de arquivos (exceto para Apple's OS X, que levantou esta constrangimento para suportar Time Machine).

Apenas quando a contagem de links vai para zero o sistema de arquivos esquece aquele arquivo. Eu digo "esquecer" já que isso é tudo o que certamente vai acontecer então...o uso contínuo dos dados desse arquivo não é afetado. Ou seja, quando ainda há um processo que tem aquele arquivo aberto ele irá alegremente continuar em seu caminho...funcionando muito bem. O sistema operacional só liberará o espaço em disco subjacente quando todos os processos que o têm anexados o fecharem ou forem encerrados. Por causa disso, às vezes se vê um uso maior em um sistema de arquivos do que pode ser contabilizado a partir do exame da estrutura de diretórios!

Dado então acima, poderia ser bom se alguém pudesse "apagar" um arquivo, continuar a usá-lo, e mais tarde (confiando que nenhum evento incoveniente tenha intervindo) colocar um nome de arquivo nesses dados. Infelizmente (felizmente?) o Unix não fornece nenhum meio para reatacar tais dados. (O novo conjunto de chamadas baseadas em directório-arquivo-descritor ("*at") também requer um nome de ficheiro). Assim, a melhor abordagem é esconder arquivos da melhor forma possível.

De Betsy Carangelo

Como você abrirá um arquivo de texto de 30 GB na máquina Linux? :: Desde o momento em que você abre um arquivo executável, até o momento em que você termina, como funciona uma instalação?