क्या फ़ाइल-एक्सटेंशन का कोई उद्देश्य (ऑपरेटिंग सिस्टम के लिए) है?


73

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

यही मुझे अपनी शिक्षा से याद है। कृपया मुझे सही करें अगर मैं गलत हूँ!

हाल ही में Ubuntu सिस्टम के साथ एक सा कार्य करना: मैं सिस्टम जो की तरह एक्सटेंशन है पर फ़ाइलों का एक बहुत कुछ देखना .sh, .txt, .o,.c

अब मैं सोच रहा हूँ: क्या ये विस्तार केवल मनुष्यों के लिए हैं? ताकि किसी को अंदाजा हो जाए कि वह किस तरह की फाइल है?

या क्या उनके पास ऑपरेटिंग-सिस्टम के लिए भी कुछ उद्देश्य है?


5
अगर आपको यहां अच्छा रिस्पॉन्स नहीं मिलता है, तो याद रखें कि unix.stackexchange.com
mchid

संबंधित, लगभग डुप्लिकेट: askubuntu.com/questions/390015/…
Zzzach ...


5
विंडोज में वे लिनक्स / यूनिक्स में करते हैं, वे ज्यादातर नहीं करते हैं। - मुख्य अपवाद संपीड़न कार्यक्रम हैं gzip, bzip2, xz- और इतने पर। ये प्रोग्राम किसी फ़ाइल के संपीड़ित संस्करण को उस असम्पीडित संस्करण से अलग करने के लिए प्रत्यय का उपयोग करता है जिसे वे प्रतिस्थापित करते हैं। संपीड़न-प्रोग्राम अक्सर गलत प्रत्यय के बारे में शिकायत करेंगे, भले ही फ़ाइल वास्तव में उस प्रकार की संपीड़ित फ़ाइल हो जिसे उसे संभालना चाहिए।
बार्ड कोपरपुड

6
मुझे लगता है कि इस सवाल के साथ समस्या यह है कि "ऑपरेटिंग-सिस्टम" एक अच्छी तरह से परिभाषित अवधारणा नहीं है। ऑपरेटिंग सिस्टम का हिस्सा क्या है, और इसके शीर्ष पर एक एप्लिकेशन क्या है? ओएस के कई हिस्सों (जो भी ओएस के बारे में हम बात कर रहे हैं) परवाह करते हैं कि किस प्रकार की फ़ाइल है - वे बस वही करते हैं जो उन्हें बताया जाता है। तो वे कैसे जानते हैं के बारे में अंतर अप्रासंगिक हैं; वे न तो करते हैं। दूसरी ओर, तालियां, एक या दोनों चीजों को अच्छी तरह से कर सकती हैं।
IMSoP

जवाबों:


39

लिनक्स फ़ाइल हेडर में एक कोड के माध्यम से एक फ़ाइल के प्रकार को निर्धारित करता है। यह फाइल खोलने के लिए उपयोग करने के लिए सॉफ्टवेयर के साथ जानने के लिए फ़ाइल एक्सटेंशन पर निर्भर नहीं करता है।

यही मुझे अपनी शिक्षा से याद है। कृपया मुझे सही करें अगर मैं गलत हूँ!

  • ठीक से याद है।

क्या ये विस्तार केवल मनुष्यों के लिए हैं?

  • हाँ, लेकिन एक के साथ।

जब आप अन्य ऑपरेटिंग सिस्टम के साथ बातचीत करते हैं जो एक्सटेंशन पर निर्भर करते हैं कि वे क्या हैं तो उन का उपयोग करने के लिए यह सबसे अच्छा विचार है।

विंडोज में, उद्घाटन सॉफ्टवेयर एक्सटेंशन से जुड़ा हुआ है।

नाम "" "फ़ाइल file.txt" नाम एक ही फाइल को खोलने से Windows में कठिन है एक पाठ फ़ाइल खोलने (आप से फ़ाइल खोलें डायलॉग स्विच करना होगा *.txtकरने के लिए *.*हर बार)। वही TAB और अर्ध-बृहदान्त्र से अलग पाठ फ़ाइलों के लिए जाता है। वही ई-मेल (.mbox एक्सटेंशन) आयात और निर्यात करने के लिए जाता है।

विशेष रूप से जब आप सॉफ्टवेयर कोड करते हैं। "सॉफ़्टवेयर 1" नाम की एक फ़ाइल खोलना जो एक HTML फ़ाइल है और "सॉफ़्टवेयर 2" जो कि एक जावास्क्रिप्ट फ़ाइल है, "software.html" और "software.js" की तुलना में अधिक कठिन हो जाती है।


