یک  symbolic link یا soft link، یک پیوند واقعی به فایل اصلی است؛ در حالی که hard link، یک نسخه کپی از فایل اصلی است.

 

یکی از تفاوت‌های Soft Link و Hard Link این است که در صورتی که فایل اصلی حذف شود، فایل ایجاد شده از طریق Soft Link هیچ ارزشی ندارد؛ زیرا به یک فایل غیر موجود اشاره می‌کند. اما در مورد فایل‌های ایجاد شده از طریق Hard Link، کاملاً برعکس است. بدین معنی که حتی اگر فایل اصلی حذف شود، فایل ایجاد شده، همچنان داده‌های فایل اصلی را دارد. زیرا Hard Link به عنوان یک کپی از فایل اصلی عمل می‌نماید.

 

این مطلب نیز ممکن است برای شما مفید باشد: آموزش حذف Symbolic Link در لینوکس

 

به طور خلاصه،

یک Soft Link:

می‌تواند از سیستم فایل عبور کند،

به شما امکان می‌دهد بین دایرکتوری‌ها پیوند برقرار کنید،

تعداد inode و مجوزهای فایل متفاوتی نسبت به فایل اصلی دارد،

مجوزها در آن به روز نمی‌شوند،

تنها مسیر فایل اصلی و نه محتویات آن را نگهداری می‌کند.

 

و یک Hard Link

نمی‌تواند از مرزهای سیستم فایل عبور کند (به عنوان مثال، یک Hard Link تنها می‌تواند در همان سیستم فایلی کار کند که فایل اصلی در آن وجود دارد)،

با استفاده از آن نمی‌توان دایرکتوری‌ها را پیوند داد،

شماره inode و مجوزهای یکسانی با فایل منبع دارند،

با تغییر مجوزهای فایل منبع، مجوزها در آن به روز می‌شوند،

دارای محتوای واقعی فایل اصلی است، به طوری که پس از انتقال یا حذف فایل منبع، محتویات آن همچنان قابل مشاهده است.

 

در ادامه برای آشنایی بیشتر، مثال‌های عملی ارائه شده است.

 

ایجاد Soft Link یا Symbolic Link

یک دایرکتوری خالی به نام "test" ایجاد کنید.

$ mkdir test

به آن دایرکتوری بروید:

$ cd test

اکنون، فایل جدیدی را به نام Source.file و با داده‌هایی مانند زیر ایجاد نمایید.

$ echo "Welcome to OSTechNix" >source.file

بیایید داده‌های source.file را مشاهده کنیم.

$ cat source.file
Welcome to OSTechNix

تا اینجا، فایل Source.file ایجاد شد.

 

اکنون، یک Symbolic Link یا Soft Link به source.file ایجاد کنید.

برای انجام این کار، دستور زیر را اجرا نمایید:

$ ln -s source.file softlink.file

بیایید داده‌های Source.file و softlink.file را با هم مقایسه کنیم.

$ cat source.file 
Welcome to OSTechNix
$ cat softlink.file 
Welcome to OSTechNix

 

همانطور که در خروجی بالا مشاهده می‌کنید، softlink.file همان داده‌های source.file را نشان می‌دهد.

بیایید inodeها و مجوزهای softlink.file و Source.file را بررسی کنیم.

$ ls -lia

با اجرای دستور بالا، خروجی به صورت زیر خواهد بود:

total 12
11665675 drwxrwxr-x  2 sk sk 4096 Oct 17 11:39 .
 4325378 drwxr-xr-x 37 sk sk 4096 Oct 17 11:39 ..
11665731 lrwxrwxrwx  1 sk sk   11 Oct 17 11:39 softlink.file -> source.file
11665692 -rw-rw-r--  1 sk sk   21 Oct 17 11:39 source.file

 

همانطور که در تصویر بالا مشاهده می‌نمایید، تعداد inodeها در این دو فایل، بصورت 11665731 و 11665692 و مجوزهای فایل بصورت  lrwxrwxrwx و --rw-rw-r- هستند که با یکدیگر متفاوت است؛ این در حالی است که فایل softlink.file و source.file دارای محتویات مشابهی هستند. بنابراین، مشخص است که لینک نرم، تعداد inodها و مجوزهای فایل اصلی را دارا نمی‌باشد.

اکنون، فایل اصلی source.file را حذف کرده و ببینید چه اتفاقی می‌افتد.

$ rm source.file

محتویات softlink.file را با استفاده از دستور زیر بررسی کنید:

$ cat softlink.file

با اجرای دستور بالا، خروجی به صورت زیر خواهد بود:

cat: softlink.file: No such file or directory

 

همانطور که در بالا مشاهده می‌کنید، پس از حذف فایل اصلی source.file، دیگر فایل یا دایرکتوری به نام softlink.file وجود ندارد. بنابراین، اکنون می‌توان درک کرد که Soft Link تنها پیوندی است که به فایل اصلی اشاره دارد. به عبارت دیگر Soft Link مانند میانبر (shortcut) یک فایل عمل می‌کند و اگر فایلی را حذف نمایید، میانبر آن غیر قابل استفاده است.

