Operação de “mv” descrita em “Programação Avançada no Ambiente UNIX”

0

Em Programação Avançada no Ambiente UNIX (livro) Seção 4.14, interpretando o nó i e o diretório, há um parágrafo:

When renaming a file without changing file systems, the actual contents of the file need not be moved--all that needs to be done is to add a new directory entry that points to the existing i-node and then unlink the old directory entry. For example, to rename the file /usr/lib/foo to /usr/foo, the contents of the foo needn't be moved if the directories /usr/lib and /usr are on the same filesystem. This is how the mv command usually operates.

De acordo com isso, um nome de arquivo de um arquivo deve incluir o caminho para esse arquivo, e "mv" realmente não move o arquivo. Mas por que o tempo que leva para mover os dois arquivos no mesmo diretório varia de acordo com o tamanho deles?

    
por tian tong 13.07.2015 / 14:35

1 resposta

1
  1. O nome do caminho é inferido da rota da entrada de diretório do arquivo de volta à raiz, / .
  2. O nome de um arquivo é armazenado em seu diretório, portanto, o mesmo "arquivo" pode ser chamado de duas coisas diferentes simultaneamente.
  3. O tempo necessário para mover um arquivo dentro do mesmo sistema de arquivos é independente do tamanho do arquivo.

Em resposta às suas declarações:

a filename of a file should include the path to that file

O parágrafo não diz isso, nem nada parecido com isso. Talvez seja em uma parte que você não citou?

mv doesn't really move the file

Sim, o arquivo é colocado em um novo diretório - possivelmente com um novo nome - e removido do antigo. Isso é uma jogada, mas não uma cópia (o conteúdo do arquivo não é movido, apenas sua localização no sistema de arquivos).

For example, to rename the file /usr/lib/foo to /usr/foo, the contents of the foo needn't be moved if the directories /usr/lib and /usr are on the same filesystem.

O caminho /usr/lib/foo é decomposto no nome do arquivo foo dentro do diretório /usr/lib . Da mesma forma, /usr/foo é decomposto para foo sob /usr . Se /usr e /usr/lib estiverem no mesmo sistema de arquivos, a renomeação se tornará uma operação link -e- unlink (a posição do arquivo dentro do sistema de arquivos é movida; o conteúdo do arquivo permanece inalterado).

    
por 13.07.2015 / 14:53