سؤال معرفة هدف الارتباط الرمزي عبر سطر الأوامر


لنفترض أنني أعددت رابطًا رمزيًا:

ln -s /root/Public/mytextfile.txt /root/Public/myothertextfile.txt

هل هناك طريقة لمعرفة ما الهدف من myothertextfile.txt يستخدم سطر الأوامر؟


106
2017-10-19 18:36


الأصل




الأجوبة:


استخدم ال -f علم لطباعة النسخة المتعارف عليها. فمثلا:

readlink -f /root/Public/myothertextfile.txt

من عند man readlink:

-f, --canonicalize
      canonicalize by following every symlink in every component of the given name recursively; all but the last component must exist

143
2017-10-19 18:42



كما هو مقترح في سؤال آخر، قد ترغب في استخدامها readlink -f. - Denilson Sá Maia
للحصول على هذا العمل على نظام التشغيل Mac OS X ، brew install coreutils. هذا يثبت إصدارات gnu الأساسية للأوامر مسبوقة بالحرف g، أي greadlink -f somefile - Mike D
مع التبديل -f ، الأمر إرجاع أي شيء في حالتي ... - sotn
باستخدام - f أعطاني المعلومات التي كنت أرغب فيها ، بمعنى حل العديد من الروابط الرمزية وعرض الهدف النهائي. - isapir


readlink هو الأمر الذي تريده. يجب أن تبحث في صفحة الرجل للأمر. لأنه إذا كنت ترغب في اتباع سلسلة من الارتباطات الرمزية إلى الملف الفعلي ، فأنت بحاجة إلى -e أو -f switch:

$ ln -s foooooo zipzip   # fooooo doesn't actually exist
$ ln -s zipzip zapzap

$ # Follows it, but doesn't let you know the file doesn't actually exist
$ readlink -f zapzap
/home/kbrandt/scrap/foooooo

$ # Follows it, but file not there
$ readlink -e zapzap

$ # Follows it, but just to the next symlink
$ readlink zapzap
zipzip

19
2017-10-19 19:03



لا شيء خطأ في الإجابة الأولى ، ولكن هذا واحد أكثر اكتمالا ومفيدة. - Mike S


هذا سوف يعمل أيضا:

ls -l /root/Public/myothertextfile.txt

لكن readlink سيفضل استخدامه في نص برمجي بدلاً من التحليل ls.


4
2017-10-19 19:02





إذا كنت تريد إظهار المصدر والوجهة للارتباط ، فحاول ذلك stat -c%N files*. مثلا

$ stat -c%N /dev/fd/*
‘/dev/fd/0’ -> ‘/dev/pts/4’
‘/dev/fd/1’ -> ‘/dev/pts/4’

هذا ليس جيدًا للتحليل (الاستخدام readlink لذلك) ، لكنه يظهر اسم الرابط والوجهة ، دون فوضى ls -l

-c يمكن أن تكون مكتوبة --format و %N تعني "اسم الملف المقتبس مع dereference إذا كان رابطًا رمزيًا".


4
2017-09-29 17:44





ال readlink أمر جيد ، ولكن غنو محددة وغير عبر منصة. اعتدت على كتابة البرامج النصية عبر منصة /bin/shلذلك أستخدم شيئًا مثل:

 ls -l /root/Public/myothertextfile.txt | awk '{print $NF}'

أو:

 ls -l /root/Public/myothertextfile.txt | awk -F"-> " '{print $2}'

لكن يجب اختبارها على منصات مختلفة. أعتقد أنهم سيعملون ، لكنهم غير متأكدين 100٪ ls تنسيق الإخراج.


2
2018-04-17 21:35





إذا كنت لا تستطيع استخدامها readlink، ثم تحليل نتيجة ls -l يمكن القيام به من هذا القبيل.

النتيجة العادية ستكون:

ls -l /root/Public/myothertextfile.txt
lrwxrwxrwx 1 root root 30 Jan  1 12:00 /root/Public/myothertextfile.txt -> /root/Public/mytextfile.txt

لذلك نحن نريد استبدال كل شيء قبل "->" والسهم المتضمن. يمكننا استخدام sed لهذا:

ls -l /root/Public/myothertextfile.txt | sed 's/^.* -> //'
/root/Public/mytextfile.txt

1
2017-09-02 08:25





ll أو ls -l يجب إدراج عناصر الدليل ، بما في ذلك الارتباط الرمزي الخاص بك والهدف

cd -P /root/Public/myothertextfile.txt (في حالتك) يجب أن تشير إلى المسار الأصلي


0
2018-05-02 13:48