ابزار کاربر

ابزار سایت


terminal:l:symbolic-links

تفاوت‌ها

تفاوت دو نسخهٔ متفاوت از صفحه را مشاهده می‌کنید.

پیوند به صفحه‌ی تفاوت‌ها

نگارش بعد
نگارش قبل
terminal:l:symbolic-links [2019/01/14 19:50] – ایجاد شد phoenixterminal:l:symbolic-links [2019/01/17 22:40] (فعلی) – [لینک های soft] phoenix
خط 1: خط 1:
 ======  دستور ln (لینک ها در لینوکس) ====== ======  دستور ln (لینک ها در لینوکس) ======
 ===== مفهوم link در لینوکس چیست؟ ===== ===== مفهوم link در لینوکس چیست؟ =====
-در کل لینک ها یک نقظه اشاره به نقشه ای از یک سیستم فایل میسازند . این می تواند برای شما بسیار مفید باشد شما با ساخت یک لینک به یک دایرکتوری دیگر احتیاجی به تایپ کامل مسیر آن ندارید و یا لازم نیست در مدیر فایل گرافیکی خود دائم به بالا و پایین بروید و کافیست یکبار بر روی لینک خود کلیک کنید. شما میتوانید لینک ها را همان Shortcut ها (میانبرها) در مایکروسافت ویندوز در نظر بگیرید که البته چند تقاوت نیز با یکدیگر دارند. \\+در کل لینک ها یک نقظه اشاره به نقشه ای از یک سیستم فایل میسازند . این می تواند برای شما بسیار مفید باشد شما با ساخت یک لینک به یک دایرکتوری دیگر احتیاجی به تایپ کامل مسیر آن ندارید و یا لازم نیست در مدیر فایل گرافیکی خود دائم به بالا و پایین بروید و کافیست یکبار بر روی لینک خود کلیک کنید. شما میتوانید لینک ها را همان **Shortcut** ها (میانبرها) در مایکروسافت ویندوز در نظر بگیرید که البته چند تقاوت نیز با یکدیگر دارند. \\
 همانطور که اشاره شد لینک ها در لینوکس همان مفهوم Shortcut ویندوز هستند. در خروجی [[terminal:l:ls_command_list_file_and_directory_names_and_attributes|دستور ls]] لینکها با حرف ''l'' در اول خروجی دستور نشان داده میشوند. دو نوع لینک **soft** و **hard** وجود دارند که تفاوتهایی با هم دارند. هر دایرکتوری در لینوکس **inode** خاص خود را دارد و لینک ها از **inode** برای پیدا کردن فایل اصلی استفاده میکنند. \\  همانطور که اشاره شد لینک ها در لینوکس همان مفهوم Shortcut ویندوز هستند. در خروجی [[terminal:l:ls_command_list_file_and_directory_names_and_attributes|دستور ls]] لینکها با حرف ''l'' در اول خروجی دستور نشان داده میشوند. دو نوع لینک **soft** و **hard** وجود دارند که تفاوتهایی با هم دارند. هر دایرکتوری در لینوکس **inode** خاص خود را دارد و لینک ها از **inode** برای پیدا کردن فایل اصلی استفاده میکنند. \\ 
