כמה מילים על hard Vs simbolic links
כל קובץ במערכת מזוהה על ידי מבנה נתונים בשם inode כל מפעולות מערכת הקבצים על קובץ מסויים עוברות דרך ה - ןinode המזהה את הקובץ.
חלק מהנתונים המוחזקים ב - inode הם: גודל הקובץ, סטטוס, הרשאות, בעל הקובץ מספר ה - hard links שיש לקובץ וכו'.
כאשר מבצעים קישור לקובץ קיים מערכת ההפעלה מקשרת בין קובץ פיזי לשם חדש במערכת הקבצים, ויוצרת כניסה חדשה בספרייה הנוכחית (שבה בוצע הקישור) המצביעה ל-inode שכבר קיים. מערכת הקבצים מחזיקה את כל השמות המלאים של קובץ מסויים, ותהליכים יכולים לפנות לקובץ באמצעות כל אחד מהשמות.
בעת ביצוע פקודת קישור קשיח מתבצעות הפעולות הבאות:
1) הגרעין מזהה את ה-inode של קובץ המקור ונועל אותו, מקדם את מונה הקישורים של הקובץ, משחרר את הנעילה.
2) הגרעין מחפש את קובץ היעד. אם הקובץ כבר קיים הקריאה נכשלת והמונה מוחזר לערכו הקודם. אחרת, מוצא כניסה פנויה בספריית האב של קובץ המטרה, וכותב אליה את השם החדש ואת מספר ה-inode של קובץ המקור.
מטרת שחרור הנעילה בשלב הראשון היא על מנת למנוע מצב של נעילה הדדית:
קוד: |
process A: link("a/b/c/d", "e/f/g");
process B: link("e/f", "a/b/c/d/ee");
link("a/b/c", "a/b/c/d");
|
בנוסף, יכולה גם להיווצר בעיה של לולאות בעת קישור לספריות ולכן לא ניתן לקשר ספריות ע"י קישור קשיח.
Simbilic Link
הקישור הוא קישור סמלי בלבד, באופן זה שהקריאה
יוצרת קובץ עם inode חדש המידע השמור בקובץ החדש הוא השם המלא של קובץ המקור וע"י כך נוצרת הצבעה לקובץ הישן.
מאחר ונוצר inode חדש, קובץ המקור אינו יודע כמה קשרים מובילים אליו ולכן בעת מחיקת קובץ המקור הקשרים אינם חוקיים יותר. (לעומת מחיקה בקישור קשיח בה מעודכן מספר הקישורים הכללי. בעת שמספר זה הוא 0 נמחק הקובץ, וכך גם ה-inode היחיד המתאר אותו)