লিনাক্সে শূন্য বাইট সহ একটি ফাইল তৈরির ধারণা কী?


32

আমি যদি নিম্নলিখিতটি করি:

touch /tmp/test

এবং তারপর সঞ্চালন

ls -la /tmp/

আমি ডিরেক্টরিতে 0 বাইটtest সহ ফাইলটি দেখতে পেতাম ।

তবে কীভাবে অপারেটিং সিস্টেম 0 বাইটের একটি ধারণা পরিচালনা করে । যদি আমি এটিকে সাধারণ লোকের মধ্যে রাখি:

0 বাইটস মোটেই কোনও স্মৃতি নয়, তাই কিছুই তৈরি হয় না।

একটি ফাইল, সৃষ্টি হবে বা করা উচিত অন্তত নির্দিষ্ট মেমরি, ডান প্রয়োজন?


উত্তর:


63

একটি ফাইল (মোটামুটি) তিনটি পৃথক জিনিস:

  • একটি "ইনোড", একটি মেটাডেটা স্ট্রাকচার যা ফাইল, অনুমতি এবং ডিস্কের ব্লকগুলির তালিকাকে রাখে যা আসলে ডেটা রাখে।
  • এক বা একাধিক ডিরেক্টরি এন্ট্রি (ফাইলের নাম) যা সেই ইনোডকে নির্দেশ করে
  • তাদের নিজেরাই প্রকৃত ব্লক

আপনি যখন খালি ফাইল তৈরি করেন, আপনি কেবল ইনোড এবং সেই ইনডকে নির্দেশ করে একটি ডিরেক্টরি এন্ট্রি তৈরি করেন। বিরল ফাইল ( dd if=/dev/null of=sparse_file bs=10M seek=1) এর জন্য একই ।

আপনি যখন কোনও বিদ্যমান ফাইলে হার্ডলিঙ্কগুলি তৈরি করেন, আপনি কেবলমাত্র অতিরিক্ত ডিরেক্টরি এন্ট্রিগুলি তৈরি করেন যা একই ইনডকে নির্দেশ করে।

আমি এখানে জিনিসগুলি সরল করে দিয়েছি তবে আপনি ধারণাটি পাবেন।


2
সুন্দরভাবে বলা হয়েছে। আপনার "হার্ড-লিঙ্কগুলি" অনুচ্ছেদে একটি ছোট কনড্রামকে প্রচার করার সময়: যদি কোনও শূন্য ফাইলে একটি হার্ড-লিঙ্ক তৈরি করে, যা আপনি উল্লেখ করেছেন যে ব্লকের কোনও তালিকা নেই, তবে কীভাবে সেই হার্ড-লিঙ্কটি ব্লকের (একই) তালিকার দিকে নির্দেশ করতে পারে? কোনটি নেই?
থিওফ্রাস্টাস

4
পছন্দ করুন আমি বিষয়গুলিকে সরল করে তোলা সম্ভব করে তুলেছি। প্রকৃতপক্ষে ব্লকগুলির তালিকা এবং ডিরেক্টরি এন্ট্রিগুলির মধ্যে, ফাইলের সাথে সম্পর্কিত মেটাটাটা রয়েছে (একটি ইনোড নম্বর দ্বারা উল্লিখিত) এবং এতে ফাইল বৈশিষ্ট্য (মালিক, অনুমতি, ...) এবং বর্ধিত বৈশিষ্ট্য রয়েছে। ব্লকের তালিকা সেখানে রয়েছে। সুতরাং সমস্ত ডিরেক্টরি এন্ট্রি সরাসরি ব্লকের তালিকার দিকে নির্দেশ করে না (FAT উপায়), তবে মেটাডেটাতে।
xhienne

6
হওয়া উচিত তিন পৃথক জিনিস: ব্লক যে ডেটা ধারণ একটি তালিকা; ব্লকগুলি তাদের ; এবং একটি ডিরেক্টরি এন্ট্রি (বা এন্ট্রি) যা ব্লকের তালিকার দিকে নির্দেশ করে।
ওয়াইল্ডকার্ড

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

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

24

touchএকটি ইনোড তৈরি করবে এবং ls -iঅথবা statইনোড সম্পর্কে তথ্য প্রদর্শন করবে:

$ touch test
$ ls -i test
28971114 test
$ stat test
  File: ‘test’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fc01h/64513d    Inode: 28971114    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/1000)   Gid: ( 1000/1000)
Access: 2017-03-28 17:38:07.221131925 +0200
Modify: 2017-03-28 17:38:07.221131925 +0200
Change: 2017-03-28 17:38:07.221131925 +0200
 Birth: -

লক্ষ্য করুন যে test0 টি ব্লক ব্যবহার করে। প্রদর্শিত ডেটা সঞ্চয় করতে, ইনোড কিছু বাইট ব্যবহার করে। সেই বাইটগুলি ইনোড টেবিলে সংরক্ষণ করা হয়। একটি ইনোড কাঠামোর উদাহরণের জন্য ext2 পৃষ্ঠাটি দেখুন ।


