سؤال ما الفرق بين الرابط الصعب والرابط الرمزي؟


وكما يقول العنوان ، أود أن أعرف الفرق بين رابط ثابت ورابط ناعم تم إنشاؤه بواسطة الأمر ln. الامر man ln يقدم معلومات ، ولكنه لا يجيب عن سؤالي بشكل كافٍ.

أيضا ، سيكون من الجميل إذا كان شخص ما يمكن أن يوفر الإعداد حيث يمكن أن يكون الرابط الثابت مفضل على ارتباط رمزي.


447
2018-02-29 09:03


الأصل


واحد من الاختلافات ... لديك بعض الملفات ، على سبيل المثال اختبار الملف. إذا قمت بإجراء اختبار hardlink لـ ln ، فقم بإجراء ارتباط ترميز ln-s ثم نقل اختبار الملف إلى dir (أو إعادة تسميته) ، فلن يعمل symlink. سوف يعمل Hardlink. حاول الآن حذف اختبار الملف. سوف لا يزال يعمل Hardlink ، في الواقع سوف تكون قادرة على الوصول إلى الملف حتى عدد من hardlinks إلى ملف isnt 0. Thats بسبب inode ، هو مكتوب في دليل ... - Denwerko
لقد قمت بإعادة فتح هذا لأنه يستحق إجابة عامة جيدة حول هذه المسألة (على عكس السؤال السابق الذي كان مثالًا C غير معروف). - Oli♦
افضل جواب: youtube.com/watch؟v=aO0OkNxDJ3c - Abhishek Bhatia
أيضا إجابة كاملة: stackoverflow.com/questions/185899/... - Elzo Valugi
AbhishekBhatia الفيديو غير متوفر - Ooker


الأجوبة:


 في Linux / Unix ، تُعرف الاختصارات باسم Links


الارتباط من نوعين: ارتباطات ميسرة (ارتباطات رمزية) أو ارتباطات ثابتة.

  1. روابط لينة (روابط رمزية)

    يمكنك إنشاء ارتباطات إلى الملفات والدلائل ، ويمكنك إنشاء ارتباطات (اختصارات) على قسم مختلف ورقم مختلف من الرمز الأصلي.

    إذا كان حقيقة يتم حذف نسخة ، الرابط لن يعمل.

  2. روابط صلبة

    الروابط الثابتة هي للملفات فقط ؛ لا يمكنك الارتباط بملف على قسم مختلف برقم مختلف في inode.

    إذا كان حقيقة يتم حذف نسخة سوف يعمل الرابطلأنه يصل إلى البيانات الأساسية التي كانت النسخة الحقيقية تصل إليها.


سؤال: كيف أقوم بإجراء رابط لين؟

إجابة: يمكن إنشاء رابطًا ناعمًا ln -s. تحتاج أولاً إلى تحديد المصدر ومن ثم تحتاج إلى تحديد الوجهة. (تذكر أن عليك تحديد المسارات الكاملة لكل من المصدر والوجهة ؛ وإلا لن تعمل.)

 sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib32/libGL.so.1
             (----------Source-------)             ( Destination )

enter image description here

كما ترون أنه يحتوي على inode مختلفة ويمكن إجراؤها على قسم مختلف.


سؤال: كيف أقوم بإجراء رابط Hard؟

إجابة: يمكن إنشاء رابط ثابت ln. تحتاج أولاً إلى تحديد المصدر ومن ثم تحتاج إلى تحديد الوجهة. (تذكر أن عليك تحديد المسار الكامل لكل من المصدر والوجهة ؛ وإلا لن تعمل.)

لنفترض أن لدي برنامج نصي في /script يدعى الدليل firefox.

 ls -i # Shows you the inode
 5898242 firefox

 ln /scripts/firefox /scripts/on-fire
       ( Source )    ( Destination )

enter image description here

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

enter image description here

أعلاه ، تحقق من عمل الرابط ، ثم احذف النص البرمجي الأصلي لمتصفح فايرفوكس.


أنت سؤال: سيكون من الجميل إذا كان هناك شخص ما يمكنه توفير إعداد حيث يمكن أن يكون الرابط الثابت مفضلاً على رابط رمزي.

إجابة : اعتمادا على تخطيط قسم القرص ، روابط صلبة لديك قيود يجب أن تكون على نفس القسم (نقطة -1) ويمكن فقط ربط الملفات (نقطة -1) )، لكن نقطة +1 إذا تم حذف الأصل ، فسيعمل الرابط ويتصرف مثل النص الأصلي.

