ফাইল বর্ণনাকারী লিঙ্কগুলির বহনযোগ্যতা


20

আমি সবসময় এই বিস্ময়ের উদ্রেক করেছি কিন্তু, সময় খুঁজে বের করতে না নেন তাই আমি এখন কি করব - কিভাবে পোর্টেবল ব্যবহার করা হয় এখানে দেখানো উভয় /proc/$$/fd/$Nবা /dev/fd/$N? আমি পসিএক্স গ্যারান্টি বুঝতে পারি /dev/null, /dev/tty, and /dev/console (যদিও আমি এই উত্তরটি পড়ার পরে কেবলমাত্র অন্য দিনটি জানতে পেরেছি ) তবে এই অন্যদের সম্পর্কে কী?

যতদূর আমি বলতে পারি সেগুলি বেশ সাধারণ, তবে কোন সিস্টেমে আমি তাদের সন্ধানের আশা করতে পারি না ? কেন না? এটির চেয়ে অপরটির চেয়ে একজনের সন্ধানের সম্ভাবনা কি বেশি? তারা সবসময় গুণাবলী মত প্রদর্শিত হবে?

আমি সমস্ত উপায়ে এই ডিভাইসগুলি বেশ বিস্তৃতভাবে ব্যবহার করার প্রবণতা রাখি এবং আমি চেষ্টা করে খুব শীঘ্রই উপস্থিত হয়ে আসছি এমন কোনও সুযোগ আছে কিনা তা জানতে চাই।

এছাড়াও উপরের প্রশ্নের হতে আমি কেবল কি বোঝা উচিত মনে করি আমি জানতে চাই, কিন্তু, যেহেতু আমি স্পষ্টত প্রথম স্থানে জিজ্ঞাসা আছে, আমি এ ব্যাপারে ভাল জানেন না হতে পারে এবং তারা এর জন্য কঠোর প্রয়োজনীয়তা বিবেচনা করা উচিত নয় একটি উত্তর. দয়া করে আমাকে ক্লু করুন

উত্তর:


27

Symlinks আপাতদৃষ্টিতে সার্বজনীন লিনাক্স, কিন্তু তারা অন্য যে কোনো স্থানে (Cygwin যা তাদের অনুকরণ উপর ব্যতীত) কোন অস্তিত্ব নেই। এআইএক্স এবং সোলারিসেও বিদ্যমান, তবে সেগুলি কোনও চিহ্ন নয়। বহনযোগ্যভাবে, ওপেন ফাইল সম্পর্কিত তথ্য পেতে ইনস্টল করুন ।/proc/PID/fd/NUM/proc/PID/fd/NUMlsof

সঙ্গে ইউনিটস /proc/PID/fd

লিনাক্স

লিনাক্সের অধীনে, আইডি পিআইডি সহ প্রক্রিয়াটি ফাইল বর্ণনাকারী NUM এ খোলা হয়েছে এমন একটি সামান্য যাদু প্রতীকী লিঙ্ক । এই লিঙ্কটি এর মধ্যে যাদু, উদাহরণস্বরূপ, এটি ফাইলটি সরিয়ে ফেলা সত্ত্বেও এটি ফাইল অ্যাক্সেস করতে ব্যবহার করা যেতে পারে। লিঙ্কটিও নামগুলির মাধ্যমে ফাইলটি ট্র্যাক করবে। একটি যাদু সিম্বলিক লিঙ্ক যা স্থানটিকে যেখানে PID, প্রক্রিয়া যে লিঙ্ক ব্যবহারের হয়।/proc/PID/fd/NUM/proc/self/proc/PID

এই বৈশিষ্ট্যটি কার্যত সমস্ত লিনাক্স সিস্টেমে উপস্থিত রয়েছে। এটি প্রোক ফাইল সিস্টেমের জন্য ড্রাইভার দ্বারা সরবরাহ করা হয়েছে , যা প্রযুক্তিগতভাবে alচ্ছিক তবে এটি অনেকগুলি কাজের জন্য ব্যবহৃত হয় ( psকাজটি সহ - এটি থেকে পড়ে ) এটি এম্বেডড সিস্টেমে প্রায় কখনও বাদ যায়নি।/proc/PID

Cygwin

সাইগউইন লিনাক্সের (সাইগউইন প্রক্রিয়াগুলির জন্য) এমলেট করে এবং ।/proc/PID/fd/NUM/proc/self

সোলারিস (সংস্করণ ২.6 থেকে), এআইএক্স