यदि लिनक्स में ऐसी कोई प्रणाली है जहां फ़ाइल एक्सटेंशन महत्वपूर्ण हैं, तो मैं उस बग को कॉल करूंगा। जब सॉफ्टवेयर फ़ाइल एक्सटेंशन पर निर्भर करता है, तो यह शोषक है। हम एक इंटरप्रेटर निर्देश का उपयोग करते हैं कि एक फ़ाइल क्या है ("एक फाइल में पहले दो बाइट्स अक्षर हो सकते हैं" #! ", जो एक जादू संख्या (हेक्साडेसिमल 23 और 21," "" और "के ASCII मान) का गठन करता है! ") को अक्सर शेबंग के रूप में संदर्भित किया जाता है,")।

फ़ाइल एक्सटेंशन के साथ सबसे प्रसिद्ध समस्या विंडोज पर LOVE-LETTER-FOR-YOU.TXT.vbs थी। यह एक विज़ुअल बेसिक स्क्रिप्ट है जिसे फाइल एक्सप्लोरर में टेक्स्ट फाइल के रूप में दिखाया जा रहा है।

उबंटू में जब आप नॉटिलस से एक फ़ाइल शुरू करते हैं तो आपको एक चेतावनी मिलती है कि यह क्या करने जा रहा है। Nautilus से एक स्क्रिप्ट को निष्पादित करना जहां यह कुछ सॉफ्टवेयर शुरू करना चाहता है जहां यह माना जाता है कि gEdit को खोलना एक समस्या है और हमें इसके बारे में एक चेतावनी मिलती है।

कमांड लाइन में जब आप कुछ निष्पादित करते हैं, तो आप नेत्रहीन देख सकते हैं कि विस्तार क्या है। यदि यह समाप्त हो जाता है ।vbs मैं संदिग्ध होना शुरू हो जाएगा (ऐसा नहीं है कि .vbs लिनक्स पर निष्पादन योग्य है। कम से कम कुछ और प्रयास के लिए नहीं;))।


31
मुझे पूरी तरह से वह नहीं मिला जो आप अपने अंतिम वाक्य में कहना चाहते थे। सबसे पहले, यह एक्सटेंशन के बजाय इसे छिपाने की समस्या है, दूसरा यह कि शोषण लिनक्स में समान काम करेगा - आप एक बाइनरी फ़ाइल का नाम देते हैं readme.txtऔर इसे निष्पादन योग्य बनाते हैं। यदि उपयोगकर्ता ने इसे निष्पादित किया है, तो यह संपादक को नहीं खोलता है, लेकिन कोड चलाता है। इस संबंध में एक्सटेंशन एक्सटेंशन मायने रखता है (लेकिन उन्हें छिपाना नहीं) गैर-समझदार उपयोगकर्ताओं के लिए समझाने के लिए अधिक सुरक्षित और आसान है। अन्य अंतर हैं (विशेष रूप से वर्तमान निर्देशिका से फाइलें निष्पादित नहीं कर रहे हैं), लेकिन एक्सटेंशन के साथ उनका कोई लेना-देना नहीं है।
टेकफ्रेड

4
@techraf वास्तव में फ़ाइल प्रबंधक संभवतः readme.txtएक पाठ संपादक के साथ फ़ाइल को खोलने का प्रयास करेगा । मैंने केडीई में डॉल्फिन के साथ कोशिश की, निष्पादन योग्य अनुमति को जोड़ते हुए एक शेल स्क्रिप्ट .txtबनाई , इसे सहेजते हुए और उस पर क्लिक करके इसे केट में खोल दिया जाएगा। अगर मैं इसका नाम बदल देता हूं .shतो उस पर क्लिक करने से यह चलता है।
बकुरीउ

9
linux: चूंकि मेक, नियमों के इर्द-गिर्द बना होता है, जो फ़ाइल एक्सटेंशन पर निर्भर करता है, क्या यह केवल मानव से अधिक के लिए एक्सटेंशन नहीं है (इसका कोई उद्देश्य नहीं है)?
बोल्व

15
यह एक स्मारकीय रूप से गलत उत्तर है। लिनक्स के कुछ हिस्से फ़ाइल प्रकारों को निर्धारित करने के लिए जादू की संख्या का उपयोग करते हैं। कमांड लाइन पर निष्पादन फ़ाइलें। लेकिन सिस्टम के अन्य विशाल हिस्से फाइल एक्सटेंशन का उपयोग यह जानने के लिए करते हैं कि क्या देखना है, क्या वे डायनेमिक लिंकर (जो कि .so फाइलें हैं), मोडप्रो, बिल्ड सिस्टम, प्लगइन्स, अजगर के लिए लाइब्रेरी, रूबी, आदि। टी में जादू की संख्या है, fileअनुमान आधारित है, निश्चित नहीं है।
एलन शुतको

3
"लिनक्स फ़ाइल हेडर में एक कोड के माध्यम से फ़ाइल का प्रकार निर्धारित करता है" "सही" डब्ल्यूटीएफ? "फ़ाइल हेडर में कोड" क्या है? ऐसा कोई कोड नहीं है, और लिनक्स में ऐसा कोई सामान्य "फ़ाइल हेडर" नहीं है।

68

यहां 100% काला या सफेद जवाब नहीं है।

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

