Linux เลือกแอปพลิเคชั่นใดในการเปิดไฟล์


38

หากไฟล์บอกระบบปฏิบัติการในรูปแบบไฟล์ระบบปฏิบัติการจะเลือกแอปพลิเคชั่นที่จะเปิดโดยค่าเริ่มต้นอย่างไร

ใน Windows จะมีการจัดเก็บความสัมพันธ์ไว้ในตารางรีจิสทรีหรือไม่

Linux เลือกแอปพลิเคชั่นใดในการเปิดไฟล์

ฉันเคยใช้ Nautilus บ่อยครั้ง แต่ตอนนี้ฉันเปลี่ยนเป็นเทอร์มินัล เป็นความจริงหรือเปล่าที่เทอร์มินัลเราต้องระบุแอปพลิเคชันที่จะเปิดไฟล์อย่างชัดเจนเสมอ การตั้งค่าของแอปพลิเคชั่นที่จะเปิดไฟล์ในรูปแบบที่แน่นอนโดยค่าเริ่มต้นเป็นของตัวจัดการไฟล์ (เช่น Nautilus) และไม่เป็นปัญหาเมื่อเราอาศัยอยู่ในอาคารหรือไม่?


24
Linux เป็นเพียงเคอร์เนลระบบปฏิบัติการ ฉันคิดว่าคุณหมายถึงสภาพแวดล้อมเดสก์ทอปของคุณหรือจัดการไฟล์ของคุณที่นี่ นั่นอาจจะแตกต่างกันไปใน Android, ChromeOS, Linux (หรือที่ไม่ใช่ Linux) ระบบปฏิบัติการที่ใช้ KDE, Gnome, XFCE ... หรืออื่น ๆ )
Stéphane Chazelas

อาจ. ฉันไม่รู้ว่าทำงานอะไร ฉันใช้คำพังเพย แต่ก็อยากรู้เรื่องทั่วไปด้วย
ทิม

จากนั้นชี้แจงสภาพแวดล้อมระบบปฏิบัติการและแอพพลิเคชั่นและเดสก์ท็อป เช่นเดียวกับหอยโข่งใน Ubuntu 12.04 พร้อมเดสก์ท็อป "unity"
Stéphane Chazelas

(1) ฉันอยู่ภายใต้ Ubuntu 12.04 เดสก์ท็อปของฉันเป็น Gnome หรือ "Unity" หรือไม่? (2) ฉันเคยใช้ Nautilus บ่อยครั้ง แต่ตอนนี้ฉันเปลี่ยนเป็นเทอร์มินัล เป็นความจริงหรือเปล่าที่เทอร์มินัลเราต้องระบุแอปพลิเคชันที่จะเปิดไฟล์อย่างชัดเจนเสมอ การตั้งค่าของแอปพลิเคชั่นที่จะเปิดไฟล์ในรูปแบบที่แน่นอนโดยค่าเริ่มต้นเป็นของตัวจัดการไฟล์ (เช่น Nautilus) และไม่เป็นปัญหาเมื่อเราอาศัยอยู่ในอาคารหรือไม่?
ทิม

คำตอบ:


35

อาจมีกลไกที่แตกต่างกันในการจัดการการตั้งค่าเริ่มต้นเหล่านี้ อย่างไรก็ตามคำตอบอื่น ๆ มักจะมุ่งเน้นไปที่สภาพแวดล้อมเดสก์ท็อปที่สมบูรณ์ซึ่งแต่ละคำตอบมีกลไกของตัวเอง กระนั้นสิ่งเหล่านี้ไม่ได้ติดตั้งไว้ในระบบเสมอ (ฉันใช้ OpenBox บ่อยครั้ง) และในกรณีนี้xdg-openอาจมีการใช้เครื่องมือต่าง ๆ เช่น

การอ้างอิงArch Wiki :

xdg-open เป็นเครื่องมือที่ไม่ขึ้นกับเดสก์ท็อปสำหรับการกำหนดค่าแอปพลิเคชันเริ่มต้นของผู้ใช้ แอ็พพลิเคชันจำนวนมากเรียกใช้คำสั่ง xdg-open ภายใน

ในขณะนี้ฉันใช้ Ubuntu (12.04) และxdg-openใช้ได้ อย่างไรก็ตามเมื่อคุณใช้สภาพแวดล้อมเดสก์ท็อปที่สมบูรณ์แบบเช่น GNOME xdg-openทำหน้าที่เป็นผู้ส่งต่ออย่างง่ายและถ่ายทอดการร้องขอไฟล์ไปยัง DE ของคุณซึ่งเป็นอิสระในการจัดการตามที่ต้องการ (ดูคำตอบอื่น ๆ ของ GNOME และ Nautilus เป็นต้น) .

