लिनक्स एक फाइल को खोलने के लिए किस एप्लिकेशन को चुनता है?


38

यदि कोई फ़ाइल OS को अपना फ़ाइल स्वरूप बताती है, तो OS किस तरह से डिफ़ॉल्ट रूप से इसे खोलने के लिए आवेदन करता है?

विंडोज में, क्या एसोसिएशन रजिस्ट्री तालिका में संग्रहीत है?

लिनक्स एक फाइल को खोलने के लिए किस एप्लिकेशन को चुनता है?

मैं नॉटिलस का बहुत उपयोग करता था, लेकिन अब मैं टर्मिनल में बदल गया हूं। क्या यह सच है कि टर्मिनल में, हमें हमेशा स्पष्ट रूप से निर्दिष्ट करना होता है कि कौन सी फाइल को खोलना है? डिफ़ॉल्ट रूप से एक निश्चित प्रारूप की फ़ाइल खोलने के लिए किस एप्लिकेशन की सेटिंग्स फ़ाइल प्रबंधक (उदाहरण के लिए Nautilus) से संबंधित हैं, और जब हम टर्मिनलों में रह रहे हैं तो यह कोई समस्या नहीं है?


24
लिनक्स सिर्फ ओएस कर्नेल है। मुझे लगता है कि आप अपने डेस्कटॉप वातावरण या अपने फ़ाइल प्रबंधक का मतलब यहाँ। यह शायद Android, ChromeOS, Linux (या गैर-लिनक्स) के आधार पर अलग-अलग होने जा रहा है, जो KDE, Gnome, XFCE ... या अन्य चला रहे OSes
Stéphane Chazelas

शायद। मुझे नहीं पता कि कौन सा काम करता है। मैं सूक्ति का उपयोग कर रहा हूं, लेकिन सामान्य के बारे में भी जानना चाहूंगा।
टिम

फिर ओएस और डेस्कटॉप वातावरण और एप्लिकेशन को स्पष्ट करें। "एकता" डेस्कटॉप के साथ Ubuntu 12.04 में नॉटिलस की तरह।
स्टीफन चेजेलस

(१) मैं उबुन्टु १२.०४ के अधीन हूं। क्या मेरा डेस्कटॉप सूक्ति या "एकता" है? (२) मैं नॉटिलस का बहुत उपयोग करता था, लेकिन अब मैं टर्मिनल में बदल गया हूं। क्या यह सच है कि टर्मिनल में, हमें हमेशा स्पष्ट रूप से निर्दिष्ट करना होता है कि कौन सी फाइल को खोलना है? डिफ़ॉल्ट रूप से एक निश्चित प्रारूप की फ़ाइल खोलने के लिए किस एप्लिकेशन की सेटिंग्स फ़ाइल प्रबंधक (उदाहरण के लिए Nautilus) से संबंधित हैं, और जब हम टर्मिनलों में रह रहे हैं तो यह कोई समस्या नहीं है?
टिम

जवाबों:


35

इन डिफ़ॉल्ट सेटिंग्स को संभालने के लिए अलग-अलग तंत्र हो सकते हैं। हालांकि, अन्य उत्तर पूर्ण डेस्कटॉप वातावरण पर ध्यान केंद्रित करते हैं, उनमें से प्रत्येक का अपना तंत्र है। फिर भी, ये हमेशा एक सिस्टम पर स्थापित नहीं होते हैं (मैं OpenBox a का उपयोग करता हूं), और इस मामले में, जैसे उपकरण का xdg-openउपयोग किया जा सकता है।

आर्क विकी का हवाला देते हुए :

xdg-open एक डेस्कटॉप-स्वतंत्र उपकरण है जो किसी उपयोगकर्ता के डिफ़ॉल्ट अनुप्रयोगों को कॉन्फ़िगर करने के लिए है। कई एप्लिकेशन आंतरिक रूप से xdg- ओपन कमांड को आमंत्रित करते हैं।

इस समय, मैं Ubuntu (12.04) का उपयोग कर रहा हूं और xdg-openउपलब्ध है। हालाँकि, जब आप पूर्ण डेस्कटॉप वातावरण का उपयोग करते हैं, जैसे कि GNOME, xdg-openएक साधारण फारवर्डर के रूप में कार्य करता है, और आपके DE को फ़ाइल अनुरोधों को रिले करता है, जो तब इसे संभालने के लिए स्वतंत्र है जैसा कि वह चाहता है (उदाहरण के लिए GNOME और Nautilus के अन्य उत्तर देखें) ।

