হার্ড লিঙ্কগুলি কি সাধারণ ফাইল হিসাবে গণনা করা হয়?


21

আমি ভাবছিলাম এটি নিবন্ধ করার কোনও উপায় আছে কিনা, তবে যেহেতু বেশিরভাগ আধুনিক অনুসন্ধান ইঞ্জিনগুলি প্রায় 5 টি শব্দের দৈর্ঘ্যের বাক্যাংশগুলি দিয়ে ভালভাবে কাজ করে না, তাই এই সম্পর্কে আমার কিছুটা সাহায্য প্রয়োজন।

আমি এটি ভাবছিলাম কারণ আমি একটি বাশ স্ক্রিপ্ট তৈরি করছি যা নির্দিষ্ট ধরণের হিসাবে ফাইলগুলি নিবন্ধিত করতে এবং সেই অনুযায়ী সিদ্ধান্ত নিতে হয়। এই প্রযুক্তিগতভাবে আমার প্রকল্পের জন্য গুরুত্বপূর্ণ নয়, কিন্তু আমি কৌতূহল ছিল।

এছাড়াও, যদি এগুলিকে নিয়মিত ফাইল হিসাবে বিবেচনা করা হয়, তবে পার্স না করে এই ফাইলগুলি শক্ত লিঙ্কযুক্ত কিনা তা পরীক্ষা করার কোনও উপায় আছে ls -iকি? এবং কোনও পরীক্ষা করার উপায় আছে যে কোনও স্বেচ্ছাচারিত ফাইল, এক্স, find -iকমান্ডটি ব্যবহার না করেই অন্য কিছু স্বেচ্ছাসেবী ফাইল, ওয়াইয়ের সাথে শক্তভাবে লিঙ্কযুক্ত কিনা ?


5
কঠোর লিঙ্কগুলির সাথে "এক্স" সত্যই "ওয়াই" এর সাথে লিঙ্কযুক্ত নয়। "এক্স" এবং "ওয়াই" একই ফাইল।
জর্ডানম

6
ডিরেক্টরিতে থাকা সমস্ত "নিয়মিত ফাইল" হ'ল হার্ড লিংক। এ জাতীয় কিছু ফাইলের একাধিক ফাইল রয়েছে।
অ্যান্ড্রু হেনেল

@ অ্যান্ড্রুহেনেল বাহ, ভাল কথা আমি ঠিক সেই ধরণের জিনিসটিই খুঁজছিলাম, তাই ধন্যবাদ।
মিঃ মিন্টি তাজা

2
@ মিঃমিন্টিফ্রেশ বিশেষত, প্রতীকী লিঙ্কগুলির জন্য "মূল" এবং "লিঙ্ক" এর মধ্যে কোনও পার্থক্য নেই।
র্যান্ডম 832

উত্তর:


38

ইউনিক্স-শৈলী সিস্টেম ইন, ডাটা স্ট্রাকচার যা প্রতিনিধিত্ব ফাইলসিস্টেম বস্তু (অন্য কথায়, ডাটা সম্পর্কে একটি ফাইল), কি একটি "inode" বলা হয় মধ্যে সংরক্ষিত হয়।

একটি ফাইলের নাম এই ইনোডের কেবল একটি লিঙ্ক, এবং এটি একটি "হার্ড লিঙ্ক" হিসাবে উল্লেখ করা হয়। কোনও ফাইল দেওয়া প্রথম নাম এবং পরবর্তী কোনও লিঙ্কের মধ্যে কোনও পার্থক্য নেই। সুতরাং উত্তরটি হ'ল "হ্যাঁ": একটি হার্ড লিঙ্ক একটি নিয়মিত ফাইল এবং সত্যই, একটি নিয়মিত ফাইল একটি হার্ড লিঙ্ক।

lsকমান্ড কত কঠিন সংযোগগুলি সেখানে ফাইলে আপনি প্রদর্শন করবে।

উদাহরণ স্বরূপ:

seumasmac@comp:~$ echo Hello > /tmp/hello.txt
seumasmac@comp:~$ ls -l /tmp/hello.txt 
-rw-rw-r-- 1 seumasmac seumasmac 6 Oct  4 13:05 /tmp/hello.txt

এখানে আমরা একটি ফাইল তৈরি করেছি /tmp/hello.txt1থেকে আউটপুটে ls -lইঙ্গিত আছে যে এই ফাইলে 1 হার্ড লিঙ্ক। এই হার্ড লিঙ্কটি নিজেই ফাইলের নাম /tmp/hello.txt

আমরা যদি এখন এই ফাইলটির অন্য একটি হার্ড লিঙ্ক তৈরি করি:

seumasmac@comp:~$ ln /tmp/hello.txt /tmp/helloagain.txt
seumasmac@comp:~$ ls -l /tmp/hello*
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct  4 13:05 /tmp/helloagain.txt
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct  4 13:05 /tmp/hello.txt

