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.