Direktori adalah (secara konseptual) sebuah "file" khusus yang berisi daftar nama, dan nomor inode menunjuk ke nama-nama tersebut. Beberapa nama dapat berupa subdirektori. Ada entri khusus ..
yang menunjuk ke direktori induk.
Jadi, jelas, mengubah nama file itu mudah: Anda hanya mengubah nama dalam entri direktori, tidak ada yang lain. Ini berlaku apakah file itu sebenarnya file, atau "file" yang digunakan untuk menyimpan konten direktori lain. Memang, rename
syscall yang sama melakukan keduanya.
Menyalin, bagaimanapun, adalah operasi yang jauh lebih sepele. Anda bisa saja menyalin direktori "file", tetapi kemudian Anda akan memiliki dua direktori di mana file-file itu sama (mereka akan berupa hardlink). Jika Anda memiliki sistem yang memungkinkan hardlink ke direktori, itu adalah, tetapi karena tidak ada sistem modern yang memungkinkan, setidaknya untuk non-root, Anda harus melakukan salinan itu untuk setiap subdirektori. Anda sebenarnya dapat meminta cp
perilaku ini dengan cp -lR
: -l
untuk tautan keras, -R
untuk rekursi itu.
Tetapi meninggalkan semua yang terhubung sepertinya bukan yang Anda inginkan. Sebagai gantinya, Anda ingin cp
menyalin setiap file. Itu operasi yang cukup mahal: setiap file harus dibaca ke dalam memori, dan ditulis kembali ke disk di lokasi kedua. Sebenarnya dibutuhkan beberapa syscalls, untuk membuka, membaca, menulis, dan menutup file, dan itu harus diulang untuk setiap file.
Sistem file tradisional juga bekerja dengan cara ini pada disk. Tidak ada cara untuk menyalin banyak file, selain untuk pergi melalui masing-masing secara individual dan menyalinnya, dan itu adalah jenis-jenis sistem file yang digunakan ketika utilitas baris perintah dasar dirancang.
mv
dari satu sistem file ke sistem file yang lain sama "hanya mengubah nama dalam entri direktori"?