من ناحية أخرى ، يمكن أن يشير الارتباط الميسر إلى الدلائل أو الملفات (نقطة +1) ولا يوجد حد للتقسيم (نقطة +1) ، ولكن (نقطة -1) إذا تم حذف المصدر فلن يعمل الرابط.


32
2018-05-09 00:42





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

من ناحية أخرى ، يشير الرمز الرمزي بالفعل إلى مسار آخر (اسم ملف) ؛ يقوم بحل اسم الملف في كل مرة تقوم بالوصول إليه من خلال الارتباط الرمزي. إذا قمت بنقل الملف ، فلن يتبعه الارتباط الرمزي. إذا قمت باستبدال الملف بآخر ، مع الاحتفاظ بالاسم ، فسيشير الارتباط الرمزي إلى الملف الجديد. يمكن Symlinks تمتد أنظمة الملفات. باستخدام symlinks ، لديك تمييز واضح جدًا بين الملف الفعلي و symlink ، والذي لا يخزن أي معلومات بجانب المسار حول الملف الذي يشير إليه.


314
2018-05-18 09:51



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


"صورة تساوي ألف كلمة." Pictorial representation


و "، مثال يستحق مائة فقرات ..."

قم بإنشاء ملفين:

$ touch blah1   
$ touch blah2

أدخل بعض البيانات فيها:

$ echo "Cat" > blah1
$ echo "Dog" > blah2

وكما هو متوقع:

$cat blah1; cat blah2
Cat
Dog

دعونا ننشئ روابط صلبة ولينة:

$ ln blah1 blah1-hard
$ ln -s blah2 blah2-soft

دعونا نرى ما حدث للتو:

$ ls -l

blah1
blah1-hard
blah2
blah2-soft -> blah2

تغيير اسم blah1 لا يهم:

$ mv blah1 blah1-new
$ cat blah1-hard
Cat

blah1-hard يشير إلى inode ، محتويات الملف - لم يتم تغييره.

$ mv blah2 blah2-new
$ ls blah2-soft
blah2-soft
$ cat blah2-soft  
cat: blah2-soft: No such file or directory

لا يمكن العثور على محتويات الملف لأن الارتباط الميسر يشير إلى الاسم ، الذي تم تغييره ، وليس إلى المحتويات.
وبالمثل ، إذا تم حذف blah1 ، فإن blah1-hard لا يزال يحمل المحتويات ؛ إذا تم حذف blah2 ، فإن blah2-soft هو مجرد رابط لملف غير موجود.


المصدر: نسخها بشكل صارخ من ستاكوفيرفلوو!


294
2017-07-21 07:33



لكي نكون منصفين لك - قمت بإضافة الصورة الجميلة في الأعلى ... آه قمت بنسخ ذلك أيضا! الجمع بين الاجابتين هو في الواقع مفيد جدا :) - icc97
شرح أفضل ، في أي مكان! - dennisbot
ظللت أحدق في الصورة لمدة 20 ثانية ، ثم فجأة ، أحسبتها. هذا في الواقع رائع. - Mohammed Joraid
راجع للشغل: استخدام الروابط الثابتة مع git  هي فكرة سيئة، فقط في حالة ما إذا كان شخص ما (محبطًا بسبب الروابط الطرية) يتساءل ... يمكن أن ينطبق على أنظمة تعيين الإصدارات الأخرى أيضًا. - Frank Nocke
هل يوجد وصل إلى روابطه الصلبة المشابهة لملف تم تخزينه في السحاب لأي جهاز يصل إليه؟ - Ooker


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

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

يمكنك معرفة عدد الأسماء التي يحتوي عليها الملف من إخراج ls -l. الرقم الأول بعد وضع الملف هو عدد الارتباطات. يحتوي الملف الذي يحتوي على أكثر من رابط واحد على اسم (أسماء) أخرى في مكان ما ، وبالعكس ، يحتوي الملف الذي يحتوي على عدد ارتباط واحد فقط على ارتباطات ثابتة (أخرى).


87
2018-05-18 15:23



