এটি আসলে বেশ সহজ, কমপক্ষে যদি আপনার প্রয়োগের বিশদ প্রয়োজন না হয়।
প্রথমে, লিনাক্সে সমস্ত ফাইল সিস্টেম (ext2, ext3, btrfs, reiserfs, tmpfs, zfs, ...) কার্নেলে প্রয়োগ করা হয়। কিছু FUSE- র মাধ্যমে ইউজারল্যান্ড কোডে অফলোড কাজ করতে পারে, এবং কিছু কেবল কার্নেল মডিউল আকারে আসে ( নেটিভ জেডএফএস লাইসেন্সের বিধিনিষেধের কারণে পরবর্তীটির একটি উল্লেখযোগ্য উদাহরণ), তবে কোনওভাবেই সেখানে কার্নেল উপাদান থেকে যায়। এটি একটি গুরুত্বপূর্ণ বেসিক।
একটি প্রোগ্রাম একটি ফাইল থেকে পড়তে চায়, তখন তা বিভিন্ন সিস্টেম গ্রন্থাগার কল যা পরিণামে একটি আকারে কার্নেল শেষ পর্যন্ত জারি করবে open()
, read()
, close()
ক্রম (সঙ্গে সম্ভবত seek()
ভাল পরিমাপ জন্য নিক্ষিপ্ত)। কার্নেল প্রদত্ত পাথ এবং ফাইলের নাম নেয় এবং ফাইল সিস্টেম এবং ডিভাইসের মাধ্যমে I / O স্তর এগুলিকে কিছু অন্তর্নিহিত স্টোরেজে শারীরিক পড়ার অনুরোধগুলিতে (এবং অনেক ক্ষেত্রে অনুরোধগুলিও লেখেন - উদাহরণস্বরূপ আটাইম আপডেটগুলি ভাবেন) অনুবাদ করে।
যাইহোক, এটি অনুরোধগুলি বিশেষত শারীরিক, ধ্রুবক স্টোরেজে অনুবাদ করতে হবে না । কার্নেলের চুক্তিটি হল যে সিস্টেম কলগুলির নির্দিষ্ট সেটটি জারি করা প্রশ্নযুক্ত ফাইলের বিষয়বস্তু সরবরাহ করবে । আমাদের শারীরিক রাজ্যে ঠিক যেখানে "ফাইল" বিদ্যমান তা এটিকে গৌণ।
উপর /proc
সাধারণত মাউন্ট কি নামে পরিচিত হয় procfs
। এটি একটি বিশেষ ফাইল সিস্টেমের ধরণ, তবে যেহেতু এটি একটি ফাইল সিস্টেম, তাই এটি ext3
কোথাও মাউন্ট করা কোনও ফাইল সিস্টেমের চেয়ে সত্যই আলাদা নয় । অনুরোধটি প্রোকফস ফাইল সিস্টেম ড্রাইভার কোডে পৌঁছে যায়, যা এই সমস্ত ফাইল এবং ডিরেক্টরি সম্পর্কে জানে এবং কার্নেলের ডেটা স্ট্রাকচার থেকে নির্দিষ্ট টুকরো তথ্য সরবরাহ করে ।
এই ক্ষেত্রে "স্টোরেজ স্তর" হ'ল কার্নেল ডেটা স্ট্রাকচার এবং procfs
সেগুলি অ্যাক্সেস করার জন্য একটি পরিষ্কার, সুবিধাজনক ইন্টারফেস সরবরাহ করে। মনে রাখবেন না যে মাউন্ট করা মাউন্টগুলি /proc
কেবল কনভেনশন; আপনি এটিকে সহজেই অন্য কোথাও মাউন্ট করতে পারেন। প্রকৃতপক্ষে, এটি কখনও কখনও সম্পন্ন করা হয়, উদাহরণস্বরূপ ক্রুট জেলগুলিতে যখন সেখানে কোনও প্রক্রিয়া চলমান থাকে তবে কোনও কারণে প্রসেসের / প্র্যাক অ্যাক্সেসের প্রয়োজন হয়।
আপনি কোনও ফাইলে একটি মান লিখলে এটি একইভাবে কাজ করে; কার্নেল পর্যায়ে, যে একটি সিরিজ অনুবাদ open()
, seek()
, write()
, close()
কল যা আবার ফাইল সিস্টেম ড্রাইভার প্রেরণ করুন; আবার, এই বিশেষ ক্ষেত্রে, procfs কোড।
আপনি file
প্রত্যাবর্তন দেখতে পাওয়ার বিশেষ কারণটি empty
হ'ল প্রোফফ দ্বারা প্রকাশিত অনেকগুলি ফাইল 0 বাইট আকারের সাথে প্রকাশিত হয় । 0 বাইট আকারটি সম্ভবত কার্নেল পাশের একটি অপ্টিমাইজেশন হতে পারে (/ proc এ থাকা অনেকগুলি ফাইল গতিশীল এবং সহজেই দৈর্ঘ্যে পরিবর্তিত হতে পারে, সম্ভবত এক থেকে পরবর্তী অংশেও পড়তে পারে এবং প্রতিটি ডিরেক্টরিতে প্রতিটি ফাইলের দৈর্ঘ্য গণনা করা হবে) সম্ভাব্যভাবে খুব ব্যয়বহুল)। এই উত্তরের মন্তব্যে গিয়ে, যা আপনি নিজের সিস্টেমে স্ট্রেস বা অনুরূপ সরঞ্জাম ব্যবহার করে যাচাই করতে পারেন, file
প্রথমে stat()
কোনও বিশেষ ফাইল সনাক্ত করার জন্য একটি কল দেয় এবং তারপরে যদি ফাইলের আকার 0 হিসাবে রিপোর্ট করা হয় তবে সুযোগটি গ্রহণ করে , বাতিল এবং ফাইলটি খালি বলে প্রতিবেদন করুন।
এই আচরণ আসলে নথিভুক্ত করা যেতে পারে নির্দিষ্ট করে ওভাররাইড -s
বা --special-files
উপর file
, আবাহন যদিও যেমন ম্যানুয়েল পৃষ্ঠা পার্শ্ব প্রতিক্রিয়া থাকতে পারে বিবৃত। নীচের উদ্ধৃতিটি বিএসডি ফাইল 5.11 ম্যান পৃষ্ঠা থেকে, অক্টোবর 17 2011 তারিখে করা হয়েছে।
সাধারণত, ফাইল কেবল স্টেট (2) রিপোর্টগুলি সাধারণ ফাইলগুলির মধ্যে আর্গুমেন্ট ফাইলগুলির প্রকারটি পড়ার এবং তা নির্ধারণের চেষ্টা করে। এটি সমস্যাগুলি প্রতিরোধ করে, কারণ বিশেষ ফাইলগুলি পড়ার অদ্ভুত পরিণতি হতে পারে। -s
বিকল্পটি নির্দিষ্ট করার ফলে ফাইলটি যুক্তিযুক্ত ফাইলগুলি পড়তে পারে যা ব্লক বা চরিত্রের বিশেষ ফাইল। কাঁচা ডিস্ক পার্টিশনগুলিতে ডেটা ফাইল-সিস্টেমের ধরণ নির্ধারণের জন্য এটি দরকারী, যা বিশেষ ফাইলগুলি ব্লক করে। এই বিকল্পের ফলে ফাইলটি স্ট্যাট (2) দ্বারা উল্লিখিত ফাইলের আকারটিকে উপেক্ষা করতে পারে কারণ কিছু সিস্টেমে এটি কাঁচা ডিস্ক পার্টিশনের জন্য শূন্য আকারের রিপোর্ট করে।
strace file /proc/version
বা এটি দেখেন তখনltrace -S /proc/version
অপটিমাইজেশনটি ছোট হয়। এটিstat()
প্রথমে একটি কল করে এবং আকারটি 0 টি দেখতে পেয়ে যায়, এভাবে এড়িয়ে চলেopen()
- তবে এর আগে এটি বেশ কয়েকটি ম্যাজিক ফাইল লোড করছে।