الروابط الرمزية على Linux هي ميزة رائعة ، لكنها يمكن أن تتعطل وتترك تشير إلى لا شيء. إليك كيفية تحديد موقع الروابط الرمزية المعطلة ومراجعتها وإزالتها من نظامك إذا احتجت إلى ذلك.
الروابط الرمزية 101
الروابط الرمزية ، تسمى أيضًا “الروابط اللينة” و “الروابط الرمزية” ، هي شكل من أشكال الاختصارات التي يمكن أن تشير إلى الملفات والأدلة. يشبه الارتباط الرمزي ملفًا عاديًا أو دليلًا في نافذة مدير الملفات. يظهر أيضًا كإدخال في قائمة ملف في نافذة طرفية. الملف أو الدليل الذي يشير إليه الارتباط الرمزي يمكن أن يكون في أي مكان في شجرة نظام الملفات.
على سبيل المثال ، لنفترض أن لديك ارتباط رمزي في الدليل الرئيسي الخاص بك يسمى “dave-link” والذي يشير إلى ملف يسمى “text-file.txt” الموجود في مكان آخر في شجرة نظام الملفات. يتم تطبيق الأوامر التي تستخدمها على الارتباط الرمزي تلقائيًا على الملف الذي يشير إليه. إذا حاولت استخدام cat
أو less
على الرابط الرمزي ، فسترى بالفعل محتويات ملف “text-file.txt”.
يحتوي تثبيت Linux القياسي على العديد من الروابط الرمزية. حتى إذا لم تقم بإنشاء أي منها بنفسك ، فإن نظام التشغيل يستخدمها. غالبًا ما تستخدم إجراءات تثبيت التطبيق ارتباطات رمزية للإشارة إلى الملفات القابلة للتنفيذ. عند تحديث البرنامج ، يتم استبدال الملف الثنائي بالإصدار الجديد ، وتستمر جميع الارتباطات الرمزية في العمل كما كان من قبل ، طالما أن اسم الملف الجديد هو نفس الاسم القديم.
يمكننا بسهولة رؤية بعض الارتباطات الرمزية باستخدام ls
الدليل الجذر. يتم عرض بعض الإدخالات بلون مختلف – على جهاز اختبار Ubuntu 20.10 الخاص بنا ، يتم عرضها باللون الأزرق الفاتح.
نكتب ما يلي:
ls /
يمكننا إلقاء نظرة أعمق باستخدام خيار -l
(القائمة الطويلة). نكتب الأمر التالي للنظر في جميع إدخالات “lib” وإدخال “bin” الفردي:
ls -l /lib* /bin
في بداية كل سطر يوجد “l” ، مما يشير إلى أن العنصر عبارة عن ارتباط رمزي. يظهر النص بعد “->” إلى ما يشير إليه الارتباط الرمزي. في مثالنا ، الأهداف كلها أدلة.
يتم سرد الأذونات على أنها قراءة وكتابة وتنفيذ للمالك والمجموعة وآخرين. هذه إدخالات وهمية افتراضية. لا تعكس الأذونات الفعلية على الكائنات التي تشير إليها الروابط الرمزية. إنها الأذونات على الملف أو الدليل الهدف التي لها الأسبقية ويتم تكريمها بواسطة نظام الملفات.
ارتباطات رمزية معطلة
يتم كسر الارتباط الرمزي (أو تركه متدليًا) عند حذف الملف الذي يشير إليه أو نقله إلى مكان آخر. إذا لم يعمل روتين إلغاء التثبيت الخاص بالتطبيق بشكل صحيح ، أو تمت مقاطعته قبل اكتماله ، فقد تترك الروابط الرمزية معطلة.
إذا قام شخص ما بحذف ملف يدويًا دون معرفة أن الروابط الرمزية تشير إليه ، فلن تعمل هذه الارتباطات الرمزية بعد الآن. ستكون مثل لافتات طريق تشير إلى بلدة تم هدمها بالجرافات.
يمكننا بسهولة رؤية هذا السلوك باستخدام رابط رمزي يسمى “hello” في الدليل الحالي. نكتب ما يلي ، ونستخدم ls
لرؤيته:
ls -l
يشير إلى برنامج يسمى “htg” في دليل يسمى “bin”. إذا قمنا “بتشغيل” الارتباط الرمزي ، فسيتم تنفيذ البرنامج لنا:
./hello
يمكننا الآن التحقق مما إذا كان هذا هو ما يحدث عن طريق تشغيل البرنامج مباشرة:
../bin/htg
كما هو متوقع ، حصلنا على نفس الاستجابة. لنحذف ملف البرنامج:
rm ../bin/htg
الآن ، عندما ننظر إلى الارتباط الرمزي ، نرى أنه مدرج باللون الأحمر لأن Linux يعرف أنه معطل. يخبرنا أيضًا بما تم استخدامه للإشارة ، حتى نتمكن من استبدال الملف أو إعادة ترجمة البرنامج أو القيام بكل ما هو ضروري لإصلاح الارتباط الرمزي.
لاحظ أنه إذا حاولنا تشغيل الارتباط الرمزي ، فسيظهر الخطأ يشير إلى اسم الارتباط الرمزي ، بدلاً من اسم البرنامج الذي يشير إليه الارتباط الرمزي.
نكتب ما يلي:
./hello
البحث عن الارتباطات الرمزية المقطوعة
تحتوي معظم الإصدارات الحديثة من find
الخيار xtype
(النوع الممتد) ، والذي يبسط عملية العثور على الروابط الرمزية المعطلة . سنستخدم l
العلم مع xtype
لإخباره بالبحث عن الروابط. باستخدام find
، xtype
كما يلي ، بدون أي من type
الأعلام الأخرى ، قوى xtype
لإعادة الروابط المعطلة:
find . -xtype l
يؤدي تشغيل الأمر في دليل الصفحة الرئيسية للاختبار إلى العثور على عدد غير قليل من الارتباطات الرمزية المعطلة. لاحظ أن البحث تكراري افتراضيًا ، لذا فهو يبحث في جميع الدلائل الفرعية تلقائيًا.
تم إدراج الارتباط الرمزي “مرحبًا” الذي كسرناه عن قصد ، كما توقعنا. يرتبط أحد الروابط الرمزية الأخرى بمتصفح Firefox ، ويرتبط الباقي باللقطات.
إذا قمنا بتوجيه الإخراج wc
باستخدام -l
خيار (الأسطر) ، فيمكننا حساب الأسطر ، وهو نفس حساب الروابط الرمزية المقطوعة.
نكتب ما يلي:
find . -xtype l | wc -l
لقد علمنا أن لدينا 24 ارتباطًا رمزيًا معطلاً يشير إلى لا شيء.
البحث والمراجعة ثم إزالة
قبل أن تتسرع في حذف جميع الارتباطات الرمزية المعطلة ، انظر في نتائج find
الأمر. تحقق مما إذا كان هناك سبب وجيه لأي من الروابط الرمزية المعطلة.
في بعض الأحيان ، قد يكون الارتباط الرمزي هو المشكلة ، وليس الملف الهدف. إذا تم إنشاء الارتباط الرمزي بشكل غير صحيح ، فقد يشير إلى لا شيء ، ولكن الهدف الحقيقي موجود. سيكون إعادة إنشاء الارتباط الرمزي هو الإصلاح في هذه الحالة.
من الممكن أيضًا استخدام رابط رمزي معطل ظاهريًا كشيء آخر ، مثل مؤشر قفل ملف أو مؤشر go / no go آخر. يقوم Firefox بهذا ؛ هذا هو الرابط الرمزي الأول في قائمتنا. ومع ذلك ، لا يتم استخدام Firefox على جهاز الاختبار الخاص بنا ، لذلك من الآمن حذفه.
من الممكن أيضًا أن يكون الهدف موجودًا بشكل دوري فقط ، وهذا هو السلوك المتوقع (والمطلوب) لهذا البرنامج المعين. ربما يتم نسخ الملف الهدف من جهاز آخر أو من السحابة ، ويقوم بوظيفته ، ثم يتم حذفه مرة أخرى ، ليتم استبداله ببرنامج مختلف في الدورة التالية.
قد يكون الارتباط الرمزي المقطوع أيضًا أحد أعراض فشل تثبيت البرنامج. في هذه الحالة ، بدلاً من حذف الارتباط الرمزي ، يجب إما إصلاحه يدويًا أو إعادة التثبيت.
عندما تنتهي من إصلاح الروابط المعطلة التي تحتاج إلى الاحتفاظ بها ، كرر الأمر لإجراء البحث. يجب أن تكون الروابط الرمزية الثابتة غائبة عن نتائج البحث.
لدواعي السلامة ، من الأفضل قصر عمليات إزالة الروابط الرمزية على الدلائل الخاصة بك. كن حذرًا جدًا من تشغيل هذه الأوامر كجذر أو في أدلة النظام.
إزالة الارتباطات الرمزية المقطوعة
يقوم -exec
خيار (تنفيذ) بتشغيل الأوامر في find
نتائج البحث. سنستخدم rm
لحذف كل ارتباط رمزي معطل. و {}
يتم استبدال سلسلة مع اسم كل الرمزي كسر كما تم اكتشاف كل واحد من قبل find
.
علينا استخدام فاصلة منقوطة ( ;
) لإنهاء قائمة الأوامر التي نريد -exec
تشغيلها. سنستخدم الشرطة المائلة للخلف ( \
) من أجل “الهروب” من الفاصلة المنقوطة ، لذلك يتم التعامل معها كجزء من find
الأمر ، وليس شيئًا Bash
يجب العمل بناءً عليه.
نكتب ما يلي:
find . -xtype l -exec rm {} \;
لقد عدنا إلى موجه الأوامر بدون إشارة إلى حدوث أي شيء. للتحقق من إزالة الروابط المعطلة ، نكرر الأمر للبحث عنها ، على النحو التالي:
find . -xtype l
لا توجد أي نتائج مطابقة ، مما يعني أنه قد تمت إزالة الروابط الرمزية المعطلة.
تذكر أن تقوم بالمراجعة أولاً
مرة أخرى ، خذ دائمًا الوقت الكافي لمراجعة قائمة الروابط الرمزية قبل تشغيل الأمر لحذفها. يمكنك تجنب حذف أي شيء لست متأكدًا بشأنه عن طريق تشغيل الأمر لحذفها في الدلائل المناسبة.
على سبيل المثال ، أعلاه ، كان بإمكاننا تشغيل الأمر في دليل “.snap” ، ثم إزالة الارتباط الرمزي المنفرد “hello” يدويًا. كان هذا من شأنه أن يترك الارتباط الرمزي لقفل Firefox دون تغيير.