ภายในสภาพแวดล้อมเดสก์ท็อป (เช่น GNOME, KDE หรือ Xfce), xdg-open เพียงส่งผ่านอาร์กิวเมนต์ไปยังแอปพลิเคชันเปิดไฟล์ของสภาพแวดล้อมเดสก์ท็อป (gvfs-open, kde-open หรือ exo-open ตามลำดับ) ซึ่งหมายความว่า การเชื่อมโยงถูกปล่อยไว้จนถึงสภาพแวดล้อมเดสก์ท็อป

... ซึ่งนำคุณกลับไปที่คำตอบอื่น ๆ ในกรณีนั้น ยังเนื่องจากเป็น Unix & Linux และไม่ถาม Ubuntu:

เมื่อตรวจไม่พบสภาพแวดล้อมเดสก์ทอป (เช่นเมื่อมีตัวจัดการหน้าต่างแบบสแตนด์อโลนเช่น Openbox) xdg-open จะใช้ไฟล์การกำหนดค่าของตัวเอง

ทั้งหมด:

                            |-- no desktop env. > handle directly.
User Request > xdg-open > --|
                            |-- desktop env.    > pass information to the DE.

หากกรณีแรกคุณจะต้องกำหนดค่าxdg-openโดยตรงโดยใช้xdg-mimeคำสั่ง (ซึ่งจะช่วยให้คุณเห็นแอปพลิเคชันที่ควรจัดการกับไฟล์ใด) ในกรณีที่สอง ...

                        |-- GNOME? > gvfs-open handles the request.
                        |
Info. from xdg-open > --|-- KDE?   > kde-open handles the request.
                        |
                        |-- XFCE?  > exo-open handles the request.

... คุณจะต้องกำหนดค่าตัวเปิดไฟล์ที่เกี่ยวข้องกับสภาพแวดล้อมเดสก์ท็อปของคุณ ในบางกรณีการกำหนดค่าที่ทำผ่านxdg-mimeอาจถูกเปลี่ยนเส้นทางไปยังเครื่องมือการกำหนดค่าที่เหมาะสมในสภาพแวดล้อมของคุณ


11
ในโลกอุดมคติ Gnome และ KDE จะใช้การตั้งค่า xdg เพื่อเลือกแอปที่จะเปิดไฟล์และจะให้ UIs เปลี่ยนตัวเลือก xdg จากนั้นเราสามารถมีฐานข้อมูลการตั้งค่าเดียวได้แทนที่จะเป็นหนึ่งฐานข้อมูลสำหรับแต่ละ DE อนิจจา xdg ปรากฏว่าสายเกินไป
joeytwiddle

2
ในโลกอุดมคติคุณจะไม่มีสาม DEs
Russell Borogove

1
@RussellBorogove - จากนั้นเราทุกคนควรย้ายไปที่ Windows มันเป็นโลกในอุดมคติ
don_crissti

@don_crissti ฉันคิดว่านี่มีความหมายมากกว่า "เหมาะสำหรับนักพัฒนาหรือผู้ดูแลระบบ" ในขณะที่มันเป็นสิ่งที่ดีที่จะนำเสนอความหลากหลายให้กับผู้ใช้ปลายทางมันจะง่ายขึ้นมาก (แต่ไม่จำเป็นต้อง "ดีกว่า") สำหรับนักออกแบบที่จะมุ่งเน้นไปที่ระบบเดียว xdg-openเป็นเพียงหนึ่งในองค์ประกอบเหล่านี้ซึ่งพยายามนำทั้งสองอย่างมารวมกัน
จอห์น WH สมิ ธ

1
@John - เกี่ยวกับผู้ดูแลระบบ & ผู้พัฒนาแอพ / นักออกแบบที่หลากหลาย: ตกลงแล้ว ... แต่จากนั้น devs ต้นน้ำสามารถทำได้มาก ในโลกอุดมคติแทนที่จะบ่นเกี่ยวกับสิ่งนี้หรือสิ่งนั้นเราทุกคนจะมีส่วนร่วมในโครงการต้นน้ำเช่น KDE, Gnome และอื่น ๆ เพื่อปรับปรุงการใช้งานและการทำซ้ำระหว่าง DEs หากเราทุกคน (ล้านคน) ใช้ความพยายามเพียงเล็กน้อยปัญหาทั้งหมดนี้จะได้รับการแก้ไขภายในสองสามวัน
don_crissti

11

จากรายการwiki

