ফাইল প্রত্যয় থেকে না থাকলে ফাইল প্রকারগুলি কীভাবে জানা যায়?


55

আমি যদি ফাইলের নামগুলির প্রত্যয় না থাকে তবে কীভাবে ফাইল প্রকারগুলি জানা যায় তা জানতে চাই।

উদাহরণস্বরূপ, নামের ফাইলটি myfileবাইনারি বা শুরু হতে পাঠ্য হতে পারে , ফাইল বাইনারি বা পাঠ্য কিনা সিস্টেমটি কীভাবে জানতে পারে?


3
কেবল একটি মন্তব্য, বাকি উত্তরগুলি সমস্ত কিছু কভার করে। আজকাল এটি ঘটতে পারে যে কোনও ভুল কনফিগার করা লোকেল বা পুরানো এক্সিকিউটেবলের সাহায্যে কিছু ইউএসএফ -8 ফাইল বাইনারি ডেটা হিসাবে অ-এস্কি বাইটের কারণে ভুলভাবে চিহ্নিত হতে পারে।
ওরাল

19
সিস্টেমের কোন যত্ন নেই। কিছু নির্দিষ্ট অ্যাপ্লিকেশন যত্ন নিতে পারে তবে তাদের প্রত্যেকের এটি পরিচালনা করার নিজস্ব পদ্ধতি রয়েছে।
jwodder

2
মনে রাখবেন যে নিয়মিত ফাইলগুলির জন্য (ডিভাইস ফাইল নয়, ইউনিক্স ডোমেন সকেট, নামযুক্ত পাইপ ইত্যাদি) "ফাইল টাইপ" এর অর্থ দুটি আলাদা জিনিস হতে পারে: (1) একটি নির্দিষ্ট ফাইল ফর্ম্যাট (".ডোক্স", এক্সএমএল, এমএস-ডস পাঠ্য বিন্যাস) , আরটিএফ, স্থির দৈর্ঘ্যের রেকর্ড, তালিকাটি খুব দীর্ঘ হতে পারে) বা (২) একটি ফাইল যা কোনও নির্দিষ্ট অ্যাপ্লিকেশন জানে ("। এক্সএলএক্সএক্স" বা ".ডোক" বা যা কিছু আছে, বিন্যাসের ধরণের সাথে ওভারল্যাপ রয়েছে) । "ফাইলের ধরণ" সম্পর্কে কথা বলার সময় এই পার্থক্যটি মনে রাখা উচিত।
ব্রুস এডিগার

@jwodder সিস্টেম যত্ন করে। এটি এমন সিস্টেম যা অভিযোগ করে যে আপনি যখন প্রয়োগ করার চেষ্টা করেন তখন একটি এক্সিকিউটেবল ফাইল কার্যকর করতে পারবেন না, সেই অ্যাপ্লিকেশনগুলি নয়!
মিস্টার লিস্টার

1
@ মিস্টারলিস্টার ট্রু, কিন্তু এক্সিকিউটেবল / অ-এক্সিকিউটেবলের 'এক্সটেনশন' এর সাথে কোনও সম্পর্ক নেই।
ব্যবহারকারী 2338816

উত্তর:


84

fileউপযোগ 3 টি উপায় উপর filetype: নির্ধারণ করে:

প্রথমে ফাইল সিস্টেম পরীক্ষা : সেই পরীক্ষাগুলির মধ্যেই একটিতে স্ট্যাট পরিবার সিস্টেম কল কল করা হয়। এটি বিভিন্ন ইউনিক্স ফাইলের ধরণগুলি প্রদান করে : নিয়মিত ফাইল, ডিরেক্টরি, লিঙ্ক, অক্ষর ডিভাইস, ব্লক ডিভাইস, নামী পাইপ বা একটি সকেট। তার উপর নির্ভর করে ম্যাজিক পরীক্ষা করা হয়।