उदाहरण के लिए सभी बिटमैप छवि फाइलें (आमतौर पर नाम विस्तार के साथ .bmp) BMअपने पहले दो बाइट्स में अक्षरों के साथ शुरू होनी चाहिए । बैश, पायथन, पर्ल, AWK, आदि जैसे अधिकांश स्क्रिप्टिंग भाषाओं में लिपियों (मूल रूप से सब कुछ जो #टिप्पणी के रूप में शुरू होने वाली लाइनों का इलाज करता है ) #!/bin/bashमें पहली पंक्ति की तरह एक शेबंग हो सकता है । यह विशेष टिप्पणी सिस्टम को बताती है कि किस एप्लिकेशन को फाइल को खोलना है।

इसलिए आम तौर पर ऑपरेटिंग सिस्टम फ़ाइल सामग्री पर निर्भर करता है और फ़ाइल प्रकार का निर्धारण करने के लिए इसका नाम नहीं है, लेकिन यह कहते हुए कि फ़ाइल एक्सटेंशन को लिनक्स पर कभी भी ज़रूरत नहीं है सच्चाई का केवल आधा हिस्सा है।


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

हालाँकि, ऑपरेटिंग सिस्टम के कुछ हिस्से फ़ाइल नाम एक्सटेंशन पर भी निर्भर करते हैं, उदाहरण के लिए जब आपके सॉफ़्टवेयर स्रोतों को पार्स करते हैं /etc/apt/sources.list.d/- केवल *.listएक्सटेंशन वाली फ़ाइलों को अन्य लोगों द्वारा अनदेखा कर दिया जाता है। इसका उपयोग शायद मुख्य रूप से फ़ाइल प्रकार को निर्धारित करने के लिए नहीं किया जाता है, बल्कि कुछ फ़ाइलों के पार्सिंग को सक्षम / अक्षम करने के लिए किया जाता है, लेकिन यह अभी भी एक फ़ाइल एक्सटेंशन है जो प्रभावित करता है कि सिस्टम किसी फ़ाइल को कैसे व्यवहार करता है।

और बेशक मानव उपयोगकर्ता मुनाफा फ़ाइल एक्सटेंशन से सबसे ज्यादा है कि के रूप में एक फ़ाइल स्पष्ट के प्रकार में आता है और यह भी एक ही आधार नाम के साथ एक से अधिक फ़ाइलों और की तरह अलग अलग एक्सटेंशन की अनुमति देता है site.html, site.php, site.js, site.cssकि फाइल आदि नुकसान निश्चित रूप से है विस्तार और वास्तविक फ़ाइल प्रकार / सामग्री का मिलान आवश्यक नहीं है।

इसके अतिरिक्त यह क्रॉस-प्लेटफॉर्म इंटरऑपरेबिलिटी के लिए आवश्यक है, जैसे कि विंडोज को पता नहीं होगा कि किसी readmeफाइल के साथ क्या करना है , लेकिन केवल ए readme.txt


आप अपने आप को यहां थोड़ा विरोधाभास करते हैं: यदि मानक छवि दर्शक को फ़ाइल नाम की समाप्ति की आवश्यकता होती है। बीएमपी, ओएस के किस भाग को आप "बीएम" शुरू करने वाली फ़ाइल सामग्री पर निर्भर करते हैं? AFAIK, केवल "मैजिक नंबर्स के बारे में कर्नेल की परवाह किए बिना निष्पादन योग्य प्रकार हैं, जिनमें से विशेष मामला भी है #!। बाकी सब कुछ आवेदन के निर्णय पर
निर्भर है

@IMSoP मुझे सटीक कार्यान्वयन के eogबारे में नहीं पता है और मुझे नहीं पता कि वे फ़ाइल नाम के बारे में बिल्कुल परवाह क्यों करते हैं। यह मेरी राय में एक बग है। और निश्चित रूप से यदि फ़ाइल को "bmp" नाम दिया गया है, लेकिन इसका सामग्री प्रारूप मेल नहीं खाता है, तो निश्चित रूप से एक त्रुटि भी होगी। बेशक प्रत्येक एप्लिकेशन फ़ाइलों को सत्यापित करने का तरीका तय करता है, लेकिन सामान्य लिनक्स अनुप्रयोगों में नाम पर भरोसा नहीं करना चाहिए। Btw, आप fileअपनी सामग्री के द्वारा फ़ाइल प्रकारों की जांच करने के लिए कमेंड का उपयोग कर सकते हैं ।
बाइट कमांडर

1
मैं जिस वाक्य को चुनौती दे रहा हूं वह यह है: "लिनक्स ... पहले कुछ बाइट्स की जांच करके फ़ाइल प्रकार निर्धारित करता है"। उस वाक्य में आप "लिनक्स" की क्या परिभाषा का उपयोग कर रहे हैं? fileउपयोगिता का अस्तित्व वास्तव में कुछ भी साबित नहीं करता है; यह एक उपयोगी उपकरण है, जो किसी भी OS पर मौजूद हो सकता है। OS का कौन सा मूलभूत भाग fileफ़ाइल नाम को ग्लोबिंग करने से ज्यादा "सही" चल रहा है ?
IMSoP

ध्यान दें कि बिना एक्सटेंशन वाली फाइलें किसी प्रोग्राम से जुड़ी हो सकती हैं।
इसनाए

24

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

इसका मतलब है कि आप अपनी पसंद के किसी भी नाम के साथ एक फ़ाइल बना सकते हैं ... कुछ अपवादों के साथ

हालाँकि

मैं सावधानी का एक शब्द जोड़ना चाहूंगा।

यदि आपके पास आपके सिस्टम पर कुछ ऐसी फाइल है जो फाइलनाम एसोसिएशन का उपयोग करती है, तो फाइल में उन मैजिक नंबर या हेडर नहीं हो सकते हैं। इन फ़ाइलों की पहचान करने के लिए फाइल एक्सटेंशन का उपयोग उन अनुप्रयोगों द्वारा किया जाता है जो उन्हें पढ़ने में सक्षम होते हैं, और यदि आप ऐसी फ़ाइलों का नाम बदलते हैं तो आपको कुछ अप्रत्याशित प्रभाव का अनुभव हो सकता है। उदाहरण के लिए:

यदि आप एक फ़ाइल My Novel.docका नाम बदल देते हैं My-Novel, तो लिबरऑफ़िस अभी भी इसे खोल सकेगा, लेकिन यह 'अनटाइटल' के रूप में खुलेगा और इसे बचाने के लिए आपको इसे फिर से नाम देना होगा (लिब्रेऑफ़िस डिफ़ॉल्ट रूप से एक्सटेंशन जोड़ता है, इसलिए आपके पास तब होगा) दो फाइलें My-Novelऔर My-Novel.odt, जो कष्टप्रद हो सकती हैं)