एक डेस्कटॉप वातावरण (जैसे GNOME, KDE, या Xfce) के अंदर, xdg-open केवल उस डेस्कटॉप वातावरण के फ़ाइल-ओपनर एप्लिकेशन (gvfs-open, kde-open, या exo-open) के तर्कों को क्रमशः पास करता है, जिसका अर्थ है कि संघों को डेस्कटॉप वातावरण तक छोड़ दिया जाता है।

... जो आपको उस मामले में अन्य उत्तरों को वापस लाता है। फिर भी, चूंकि यह यूनिक्स और लिनक्स है, और उबंटू नहीं पूछें:

जब कोई डेस्कटॉप वातावरण का पता नहीं चलता है (उदाहरण के लिए जब कोई स्टैंडअलोन विंडो मैनेजर, जैसे ओपनबॉक्स चलाता है), तो 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
एक आदर्श दुनिया में, ग्नोम और केडीई xdg सेटिंग्स का उपयोग करके एक फ़ाइल खोलने के लिए कौन सा ऐप चुनेंगे, और xdg विकल्पों को बदलने के लिए UI प्रदान करेंगे। तब हमारे पास प्रत्येक DE के लिए केवल एक सेटिंग डेटाबेस हो सकता है। अलस xdg बहुत देर से दिखाई दिया।
joeytwiddle

2
एक आदर्श दुनिया में, आपके पास तीन डीई नहीं होंगे।
रसेल बोरोगोव

1
@RussellBorogove - फिर हम सभी को विंडोज पर जाना चाहिए। यह एक आदर्श दुनिया है।
don_crissti

@don_crissti मुझे लगता है कि यह "डेवलपर या प्रशासक के लिए आदर्श" के रूप में अधिक था। हालांकि यह एक अंतिम उपयोगकर्ता के लिए विविधता की पेशकश करने के लिए एक बड़ी बात है, यह वास्तव में डिजाइनरों के लिए एकल प्रणाली पर ध्यान केंद्रित करने के लिए बहुत आसान (अभी तक जरूरी नहीं "बेहतर") होगा। xdg-openइन घटकों में से केवल एक है जो दोनों सिरों को एक साथ लाने की कोशिश करता है।
जॉन डब्ल्यूएच स्मिथ

1
@ जॉन - एडमीन और विभिन्न ऐप्स के बारे में देव / डिज़ाइनर: सहमत ... लेकिन फिर, अपस्ट्रीम देवता केवल इतना ही कर सकते हैं । एक आदर्श दुनिया में, इस या उस के बारे में शिकायत करने के बजाय, हम सभी डीईएस के बीच प्रयोज्यता और पुनरावृत्ति को बेहतर बनाने के लिए केडीई, ग्नोम आदि जैसी अपस्ट्रीम परियोजनाओं में योगदान देंगे । यदि हम सभी (लाखों) ने केवल एक छोटा सा प्रयास किया, तो ये सभी मुद्दे कुछ दिनों में हल हो जाएंगे।
don_crissti

11

से विकि प्रवेश,

लिनक्स आधारित GUI, जैसे KDE और GNOME, MIME प्रकार-आधारित संघों का समर्थन करते हैं। उदाहरण के लिए, MIME टाइप टेक्स्ट / प्लेन टेक्स्ट एडिटर से जुड़ा होगा।

साथ ही, इस उत्तर में अधिक विवरण हैं।

फ़ाइल प्रबंधक अक्सर विकल्प ए और बी के कुछ संयोजन का उपयोग करते हैं (उदाहरण के लिए फ़ाइल एक्सटेंशन को पहले देखें, अगर यह ज्ञात नहीं है (या फ़ाइल में एक्सटेंशन नहीं है), तो सामग्री को देखें)।

फ़ाइल का प्रकार सामान्य लिनक्स फ़ाइल सिस्टम पर मेटाडेटा के रूप में संग्रहीत नहीं है।

से इस सवाल का जवाब, मैं नीचे दी गई जानकारी देखें।