19

ls(বা ভাল, stat(2)সিস্টেম কল) আপনাকে ফাইলের সামগ্রীর আকার জানায় । বুককিপিংয়ের জন্য ফাইল সিস্টেমের কতটুকু জায়গা প্রয়োজন তা এর অংশ নয় এবং বাস্তবায়নের বিশদ হিসাবে এটি সাধারণভাবে প্রোগ্রামগুলির যত্ন নেওয়া বা এমনকি তাদের জানা উচিত এমন কিছু নয় । বাস্তবায়নের বিশদটি দৃশ্যমান করা ফাইল-সিস্টেম বিমূর্ততা কম দরকারী করে তোলে।


9

ফাইলটি নিজেই কোনও স্থান দখল করে না, তবে ফাইল সিস্টেমটি ফাইলের নাম, অবস্থান, এতে অ্যাক্সেসের অধিকার এবং এ জাতীয় পছন্দগুলি সংরক্ষণ করে।


4
ডিরেক্টরি এন্ট্রি দ্বারা দখল করা স্থানটি যদি আপনি দেখেন যে আপনার যদি 0,000 বাইট আকারের এক হাজার ফাইল সম্বলিত ডিরেক্টরি থাকে তবে ডিরেক্টরিটি 2 টি বিশাল ফাইল রয়েছে এমন ডিরেক্টরিতে প্রবেশের চেয়ে বড় হবে।
মার্ক স্টুয়ার্ট

2
একটি ফাইল একটি বিমূর্ত ধারণা যা উদাহরণস্বরূপ একটি ডিস্কের উপর তার শারীরিক উপস্থাপনের সাথে শক্তভাবে লিঙ্কযুক্ত নয় বলে উল্লেখ করার জন্য প্রপস।
ফ্লোরিয়ান

5

সহজ উত্তর: কারণ এটি সেভাবে সংজ্ঞায়িত করা হয়েছে।

দীর্ঘ উত্তর: এটি সেভাবে সংজ্ঞায়িত করা হয়েছে কারণ কিছু ক্রিয়াকলাপ ধারণাগতভাবে সহজ:

  • যদি কোনও ফাইলে 20 টি অক্ষর "A" থাকে এবং আপনি সমস্ত "A" গুলি সরিয়ে থাকেন তবে ফাইলটি 20 বাইট সংক্ষিপ্ত হয়ে যাবে। কেবল "এএএএএএএএএএএএএএএএএএএএএএএএএএ" সমন্বিত একটি ফাইলে একই ক্রিয়াকলাপটি বিলুপ্ত হওয়া ফাইলটির বিশেষ ক্ষেত্রে মোকাবেলা করতে হবে।
  • আরও ব্যবহারিকভাবে, একটি পাঠ্য ফাইলের শেষ লাইনটি মুছে ফেলার জন্য বিশেষ-কেসযুক্ত হওয়া দরকার।
  • নিয়মিত একটি ব্যাকআপ দেয় এমন পাঠ্য সম্পাদকদের এমন পরিস্থিতি মোকাবিলার জন্য বিশেষ-কেস কোডের প্রয়োজন হবে যা ব্যবহারকারী শেষ পংক্তিটি মুছে ফেলতে পারে, মধ্যাহ্নভোজনে যেতে পারে, তারপরে ফিরে এসে অন্য লাইন যুক্ত করে। যদি আরও কিছু ব্যবহারকারী গড় সময়ে সেই নামের সাথে একটি ফাইল তৈরি করে তবে আরও জটিলতা দেখা দেয়।

আপনি আরও বেশি কিছু করতে পারেন: * ত্রুটি লগ ফাইলগুলি খালি তৈরি হতে থাকে, যদি কোনও ত্রুটি ঘটে তবেই পূরণ করতে হবে। * কত ত্রুটি ঘটেছে তা জানতে, আপনি লগ ফাইলগুলিতে লাইন সংখ্যা গণনা করুন। লগ ফাইলটি ফাঁকা থাকলে ত্রুটির সংখ্যা শূন্য, যা সঠিক ধারণা দেয়। * কখনও কখনও আপনি এমন ফাইলগুলি দেখতে পান যেখানে সমস্ত প্রাসঙ্গিক পাঠ্যটি ফাইলের নামে থাকে যেমন, যেমন this-is-the-logging-directory। এটি ইনস্টলেশনের পরে অতিরিক্ত পরিচালক প্রশাসকদের খালি ডিরেক্টরিগুলি মুছতে বাধা দেয় এবং এটি প্রোগ্রাম বা ব্যবহারকারী কোনও ঘটনাক্রমে একটি ফাইল তৈরি করে যেখানে প্রোগ্রামটি পরে কোনও ডিরেক্টরি দেখতে চায় সেখানে বাগগুলি প্রতিরোধ করে। gitপ্রোগ্রাম (এবং অন্যদের) খালি ডিরেক্টরি উপেক্ষা করার ঝোঁক, এবং একটি প্রকল্প / প্রশাসক / ব্যবহারকারী রেকর্ড ডিরেক্টরির বিদ্যমান যদিও এটি কোন দরকারী বিষয়বস্তু (এখনো) আছে আছে চায়, তাহলে আপনাকে একটি খালি নামের ফাইল দেখতে পারেনemptyবা empty.directory