আপনি এখন দেখতে পাচ্ছেন যে দুটি ফাইলের নামই ফাইলটিতে দু'টি শক্ত লিঙ্ক রয়েছে indicate এগুলির কোনওটিই "যথাযথ" ফাইলের নাম নয়, এগুলি উভয়ই সমানভাবে বৈধ। আমরা দেখতে পাচ্ছি যে তারা উভয়ই একই ইনোডের দিকে ইঙ্গিত করছে (এই ক্ষেত্রে, 5374043):

seumasmac@comp:~$ ls -i /tmp/hello*
5374043 /tmp/helloagain.txt  5374043 /tmp/hello.txt

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

যদি আমরা একটি ডিরেক্টরি তৈরি করি এবং একটি ls -ldকরি তবে:

seumasmac@comp:~$ mkdir /tmp/testdir
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 2 seumasmac seumasmac 4096 Oct  4 13:20 /tmp/testdir

এটি দেখায় যে এই ডিরেক্টরিতে 2 টি হার্ড লিঙ্ক রয়েছে। এইগুলো:

/tmp/testdir
/tmp/testdir/.

লক্ষ্য করুন /tmp/testdir/..হয় না এই ডিরেক্টরিতে একটি লিঙ্ক, এটি একটি লিঙ্ক /tmp। এবং এটি আপনাকে বলে যে "উপ-ডিরেক্টরিগুলির সংখ্যা" জিনিস কেন কাজ করে। যখন আমরা একটি নতুন উপ-ডিরেক্টরি তৈরি করি:

seumasmac@comp:~$ mkdir /tmp/testdir/dir2
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 3 seumasmac seumasmac 4096 Oct  4 13:24 /tmp/testdir

আপনি এখন /tmp/testdirডিরেক্টরিতে 3 টি سخت লিঙ্ক দেখতে পাচ্ছেন । এইগুলো:

/tmp/testdir
/tmp/testdir/.
/tmp/testdir/dir2/..

সুতরাং প্রতিটি নতুন উপ ডিরেক্টরি ডিরেক্টরি লিঙ্কের গণনা এক এক করে বাড়িয়ে দেবে কারণ ..এতে এন্ট্রি রয়েছে।


আমি বুঝতে পারি কীভাবে মেটাডেটা, ইনোডগুলি এবং কঠোর লিঙ্কিং কাজ করে। হার্ড লিঙ্ক করা ফাইলটি যদি একটি নিয়মিত ফাইল হিসাবে গণনা করা হয় তবে আমার কেবল এটি পরিষ্কার করা দরকার। এটি কেবল আমাকে দেখায় যে উত্তরটি হ্যাঁ হ'ল কারণ এটি উত্সর্গীকৃত কলামটির কারণে, যা স্পষ্টতই ইঙ্গিত দেয় যে এটি সমস্ত ফাইলে স্থানীয়। দুঃখিত, তবে আমি এটিকে নীচে নামাতে হবে :(
মিঃ মিটি ফ্রেশ

এটি ঠিক আছে, আমি নিশ্চিত এটি অন্য কারও জন্য দরকারী তথ্য হবে।
seumasmac

ডটগ্লোব হার্ডলিঙ্ক সিস্টেমের সাথে আকর্ষণীয় সম্পাদনা, আমি কখনই জানতাম না যে এটি এটি করে।
মিঃ মিন্টি তাজা

আমি হার্ড লিঙ্কগুলি == নিয়মিত ফাইলের অনুচ্ছেদে স্পষ্ট করেছিলাম।
seumasmac

1
বিশেষত বাক্যটির মতো: "এগুলির কোনওটিই 'যথাযথ' ফাইলের নাম নয়, এগুলি উভয়ই সমানভাবে বৈধ" " এটি হার্ড লিঙ্কগুলির বোঝার জন্য একটি গুরুত্বপূর্ণ উপাদান। খুব সুন্দর করে লেখা।
ওয়াইল্ডকার্ড

4

হার্ড লিঙ্কগুলি কি সাধারণ ফাইল হিসাবে গণনা করা হয়?

হার্ড লিঙ্কগুলি তারা যা কিছু লিঙ্ক করেছে তা গণনা করে। আপনি একই ফাইল সিস্টেমের যে কোনও কিছুতে লিঙ্ক করতে পারেন।

mkdir test
cd !$

>file
ln -s file sym
mknod pipe p

ln file file2
ln -P sym sym2
ln pipe pipe2

ls -al

# sockets, too:
cat >tsock.c <<\EOD
#include <sys/socket.h>
#include <sys/un.h>
int main(int n, char **a)
{
        struct sockaddr_un test = { AF_UNIX, "socket" };
        int testfd = socket(AF_UNIX, SOCK_SEQPACKET, 0);
        bind(testfd,(struct sockaddr *)&test,sizeof test);
}
EOD
make tsock
./tsock