फ़ाइल प्रबंधक (Nautilus, डिफ़ॉल्ट रूप से) यह निर्धारित करने के लिए किस प्रोग्राम को खोलने के लिए MIME प्रकार की फ़ाइल का उपयोग करता है। जब कोई एप्लिकेशन इंस्टॉल होता है, तो यह निर्दिष्ट कर सकता है कि किस प्रकार के MIME इसे खोल सकते हैं और फ़ाइलों को खोलने के लिए उपयोग करने के लिए कमांड .desktop फ़ाइल जो / usr / शेयर / अनुप्रयोगों में रखी गई है। यह मेनू, डेस्कटॉप शॉर्टकट आदि के लिए उपयोग की जाने वाली फ़ाइल है।


1
मेरा प्रश्न "फ़ाइल का प्रारूप प्रकार दिया गया है", यह निर्धारित करता है कि फ़ाइल को खोलने के लिए कौन सा अनुप्रयोग है।
टिम

11

एक फ़ाइल OS को इसका फ़ाइल स्वरूप नहीं बताती है, एक अपवाद के साथ:

यदि एक निष्पादन योग्य फ़ाइल तथाकथित शेबंग रेखा से शुरू होती है, जैसे

#! /usr/bin/perl

फिर यह लाइन लिनक्स कर्नेल को बताती है कि इसे /usr/bin/perlइस फ़ाइल को निष्पादित करने के बजाय, इसे शुरू करना चाहिए (इसे usr/bin/perlफ़ाइल को तर्क के रूप में निष्पादित करना चाहिए )। यह निश्चित रूप से केवल फ़ाइल स्वरूपों के साथ काम करता है जो इस तरह की एक शेलंग लाइन को अनदेखा (या समझते हैं) करते हैं।

इसके अलावा, ऑपरेटिंग सिस्टम जैसे फ़ाइल प्रकारों के बारे में कुछ नहीं जानता है। हालाँकि कई प्रोग्राम जो अन्य फ़ाइलों को खोलने की अनुमति देते हैं, उनके पास यह तय करने के लिए कि कौन सी फ़ाइल का उपयोग करना है, यह तय करने का अपना तंत्र है। यह प्रोग्राम के अंदर ही एक सूची हो सकती है (उदाहरण के लिए फ़ायरफ़ॉक्स इस तरह की एक सूची को बनाए रखता है), या प्रोग्राम इसे डेस्कटॉप वातावरण में (जिनमें से लिनक्स के लिए कई हैं) को निर्दिष्ट कर सकता है।

आमतौर पर, वे तंत्र केवल फ़ाइल के प्रकार को तय करने के लिए फ़ाइल नाम पर विचार करते हैं; एक अपवाद ईमेल क्लाइंट और वेब ब्राउज़र हैं, जहां आमतौर पर फ़ाइल का प्रकार स्पष्ट रूप से सर्वर द्वारा दिया जाता है / मेल में कहा जाता है।

तंत्र आमतौर पर दो-चरणीय होता है:

  • सबसे पहले, फ़ाइल नाम या आपूर्ति की गई जानकारी से, फ़ाइल का MIME प्रकार निर्धारित करें (MIME प्रकार एक मानकीकृत, लेकिन फ़ाइल प्रकारों की एक्स्टेंसिबल सूची है)।
  • दूसरा, MIME प्रकार से, निर्धारित करें कि किस प्रोग्राम को निष्पादित करना है, आमतौर पर एक प्रकार की रजिस्ट्री के माध्यम से या तो प्रोग्राम या डेस्कटॉप वातावरण द्वारा प्रोग्राम को बनाए रखा जाता है।

धन्यवाद। क्या यह सच है कि टर्मिनल में, हमें हमेशा स्पष्ट रूप से निर्दिष्ट करना होता है कि कौन सी एप्लिकेशन को एक फ़ाइल खोलने के लिए है (शांग के साथ स्क्रिप्ट को छोड़कर)? डिफ़ॉल्ट रूप से एक निश्चित प्रारूप की फ़ाइल खोलने के लिए किस एप्लिकेशन की सेटिंग्स फ़ाइल प्रबंधक (उदा। Nautilus) से संबंधित हैं, जबकि यह एक मुद्दा नहीं है जब हम टर्मिनलों में रह रहे हैं?
टिम

यदि आप कमांड लाइन से सूक्ति संघों का उपयोग करना चाहते हैं, तो आप कमांड का उपयोग कर सकते हैं gnome-open। मुझे यकीन है कि अन्य डेस्कटॉप वातावरणों के लिए समान कमांड लाइन उपकरण हैं। संपादित करें: मैं बस ध्यान देता हूं कि जॉन डब्ल्यूएच स्मिथ एक कमांड देता है जो आपके डेस्कटॉप वातावरण से स्वतंत्र है।
celtschk

