//

Monday, August 27, 2012

Hard Link

hard link של קובץ הוא בסופו של דבר שם נוסף לאותו קובץ במיקום כלשהו בfilesystem שלנו.
כלומר, כל שינוי שאני אעשה לקובץ א' יתבטא גם בקובץ קובץ ב' במידה ויש ביניהם קשר של hard link.

איך יוצרים בכלל hard link?

ln filea fileb
כך נוצר לנו hard link בשם fileb לקובץ filea.

יש לי בתיקייה קובץ מסויים בשם turtle. איך אדע אם לקובץ יש hard links נוספים במערכת?
בקלות - הפקודה ls -l או בשימוש היותר נפוץ שלה היום ll תציג לנו בשדה השני את מספר הhard links


המספר 1 מציין שקיים רק הקובץ עצמו, ללא hard links.

  • לא ניתן ליצור hard links בין fs שונים
מספר פקודות למציאת כל הhard links תחת fs מסויים:

טוב אז הראשונה והאהובה עלי היא הפקודה הבאה

find . -xdev -samefile filea

הנקודה בפקודה מציינת להתחיל את החיפוש מהמיקום הנוכחי
samefile פירושו תמצא לי את אותם הקבצים כמו הקובץ filea או במילים אחרות תמצא לי את הhard links שלו.

דרך נוספת:

find . -type f -links +1
הפקודה תמצא קבצים עם יותר מhard link אחד. כלומר hard link נוסף שהוא לא הקובץ עצמו.
ניתן לציין את הפקודה ללא סימן + ואז הפקודה תמצא קבצים עם כמות מדוייקת של hard links. כן, אפשר גם עם מינוס.

כיצד מהסתכלות בלבד ניתן לראות מהפלט של הפקודה ls הם אותם קבצים?
בעזרת i-node number. אותו מספר שמייצג את הקובץ בfilesystem הוא מספר זהה לכל הקבצים שהם hard links אחד של השני. 

הפלט של הפקודה ls -li יוציא לנו את מספר הinode של הקובץ:



כאן אנו רואים שלקבצים turtle & dog יש את אותו inode number שהוא 41. כלומר הם אותם קבצים. 
ניתן גם לראות שהcount של hard links של כל אחד מהם הוא 2 מה שרק מאשש את הטענה הקודמת.

ניתן בעזרת פקודת find למצוא קבצים לפי מספר inode שזו למעשה דרך נוספת למצוא את כל הhard links של קובץ מסויים:

type . -xdev -inum 546

הפקודה תמצא לנו את כל הקבצים להם יש את מספר הinode שהוא 546.

מקווה שהשכלתם. 

עד הפעם הבאה.