লিনাক্স: "।" এবং ".." ছাড়া ডিরেক্টরি কীভাবে তৈরি করা যায়?


6

নিম্নলিখিত সমস্যাটি ব্যস্তবক্সের সাথে নির্দিষ্ট কিনা তা আমি নিশ্চিত নই: আমার সাথে ব্যস্তবক্স ইনস্টল থাকা একটি এম্বেডড ডিভাইস রয়েছে। আমি যা বুঝি সেগুলি থেকে, যখন কোনও ডিরেক্টরি তৈরি করা হয়, সাধারণত 2 টি লুকানো ফাইল স্বয়ংক্রিয়ভাবে তৈরি হয়ে যায়: .বর্তমান ডিরেক্টরিটি ..উপস্থাপন করতে এবং প্যারেন্ট ডিরেক্টরিটি উপস্থাপন করতে। উদাহরণস্বরূপ, টাইপ mkdir -p /tmp/normal_dir; cd /tmp/normal_dir; ls -aকরে আউটপুট হবে . ..

তবে, আমি একটি কেস দেখেছি যেখানে কোনও বিদ্যমান ডিরেক্টরি ( /tmp/strange_dir) প্রদর্শন করে না .এবং ..। এটি হ'ল, টাইপ cd /tmp/strange_dir; ls -aকরে আউটপুট খালি রয়েছে, যদিও প্যারেন্ট ডিরেক্টরিতে নেভিগেট করা এখনও কাজ করে। অর্থাৎ, টাইপ করে cd .., সামগ্রীটি সঠিক।

আমার প্রশ্ন হচ্ছে: কীভাবে এই ধরনের একটি ডিরেক্টরি ছাড়া পারে .এবং ..(যেমন /tmp/strange_dir) তৈরি করা হবে? আমি হতভম্ব.


আকর্ষণীয় প্রশ্ন। ইউনিক্স.এসইতে জিজ্ঞাসা করা আরও ভাল হতে পারে। আমার প্রবৃত্তি statডিরেক্টরি হয়; নেই cd strange_dir; stat -l .কিছু দিতে?
শান অলরেড

অন্যগুলি ডিরেক্টরি প্রদর্শন করে .এবং ..?, সম্ভবত যা পরিবর্তিত তা হ'ল lsআদেশটি, উদাহরণস্বরূপ lsএমন একটি উপাত্ত তৈরি করে যা অভ্যন্তরীণভাবে lsআউটপুট থেকে নিয়মিত তবে স্ট্রিপগুলি কল করে .এবং ..ফলাফল results
জাভিয়ের মিঃ

কেবল '/ tmp / আজব_ডির' এর এই সমস্যাটি রয়েছে। 'স্ট্যাটাস-এল / টিএমপি / অদ্ভুত_ডির' টাইপ করার ফলে একটি আউটপুট আসে যা আমি চেষ্টা করেছি এমন অন্য ডিরেক্টরিগুলির মতো। একটি প্রধান পর্যবেক্ষণের পার্থক্যটি হ'ল আকার 0 এবং অন্যান্য ডিরেক্টরিগুলি 0 এর চেয়ে বড় আকারের উদাহরণস্বরূপ, 'mkdir -p' ব্যবহার করে একটি নতুন ডিরেক্টরি তৈরি করার ফলে 40 এর আকার হবে Maybe সম্ভবত আকার 0 এর প্রত্যক্ষ কারণ নয় দেখাচ্ছে '.' এবং '..'. সুতরাং পরবর্তী প্রশ্ন হতে পারে: 0 সমান আকারের একটি ডিরেক্টরি কিভাবে তৈরি করবেন?
জোনাথনজ

আপনি কি নিশ্চিত যে এটি আসলে একটি ডিরেক্টরি এবং অন্য কিছু নয় ( "সবকিছুই একটি ফাইল" )?
ব্রেকথ্রু