6
सुधार : शेबंग लाइन कर्नेल के लिए एक संदेश नहीं है; यह शेल का संदेश है ।
कज़र्क


2
चूंकि उस लिंक किए गए पेज में वास्तविक कोड का लिंक अब काम नहीं कर रहा है, यहाँ एक और लिंक कर्नेल कोड से जुड़ी है जो शेबंग लाइन्स: lxr.free-electrons.com/source/fs/binfmt_script.c - निश्चित रूप से आप भी कर सकते हैं। बस कर्नेल स्रोतों को स्वयं स्थापित करें और फ़ाइल में देखें।
celtschk

4

यह एमएस-विंडोज के समान किया जाता है।

यह ओएस द्वारा नहीं किया जाता है। यह फ़ाइल प्रबंधक द्वारा किया जाता है, विंडोिंग सिस्टम का एक हिस्सा। आमतौर पर अंतिम बिंदु के बाद फ़ाइल-नाम का हिस्सा .निर्णय लेने के लिए उपयोग किया जाता है। सेटिंग्स में उन्हें सेट करने का एक तरीका है, या जब आप किसी फ़ाइल पर राइट क्लिक करते हैं।

तो फ़ाइल OS को नहीं बताती है, फ़ाइल सक्रिय नहीं है इसलिए अपने आप कुछ भी नहीं कर सकती है, लेकिन फ़ाइल प्रबंधक फ़ाइल-नाम को देखता है, फ़ाइल प्रबंधक भी फ़ाइल के अंदर देख सकता है जितना कि fileउपयोगिता है।


यकीनन, विंडोज में यह फ़ाइल प्रबंधक द्वारा प्रति se नहीं किया गया है। कोई भी एप्लिकेशन कॉल कर सकता है shell32!ShellExecute(), और हालांकि शेल 32 विंडोज शेल का हिस्सा है, यह विंडोज एक्सप्लोरर का हिस्सा नहीं है, जो कि डिफ़ॉल्ट फाइल मैनेजर है।
रुस्लान

3

