হার্ড লিঙ্কগুলি নির্ধারণ করা


22

tarকমান্ডের ম্যানুয়াল পৃষ্ঠাতে , হার্ড লিঙ্কগুলি অনুসরণ করার জন্য একটি বিকল্প তালিকাভুক্ত করা হয়েছে।

-h, --dereference
      follow symlinks; archive and dump the files they point to

--hard-dereference
      follow hard links; archive and dump the files they refer to

কীভাবে tarজানবেন যে একটি ফাইল একটি হার্ড লিঙ্ক? কিভাবে এটি অনুসরণ করে?

আমি যদি এই বিকল্পটি না বেছে নিই? কিভাবে এটা আছে না হার্ড ডি-রেফারেন্স?

উত্তর:


24

ডিফল্টরূপে, আপনি যদি tarহার্ড লিঙ্ক সহ কোনও ফাইল সংরক্ষণাগারভুক্ত করতে বলেন এবং এই জাতীয় একাধিক লিঙ্ক সংরক্ষণাগারভুক্ত করা ফাইলগুলির মধ্যে অন্তর্ভুক্ত করা হয় তবে এটি কেবল একবার ফাইল সংরক্ষণাগারভুক্ত করে এবং দ্বিতীয়টি (এবং কোনও অতিরিক্ত নাম) হার্ড লিঙ্ক হিসাবে রেকর্ড করে। এর অর্থ হ'ল আপনি যখন সংরক্ষণাগারটি বের করবেন তখন হার্ড লিঙ্কগুলি পুনরুদ্ধার করা হবে।

আপনি যদি --hard-dereferenceবিকল্পটি ব্যবহার করেন তবে হার্ড লিঙ্কগুলি সংরক্ষণ tarকরবেন না । পরিবর্তে, এটি তাদেরকে স্বাধীন ফাইল হিসাবে বিবেচনা করে যা কেবল একই বিষয়বস্তু এবং মেটাডেটা থাকতে পারে। আপনি যখন সংরক্ষণাগারটি বের করবেন তখন ফাইলগুলি স্বাধীন হবে।

দ্রষ্টব্য: এটি প্রথমে ফাইলটির লিঙ্ক গণনা যাচাই করে হার্ড লিঙ্কগুলি সনাক্ত করে। এটি একাধিক লিঙ্ক সহ প্রতিটি ফাইলের ডিভাইস নম্বর এবং ইনোড রেকর্ড করে এবং একই ফাইলটি আবার সংরক্ষণাগারভুক্ত করা হয় তা সনাক্ত করতে এটি ব্যবহার করে। (আপনি যখন ব্যবহার করবেন --hard-dereference, এটি এটি করে না))


7

আপনি হার্ড লিঙ্ক (গুলি) এর সাথে একটি ফাইলকে "লিঙ্ক গণনা" দিয়ে একটি হার্ড-লিংকযুক্ত ফাইল থেকে আলাদা করতে পারবেন। কমান্ড লাইন থেকে এটি পাওয়ার দুটি উপায় আমি দেখতে পাচ্ছি:

% stat original
  File: ‘original’
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 804h/2052d      Inode: 932815      Links: 2
Access: (0644/-rw-r--r--)  Uid: (  500/ bediger)   Gid: ( 1000/ bediger)
Access: 2012-07-13 22:13:52.317101530 -0600
Modify: 2012-07-13 22:13:52.317101530 -0600
Change: 2012-07-13 22:14:08.050894536 -0600
 Birth: -

অথবা

1010 % ls -li 
total 0
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 original
932815 -rw-r--r-- 2 bediger bediger 0 Jul 13 22:13 secondary

"বেডিজার" এর আগে সেই নিঃসঙ্গ '2' হ'ল লিঙ্ক গণনা। নোট করুন যে উভয় ফাইলের নামের 932815 একই ইনড নম্বর রয়েছে।

আমি নিশ্চিত যে এই দুটি কমান্ডই স্ট্রাক্ট স্ট্যাটের st_nlink ক্ষেত্র থেকে লিঙ্ক গণনা পাবে, যা একটি stat()সিস্টেম কল দ্বারা পূরণ হয়ে যায় ।

কাছাকাছি হিসাবে আমি বলতে পারেন, দৌড়ানো tarসঙ্গে --hard-dereferenceউপায়ে পরিবর্তে দুটি স্বতন্ত্র ফাইলের নামের সঙ্গে একটি একক ফাইল পেয়ে (উপরে উদাহরণ হিসাবে), আপনি একটি একক ফাইলের নাম দুটি ফাইলের প্রতিটি পেতে। tarসম্ভবত প্রতিটি ফাইলের লিঙ্ক গণনা পরীক্ষা করে, এবং ডিফল্টরূপে বের করার সময়, এটি হার্ড-লিঙ্কযুক্ত ফাইল ডেটার জন্য থাকা দ্বিতীয় ফাইলনামে একটি হার্ড লিঙ্ক তৈরি করে। যখন --hard-dereferenceসংরক্ষণাগার তৈরির সাথে ডাকা হয় , এটি দ্বিতীয় ফাইলের নামের জন্য সম্পূর্ণ নতুন ফাইলটি তৈরি করতে দেখা যায় যখন রানগুলির নিষ্কাশন প্রার্থনা tar


এখন আমি বুঝতে পেরেছি যে 'হার্ড লিঙ্কগুলি অনুসরণ করুন' ভুল শব্দের অর্থ। ধন্যবাদ. তবে যদি দুটি অভিন্ন ফাইলের একটি সংরক্ষণাগার না হয়? লিঙ্ক কাউন্ট এই জাতীয় ক্ষেত্রে বিভ্রান্তিকর।
মুসা

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