কোনও ক্রিয়াকলাপ আরও জটিল হয় না:

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

ফাইলগুলির ক্ষেত্রে, "কোথাও একটি ফাইল রেকর্ড করা আছে" দিকটি (ইনোড এবং / অথবা ফাইলের নাম) উপরের বিবেচনার উপরে আসে, তবে খালি ফাইলগুলি অকেজো হলে ফাইল সিস্টেমগুলি তা করবে না।

সাধারণভাবে, ফাইলের নাম সম্পর্কিত উপরোক্ত সমস্ত কারণগুলি সিকোয়েন্সগুলিতে প্রযোজ্য। সর্বাধিক উল্লেখযোগ্যভাবে স্ট্রিংগুলিতে, যা চরিত্রগুলির ক্রম: প্রোগ্রামগুলির অভ্যন্তরে শূন্য দৈর্ঘ্যের স্ট্রিংগুলি সাধারণ place স্ট্রিংগুলি সাধারণত ব্যবহারকারী স্তরে অনুমতি না দেওয়া হয় যদি তারা তা বোঝায় না: একটি ফাইলের নাম একটি স্ট্রিং, এবং বেশিরভাগ ফাইল সিস্টেম একটি ফাইলের নাম হিসাবে খালি স্ট্রিংকে অনুমতি দেয় না; অভ্যন্তরীণভাবে, খণ্ডগুলি থেকে ফাইলের নাম তৈরি করার সময়, প্রোগ্রামটির টুকরোগুলির একটি হিসাবে খালি স্ট্রিং থাকতে পারে।


1

সহজ উপমা ব্যবহার করে:

একটি গ্লাস জলের সাথে একটি ফাইলের তুলনা করা যাক।

'টাচ / টিএমপি / টেস্ট' অনেকটা খালি গ্লাস তৈরির মতো, এতে কোনও জল নেই। গ্লাসটি খালি, তাই এটির আকারটি শূন্য। তবে গ্লাসের অস্তিত্ব নেই।

ফাইল সিস্টেম পার্লেন্সে, গ্লাসটি মেটা-ডেটা হয়, যেখানে কাচের বিষয়বস্তু ডেটা হয়। মেটা-ডেটাতে আগের পোস্টগুলিতে উল্লিখিত হিসাবে সমস্ত ধরণের স্টাফ রয়েছে।

জিরো আকারের ফাইলগুলি কার্যকর হতে পারে। একটি উদাহরণ তাদের একটি রুটিচাঁচা হিসাবে ব্যবহার করা হচ্ছে, যেখানে এর নিছক অস্তিত্ব কোনও প্রকারের অবস্থা নির্দেশ করতে ব্যবহার করা যেতে পারে (যেমন, যদি ফাইলটি বিদ্যমান থাকে: তবে কিছু না; যদি না: উপেক্ষা করুন)।


0

এটি সম্পর্কে এইভাবে ভাবুন: বলুন যে কোনও প্রোগ্রাম আপনার সার্ভারে প্রেরিত এসকিউএল অনুসন্ধানগুলি ট্র্যাক করছে। প্রোগ্রামটি ইঙ্গিত করতে চায় যে এটি একটি সরল পাঠ্য ফাইলে অনুরোধগুলি লগ করছে তবে কোনও অনুরোধ এখনও লগ করা হয়নি। কি দেখতে হবে? আমি যুক্তি দেব যে এটি একটি শূন্য আকারের ফাইল হওয়া উচিত /var/log/acme-sql-server/queries.log। এইভাবে, আপনি যখন লগিং শুরু হয়েছিল (ফাইলের তৈরির সময়), যখন এটি সর্বশেষ আপডেট করা হয়েছিল (যেমন এটি তৈরি করা হয়েছিল), কতগুলি ক্যোয়ারী রেকর্ড করা হয়েছিল (ফাইল = 0-তে নতুন লাইনের সংখ্যা) এবং লগিংটি কে করছে (অ্যাকমে এসকিউএল সার্ভার)। এই জাতীয় ক্ষেত্রে, খালি ফাইলের ধারণাটি থাকা সত্ত্বেও এটি কোনও নির্দিষ্ট জায়গায় উপস্থিত থাকা কার্যকর।

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