@ ব্র্যাকথ্রু: ওপি বলছে যে cd /tmp/strange_dirকাজ করে; এটি প্রমাণ করতে পারে যে এটি একটি ডিরেক্টরি।
স্কট

উত্তর:


3

আপনি যদি সিমলিংকের মাধ্যমে ডিরেক্টরিটি অ্যাক্সেস করে থাকেন তবে এটি লিঙ্কযুক্ত ডিরেক্টরিটি সরিয়ে ফেলা হতে পারে। উদাহরণস্বরূপ, এর মধ্যে /tmpসেই ডিরেক্টরিতে একটি ডিরেক্টরি এবং একটি সিমিলিংক তৈরি করা যাক:

$ cd /tmp
$ mkdir normal_dir
$ ln -s normal_dir strange_dir

এখন, আমরা যদি নেভিগেট করি তবে আমরা strange_dirপ্রত্যাশিত আউটপুটটি পাই:

$ cd strange_dir
$ ls -a
. ..

তবে, আমরা ডাইরেক্টরি সরাতে normal_dir ছাড়া ডিরেক্টরি পরিবর্তন প্রকৃতপক্ষে আমরা একটি আকর্ষণীয় ফলাফলের পাবেন:

$ rmdir /tmp/normal_dir
$ ls -a

$ ls -al
total 0

সুতরাং যদিও আমাদের লিঙ্কটি এখন কিছুই নির্দেশ করে না, শেলের কার্যকরী "ডিরেক্টরি" এখনও সমান:

$ pwd
/tmp/strange_dir

$ cd /tmp/strange_dir
bash: cd: /tmp/strange_dir: No such file or directory

$ ls -al
total 0

stat -L .আমাদের ওয়ার্কিং ডিরেক্টরিটি এখনও থাকা অবস্থায় চলমান উপরের মন্তব্যগুলিতে আলোচিত হিসাবে /tmp/strange_dirএখন প্রদর্শিত হবে Size: 0। যদিও আউটপুটটি lsএখন কিছুই দেখায় না (এমনকি তাও .নয় ..) তবুও আপনি উল্লিখিত হিসাবে আমরা এখনও এই ক্ষেত্রে প্যারেন্ট ডিরেক্টরিতে সূক্ষ্ম নেভিগেট করতে পারি ..:

$ cd ..
$ pwd
/tmp

$ ls -a
. .. strange_dir

যদিও সিমলিংক এখনও বিদ্যমান, এটি কোনও কিছুর প্রতি নির্দেশ দেয় না, সুতরাং ডিরেক্টরিটি আবার তৈরি নাcd করা strange_dirপর্যন্ত আমরা এই মুহুর্তে ফিরে যেতে পারি না । পরিষ্কার করার জন্য, আমরা কল করে কেবল সিমলিংকটি সরাতে পারি ।/tmp/normal_dirrm /tmp/strange_dir


strange_dirসাইজ 0 থাকতে পারে এমন একটি ক্ষেত্রে দুর্দান্ত ব্যাখ্যা এবং আপনি এর মূল ডিরেক্টরিতে যেতে পারেন। তবে, আমার strange_dirকেসটি অন্যরকম বলে মনে হচ্ছে: এটি কোনও সিমিলিংক নয় এবং আমি সর্বদা এটিতে ফিরে যেতে পারি।
জোনাথঞ্জ

প্রতীকী লিঙ্কগুলির সাথে এর আসলে কোনও সম্পর্ক নেই; এটি সম্পূর্ণরূপে আপনার বর্তমান ডিরেক্টরিটি সরিয়ে ফেলা সম্পর্কে (যখন আপনি এটিতে থাকবেন)। দয়া করে নোট করুন যে আমার উত্তরটি ইতিমধ্যে সেই দৃশ্যটিকে ঠিক তুচ্ছ দিক দিয়ে সম্বোধন করেছে , (১) আমার দৃশ্যে প্রতিলিপি জড়িত ছিল না এবং (২) বর্তমান ডিরেক্টরিতে তথ্য পাওয়ার ls -ldiপরিবর্তে আমি ব্যবহার করেছি used stat -L .… অবশেষে, এই সত্যটি যে ওপিটির /tmp/strange_dirএখনও বিদ্যমান, এবং cd /tmp/strange_dirএখনও কাজ করে, এই ব্যাখ্যাটিকে বাতিল করে দেয়।
স্কট

