سؤال

كيف يمكنك إنشاء رابط ثابت (بدلاً من الارتباط الرمزي أو الاسم المستعار لنظام التشغيل Mac OS) في OS X يشير إلى الدليل؟أعرف بالفعل الأمر "ln target target" ولكن هذا يعمل فقط عندما يكون الهدف ملفًا.أعلم أن نظام التشغيل Mac OS، على عكس بيئات Unix الأخرى، يسمح بالارتباط الثابت بالمجلدات (يُستخدم هذا في Time Machine، على سبيل المثال) ولكني لا أعرف كيفية القيام بذلك بنفسي.

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

المحلول 2

لا يمكنك القيام بذلك مباشرة في BASH بعد ذلك.لكن...لقد وجدت مقالًا هنا يناقش كيفية القيام بذلك بشكل غير مباشر: http://www.mactech.com/articles/mactech/Vol.23/23.11/ExploringLeopardwithDTrace/index.html عن طريق تجميع برنامج C صغير بسيط:

#include <unistd.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
   if (argc != 3) return 1;

   int ret = link(argv[1], argv[2]);

   if (ret != 0) perror("link");

   return ret;
}

... وقم بالإنشاء في Terminal.app باستخدام:

$ gcc -o hlink hlink.c -Wall

نصائح أخرى

أوافق على أن الارتباط الثابت للمجلدات/الأدلة يمكن أن يسبب مشكلات إذا لم تكن حذرًا، ولكن لها ميزة أكيدة للغاية - Time Machine هو مثال مثالي.وبدونها، لن يكون الأمر عمليًا لأن تكرار الإصدارات الزائدة من الملفات سوف يستهلك بسرعة كبيرة حتى أكبر الأقراص.

يستطيع Snow Leopard إنشاء روابط ثابتة للأدلة طالما أنك تتبع قواعد أميت سينغ الستة:

  1. يجب أن يكون نظام الملفات مسجلاً في مجلة HFS+.
  2. يجب أن تكون الدلائل الأصلية للمصدر والوجهة مختلفة.
  3. يجب ألا يكون أصل المصدر هو الدليل الجذر.
  4. يجب ألا تكون الوجهة في الدليل الجذر.
  5. يجب ألا تكون الوجهة سليل المصدر.
  6. يجب ألا تحتوي الوجهة على أي أصل يمثل رابطًا ثابتًا للدليل.

لذلك ليس صحيحًا على الإطلاق أن Snow Leopard فقد القدرة على إنشاء روابط صعبة إلى المجلدات.

لقد تحقق للتو من أن الرابط/غير المرتبط يعمل على Snow Leopard - طالما أنك تتبع القواعد الست.لقد جربته للتو وهو يعمل بشكل جيد على نظام Snow Leopard 10.6.6 الخاص بي - جربته على وحدة تخزين التمهيد وعلى وحدة تخزين خارجية USB منفصلة وعملت بشكل جيد في كلتا الحالتين.

وهذا هو برنامج "hunlink.c":

#include <stdio.h>
#include <unistd.h>
int
main(int argc, char *argv[])
{
   if (argc != 2)
      return 1;
   int ret = unlink(argv[1]);
   if (ret != 0)
      perror("unlink");
   return ret;
}

gcc -o hunlink hunlink.c

لذا، كن حذرًا إذا حاولت ذلك - تذكر اتباع القواعد واستخدام hlink لإنشاء هذه الروابط الثابتة واستخدام hunlink لإزالة الرابط الثابت بعد ذلك.ولا تنس أن توثق ما فعلته لاحقًا أو لشخص آخر قد يحتاج إلى معرفة ذلك.

"مسكتك" الأخرى التي تعلمتها للتو عن هذه "الروابط الثابتة" للمجلدات.عندما تقوم بإنشائها، هناك الكثير مما يحدث "خلف الستار" لنظام التشغيل Mac OS X.إحدى المشكلات المهمة حقًا هي أن المجلد الذي تنشئ الرابط إليه يتم نقله فعليًا إلى مجلد فائق الإخفاء سحري يسمى /.HFS+ Private Directory Data%000d/dir_xxx حيث xxx هو رقم inode الخاص بـ "source_folder" - تذكر تنسيق الأمر هو

hlink source_folder target_folder

