लिनक्स फाइल कमांड फाइल को वर्गीकृत करती है


17

मुझे यादृच्छिक फ़ाइलों में निहित डेटा के प्रकार को पहचानने की आवश्यकता है। मैं लिनक्स के लिए नया हूँ।

मैं fileयह समझने के लिए कमांड का उपयोग करने की योजना बना रहा हूं कि किसी फ़ाइल में किस प्रकार का डेटा है। मैंने उस कमांड को आजमाया और नीचे आउटपुट मिला।

किसी ने मुझे सुझाव दिया कि fileकमांड डेटा प्रकार निर्धारित करने के लिए एक फ़ाइल के प्रारंभिक बाइट्स को देखता है। fileआदेश सभी पर एक फाइल एक्सटेंशन पर नहीं लगती है। क्या वो सही है? मैंने मैन पेज देखा लेकिन महसूस किया कि यह बहुत तकनीकी था। मैं सराहना करता हूं कि यदि कोई व्यक्ति एक लिंक प्रदान कर सकता है जिसमें fileकमांड के काम करने के तरीके के बारे में बहुत सरल विवरण है ।

fileकमांड चलाने के बाद मुझे कौन से संभावित उत्तर मिल सकते हैं ? उदाहरण के लिए, नीचे ट्रांसक्रिप्ट में मुझे JPEG, ISO मीडिया, ASCII, आदि मिलते हैं:

स्क्रीन आउटपुट निम्नानुसार है

 m7% file date-file.csv
date-file.csv: ASCII text, with CRLF line terminators
m7% file image-file.JPG
image-file.JPG: JPEG image data, EXIF standard
m7% file music-file.m4a
music-file.m4a: ISO Media, MPEG v4 system, iTunes AAC-LC
m7% file numbers-file.txt
numbers-file.txt: ASCII text
m7% file pdf-file.pdf
pdf-file.pdf: PDF document, version 1.4
m7% file text-file.txt
text-file.txt: ASCII text
m7% file video-file.MOV
video-file.MOV: data


अपडेट १

जवाब के लिए धन्यवाद और उन्होंने मेरे लिए कुछ बातें स्पष्ट कीं।

इसलिए अगर मैं सही ढंग से फ़ोल्डर / यूएसआर / शेयर / माइम / मैजिक को समझता हूं, तो एक डेटाबेस है जो मुझे देगा कि वर्तमान संभावित फ़ाइल प्रारूप क्या हैं (आउटपुट जो मैं प्राप्त कर सकता हूं जब मैं फ़ाइल कमांड टाइप करता हूं और फ़ाइल द्वारा इसका पालन करता हूं)। क्या वो सही है? क्या यह सच है कि जब भी 'फाइल' कमांड आउटपुट में "टेक्स्ट" शब्द होता है, तो यह उस चीज को संदर्भित करता है जिसे आप टेक्स्ट व्यूअर के साथ पढ़ सकते हैं, और "टेक्स्ट" के बिना कुछ भी किसी तरह का बाइनरी है?


6
भविष्य में, टर्मिनल आउटपुट की तस्वीर पोस्ट करना वास्तव में अनुशंसित नहीं है (या किसी के द्वारा आनंद लिया गया है)। मार्कडाउन कोड ब्लॉक फॉर्मेटिंग का उपयोग करें।
हेलोसिहॉस्ट

3
मैंने चित्र हटा दिया और कोड पोस्ट कर दिया।
user2543622

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

जवाबों:


13

file कई प्रकार के परीक्षण का उपयोग करता है :

1: यदि फ़ाइल मौजूद नहीं है, पढ़ा नहीं जा सकता है, या इसकी फ़ाइल स्थिति निर्धारित नहीं की जा सकती है, तो आउटपुट यह संकेत देगा कि फ़ाइल संसाधित की गई थी, लेकिन इसका प्रकार निर्धारित नहीं किया जा सका।

यह आउटपुट जैसा होगा cannot open file: No such file or directory

2: यदि फ़ाइल एक नियमित फ़ाइल नहीं है, तो इसकी फ़ाइल प्रकार की पहचान की जाएगी। फ़ाइल प्रकार निर्देशिका, फीफो, सॉकेट, ब्लॉक स्पेशल और कैरेक्टर स्पेशल की पहचान इस तरह की जाएगी। अन्य कार्यान्वयन-परिभाषित फ़ाइल प्रकारों को भी पहचाना जा सकता है। यदि फ़ाइल एक प्रतीकात्मक लिंक है, तो डिफ़ॉल्ट रूप से लिंक को हल किया जाएगा और फ़ाइल प्रतीकात्मक लिंक द्वारा संदर्भित फ़ाइल के प्रकार का परीक्षण करेगी। ( नीचे -hऔर -iविकल्प देखें।)