@ স্কট এফডাব্লুআইডাব্লু, আমি আপনার উত্তরের সাথে একমত হই (আপনার কাছে থাকা উত্সাহটি আমার কাছ থেকে এসেছে) ... আমি কেবল যেসব ক্ষেত্রে এটি ঘটতে পারে তার প্রসারণের চেষ্টা করছিলাম।
ব্রেকথ্রু

1

এটা অনুমেয় যে কেউ যদি বলেন তবে এ জাতীয় অবনতি তৈরি হতে পারে

mkdir /tmp/strange_dir

এমন সময়ে যখন ফাইল সিস্টেমটি পূর্ণ ছিল (যেমন কোনও মুক্ত ব্লক ছিল না)। strange_dir ডিরেক্টরি এন্ট্রি তৈরি করা এখনও (সম্ভবত) সম্ভব /tmpহত, কারণ এর জন্য ইতিমধ্যে বরাদ্দকৃত ব্লকগুলির মধ্যে কেবলমাত্র কয়েকটি বাইট অব্যবহৃত স্থানের প্রয়োজন হবে /tmp। তবে strange_dirনিজের জন্য একটি ব্লক বরাদ্দ করা অসম্ভব হত এবং তাই এটি .এবং ..প্রবেশিকা তৈরি করা অসম্ভব হত । এই জাতীয় ক্ষেত্রে, আমি mkdirপ্রোগ্রামটি strange_dirডিরেক্টরি এন্ট্রি মুছে ফেলার (লিঙ্কমুক্ত) অপসারণ আশা করব /tmp, তবে সফ্টওয়্যারটি সর্বদা আমার প্রত্যাশা মতো করে না।

অন্যান্য সম্ভাবনার:

  • mkdirstrange_dirডিরেক্টরি এন্ট্রি /tmp তৈরি করতে .এবং ..প্রবেশ এবং এন্ট্রিগুলির মধ্যে বাধা পেয়েছে (সমাপ্ত) strange_dir। আমি mkdirবাধাপ্রাপ্ত সিগন্যালটি (যেমন, Ctrl+ C) ধরা এবং নিজের পরে পরিষ্কার করার আশা করব, তবে সফ্টওয়্যার এবং এটি সম্পর্কে আমার প্রত্যাশা সম্পর্কে উপরে দেখুন। এবং, অবশ্যই, এটি কিল সংকেত বা কোনও সিস্টেম ক্র্যাশ ধরতে পারে না। 
  • rmdirলিঙ্ক মুক্ত করার মধ্যে বিঘ্নিত পেয়েছিলাম (সমাপ্ত) .এবং ..এন্ট্রিগুলির strange_dir এবং লিঙ্ক মুক্ত করার strange_dirডিরেক্টরিতে এন্ট্রি /tmp

কেউ আশা করতে পারে যে এটি fsckক্র্যাশের পরে চালিতগুলি সনাক্ত করে strange_dirএবং এটি সম্পর্কে কিছু করবে, তবে ....

হ্যাঁ, অবশ্যই, যদি একটি ডিরেক্টরি 0 একটি আকার আছে, তার মানে এটা বরাদ্দ কোন ব্লক আছে, সেইজন্য এবং এটা কোনো বিষয়বস্তু (মত এমনকি সামান্য বেশী থাকতে পারে না .এবং ..)।

