Bagaimana linux menangani perintah pindah

12

Bagaimana linux menangani perintah pemindahan di bawah tenda?

Katakanlah saya memindahkan dir rumah saya

/home/me

dan saya memindahkan ini ke direktori lain

/home/foo/me

Bagaimana semua jalur file dan direktori di bawah mediubah? Saya tahu Desktopdir saya di bawah mesekarang /home/foo/me/Desktopjuga Documents /home/foo/me/Documentstetapi apakah sistem file secara eksplisit memperbarui setiap jalur di bawah meuntuk mencerminkan perubahan? Kedengarannya tidak efisien dan mungkin bukan ini.

Di mana saya bisa mendapatkan informasi lebih lanjut tentang ini?

Jeff
sumber
5
Tentang efisiensi: tidak, itu tidak akan efisien. Ketika Anda memindahkan data ke direktori lain, data tersebut tidak benar-benar dibaca di satu tempat dan ditulis di tempat lain. Sistem file berisi sekumpulan pointer ke blok data. Dalam hal perpindahan, hanya pointer yang diperbarui.
Jos
Ah, mungkin itulah maksud jeff ...
Jacob Vlijm
@ Jo Dari mana asal fragmentasi itu?
zero298
3
@ zero298 Tidak, fragmentasi pada umumnya adalah masalah yang sama sekali berbeda dan tidak terkait - fragmentasi bukan tentang isi struktur folder, tetapi tentang isi dari satu file yang tersebar di seluruh piringan disk fisik (alih-alih menjadi satu baris kontinu), mengurangi pembacaan / tulis kinerja file tersebut. Isi pohon folder besar / dalam / bercabang biasanya tidak diharapkan kontinu dan bergerak seperti itu.
Peteris

Jawaban:

21

Untuk memahami cara memindahkan folder, Anda mungkin perlu memahami sedikit tentang sistem file di linux. Setiap file dan folder disimpan sebagai bagian dari struktur data yang disebut " inode ". Setiap file memiliki nomor inode, begitu juga folder.

Untuk melihat inode folder Anda, gunakan perintah ls -ial foldername. Kolom pertama menunjukkan nomor inode file. Untuk setiap folder ada dua nama unik .dan .., masing-masing mewakili direktori, dan direktori induk.

Anda dapat mencoba melakukan percobaan untuk memindahkan direktori (misalnya, / home / me / source) dengan sub-direktori dan file ke direktori lain (mis. / Home / me / tempat / lain-lain). Nomor inode dari / home / me / source dan semua isinya tetap sama sebelum dan sesudah pindah. Satu-satunya perbedaan adalah nomor inode .., yang awalnya berbagi nomor inode / home / me dan sekarang menjadi nomor inode dari / home / me / tempat / lain. Dalam kata-kata sederhana, Linux memperbarui tautan ke sumber direktori dan kemudian selesai.

Konten pada hard disk tidak diubah, hanya indeks inode yang diperbarui ketika folder dipindahkan. Tentu saja ini tidak terjadi jika Anda memindahkan folder ke lokasi fisik yang berbeda.

Kenneth L.
sumber
3
Benar, selama langkah itu tidak melewati batas filesystem.
kojiro
3

Jika Anda tertarik dengan cara program seperti mvdan cpbekerja, ingatlah bahwa itu open source dan Anda bisa mendapatkan penjelasan paling akurat dengan membaca kode. Di sini memiliki tautan ke semua utilitas inti. Secara khusus, Anda dapat menemukan mv di sini

Hugo Buff
sumber
6
you can get the most accurate explanation by reading through the code.Saya mohon untuk berbeda; Untuk waktu yang lama saya sama sekali tidak punya pengalaman dengan C, dan bahkan sekarang saya tidak suka itu. Juga, kode sumber sering dioptimalkan, dan mengandung lebih banyak kasus tepi daripada yang dibutuhkan. Penjelasan simbolis seringkali lebih membantu.
Shelvacu
1
@shelvacu "mengandung lebih banyak kasing tepi dari yang dibutuhkan". Kode yang kuat menangani semua kasus tepi yang mungkin ada. Namun memang benar bahwa menyajikan semua kasus tepi dalam penjelasan pertama konsep mungkin tidak diperlukan.
OregonTrail
@OregonTrail Maaf itulah yang saya maksud, kode ini memiliki kasus tepi lebih banyak maka diperlukan untuk penjelasan
Shelvacu
Saya senang itu adalah sentimen awal Anda, tetapi Anda tampaknya masih melewatkan penekanan saya pada " pegangan ". Kode yang ditulis dengan baik tidak memiliki case edge, ia menangani case edge. ;) Saya tahu Anda datang dari tempat yang tepat di sini, tetapi Anda harus berhati-hati dengan kata kerja Anda.
OregonTrail