Como o linux lida com um comando move


12

Como o linux lida com um comando de movimento sob o capô?

Digamos que eu mudo meu diretório de casa

/home/me

e eu movo isso para outro diretório

/home/foo/me

Como são mealterados todos os caminhos de arquivos e diretórios ? Sei que meu Desktopdiretório abaixo meagora é /home/foo/me/Desktoptão bom quanto, Documents /home/foo/me/Documentsmas o sistema de arquivos atualiza explicitamente todos os caminhos abaixo mepara refletir a alteração? Isso não parece muito eficiente e provavelmente não é isso.

Onde posso obter mais informações sobre isso?


5
Sobre eficiência: não, isso não seria eficiente. Quando você move os dados para outro diretório, os dados não são realmente lidos em um local e gravados em outro. Um sistema de arquivos contém um conjunto de ponteiros para blocos de dados. No caso de uma movimentação, apenas os ponteiros são atualizados.
1313 Jos

Ah, isso é provavelmente o que jeff quis dizer ...
Jacob Vlijm

@ Jos: De onde vem a fragmentação, certo?
zero298

3
@ zero298 Não, a fragmentação geralmente é uma questão completamente diferente e não relacionada - a fragmentação não é sobre o conteúdo da estrutura da pasta, mas sobre o conteúdo de um único arquivo sendo espalhado pelos pratos do disco físico (em vez de ser uma única linha contínua), reduzindo a leitura / escreve o desempenho desses arquivos. O conteúdo de árvores de pastas grandes / profundas / ramificadas não costuma ser contínuo e movido dessa maneira.
Peteris

Respostas:


21

Para entender como ele move as pastas, talvez você precise entender um pouco sobre o sistema de arquivos no linux. Todos os arquivos e pastas são armazenados como parte de uma estrutura de dados chamada " inode ". Cada arquivo possui um número de inode, assim como as pastas.

Para visualizar o inode de sua pasta, use o comando ls -ial foldername. A primeira coluna mostra o número do inode do arquivo. Para cada pasta, existem dois nomes exclusivos .e .., representando o diretório próprio e o diretório pai, respectivamente.

Você pode tentar fazer um experimento para mover um diretório (por exemplo, / home / me / source) com subdiretórios e arquivos para outro diretório (por exemplo, / home / me / em outro lugar). O número do inode de / home / me / source e todo o seu conteúdo permanece o mesmo antes e depois da mudança. A única diferença é o número de inode de .., que originalmente compartilha o número de inode de / home / me e agora se torna o número de inode de / home / me / em outro lugar. Em palavras simples, o Linux atualiza o link para a origem do diretório e pronto.

O conteúdo do disco rígido não é modificado de qualquer maneira, apenas o índice de inode é atualizado quando a pasta é movida. Obviamente, esse não é o caso se você mover a pasta para um local físico diferente.


3
Certo, desde que a mudança não ultrapasse os limites do sistema de arquivos.
kojiro

3

Se você estiver interessado em saber como programas como mve cpfuncionam, lembre-se de que eles são de código aberto e você pode obter a explicação mais precisa lendo o código. Aqui tem links para todos os principais utilitários. Especificamente, você pode encontrar aqui mv


6
you can get the most accurate explanation by reading through the code.Eu peço desculpa mas não concordo; Durante muito tempo, não tive absolutamente nenhuma experiência com C, e mesmo agora não o prefiro. Além disso, o código-fonte geralmente é otimizado e contém mais casos extremos do que o necessário. Uma explicação simbólica geralmente ajuda mais.
23414 Shelvacu

1
@shelvacu "contém mais casos extremos do que o necessário". O código robusto lida com todos os casos de borda que podem estar presentes. No entanto, é verdade que apresentar todos os casos extremos na primeira explicação de um conceito pode não ser necessário.
OregonTrail

@OregonTrail Desculpe isso é o que eu quis dizer, o código tem mais casos de ponta, em seguida, são necessidades para uma explicação
Shelvacu

Fico feliz que tenha sido o seu sentimento original, mas você ainda parecia ter perdido minha ênfase nas " alças ". O código bem escrito não possui casos extremos, ele lida com casos extremos. ;) Eu sei que você está vindo do lugar certo aqui, mas você deve ter cuidado com seus verbos.
precisa
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.