আছে প্রতিটি ফাইল বর্ণনাকারী জন্য এন্ট্রি, কিন্তু তারা খোলা ফাইল হিসাবে একই ধরনের হিসাবে প্রদর্শিত যাতে তারা ফাইলের পাথ সম্পর্কে কোন তথ্য প্রদান করে। তবে ফাইলটি ওপেন রয়েছে এমন প্রক্রিয়াটির প্রতিবেদন করার মতো একই তথ্য তারা জানায়, সুতরাং ফাইলটি কোন ফাইল সিস্টেমের অবস্থিত এবং এর ইনোড নম্বর রয়েছে তা নির্ধারণ করা সম্ভব। ডিরেক্টরিগুলি প্রতীকী লিঙ্ক হিসাবে উপস্থিত হয়, তবে এগুলি যাদুর প্রতিলিঙ্কগুলি যা কেবল অনুসরণ করা যেতে পারে এবং একটি খালি স্ট্রিং প্রদান করে।/proc/PID/fdstatfstatreadlink

এআইএক্সের অধীনে, procfilesকমান্ডটি প্রক্রিয়াটির খোলা ফাইলগুলি সম্পর্কে কিছু তথ্য প্রদর্শন করে। সোলারিসের অধীনে, pfilesকমান্ডটি প্রক্রিয়াটির খোলা ফাইলগুলি সম্পর্কে কিছু তথ্য প্রদর্শন করে। এটিতে ফাইলের পথ অন্তর্ভুক্ত করা হয়নি (সোলারিসে, এটি সোলারিস 10 এর পরে রয়েছে, নীচে দেখুন)।

সোলারিস ( সংস্করণ 10 থেকে )

এছাড়াও , আধুনিক সোলারিস সংস্করণগুলিতে লিনাক্সের সিমলিংকের মতো প্রতীকী লিঙ্ক রয়েছে । একটি প্রক্রিয়া সম্পর্কে কমান্ড শো তথ্য পাথ সহ ফাইল খুলুন, না।/proc/PID/fd/NUM/proc/PID/path/NUM/proc/PID/fd/NUMpfiles

Plan9

/proc/PID/fdপ্রক্রিয়া দ্বারা খোলার প্রতিটি ফাইল বিবরণকারীতে একটি রেকর্ড (লাইন) থাকে এমন একটি পাঠ্য ফাইল। ফাইলের নামটি সেখানে ট্র্যাক করা হয়নি।

QNX

/proc/PID/ এটি একটি ডিরেক্টরি, তবে এতে ফাইল বর্ণনাকারীদের সম্পর্কে কোনও তথ্য নেই।

ইউনিটগুলি সহ /procতবে ফাইল বর্ণনাকারীর সরাসরি অ্যাক্সেস নেই

(দ্রষ্টব্য: কখনও কখনও কোনও প্রক্রিয়ার খোলা ফাইলগুলি সম্পর্কে মেমরি চিত্রের মাধ্যমে রিফ্লিং করে যা অ্যাক্সেসযোগ্য তা অধীনে প্রবেশ করা সম্ভব হয় /proc। আমি এটিকে "সরাসরি অ্যাক্সেস" হিসাবে গণ্য করি না))

এক ফাইল যেখানে ফাইল আছে/proc/PID

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

মিনিক্স 3

মিনিক্স 3 এর একটি প্রোফস সার্ভার রয়েছে যা ডিরেক্টরি সহ লিনাক্সের মতো কয়েকটি উপাদান সরবরাহ করে । তবে এটি নেই ।/proc/PID//proc/PID/fd

FreeBSD 'র

ফ্রিবিএসডি-র ডিরেক্টরি রয়েছে তবে তারা ওপেন ফাইল বর্ণনাকারী সম্পর্কিত তথ্য সরবরাহ করে না। ( লিনাক্সের মতোই এটিও রয়েছে যা প্রতীকী লিঙ্কের মাধ্যমে এক্সিকিউটেবলকে অ্যাক্সেস দেয়))/proc/PID//proc/PID/file/proc/PID/exe

ফ্রিবিএসডি'র প্রোফসগুলি হ্রাস করা হয়েছে

Unices ছাড়া /proc

  • এইচপি-ইউএক্স
  • OpenBSD
  • NetBSD বা
  • ম্যাক ওএস এক্স

অন্যান্য চ্যানেলের মাধ্যমে বর্ণনাকারী তথ্য ফাইল করুন

ফিউজার

fuserকমান্ড তালিকা নিদিষ্ট প্রক্রিয়া একটি নির্দিষ্ট ফাইল খোলা, অথবা একটি ফাইল খুলেছেন যে বিন্দু মাউন্ট। এই কমান্ডের মান (সমস্ত উপলব্ধ XSI -compliant সিস্টেম, এক্স / ওপেন সিস্টেম ইন্টারফেস এক্সটেনশানের সঙ্গে অর্থাত POSIX)।