यह आउटपुट .: directoryऔर जैसा होगा /dev/sda: block special। इसके लिए और पिछले बिंदु के अधिकांश प्रारूप आंशिक रूप से POSIX द्वारा परिभाषित हैं - आप आउटपुट में होने वाले कुछ तारों पर भरोसा कर सकते हैं।

3: यदि फ़ाइल की लंबाई शून्य है, तो इसे एक खाली फ़ाइल के रूप में पहचाना जाएगा।

यह वह जगह है foo: empty

4: फ़ाइल उपयोगिता फ़ाइल के प्रारंभिक खंड की जांच करेगी और स्थिति-संवेदनशील परीक्षणों के आधार पर इसकी सामग्री की पहचान करने का अनुमान लगाएगी। (उत्तर सही होने की गारंटी नहीं है; देखें -d, -M, और -m विकल्प नीचे।)

5: फ़ाइल उपयोगिता फ़ाइल की जांच करेगी और संदर्भ-संवेदनशील डिफ़ॉल्ट सिस्टम परीक्षणों के आधार पर इसकी सामग्री की पहचान करने का अनुमान लगाएगी। (उत्तर सही होने की गारंटी नहीं है।)

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

fileआदेश इन नंबरों के एक डेटाबेस है और क्या वे के अनुरूप लिखें; वह डेटाबेस आमतौर पर है /usr/share/mime/magic, और फ़ाइल सामग्री को MIME प्रकारों में मैप करता है । वहां का आउटपुट (अक्सर file -iअगर आप इसे डिफ़ॉल्ट रूप से नहीं पाते हैं) एक परिभाषित मीडिया प्रकार या एक एक्सटेंशन होगा। "प्रसंग-संवेदी परीक्षण" एक ही तरह के दृष्टिकोण का उपयोग करते हैं, लेकिन थोड़े गूढ़ होते हैं। इनमें से कोई भी सही होने की गारंटी नहीं है, लेकिन वे अच्छे अनुमान लगाने का इरादा रखते हैं।

fileएक डेटाबेस में उन प्रकारों को नाम मैप करने का भी है, जिनके द्वारा यह पता चलेगा कि इसकी पहचान की गई फ़ाइल application/pdfको एक के रूप में वर्णित किया जा सकता है PDF document। उन मानव-पठनीय नामों को किसी अन्य भाषा में भी स्थानीयकृत किया जा सकता है। ये हमेशा फ़ाइल प्रकार के कुछ उच्च-स्तरीय विवरण होंगे जैसे कि एक व्यक्ति एक मशीन के बजाय समझेगा।

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

6: फ़ाइल को डेटा फ़ाइल के रूप में पहचाना जाएगा।

यह है foo: data, जब यह फ़ाइल के बारे में कुछ भी पता लगाने में विफल रहा।

अन्य छोटे टैग भी हैं जो दिखाई दे सकते हैं। एक निष्पादन योग्य ( +x) फ़ाइल executableआउटपुट में " " शामिल होगी , आमतौर पर अल्पविराम से अलग होती है। fileकार्यान्वयन भी उनके बारे में अतिरिक्त अंक वर्णन करने के लिए, अपनी "के रूप में सक्षम होने के लिए कुछ फ़ाइल स्वरूपों के बारे में अतिरिक्त बातें पता हो सकता है PDF document, version 1.4"।


8

मैन पेज आमतौर पर केवल संदर्भ होते हैं, न कि परिचय। विकिपीडिया पृष्ठ से शुरू करें ।

fileकेवल फ़ाइल सामग्री पर दिखता है, फ़ाइल नाम पर नहीं। (यह कुछ फ़ाइल मेटाडेटा को भी देखता है जैसे फ़ाइल प्रकार: निर्देशिका, प्रतीकात्मक लिंक, नाम पाइप, आदि। लेकिन जिन मामलों में आप रुचि रखते हैं, यह ऐसी सामग्री है जो मायने रखती है।)