If you replace the named file, then the link still contains the same name, and so now it points to the new file - أعتقد أن هذا لم يتم شرحه بشكل جيد. هل تقصد إذا استبدلت الملف الذي حصلت فيه على رابط رمزي ، فستظل الروابط التي تحتوي على الاسم بدون تغيير. ولكنها تشير فقط إلى الملف الذي تم استبداله عندما يكون اسم الملف (أي الملف الجديد الذي حل محل الملف القديم) هو نفسه الذي تم استبداله (أي الملف القديم الذي تم استبداله بالملف الجديد) ، صحيح؟ - Mike
Mike ، نعم: يشير الارتباط الرمزي إلى اسم الملف الأصلي ، لذلك استبدال هذا الملف يعني أن الارتباط يشير الآن إلى الملف الجديد. - psusi
Bbut فقط إذا حصلت على نفس الاسم الصحيح؟ سوف يشير إلى نقطة رابط الموز وأستبدل الملف بالبرتقال ثم رابط sy لا يمكن العثور على ملف الموز بعد الآن ، أي أنه لن يعمل - Mike
@ مايك ، العالم يحل محل يعني أنه يحمل الاسم نفسه ، وإلا فأنت تقوم فقط بحذف ملف واحد وإضافة آخر ؛) - psusi


يمكن أن يعمل الارتباط الثابت فقط على نفس نظام الملفات ، فهو ببساطة اسم مختلف لنفس inode (تتم الإشارة إلى الملفات داخليًا بواسطة inode). سيتم حذف الملف من القرص فقط عند اختفاء رابط آخر إلى inode (أنت rmد أو unlinkد الرابط الأخير). تعمل الارتباطات الثابتة عادةً فقط للملفات ، وليس الدلائل.

الارتباط الرمزي (ارتباط رمزي) هو ملف خاص يحتوي على مسار إلى ملف آخر. يمكن أن يكون هذا المسار مطلقًا أو نسبيًا. يمكن أن تعمل symlinks عبر أنظمة الملفات ، ويمكن حتى الإشارة إلى ملفات مختلفة ، إذا قمت مثلاً بإخراج قرص صلب خارجي واستبداله بآخر ، والذي يحتوي على ملف مختلف على نفس المسار. يمكن أن يشير الارتباط الرمزي إلى الملفات أو الدلائل.


57
2018-02-29 09:20



شكرا ، وهذا يخبرني كيف تعمل ، ولكن ماذا يفعل بالضبط الرابط الثابت؟ ولماذا لا تعمل للأدلة؟ - ste_kwr
knittl: أنت متأكد؟ يبدو في بعض أنظمة الملفات يتم السماح للارتباطات الثابتة إلى الدلائل ولكن الجذر فقط يمكن إنشاؤها. شاهد -d, -F, --directory التبديل. ونعم ، أنا يملك ينظر الى المذكرة في ln(1) الصفحة :) - 0xC0000022L
kniwor: أسهل طريقة لوصف hardlinks هي "مجرد اسم آخر لنفس الملف (أي البيانات الموجودة على القرص)". و- على الأقل على النظام (الأنظمة) - ln لا يمكن استخدامها لجعل الروابط الثابتة إلى الدلائل. هناك ارتباطات ثابتة إلى الدلائل رغم ذلك ، أبرز مثال على ذلك . و ... لم أكن أريد تضمين ذلك في جوابي الأصلي ، لأن ذلك سيؤدي فقط إلى تعقيد الأمور. - knittl
STATUS_ACCESS_DENIED: حسنًا بخير ... ولكنها عادة ليست فكرة جيدة. لهذا السبب كتبت «عادة» في جوابي الأصلي. انظر أيضا تعليقي السابق عن أمثلة. - knittl
بحيث يمكن للرابط الصلب أن يشير إلى نفس المجلد / الملف بأسماء مختلفة إليه ، أي وجود أسماء مختلفة ترتبط بنفس الرمز؟ - Charlie Parker


يذكر أحد الإجابات من الموضوع الآخر (المرتبط الآن من أعلى المنشور) هذه الصفحة وهو ما أعتقد أنه تفسير متوسط ​​المستوى جيد إلى حد ما. إذا كنت تضيع في فن ascii ، فإليك نسخة tl ؛ dr:

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

تقوم النواة وأنظمة الملفات بترجمة كل شيء بشفافية.