জাদু পরীক্ষার একটি বিট আরো জটিল। ফাইলের ধরণগুলি ম্যাজিক ফাইল নামক নিদর্শনগুলির একটি ডাটাবেস দ্বারা অনুমান করা হয় । কিছু ফাইলের ধরণ ফাইলের মধ্যে নির্দিষ্ট জায়গায় কিছু বা সংখ্যা পড়ার মাধ্যমে নির্ধারণ করা যায় (উদাহরণস্বরূপ বাইনারি)। ম্যাজিক ফাইলটিতে " ম্যাজিক নম্বরগুলি " রয়েছে যা ফাইল এতে রয়েছে কিনা এবং কোন পাঠ্য তথ্য প্রিন্ট করা উচিত তা পরীক্ষা করতে contains এই " ম্যাজিক নম্বরগুলি " 1-4 বাইট মান, স্ট্রিং, তারিখ বা এমনকি নিয়মিত প্রকাশ হতে পারে। আরও পরীক্ষার মাধ্যমে অতিরিক্ত তথ্য পাওয়া যাবে। একটি এক্সিকিউটেবল ক্ষেত্রে, অতিরিক্ত তথ্য হবে কিনা তা হচ্ছে পরিবর্তনশীল লিঙ্ক বা না ছিনতাইবা না বা আর্কিটেকচার। কখনও কখনও একাধিক পরীক্ষাগুলি অবশ্যই ফাইলের ধরণটি সঠিকভাবে চিহ্নিত করার আগে পাস করতে হবে। তবে যাইহোক, কতগুলি পরীক্ষা করা হয় তা বিবেচ্য নয়, এটি সর্বদা কেবল একটি ভাল অনুমান

কিছু সাধারণ ফাইল টাইপের একটি ফাইলের প্রথম 8 বাইট এখানে রয়েছে যা আমাদের এই যাদু নম্বরগুলি দেখতে কেমন তা অনুভূতি পেতে সহায়তা করতে পারে:

             Hexadecimal          ASCII
PNG   89 50 4E 47|0D 0A 1A 0A   ‰PNG|....
JPG   FF D8 FF E1|1D 16 45 78   ÿØÿá|..Ex
JPG   FF D8 FF E0|00 10 4A 46   ÿØÿà|..JF
ZIP   50 4B 03 04|0A 00 00 00   PK..|....
PDF   25 50 44 46|2D 31 2E 35   %PDF|-1.5

যাদু পরীক্ষার মাধ্যমে যদি ফাইলের ধরণটি খুঁজে পাওয়া না যায় তবে ফাইলটি একটি পাঠ্য ফাইল বলে মনে হয় এবং fileসামগ্রীগুলির এনকোডিংয়ের সন্ধান করে। এনকোডিংটি প্রতিটি সেটে মুদ্রণযোগ্য পাঠ্য গঠন করে এমন বাইটের বিভিন্ন রেঞ্জ এবং ক্রমগুলি দ্বারা পৃথক করা হয়।

লাইন বিরতিগুলিও তাদের এইচএক্স মানগুলির উপর নির্ভর করে তদন্ত করা হয়:

  • 0A( \n) একটি আন * x / লিনাক্স / বিএসডি / ওএসএক্স সমাপ্ত ফাইলটিকে শ্রেণিবদ্ধ করে
  • 0D 0A( \r\n) মাইক্রোসফ্ট অপারেটিং সিস্টেম থেকে ফাইল হয়
  • 0D( \r) সংস্করণ 9 পর্যন্ত ম্যাক ওএস হবে
  • 15( \025) আইবিএমস এআইএক্স হবে

