در علوم رایانه، لینک نرم (به انگلیسی: soft link) یا لینک نمادین (به انگلیسی: symbolic link) (که به اختصار symlink) هم نوشته می‌شود، یک فایل مخصوص و ویژه است که دربرگیرنده ارجاعی به فایل یا دایرکتوری دیگر در غالب یک مسیر مطلق یا مسیر نسبی است. به عبارتی دیگر، لینک‌های نرم فایل‌های هستند که به عنوان اشاره‌گر به فایل‌های دیگر عمل می‌کنند.[۱] لینک‌های نرم محدودیت‌های لینک‌های سخت را نداشته و بنابراین آنها می‌توانند به دایرکتوری‌ها و حتی فایل‌های موجود در یک سیستم فایل دیگر رجوع کنند. لینک‌های نرم در اکثر سیستم‌عامل‌های سازگار با استاندارد پازیکس از جمله فری‌بی‌اس‌دی و گنو/لینوکس وسیستم‌عامل مک اواس و همچنین سیستم‌عامل‌های ویندوز ویستا و ویندوز ۷ پشتیبانی می‌شوند. سیستم‌عامل‌های قدیمی مانند ویندوز اکس‌پی و ویندوز ۲۰۰۰ هم تا حدی از این مفهوم پشتیبانی می‌کنند و نوع خاصی فایل به نام فایل میانبر در این سیستم‌عامل‌ها وجود دارد.

لینک‌های نرم حتی می‌توانند به لینک‌های نرم دیگر اشاره کنند. در این مورد، لینک‌ها به صورت پی در پی دنبال می‌شوند تا بالاخره شیئی که خودش لینک نرم نیست پیدا شود. اگر چنین شیئی پیدا نشود، یک حلقه تشخیص داده می‌شود و دنبال کردن لینک‌ها خاتمه می‌یابد. برای اینکه یک حلقه به راحتی تشخیص داده شود، معمولاً محدودیتی بر روی تعداد لینک‌های پی‌درپی ایجاد می‌شود. مثلاً اگر بیشترین اندازه لینک‌های پی‌درپی ۲۵۶ باشد. می‌توان ۲۵۵ لینک پی‌درپی به یک فایل ایجاد کرد. اگر تعداد لینک‌ها از ۲۵۶ بیشتر شد، حلقه تشخیص داده شده و پیغام خطا صادر می‌شود.

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

ایجاد لینک‌ها ویرایش

در سیستم‌عامل‌های سازگار با استاندارد پازیکس می‌توان با استفاده از دستور ‎ln(1)‎ لینک نرمی به یک فایل خاص ایجاد کرد.[۲] قالب کلی انجام این کار به شکل زیر است:

ln -s source_file dest_file

فراخوان سیستمی ‎symlink(2)‎ ویرایش

در سیستم‌عامل‌های مبتنی بر استاندارد پازیکس می‌توان با استفاده از فراخوان سیستمی ‎symlink(2)‎ اقدام به ایجاد یک لینک نرم کرد.[۳] این فراخوان سیستمی در فایل سرآیند unistd.h تعریف شده است. نحوه اعلان این فراخوان سیستمی بدین شکل است:

 int symlink(const char *name1, const char *name2);

لینک نرمی که آدرس آن در name۲ قرار دارد به فایلی که توسط name۱ اشاره می‌شود ایجاد خواهد شد. در صورت موفقیت مقدار ۰ و در صورت شکست مقدار ‎-۱ برگردانده شده و متغیر سراسری errno با پیغام خطای مناسب مقدار دهی خواهد شد.

منابع ویرایش

ویکی انگلیسی