আমি cd ..যখন নেই তখন কেন কাজ করবে তা আমি পুরোপুরি বুঝতে পারি না .., তবে কমান্ড লাইন ইন্টারফেসটি ব্যবহার করে ডিরেক্টরিটি ভিতরে থেকে সরানোর ক্ষেত্রে দেখুন । এটা দেখা যাচ্ছে যে

এমকেডির / টিএমপি / অদ্ভুত_ডির
সিডি / টিএমপি / অদ্ভুত_ডির
ls -lai normal স্বাভাবিক দেখায়এবং .. , ইনোড নম্বর সহ।
rmdir / tmp / আজব_ডির
pwd ← এখনও রিপোর্ট / টিএমপি / অদ্ভুত_ডির
ls -lai empty খালি ডিরেক্টরি দেখায়: মোট 0
ls -ldi ows শোআগের মতো একই ইনোড নম্বর সহ,
                          তবে 0 আকার এবং 0 
সিডি একটি লিঙ্ক গণনা সহ .. t আপনাকে আবার / টিএমপি রাখে

এই পরিস্থিতি এই প্রশ্নের যে কোনওটির সাথে পুরোপুরি সাদৃশ্য নয়, কারণ, এই ক্ষেত্রে অন্যান্য ক্ষেত্রে strange_dirসরিয়ে দেওয়া হয়েছে /tmp। তবে এটি সুপারিশ করে যে cd ..এটি বিশেষ, এবং কখনও কখনও কাজ করে যখন কোনও স্পষ্ট প্রক্রিয়া নেই যার দ্বারা এটি সম্ভব হয়েছিল।

পিডাব্লুডি এবং / বিন / পিডাব্লুডির মধ্যে অদ্ভুত পার্থক্য এটি কীভাবে কাজ করবে তা সম্ভাবনার পরামর্শ দেয়। শেলটি আপনার বর্তমান ডিরেক্টরিটি ট্র্যাক করে। এটি হ'ল এটি আপনার বর্তমান ডিরেক্টরিটি কী তা সম্পর্কে সেরা অনুমানের উপর নজর রাখে। এটি প্রতীকী লিঙ্ক এবং কৌশলগুলি দ্বারা বোকা হয়ে যায়

mkdir /tmp/foo
cd /tmp/foo
mv /tmp/foo /tmp/foobar

অর্থাত, এটি এখনও মনে হবে যা বর্তমান ডিরেক্টরির হয় /tmp/foo, এবং তাই যে কি pwdরিপোর্ট হবে, কিন্তু pwd -Pএবং /bin/pwdরিপোর্ট হবে /tmp/foobar। সুতরাং, এটি হতে পারে যে, যদি chdir("..")ব্যর্থ হয়, শেলটি আপনার পরবর্তী স্তরের আপ ডিরেক্টরিটি কী হতে পারে তা গণনা করে এবং সেখানে একেবারে চলে যায়। (তবে আমি সন্দেহ করি যে এর চেয়ে আরও অনেক কিছু আছে))


0

এখনও পর্যন্ত আলোচনার জন্য ধন্যবাদ। নীচে আমার একজন সহকর্মী যিনি সুপার ব্যবহারকারী সম্প্রদায়ের সদস্য নন তার একটি ব্যাখ্যা রয়েছে:

/tmp/strange_dirআমার ক্ষেত্রে একটি এনবিডি / ভিএফএস (নেটওয়ার্ক ব্লক ডিভাইস / ভার্চুয়াল ফাইল সিস্টেম) ডিরেক্টরি। এই ধরণের ভার্চুয়াল ফাইল সিস্টেমটি প্রচলিত ফাইল সিস্টেমের থেকে পৃথক এবং শেল কমান্ডগুলির নিজস্ব প্রয়োগ রয়েছে। সুতরাং এটি অবাক হওয়ার মতো বিষয় নয় যে, ডিরেক্টরিটি খালি থাকাকালীন, তার প্যারেন্ট ডিরেক্টরিতে যাওয়ার অনুমতি ls -aছাড়া কিছুই প্রদর্শন করে না cd ..

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.