উত্তর:
আপনি যখনই কোনও ফাইল পড়েন /proc, এটি কার্নেলের মধ্যে কিছু কোড শুরু করে যা পাঠ্যটিকে ফাইল সামগ্রী হিসাবে পড়তে গণনা করে। প্রায় সমস্ত ফাইলের সময় এখনই কেন রিপোর্ট করা হয়েছে এবং সেগুলির আকার 0 হিসাবে প্রতিবেদন করা হয়েছে - এটি ফ্লাইতে সামগ্রীতে উত্পন্ন হওয়ার বিষয়টি ব্যাখ্যা করে - এখানে আপনার 0 টি "জানা নেই" হিসাবে পড়া উচিত। সাধারণ ফাইল সিস্টেমের বিপরীতে, ফাইল সিস্টেম যা মাউন্ট করা হয় /proc, যা প্রোফস নামে পরিচিত তা কোনও ডিস্ক বা অন্যান্য স্টোরেজ মিডিয়া (যেমন FAT, ext2, zfs,…) বা নেটওয়ার্কের মাধ্যমে (যেমন এনএফএস, সাম্বা,…) থেকে ডেটা লোড করে না) এবং ব্যবহারকারীর কোড কল করে না ( FUSE থেকে পৃথক )।
বেশিরভাগ বিএসডি ইউনিটগুলিতে প্রোকস উপস্থিত রয়েছে। প্রক্রিয়া সম্পর্কে তথ্য প্রতিবেদন করার উপায় হিসাবে এটি ইউএনএক্স 8 ম সংস্করণে এটি অ্যান্ড টি এর বেল ল্যাবগুলিতে তার জীবন শুরু করেছিল (এবং psপ্রায়শই পড়ার তথ্যের জন্য বেশিরভাগ প্রিন্টার হয় /proc)। বেশিরভাগ প্রোফস বাস্তবায়নের মধ্যে একটি ফাইল বা ডিরেক্টরি রয়েছে যা /proc/123পিআইডি 123 দিয়ে প্রক্রিয়া সম্পর্কে তথ্য জানাতে ডাকা হয় Linux লিনাক্স আরও অনেক এন্ট্রি সহ প্রক্ট ফাইল সিস্টেমকে প্রসারিত করে যা আপনার উদাহরণ সহ সিস্টেমের অবস্থা রিপোর্ট করে /proc/cpuinfo।
অতীতে, লিনাক্স /procবিভিন্ন ফাইল অর্জন করেছিল যা ড্রাইভারদের সম্পর্কে তথ্য সরবরাহ করে, তবে এই ব্যবহারটি এখন অনুকৃত হয় /sysএবং /procধীরে ধীরে বিকশিত হয়। পশ্চাদগম্য সামঞ্জস্যের জন্য যেখানে রয়েছে তেমন প্রবেশ করুন /proc/busএবং /proc/fs/ext4রয়ে গেছে তবে আরও নতুন অনুরূপ ইন্টারফেস তৈরি করা হয়েছে /sys। এই উত্তরে আমি লিনাক্সের দিকে ফোকাস করব।
/procলিনাক্স সংক্রান্ত নথিপত্রের জন্য আপনার প্রথম এবং দ্বিতীয় প্রবেশ পয়েন্টগুলি হ'ল:
proc(5)man পৃষ্ঠা ;/procফাইলসিস্টেম মধ্যে কার্নেল ডকুমেন্টেশন ।আপনার তৃতীয় এন্ট্রি পয়েন্ট, যখন ডকুমেন্টেশন এটি আবরণ করে না, উত্সটি পড়ছে । আপনি আপনার মেশিনে উত্সটি ডাউনলোড করতে পারেন, তবে এটি একটি বিশাল প্রোগ্রাম এবং লিনাক্সের ক্রস-রেফারেন্স, LXR একটি বড় সহায়তা। (এলএক্সআর এর অনেকগুলি রূপ রয়েছে; যার উপরের চালানোটি lxr.linux.noহ'ল নিকটতম তবে দুর্ভাগ্যক্রমে সাইটটি প্রায়শই নিচে থাকে) সি এর সামান্য জ্ঞান প্রয়োজন, তবে কোনও রহস্যজনক মান খুঁজে বের করার জন্য আপনাকে প্রোগ্রামার হওয়ার দরকার নেই) you ।
/procএন্ট্রিগুলির মূল হ্যান্ডলিং fs/procডিরেক্টরিতে রয়েছে। যে কোনও চালক এন্ট্রিগুলিতে নিবন্ধগুলি নিবন্ধ করতে পারবেন /proc(যদিও উপরে উল্লিখিত হিসাবে এটি এখন অনুকূলে দেওয়া হয়েছে /sys), সুতরাং আপনি যা fs/procসন্ধান করছেন তা যদি খুঁজে না পান তবে অন্য কোথাও দেখুন। ড্রাইভার ঘোষিত কল ফাংশন include/linux/proc_fs.h। ৩.৯ অবধি কার্নেল সংস্করণগুলি ফাংশন create_proc_entryএবং কিছু মোড়ক সরবরাহ করে (বিশেষত create_proc_read_entry), এবং কার্নেল সংস্করণ ৩.১০ এবং তারপরে কেবল proc_createএবং proc_create_data(এবং আরও কয়েকটি) সরবরাহ করে।
টেকিং /proc/cpuinfoএকটি উদাহরণ হিসাবে, জন্য একটি অনুসন্ধান "cpuinfo"থেকে কল আপনি বাড়ে proc_create("cpuinfo, …")মধ্যে fs/proc/cpuinfo.c। আপনি দেখতে পাচ্ছেন যে কোডটি বেশ অনেকটা বয়লারপ্লিট কোড: যেহেতু বেশিরভাগ ফাইল /procকেবল কিছু টেক্সট ডেটা ডাম্প করে, তাই করার জন্য সহায়ক ফাংশন রয়েছে। কেবল একটি seq_operationsকাঠামো রয়েছে, এবং আসল মাংস cpuinfo_opডেটা স্ট্রাকচারে থাকে যা আর্কিটেকচার নির্ভর, সাধারণত arch/<architecture>/kernel/setup.c(বা কখনও কখনও আলাদা কোনও ফাইলে) সংজ্ঞায়িত হয় । উদাহরণস্বরূপ x86 নিলে, আমরা নেতৃত্ব দিয়েছি arch/x86/kernel/cpu/proc.c। মূল ফাংশন হয়show_cpuinfo, যা পছন্দসই ফাইল সামগ্রী প্রিন্ট করে; বাকী অবকাঠামোটি পড়ার প্রক্রিয়াটিতে এটির যে অনুরোধটির অনুরোধ করে ডেটা ফিড করার জন্য রয়েছে। আপনি সিপিইউ ফ্রিকোয়েন্সি যেমন ফ্লাইতে গণনা করা কয়েকটি সংখ্যা সহ কার্নেলের বিভিন্ন ভেরিয়েবলের ডেটা থেকে ফ্লাইতে ডেটা একত্রিত হতে পারেন ।
এর একটি বড় অংশ /procহ'ল প্রতি প্রক্রিয়া সম্পর্কিত তথ্য /proc/<PID>। এই থেকে নিবন্ধিত fs/proc/base.c, এ tgid_base_stuffঅ্যারে ; এখানে নিবন্ধিত কিছু ফাংশন অন্যান্য ফাইলে সংজ্ঞায়িত করা হয়। এই এন্ট্রিগুলি কীভাবে উত্পন্ন হয় তার কয়েকটি উদাহরণ দেখি:
cmdlineproc_pid_cmdlineএকই ফাইল দ্বারা উত্পাদিত হয় । এটি প্রক্রিয়াতে ডেটা সনাক্ত করে এবং এটি মুদ্রণ করে।clear_refsআমরা এ পর্যন্ত যে এন্ট্রি দেখেছি তার বিপরীতে, লেখার যোগ্য তবে পাঠযোগ্য নয়। সুতরাং proc_clear_refs_operationsস্ট্রাকচারগুলি একটি clear_refs_writeফাংশন সংজ্ঞায়িত করে তবে কোনও পঠন কার্য নয়।cwdএটি একটি প্রতীকী লিঙ্ক (কিছুটা মায়াবী) proc_cwd_linkযা ঘোষিত হয়েছিল , যা প্রক্রিয়াটির বর্তমান ডিরেক্টরিটি অনুসন্ধান করে এবং এটিকে লিঙ্ক সামগ্রী হিসাবে ফিরিয়ে দেয়।fdএকটি উপ-ডিরেক্টরি ডিরেক্টরিতে ক্রিয়াকলাপগুলি proc_fd_operationsডেটা স্ট্রাকচারে সংজ্ঞায়িত হয় (এন্ট্রিগুলি গণনা করে এমন ফাংশন ব্যতীত তারা বয়লারপ্লেট proc_readfd, যা প্রক্রিয়াটির উন্মুক্ত ফাইলগুলি গণনা করে) যখন এন্ট্রিগুলির ক্রিয়াকলাপগুলি `proc_fd_inode_operation- এ থাকে ।আরেকটি গুরুত্বপূর্ণ এলাকা /procহল /proc/sys, যা একটি সরাসরি ইন্টারফেস sysctl। এই শ্রেণিবিন্যাসে একটি এন্ট্রি থেকে পড়া সম্পর্কিত সিসেক্টল মানটির মান প্রদান করে, এবং লেখার ফলে সাইক্লিটল মান সেট করে। সিস্কিটল-এর প্রবেশের পয়েন্টগুলি রয়েছে fs/proc/proc_sysctl.c। Sysctls register_sysctlএবং বন্ধুদের সাথে তাদের নিজস্ব নিবন্ধকরণ ব্যবস্থা রয়েছে system
আপনার সেরা বন্ধুটি কী ঘটনার নেপথ্যে কী ধরণের যাদু ঘটছে তা অন্তর্দৃষ্টি অর্জন করার চেষ্টা করার সময় strace। এই সরঞ্জামটি পরিচালনা করা শিখাই পর্দার আড়ালে যে ক্রেজি ম্যাজিক ঘটছে তার জন্য আরও ভাল প্রশংসা পেতে আপনি যা করতে পারেন তার মধ্যে অন্যতম সেরা কাজ।
$ strace -s 200 -m strace.log cat /proc/cpuinfo
...
read(3, "processor\t: 0\nvendor_id\t: GenuineIntel\ncpu family\t: 6\nmodel\t\t: 37\nmodel name\t: Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz\nstepping\t: 5\nmicrocode\t: 0x4\ncpu MHz\t\t: 1199.000\ncache size\t: 3072 KB\nphy"..., 65536) = 3464
write(1, "processor\t: 0\nvendor_id\t: GenuineIntel\ncpu family\t: 6\nmodel\t\t: 37\nmodel name\t: Intel(R) Core(TM) i5 CPU M 560 @ 2.67GHz\nstepping\t: 5\nmicrocode\t: 0x4\ncpu MHz\t\t: 1199.000\ncache size\t: 3072 KB\nphy"..., 3464) = 3464
read(3, "", 65536) = 0
close(3) = 0
...
উপরের আউটপুট থেকে আপনি দেখতে পাচ্ছেন যে /proc/cpuinfoএটি কেবল একটি নিয়মিত ফাইল, বা কমপক্ষে একটির মতো উপস্থিত হতে পারে। সুতরাং আরও গভীর খনন করা যাক।
ফাইলটি নিজেই তাকালে এটি "কেবল একটি ফাইল" হিসাবে উপস্থিত হবে।
$ ls -l /proc/cpuinfo
-r--r--r--. 1 root root 0 Mar 26 22:45 /proc/cpuinfo
তবে একটু ঘুরে দেখুন। আমরা আমাদের প্রথম ইঙ্গিতটি পাই যা এর বিশেষ, ফাইলটির আকার 0 বাইটের নোট করুন।
# 2 - স্ট্যাট সহ ..আমরা যদি এখন ফাইলটি ব্যবহার করে statদেখি তবে আমরা আমাদের পরবর্তী ইঙ্গিত পেতে পারি যে সম্পর্কে বিশেষ কিছু রয়েছে /proc/cpuinfo।
$ stat /proc/cpuinfo
File: ‘/proc/cpuinfo’
Size: 0 Blocks: 0 IO Block: 1024 regular empty file
Device: 3h/3dInode: 4026532023 Links: 1
Access: (0444/-r--r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:proc_t:s0
Access: 2014-03-26 22:46:18.390753719 -0400
Modify: 2014-03-26 22:46:18.390753719 -0400
Change: 2014-03-26 22:46:18.390753719 -0400
Birth: -
# 2 চালান
$ stat /proc/cpuinfo
File: ‘/proc/cpuinfo’
Size: 0 Blocks: 0 IO Block: 1024 regular empty file
Device: 3h/3dInode: 4026532023 Links: 1
Access: (0444/-r--r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:proc_t:s0
Access: 2014-03-26 22:46:19.945753704 -0400
Modify: 2014-03-26 22:46:19.945753704 -0400
Change: 2014-03-26 22:46:19.945753704 -0400
Birth: -
অ্যাক্সেস, পরিমার্জন, এবং বার পরিবর্তন করুন? তারা প্রতিটি অ্যাক্সেসের জন্য পরিবর্তন করে রাখে। এটি অত্যন্ত অস্বাভাবিক যে সমস্ত 3 এর মতো পরিবর্তিত হবে। সম্পাদনা না করা থাকলে কোনও ফাইলের টাইমস্ট্যাম্প বৈশিষ্ট্যগুলি সাধারণত একই থাকে।
# 3 - ফাইল সহ ..তবুও একটি সূত্র যে এই ফাইলটি নিয়মিত ফাইল ব্যতীত অন্য কিছু:
$ file /proc/cpuinfo
/proc/cpuinfo: empty
যদি এটির নামযুক্ত পাইপের কিছু প্রকাশ হয় তবে এটি এই ফাইলগুলির মধ্যে একটির মতো দেখাবে:
$ ls -l /dev/initctl /dev/zero
prw-------. 1 root root 0 Mar 26 20:09 /dev/initctl
crw-rw-rw-. 1 root root 1, 5 Mar 27 00:39 /dev/zero
$ file /dev/initctl /dev/zero
/dev/initctl: fifo (named pipe)
/dev/zero: character special
আমরা একটি স্পর্শ যদি emptyfile, /proc/cpuinfoএকটি ফাইল তারপর একটি নল মত আরো মনে করা হয় না:
$ touch emptyfile
$ ls -l emptyfile
-rw-rw-r--. 1 saml saml 0 Mar 27 07:40 emptyfile
$ file emptyfile
emptyfile: empty
# 4 - মাউন্ট সহ ..
সুতরাং এই মুহুর্তে আমাদের একটি পদক্ষেপ ফিরে নেওয়া এবং কিছুটা জুম আউট করা দরকার। আমরা একটি নির্দিষ্ট ফাইল খুঁজছি কিন্তু সম্ভবত আমাদের এই ফাইলটি থাকা ফাইল সিস্টেমের দিকে তাকানো উচিত। এবং এর জন্য আমরা mountকমান্ডটি ব্যবহার করতে পারি ।
$ mount | grep " /proc "
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
ঠিক আছে, সুতরাং ফাইল সিস্টেম টাইপ টাইপ proc। সুতরাং /procএকটি পৃথক ফাইল সিস্টেমের ধরণ, এটি আমাদের ইঙ্গিত দেয় যে ফাইলগুলি /procবিশেষ। তারা কেবল আপনার মিল ফাইলগুলি চালায় না। সুতরাং আসুন procফাইল সিস্টেমটি কী বিশেষ করে তোলে সে সম্পর্কে আরও কিছু তথ্য সন্ধান করি ।
কটাক্ষপাত গ্রহণ mountএর মানুষ পৃষ্ঠা:
প্রোক ফাইল সিস্টেমটি কোনও বিশেষ ডিভাইসের সাথে সম্পর্কিত নয় এবং এটি মাউন্ট করার সময় একটি ডিভাইস স্পেসিফিকেশনের পরিবর্তে একটি নির্বিচারে কীওয়ার্ড যেমন ব্যবহার করা যেতে পারে। (প্রথাগত পছন্দ কোনওটিই কম ভাগ্যবান নয়: ত্রুটি বার্তা `ব্যস্ত কেউই নয়) অমীমাংসিত হতে পারে)
এবং যদি আমরা procএর ম্যান পৃষ্ঠাটি একবার দেখে নিই :
প্রোক ফাইল সিস্টেমটি সিউডো-ফাইল সিস্টেম যা কার্নেল ডেটা স্ট্রাকচারের ইন্টারফেস হিসাবে ব্যবহৃত হয়। এটি সাধারণত / প্রোকে মাউন্ট করা হয়। এর বেশিরভাগই কেবল পঠনযোগ্য, তবে কিছু ফাইল কার্নেল ভেরিয়েবল পরিবর্তন করতে দেয়।
একই মানুষ পৃষ্ঠায় আরও কিছুটা নিচে:
জন্য / proc / cpuinfo
এটি সিপিইউ এবং সিস্টেম আর্কিটেকচার নির্ভর আইটেমগুলির সংকলন, প্রতিটি সমর্থিত আর্কিটেকচারের জন্য আলাদা তালিকা list দুটি সাধারণ এন্ট্রি প্রসেসর যা সিপিইউ নম্বর এবং বোগোমিপস দেয়; একটি সিস্টেম ধ্রুবক যা কার্নেল প্রারম্ভিককরণের সময় গণনা করা হয়। এসএমপি মেশিনগুলির প্রতিটি সিপিইউয়ের জন্য তথ্য রয়েছে। Lscpu (1) কমান্ড এই ফাইলটি থেকে এর তথ্য সংগ্রহ করে।
ম্যান পৃষ্ঠার নীচে একটি কার্নেল ডকুমেন্টের একটি উল্লেখ রয়েছে যা আপনি এখানে শিরোনাম পাবেন: THE / proc ফাইলসাইস্টেম । এই দস্তাবেজ থেকে উদ্ধৃতি:
প্রোক ফাইল সিস্টেম কার্নেলের অভ্যন্তরীণ ডেটা স্ট্রাকচারের ইন্টারফেস হিসাবে কাজ করে। এটি সিস্টেম সম্পর্কে তথ্য প্রাপ্ত করতে এবং রানটাইম (সিস্টেস্টল) এ নির্দিষ্ট কার্নেল প্যারামিটারগুলি পরিবর্তন করতে ব্যবহৃত হতে পারে।
তাহলে আমরা এখানে কী শিখলাম? ওয়েল দেওয়া যে /procএকটি ছদ্ম ফাইলসিস্টেম এবং একটি "অভ্যন্তরীণ তথ্য গঠন ইন্টারফেস" হিসাবে উল্লেখ করা হয় এটি সম্ভবত অনুমান করা এটি মধ্যে আইটেম নেই নিরাপদ না প্রকৃত ফাইলগুলি, বরং শুধু প্রকাশ ফাইল মত চেহারা তৈরি করা, কিন্তু সত্যিই হয় না।
আমি এই উক্তিটি দিয়ে বন্ধ করব যা স্পষ্টতই man 5 procপ্রায় ২০০৪ এর পূর্ববর্তী সংস্করণে ব্যবহৃত হত তবে যে কোনও কারণে আর অন্তর্ভুক্ত নেই। দ্রষ্টব্য: আমি নিশ্চিত নই কেন এটি অপসারণ করা হয়েছে কারণ এটি কী খুব সুন্দরভাবে বর্ণনা করে /proc:
GNU / Linux সিস্টেমে / proc ডিরেক্টরি কার্নেলের সাথে ইন্টারফেসের মতো একটি ফাইল-সিস্টেম সরবরাহ করে। এটি অ্যাপ্লিকেশন এবং ব্যবহারকারীদের থেকে সাধারণ ফাইল-সিস্টেম I / O ক্রিয়াকলাপটি ব্যবহার করে কার্নেল থেকে মান আনতে এবং সেট করতে সহায়তা করে।
প্রোক ফাইল সিস্টেমটি কখনও কখনও প্রক্রিয়া সম্পর্কিত তথ্য সিউডো-ফাইল সিস্টেম হিসাবে পরিচিত। এতে `` রিয়েল '' ফাইলগুলি নয় বরং রানটাইম সিস্টেমের তথ্য রয়েছে (যেমন সিস্টেম মেমোরি, ডিভাইসগুলি মাউন্ট করা, হার্ডওয়্যার কনফিগারেশন ইত্যাদি)। এই কারণে এটি কার্নেলের জন্য একটি নিয়ন্ত্রণ এবং তথ্য কেন্দ্র হিসাবে বিবেচিত হতে পারে। আসলে, সিস্টেম ইউটিলিটিগুলির অনেকগুলি এই ডিরেক্টরিতে কেবল ফাইলগুলিতে কল করা হয়। উদাহরণস্বরূপ, lsmod কমান্ড, যা কার্নেলের দ্বারা লোড হওয়া মডিউলগুলি তালিকাভুক্ত করে, মূলত 'ক্যাট / প্রোক / মডিউল' এর সমান এবং lspci, যা সিস্টেমের পিসিআই বাসের সাথে সংযুক্ত ডিভাইসগুলি তালিকাভুক্ত করে, 'বিড়াল / proc / PCI '। এই ডিরেক্টরিতে অবস্থিত ফাইলগুলিকে পরিবর্তন করে আপনি সিস্টেম চলাকালীন কার্নেল প্যারামিটারগুলি পরিবর্তন করতে পারেন।
সূত্র: প্রোক সিউডো ফাইল-সিস্টেম
strace -o catcpuproc.txt cat /proc/cpuinfo
@ এসএলএম প্রদত্ত উত্তরটি খুব ব্যাপক, তবে আমি মনে করি একটি সহজ ব্যাখ্যা দৃষ্টিভঙ্গির পরিবর্তন থেকে আসতে পারে।
প্রতিদিনের ব্যবহারে আমরা ফাইলগুলিকে শারীরিক জিনিস হিসাবে ভাবতে পারি। কিছু ডিভাইসে সঞ্চিত ডেটা খণ্ড। এটি / proc / cpuinfo এর মতো ফাইলগুলিকে খুব রহস্যময় এবং বিভ্রান্তিকর করে তোলে। যাইহোক, যদি আমরা ফাইলগুলি একটি ইন্টারফেস হিসাবে মনে করি তবে এটি সমস্তই সঠিক ধারণা দেয় ; কিছু প্রোগ্রামের মধ্যে এবং বাইরে ডেটা প্রেরণের একটি উপায়।
যে প্রোগ্রামগুলি এই উপায়ে ডেটা প্রেরণ এবং গ্রহণ করে তা হ'ল ফাইল সিস্টেম বা ড্রাইভার (আপনি কীভাবে এই শর্তাদি সংজ্ঞায়িত করেন তার উপর নির্ভর করে এটি কোনও সংজ্ঞা বা খুব সংকীর্ণ হতে পারে)। গুরুত্বপূর্ণ বিষয় হ'ল এই প্রোগ্রামগুলির মধ্যে কিছু এই ইন্টারফেসের মাধ্যমে প্রেরিত ডেটা সঞ্চয় এবং পুনরুদ্ধারে একটি হার্ডওয়্যার ডিভাইস ব্যবহার করে; কিন্তু সব না.
ফাইল সিস্টেমগুলির কয়েকটি উদাহরণ যা কোনও স্টোরেজ ডিভাইস ব্যবহার করে না (অন্তত সরাসরি)
প্ল্যান 9 ওএস ( http://en.wikedia.org/wiki/Plan_9_from_Bell_Labs ) একটি সাধারণ প্রোগ্রামিং ইন্টারফেস হিসাবে ফাইলগুলি ব্যবহারের চরম উদাহরণ।