ฉันจะพยายามให้คำตอบพื้นฐานว่าระบบ Unix จัดการกับไฟล์อย่างไร ดังที่คนอื่น ๆ ชี้ไปที่การใช้คำถามของคุณทำให้เข้าใจผิดเนื่องจากไฟล์เหล่านั้นไม่ได้รายงานว่าเป็นประเภทใดและเคอร์เนลเองไม่ได้ตัดสินใจว่าจะใช้แอปพลิเคชันใด
ในระบบปฏิบัติการ Unix และ Windows ไฟล์จะถูกจัดโครงสร้างตามลำดับไบต์ จากระบบปฏิบัติการของ Tanenbaum ฉบับที่สาม:
ผลที่ได้คือระบบปฏิบัติการไม่ทราบหรือไม่สนใจสิ่งที่อยู่ในไฟล์ ทั้งหมดที่เห็นคือไบต์ ความหมายใด ๆ จะต้องถูกกำหนดโดยโปรแกรมระดับผู้ใช้
นี่คือเหตุผลที่ในสภาพแวดล้อมเดสก์ท็อปxdg-open
ถูกใช้เพื่อกำหนดแอปพลิเคชั่นเริ่มต้นสำหรับการเปิดไฟล์บางประเภท
บนระบบ Unix, ไฟล์มีความแตกต่างระหว่างไฟล์ปกติและไฟล์พิเศษ ไฟล์ปกติเป็นเพียงข้อมูลผู้ใช้ซึ่งอาจเป็นไฟล์ข้อความ (การเข้ารหัส ASCII หรือ Unicode) หรือไบนารี (รหัสที่รันได้) ไฟล์พิเศษคือไฟล์ที่จำเป็นสำหรับการใช้งานระบบปฏิบัติการ สิ่งเหล่านี้รวมถึงไดเรกทอรีลิงค์ไปป์ซ็อกเก็ตและไฟล์อุปกรณ์ ¹
เป็นไปตามข้อตกลงที่ชื่อไฟล์มีส่วนขยายเพื่อระบุประเภทของไฟล์ที่อาจเป็นเช่น * .c สำหรับซอร์สโค้ด C, * .html สำหรับหน้าเว็บ ฯลฯ จาก Tanenbaum:
ในบางระบบ (เช่น UNIX) นามสกุลไฟล์เป็นเพียงการประชุมและไม่ได้มีการบังคับใช้โดยระบบปฏิบัติการ ไฟล์ที่ชื่อ file.txt อาจเป็นไฟล์ข้อความบางประเภท แต่ชื่อนั้นมีมากกว่าที่จะเตือนเจ้าของมากกว่าการถ่ายทอดข้อมูลจริงใด ๆ ไปยังคอมพิวเตอร์ ในทางกลับกันคอมไพเลอร์ C อาจยืนยันว่าไฟล์นั้นคือการคอมไพล์ด้วย. c และอาจปฏิเสธที่จะคอมไพล์ไฟล์เหล่านั้นหากไม่มี
หากไฟล์ถูกบันทึกหรือเปลี่ยนชื่อโดยไม่มีนามสกุลที่เหมาะสมไฟล์นั้นจะยังคงอยู่ในรูปแบบเดียวกันสำหรับไฟล์ประเภทนั้น นี่คือวิธีที่ผู้จัดการไฟล์ส่วนใหญ่ตัดสินใจว่าแอปพลิเคชันใดที่จะเปิดไฟล์ด้วยและทำไมไม่มีส่วนขยายส่วนใหญ่จะแจ้งให้ผู้ใช้ด้วย "เลือกโปรแกรมที่คุณต้องการใช้เพื่อเปิดไฟล์นี้:"
สุดท้ายตัวแปรสภาพแวดล้อมจะใช้ในการกำหนดการตั้งค่าทั้งระบบและระดับผู้ใช้ ยกตัวอย่างเช่นตัวแปรEDITOR
ที่ใช้ในการระบุตัวแก้ไขข้อความเพื่อเปิดเมื่อจัดการเช่น text vim
, nano
ฯลฯ นี่คือวิธีที่กระบวนการแก้ไขทราบว่าจะเปิดเช่นเมื่อแก้ไขgit
กระทำข้อความ มิฉะนั้นคุณถูกต้องว่าคุณต้องระบุแอปพลิเคชันที่จะใช้ โปรดทราบว่าvim
ตรวจจับประเภทไฟล์โดยการตรวจสอบส่วนขยายและตรวจสอบเนื้อหาไฟล์หากมีการfiletype on
ตั้งค่าซึ่งจะใช้การเน้นไวยากรณ์ที่ถูกต้องการเยื้องและอื่น ๆ²
TL; DR
โดยสรุปแล้วมันเป็นแอพพลิเคชั่นระดับผู้ใช้ที่กำหนดโปรแกรมที่จะเปิดไฟล์ประเภทใดประเภทหนึ่งและไม่ใช่ระบบปฏิบัติการของตัวเอง