আপনি এই ইউটিলিটি দিয়ে নাম ফাইল করতে কোনও প্রক্রিয়া থেকে যেতে পারবেন না।

Lsof

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

আপনি কী ধরণের অসুবিধাগুলি সহ্য করতে পারেন তা দেখতে আপনি FAQ পড়তে পারেন । বেশিরভাগ সূচীতে, খোলা ফাইলগুলির নাম সম্পর্কে তথ্য পাওয়ার জন্য কার্নেল ডেটা স্ট্রাকচার পার্সিং করা দরকার requires এফএকিউ ৩.৩ এর উদ্ধৃতি দিয়ে "কেন পুরো পথের নামগুলি এলএস রিপোর্ট করে না?":

Lsof নিম্নলিখিত উপভাষাগুলির কার্নেল নাম ক্যাশে থেকে পাথ নামের উপাদানগুলি অর্জন করতে পারে না:

  • , AIX

খালি ফাইলগুলি রক্ষণাবেক্ষণের জন্য শুধুমাত্র লিনাক্স কার্নেল পুরো পথের নাম লিপিবদ্ধ করে; পরিবর্তে, বেশিরভাগ কার্নেলগুলি পাথের নামগুলি ডিভাইস এবং নোড নম্বর ডাবলটে রূপান্তর করে এবং ফাইলগুলি খোলার পরে এটি পরবর্তী ফাইলের রেফারেন্সের জন্য ব্যবহার করে।

আপনার যদি lsofআউটপুট থেকে তথ্য বিশদকরণের প্রয়োজন হয় তবে অবশ্যই -Fমোডটি (প্রতি লাইনে একটি ক্ষেত্র), অবশ্যই -F0মোডটি (নাল-সীমাবদ্ধ ক্ষেত্র) ব্যবহার করার বিষয়ে নিশ্চিত হন । নির্দিষ্ট প্রক্রিয়ার নির্দিষ্ট ফাইল বর্ণনাকারী সম্পর্কে তথ্য পেতে, এবং এর -aসাথে বিকল্পটি ব্যবহার করুন , যেমন ।-p PID-d NUMlsof -a -p 123 -d 0 -F0n

/dev/fd/NUM বর্তমান প্রক্রিয়া ফাইল বর্ণনাকারীদের জন্য

অনেকগুলি ইউনিক্স রূপগুলি কোনও প্রক্রিয়াটির জন্য ফাইলের নামের মাধ্যমে তার খোলা ফাইলগুলিতে অ্যাক্সেসের একটি উপায় সরবরাহ করে: খোলার কলিংয়ের সমতুল্য । এই নামগুলি কার্যকর হয় যখন কোনও প্রোগ্রাম কোনও ফাইলের নাম চায় তবে আপনি ইতিমধ্যে খোলা ফাইলটি (যেমন একটি পাইপ বা সকেট) পাস করতে চান; উদাহরণস্বরূপ, প্রক্রিয়া প্রতিস্থাপন বাস্তবায়িত শাঁসগুলি যেখানে উপলব্ধ সেখানে তাদের ব্যবহার করে (যেখানে অস্থায়ী নামযুক্ত পাইপ ব্যবহার করা যায় না)।/dev/fd/NUMdup(NUM)/dev/fd

যেখানে /dev/fdউপস্থিত রয়েছে, সেখানে সাধারণত (সর্বদা?) প্রতিশব্দও রয়েছে (কখনও কখনও প্রতীকী লিঙ্ক, কখনও কখনও হার্ড লিঙ্ক, কখনও কখনও সমতুল্য বৈশিষ্ট্যযুক্ত ম্যাজিক ফাইল) /dev/stdin= /dev/fd/0, /dev/stdout= /dev/fd/1, /dev/stderr= /dev/fd/2

  • লিনাক্সের অধীনে /dev/fdএটি একটি প্রতীকী লিঙ্ক /proc/self/fd
  • বেশিরভাগ ইউনিসের ( আইআরআইএক্স , ওপেনবিএসডি , নেটবিএসডি , এসসিও, সোলারিস ,…) এর অধীনে থাকা এন্ট্রিগুলি হ'ল /dev/fdঅক্ষর ডিভাইস। এগুলি সাধারণত ফাইল বর্ণনাকারী উন্মুক্ত কিনা তা উপস্থিত থাকে এবং নির্দিষ্ট সংখ্যার উপরে ফাইল বর্ণনাকারীদের জন্য এন্ট্রিগুলি উপলব্ধ নাও হতে পারে।
  • ফ্রিবিএসডি এবং ওএসএক্সের অধীনে, fdescfs ফাইল সিস্টেম একটি গতিশীল /dev/fdডিরেক্টরি সরবরাহ করে যা কলিং প্রক্রিয়াটির ওপেন বর্ণনাকারীদের অনুসরণ করে। একটি স্ট্যাটিক /dev/fdপাওয়া যায় /dev/fdমাউন্ট করা হয় না।
  • OSF / 1 (Tru64) এর অধীনে, fdfs এর/dev/fd মাধ্যমে সরবরাহ করা হয়
  • /dev/fdএআইএক্স বা এইচপি-ইউএক্স-তে কোনও নেই ।