-دستور ln برای ایجاد اینکهای soft و hard استفاده میشود. هر فایل لینوکسی از دو بخش داده ها و نام فایل تشکیل شده است داده ها مرتبط با **inode** هستند و **inode** نکاشت اینکه داده در کجا هستند را بر عهده دارد.+دستور ln برای ایجاد اینکهای soft و hard استفاده میشود. هر فایل لینوکسی از دو بخش داده ها و نام فایل تشکیل شده است داده ها مرتبط با **inode** هستند و **inode** نکاشت اینکه داده در کجا هستند را بر عهده دارد. \\ 
 +برای درک بهتر داده ها در غالب فایلها ذخیره میشوند و این داده ها روی هارد قرار میگیرند وقتی [[terminal:c:linux_cat_command_usage_with_examples|دستور cat file]] را اجرا میکنید لینوکس از **inode** برای پیدا کردن محل و آدرس داده ها روی هارد استفاده میکند و محتوای آن را نشان میدهد. نام فایل مرتبط با ''inode number'' میباشد. البته یک **inode** میتواند به دو نام متفاوت هم اشاره کند. 
 +===== لینک های سخت یا hard link ها ===== 
 +یک **hard link** یک ورودی دایرکتوری است که به محل فیزیکی یک فایل اشاره دارد. ((به محل فیزیکی یک فایل **inode** میگویند)) در حقیقت ما تنها یک فایل داریم اما ورودی ۲ یا بیشتر دایرکتوری به محل فیزیکی آن بر روی دیسک سخت اشاره دارند. برای ایجاد یک **hard link** در خط فرمان از دستور ln استفاده میشود. این دستور بطور پیش فرض یک **hard link** میسازد. برای نمونه من در اینجا یک **hard link** به فایل **art.txt** در دایرکتوری خانگی ام می سازم. 
 + 
 +<code;bash;> 
 +ln /tmp/art.txt ~/Pic/art.txt 
 +</code>  
 +در این نمونه یک ورودی در دایرکتوی ''/Pic/~''  ایجاد شده که به محل فیزیکی فایل ''art.txt'' بر روی دیسک سخت اشاره میکند. خوب شما میتوانید با این فایل کار کنید برای نمونه اگر [[terminal:l:ls_command_list_file_and_directory_names_and_attributes|دستور ls -l]] را وارد کنیم تعداد **hard link** آن (که بلافاصله پس از مجور های دسترسی آن نمایش داده میشود) برابر ۲ یعنی ۲ دایرکتوری به این نقطه فیزیکی ((inode)) از هارد اشاره دارند \\ 
 +اگر من فایل اصلی یعنی ''tmp/art.txt/'' را پاک کنم ورودی دایرکتوری پاک خواهد شد و تعداد **hard link** ها ۱ خواهد بود و امام فایل همچنان باقی خواهد بود! چرا که هنوز یک **hard link** به آن وجود دارد و فایل هرگز پاک نمیشود مگر آنکه تعداد **hard link** های آن به صفر برسد. 
 +<WRAP center round tip 60%> 
 +باید توجه داشته باشید که **hard link** برای لینک دادن به دایرکتوری ها و به فایلی که در فایل سیستمی بر روی کامپیوتر دیگری است نمیتوان استفاده کرد. 
 +</WRAP> 
 +===== لینک های نرم یا soft link ها  ===== 
 +لینک های نرم یا **soft link**  ها که با نام های **symbolic links** یا **symlinks** نیز شناخته میشوند. بسیار شبیه **shortcut** های ویندوز هستند در soft link ها بر خلاف hard link ها هر لینک آدرس سخت افزاری((inode)) مخصوص به خودشان را دارند. ایم لینکها تنها یک فایل هستند که میتوانند به یک فایل دیگر اشاره کنند. برای ایجاد این لینکها از گزینه ''s-'' به همراه دستور **ln** استفاده میشود 
 + 
 +<code;bash;> 
 +ln -s /tmp/art.txt ~/Pic/art.txt 
 +</code>  
 +اگر شما از [[terminal:l:ls_command_list_file_and_directory_names_and_attributes|دستور ls -l]] برای دیدن این فایل استفاده کنید به نتیجه ای مانند زیر خواهید رسید. 
 +<code;bash;> 
 +lrwxrwxrwx. 1 phoenix phoenix 32 Jan 17 18:24 art.txt -> /tmp/art.txt 
 +</code>  
 +همانطور که مشاهده میکنید بیت اول حرف l میباشد به معنی Link و بعد از پایان نام فایل بعد از یک **"<-"** آدرس فایل اصلی آمده است. 
 +===== تفاوت بین انواع لینک ها ===== 
 +==== لینک های hard ==== 
 +  * با لینکهای **Hard** نمیتوان دایرکتوری ها را لینک کرد. 
 +  * فقط در همان سیستم فایلی که هستند در دسترس هستند و در صورت انتقال آنها به یک سیستم فایل دیگر (پارتیشن دیگر) فایل استفاده نیستند. 
 +  * اگر فایل اصلی پاک شود باز هم به آخرین محتوای فایل اصلی دسترسی داریم. 
 +  * مجوز های دسترسی تمام لینکها مانند فایل اصلی است و شما برای تغییر مجوز های دسترسی میبایست از فایل اصلی اقدام کنید. 
 + 
 +==== لینک های soft ==== 
 +  * میتوان یک **inode** را به چندین نام فایل اختصاص داد. 
 +  * برای لینک دادن میان دایرکتوری ها استفاده میشوند. 
 +  * میتوان در دیگر سیستم فایل ها هم استفاده کرد. 
 +  * اگر فایل اصلی پاک شوند دیگر از طریق لینک به فایل اصلی دسترسی نداریم. 
 +  * سایز فایلها به شما دروغ میگویند! به این دلیل که این لینک ها خود یک فایل هستند با حجمی بسیار کوچک در صورتیکه **hard link** ها به دلیل اشاره مستقیم به فایل اصلی حجم فایل اصلی را نمایش میدهند. 
 +  * زمان اصلاح یا **modification** ی که در لینکهای نرم نمایش داده میشود مربوط به اصلاحاتی است که شما بر روی این لینک انجام داده اید اما در **hard link** این زمان همان زمان دقیق اصلاحات فایل اصلی است. 
 +  * نام فایل اصلی بعد از یک علامت <key><-</key> میآید و بر خلاف **hard link** اگر فایل اصلی را پاک کنید این لینک به یک لینک خراب یا به اصطلاح درست به لینک یتیم (**orphan**) تبدیل میشود. 
 +  * همانطور که بالاتر اشاره شد برای دایرکتوری های و فایل سیستم هایی که از راه دور با آنها کار میکنید و یا به هر طریقی بر روی کامپیوتر شما نیستند نمیتوانید از لینکهای نرم و سخت استفاده کنید. 
 + 
 +===== چرا با پاک شدن فایل اصلی همچنان میتوان به آخرین محتوای آن از طریق hard link دسترسی داشت؟ ===== 
 +چونکه inode فایل اصلی و hard link با هم یکی هستند ولی inode فایل اصلی و soft link متفاوت هستند برای درک بهتر [[terminal:m:how_to_create_a_directory_or_folder_mkdir_command|یک دایرکتوری به نام test بسازید]] و سپس یک فایل را با دومین دستور در آن ایجاد کنید و محتوایی را در آن بنویسید. 
 +<code;bash;> 
 +mkdir test 
 +cd test 
 +echo "in file baray test inode hast" > file 
 +</code>  
 +حالا با دستور زیر یک لینک سخت بسازید 
 +<code;bash;> 
 +ln file file2 
 +</code>  
 +و با دستور زیر یک لینک نرم بسازید با استفاده از گزینه **s** 
 +<code;bash;> 
 +ln -s file file3 
 +</code>   
 +حالا [[terminal:l:ls_command_list_file_and_directory_names_and_attributes|دستور ls -li]] را اجرا کنید تا بتوانید **inode** ها را مقایسه نمایید در خروجی مشاهده میکنید که **inode** فایل اصلی و لیسنک سخت با هم یکی هستند ولی **inode** فایل اصلی و لینک نرم متفاوتند. 
 +<code;bash;> 
 +-> $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 
 +</code>   
 +حالا اگر با [[terminal:c:linux_cat_command_usage_with_examples|دستور cat]] محتوای هر یک از فایلها را بخوانید خواهید دید که خروجی همه یکی هستند اما اگر فایل اصلی را پاک کنید دیگر از طریق لینک نرم نیمتوانید محتوای فایل را بخوانید.
  
  
terminal/l/symbolic-links.1547482859.txt.gz · آخرین ویرایش: 2019/01/14 19:50 توسط phoenix

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki