Apakah "urutan direktori" file dalam direktori (digunakan oleh `ls -U`)?


19

Menurut halaman manual untuk ls, ls -Uberarti:

jangan menyortir; daftar entri dalam urutan direktori.

Apa arti "urutan direktori", dan bagaimana hal itu ditentukan?

Tes berikut (dijalankan pada sistem file ext3), menunjukkan bahwa itu bukan urutan pembuatan file:

root@sv1010vm0007:/tmp# mkdir test
root@sv1010vm0007:/tmp# touch test/2
root@sv1010vm0007:/tmp# touch test/1
root@sv1010vm0007:/tmp# touch test/3
root@sv1010vm0007:/tmp# ls -U test
2  3  1

Jawaban:


14

Itu tergantung pada sistem file. Untuk beberapa sistem file (termasuk di antara mereka3), direktori sebenarnya adalah file dengan format yang terkenal, dan bit 'd' diatur dalam izin atau modenya. Dalam hal itu, sejarah berapa panjang nama file yang telah dibuat dan dihapus bisa berarti. Kernel akan mengisi entri pertama dalam file direktori yang memiliki cukup ruang untuk menyimpan nama file baru. Lihat http://e2fsprogs.sourceforge.net/ext2intro.html untuk detail lebih lanjut, bagian berjudul "Deskripsi Fisik".

Untuk beberapa filesystem lain, Reiserfs di antara mereka, direktori sebenarnya hanya beberapa entri dalam pohon B + yang tidak terlihat di filesystem, sehingga dataran lsdirektori dalam sistem file Reiserfs berada dalam urutan leksikal.


@ Bruce: Jadi, apa sebenarnya isi dari file "direktori" ini?
Faheem Mitha

Secara tradisional, sesuatu yang sangat mirip dengan struct dirent, yang saya temukan didefinisikan di /usr/include/bits/dirent.h pada kotak RHEL, dan pada kotak Slackware 11.0. Kedua mesin tersebut menolak untuk membuka () direktori secara langsung. Saya tahu bahwa saya dulu melakukan hal-hal seperti "cat.> Dot.as.file" untuk mengubah direktori menjadi file biasa, terakhir kali saya melakukannya pasti Solaris 8, saya pikir. Pada dasarnya, struct dirent berisi inode (angka), catatan panjang, panjang nama, dan string, yang seingat saya, mungkin atau mungkin tidak diakhiri ASCII-Nul.
Bruce Ediger

@ Bruce: Ok. Dan struktur C ini berhasil mendapatkan semua informasi tentang file dan subdirektori yang terkandung di dalamnya?
Faheem Mitha

Direktori dalam sistem file seperti ext2, atau BSD FFS atau sistem file Unix yang asli, hanya berisi daftar nomor inode dan nama file yang sesuai. Memanggil "ls" tanpa argumen hanya memberi Anda daftar nama file. Jika Anda melakukan "ls-l", "ls" itu sendiri akan mencari setiap nama file dengan melakukan stat (2) system call pada nama file, dan dari stat struct, dapatkan izin, ukuran, "tipe file", dll Jadi, tidak, file direktori tidak memiliki semua informasi, hanya daftar nama.
Bruce Ediger

2
ext2.sourceforge.net/2005-ols/paper-html/node3.html menjelaskan bahwa fitur dir_index hash nama file dan rahasia khusus sistem file. dump2efs menyertakan dir_index di baris fitur Filesystem-nya jika fitur ini diaktifkan.
Martin Dorey

3

Memang, tidak ada urutan khusus untuk diharapkan. Terserah OS dan implementasi sistem file untuk memesan entri seperti yang diinginkan. Salah satu tujuan dari opsi ini adalah untuk mendapatkan daftar yang lebih cepat yang mungkin menjadi faktor signifikan dengan direktori yang sangat besar.


Ada algoritma penjadwalan / caching di driver kernel dan sistem file yang mempengaruhi kapan tepatnya data ditulis ke disk. Ini dilakukan untuk meningkatkan kinerja. Karena pengoptimalan ini, Anda tidak dapat memastikan kapan penulisan akan terjadi. Juga, inode lama dalam sistem file mungkin digunakan kembali sehingga file baru dapat muncul di slot direktori di mana file lama berada. Jadi urutan penciptaan tidak perlu "urutan direktori."
LawrenceC

@ultrasawblade: Tidak yakin mengapa Anda menulis itu sebagai komentar untuk balasan saya sendiri, bukan balasan dengan sendirinya atau apa pun.
jlliagre

@ultrasawblade: Sebenarnya, "inode lama [sedang] digunakan kembali" tidak ada hubungannya dengan penggunaan kembali slot direktori lama. Ini bisa terjadi setiap kali entri direktori lama tidak terhubung; jika semuanya merupakan tautan keras, ini tidak perlu menyebabkan inode yang tidak dapat dialokasikan.
G-Man Mengatakan 'Reinstate Monica'

2

Ini adalah urutan entri disimpan secara internal di sistem file. Ini akan bervariasi dari sistem file ke sistem file. Misalnya, entires dapat disimpan di beberapa jenis pohon seimbang, seperti Red-Black Tree . Mungkin ada optimasi lebih lanjut untuk direktori dengan sejumlah kecil entri, atau untuk menangani penambahan dan pemindahan secara efisien.


-1

Direktori hanyalah file lain, yang berisi daftar metadata file aktual. "ls -U" hanya mencantumkan entires dalam urutan yang sama dalam file direktori.

Urutan ditentukan oleh OS dan implementasi sistem file.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.