/ সরকারী / <পিড> / এক্সিম সিমলিংক কীভাবে সাধারণ প্রতীক থেকে পৃথক হয়?


23

যদি আমি কোনও প্রক্রিয়া শুরু করি এবং তারপরে বাইনারি মুছতে পারি তবে আমি এগুলি থেকে পুনরুদ্ধার করতে পারি /proc/<pid>/exe:

$ cp `which sleep` .
$ ./sleep 10m &
[1] 13728
$ rm sleep
$ readlink /proc/13728/exe                           
/tmp/sleep (deleted)
$ cp /proc/13728/exe ./sleep-copy
$ diff sleep-copy `which sleep` && echo not different
not different
$ stat /proc/13728/exe 
  File: ‘/proc/13728/exe’ -> ‘/tmp/sleep (deleted)’
  Size: 0           Blocks: 0          IO Block: 1024   symbolic link

অন্যদিকে, আমি যদি নিজেই একটি প্রতীকী লিঙ্ক তৈরি করি তবে লক্ষ্যটি মুছুন এবং অনুলিপি করার চেষ্টা করুন:

cp: cannot stat ‘sleep’: No such file or directory

/procকার্নেলের একটি ইন্টারফেস। তাহলে কি এই প্রতীকী লিঙ্কটি আসলে মেমরিতে লোড হওয়া অনুলিপিটি নির্দেশ করে তবে আরও দরকারী নামের সাথে? exeলিঙ্কটি ঠিক কীভাবে কাজ করে?

উত্তর:


19

/proc/<pid>/exeপ্রতীকী লিঙ্কগুলির জন্য সাধারণ শব্দার্থকে অনুসরণ করে না। প্রযুক্তিগতভাবে এটি পসিক্সের লঙ্ঘন হিসাবে গণ্য হতে পারে তবে /procসর্বোপরি এটি একটি বিশেষ ফাইল সিস্টেম।

/proc/<pid>/exeআপনি statএটি যখন একটি syMLink হিসাবে প্রদর্শিত হবে। প্রক্রিয়াটির জন্য নির্বাহযোগ্য পাথের নামটি এটি জেনে রাখার জন্য কার্নেলটির পক্ষে এটি একটি সহজ উপায়। তবে আপনি যখন সেই "ফাইল" আসলে ওপেন করেন, সেখানে কোনও সিমলিংকের লিখিত সামগ্রীগুলি পড়ার সাধারণ প্রক্রিয়া নেই। পরিবর্তে কার্নেলটি আপনাকে সরাসরি ওপেন ফাইল এন্ট্রিটিতে সরাসরি অ্যাক্সেস দেয়।

যে লক্ষ্য করুন যখন আপনি ls -lএকটি /proc/<pid>/exeএকটি প্রক্রিয়া যার এক্সিকিউটেবল হয়েছে সিমবলিক লিঙ্ক লক্ষ্য মোছা শেষে STRING "(মুছে)" হয়েছে জন্য pseudofile। এটি সাধারণত একটি সিমিলিংকে অ সংবেদনশীল হতে পারে: "(মুছে ফেলা)" দিয়ে শেষ হওয়া নামের সাথে লক্ষ্যযুক্ত পথে বাস করা কোনও ফাইল অবশ্যই নেই।

TL; ডproc ফাইলসিস্টেম বাস্তবায়ন মাত্র পথনাম রেজোলিউশনে নিজস্ব জাদু জিনিস আছে।


1
জাদু বসবাস proc_exe_link()মধ্যে proc: ফাইলসিস্টেম lxr.free-electrons.com/source/fs/proc/base.c?v=4.0#L1350
স্টিফেন Kitt

আপনি কীভাবে জানবেন যে এই জাতীয় নামের কোনও ফাইল অবশ্যই নেই? কেউ হয়ত এটিকে একটি পরীক্ষা হিসাবে তৈরি করেছেন; আমি এর আগে একবার করে ফেলেছি। খুব সম্ভবত এটি অন্য কোনও কারণে উপস্থিত থাকবে তবে এখনও অসম্ভব নয়।
flarn2006

4

/ Proc এর ম্যান পেজ অনুসারে লিনাক্স ২.২ এর অধীনে এবং তারপরে ফাইলটি একটি প্রতীকী লিঙ্ক যা সম্পাদিত কমান্ডের আসল পথের নাম ধারণ করে। দৃশ্যত, বাইনারি মেমরি, এবং মধ্যে লোড হয় /proc/[pid]/exeবাইনারি বিষয়বস্তুর সাথে পয়েন্ট মেমরি

অন্যদিকে, লিনাক্স ২.০ এর অধীনে এবং এর আগে, /proc/[pid]/exeসম্ভবতঃ সম্পাদিত ফাইলটির (ফাইল সিস্টেমে) একটি পয়েন্টার ।

সুতরাং আপনি যদি লিনাক্স ২.০ বা তার আগের কমান্ডগুলির একই তালিকাটি চালাতেন, সম্ভবত আপনি একটি ত্রুটি পেয়ে যাবেন "এই জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই"।


কোন ম্যানপেজ? linux.die.net/man/5/proc এবং manpages.ubuntu.com/manpages/utopic/en/man5/proc.5.html "এটিকে খোলার চেষ্টা করলে মৃত্যুদন্ড কার্যকর হবে" বলে, তবে এটি কোথায় নেই থেকে আসে.
মুড়ু

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