ابزار کاربر

ابزار سایت


terminal:l:symbolic-links

دستور ln (لینک ها در لینوکس)

در کل لینک ها یک نقظه اشاره به نقشه ای از یک سیستم فایل میسازند . این می تواند برای شما بسیار مفید باشد شما با ساخت یک لینک به یک دایرکتوری دیگر احتیاجی به تایپ کامل مسیر آن ندارید و یا لازم نیست در مدیر فایل گرافیکی خود دائم به بالا و پایین بروید و کافیست یکبار بر روی لینک خود کلیک کنید. شما میتوانید لینک ها را همان Shortcut ها (میانبرها) در مایکروسافت ویندوز در نظر بگیرید که البته چند تقاوت نیز با یکدیگر دارند.
همانطور که اشاره شد لینک ها در لینوکس همان مفهوم Shortcut ویندوز هستند. در خروجی دستور ls لینکها با حرف l در اول خروجی دستور نشان داده میشوند. دو نوع لینک soft و hard وجود دارند که تفاوتهایی با هم دارند. هر دایرکتوری در لینوکس inode خاص خود را دارد و لینک ها از inode برای پیدا کردن فایل اصلی استفاده میکنند.
دستور ln برای ایجاد اینکهای soft و hard استفاده میشود. هر فایل لینوکسی از دو بخش داده ها و نام فایل تشکیل شده است داده ها مرتبط با inode هستند و inode نکاشت اینکه داده در کجا هستند را بر عهده دارد.
برای درک بهتر داده ها در غالب فایلها ذخیره میشوند و این داده ها روی هارد قرار میگیرند وقتی دستور cat file را اجرا میکنید لینوکس از inode برای پیدا کردن محل و آدرس داده ها روی هارد استفاده میکند و محتوای آن را نشان میدهد. نام فایل مرتبط با inode number میباشد. البته یک inode میتواند به دو نام متفاوت هم اشاره کند.

یک hard link یک ورودی دایرکتوری است که به محل فیزیکی یک فایل اشاره دارد. 1) در حقیقت ما تنها یک فایل داریم اما ورودی ۲ یا بیشتر دایرکتوری به محل فیزیکی آن بر روی دیسک سخت اشاره دارند. برای ایجاد یک hard link در خط فرمان از دستور ln استفاده میشود. این دستور بطور پیش فرض یک hard link میسازد. برای نمونه من در اینجا یک hard link به فایل art.txt در دایرکتوری خانگی ام می سازم.

ln /tmp/art.txt ~/Pic/art.txt

در این نمونه یک ورودی در دایرکتوی /Pic/~ ایجاد شده که به محل فیزیکی فایل art.txt بر روی دیسک سخت اشاره میکند. خوب شما میتوانید با این فایل کار کنید برای نمونه اگر دستور ls -l را وارد کنیم تعداد hard link آن (که بلافاصله پس از مجور های دسترسی آن نمایش داده میشود) برابر ۲ یعنی ۲ دایرکتوری به این نقطه فیزیکی 2) از هارد اشاره دارند
اگر من فایل اصلی یعنی tmp/art.txt/ را پاک کنم ورودی دایرکتوری پاک خواهد شد و تعداد hard link ها ۱ خواهد بود و امام فایل همچنان باقی خواهد بود! چرا که هنوز یک hard link به آن وجود دارد و فایل هرگز پاک نمیشود مگر آنکه تعداد hard link های آن به صفر برسد.

باید توجه داشته باشید که hard link برای لینک دادن به دایرکتوری ها و به فایلی که در فایل سیستمی بر روی کامپیوتر دیگری است نمیتوان استفاده کرد.

لینک های نرم یا soft link ها که با نام های symbolic links یا symlinks نیز شناخته میشوند. بسیار شبیه shortcut های ویندوز هستند در soft link ها بر خلاف hard link ها هر لینک آدرس سخت افزاری3) مخصوص به خودشان را دارند. ایم لینکها تنها یک فایل هستند که میتوانند به یک فایل دیگر اشاره کنند. برای ایجاد این لینکها از گزینه s- به همراه دستور ln استفاده میشود

ln -s /tmp/art.txt ~/Pic/art.txt

