שאלה כיצד לעקוף / לעדכן את הקישור?


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

Creation -> ln -s {/path/to/file-name} {link-name}
Update -> ln -sfn {/path/to/file-name} {link-name}
Deletion -> rm {link-name}

יצירות ומחיקות לעבוד בסדר. אבל עדכונים לא עובדים. לאחר ביצוע פקודה זו, הסימנייה הופכת לא חוקית.

קראתי כאן ושם כי לא ניתן לעדכן / לעקוף את הקישור. אז יש מידע סותר ברשת. מי צודק? אם ניתן לעדכן / לדרוס קישור סימבולי, כיצד אוכל להשיג זאת?

עדכון

הנה מבנה הספריות שלי:

~/scripts/test/
~/scripts/test/remote_loc/
~/scripts/test/remote_loc/site1/
~/scripts/test/remote_loc/site1/stuff1.txt
~/scripts/test/remote_loc/site2/
~/scripts/test/remote_loc/site2/stuff2.txt
~/scripts/test/remote_loc/site2/
~/scripts/test/remote_loc/site3/stuff3.txt

מ ~/scripts/test/, כאשר אני מבצע:

ln -s /remote_loc/site1 test_link

א test_link נוצר, ואני יכול ls -l זה, אבל זה נראה שבור (בניגוד למה שאמרתי לעיל בשאלה שלי).

כיצד ניתן לבצע קישור ברמת ספריות מרובות?


153
2018-05-17 12:39




אני ממליץ להשתמש unlink במקום rm. עם unlink אתה אף פעם לא מסתכן לאבד את כל הקבצים בספרייה מקור על ידי שימוש בטעות בוררים טועה. - Jpsy
אתה משתמש מובילים / בפקודה שלך - Jamie Cook
@jpsy העצה שלך על הקישור יהיה טוב מאוד, אם זה נכון. נסה לגעת ב- zzzz; ביטול הקישור. (Unlink שיחות, לבטל קישור זהה rm, אבל עם אפשרויות לא מפואר, ולא recursion). - ctrl-alt-delor
למה להשתמש -n? (עשויה להיות הבעיה). גם אם ln שלך תומך -t ולאחר מכן להשתמש בו, עבור מקרים אלה, ו -T או destination/ במקרים אחרים. - ctrl-alt-delor


תשובות:


שימוש -f עם ln יהיה להחליף כל קישור שכבר היה שם, כל עוד יש לך את ההרשאות הנכונות, זה צריך לעבוד ... זה תמיד עבד בשבילי. באיזו מערכת הפעלה אתה משתמש?


125
2018-05-17 12:49



עדכנו את השאלה שלי עם מידע נוסף על הבעיה שלי. - Jérôme Verstrynge
אני נמצא תחת לינוקס. - Jérôme Verstrynge
אם תשנה את ln פרמטרים, כפי שאני נוטה לעשות, יהיה -f לעבור להרוס את הקבצים הקיימים שלך (מטרות הקישור)? בכל מקרה, יש לנו את -i פרמטר (אשר ינחה את המשתמש להחליף) גם, אם אתה רוצה קצת ביטחון. - palswim
@palswim פוסט זה אומר שזה בטוח כי הוא בטוח -f שיחות בלבד unlink() ו link() מתחת למכסת המנוע: stackoverflow.com/a/1466570/157385. ללא שם: הלוואי שהייתי רק זוכר את הסדר הנכון, אם כי! - Mike Branski
לא עובד. צרכי -n. ראה תשובה מקובלת. - Shawn Welch


אוקי, מצאתי איפה השגיאה שלי: אחד לא צריך לשים את הראשון / נתיב.

במילים אחרות, הפקודות בשאלות שלי צריכות להיות:

Creation -> ln -s {path/to/file-name} {link-name}
Update -> ln -sfn {path/to/file-name} {link-name}

במקום

Creation -> ln -s {/path/to/file-name} {link-name}
Update -> ln -sfn {/path/to/file-name} {link-name}

בהתחשב במקרה שלי.


93
2018-05-17 13:32