সোলারিস সম্পর্কে আপনার বক্তব্যগুলি কিছুটা পুরানো। সোলারিস 10 বছরেরও কম পুরানো প্রকাশের সাথে, pfilesকমান্ডটি ফাইল বর্ণনাকারীদের পথ দেখায়। এটি /proc/<pid>/pathডিরেক্টরি থেকে এই তথ্যটি পুনরুদ্ধার করে যা আপনি উল্লেখ করতে পারেন। দেখুন docs.oracle.com/cd/E19253-01/817-0547/esxiq/index.html
jlliagre

9

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

হিসাবে /dev, /dev/fd/POSIX বা একক ব্যবহারকারী স্পেসিফিকেশন (SUSv3) এর অংশ নয় , যখন সিস্টেম ভি এবং বিএসডি এটি সমর্থন করে।

সংযোজন:

লিনাক্স: /dev/fd/*এর প্রতিলিপি /proc/self/fd

ফ্রিবিএসডি: /dev/fd/*fdescfs এর মাধ্যমে সরবরাহ করা হয়।

নেটবিএসডি: ফ্রিবিএসডি সমান।

ওপেনবিএসডি: ফ্রিবিএসডি সমান।

সোলারিস: আছে /dev/fd/*

আইআরআইএক্স: আছে /dev/fd/*

ট্রু Un৪ ইউনিক্স: নিক্সডোক.নেটের/dev/fd/* মতে, এইচপিতে জেনুইন ট্রু document64 ডকুমেন্টেশনটি অনির্বচনীয় (ছেলে, কী গণ্ডগোল ! আপনি কিছুই খুঁজে পান না!)।

এআইএক্স: সর্বজনীনভাবে উপলব্ধ ডকুমেন্টেশন থেকে কোনও ইঙ্গিত পাওয়া যায় নি।

এইচপি-ইউএক্স: এআইএক্সের মতো।


সুতরাং আমি /dev/fd/1একটি বিএসডি তে সন্ধান করব যা আমার বর্তমানের সাথে লিঙ্ক করে 1>? লিনাক্সে আমি সাধারণত একটি জিনিস করি echo 'command' | . /dev/fd/0- আপনি কি ভাবেন যে এই ধরণের জিনিসটি বোর্ড জুড়ে কাজ করবে?
মাইকজার্ভ

আমার এখনই কোনও BSD সিস্টেমে অ্যাক্সেস নেই, তবে আমি এটি বুঝতে পারি, হ্যাঁ।
কাউন্টারমোড

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

হ্যাঁ। আমার ধারণা প্রফেসর এফডি সব পরে দেখা গেছে, তাই না? সুতরাং, পরের বার ভাল ভাগ্য?
মাইকজার্ভ

1
ঠিক আছে তাহলে. লিনাক্স: / ডিভ / এফডি / * হ'ল / প্রোক / সেল্ফ / এফডির প্রতিলিপি। ফ্রিবিএসডি: / ডিভ / এফডি / * fdescfs এর মাধ্যমে সরবরাহ করা হয়। নেটবিএসডি: ফ্রিবিএসডি সমান। ওপেনবিএসডি: ফ্রিবিএসডি সমান। সোলারিস: / dev / fd / * রয়েছে। আইআরআইএক্স: / দেব / এফডি / * রয়েছে। ট্রু Un৪ ইউনিক্স: / dev / fd / * রয়েছে ( নিক্সডোক.net অনুসারে, এইচপিতে জেনুইন ট্রু ru64 ডকুমেন্টেশন অনির্বচনীয় )। এআইএক্স: প্রকাশ্যে উপলভ্য ডকুমেন্টেশন থেকে কোনও ইঙ্গিত পাওয়া যায় নি। এইচপি-ইউএক্স: এআইএক্সের মতো।
কাউন্টারমোড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.