এখন ভাষা পরীক্ষা শুরু। যদি এটি কোনও পাঠ্য ফাইল হিসাবে উপস্থিত হয়, তবে ফাইলটি কোন স্ট্রিংয়ের মধ্যে অনুসন্ধান করেছে যে এটিতে কোন ভাষা রয়েছে (সি, পার্ল, বাশ) রয়েছে out কিছু স্ক্রিপ্ট ভাষাও স্ক্রিপ্টের প্রথম লাইনে হ্যাশবাং ( #!/bin/interpreter) এর মাধ্যমে চিহ্নিত করা যায় ।

যদি ফাইলটিতে কিছুই প্রযোজ্য না হয় তবে ফাইলের ধরণ নির্ধারণ করা যায় না এবং fileকেবল "ডেটা" প্রিন্ট করে।

সুতরাং, আপনি দেখুন প্রত্যয় প্রয়োজন হয় না। যদি ভুল সেট করা হয় তবে একটি প্রত্যয় যাইহোক বিভ্রান্ত করতে পারে।


4
এছাড়াও রয়েছে ফ্রিডেস্কটপ.অর্গ.আর শেয়ার করা মাইএম ডাটাবেস, যা মূলত সমস্ত এক্স 11 অ্যাপ্লিকেশন দ্বারা ব্যবহৃত হয়। এটি যা file(1)করে তা ধারণার অনুরূপ , তবে একটি (খুব) বিভিন্ন বাস্তবায়নের সাথে।
lcd047

4
মনে রাখবেন যে এই প্রক্রিয়াটির ফলাফলটি মূলত একটি অনুমান এবং গুরুত্বপূর্ণ কোনও কিছুর জন্য নির্ভর করা উচিত নয়। (সুবিধার বৈশিষ্ট্যগুলি যেমন ফাইলটি খোলার জন্য ডিফল্ট প্রোগ্রাম স্থির করার মতো, ঠিক আছে)
ব্যবহারকারী 253751

সুতরাং আমি যদি কোনও পাঠ্য ফাইলের শীর্ষে% PNG যোগ করি তবে এটি একটি পিএনজি ফাইল হিসাবে দেখা যাবে। রাইট ??
সাগা

@ সাগা যদি আপনি সঠিকভাবে এনকোডিং পান এবং আপনি যদি শতকরা চিহ্নের পরিবর্তে প্রতি মিলের চিহ্ন রাখেন তবে: সম্ভবত। অতিরিক্ত পরীক্ষাও থাকতে পারে।
বনাঙ্গুইন

19

প্রায়শই, এটি যত্ন করে না। আপনি এটি কেবল কোনও প্রোগ্রামে পাস করেন এবং হয় এটির ব্যাখ্যা দেয় বা হয় না। কোনও পাঠ্য সম্পাদকটিতে .jpg খোলার পক্ষে এটি কার্যকর নাও হতে পারে তবে আপনি এটি করতে বাধা পান না। ফাইল ফাইলের বাকি অংশগুলির মতো এই এক্সটেনশনটি মানুষের সাংগঠনিক সুবিধার জন্য।

একাধিক উপায়ে বৈধভাবে ব্যাখ্যা করা যায় এমন ফাইলগুলি নির্মাণ করাও সম্ভব হতে পারে। জিপ ফাইল ফর্ম্যাট শুরু হওয়ার সাথে সাথে ফাইলের শেষে একটি শিরোনাম থাকে , আপনি অন্য জিনিসগুলি সামনে রেখে দিতে পারেন এবং এটি এখনও জিপ ফাইল হিসাবে লোড হবে। এটি সাধারণত স্ব-উত্তোলন জিপ ফাইলগুলি তৈরি করতে ব্যবহৃত হয়।


4
শেষ অনুচ্ছেদে পুনরায়: ফানকি ফাইল ফর্ম্যাটগুলি সেই বিষয়ে একটি আকর্ষণীয় আলাপ, যেমন একটি জেপিগ যা জাভা হ্যালো ওয়ার্ল্ড প্রোগ্রাম, এইএস এনক্রিপ্ট করার পরে এটি পিএনজি হয়ে যায়, বা 3 ডিইএস এর ডিক্রিপ্ট করার পরে এটি পিডিএফ হয়ে যায় এবং আরও ( সমস্ত "আকর্ষণীয়" বিষয়বস্তু সহ, যেমন কেবল সাদা শোরগোল বা প্রত্নসম্পদ নিয়ে নয়)
হেগেন ভন ইটজেন

14

এই তথ্যটি সাধারণত ফাইলের শিরোনামে পাওয়া যায়। fileকমান্ড লক্ষ্য বিশ্লেষণ করে ফাইল সম্পর্কে আপনি তথ্য জানায়। ফাইলের শিরোনামগুলি থেকে অনেকগুলি তথ্য প্রায়শই উত্পন্ন হয় যা প্রায়শই কোনও ফাইলের প্রথম কয়েকটি বাইটের চেয়ে অনেক বার হয় (নীচে দেখুন)। ফাইলগুলি কীভাবে পরিচালনা করতে হয় তা নির্ধারণ করতে শিরোনামগুলি সিস্টেম দ্বারা ব্যবহৃত হয়। #!/bin/bashএকটি ফাইলের শুরুতে সিস্টেমকে নিম্নলিখিত স্ক্রিপ্টটির ব্যাখ্যার জন্য ব্যাশ শেলটি ব্যবহার করতে বলে। ELFসিস্টেমকে বলে যে এটি একটি ELF এক্সিকিউটেবল।

[~] root@www # file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped

[~] root@www # file /etc/passwd
/etc/passwd: ASCII text

ফাইল শিরোনাম উদাহরণ:

[root@server4 ~]# xxd old_sm_logo.png | head -5
0000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR
0000010: 0000 0134 0000 006f 0806 0000 0062 bf3c  ...4...o.....b.<

[root@server4 ~]# xxd /bin/ls | head -5
0000000: 7f45 4c46 0201 0100 0000 0000 0000 0000  .ELF............
0000010: 0200 3e00 0100 0000 a024 4000 0000 0000  ..>......$@.....

[root@server4 proj]# xxd resizer.sh | head -5
0000000: 2321 2f62 696e 2f62 6173 680a 5b20 2d7a  #!/bin/bash.[ -z
0000010: 2022 2431 2220 5d20 2626 2065 6368 6f20   "$1" ] && echo

