Bagaimana sistem file case-insensitive menampilkan nama file case atas dan bawah?


12

Pertanyaan ini terjadi pada saya tempo hari ketika saya sedang mengerjakan proyek pengembangan yang mengandalkan kerangka kerja yang berkenaan dengan nama file. Kerangka kerja (tidak relevan di sini) ingin melihat nama file huruf besar-pertama. Ini membuat saya berpikir.

Pada sistem file case-insensitive, katakan extFAT atau HFS + (khusus non-case sensitif) bagaimana sistem file memberikan akses ke file yang sama dengan kedua versi nama file huruf besar dan kecil.

Sebagai contoh:

$ cd ~/Documents
$ pwd
/home/derp/Documents

$ cd ../documents
$ pwd
/home/derp/documents

$ cd ../docuMents
$ pwd
/home/derp/docuMents

$ cd ../DOCUMENTS
$ pwd
/home/derp/DOCUMENTS

$ cd ../documentS
$ pwd
/home/derp/documentS

Semua perintah ini akan menyelesaikan ke direktori yang sama. Apakah perilaku ini, khususnya keluaran dari pwdhanya fungsi bashdalam hal ini hanya menunjukkan kepada saya apa yang menurut saya ingin saya lihat?

Contoh lain:

$ ls ~/Documents
Derp.txt    another.txt    whatThe.WORLD

Sistem file di sini melaporkan kasus nama file asli yang dibuat oleh pengguna atau program.

Pada titik mana di tumpukan sistem file adalah nama file yang dapat dibaca manusia dipertahankan seperti yang dibuat (misalnya huruf besar dan kecil) sehingga dapat diakses oleh kombinasi karakter ASCII huruf besar dan kecil yang benar? Apakah ini hanya trik regex di suatu tempat atau ada sesuatu yang terjadi?

EDIT: Sepertinya perilaku yang membuat saya penasaran ditemukan dalam sistem berkas case-insensitive case-preserving setelah beberapa penelitian lebih lanjut ...


Tidak menulis ini sebagai jawaban karena saya tidak tahu pasti lagi tetapi saya percaya bahwa Anda tidak dapat memiliki ~ / Dokumen dan ~ / dokumen dalam sistem file itu. Tetapi ketika Anda cd ~ / Documents atau ~ / dokumen Anda pergi di tempat yang sama dan shell Anda "bermain bagus" dengan mengingat apa yang Anda ketik. Sisi lain adalah bahwa beberapa FS menyimpan cara itu dibuat dalam sebuah aux. sepotong data. Misalnya menyimpan ~ / Dokumen dalam tabel pencarian tetapi menulis ke FS sebagai ~ / dokumen. Pada dasarnya menciptakan ilusi bahwa sistem file peduli tentang casing ketika tidak.
coteyr

Dari apa yang saya amati, dalam hal direktori berisi dua nama file yang identik kecuali untuk kasus, sistem file yang tidak peka terhadap kasus dapat menanggapi permintaan untuk file yang diberikan dengan memilih secara sewenang-wenang. Situasi seperti itu dapat muncul jika aturan untuk konversi konversi huruf besar / kecil setelah file dibuat.
supercat

Informasi keren tentang sifat pelestarian kasus NTFS: superuser.com/questions/364057/why-is-ntfs-case-sensitive
Canadian Luke

Jawaban:


14

Sebuah filesystem yang tidak sensitif-huruf berarti bahwa setiap kali filesystem harus bertanya "apakah A merujuk ke file / direktori yang sama dengan B?" ia membandingkan nama file / direktori yang mengabaikan perbedaan dalam huruf besar / kecil (persis apa perbedaan atas / huruf kecil tergantung pada sistem file-itu tidak jelas setelah Anda melampaui ASCII). Sistem file case-sensitive tidak mengabaikan perbedaan itu.

Filesystem pengawet menyimpan nama file seperti yang diberikan. Sistem file yang tidak melindungi case tidak; biasanya akan mengkonversi semua huruf menjadi huruf besar sebelum menyimpannya (secara teoritis, itu bisa menggunakan huruf kecil, atau kasus RaNsOm NoTe, atau apa pun, tetapi AFAIK semua dunia nyata menggunakan huruf besar).

Anda dapat menggabungkan kedua atribut tersebut dalam kombinasi apa pun. Saya tidak yakin apakah Anda dapat menemukan sistem file case-sensitive non-case, tetapi Anda tentu bisa membuatnya. Namun, semua kombinasi lain ada atau ada dalam sistem nyata.

Jadi, filesystem case-insensitive case-preserving (case-insensitive case-jenis yang paling umum saat ini) akan menyimpan dan mengembalikan nama file dalam huruf besar apa pun yang Anda buat atau diubah namanya, tetapi ketika membandingkan dua nama file (untuk memeriksa apakah ada ada, untuk membuka satu, untuk menghapus satu, dll.) itu akan mengabaikan perbedaan kasus.

Ketika Anda menggunakan sistem file case-insensitive pada kotak Unix, berbagai utilitas akan melakukan hal-hal aneh karena Unix secara tradisional menggunakan sistem file case-sensitive - jadi mereka tidak mengharapkan Document1dan document1menjadi file yang sama.

Dalam pwdkasus ini, apa yang Anda lihat adalah bahwa secara default hanya menampilkan jalur yang Anda gunakan untuk sampai ke direktori. Jadi jika Anda sampai di sana via cd DirName, itu akan digunakan DirNamedalam output. Jika Anda sampai di sana via DiRnAmE, Anda akan melihat DiRnAmEdi output. Bash melakukan ini dengan melacak bagaimana Anda sampai ke direktori Anda saat ini di $PWDvariabel lingkungan. Terutama ini untuk symlink (jika Anda cdmasuk ke symlink, Anda akan melihat symlink di Anda pwd, meskipun itu sebenarnya bukan bagian dari jalur ke direktori Anda saat ini). Tapi itu juga memberikan perilaku yang agak aneh yang Anda amati pada sistem file case-insensitive. Saya menduga itu pwd -Pakan memberi Anda nama direktori menggunakan kasing yang tersimpan di disk, tetapi belum diuji.


Saya mungkin tahu Anda mengalahkan saya untuk yang satu ini! (Terpilih)
Fabby
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.