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 me
alterados todos os caminhos de arquivos e diretórios ? Sei que meu Desktop
diretório abaixo me
agora é /home/foo/me/Desktop
tão bom quanto, Documents
/home/foo/me/Documents
mas o sistema de arquivos atualiza explicitamente todos os caminhos abaixo me
para refletir a alteração? Isso não parece muito eficiente e provavelmente não é isso.
Onde posso obter mais informações sobre isso?
filesystem
Jeff
fonte
fonte
Respostas:
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.
fonte
Se você estiver interessado em saber como programas como
mv
ecp
funcionam, 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 mvfonte
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.