अधिक गंभीरता से, यदि आप एक फ़ाइल का नाम बदलकर My Spreadsheet.xlsx से My-Spreadsheet कर लेते हैं, तो इसे खोलने की कोशिश करें xdg-open My-Spreadsheetक्योंकि आपको यह मिल जाएगा (क्योंकि यह वास्तव में एक संपीड़ित फ़ाइल है):

और अगर आप एक फ़ाइल My Spreadsheet.xlsका नाम बदलते हैं My-Spreadsheet, जब आपको xdg-open My-Spreadsheetएक त्रुटि मिलती है

त्रुटि खोलने का स्थान: इस फ़ाइल को संभालने के रूप में कोई एप्लिकेशन पंजीकृत नहीं है

(हालांकि इन दोनों मामलों में यह ठीक काम करता है यदि आप करते हैं soffice My-Spreadsheet)

आप तो करने के लिए extensionless फ़ाइल का नाम बदलें, तो My-Spreadsheet.odsसाथ mvऔर इसे खोलने के लिए आप इस मिल जाएगा की कोशिश:

(मरम्मत विफल)

और आपको फ़ाइल को सही ढंग से खोलने के लिए मूल एक्सटेंशन को वापस रखना होगा (यदि आप चाहें तो प्रारूप को परिवर्तित कर सकते हैं)

टी एल; डॉ:

यदि आपके पास नाम एक्सटेंशन वाली गैर-देशी फाइलें हैं, तो सब कुछ ठीक होगा मानकर एक्सटेंशन न निकालें!


4
फ़ाइल एक्सटेंशन के बिना एक नई शैली का एमएस ऑफिस डॉक्यूमेंट (docx, xlsx, pptx आदि) पुरालेख प्रबंधक में खुलता है क्योंकि वे फाइल प्रकार वास्तव में केवल साधारण ज़िप संपीड़ित फाइलें होती हैं, जिसमें दस्तावेज़ की सामग्री को परिभाषित करने के लिए आवश्यक सभी XML दस्तावेज़ और मीडिया फ़ाइलें होती हैं। एक ज़िप संपीड़ित निर्देशिका का फ़ाइल प्रारूप आजकल बहुत आम है।
बाइट कमांडर

1
पहले से ही कई शानदार जवाब, लेकिन मैंने देखा है कि केवल एक और अधिक विशिष्ट libreoffice के लिए। आप अल्पविराम से अलग मान (CSV) की एक फ़ाइल बनाते हैं और इसे "test.csv" के रूप में सहेजते हैं, एक विंडो खुलेगी जिसमें पूछा जाएगा कि आप किस प्रकार के विभाजक का उपयोग कर रहे हैं (यानी, libreoffice Calc)। यदि आप इस फ़ाइल का नाम "test.cs" पर रखते हैं, उदाहरण के लिए, तो libreoffice का लेखक इसे खोलता है। तो, ऊपर दिए गए उदाहरण के अलावा, ऐसा लगता है जैसे libreoffice फ़ाइल एक्सटेंशन का उपयोग करता है।
रे

3
लिनक्स फाइलसिस्टम फ़ाइल प्रकारों के संबंध में कुछ भी नहीं करता है। यह सब इसके ऊपर चल रहे कार्यक्रमों के लिए है।
पीटर ग्रीन

@PeterGreen हाँ, लेकिन तथ्य यह है कि कार्यक्रम इसे महत्व देते हैं इसका मतलब यह है कि यह "मनुष्यों के लिए" नहीं है, उदाहरण के लिए, क्लासिक मैकओएस में यह था [चार-बाइट "फ़ाइल प्रकार" और "निर्माता ऐप" फ़ील्ड थे जो कि थे फ़ाइल नाम का t भाग, इसलिए OS और अनुप्रयोगों के पास फ़ाइल एक्सटेंशन को देखे बिना सभी आवश्यक जानकारी थी]
Random832