לקבלת מידע נוסף על הסיבה לכך, ההבדלים הם אחד הוא relative נתיב (ללא מוביל /) והשני הוא absolute נתיב (עם המובילים /). אם אתה מנהל מערכת לינוקס זה קריטי שאתה מבין את ההבדלים. למשל ההבדל בין rm -rf ./* ו rm -rf /.* מחליט אם לשמור על העבודה שלך או לא :) - Safado
זה does not התשובה לשאלה 'איך לעדכן / overide קישור sym' - Sirch
השורה ln -nfn {path / to / file-name} {link-name} עושה זאת. - Jérôme Verstrynge
מה ההבדל -n אפשרות לעשות? - dokaspar
-n (- no-dereference) עושה את זה לטפל {שם שם} כמו קובץ רגיל ולא בעקבות הקישור. בהתחשב בעובדה שאתה צריך לפעול על הקישור לא בצע את זה עליך להשתמש באפשרות זו. - feldoh


נושא ראשון:

מצטט אותך:

יצירות ומחיקות לעבוד בסדר. אבל עדכונים לא עובדים. לאחר   ביצוע פקודה זו, הקישור הופך להיות לא חוקי.

הבעיה במבנה הספריות הנתון:

~ / scripts / test / ~ / scripts / test / remote_loc /   ~ / scripts / test / remote_loc / site1 /   ~ / scripts / test / remote_loc / site1 / stuff1.txt   ~ / scripts / test / remote_loc / site2 /   ~ / scripts / test / remote_loc / site2 / stuff2.txt   ~ / scripts / test / remote_loc / site2 /   ~ / scripts / test / remote_loc / site3 / stuff3.txt

ושימוש בפקודה:

ln -s /remote_loc/site1 test_link

האם זה יוצר קישור סימבולי ב- $ PWD, או בספריית העבודה הנוכחית, המצביע על קובץ לא קיים מחוץ ל /, או root, ב- / remote_loc / site1

אם PWD שלך הוא ~ / scripts / אז אתה צריך להשתמש בזה:

ln -s remote_loc/site1 test_link 

אחרת אתה יכול להשתמש בנתיב המוחלט המלא כמו:

ln -s /home/yourusername/remote_loc/site1 test_link 

בעיה שנייה:

מצטט אותך:

קראתי כאן ושם כי לא ניתן לעדכן / לעקוף   סמל. אז יש מידע סותר ברשת. מי זה   ימין? אם ניתן לעדכן / לדרוס קישור סימבולי, כיצד אוכל להשיג זאת?

כדי לענות על השאלה שלך "מי צודק", אני לא בטוח מה בדיוק אתה קורא, או איך זה היה מובן. אבל, הבא אמור לעזור לנקות:

  1. מה ניתן לעדכן, ו
  2. מה לא ניתן לעדכן ללא שימוש מתגים מתאימים.


עדכון קישורים סמליים עם מטרות שאינן ספריות.

ln -sf:
  -F או - להסיר קבצי יעד קיימים, זה משמש לעדכון יעד או יעד של קישור.

דוגמא:

 ln -sf /tmp/test /tmp/test.link; ls -go /tmp |grep test
 -rw-r--r-- 1    0 Jun  8 17:19 test
 lrwxrwxrwx 1    9 Jun  8 17:27 test.link -> /tmp/test

אבל, כפי שאתה יכול לראות, זה ייתן את הנתיב המוחלט אם נתיבים מוחלטים נמצאים lnשל ויכוחים. נתיב מלא נדרש כאשר ספריית העבודה הנוכחית שונה מזו של ספריית האב של הקישור.


נתיבים יחסיים:

ln-sfr:
  ה - r - orrelative יוצר קישורים סימבוליים ביחס למיקום הקישור.

דוגמא:

ln -sfr /tmp/test  /tmp/test.link  ; ls -go /tmp| grep test
-rw-r--r-- 1    0 Jun  8 17:19 test
lrwxrwxrwx 1    4 Jun  8 17:27 test.link -> test

אבל, עדכון קישור לספרייה לא יעבוד אם היעד הוא ספרייה.

דוגמא:

ln -sf /tmp/testdir  /tmp/testdir.link  ; ls -go /tmp  |grep testdir
drwxr-xr-x 2 4096 Jun  8 17:48 testdir
lrwxrwxrwx 1    7 Jun  8 17:47 testdir.link -> testdir

כפי שאתה יכול לראות, למרות השימוש נתיב מוחלט שמות נתון lnהטענה שלעיל ללא האופציה -ר, הקשר הסמלי עדיין ביחס לקישור.


עדכון קישורים לספריות:

ln-ssnn:
  ההבדלים -N או לא מתייחסים אל LINK_NAME כקובץ רגיל אם הוא קישור סמלי לספרייה.

דוגמא:

ln -sfn /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun  8 17:48 testdir
lrwxrwxrwx 1   12 Jun  8 17:48 testdir.link -> /tmp/testdir

בניגוד ל:

ln -sfnr /tmp/testdir /tmp/testdir.link; ls -go /tmp| grep testdir
drwxr-xr-x 2 4096 Jun  8 17:48 testdir
lrwxrwxrwx 1    7 Jun  8 17:48 testdir.link -> testdir

10
2018-06-08 22:58





$ touch test1 test2
$ ln -sf test2 test1
$ ls -l test[12]
lrwxrwxrwx 1 user01 user01 5 2012-05-17 14:41 test1 -> test2
-rw-r--r-- 1 user01 user01 0 2012-05-17 14:41 test2

6
2018-05-17 12:42



כאשר אני מבצע בדיקות עם רמה אחת של ספריה, זה עובד, אבל אני מנסה להשתמש ספריות רב ברמת, וזה לא עובד. עדכנו את השאלה שלי. - Jérôme Verstrynge