In che modo Linux gestisce un comando di spostamento


12

In che modo Linux gestisce un comando di spostamento sotto il cofano?

Diciamo che sposto la mia home dir

/home/me

e lo sposto in un'altra directory

/home/foo/me

Come vengono modificati tutti i percorsi di file e directory in me? So che la mia directory Desktopsotto meè ora /home/foo/me/Desktopcosì come Documents /home/foo/me/Documentsma il file system aggiorna esplicitamente ogni percorso meper riflettere il cambiamento? Non sembra molto efficiente e probabilmente non è questo.

Dove posso ottenere maggiori informazioni su questo?


5
A proposito di efficienza: no, non sarebbe efficiente. Quando si spostano i dati in un'altra directory, i dati non vengono effettivamente letti in una posizione e scritti in un'altra. Un file system contiene una serie di puntatori a blocchi di dati. Nel caso di uno spostamento, vengono aggiornati solo i puntatori.
Jos

Ah, questo è probabilmente il significato di Jeff ...
Jacob Vlijm,

@Jos Da dove viene la frammentazione, giusto?
zero298,

3
@ zero298 No, la frammentazione in genere è un'ispe completamente diversa e non correlata - la frammentazione non riguarda il contenuto della struttura delle cartelle, ma il contenuto di un singolo file che è sparso attraverso i dischi del disco fisico (anziché essere una singola linea continua), riducendo la lettura / scrivere le prestazioni di tali file. Il contenuto di alberi di cartelle di grandi dimensioni / profondi / ramificati di solito non è continuo e spostato in quel modo.
Peteris,

Risposte:


21

Per capire come sposta le cartelle potresti aver bisogno di capire un po 'il file system su Linux. Tutti i file e le cartelle sono memorizzati come parte di una struttura di dati chiamata " inode ". Ogni file ha un numero di inode, così come le cartelle.

Per visualizzare l'inode della cartella, utilizzare il comando ls -ial foldername. La prima colonna mostra il numero di inode del file. Per ogni cartella ci sono due nomi univoci .e .., che rappresentano rispettivamente la directory e la directory principale.

Puoi provare a fare un esperimento per spostare una directory (ad esempio, / home / me / source) con sottodirectory e file in un'altra directory (ad esempio / home / me / da qualche parte / altro). Il numero di inode di / home / me / source e tutti i suoi contenuti rimangono gli stessi prima e dopo lo spostamento. L'unica differenza è il numero di inode di .., che inizialmente condivide il numero di inode di / home / me e ora diventa il numero di inode di / home / me / da qualche parte / else. In parole semplici, Linux aggiorna il collegamento alla sorgente della directory e poi ha terminato.

I contenuti sul disco fisso non vengono comunque modificati, solo l'indice di inode viene aggiornato quando la cartella viene spostata. Questo, ovviamente, non è il caso se si sposta la cartella in un'altra posizione fisica.


3
Bene, purché la mossa non superi i confini del filesystem.
Kojiro,

3

Se sei interessato a come programmi come mve cpfunzionano, ricorda che sono open source e puoi ottenere la spiegazione più accurata leggendo il codice. Qui ha collegamenti a tutte le utility di base. In particolare, puoi trovare mv qui


6
you can get the most accurate explanation by reading through the code.Mi permetto di dissentire; Per molto tempo non ho avuto alcuna esperienza con C, e anche ora non lo preferisco. Inoltre, il codice sorgente è spesso ottimizzato e contiene più casi limite del necessario. Una spiegazione simbolica spesso aiuta di più.
Shelvacu,

1
@shelvacu "contiene più casi limite del necessario". Il codice robusto gestisce tutti i casi limite che potrebbero essere presenti. Tuttavia è vero che potrebbe non essere necessario presentare tutti i casi limite nella prima spiegazione di un concetto.
OregonTrail

@OregonTrail Mi dispiace è quello che volevo dire, il codice ha più casi limite quindi sono necessari per una spiegazione
Shelvacu

Sono contento che sia stato il tuo sentimento originale, ma sembra che tu abbia ancora perso la mia enfasi sulle " maniglie ". Il codice ben scritto non ha casi limite, ma gestisce casi limite. ;) So che vieni dal posto giusto qui, ma dovresti stare attento con i tuoi verbi.
Oregon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.