سؤال

أردت فقط توضيح ما إذا كان الرابط الصعب/الرمزي هو في الواقع ملف تم إنشاؤه ؟؟

ركضت الأمر:

ln source hardlink
ln -s source softlink

- يعرض الأمر LS هذا الرابط 2 كملف.

لذا فإن استفساري هو ، يفعل ln / ln -s في الواقع إنشاء ملف؟

التحيات ، Darkie15

هل كانت مفيدة؟

المحلول

نعم و لا :-)

في UNIX ، تختلف محتويات ملف عن إدخالات الدليل لهذا الملف. يمكنك الحصول على إدخالات دليل متعددة إلى نفس المحتويات (ابحث inode للحصول على وصف لكيفية عمل هذا) ، وإليك الشيء الصعبة:

كل هذه الإدخالات الدليل متساوية. على الرغم من أن المرء قد تم إنشاؤه أولاً ، إلا أنه لا يوجد شيء مميز حول هذا الموضوع. إذا قمت بإزالته ، فإن المحتويات لا تختفي ، فقط إدخال الدليل. ستختفي المحتويات بمجرد أن يكون لدى inode إدخالات دليل صفر تشير إليها (وجميع العمليات تغلق الملف - لقد تعرضت للعض من قبل من خلال محاولة مسح ملفات سجل القرص فقط للعثور على ذلك ، لأن العملية لا تزال تحتوي على الملف مفتوح ، لم يتم استرداد محتويات الملف على الرغم من عدم وجود إدخالات دليل).

هذا للروابط الصعبة.

الروابط الناعمة أكثر صعوبة بعض الشيء. يقومون بإنشاء "ملف" من نوع (inode منفصل) ، يحتوي على المسار إلى الملف الهدف. وتلك الروابط ليس مساو. سيتركك حذف الأصل مع رابط ناعم لا يشير إلى أي مكان.

نظرًا لأن Inodes فريدة من نوعها على نظام ملفات معين ، لا يمكن للروابط الصلبة الرجوع إلى البيانات على نظام ملفات مختلف.

لا تحتوي الروابط الناعمة على هذا القيد لأنها تخزن المسار إلى الملف المستهدف ، وليس inode.

قد يساعد النص التالي:

$ echo hello >f1
$ ln f1 f2
$ ln -s f1 f3
$ ls -ial f*
    7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f1
    7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2
    4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1
$ cat f1
    hello
$ cat f2
    hello
$ cat f3
    hello
$ rm f1
$ ls -ial f*
    7385 -rw-r--r-- 2 pax None 6 May 11 14:09 f2
    4672 lrwxrwxrwx 1 pax None 6 May 11 14:09 f3 -> f1
$ cat f1
    cat: f1: No such file or directory
$ cat f2
    hello
$ cat f3
    cat: f3: No such file or directory

لقد استخدمت فقط الأرقام الأربعة الأخيرة من رقم inode للحفاظ على الإدخال قصيرًا (وعدم الضغط عليك بأرقام inode مثل 43910096366994672) ولكن يمكنك أن ترى ذلك f1 و f2 لديك نفس inode بالضبط في حين f3 مختلف. يمكنك أيضًا أن ترى أن محتويات الملف التي تم إنشاؤها في الأصل f1 البقاء على قيد الحياة لحذفه بسبب f2 لا يزال يشير إليها.

ومع ذلك ، لأن f3 يشير إلى f1 اسم بدلاً من inode ، تحصل على خطأ يحاول استخدامه.


جانبا: يجب أن تحبها عندما يونيكس يلعب معك مثل هذا:

$ ls f*
    f2  f3
$ cat f3 # What the ...?
    cat: f3: No such file or directory

تقريبا متعة مثل إنشاء ملف يسمى الفراغالمساحة الخلفيةx ثم مشاهدة شخص ما يحاول حذفه :-)

نصائح أخرى

لا أحد ينشئ ملف.

يتم تحديد ملف على القرص بواسطة "inode". الدلائل خريطة أسماء الملفات إلى inodes. يعني الرابط الصعب "إنشاء اسم ملف جديد في هذا الدليل يشير إلى نفس inode مثل الملف الذي أسمه."

يعني الرابط الرمزي "إنشاء اسم ملف جديد في هذا الدليل يشير إلى أي ما يشير إليه هذا الملفات الأخرى."

كما يشير Mangoman في تعليق ، يقوم الرابط الرمزي بإنشاء ملف يحمل اسم هدف الرابط ، لكن يجب ألا تنتبه إليه. إنه ملف خاص ليس من عملك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top