जैसा कि @richard कहते हैं, यह विंडोज के समान है। एक जेनेरिक फ़ाइल प्रबंधक पहले किसी फ़ाइल का नाम देख सकता है और एक फ़ाइल एक्सटेंशन को पहचानने की कोशिश करता है जो एक प्रोग्राम से जुड़ा होता है। यदि वह विफल रहता है, तो यह फ़ाइल को खोलने और हेडर के लिए देखने की कोशिश कर सकता है। यदि आप एक गैर-पाठ फ़ाइल (जैसे, .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
कुछ फ़ाइल प्रबंधक फ़ाइल नाम एक्सटेंशन से पहले फ़ाइल सामग्री का विश्लेषण करते हैं (हो सकता है कि वे हमेशा विस्तार की उपेक्षा करते हों, निश्चित नहीं)। जैसे केडीई के डॉल्फिन में यदि आपके पास एक ब्राउज़र और पीएनजी के साथ छवि के साथ जुड़े जीआईएफ चित्र हैं, तो file.pngपीएनजी फाइल का नाम बदलने file.gifसे अभी भी छवि दर्शक खुल जाएगा। और यदि आप फ़ाइल को खाली करते हैं, तो यह टेक्स्ट एडिटर में खुलेगा।
रुस्लान

3

मैं एक अंतर्निहित उत्तर देने का प्रयास करूंगा कि यूनिक्स सिस्टम फाइलों को कैसे संभालता है। जैसा कि अन्य लोगों ने बताया है, आपके प्रश्नों का विवरण गलत है क्योंकि फाइलें स्वयं रिपोर्ट नहीं करती हैं कि वे किस प्रकार के हैं और कर्नेल खुद तय नहीं करता है कि किन अनुप्रयोगों का उपयोग करना है।

यूनिक्स और विंडोज ऑपरेटिंग सिस्टम में, फ़ाइलों को बाइट्स के अनुक्रम के रूप में संरचित किया जाता है। Tanenbaum के ऑपरेटिंग सिस्टम से , तीसरा संस्करण:

वास्तव में, ऑपरेटिंग सिस्टम को पता नहीं है कि फाइल में क्या है या परवाह नहीं है। यह सब देखता है बाइट्स हैं। उपयोगकर्ता-स्तरीय कार्यक्रमों द्वारा कोई अर्थ लगाया जाना चाहिए।

यही कारण है, एक डेस्कटॉप वातावरण में, xdg-openविशिष्ट फ़ाइलों के प्रकारों को खोलने के लिए डिफ़ॉल्ट अनुप्रयोगों को निर्धारित करने के लिए उपयोग किया जाता है।

यूनिक्स प्रणाली पर, फ़ाइलों को नियमित फ़ाइलों और विशेष फ़ाइलों के बीच विभेदित किया जाता है । एक नियमित फ़ाइल केवल उपयोगकर्ता डेटा है जो एक पाठ फ़ाइल (ASCII या यूनिकोड एन्कोडिंग) या बाइनरी (निष्पादन योग्य कोड) हो सकती है। विशेष फाइलें ऐसी फाइलें हैं जो ओएस चलाने के लिए आवश्यक हैं। इनमें डायरेक्टरी, लिंक, पाइप, सॉकेट और डिवाइस फाइल्स शामिल हैं। ¹

यह कन्वेंशन द्वारा होता है कि फ़ाइल नामों में एक्सटेंशन होते हैं जो यह इंगित करने के लिए होते हैं कि वे किस प्रकार की फ़ाइल हो सकते हैं। जैसे। C स्रोत कोड के लिए, *। Html वेब पृष्ठों के लिए, आदि।

कुछ प्रणालियों (जैसे, UNIX) में, फ़ाइल एक्सटेंशन सिर्फ कन्वेंशन हैं और ऑपरेटिंग सिस्टम द्वारा लागू नहीं किए जाते हैं। फ़ाइल का नाम फ़ाइल। Txt किसी प्रकार की पाठ फ़ाइल हो सकती है, लेकिन यह नाम स्वामी को किसी भी वास्तविक जानकारी को कंप्यूटर तक पहुँचाने की तुलना में याद दिलाने के लिए अधिक है। दूसरी ओर, एक सी कंपाइलर वास्तव में जोर दे सकता है कि फाइलों को अंत में .c में संकलित करना है, और यदि वे ऐसा नहीं करते हैं तो उन्हें संकलन करने से मना कर सकते हैं।

यदि किसी फ़ाइल को उचित एक्सटेंशन के बिना सहेजा या बदला जाता है, तो यह अभी भी उस फ़ाइल प्रकार के लिए उसी प्रारूप को बरकरार रखता है। यह इस तरह से है कि अधिकांश फाइल मैनेजर यह तय करते हैं कि किस एप्लिकेशन के साथ फाइल को खोलना है, और बिना एक्सटेंशन के क्यों सबसे अधिक उपयोगकर्ता को "इस फाइल को खोलने के लिए आप जिस प्रोग्राम का उपयोग करना चाहते हैं उसे चुनें:" के साथ संकेत देगा।

अंत में, सिस्टम-वाइड और उपयोगकर्ता-स्तरीय सेटिंग्स को परिभाषित करने के लिए पर्यावरण चर का उपयोग किया जाता है। उदाहरण के लिए, चर EDITORजब पाठ जैसे निपटने जो पाठ संपादक को खोलने के लिए निर्दिष्ट करने के लिए प्रयोग किया जाता है vim, nanoआदि इस तरह की प्रक्रिया है जो जब एक संपादन की तरह खुले करने के लिए संपादक, पता gitसंदेश के लिए प्रतिबद्ध। अन्यथा, आप सही हैं कि आपको निर्दिष्ट करना होगा कि किस एप्लिकेशन का उपयोग करना है। ध्यान दें कि vimएक्सटेंशन जाँच और फ़ाइल की सामग्री का निरीक्षण, अगर सेटिंग से पहचान लेता है फ़ाइल प्रकारों filetype on, सेट किया गया है जो उसके बाद सही वाक्य रचना हाइलाइटिंग, खरोज, आदि पर लागू होता है ²

टी एल; डॉ

सारांश में, यह उपयोगकर्ता-स्तर के अनुप्रयोग हैं जो निर्धारित करते हैं कि कौन से विशिष्ट फ़ाइल प्रकार को खोलने के लिए प्रोग्राम हैं, न कि स्वयं ओएस।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.