GUIs ที่ใช้ Linux เช่น KDE และ GNOME สนับสนุนการเชื่อมโยงที่ใช้ประเภท MIME ตัวอย่างเช่น MIME type text / plain จะเชื่อมโยงกับ text editor

นอกจากนี้คำตอบนี้มีรายละเอียดเพิ่มเติม

ตัวจัดการไฟล์มักจะใช้ตัวเลือก a และ b หลายอย่างร่วมกัน (เช่นดูที่นามสกุลไฟล์ก่อนถ้าไม่รู้จัก (หรือไฟล์ไม่มีนามสกุล) ดูเนื้อหา)

ชนิดของไฟล์ไม่ถูกจัดเก็บเป็นเมทาดาทาบนระบบไฟล์ linux ทั่วไป

จากคำตอบนี้ฉันเห็นข้อมูลด้านล่าง

ตัวจัดการไฟล์ (ตามค่าเริ่มต้น) จะใช้ประเภท MIME ของไฟล์เพื่อพิจารณาว่าจะเปิดโปรแกรมใด เมื่อติดตั้งแอปพลิเคชันแล้วสามารถระบุประเภท MIME ที่สามารถเปิดได้และคำสั่งเพื่อใช้เปิดไฟล์ในไฟล์. desktop ซึ่งอยู่ใน / usr / share / applications นี่คือไฟล์ที่ใช้สำหรับเมนูทางลัดบนเดสก์ท็อป ฯลฯ


1
คำถามของฉันคือ "กำหนดรูปแบบไฟล์" กำหนดแอปพลิเคชั่นที่จะเปิดไฟล์
ทิม

11

ไฟล์ไม่ได้บอกรูปแบบไฟล์ของระบบปฏิบัติการด้วยข้อยกเว้นหนึ่งประการ:

หากไฟล์ที่ปฏิบัติการได้เริ่มต้นด้วยบรรทัดที่เรียกว่า shebang เช่น

#! /usr/bin/perl

จากนั้นบรรทัดนี้จะบอกเคอร์เนล Linux ว่าควรเริ่มต้นด้วย/usr/bin/perl(นั่นคือแทนที่จะเรียกใช้ไฟล์นี้ควรรันusr/bin/perlและให้ไฟล์นี้เป็นอาร์กิวเมนต์) หลักสูตรนี้ใช้งานได้เฉพาะกับรูปแบบไฟล์ที่ไม่สนใจ (หรือเข้าใจ) เช่นเส้น Shebang

นอกเหนือจากนั้นระบบปฏิบัติการดังกล่าวไม่รู้จักประเภทไฟล์ อย่างไรก็ตามโปรแกรมหลายโปรแกรมที่อนุญาตให้เปิดไฟล์อื่นมีกลไกของตัวเองในการตัดสินใจว่าจะใช้โปรแกรมใดเพื่อเปิดไฟล์ใด ที่สามารถเป็นรายการภายในโปรแกรมเอง (เช่น Firefox รักษารายการดังกล่าว) หรือโปรแกรมสามารถมอบหมายให้สภาพแวดล้อมเดสก์ทอป (ซึ่งมีหลายสำหรับ Linux)

โดยปกติกลไกเหล่านั้นจะพิจารณาชื่อไฟล์เพื่อตัดสินใจว่าไฟล์ประเภทใด ข้อยกเว้นคือไคลเอนต์อีเมลและเว็บเบราว์เซอร์ซึ่งโดยปกติแล้วประเภทของไฟล์จะถูกกำหนดอย่างชัดเจนโดยเซิร์ฟเวอร์ / ระบุไว้ในอีเมล

กลไกมักจะมีสองขั้นตอน:

  • อันดับแรกจากชื่อไฟล์หรือข้อมูลที่ให้มากำหนดประเภท MIME ของไฟล์ (ประเภท MIME เป็นรายการประเภทไฟล์ที่ได้มาตรฐาน แต่ขยายได้)
  • ประการที่สองจากประเภท MIME ให้พิจารณาว่าโปรแกรมใดที่จะดำเนินการโดยปกติผ่านการเรียงลำดับของรีจิสทรีที่ได้รับการดูแลโดยตัวโปรแกรมเองหรือโดยสภาพแวดล้อมเดสก์ท็อปที่โปรแกรมถูกเขียนขึ้นมา

ขอบคุณ เป็นความจริงไหมที่เทอร์มินัลเราต้องระบุแอปพลิเคชันที่จะเปิดไฟล์ (ยกเว้นสคริปต์ด้วย shebang) อย่างชัดเจนเสมอ การตั้งค่าของแอปพลิเคชั่นที่จะเปิดไฟล์ในรูปแบบที่แน่นอนโดยค่าเริ่มต้นเป็นของตัวจัดการไฟล์ (เช่น Nautilus) หรือไม่ในขณะที่มันอยู่ในเทอร์มินัล
ทิม