ولهذا السبب، عليك توخي الحذر من عدم فتح أي ملفات في "المجلد_المصدر" لأنه إذا قمت بذلك، فسيتم نقلها للتو إلى المجلد السحري الفائق ومن المحتمل أن تواجه مشكلة إذا حاولت حفظ أي تغييرات لتلك الملفات التي كانت مفتوحة في "source_folder".لقد حدث هذا لي عدة مرات حتى اتضح لي ما كان يحدث والحل بسيط للغاية.لقد لاحظت أنه لم يعد بإمكانك تنفيذ أمر "ls -la" دون الحصول على أخطاء مضحكة لجميع المجلدات/الأدلة التي كانت موجودة في "source_folder" الأصلي ولكن يمكنك تنفيذ أمر "ls" ويبدو كل شيء على ما يرام.

إذا قمت بتشغيل "التحقق من القرص" في برنامج "Disk Utility"، ستلاحظ أنه ربما يشتكي ويعطي "صورة نقطية لوحدة التخزين تحتاج إلى إصلاح بسيط للكتل المعزولة" وهو ما حدث للتو مع إنشاء المجلد السحري الفائق و حركة "source_folder" إليها.

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

يبدو غريبًا جدًا أن كل هذا الحمل يحدث فقط من أجل المهمة البسيطة المتمثلة في إنشاء رابط ثابت لمجلد.هل لدى أي شخص أي فكرة عن سبب بذل نظام التشغيل Mac OS X كل هذا الجهد لإنشاء الرابط الثابت للمجلدات؟هل له علاقة بحقيقة أن هذا نظام ملفات "مسجل"؟

لقد اكتشفت المعلومات المتعلقة بالموقع فائق السحر والمخفي للغاية من خلال قراءة شرح أميت سينغ لأداة "hfsdebug" الخاصة به.إذا كنت تريد المزيد من التفاصيل راجع موقعه على الانترنت في الأداة المساعدة hfsdebug الخاصة بأميت سينغ.إنه برنامج مثير للاهتمام للغاية وسيخبرك بالكثير من التفاصيل حول أنظمة الملفات HFS+.إنه مجاني وأشجعك على تنزيله وتجربته.لم يعد مدعومًا ولكنه لا يزال يعمل على كل من Snow Leopard وLeopard - بشكل أساسي أي نظام مدعوم من HFS+.لا يمكنك فعل أي ضرر باستخدامها لأنها أداة "للقراءة فقط" - لذا من الرائع استخدامها لإلقاء نظرة على بعض تفاصيل نظام الملفات.

هناك مشكلة أخرى حول هذه "الارتباطات الثابتة للمجلدات" - بمجرد إنشاء واحد ويتم إنشاء المجلد المخفي فائق السرية، فهو موجود للأبد.حتى إذا قمت بإلغاء ربط المجلد الذي تسبب في إنشائه في المقام الأول، فسيظل هذا المجلد السحري موجودًا.لست متأكدا من السبب، لكنه يفعل ذلك بالتأكيد.يمكنك استخدام "hfsdebug" لمعرفة ذلك إذا كنت ترغب في تجربته.يمكنك أيضًا استخدام "hfsdebug" لمعرفة عدد هذه "الارتباطات الثابتة للمجلدات" الموجودة على محرك الأقراص.للحصول على هذه التفاصيل، راجع مقالة أميت حول الأداة المساعدة "hfsdebug".

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

هناك بعض المشكلات التي يجب أن تكون على دراية بها عند استخدام هذه الروابط الثابتة للمجلدات.إذا تم تثبيت وحدة التخزين التي تم إنشاؤها عليها على عميل بعيد، فمن الممكن أن تكون هناك مشكلات كبيرة، اعتمادًا على كيفية تثبيتها.إذا كنت تستخدم AFP لتحميل وحدة التخزين إلى عميل بعيد، فهناك مشكلات كبيرة حيث أن أي مجلد يحتوي حاليًا على رابط ثابت به أو سبق أن تمت إزالته ولكن تمت إزالته لاحقًا، لن يكون قادرًا على استخدامه كجميع مجلدات المستوى الأدنى ( ولكن ليس الملفات) لن يكون من الممكن الوصول إليها من Finder أو من نافذة Terminal.إذا حاولت تنفيذ أمر "ls -lR" بسيط، فسوف يفشل ويعطيك "ls:الثلاثون:لا يوجد مثل هذا الملف أو الدليل" رسائل خطأ لجميع المجلدات ذات المستوى الأدنى.إذا كنت تستخدم نافذة Finder لاجتياز شجرة الدليل الخاصة بوحدة التخزين البعيدة، فإن المجلدات الموجودة في المجلد الذي يحتوي على رابط ثابت أو مرتبط بها ستختفي ببساطة دون أي خطأ عند النقر فوق اسم المجلد لأول مرة.