ln socket socket2

ls -al

# even devices if you want:
sudo mknod mytty c 5 0
ln mytty mytty2
sudo chmod 666 mytty

ls -al
# notice permissions are on an object not on the links to it:
echo Hi, Kilroy! >mytty2  

যে কোনও কিছুর প্রতি হার্ডলিঙ্ক সমান, অন্তর্নিহিত অবজেক্টটি এতক্ষণ ধরে আটকে থাকে যতক্ষণ না এর সাথে কোনও (সম্পাদনা: অ-প্রতীকী) লিঙ্ক রয়েছে (এমনকি একটি উন্মুক্ত ফাইল বর্ণনাকারী, যার জন্য আমার অত্যন্ত কৃতজ্ঞ হওয়ার জন্য বিব্রতকর কারণ রয়েছে)।

সিস্টেম ডিরেক্টরি লিঙ্কগুলিতে বিধিগুলি প্রয়োগ করবে, আপনি একটি ডিরেক্টরিতে একটি নামের লিঙ্ক পাবেন এবং সিস্টেম স্বয়ংক্রিয়ভাবে তার এম্বেডড .লিঙ্ক এবং যে কোনও উপ-ডিরেক্টরিগুলির ..লিঙ্কগুলি যুক্ত করবে (লক্ষ্য করুন যে .এলএস এর উপরের দুটি লিঙ্ক রয়েছে) তবে এটি একটি স্পষ্ট চেক, কিছু মোডেডে সিস্টেমগুলি সুবিধাপ্রাপ্ত ব্যবহারকারীরা লুপগুলি না করার প্রতিশ্রুতি প্রতিশ্রুতি দেয় তারা নতুন লিঙ্কগুলি নিজেরাই যুক্ত করতে পারে। ফাইল সিস্টেমে কোন যত্ন নেই, এটি স্বেচ্ছাসেবী ডিরেক্টরি গ্রাফগুলি ঠিকঠাক উপস্থাপন করতে পারে তবে কেউই তাদের সাথে ডিল করতে চায় না।

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


কি ./tsockআসলে যাহাই হউক না কেন না?
মাইকজার্ভ

@ মিমিকার্ভ এটি উপরের মেক-এ-সকেট প্রোগ্রাম, এটি কেবল বর্তমান সারণীতে "সকেট" নামে একটি সকেট লিঙ্ক ফেলেছে।
জেথিল

ঠিক আছে, তবে আমি সকেট সম্পর্কে আমার কতটা কম জানি সে সম্পর্কে আমার আরও পরিষ্কার করা উচিত ছিল। আমি মনে করি আমি লিঙ্কগুলি যথেষ্ট ভাল বুঝতে পেরেছি এবং সুতরাং এটি ঠিক একই সকেটটিকে একটি নতুন নাম দেয়, তাই না? সকেট বা কোনও কিছুর জন্য এর কোন বিশেষ তাত্পর্য নেই, হ্যাঁ? আমার অজ্ঞতার জন্য দুঃখিত
মাইকজার্ভ

1
@ মিমকিজার একটি সকেট একটি খাঁটি রানটাইম সত্তা। socket()একটি আসল সকেট তৈরি করে bind(), এটিকে একটি নির্দিষ্ট নাম দেয়, connect()কোনও সকেটকে সংযুক্ত করে আপনার তৈরি কিছু সকেটের সাথে। সকেট বিভিন্ন ধরণের নাম বিভিন্ন ধরণের ব্যবহার করেন, যেমন ইন্টারনেট সকেট ইন্টারনেট ঠিকানাগুলি ব্যবহার করেন, কিন্তু তারা সব ভাগ সাধারণ এপিআই (তত্সহ read()এবং write(), এটা আমার দু: খিত যে আপনার পারবে না তোলে open()একটি ফাইল সিস্টেম সকেট এবং OS আছে বা কি libc socket()এবং connect()আপনার জন্য) । man 7 socketআরও রয়েছে, সমস্ত নেটওয়ার্কিং প্রোটোকল একটি ফিডজি ম্যানপেজ তৈরি করে।
jthill

1
@ মেকজার্ভ দেখুন, আমি পিটিআই এবং পিটিএস এবং সম্ভবত একটি ভাল দিনে পিটিএমএক্স বানান করতে পারি, তবে এটি প্রায়। :-) কমপক্ষে 5,0 নোড যেখানেই খুঁজে পাবে সেখানেই এটি কাজ করে, এটি নিয়ন্ত্রণ-টিটিআই ডিভাইসের ধরণ। আমি এটি মাত্র ls -l / dev / tty দিয়ে পেয়েছি, অনুমান আমি সেখানে ভাগ্যবান হয়েছি।
জেথিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.