Làm thế nào để hệ thống tệp không phân biệt chữ hoa chữ thường hiển thị cả tên tệp chữ hoa và chữ thường?


12

Câu hỏi này xảy ra với tôi vào một ngày khác khi tôi đang làm việc trong một dự án phát triển dựa trên một khung có liên quan đến tên tệp. Khung (không liên quan ở đây) muốn xem tên tệp chữ hoa đầu tiên. Điều này khiến tôi suy nghĩ.

Trên hệ thống tệp không phân biệt chữ hoa chữ thường, giả sử extFAT hoặc HFS + (cụ thể là không phân biệt chữ hoa chữ thường) làm thế nào để hệ thống tệp cung cấp quyền truy cập vào cùng một tệp với cả phiên bản chữ hoa và chữ thường.

Ví dụ:

$ 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

Tất cả các lệnh này sẽ giải quyết vào cùng một thư mục. Là hành vi này, cụ thể là đầu ra từ pwdchỉ một chức năng bashtrong trường hợp này chỉ cho tôi thấy những gì nó nghĩ tôi muốn xem?

Một vi dụ khac:

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

Hệ thống tập tin ở đây báo cáo trường hợp tên tệp gốc được tạo bởi người dùng hoặc chương trình.

Tại điểm nào trong ngăn xếp hệ thống tập tin là tên tệp có thể đọc được của con người được giữ nguyên khi nó được tạo (ví dụ: chữ hoa và chữ thường) để có thể truy cập bằng bất kỳ sự kết hợp nào giữa các ký tự ASCII chữ hoa và chữ thường? Đây chỉ là một thủ thuật regex ở đâu đó hay có điều gì khác đang xảy ra?

EDIT: Có vẻ như hành vi của tôi tò mò về được tìm thấy trong trường hợp bảo quản case-insensitive hệ thống tập tin sau khi một số nghiên cứu thêm ...


Không viết điều này như một câu trả lời vì tôi không biết chắc chắn nữa nhưng tôi tin rằng bạn không thể có ~ / Tài liệu và ~ / tài liệu trong hệ thống tệp đó. Nhưng khi bạn cd ~ / Documents hoặc ~ / Documents bạn sẽ đến cùng một vị trí và vỏ của bạn sẽ "chơi đẹp" bằng cách nhớ những gì bạn đã gõ. Mặt khác là một số FS lưu trữ theo cách nó được tạo ra trong một phụ trợ. khối dữ liệu. Ví dụ: lưu trữ ~ / Tài liệu trong bảng tra cứu nhưng ghi vào FS dưới dạng ~ / tài liệu. Về cơ bản tạo ra một ảo ảnh rằng hệ thống tập tin quan tâm đến vỏ khi nó không.
coteyr

Từ những gì tôi đã quan sát, trong trường hợp một thư mục chứa hai tên tệp giống hệt nhau ngoại trừ trường hợp, các hệ thống tệp không phân biệt chữ hoa chữ thường có thể đáp ứng yêu cầu cho một tệp đã cho bằng cách tự ý chọn một tệp. Những tình huống như vậy có thể phát sinh nếu các quy tắc chuyển đổi chữ hoa / chữ thường thay đổi sau khi tệp được tạo.
supercat

Thông tin thú vị về tính chất bảo quản trường hợp của NTFS: superuser.com/questions/364057/why-is-ntfs-case-sensitive
Luke Luke

Câu trả lời:


14

Hệ thống tệp không phân biệt chữ hoa chữ thường chỉ có nghĩa là bất cứ khi nào hệ thống tệp phải hỏi "A có tham chiếu cùng tệp / thư mục như B không?" nó so sánh tên của các tệp / thư mục bỏ qua sự khác biệt về chữ hoa / chữ thường (chính xác số lượng chênh lệch chữ hoa / chữ thường phụ thuộc vào hệ thống tập tin. Nó không rõ ràng khi bạn vượt qua ASCII). Một hệ thống tập tin phân biệt chữ hoa chữ thường không bỏ qua những khác biệt đó.

Một hệ thống tập tin bảo quản trường hợp lưu trữ tên tập tin như được đưa ra. Một hệ thống tập tin không bảo quản trường hợp không; thông thường, nó sẽ chuyển đổi tất cả các chữ cái thành chữ hoa trước khi lưu trữ chúng (về mặt lý thuyết, nó có thể sử dụng chữ thường hoặc trường hợp RaNsOm NoTe hoặc bất cứ thứ gì, nhưng AFAIK tất cả các chữ cái trong thế giới thực được sử dụng chữ hoa).

Bạn có thể đặt hai thuộc tính đó lại với nhau trong bất kỳ kết hợp nào. Tôi không chắc chắn nếu bạn có thể tìm thấy các hệ thống tệp không phân biệt chữ hoa chữ thường, nhưng bạn chắc chắn có thể tạo một hệ thống. Tất cả các kết hợp khác tồn tại hoặc tồn tại trong các hệ thống thực, mặc dù.

Vì vậy, một hệ thống tệp bảo mật trường hợp, không phân biệt chữ hoa chữ thường (loại phổ biến nhất của hệ thống tệp không phân biệt chữ hoa chữ thường) sẽ lưu trữ và trả về tên tệp trong bất kỳ cách viết hoa nào bạn đã tạo hoặc đổi tên chúng, nhưng khi so sánh hai tên tệp tồn tại, để mở một, xóa một, v.v.) nó sẽ bỏ qua các trường hợp khác nhau.

Khi bạn sử dụng hệ thống tệp không phân biệt chữ hoa chữ thường trên hộp Unix, các tiện ích khác nhau sẽ làm những điều kỳ lạ vì Unix thường sử dụng hệ thống tệp phân biệt chữ hoa chữ thường để họ không mong đợi Document1document1là cùng một tệp.

Trong pwdtrường hợp, những gì bạn đang thấy là theo mặc định, nó chỉ xuất ra đường dẫn bạn thực sự sử dụng để đến thư mục. Vì vậy, nếu bạn đã đến đó thông qua cd DirName, nó sẽ sử dụng DirNametrong đầu ra. Nếu bạn đã đến đó thông qua DiRnAmE, bạn sẽ thấy DiRnAmEtrong đầu ra. Bash thực hiện điều này bằng cách theo dõi cách bạn đến thư mục hiện tại của mình trong $PWDbiến môi trường. Chủ yếu đây là cho các liên kết tượng trưng (nếu bạn cdvào một liên kết tượng trưng, ​​bạn sẽ thấy liên kết tượng trưng trong đó pwd, mặc dù thực tế nó không phải là một phần của đường dẫn đến thư mục hiện tại của bạn). Nhưng nó cũng mang lại hành vi hơi kỳ lạ mà bạn quan sát được trên các hệ thống tệp không phân biệt chữ hoa chữ thường. Tôi nghi ngờ rằng pwd -Psẽ cung cấp cho bạn tên thư mục bằng cách sử dụng trường hợp được lưu trữ trên đĩa, nhưng chưa được thử nghiệm.


Tôi có thể biết bạn đánh tôi đến cái này! (nâng cấp)
Fabby
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.