لا يبدو أن هذه المشكلات تحدث (باستثناء رسالة الخطأ) إذا كنت تستخدم NFS لتثبيت العميل البعيد (وبافتراض أن لديك خادم NFS على النظام الذي يحتوي على وحدة التخزين كنظام ملفات HFS+ محلي).لا تتوفر هنا تفاصيل حول كيفية استخدام NFS لتركيب وحدات التخزين.استخدمت برنامج جميل من د.أطلق Marcel Bresink على "NFS Manager" للمساعدة في تثبيت NFS على الخادم والعميل.يمكنك الحصول عليه من موقع الويب الخاص به - ما عليك سوى البحث عن "Bresink NFS Manager" في محرك البحث المفضل لديك، ولكن لديه نسخة تجريبية مجانية حتى تتمكن من تجربتها قبل الشراء.إنها ليست صفقة كبيرة إذا كنت تريد معرفة كيفية إجراء عمليات تثبيت NFS، ولكن "NFS Manager" يجعل من السهل جدًا إعداد الأشياء وتعديل جميع الإعدادات المختلفة للمساعدة في تحسينها.لديه العديد من الأدوات المساعدة الأخرى الرائعة لنظام التشغيل Mac OS X والتي تتميز بأسعار معقولة جدًا - واحدة تسمى "مراقبة الأجهزة" والتي تتيح لك مراقبة جميع أنواع الأشياء ورسمها بيانيًا مثل استخدام الطاقة ودرجة حرارة وحدة المعالجة المركزية وسرعة المراوح والعديد من المتغيرات الأخرى لكليهما. أنظمة Mac المحلية والبعيدة على مدار فترات زمنية طويلة (من دقائق إلى أيام).بالتأكيد تستحق التحقق مما إذا كنت تستخدم أدوات مساعدة سهلة الاستخدام.

شيء واحد لاحظته هو أن عمليات نقل ملفات NFS كانت أبطأ بنسبة 20٪ تقريبًا من إجرائها عبر AFP، ولكن "قد تختلف المسافة المقطوعة"، لذلك لا توجد ضمانات بطريقة أو بأخرى، لكنني أفضل الحصول على شيء يعمل حتى لو كان لدي لدفع أداء يصل إلى 20٪ مقارنة بعدم وجود أي عمل على الإطلاق.

تدرك شركة Apple المشكلات المتعلقة بالروابط الثابتة وأنظمة ملفات AFP البعيدة، ويشيرون إليها على أنها "قيود التنفيذ" لعميل AFP - أفضل أن أسميها كما يبدو لي حقًا - خطأ !!!لا يسعني إلا أن أتمنى أن يعمل الإصدار التالي من نظام التشغيل Mac OS X على حل المشكلة، حيث أحب حقًا القدرة على استخدام الروابط الثابتة للمجلدات عندما يكون ذلك منطقيًا.

هذه الملاحظات هي رأيي الشخصي ولا أضمن صحتها، لذا استخدمها على مسؤوليتك الخاصة.احصل على نسخة احتياطية جيدة قبل اللعب بهذه "الروابط الثابتة للمجلدات" فقط في حالة حدوث شيء غير متوقع.ولكن أتمنى أن تستمتع إذا قررت إلقاء نظرة أكثر قليلاً على هذا الجانب المثير للاهتمام في نظام التشغيل Mac OS X.

بيفل.في الإصدار 10.5، سيخبرك في صفحة الدليل بـ ln:

   -d, -F, --directory
          allow the superuser to attempt to hard link  directories  (note:
          will  probably  fail  due  to  system restrictions, even for the
          superuser)

لذا نعم:

    sudo  ln  -d  existing_dir  new_hard_link

أعطها كلمة المرور الخاصة بك، و لم تنته بعد.أنت لم تقم بتوثيق ذلك، أليس كذلك؟أنت يجب توثيق الدلائل المرتبطة الصلبة؛حتى لو كان جهاز مستخدم واحد.

الحذف قصة مختلفة:إذا اتبعت الطريقة المعتادة لحذف الدلائل، فسوف تقوم بحذف المحتويات.وانت ايضا يجب "إلغاء ربط" الدليل:

    unlink  new_hard_link

هناك.آمل ألا تدمر نظام الملفات الخاص بك!

عبر نشر هذه الأداة العظيمة الذي يحل المشكلة بدقة، تم نشرها في الأصل بواسطة سام:


لتثبيت Hardlink، تأكد من أنك قمت بالتثبيت البيرة المنزلية, ، ثم اركض:

brew install hardlink-osx

بمجرد التثبيت، أنشئ رابطًا ثابتًا باستخدام:

hln [source] [destination]