3
এটি বরং বিভ্রান্তিকর। ইউনিক্স ফাইলগুলিতে প্রতি সেচটিতে "শিরোনাম" থাকে না। fileকমান্ড ফাইলের বিষয়বস্তু ফাইল যেভাবে সম্ভবত ব্যবহার করা দেয়ার উদ্দেশ্যে করা হচ্ছে থেকে অনুমান করার চেষ্টা করে। এটি অবর্ণনীয় নয়।
নাট এল্ডারেজ

আপনি কীভাবে আচরণের ব্যাখ্যা দিয়েছিলেন সে সম্পর্কে আপনি ঠিক file। এটি আসলে ফাইলটির বিশ্লেষণ করে। তবে বেশিরভাগ ফাইলের প্রকারগুলি শিরোনামের শিরোনাম দ্বারা সনাক্ত করা হয়। 0000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............একটি ELF এক্সিকিউটেবলের শিরোনাম (/ বিন / এলএসের প্রথম কয়েকটি বাইট)। একইভাবে #!/bin/bashএকটি ASCII ফাইলের শীর্ষে এটি শেল স্ক্রিপ্ট হিসাবে চিহ্নিত করবে। আরেকটি উদাহরণ: 0000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR(ক .png চিত্র)
h3rrmiller

2
তবে আপনার উত্তরটি এটিকে শোনায় যে শিরোনামটি কোনও ইউনিক্স ফাইলের অন্তর্নিহিত বৈশিষ্ট্য। উদাহরণস্বরূপ, পাঠ্য ফাইলগুলির এমন কোনও শিরোনাম নেই; ওপি-র মতো কেউ সম্ভবত একটি সি উত্স ফাইল এবং জাভা উত্স ফাইলটিকে আলাদা আলাদা "ফাইলের ধরণের" হিসাবে বিবেচনা করবেন তবে তাদের আলাদা করার জন্য কোনও শিরোনাম নেই। আমি যুক্তি দিয়ে বলব যে "ফাইল টাইপ" ইউনিক্সের অধীনে একটি অর্থবহ ধারণাও নয়; অপারেটিং সিস্টেমটি কেবল একটি ফাইল সিস্টেম সরবরাহ করে এবং প্রদত্ত যে কোনও ফাইলের বিষয়বস্তু কী বোঝায় তা সিদ্ধান্ত নেওয়া প্রতিটি অ্যাপ্লিকেশনের উপর নির্ভর করে।
নেট এল্ডারেজ

আমি রাজী. আমি খুব বেশি খরগোশের ছিদ্র না গিয়ে যতটা সম্ভব উত্তর দেওয়ার চেষ্টা করছিলাম।
h3rrmiller

7