fileआम तौर पर पहले कुछ बाइट्स को देखकर और मैजिक नंबर की बिल्ट-इन टेबल के साथ तुलना करके फाइल के प्रारूप का अनुमान लगाया जाता है । उदाहरण के लिए, यदि फ़ाइल के साथ शुरू होता है %PDF, तो file"पीडीएफ दस्तावेज़" रिपोर्ट करता है (और न्यूनतम संस्करण की रिपोर्ट करने के लिए आगे खुदाई करता है)। फ़ाइल प्रकारों के लिए जो जादू की संख्या के साथ शुरू नहीं होते हैं, इसमें हेयुरिस्टिक्स शामिल हैं, उदाहरण के लिए "ASCII पाठ" रिपोर्ट करें यदि पहले कुछ बाइट्स सभी मुद्रण योग्य ASCII रेंज में हैं।

का उत्पादन fileनाजुक है: यह यूनिक्स संस्करण से यूनिक्स संस्करण और संस्करण से संस्करण में भिन्न हो सकता है। लिनक्स, साइग्विन और * बीएसडी पर, fileकमांड एक विकल्प का समर्थन करता है -iजो MIME मीडिया प्रकार (IANA मानक मीडिया प्रकारों की सूची का प्रबंधन करता है ) के रूप में अनुमानित उत्पादन करता है । इसमें उतने विवरण नहीं हैं और आउटपुट कम मानव-अनुकूल है, लेकिन आउटपुट अनुमानित और कंप्यूटर-अनुकूल है।

$ file -i somefile.csv
somefile.csv: text/plain; charset=us-ascii
$ file -i somefile.jpg
somefile.jpg: image/jpeg; charset=binary
$ file -i somefile.pdf
somefile.pdf: application/pdf; charset=binary

file --mime-typeयदि आप केवल MIME टाइप करना चाहते हैं तो बिना जानकारी के, जैसे कि एन्कोडिंग जानकारी का उपयोग करें application/pdf-bयदि आप पंक्ति के आरंभ में फ़ाइल नाम प्रदर्शित नहीं करना चाहते हैं तो विकल्प पास करें ।


5

मैं चाहूंगा कि आप यहां से उत्तर पढ़ें । उत्तर के कुछ अंश हैं,

fileकमांड के मैन पेज से ,

file कमांड वास्तव में फ़ाइल प्रकार का निर्धारण करने पर 3 परीक्षण करता है।

पहले परीक्षण

फाइलसिस्टम परीक्षण एक स्टेट (2) सिस्टम कॉल से रिटर्न की जांच करने पर आधारित है।

दूसरा परीक्षण

मैजिक नंबर परीक्षणों का उपयोग विशेष निश्चित प्रारूपों में डेटा के साथ फाइलों की जांच के लिए किया जाता है।

तीसरा परीक्षण

भाषा परीक्षण विशेष स्ट्रिंग्स (cf name.h) की तलाश करते हैं जो किसी फ़ाइल के पहले कुछ ब्लॉकों में कहीं भी दिखाई दे सकते हैं। उदाहरण के लिए, कीवर्ड .br इंगित करता है कि फ़ाइल एक ट्रॉफ़ (1) इनपुट फ़ाइल की सबसे अधिक संभावना है, जैसे कि कीवर्ड संरचना सी प्रोग्राम को इंगित करती है।

fileकमांड का आउटपुट आम तौर पर किसी भी परीक्षण के परिणाम पर आधारित होता है जो सफल होता है।

अब, C ++ प्रोग्राम इस तरह शुरू होता है, और तीसरा टेस्ट सफल होता है,

#include <iostream.h>
bla
bla

तीसरे परीक्षण के अनुसार, कीवर्ड #includeविशेष रूप से यह निर्दिष्ट करता है कि यह टाइप C प्रोग्राम का है, हालांकि हमारे पास CPP प्रोग्राम है। अब, जब मैं जाँच करता हूँ,

$ file example.cpp

example.cpp: ASCII C program text

अब, वस्तु उन्मुख की अवधारणाएं C ++ के लिए विशिष्ट हैं। चलिए हम C ++ के लिए एक फाइल बनाते हैं ।

मैं अपना C ++ प्रोग्राम शुरू करता हूं,

Class something
{
}
bla
bla

अब, जब मैं जारी करता हूं

$ file example.cpp

आउटपुट है,

example.cpp: ASCII C++ program text

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


1

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

cat /usr/share/magic

यदि वह अनुमति मुद्दे देता है, या मौजूद नहीं है, तो संभवतः

find / -exec file {} \; 2>/dev/null | cut -d":" -f2 | sort -u

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

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