اگر شما از دستور ls -l برای دیدن این فایل استفاده کنید به نتیجه ای مانند زیر خواهید رسید.

lrwxrwxrwx. 1 phoenix phoenix 32 Jan 17 18:24 art.txt -> /tmp/art.txt

همانطور که مشاهده میکنید بیت اول حرف l میباشد به معنی Link و بعد از پایان نام فایل بعد از یک «←« آدرس فایل اصلی آمده است.

تفاوت بین انواع لینک ها

لینک های hard

  • با لینکهای Hard نمیتوان دایرکتوری ها را لینک کرد.
  • فقط در همان سیستم فایلی که هستند در دسترس هستند و در صورت انتقال آنها به یک سیستم فایل دیگر (پارتیشن دیگر) فایل استفاده نیستند.
  • اگر فایل اصلی پاک شود باز هم به آخرین محتوای فایل اصلی دسترسی داریم.
  • مجوز های دسترسی تمام لینکها مانند فایل اصلی است و شما برای تغییر مجوز های دسترسی میبایست از فایل اصلی اقدام کنید.

لینک های soft

  • میتوان یک inode را به چندین نام فایل اختصاص داد.
  • برای لینک دادن میان دایرکتوری ها استفاده میشوند.
  • میتوان در دیگر سیستم فایل ها هم استفاده کرد.
  • اگر فایل اصلی پاک شوند دیگر از طریق لینک به فایل اصلی دسترسی نداریم.
  • سایز فایلها به شما دروغ میگویند! به این دلیل که این لینک ها خود یک فایل هستند با حجمی بسیار کوچک در صورتیکه hard link ها به دلیل اشاره مستقیم به فایل اصلی حجم فایل اصلی را نمایش میدهند.
  • زمان اصلاح یا modification ی که در لینکهای نرم نمایش داده میشود مربوط به اصلاحاتی است که شما بر روی این لینک انجام داده اید اما در hard link این زمان همان زمان دقیق اصلاحات فایل اصلی است.
  • نام فایل اصلی بعد از یک علامت میآید و بر خلاف hard link اگر فایل اصلی را پاک کنید این لینک به یک لینک خراب یا به اصطلاح درست به لینک یتیم (orphan) تبدیل میشود.
  • همانطور که بالاتر اشاره شد برای دایرکتوری های و فایل سیستم هایی که از راه دور با آنها کار میکنید و یا به هر طریقی بر روی کامپیوتر شما نیستند نمیتوانید از لینکهای نرم و سخت استفاده کنید.

چونکه inode فایل اصلی و hard link با هم یکی هستند ولی inode فایل اصلی و soft link متفاوت هستند برای درک بهتر یک دایرکتوری به نام test بسازید و سپس یک فایل را با دومین دستور در آن ایجاد کنید و محتوایی را در آن بنویسید.

mkdir test
cd test
echo "in file baray test inode hast" > file

حالا با دستور زیر یک لینک سخت بسازید

ln file file2

و با دستور زیر یک لینک نرم بسازید با استفاده از گزینه s

ln -s file file3

حالا دستور ls -li را اجرا کنید تا بتوانید inode ها را مقایسه نمایید در خروجی مشاهده میکنید که inode فایل اصلی و لیسنک سخت با هم یکی هستند ولی inode فایل اصلی و لینک نرم متفاوتند.

-> $ls -li
total 8
9445379 -rw-rw-r--. 2 phoenix phoenix 28 Jan 17 20:06 file
9445379 -rw-rw-r--. 2 phoenix phoenix 28 Jan 17 20:06 file2
9445380 lrwxrwxrwx. 1 phoenix phoenix  4 Jan 17 20:06 file3 -> file

حالا اگر با دستور cat محتوای هر یک از فایلها را بخوانید خواهید دید که خروجی همه یکی هستند اما اگر فایل اصلی را پاک کنید دیگر از طریق لینک نرم نیمتوانید محتوای فایل را بخوانید.

1)
به محل فیزیکی یک فایل inode میگویند
2) , 3)
inode
terminal/l/symbolic-links.txt · آخرین ویرایش: 2019/01/17 22:40 توسط phoenix