لینوکسی بشیم: هارد لینک و سافت لینک؛ چی و چرا؟

مقدمه

در این قسمت می خوایم ببینیم هارد لینک و سافت لینک چی هستن. این دو تا روش‌هایی هستن که می‌تونیم باهاشون به یک فایل ارجاع بدیم. مطلب این دفعه می‌تونه به درد هر کسی که در لینوکس کار می‌کنه بخوره. فرقی نداره برنامه‌نویس باشین یا سیس ادمین یا کاربر معمولی.

برای این نوشته فرض میشه که شما با فایل سیستم لینوکس آشنایی دارید و می‌تونید با فایل‌ها در خط فرمان کار کنید. اگر این شرایط رو ندارید می‌تونید آموزش‌های قبلی رو ببینید.

هارد و سافت لینک هر دو از روی یه فایل ساخته میشن. یعنی یک فایل اول باید باشه تا این دو تا از روش ایجاد بشن. حالا ببینیم چی هستن.


هارد لینک

وقتی هارد لینک از روی فایل ایجاد میشه ظاهرا یک فایل جدید در فایل سیستم به وجود میاد ولی در اصل این فایل جدید به همون محتوای قبلی روی دیسک اشاره داره و چیز جدیدی به وجود نیومده. یعنی برای سیستم عامل این دو تا یک چیز هستن. در سیستم عامل مفهومی به نام inode داریم که یه فایل با اون معنی پیدا میکنه و همه اطلاعاتش تو اونه. داخل inode یه عدد هست که بهش شماره inode می‌گیم و برای هر فایل در فایل‌ سیستم یکتاست. وقتی از روی فایل هارد لینک درست می‌کنیم شماره inode فایل جدید با قبلی یکیه. حرف زیاد زدم بیاید عملی ببینیم:

با دستور ln که مخفف link هست هارد لینک ساخته میشه. جلوش اون فایلی که وجود داره و بعدش اسم فایل جدید رو میدم. بعدش می‌بینیم یه فایل با اسم داده شده به وجود میاد. قبلا گفته بودم وقتی ls -l می‌گیریم ستون دوم یه عدده که تعداد هارد لینک‌های فایل رو نشون میده. اینجا اون عدد برای جفتشون ۲ شده. قبلش ۱ بود. اینم بگم که اینجا ترتیب مهم نیست و هر دو در سیستم عامل به یه چشم دیده میشن. حالا از کجا ببینم شماره inode این دو تا رو؟ از آپشن i در دستور ls کمک بگیریم:

می‌بینید یه شماره بزرگ میاد که همون شماره inode هست. برای فایل اول و هارد لینکی که ساختیم این عدد یکی هست و نشان از این داره که این دو تا یکی‌ان. محتوای جفتشم ببینیم که مطمئن شیم:

تغییرم بدم جفتش تغییر می‌کنه:

حالا اگه فایل اول رو حذف کنم چی میشه؟ هیچی نمیشه:

چون فایل دوم دقیقا به همون جای دیسک که فایل اول بود اشاره داره، ما هنوز به محتوای فایل دسترسی داریم.

از لحاظ کاربردی زیاد ندیدم از هارد لینک استفاده کنن. یه نکته مثبتی داره و اونم اینه که بدون گرفتن حجم اضافه دو تا فایل به یه محتوا اشاره دارن. مثلا اگه فایلی تو یه مسیر دور و دراز بود و خواستین بهش دسترسی داشته باشین میتونین تو یه جای نزدیک ازش هارد لینک بسازین. اگه کاربردی از هارد لینک میشناسین در قسمت نظرات بگین تا استفاده کنیم.


سافت لینک

بحث دوم سافت لینک یا سمبولیک لینک هست. برای ساخت این هم مثل قبلی باید اول یه فایل باشه. با ساختن سافت لینک واقعا یه فایل جدید ساخته میشه. توی این فایل مسیر فایل اول قرار میگیره. تنها محتوای سافت لینک همینه‌. همون shortcut خودمون هست. بیاید یه دونه بسازیم:

مثل قبلیه فقط آپشن s رو اضافه کردم. می‌بینیم که فایل جدید ساخته شده. همچنین تو ستون اول اون قسمت نوع فایل l نوشته. این یکی از انواع فایل هست که در لینوکس داریم. پس یادمون باشه l به معنی سافت لینکه. علاوه بر این فایل اصلی که بهش اشاره میکنه رو هم تو خروجی دستور می‌بینیم. ستون اندازه فایل رو هم دقت کنید. اندازه فایل سافت لینک از کجا میاد؟ اینو جوابشو قبل این گفتم یه جورایی. اگر با ستون‌هایی که در خروجی می‌بینیم آشنایی ندارید این قسمت رو بخونید.

هر کاری با این سافت لینک کنیم سر اون فایل اصلیه میاد. بیاید یه نمونه نوشتن تو فایل رو ببینیم:

تو سافت لینک نوشتم ولی تو فایل اصلی نوشته شد. اندازه سافت لینک هم تغییری نمی‌کنه.

حالا اگه فایل اصلی حذف شه چی میشه:

می‌بینید که دیگه سافت لینک بی‌خاصیت شده و کار نمی‌کنه. چون به چیزی اشاره داره که وجود نداره.

سافت لینک خیلی کاربردی تره. وقتی می‌خوایم از دست ورژن‌های مختلف یه کتابخونه یا برنامه راحت شیم ازش استفاده می‌کنیم. مثلا من پایتون ۳ دارم ولی زیرنسخه‌های زیادی داره. زیرنسخه‌های ۳.۵ و ۳.۶ رو دارم و احتمالا بعدا ۳.۷ هم نصب کنم ولی نمیخوام تو برنامه‌ام درگیر این بشم که چه ورژنیه. فقط مهمه که پایتون ۳ باشه. پس در جایی که این زیرنسخه‌ها هستن یه سافت لینک به نام python3 درست می‌کنم و به جدیدترین نسخه پایتون اشاره‌اش میدم:

اینجا تمام فایل‌های پوشه رو که python3 دارن لیست کردم تا ببینم چه فایلایی موجوده. می‌بینیم که python3 در اصل سافت لینکه به جدیدترین نسخه. اگه آپدیت کنم پایتون رو فقط این لینک عوض میشه و تو برنامه‌هایی که از پایتون ۳ استفاده کردم تغییری لازم نیست بدم. خیلی از کتابخونه‌ها هم هستن که اینطوری ان. با این کار دیگه تغییر نسخه‌ها تاثیری روی برنامه‌هام نداره. اگه کاربرد دیگه‌ای می‌شناسید در قسمت نظرات بگید.


جمع بندی

در این قسمت با مفهوم سافت لینک و هارد لینم آشنا شدیم. هارد لینک دقیقا همون فایل قبلی هست و به همون جای قبلی در دیسک اشاره می‌کنه. سافت لینک ولی مسیر فایل اصلی رو در خودش داره و یه فایل جدید هست.

این قسمت هم تموم شد. امیدوارم استفاده کرده باشید. اگر سوال یا نظری دارید این پایین بگید.

قسمت قبلی