Tôi sẽ cố gắng đưa ra một câu trả lời cơ bản về cách các hệ thống Unix xử lý các tệp. Như những người khác đã chỉ ra, việc đặt câu hỏi của bạn là sai lệch vì bản thân các tệp không báo cáo loại đó là gì và chính hạt nhân không quyết định sử dụng ứng dụng nào.
Trong các hệ điều hành Unix và Windows, các tệp được cấu trúc đơn giản như một chuỗi các byte. Từ hệ điều hành của Tanenbaum , phiên bản thứ ba:
Trong thực tế, hệ điều hành không biết hoặc quan tâm những gì trong tập tin. Tất cả những gì nó thấy là byte. Bất kỳ ý nghĩa phải được áp đặt bởi các chương trình cấp người dùng.
Đây là lý do tại sao, trong môi trường máy tính để bàn, xdg-open
được sử dụng để xác định các ứng dụng mặc định để mở các loại tệp cụ thể.
Trên hệ thống Unix, các tệp được phân biệt giữa các tệp thông thường và các tệp đặc biệt . Một tệp thông thường chỉ là dữ liệu người dùng có thể là tệp văn bản (mã hóa ASCII hoặc Unicode) hoặc nhị phân (mã thực thi). Các tệp đặc biệt là các tệp cần thiết để chạy HĐH. Chúng bao gồm các thư mục, liên kết, đường ống, ổ cắm và tập tin thiết bị. ¹
Theo quy ước, tên tệp chứa các phần mở rộng để cho biết loại tệp nào có thể là ví dụ * .c cho mã nguồn C, * .html cho các trang web, v.v. Từ Tanenbaum:
Trong một số hệ thống (ví dụ UNIX), phần mở rộng tệp chỉ là quy ước và không được hệ điều hành thi hành. Một tệp có tên file.txt có thể là một loại tệp văn bản, nhưng tên đó là để nhắc nhở chủ sở hữu hơn là truyền đạt bất kỳ thông tin thực tế nào đến máy tính. Mặt khác, một trình biên dịch C thực sự có thể nhấn mạnh rằng các tệp đó là để biên dịch kết thúc bằng .c và nó có thể từ chối biên dịch chúng nếu không.
Nếu một tệp được lưu hoặc đổi tên mà không có phần mở rộng thích hợp, nó vẫn giữ nguyên định dạng cho loại tệp đó. Đây là cách hầu hết các trình quản lý tệp quyết định ứng dụng nào để mở tệp và tại sao không có tiện ích mở rộng nhất sẽ nhắc người dùng "Chọn chương trình bạn muốn sử dụng để mở tệp này:".
Cuối cùng, các biến môi trường được sử dụng để xác định cài đặt toàn hệ thống và cấp độ người dùng. Ví dụ, các biến EDITOR
được sử dụng để xác định các văn bản soạn thảo để mở ra khi xử lý văn bản ví dụ vim
, nano
vv Đây là cách các quy trình biết được soạn thảo để mở, giống như khi chỉnh sửa một git
thông điệp cam kết. Mặt khác, bạn đúng rằng bạn phải chỉ định ứng dụng nào sẽ sử dụng. Lưu ý rằng vim
phát hiện các loại tệp bằng cách kiểm tra các phần mở rộng và kiểm tra nội dung tệp, nếu cài đặt filetype on
được đặt, sau đó áp dụng tô sáng cú pháp chính xác, thụt lề, v.v. ²
TL; DR
Tóm lại, chính các ứng dụng cấp người dùng sẽ xác định chương trình nào sẽ mở một loại tệp cụ thể chứ không phải hệ điều hành.