3
@PeterGreen Windows फ़ाइल सिस्टम फ़ाइल प्रकारों के संबंध में कुछ भी नहीं करता है। ग्राफिकल शेल (विंडोज एक्सप्लोरर) डबल-क्लिक के लिए एक कार्रवाई का चयन करने के लिए फ़ाइल एक्सटेंशन का उपयोग करता है, लेकिन तकनीकी रूप से यह सिर्फ एक प्रोग्राम है जो ओएस के शीर्ष पर चल रहा है, जैसा कि Nautilus है। उस व्यवहार के साथ लिनक्स फ़ाइल प्रबंधक, या एक विंडोज एक को लिखना पूरी तरह से संभव होगा जिसने फ़ाइल सामग्री की जांच की।
IMSoP

20

मैं अन्य उत्तरों से इस बारे में एक अलग दृष्टिकोण लेना चाहता हूं, और इस धारणा को चुनौती देता हूं कि "लिनक्स" या "विंडोज" का इससे कोई लेना-देना नहीं है (मेरे साथ सहन करना)।

एक फ़ाइल एक्सटेंशन की अवधारणा को केवल "अपने नाम के भाग के आधार पर एक फ़ाइल के प्रकार की पहचान करने के लिए एक सम्मेलन" के रूप में व्यक्त किया जा सकता है। फ़ाइल के प्रकार की पहचान करने के लिए अन्य सामान्य सम्मेलनों में इसकी सामग्री की तुलना ज्ञात हस्ताक्षरों के डेटाबेस ("मैजिक नंबर" दृष्टिकोण) से की जाती है, और इसे फाइल सिस्टम पर एक अतिरिक्त विशेषता के रूप में संग्रहीत किया जाता है (मूल MacOS में उपयोग किया जाता है) ।

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

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

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

  • फ़ाइल नाम की जांच करने की तुलना में फ़ाइल सामग्री की जांच करना काफी महंगा है; इसलिए उदाहरण के लिए "* .conf" नामक सभी फाइल्स "सभी फाइल्स जिनकी पहली लाइन" सिग्नेचर से मेल खाती है "की तुलना में बहुत तेज होगी"
  • फ़ाइल सामग्री अस्पष्ट हो सकती है; कई फ़ाइल प्रारूप वास्तव में सिर्फ एक विशेष तरीके से व्यवहार की जाने वाली पाठ फाइलें हैं, कई अन्य विशेष रूप से संरचित ज़िप फाइलें हैं, और इनके लिए सटीक हस्ताक्षर परिभाषित करना मुश्किल हो सकता है
  • एक फ़ाइल एक प्रकार से अधिक के रूप में मान्य हो सकती है; HTML फ़ाइल भी मान्य XML हो सकती है, एक ज़िप फ़ाइल और एक साथ मिलाया गया GIF दोनों स्वरूपों के लिए मान्य रहता है
  • जादू नंबर मिलान झूठी सकारात्मकता को जन्म दे सकता है; एक फ़ाइल प्रारूप जिसमें कोई हेडर नहीं है, बाइट्स "GIF89a" से शुरू हो सकता है और GIF छवि के रूप में गलत हो सकता है
  • किसी फ़ाइल का नाम बदलना उसे "अक्षम" के रूप में चिह्नित करने का एक सुविधाजनक तरीका हो सकता है; उदाहरण के लिए "foo.conf" को "foo.conf ~" में बदलना एक बैकअप को इंगित करने के लिए फ़ाइल को संपादित करने की तुलना में उसके सभी निर्देशों को टिप्पणी करने के लिए आसान है, और इसे ऑटोलोडेड निर्देशिका से बाहर जाने की तुलना में अधिक सुविधाजनक है; इसी तरह, .php फ़ाइल को .txt में बदलकर Apache को अपने स्रोत को सादा पाठ के रूप में परोसने के लिए कहेंगे, बजाय इसे PHP इंजन में जाने के।

लिनक्स कार्यक्रमों के उदाहरण जो डिफ़ॉल्ट रूप से फ़ाइल नाम का उपयोग करते हैं (लेकिन अन्य मोड हो सकते हैं):

  • gzip और gunzip में किसी भी फ़ाइल को समाप्त करने की विशेष हैंडलिंग होती है ".gz"
  • gcc ".c" फ़ाइलों को C, और ".cc" या ".C" के रूप में C ++ के रूप में हैंडल करेगा

विंडोज में एक्सटेंशन को छिपाने की एक मजबूत परंपरा भी है अगर यह "अच्छी तरह से जाना जाता है" और यहां तक ​​कि डॉस ने एक कमांड को omind .COM, .BAT, और .EXE के लिए अनुमति दी है, स्वचालित रूप से उन लोगों के लिए खोज करने के लिए जो वास्तविक कार्यक्रम को निष्पादित करने के लिए निर्धारित करते हैं। * निक्स में ऐसी कोई परंपरा नहीं है।
मोंटी हार्डर