لقد لاحظت ذلك أيضًا unlink لا يعمل الأمر على Snow Leopard، لذلك أضفت خيارًا لإلغاء الارتباط:

hln -u destination

الكود متاح على Github لأولئك المهتمين: https://github.com/selkhateeb/hardlink

نعم، إنه مدعوم من قبل النواة ونظام الملفات، ولكن نظرًا لأنه ليس مخصصًا للاستخدام العام، فهو لا يتعرض للصدفة.

ربما يمكنك معرفة واجهات برمجة التطبيقات التي يستخدمها Time Machine وتغليفها في أداة سطر الأوامر، ولكن سيكون من الأفضل أخذ التلميح والتوجيه بشكل واضح.

نسخة OSX من ln لا يمكن أن تفعل ذلك، ولكن، كما ذكر في الإجابة الأخرى من قبل ثري, ، فمن الممكن مع إصدار جنو من ln والذي يتوفر في البيرة المنزلية مثل gln كجزء من com.coreutils معادلة. man gln يسرد -d الخيار مع التحذير الخاص بـ OSX الوارد في ثريإجابة.وبعبارة أخرى، فإنه لا يعمل في جميع الحالات.ما الذي يحدد بالضبط ما إذا كان يعمل أم لا، لا يبدو أنه موثق في أي مكان.

كشرط أساسي، تثبيت coreutils:

    brew install coreutils

الآن يمكنك القيام بما يلي:

    sudo gln -d /original_folder /mirror_folder

مهم:لإزالة الرابط الثابت لك يجب يستخدم gunlink:

    sudo gunlink /mirror_folder

استخدام rm أو سيقوم Finder أيضًا بحذف المجلد الأصلي.

لعِلمِكَ:ال com.coreutils توفر صيغة homebrew الإصدارات المتوافقة مع GNU لأدوات Unix العامة.يستخدم brew list coreutils لرؤية القائمة الكاملة.

كانت حالتي هي أنني اكتشفت أنه من خلال جهاز افتراضي يعمل بنظام Windows، لا يمكنني متابعة الروابط الرمزية.(أردت اختبار بعض صفحات HTML في Internet Explorer).وكان هيكل الدليل الخاص بي يحتوي على روابط رمزية لمجلدات CSS والصور.

كان الحل البديل لحل المشكلة هو أسلوب مختلف عن الإجابات الأخرى المتضمنة.إستعملت rsync لإنشاء نسخة من المجلد.يمكن لـ Rsync حل الارتباطات الرمزية ونسخ الملفات المرتبطة بدلاً من ذلك.

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

rsync -av --copy-dirlinks --delete ../htmlguide ~/src/

اعتبارًا من عام 2018 لم يعد ممكنًا.APFS (المقدم في MacOS High Sierra 10.13) غير متوافق مع الارتباطات الثابتة للدليل.يرى https://github.com/selkhateeb/hardlink/issues/31

الجواب القصير هو أنك لا تستطيع ذلك.:) (باستثناء ربما كجذر، عندما يكون من الأدق القول أنه لا ينبغي عليك ذلك.)

يسمح Unixes فقط بعدد محدد من الروابط إلى الدلائل - ".." من داخل جميع أطفالها و ".". من داخل نفسه.أي شيء آخر من المحتمل أن يكون وصفة لشجرة دليل مشوشة للغاية.يبدو أن هذا هو قرار التصميم الذي اتخذه كين طومسون.

(ومع ذلك، يبدو أن آلة الزمن من Apple تقوم بذلك :))

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

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

لربط مجلد "المستندات" بـ Google Drive حتى تتم مزامنته:

perl -e 'link "/Users/me/Documents", "/Users/me/Google Drive/Documents"'

لإزالة الرابط إلى مجلد "المستندات" من Google Drive:

sudo perl -U -e 'unlink "/Users/me/Google Drive/Documents"'

أنت بحاجة إلى "الجذر" لإلغاء الارتباط (راجع "إلغاء الارتباط" perldoc).

الحل الآخر هو استخدام bindfs https://code.google.com/p/bindfs/ وهو قابل للتثبيت عبر المنفذ:

sudo port install bindfs
sudo bindfs ~/source_dir ~/target_dir

في حالة عدم وجود مجلد فرعي، يمكنك المحاولة

مجلد ln_path/*.* المجلد الهدف

لقد نجح الأمر بالنسبة لي على OSX 10.9

في Linux، يمكنك استخدام bind mount لمحاكاة أدلة الارتباط الثابت.لست متأكدًا من OSX

sudo mount --bind /some/existing_real_contents /else/dummy_but_existing_directory
sudo umount /else/dummy_but_existing_directory
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top