ولیکن همانطور که می‌دانید در صورت حذف Soft Link، فایل اصلی هنوز در دسترس خواهد بود.

 

ایجاد Hard Link

مطابق شکل زیر، فایلی با نام Source.file ایجاد کنید.

$ echo "Welcome to OSTechNix" >source.file

بیایید محتویات فایل را مشاهده کنیم.

$ cat source.file
Welcome to OSTechNix

همانطور که می‌بینید فایل Source.file ایجاد شده است.

 

اکنون Hard Link مربوط به source.file را مانند شکل زیر ایجاد نمایید.

$ ln source.file hardlink.file

 

محتوای hardlink.file را بررسی کنید.

$ cat hardlink.file
Welcome to OSTechNix

همانطور که مشاهده می‌کنید hardlink.file و source.file داده‌های مشابهی را دارا هستند.

 

بیایید تعدادinodeها و مجوزهای فایل hardlink.file و Source.file را بررسی کنیم.

$ ls -lia

با اجرای دستور بالا، خروجی به صورت زیر خواهد بود:

total 16
11665675 drwxrwxr-x 2 sk sk 4096 Oct 17 11:58 .
4325378 drwxr-xr-x 37 sk sk 4096 Oct 17 11:39 ..
11665692 -rw-rw-r-- 2 sk sk 21 Oct 17 11:57 hardlink.file
11665692 -rw-rw-r-- 2 sk sk 21 Oct 17 11:57 source.file

 

همانطور که مشاهده می‌کنید، هر دو فایل hardlink.file و Source.file دارای تعداد inodeهای 11665692 و مجوزهای فایل --rw-rw-r- هستند. بنابراین، مشخص است که فایل Hard Link تعداد inodeها و مجوزهای فایل اصلی را دارا است.

توجه: اگر مجوزها را در Source.file تغییر دهید، همان مجوزها برای hardlink.file نیز اعمال خواهد شد.

 

اکنون، فایل اصلی source.file را حذف کرده و ببینید چه اتفاقی می‌افتد.

$ rm source.file

محتویات hardlink.file را با استفاده از دستور زیر بررسی کنید:

$ cat hardlink.file

با اجرای دستور بالا، خروجی به صورت زیر خواهد بود:

 

همانطور که در بالا مشاهده می‌کنید، حتی اگر فایل منبع حذف شود، باز هم می‌توانید محتوای hardlink.file را مشاهده نمایید.

اکنون این سوال به ذهن می‌رسد که تفاوت بین Hard Link و فایل کپی شده معمولی چیست؟ چه نیازی به ایجاد Hard Link است در حالی که می‌توان فایل اصلی را به راحتی کپی کرد؟

در جواب این سوال‌ها باید گفت که ایجاد Hard Link به یک فایل با کپی کردن آن متفاوت است.

اگر فایلی را کپی کنید، تنها محتوا را کپی می‌کند. بنابراین، اگر محتوای یکی از فایل‌ها (فایل اصلی یا فایل کپی شده) را تغییر دهید، هیچ تأثیری روی فایل دیگر ندارد. اما اگر برروی یک فایل، Hard Link ایجاد کرده و محتوای هر یک از فایل‌ها را تغییر دهید؛ آن تغییر، در هر دو فایل قابل مشاهده است.

 

بیایید نگاهی به source.file بیندازیم.

$ cat source.file 
Welcome to OSTechNix

فایل منبع دارای یک خط اطلاعات Welcome to OSTechNix است.

یک خط جدید به source.file یا hardlink.file اضافه نمایید. به عنوان مثال، Welcome to Linux

$ echo "Welcome to Linux" >>source.file

اکنون، محتویات هر دو فایل را بررسی کنید.

$ cat hardlink.file 
Welcome to OSTechNix
Welcome to Linux
$ cat source.file 
Welcome to OSTechNix
Welcome to Linux

 

همانطور که مشاهده می‌نمایید، تغییراتی که در Source.file ایجاد کردیم، در هر دو فایل اعمال شده است. بنابراین، هردو فایل (فایل منبع و فایل حاصل از Hard Link) همواره با یکدیگر متقارن هستند. به عبارت دیگر، هر تغییری که در هر یک از فایل‌ها اعمال کنید، روی فایل دیگر منعکس می‌شود. این در حالی است که اگر به طور معمول فایلی را کپی کنید، با تغییر هیچ یک از فایل‌ها، هیچ تغییری در فایل دیگر اعمال نخواهد شد.

 

برای اطلاعات بیشتر در مورد دستور ln، صفحات man این دستور را بررسی نمایید.

$ man ln

 

 

 

منبع:

ostechnix