यह एक बेहतर उत्तर है, लेकिन इसमें एक तथ्यात्मक त्रुटि है ... एक स्क्रिप्ट #!को शुरुआत में रखकर निष्पादन योग्य नहीं बनाया जा सकता है । इसके निष्पादन योग्य बिट (एस) सेट के साथ कोई भी फ़ाइल कई तरीकों से निष्पादित की जा सकती है। #!/bin/bashऔर इसी तरह के हस्ताक्षर निर्दिष्ट करते हैं कि किस दुभाषिया का उपयोग करना है। यदि इस तरह का कोई हस्ताक्षर नहीं किया गया है, तो डिफ़ॉल्ट शेल दुभाषिया मान लिया गया है। एक फाइल जिसमें कुछ भी नहीं है, लेकिन दो शब्द 'हैलो वर्ल्ड', लेकिन इसके निष्पादन बिट सेट के साथ, चलने पर एक 'हैलो' कमांड खोजने का प्रयास करेंगे।
DocSalvager

1
@DocSalvager अच्छा कैच, कि अनाड़ी शब्द जितना कुछ भी था। मैंने इसे स्पष्ट करने के लिए थोड़ा सा पुन: निर्धारित किया है कि शेबंग स्क्रिप्ट को निष्पादन योग्य नहीं बनाता है, यह सिर्फ यह बदलता है कि इसे कैसे निष्पादित किया जाता है।
IMSoP

15

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

  • gccC C C ++ फ़ाइलों के बीच अंतर करने के लिए एक्सटेंशन का उपयोग करता है। विस्तार के बिना उन्हें अंतर करना बहुत असंभव है (कोई कक्षाओं के साथ सी ++ फ़ाइल की कल्पना करें)।
  • कई फाइलों ( docx, jar, apk) बस विशेष रूप से ज़िप अभिलेखागार संरचना कैसी है। जब आप आमतौर पर सामग्री से प्रकार का अनुमान लगा सकते हैं, तो यह हमेशा संभव नहीं हो सकता है (उदाहरण के लिए जावा मैनिफेस्ट फाइलों में वैकल्पिक है jar)।

ऐसे मामलों में फ़ाइल एक्सटेंशन का उपयोग नहीं करना केवल हैकी वर्कअराउंड के साथ ही संभव होगा और इसके बहुत ही त्रुटिपूर्ण होने की संभावना है।


प्रोग्रामिंग का उल्लेख करने के लिए आप पर अच्छा है, लेकिन आपको अधिकांश विवरण गलत हैं। gccC फ़ाइलों के लिए फ्रंट-एंड है, C ++ फ़ाइलों के लिए आपको g++भाषा निर्दिष्ट करने के लिए फ्रंट-एंड या कमांड-लाइन स्विच की आवश्यकता होती है। अधिक महत्वपूर्ण वह makeप्रोग्राम है जो यह तय करता है कि किसी विशेष फ़ाइल का उपयोग करना है gccया g++नहीं - और makeयह पूरी तरह से इसके नियम-मिलान के लिए फ़ाइल नाम पैटर्न (ज्यादातर एक्सटेंशन) पर निर्भर है।
Ben Voigt

@BenVoigt जब किसी फ़ाइल को .ccएक्सटेंशन के साथ gccसंकलित किया जाता है, तो इसे वास्तव में C ++ के रूप में संकलित किया जाएगा, और इसमें यह दस्तावेज़ दिया गया है man gcc: "किसी भी दिए गए इनपुट फ़ाइल के लिए, फ़ाइल नाम प्रत्यय निर्धारित करता है कि किस तरह का संकलन किया गया है: इसके बाद सूची की सूची एक्सटेंशन और उनका इलाज कैसे किया जाता है।
hvd

1
@hvd तो शायद यह पुस्तकालयों का डिफ़ॉल्ट सेट है जो सही गलत का उपयोग नहीं करने पर बुरी तरह से गलत हो जाता है। वैसे भी बनाना इसका प्रमुख उदाहरण है क्योंकि यह जो कुछ भी करता है वह फ़ाइल एक्सटेंशन पर आधारित है।
बेन वोइग्ट

1
@BenVoigt makeएक अच्छा उदाहरण भी है, लेकिन यह फिल्नाम पर बहुत अधिक gccनिर्भर करता है। यहाँ एक उदाहरण .cबनाम बनाम स्पष्ट है .cc: C के लिए, gccयह बताने के लिए प्रत्ययों का उपयोग करता है कि क्या इसका पहला चरण प्रीप्रोसेस ( .c), संकलन ( .i), असेंबल ( .s), या लिंक ( .o) है। यहां, मैं उपयोग करता हूं -E, -Sऔर -cयह बताने के लिए कि gccकहां रुकना है , लेकिन यह फ़ाइल नाम का उपयोग करता है यह जानने के लिए कि कहां शुरू करना है gcc something.ccसी ++ के लिए सही पुस्तकालयों के लिए लिंक नहीं किया जाएगा, लेकिन यह होगा सी ++, जिसके कारण बहुत से उपयोगकर्ताओं को त्रुटि संदेश मिलते ही जब कि गलती कर से उलझन में कर रहे हैं के रूप में फ़ाइल का इलाज।
एलिया कागन