প্রথম পরীক্ষা করার জন্য হার্ড-কোডেড ফাইল টাইপ যা কার্নেল দ্বারা স্বীকৃত। এগুলি ফাইলের ধরন যেমন ডিরেক্টরি, অক্ষর-বিশেষ ফাইল, ব্লক-বিশেষ ফাইল, পাইপ-বিশেষ ফাইল, সকেট এবং প্রতীকী লিঙ্ক। এই তথ্যটি ফাইলের ইনোড থেকে আসে। যদি ফাইলটি একটি সরল ফাইল হয়, তথ্যের পরবর্তী সেটটি নিদর্শনগুলি সন্ধান করে প্রথম 256 বাইট থেকে আসে। সুতরাং, পাঠ্য ফাইল এবং সি উত্স কোডগুলি সেই বাইটগুলি পরীক্ষা করে স্বীকৃত হয়। তদতিরিক্ত, ইউটিলিটিগুলি একটি ম্যাজিক নম্বরও সন্ধান করে যা ফাইলের ধরণটি পরীক্ষা ও যাচাই করতে ব্যবহৃত হয়। আপনি ফাইলটিতে তথ্য যুক্ত করে স্বীকৃত হওয়ার জন্য আপনার নিজের ফাইল প্রকারগুলি যুক্ত করতে পারেন /etc/magicmagic(5)ম্যাজিক ফাইলের ফর্ম্যাটটি দেখতে ম্যান পৃষ্ঠাটি দেখুন।

পুরানো প্রয়োগের ক্ষেত্রে (উদাহরণস্বরূপ সোলারিস) ফাইলটি /etc/magicবেশিরভাগ ফাইলের স্বীকৃতি পেয়েছে।


4

fileকমান্ড (এর অংশের) ফাইল পরিদর্শন ও একজন যোগ্যতাসম্পন্ন অনুমান উপার্জন থেকে কিছু হিউরিস্টিক প্রযোজ্য। এর বাইরেও কিছু বিশেষ মামলা রয়েছে যেখানে অতিরিক্ত তথ্য পাওয়া যায়; যেমন #!কোনও পাঠ্য ফাইলের শুরুতে, কোনও BoM (বাইট অর্ডার চিহ্ন), বা এক্সিকিউটেবল ফাইল ফর্ম্যাটগুলির নির্দিষ্ট শিরোনাম বাইট। #!এক্সেকিউটেবল এবং বাইনারি চিহ্ন সিস্টেম দ্বারা ব্যবহার করা হয় তাদের আলাদা করে বলতে।


4

ফাইলটি বাইনারি বা পাঠ্য কিনা সিস্টেমটি জানে না। সব মিলিয়ে (এএফআইকে) ইউনিক্স-টাইপ অপারেটিং সিস্টেমগুলি fopen(path, "rb")হ'ল হ'ল fopen(path "r")- bএর কোনও প্রভাব নেই। এটি গৃহীত হয়েছে কারণ স্ট্যান্ডার্ড সিটিকে অন্য কয়েকটি ওএসের কাছে পোর্টেবল হওয়া দরকার যা এইরকম পার্থক্য করে।


0

আমি যুক্তি দিয়ে বলব যে "ফাইল টাইপ" ইউনিক্সের অধীনে একটি অর্থবহ ধারণাও নয়;

মেইনফ্রেম কম্পিউটারগুলির ভাল পুরানো দিনগুলিতে তাদের ওএসের সিক্যুয়াল এবং সূচক-সিক্যুয়েন্সাল সহ বেশ কয়েকটি ফাইল প্রকার সমর্থিত। আধুনিক অপারেটিং সিস্টেমগুলি (আন * এক্স এবং তর্কযুক্ত উইন্ডোজ) ফাইল প্রকারের সেটকে ন্যূনতম (এক্সিকিউটেবল, শেয়ার্ড অবজেক্ট সহ) কমিয়ে দেয়।

একাধিক উপায়ে বৈধভাবে ব্যাখ্যা করা যায় এমন ফাইলগুলি নির্মাণ করাও সম্ভব হতে পারে

এটি সম্ভব, একটি ছদ্মবেশী ফাইল ফর্ম্যাট রয়েছে: সি কোডের একটি অংশ যা কোনও চিত্রের বিবরণ হিসাবে ব্যাখ্যা করা যায়। এছাড়াও বিভিন্ন ফর্ম্যাট কম এবং আরও সুনির্দিষ্ট রয়েছে: পাঠ্য ফাইল, এক্সএমএল ফাইল, একটি এসওএপি নথি।


1
ফাইল ফর্ম্যাটগুলি যেতে যেতে, এক্সপিএম তেমন জটিল নয়। আমি বৈধ জেপিইজি এবং একটি বৈধ জিপ ফাইল উভয়ই দিয়ে শুরু করার জন্য "কৌশল" বিবেচনা করি।
চিহ্নিত করুন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.