در این مقاله به Hard Link در لینوکس می پردازیم. در این میان به اینکه inode چیست پرداخته و سپس تفاوت هارد لینک و سافت لینک در لینوکس را بررسی می کنیم.
inode چیست؟
inode محل نگهداری اطلاعات مربوط به یک فایل است و محل فایل با شماره inode مشخص می شود. فایل سیستم مجموعه بسیار زیادی از inod ها می باشد. به طور کلی از آنجایی که همه چیز در همه توزیع های لینوکس به صورت یک فایل است هر فایل دارای یک inod number یکتا می باشد.
در inode هر فایل اطلاعات بسیار زیادی نگه داری می شود:
- مسیر اصلی فایل شامل base name و dirname هر فایل
- تعداد لینک های هر فایل
- آخرین تغییرات در فایل
- تاریخ اخرین دسترسی به فایل
- سطح دسترسی های مرتبط با این فایل (permission )
- و…
در حقیقت فایل سیستم شامل میلیون ها inode می باشد که با ایجاد هر فایل در لینوکس این فایل به یکی از این شماره ها (inode ) لینک می شود.
hard link در لینوکس چیست؟
در صورتی که بخواهیم یک فایل با دو نام متفاوت داشته باشیم به گونه ای که فایل مورد نظر از دو مسیر قابل دسترسی باشد از مفهومی بنام hard link استفاده می شود. هارد لینک با دستور ln که مخفف link است ساخته میشود.
ویژگی های هارد لینک
- هر تغییری که بر روی Hard Link یا فایل اصلی انجام شود بر روی هر دو اعمال می گردد.
- اگر اسم فایل اصلی را کند Hard Link (با توجه به اینکه به ماهیت Inode اشاره دارد) تغییر نخواهد کرد.
- یک Hard Link تنها در همان سیستم فایلی کار میکند که فایل اصلی در آن موجود است.
- با هارد لینک در لینوکس نمیتوان بین دایرکتوریها پیوند ایجاد کرد.
نحوه ساخت hard link با یک مثال
یک سناریو عملی را بررسی خواهیم کرد.برای مثال در فولدری بنام folder1 اقدام به ایجاد یک فایل بنام orginalfile می نماییم.با دستور nano در این فایل عبارت هایی را وارد و ذخیره می کنیم.
Mkdir folder1
Cd folder1
Touch orginalfile
Nano orginalfile
حال به مسیر دیگری می رویم و یک فولدر دیگری بنام folder2 ایجاد می کنیم و داخل آن با دستور ln در لینوکس که برای ایجاد هارد لینک ها می باشد فایل جدیدی بنام linkfile را به orginalfile در مسیر قبلی ساخته شده لینک می کنیم.
Cd /
Mkdir folder2
Cd folder2
Ln /folder1/orginalfile /folder2/linkfile
به همین راحتی توانستیم اقدام به ساخت یک لینک از نوع Hard نماییم. با گرفتن لیست از هر دو فایل مورد نظر از طریق دستور زیر میشخص می شود که inode number هر دو فایل یکی است. این بدان معنی و مفهوم است که از دید سیستم این دو فایل در حقیقت یک فایل هستند اما با دو نام متفاوت. هر تغییری که در فایل orginalfile انجام شود این تغییر در فایل linkfile نیز اعمال خواهد شد و بالعکس.
در صورتی که تاریخ آخرین به روز رسانی هر کدام از فایل ها تغییر کند این تغییر بر دیگری نیز اعمال خواهد شد. در صورتی که permission مربوط به هرکدام از فایل ها تغییر کند سطح دسترسی فایل دیگر نیز به همان صورت تغییر خواهد یافت.نتیجه گیری نهایی اینکه هر تغییری که در یکی از فایل ها انجام شود آن تغییر در فایل دوم نیز اعمال خواهد شد.
در این نوع از لینک دهی در صورتی که فایل اصلی (اورجینال) اولیه حذف گردد می توانید از طریق مسیر دوم مجدد به فایل دسترسی داشته باشید در حقیقت می توان به عنوان یک mirror و یا بک آپ فایل در نظر گرفت. اما در نظر داشته باشید این نوع لینک دهی دارای محدویت های اساسی می باشد که در زیر به بررسی این محدودیت ها می پردازیم.
محدودیت های لینکدهی با hard link
۱.در صورتی که فایل اصلی در یک پارتیشن دیگری باشد و شما بخواهید hard link این فایل را در پارتیشن مجزای دیگری داشته باشید امکان پذیر نمی باشد.علت این مورد به دلیل تفاوت file system های مختص به هر پارتیشن می باشد.پس نتیجه گیری ما از این محدودیت این است که Hard Link در لینوکس قابلیت cross partitioning نداشته و هر دو فایل یعنی فایل اصلی و hardlink ان حتما بایستی داخل یک پارتیشن باشند
۲.hardlink فقط برروی فایل اعمال می شود و شما نمی توانید این سناریو را در دایرکتوری ها نیز داشته باشید.اساسا یک دایرکتوری با دو نام متفاوت در directory tree لینوکس نمی توان داشت .پس نتیجه گیری مهم این شد که ما تنها و فقط از file ها می توانیم hardlink ایجاد کنیم
- can’t cross the file system boundaries
- can’t link directories
- has the same inodes number and permissions of original file
- permissions will be updated if we change the permissions of source file
- has the actual contents of original file, so that you still can view the contents, even if the original file moved or removed
در ادامه یک مثال و نمونه عملی از Hard Link در لینوکس را بررسی خواهیم کرد
echo “Welcome to OSTechNix” >source.file
cat source.file
Welcome to OSTechNix
ln source.file hardlink.file
cat hardlink.file
ls –lia
Sample output:
total 16
۱۵۷۴۵۳۲۶ drwxr-xr-x 2 sk users 4096 Dec 13 15:22 .
۱۵۷۲۸۶۴۲ drwx—— ۴۹ sk users 4096 Dec 13 14:50 ..
۱۵۷۴۵۵۵۵ -rw-r–r– ۲ sk users 21 Dec 13 15:20 hardlink.file
۱۵۷۴۵۵۵۵ -rw-r–r– ۲ sk users 21 Dec 13 15:20 source.file
rm source.file
cat hardlink.file
soft link در لینوکس
سافت لینک در لینوکس مفهومی شبیه مفهوم shortcut در ویندوز را دارد. به soft link سمبولیک لینک هم می گویند. با ساخت این نوع از لینک، یک فایل جدید ساخته می شود که در آن مسیر فایل اول قرار دارد.
تفاوت hard link و soft link
- soft link برخلاف hard link (که یک نسخه کپی از فایل اصلی است) پیوند واقعی به فایل اصلی ایجاد می کند.
- اگر فایل اصلی حذف شود، فایل ایجاد شده از طریق Soft Link چون به یک فایل غیر موجود اشاره میکند دیگر ارزشی ندارد.
- در سافت لینک تنها تنها مسیر فایل اصلی نگهداری می شود و از محتوای آن خبری نیست.