7

आपकी पहली धारणा सही है: लिनक्स पर एक्सटेंशन कोई फर्क नहीं पड़ता है और केवल मनुष्यों के लिए उपयोगी है (और अन्य गैर-यूनिक्स जैसे ओएस जो एक्सटेंशन की देखभाल करते हैं)। फ़ाइल का प्रकार फ़ाइल में पहले 32 बिट्स डेटा द्वारा निर्धारित किया जाता है, जिसे जादू नंबर के रूप में जाना जाता है यही कारण है कि शेल स्क्रिप्ट को #!लाइन की आवश्यकता होती है - ऑपरेटिंग सिस्टम को यह बताने के लिए कि कॉल करने के लिए कौन से दुभाषिया। इसके बिना, शेल स्क्रिप्ट सिर्फ पाठ फ़ाइल है।

जहां तक ​​फ़ाइल मैनेजर जाते हैं, वे कुछ फाइलों के एक्सटेंशन, जैसे कि .desktopफाइलें, जो मूल रूप से विंडो के शॉर्टकट के संस्करण के समान हैं, लेकिन अधिक क्षमताओं के साथ जानना चाहते हैं । लेकिन जहां तक ​​ओएस का सवाल है, यह जानना जरूरी है कि फाइल में क्या है, उसके नाम में क्या नहीं है


3
यह बिल्कुल सच नहीं है। ऐसे कार्यक्रम हैं जो एक विशिष्ट विस्तार की उम्मीद करते हैं। सबसे अधिक इस्तेमाल किया जाने वाला उदाहरण संभवत: ऐसा है gunzipजो किसी फाइल को डिकम्प्रेस नहीं करेगा यदि उसे कॉल न किया जाए foo.gz
terdon

यह विशिष्ट सॉफ्टवेयर का कार्यान्वयन है। अधिकांश भाग के लिए, यूनिक्स जैसी प्रणालियों पर उपयोगिताओं के विस्तार की उम्मीद नहीं है।
सर्गी कोलोडियाज़नी

7
अधिकांश भाग के लिए वे नहीं, नहीं। हालाँकि, आपका पहला वाक्य, दावा करता है कि उनका उपयोग कभी नहीं किया जाता है और केवल मनुष्यों के लिए मायने रखता है। यह पूरी तरह सच नहीं है। gunzipएक उदाहरण है, eogएक और है। इसके अलावा, कई उपकरण बिना सही एक्सटेंशन के स्वत: पूर्ण नाम नहीं देंगे। मैं केवल इतना कह रहा हूं कि यह "एक्सटेंशन हमेशा अप्रासंगिक हैं" की तुलना में थोड़ा अधिक जटिल है।
terdon

1
1 छोटा मुद्दा: ओपी ने ऑपरेटिंग सिस्टम के बारे में पूछा। 'गनज़िप ’और' इओग’ ऑपरेटिंग सिस्टम नहीं हैं, लेकिन उन्होंने खुद के प्रतिबंध (गनज़िप के मामले में) या विधि (ईओजी) बनाने का फैसला किया है। "माइम प्रकार" हालांकि।
रिनजविंड

1
@ निश्चित रूप से, आप ओएस को संकीर्ण रूप से परिभाषित कर सकते हैं, और प्रश्न का एक तुच्छ उत्तर प्राप्त कर सकते हैं। हालांकि, यह एक विशेष रूप से उपयोगी उत्तर नहीं है, क्योंकि एक उपयोगकर्ता द्वारा कंप्यूटर के साथ किए गए विशाल बहुमत में आपके द्वारा शामिल किए गए सॉफ़्टवेयर शामिल हैं। ध्यान दें कि "ऑपरेटिंग सिस्टम" के खिलाफ "केवल मनुष्यों के लिए" प्रश्न विपरीत था; मुझे नहीं लगता कि उनका मतलब "कर्नेल" था।
IMSoP

6

टिप्पणी उत्तर के लिए यह बहुत बड़ा है।

ध्यान रखें कि अलग-अलग अर्थ होने पर भी "विस्तार" में बहुत कुछ है।

आपके बारे में जो बात हो रही है वह 3 अक्षरों की है। डॉस ने 8.3 प्रारूप को वास्तव में लोकप्रिय बना दिया है और विंडोज़ आज तक .3 भाग का उपयोग करता है।

लिनक्स में बहुत सारी फाइलें हैं जैसे .conf या .list या .d या .c जिनका अर्थ होता है, लेकिन वास्तव में 8.3 अर्थों में एक्सटेंशन नहीं हैं। उदाहरण के लिए अपाचे विन्यास निर्देशन के लिए /etc/apache2/sites-enabled/website.conf को देखता है। जबकि सिस्टम MIME प्रकार और सामग्री हेडर का उपयोग करता है और यह एक पाठ फ़ाइल का निर्धारण नहीं करने के लिए क्या है, Apache (डिफ़ॉल्ट रूप से) अभी भी इसे .conf में समाप्त किए बिना इसे लोड करने के लिए नहीं जा रहा है।