หากคุณต้องการใช้การเชื่อมโยง Gnome จากบรรทัดคำสั่งคุณสามารถใช้คำสั่งgnome-openได้ ฉันแน่ใจว่ามีเครื่องมือบรรทัดคำสั่งที่คล้ายกันสำหรับสภาพแวดล้อมเดสก์ทอปอื่น ๆ แก้ไข:ฉันเพิ่งทราบว่า John WH Smith ให้คำสั่งที่เป็นอิสระจากสภาพแวดล้อมเดสก์ทอปของคุณ
celtschk

6
การแก้ไข : บรรทัด shebang ไม่ใช่ข้อความไปยังเคอร์เนล มันเป็นข้อความไปที่เปลือก
Kazark


2
เนื่องจากลิงก์ไปยังรหัสจริงในหน้าลิงก์นั้นไม่ทำงานตอนนี้นี่เป็นอีกลิงค์หนึ่งของเคอร์เนลโค้ดที่จัดการบรรทัด shebang: lxr.free-electrons.com/source/fs/binfmt_script.c - แน่นอนว่าคุณสามารถทำได้ เพียงแค่ติดตั้งเคอร์เนลแหล่งที่มาด้วยตัวคุณเองแล้วดูในไฟล์
celtschk

4

มันทำคล้ายกับ MS-Windows

มันไม่ได้ทำโดยระบบปฏิบัติการ มันทำโดยตัวจัดการไฟล์ซึ่งเป็นส่วนหนึ่งของระบบหน้าต่าง โดยทั่วไปจะเป็นส่วนหนึ่งของชื่อไฟล์หลังจากใช้จุดสุดท้าย.ในการตัดสินใจ มีวิธีตั้งค่าไว้ในการตั้งค่าหรือเมื่อคุณคลิกขวาที่ไฟล์

ดังนั้นไฟล์ไม่ได้บอกระบบปฏิบัติการไฟล์ไม่ทำงานจึงไม่สามารถทำอะไรได้ด้วยตัวเอง แต่ตัวจัดการไฟล์ดูที่ชื่อไฟล์ตัวจัดการไฟล์อาจมองเข้าไปในไฟล์ได้เช่นเดียวกับที่fileยูทิลิตี้ทำ


เนื้อหาใน Windows ไม่ได้ดำเนินการโดยตัวจัดการไฟล์ต่อไฟล์ แอปพลิเคชันใด ๆ ที่สามารถโทรshell32!ShellExecute()ถึงแม้ว่า shell32 เป็นส่วนหนึ่งของ Windows Shell แต่ไม่ใช่ส่วนหนึ่งของ Windows Explorer ซึ่งเป็นตัวจัดการไฟล์เริ่มต้น
Ruslan

3

อย่างที่ @richard กล่าวมันคล้ายกับ Windows ตัวจัดการไฟล์ทั่วไปอาจดูที่ชื่อไฟล์ก่อนและพยายามจดจำนามสกุลไฟล์ที่เกี่ยวข้องกับโปรแกรม หากล้มเหลวอาจพยายามเปิดไฟล์และค้นหาส่วนหัว หากคุณพยายามอ่านไฟล์ที่ไม่ใช่ข้อความ (เช่น. jpeg) คุณจะเห็นสตริงของข้อมูลที่อธิบายไฟล์ ตัวอย่างเช่นนี่คือบรรทัดแรกของ. jpeg ที่ฉันโกหก:

'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xfe\x00;CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), quality = 90'


2
ตัวจัดการไฟล์บางตัววิเคราะห์เนื้อหาของไฟล์ก่อนส่วนขยายชื่อไฟล์ (บางทีพวกเขาอาจจะไม่สนใจส่วนขยายเสมอ เช่นในโลมาของ KDE หากคุณมีภาพ GIF ที่เชื่อมโยงกับเบราว์เซอร์และ PNG ด้วยโปรแกรมดูรูปภาพการเปลี่ยนชื่อfile.pngไฟล์ PNG เป็นfile.gifจะยังคงเปิดโปรแกรมดูรูปภาพ และถ้าคุณลบไฟล์มันจะเปิดใน text editor
Ruslan

3

ฉันจะพยายามให้คำตอบพื้นฐานว่าระบบ 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

โดยสรุปแล้วมันเป็นแอพพลิเคชั่นระดับผู้ใช้ที่กำหนดโปรแกรมที่จะเปิดไฟล์ประเภทใดประเภทหนึ่งและไม่ใช่ระบบปฏิบัติการของตัวเอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.