আমি যদি ফাইলের নামগুলির প্রত্যয় না থাকে তবে কীভাবে ফাইল প্রকারগুলি জানা যায় তা জানতে চাই।
উদাহরণস্বরূপ, নামের ফাইলটি myfile
বাইনারি বা শুরু হতে পাঠ্য হতে পারে , ফাইল বাইনারি বা পাঠ্য কিনা সিস্টেমটি কীভাবে জানতে পারে?
আমি যদি ফাইলের নামগুলির প্রত্যয় না থাকে তবে কীভাবে ফাইল প্রকারগুলি জানা যায় তা জানতে চাই।
উদাহরণস্বরূপ, নামের ফাইলটি myfile
বাইনারি বা শুরু হতে পাঠ্য হতে পারে , ফাইল বাইনারি বা পাঠ্য কিনা সিস্টেমটি কীভাবে জানতে পারে?
উত্তর:
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
কেবল "ডেটা" প্রিন্ট করে।
সুতরাং, আপনি দেখুন প্রত্যয় প্রয়োজন হয় না। যদি ভুল সেট করা হয় তবে একটি প্রত্যয় যাইহোক বিভ্রান্ত করতে পারে।
file(1)
করে তা ধারণার অনুরূপ , তবে একটি (খুব) বিভিন্ন বাস্তবায়নের সাথে।
প্রায়শই, এটি যত্ন করে না। আপনি এটি কেবল কোনও প্রোগ্রামে পাস করেন এবং হয় এটির ব্যাখ্যা দেয় বা হয় না। কোনও পাঠ্য সম্পাদকটিতে .jpg খোলার পক্ষে এটি কার্যকর নাও হতে পারে তবে আপনি এটি করতে বাধা পান না। ফাইল ফাইলের বাকি অংশগুলির মতো এই এক্সটেনশনটি মানুষের সাংগঠনিক সুবিধার জন্য।
একাধিক উপায়ে বৈধভাবে ব্যাখ্যা করা যায় এমন ফাইলগুলি নির্মাণ করাও সম্ভব হতে পারে। জিপ ফাইল ফর্ম্যাট শুরু হওয়ার সাথে সাথে ফাইলের শেষে একটি শিরোনাম থাকে , আপনি অন্য জিনিসগুলি সামনে রেখে দিতে পারেন এবং এটি এখনও জিপ ফাইল হিসাবে লোড হবে। এটি সাধারণত স্ব-উত্তোলন জিপ ফাইলগুলি তৈরি করতে ব্যবহৃত হয়।
এই তথ্যটি সাধারণত ফাইলের শিরোনামে পাওয়া যায়। 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
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 চিত্র)
প্রথম পরীক্ষা করার জন্য হার্ড-কোডেড ফাইল টাইপ যা কার্নেল দ্বারা স্বীকৃত। এগুলি ফাইলের ধরন যেমন ডিরেক্টরি, অক্ষর-বিশেষ ফাইল, ব্লক-বিশেষ ফাইল, পাইপ-বিশেষ ফাইল, সকেট এবং প্রতীকী লিঙ্ক। এই তথ্যটি ফাইলের ইনোড থেকে আসে। যদি ফাইলটি একটি সরল ফাইল হয়, তথ্যের পরবর্তী সেটটি নিদর্শনগুলি সন্ধান করে প্রথম 256 বাইট থেকে আসে। সুতরাং, পাঠ্য ফাইল এবং সি উত্স কোডগুলি সেই বাইটগুলি পরীক্ষা করে স্বীকৃত হয়। তদতিরিক্ত, ইউটিলিটিগুলি একটি ম্যাজিক নম্বরও সন্ধান করে যা ফাইলের ধরণটি পরীক্ষা ও যাচাই করতে ব্যবহৃত হয়। আপনি ফাইলটিতে তথ্য যুক্ত করে স্বীকৃত হওয়ার জন্য আপনার নিজের ফাইল প্রকারগুলি যুক্ত করতে পারেন /etc/magic
। magic(5)
ম্যাজিক ফাইলের ফর্ম্যাটটি দেখতে ম্যান পৃষ্ঠাটি দেখুন।
পুরানো প্রয়োগের ক্ষেত্রে (উদাহরণস্বরূপ সোলারিস) ফাইলটি /etc/magic
বেশিরভাগ ফাইলের স্বীকৃতি পেয়েছে।
file
কমান্ড (এর অংশের) ফাইল পরিদর্শন ও একজন যোগ্যতাসম্পন্ন অনুমান উপার্জন থেকে কিছু হিউরিস্টিক প্রযোজ্য। এর বাইরেও কিছু বিশেষ মামলা রয়েছে যেখানে অতিরিক্ত তথ্য পাওয়া যায়; যেমন #!
কোনও পাঠ্য ফাইলের শুরুতে, কোনও BoM (বাইট অর্ডার চিহ্ন), বা এক্সিকিউটেবল ফাইল ফর্ম্যাটগুলির নির্দিষ্ট শিরোনাম বাইট। #!
এক্সেকিউটেবল এবং বাইনারি চিহ্ন সিস্টেম দ্বারা ব্যবহার করা হয় তাদের আলাদা করে বলতে।
আমি যুক্তি দিয়ে বলব যে "ফাইল টাইপ" ইউনিক্সের অধীনে একটি অর্থবহ ধারণাও নয়;
মেইনফ্রেম কম্পিউটারগুলির ভাল পুরানো দিনগুলিতে তাদের ওএসের সিক্যুয়াল এবং সূচক-সিক্যুয়েন্সাল সহ বেশ কয়েকটি ফাইল প্রকার সমর্থিত। আধুনিক অপারেটিং সিস্টেমগুলি (আন * এক্স এবং তর্কযুক্ত উইন্ডোজ) ফাইল প্রকারের সেটকে ন্যূনতম (এক্সিকিউটেবল, শেয়ার্ড অবজেক্ট সহ) কমিয়ে দেয়।
একাধিক উপায়ে বৈধভাবে ব্যাখ্যা করা যায় এমন ফাইলগুলি নির্মাণ করাও সম্ভব হতে পারে
এটি সম্ভব, একটি ছদ্মবেশী ফাইল ফর্ম্যাট রয়েছে: সি কোডের একটি অংশ যা কোনও চিত্রের বিবরণ হিসাবে ব্যাখ্যা করা যায়। এছাড়াও বিভিন্ন ফর্ম্যাট কম এবং আরও সুনির্দিষ্ট রয়েছে: পাঠ্য ফাইল, এক্সএমএল ফাইল, একটি এসওএপি নথি।