بناءً على ذلك:

  • الروابط الثابتة تسمح فقط بربط نظام الملفات نفسه. يمكن أن تشير Symlinks إلى أي مسار.
  • تشير الروابط الثابتة (بشكل أساسي) إلى البيانات المطلقة. يمكن أن تشير Symlinks إلى المسارات النسبية (على سبيل المثال ../parent.file)
  • بالتمديد ، إذا قمت بتحريك المؤشر المستهدف للارتباط الثابت (والذي ، تذكر ، نفسه هو في الأساس مجرد رابط ثابت يشير إلى inode) ، لا يزال الارتباط الثابت يعمل. عادة ما يؤدي تحريك هدف الارتباط الرمزي إلى قطع الارتباط الرمزي.
  • سيكون حل الارتباط الثابت أسرع ولكن بشكل لا يمكن قياسه. هذا الجزء الضئيل من السرعة يأتي على حساب نظام ملفات غير مرن.

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

إضافة ارتباط ثابت يوفر فقط inode بمؤشر إضافي يستند إلى نظام الملفات. هل هذا صحيح؟


20
2018-05-18 15:10



أعتقد أنك على حق ، كل ملف هو اسم مسار inode ، والارتباط الثابت هو اسم مسار إضافي للونود نفسه. لذلك لا يختلف رابط ثابت عن الملف العادي. - enzotib
أحاول فهم هذا ... ولكنك تقول: "الروابط الرمزية هي ملفات منفصلة (بما في ذلك inode منفصلة والبيانات) التي تقوم بتخزين مسار نظام ملفات إلى ملف. "هل يحتوي الارتباط الرمزي بالفعل على بيانات منفصلة؟ إذن ، تمامًا مثل نسخة من dir التي ترتبط بها ، أليس كذلك؟ ... وفي كل مرة يتم فيها كتابة شيء ما إلى الارتباط الرمزي ، يجب مكتوبة مرتين على القرص؟ لا معنى له. - MiniGod
MiniGod لا يوجد ارتباط رمزي هو رمز inode لمجموعة من البيانات التي تقوم بتخزين مسار إلى آخر inode (filename). نعم ، انها تشبه مصفوفة ولكن بمجرد الحصول عليها ، لن تنساها ابدا :) - Oli♦
Oli قد أكون في حيرة ، ولكن عندما تقول: "بما في ذلك في مكان منفصل والبيانات "، تعني أن الشفرة تحتوي على بيانات منفصلة !؟ - MiniGod
MiniGod نعم. يعد Symlink بمثابة رمز يشير إلى البيانات (تمامًا مثل الملف العادي) ، وهذه البيانات تمثل مسارًا. إنه أكثر ذكاءً من ذلك - للسماح بالاستخدام الشفاف من خلال الروابط الصوتية - ولكن هذا هو كل ما في جوهره. - Oli♦


متى تستخدم لين لينك:

الارتباط عبر أنظمة الملفات: إذا كنت تريد ربط الملفات عبر أنظمة الملفات ، فيمكنك فقط استخدام الارتباطات / الارتباطات الارتباطية.

روابط إلى الدليل: إذا كنت تريد ربط الأدلة ، فيجب عليك استخدام الروابط Soft ، حيث لا يمكنك إنشاء رابط ثابت إلى دليل.

متى تستخدم Hard Link:

مساحة التخزين: تستهلك الروابط الثابتة مقدارًا ضئيلًا جدًا من المساحة ، نظرًا لعدم وجود إيضاحات جديدة يتم إنشاؤها أثناء إنشاء الروابط الثابتة. في الروابط اللينة ، نقوم بإنشاء ملف يستهلك مساحة (عادة 4 كيلوبايت ، حسب نظام الملفات)

الأداء: سيكون الأداء أفضل قليلاً أثناء الوصول إلى ارتباط ثابت ، لأنك تقوم بالوصول مباشرةً إلى مؤشر القرص بدلاً من المرور من خلال ملف آخر. نقل موقع الملف: إذا قمت بنقل الملف المصدر إلى موقع آخر على نفس نظام الملفات ، فسيظل الرابط المتصل يعمل ، ولكن سيخفق الارتباط الناعم.

التكرار: إذا كنت تريد التأكد من سلامة بياناتك ، فيجب عليك استخدام الرابط الثابت ، كما هو الحال في الرابط الثابت ، فإن البيانات آمنة ، إلى أن يتم حذف جميع الروابط إلى الملفات ، بدلاً من ذلك في الارتباط الميسر ، ستفقد البيانات إذا تم حذف المثيل الرئيسي للملف.


15
2017-09-06 23:48



لاحظ أن هناك أيضًا ارتباطًا رمزيًا سريعًا لحجم اسم المسار الذي يصل إلى 64 بايتًا. لا يزال يستغرق ما يصل واحد inode ، ولكن لا تستهلك مساحة كتلة 4kb. - syockit