CodeShot

لینک سخت (Hard Link) در مقابل لینک نمادین (Symbolic Link)

لینک سخت اشاره‌گر دیگری به همان inode روی دیسک است و عملاً دو نام برای یک فایل واقعی محسوب می‌شود، در حالی که لینک نمادین (Symlink) یک فایل کوچک جداگانه است که فقط مسیر فایل مقصد را نگه می‌دارد و می‌تواند به دایرکتوری یا فایل روی پارتیشن دیگر اشاره کند.

ویژگیلینک سخت (Hard Link)لینک نمادین (Symbolic Link)
اشاره بههمان inodeمسیر فایل مقصد
کار بین پارتیشن‌هاخیربله
لینک به دایرکتوریخیر (معمولاً ممنوع)بله
رفتار پس از حذف مبدأداده باقی می‌ماندلینک شکسته می‌شود

کِی از لینک سخت (Hard Link) استفاده کنیم؟

وقتی می‌خواهید فایل حتی بعد از حذف نام اصلی هم باقی بماند یا نیاز به لینک در همان پارتیشن دارید.

کِی از لینک نمادین (Symbolic Link) استفاده کنیم؟

وقتی می‌خواهید به یک دایرکتوری اشاره کنید، لینک را بین پارتیشن‌های مختلف بسازید یا بخواهید مسیر مقصد را بتوان دید و تغییر داد.

مثال لینک سخت (Hard Link)

ln original.txt hardlink.txt
ls -li original.txt hardlink.txt
# هر دو یک شماره inode دارند

مثال لینک نمادین (Symbolic Link)

ln -s /var/www/html/app app-link
ls -l app-link
# app-link -> /var/www/html/app

اشتباه رایج

اشتباه رایج حذف فایل اصلی و انتظار از بین رفتن hard link هم‌زمان است؛ اما چون هر دو به یک inode اشاره می‌کنند، تا وقتی همه لینک‌ها حذف نشوند داده واقعی روی دیسک باقی می‌ماند؛ برعکس، حذف فایل اصلی symlink را به یک لینک شکسته (Broken Link) تبدیل می‌کند.

جمع‌بندی

برای اشاره به دایرکتوری یا بین پارتیشن‌ها از symlink و برای اطمینان از باقی ماندن داده حتی پس از حذف یک نام از linkهای سخت استفاده کنید.