שאלה מצא את הקישור קישור סימבולי באמצעות שורת הפקודה


תגיד שאני הגדרת קישור סמלי:

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 readlinkYou

-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 הבורר:

$ 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