.c एक और शानदार है। हां यह एक पाठ फ़ाइल है, लेकिन जीसीसी main.c पर निर्भर करता है। मुख्य और अंत में मुख्य (लिंक करने के बाद)। किसी भी समय पर सिस्टम .c, .o या नो एक्सटेंशन का उपयोग नहीं करता है, जहां तक ​​सामग्री का कोई अर्थ नहीं है, लेकिन इसके बाद का सामान। कुछ अर्थ है। आप शायद अपने SCM को main.o और main को अनदेखा करने के लिए सेटअप करेंगे।

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


1
विंडोज भी करने के लिए बाध्य नहीं है x.3की तरह कुछ और ऐसे, आप मिल गया है लंबे समय तक विस्तार के रूप में अच्छी तरह से नामकरण योजना .doxc, .torrent, .part, आदि यह सिर्फ यह है कि कई फ़ाइल प्रारूप और एक्सटेंशन पहले से ही समय में वापस बाद में परिभाषित किया गया है, जब 8.3 नामकरण अभी भी एक बात थी और प्रारूप ज्यादातर 3 अक्षरों का उपयोग करने के सम्मेलन को अनुकूलित करते हैं।
बाइट कमांडर

मैं नहीं देखता कि कैसे ".conf", ".c" आदि, "8.3 अर्थ" से "एक अलग अर्थ" हैं। फ़ाइल एक्सटेंशन की अवधारणा को केवल "अपने नाम के भाग के आधार पर फ़ाइल के प्रकार की पहचान करने के लिए एक सम्मेलन" के रूप में व्यक्त किया जा सकता है। यहां तक ​​कि DOS / Win3.1 को सही एक्सटेंशन की आवश्यकता नहीं थी (आप एक वर्ड डॉक्यूमेंट "STUPIDN.AME" कह सकते हैं और इसे WinWord में Ctrl-O के साथ खोल सकते हैं)। यह सिर्फ कुछ सिस्टम है (उदाहरण के लिए विंडोज पर डबल-क्लिक gzip, आपका मेकफाइल, आदि) प्रत्येक फ़ाइल पर लेने के लिए सही कार्रवाई के बारे में धारणा बनाने के लिए इस सम्मेलन का उपयोग करने के लिए लिखा जा सकता है।
IMSoP

@ByteCommander यह सच है, लेकिन विस्तार अभी भी उपयोग किए गए ऐप को निर्धारित करता है। मुझे यकीन नहीं है कि प्रतिबिंबित करने के लिए उत्तर को कैसे संपादित किया जाए।
coteyr

1
@coteyr फिर, यह सब निर्भर करता है कि हम "ओएस" से क्या मतलब है। फ़ाइल प्रबंधक निश्चित रूप से "ए एम इ" के लिए एक रजिस्ट्री कुंजी ऊपर दिखाई देगा, और मुझे बताओ कि "foo.txt" एक पाठ फ़ाइल है। लेकिन dirकमांड प्रॉम्प्ट पर दौड़ना मुझे ऐसी कोई बात नहीं बताएगा; यह बस परवाह नहीं करेगा। फ़ाइलों को निष्पादित करना निश्चित रूप से एक अपवाद है, दोनों ओएस पर; यदि प्रश्न उन तक ही सीमित था, तो इसका उत्तर यह होगा कि डॉस / विंडोज केवल नाम के बारे में परवाह करता है, और यूनिक्स / लिनक्स केवल निष्पादन की अनुमति और फ़ाइल के पहले बाइट्स के बारे में परवाह करता है। उस के बाहर, वहाँ हमेशा कुछ आवेदन का पालन करने के लिए एक सम्मेलन का चयन है।
21

1
@coteyr आप विंडोज 3.1 और इसके बाद के .scr (स्क्रीन सेवर बाइनरी) को भूल गए। उस ने कहा, निष्पादनयोग्य के लिए भी DOS / Windows सिस्टम में फ़ाइल एक्सटेंशन अभी भी सिर्फ एक सुविधा है। आप जहां "ऑपरेटिंग सिस्टम" की रेखा खींचते हैं, वहां की बारीकियां बहुत निर्भर करती हैं, लेकिन आप हमेशा एक बाइनरी को मेमोरी में लोड कर सकते हैं और खुद उसमें कूद सकते हैं, वह काम कर सकते हैं जो सामान्य रूप से ओएस करने के लिए कहता है। MS-DOS में, यदि आप कमशॉट्स के माध्यम से देखते हैं, तो मुझे पूरा यकीन है कि EXE COM जैसी एक सूची है जिसे आप इस तरह संपादित कर सकते हैं कि यह अन्य एक्सटेंशनों के लिए दिखता है यदि कोई निर्दिष्ट नहीं है (यह नहीं कह रहा है कि यह एक अच्छा विचार होगा, आप ध्यान दें)।
बजे एक CVn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.