تفاوت بین یک پیوند سخت و یک پیوند نمادین چیست؟


به جواب پذیرفته شده بروید




همانطور که عنوان می گوید ، من می خواهم تفاوت بین یک لینک سخت و یک لینک نرم ایجاد شده توسط فرمان را بدانم ln . این فرمان man ln اطلاعاتی را ارائه می دهد ، اما به اندازه کافی به سوال من پاسخ نمی دهد.

همچنین خوب خواهد بود اگر کسی بتواند تنظیماتی را فراهم کند که در آن پیوند سخت از یک پیوند نمادین ارجح باشد.


493









9 :تعداد پاسخها


در لینوکس / یونیکس ، میانبرها به عنوان پیوند شناخته می شوند


پیوندها به دو نوع هستند: پیوندهای نرم (پیوندهای نمادین) یا پیوندهای سخت.

  1. پیوندهای نرم (پیوندهای نمادین)

    شما می توانید به پرونده ها و دایرکتوری ها پیوند برقرار کنید و می توانید پیوندها (میانبرها) را بر روی پارتیشن های مختلف و با یک عدد inode متفاوت از اصلی ایجاد کنید.

    اگر نسخه واقعی حذف شود ، پیوند کار نخواهد کرد .

  2. پیوندهای سخت

    پیوندهای سخت فقط برای پرونده ها هستند. شما نمی توانید به یک پرونده در قسمت بندی مختلف با یک شماره inode متفاوت پیوند دهید.

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


سوال: چگونه می توانم پیوند نرم ایجاد کنم؟

پاسخ: پیوندی نرم با آن برقرار می شود ln -s . ابتدا باید منبع را تعریف کنید و سپس مقصد را تعیین کنید. (توجه داشته باشید که باید مسیرهای کامل از مبدا و مقصد را تعیین کنید ؛ در غیر این صورت کارایی نخواهد داشت.)

  sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib32/libGL.so.1
             (----------Source-------)             ( Destination )
 


توضیحات تصویر را اینجا وارد کنید

همانطور که مشاهده می کنید ، اینود متفاوت است و می تواند در یک پارتیشن متفاوت ساخته شود.


سوال: چگونه می توانم پیوند سخت را ایجاد کنم؟

پاسخ: پیوند سختی را می توان با آن ایجاد کرد ln . ابتدا باید منبع را تعریف کنید و سپس مقصد را تعیین کنید. (توجه داشته باشید که شما باید مسیر کاملی از مبدا و مقصد را تعیین کنید ؛ در غیر این صورت کار نخواهد کرد.)

بیایید بگوییم که من یک اسکریپت در /script دایرکتوری به نام خود دارم firefox .

  ls -i # Shows you the inode
 5898242 firefox

 ln /scripts/firefox /scripts/on-fire
       ( Source )    ( Destination )
 


توضیحات تصویر را اینجا وارد کنید

همانطور که مشاهده می کنید ، دارای inode مشابهی است. اگر نسخه اصلی را حذف کنم لینک کار می کند ، و به عنوان اصلی عمل می کند.


توضیحات تصویر را اینجا وارد کنید

در بالا بررسی می کنم که لینک در حال کار است و سپس اسکریپت اصلی Firefox را حذف کنید.


سؤال شما: خوب است اگر کسی بتواند تنظیماتی را فراهم کند که در آن پیوند سخت از یک پیوند نمادین ارجح باشد.

پاسخ : بسته به طرح پارتیشن دیسک ، لینک های سخت محدودیت این را دارند که باید در همان پارتیشن (-1 امتیاز) باشند و فقط می توانند به پرونده ها (-1 نقطه ) لینک دهند ، اما در صورت حذف اصل لینک 1+ می شود کار خواهد کرد و مانند اصل عمل می کند.

از طرف دیگر ، یک پیوند نرم می تواند به دایرکتوری ها یا پرونده ها (1+ نقطه) اشاره کند و هیچ محدودیتی در پارتیشن (1 امتیاز) وجود ندارد ، اما (-1 امتیاز) در صورت حذف منبع ، لینک کار نمی کند.


65



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

از طرف دیگر ، یک سمبلك در واقع به مسیری دیگر (نام پرونده) اشاره می كند. هربار دسترسی به آن از طریق سیم پیوند ، نام پرونده را برطرف می کند. اگر پرونده را جابجا کنید ، سیمک پیوند دنبال نمی شود. اگر پرونده را با پرونده دیگری جایگزین کنید ، و نام آن را نگه دارید ، سیمکلیک به پرونده جدید اشاره می کند. Symlinks می تواند سیستم فایلها را پوشانده باشد. با پیوندهای ارتباطی ، بین پرونده اصلی و سیمکلیک تفاوت قاطع دارید ، که هیچ اطلاعاتی را در مسیر مربوط به پرونده مورد نظر خود ذخیره نمی کند.


325



"یک تصویر ارزش هزار کلمه است."
بازنمایی تصویری


و ، "یک نمونه ارزش صد بند دارد ..."

دو پرونده ایجاد کنید:

 $ touch blah1   
$ touch blah2
 

برخی از داده ها را درون آنها وارد کنید:

 $ echo "Cat" > blah1
$ echo "Dog" > blah2
 

و همانطور که انتظار می رود:

 $cat blah1; cat blah2
Cat
Dog
 

بیایید پیوندهای سخت و نرم ایجاد کنیم:

 $ ln blah1 blah1-hard
$ ln -s blah2 blah2-soft
 

بیایید ببینیم چه اتفاقی افتاده است:

 $ ls -l

blah1
blah1-hard
blah2
blah2-soft -> blah2
 

تغییر نام blah1 مهم نیست:

 $ mv blah1 blah1-new
$ cat blah1-hard
Cat
 

blah1- نقاط سخت به اینود ، محتویات ، پرونده - که تغییر نکرده است.

 $ mv blah2 blah2-new
$ ls blah2-soft
blah2-soft
$ cat blah2-soft  
cat: blah2-soft: No such file or directory
 

محتویات پرونده یافت نشد زیرا پیوند نرم به آن اشاره دارد ، که تغییر کرده است ، و نه به محتویات.
به طور مشابه ، اگر blah1 حذف شود ، blah1-hard هنوز هم محتویات را نگه می دارد. اگر blah2 حذف شود ، blah2-soft فقط پیوند یک پرونده غیر موجود است.


منبع: آشکارا کپی کردن آن از StackOverflow!


325



هر دو نشانگر فایلها هستند. تفاوت نوع نشانگر است. پیوند نمادین به پرونده دیگری با نام اشاره می کند . این بیت حالت خاصی دارد که آن را به عنوان یک لینک نمادین مشخص می کند و محتوای آن نام پرونده واقعی است. از آنجا که فقط حاوی یک نام است ، آن نام در واقع لازم نیست که وجود داشته باشد یا ممکن است در یک سیستم پرونده متفاوت وجود داشته باشد. اگر پرونده نامگذاری شده را جایگزین کنید (محتویات آن را تغییر دهید بدون اینکه روی نام آن تأثیر بگذارد) ، پس از آن لینک همچنان دارای همین نام است ، بنابراین اکنون به فایل جدید اشاره می کنید. به راحتی می توانید یک پیوند نمادین را شناسایی کرده و نام پرونده مورد نظر خود را مشاهده کنید.

پیوند سخت با شماره inode به پرونده اشاره می کند. به همین ترتیب ، پیوندهای سخت هیچ فرقی با نام اول پرونده ندارند. هیچ نام "واقعی" در مقابل نام لینک سخت وجود ندارد. همه پیوندهای سخت به همان اندازه نامهای معتبر برای پرونده هستند. به همین دلیل ، پرونده ای که به آن لینک می دهید باید در واقع وجود داشته باشد و در همان سیستم پرونده ای باشد که می خواهید لینک را ایجاد کنید. اگر نام اصلی را حذف کنید ، باز هم پیوند سخت به همان پرونده اشاره دارد. از آنجا که همه پیوندهای سخت به همان اندازه نام (های) معتبر برای پرونده هستند ، شما نمی توانید به یک نگاه کنید و نامهای دیگر را برای پرونده مشاهده کنید. برای پیدا کردن این ، شما باید به دنبال هر پرونده بروید و شماره inode آنها را با هم مقایسه کنید تا نام (های) دیگری را پیدا کنید که دارای همان شماره inode هستند.

می توانید بگویید که چه تعداد اسمی از پرونده خروجی دارد ls -l . اولین شماره پس از حالت فایل تعداد لینک است. پرونده ای با بیش از 1 پیوند دارای نام (های) دیگری در جایی است و برعکس ، پرونده ای با تعداد پیوندهای آنها فقط 1 پیوند سخت (دیگر) ندارد.


88



یک لینک مستقیم فقط می تواند روی همان سیستم پرونده ای کار کند ، این فقط یک نام متفاوت برای یک inode مشابه است (پرونده ها از طریق داخلها به منابع داخلی ارجاع می شوند). یک فایل فقط از دیسک حذف شده زمانی که آخرین لینک به inode ها آن از بین رفته است (شما rm D یا unlink د آخرین لینک). لینک های سخت معمولاً فقط برای فایل ها کار می کنند ، نه دایرکتوری ها.

یک Symlink (پیوند نمادین) یک پرونده ویژه است که شامل یک مسیر به پرونده دیگر است. این مسیر می تواند مطلق یا نسبی باشد. اگر به عنوان مثال یک هارد اکسترنال را جدا کرده و آن را با یک فایل دیگر جایگزین کنید ، که در یک مسیر یک پرونده متفاوت دارد ، سیم پیوندها می توانند در سیستم های فایل کار کنند و حتی می توانند به پرونده های مختلفی نیز اشاره کنند. یک لینک دهنده می تواند به پرونده ها یا فهرست ها اشاره کند.


58



یکی از پاسخ های موضوع دیگر (اکنون از بالای پست شما پیوند دارد) به این صفحه اشاره می کند که فکر می کنم توضیحی نسبتاً خوب در سطح متوسط ​​است. اگر در هنر ascii گم شدید ، نسخه tl؛ dr را در اینجا آورده ایم:

  • فایلهای استاندارد نشانگر سیستم فایلها به یک inode است که به نوبه خود به داده های فیزیکی اشاره می کند. مؤلفه پرونده پیوند خود را به سیستم فایل (در واقع مسیر آن) و پیوندی به اینود (inode) ذخیره می کند.
  • پیوندهای سخت ، دقیقاً مانند فایلها هستند. آنها فقط یک نشانگر اضافی به طور مستقیم به یک inode هستند.
  • پیوندهای نمادین فایلهای جداگانه ای (از جمله داده های جداگانه و داده ها) هستند که یک مسیر سیستم فایل را در یک پرونده ذخیره می کنند.

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

بنابراین بر اساس آن:

  • پیوندهای سخت فقط به سیستم فایلهای مشابه اجازه می دهند. علائم ارتباطی می توانند به هر مسیری اشاره کنند.
  • پیوندهای سخت (اساساً) به دادههای مطلق اشاره دارند. نمادهای ارتباطی می توانند به مسیرهای نسبی (مثلاً ../parent.file ) اشاره کنند
  • با استفاده از برنامه افزودنی ، اگر نشانگر هدف یک پیوند سخت را جابجا کنید (که به یاد داشته باشید ، در واقع فقط یک پیوند سخت است که به یک inode اشاره دارد) ، باز هم لینک سخت کار می کند. با حرکت دادن هدف یک ساینلینک ، معمولاً سیمینک لینک را خراب می کند.
  • حل یک حلقه سخت می تواند سریعتر اما بی حد و حصر باشد. آن بخش ناچیز از سرعت به قیمت یک سیستم فایل غیر انعطاف پذیر می آید.

من ممکن است کمی خودم را گیج کرده ام اما با خواندن چیزهای مختلف ، در تلاش هستم تفاوت بین یک پرونده استاندارد و یک لینک دهنده را پیدا کنم. روشی که من هر پرونده را می خوانم شامل یک لینک مستقیم (ذخیره نام پرونده) است ، و به یک inode مربوط به داده های فیزیکی پیوند می یابد.

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


21


2011-05-18

چه زمانی از لینک نرم استفاده کنید:

پیوند در سیستمهای پرونده: اگر می خواهید فایلها را در سیستمهای فایل پیوند دهید ، فقط می توانید از لینک های پیوند دهنده / نرم استفاده کنید.

پیوندها به دایرکتوری: اگر می خواهید دایرکتوری ها را پیوند دهید ، باید از لینک های نرم استفاده کنید ، زیرا نمی توانید یک لینک سخت به یک دایرکتوری ایجاد کنید.

چه موقع از Hard Link استفاده کنیم:

فضای ذخیره سازی: پیوندهای سخت فضای بسیار ناچیزی را به خود اختصاص می دهند ، زیرا هیچ ورودی جدیدی هنگام ایجاد لینکهای سخت ایجاد نشده است. در پیوندهای نرم افزاری ، فایلی را ایجاد می کنیم که فضا را مصرف می کند (بسته به سیستم فایل بسته به نوع فایل ، معمولاً 4 کیلوبایت)

عملکرد: عملکرد هنگام دسترسی به یک پیوند سخت کمی بهتر خواهد بود ، زیرا شما به جای گذراندن پرونده دیگری مستقیماً به نشانگر دیسک دسترسی دارید. جابجایی محل فایل: اگر فایل مبدأ را به برخی از مکان های دیگر در همان سیستم پرونده انتقال دهید ، پیوند سخت همچنان کار خواهد کرد ، اما پیوند نرم خراب می شود.

افزونگی: اگر می خواهید از امنیت داده های خود اطمینان حاصل کنید ، باید از لینک سخت استفاده کنید ، همانطور که در لینک سخت ، داده ها ایمن هستند ، تا زمانی که تمام پیوندهای پرونده ها حذف نشوند ، به جای آن در لینک نرم ، شما از دست خواهید داد. اگر نمونه اصلی پرونده حذف شود ، داده ها حذف می شوند.


15



سردرگمی زمانی تنظیم می شود که می خواهید تفاوت بین "نام پرونده" و یک پیوند سخت را پیدا کنید زیرا هیچ کدام وجود ندارد.

هر پرونده ای که ایجاد می کنید از داده های روی دیسک و یک پیوند سخت - که یک نام پرونده در یک فهرست و یک نشانگر به داده های موجود در دیسک است تشکیل شده است. پایان داستان. هنگامی که آخرین (یا تنها) پیوند سخت حذف شود ، سیستم عامل می داند که دیگر داده لازم نیست.

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

همانطور که قبلاً توضیح داده شد ، Symlinks به شما می گویم "پرونده ای <targetname> در پوشه ای به نام <targetfolder> " وجود دارد. آنها به پیوند سخت اشاره می کنند. آنها نمی دانند که داده ها کجاست. پیوند سخت این را می داند.


8



خیلی ساده است. پرونده ها (و دایرکتوری ها!) در آدرس های دستگاه بلوک (HDD یا هر چیز دیگری) ذخیره می شوند. به طور معمول ، شما یک نام واحد را در یک آدرس نقشه برداری می کنید ، و به این ترتیب پرونده خود را دریافت می کنید. یک لینک سخت یک نام دوم ، سوم و غیره است که در همان آدرس نقشه برداری شده است. در عوض ، یک پیوند نمادین به نماد - نام - اشاره می کند و نام دوم نیز به نام اول نقشه برداری می شود. در مورد هسته ، به محض خواندن هدف پیوندی نمادین ، ​​آن متوقف می شود و به عنوان ابتدا با عنوان هدف به عنوان پرونده (همان کم و بیش) به عنوان بازگشت به متن برگردانده می شود ، بنابراین سیمکارت های نسبی امکان پذیر هستند اما بسیار بی فایده هستند. نام هدف بالاتر از سطح سیستم فایل استفاده نمی شود ، مگر اینکه صریحاً در کد فضای کاربران پرسیده شود.


0



انتشارات مرتبط


چه تفاوتی بین #! / bin / sh و #! / bin / bash وجود دارد؟

تفاوت بین / etc / init / و /etc/init.d/ چیست؟

تفاوت بین Ctrl-z و Ctrl-c در ترمینال چیست؟

تفاوت بین "gksudo nautilus" و "sudo nautilus" چیست؟

تفاوت بین "شروع systemctl" و "systemctl فعال" چیست؟

تفاوت بین "راه اندازی مجدد سرویس" و "بارگیری مجدد سرویس" چیست؟

تفاوت بین گروه "سودو" و "مدیر" چیست؟

تفاوت بین "chmod + x" و "chmod 755" چیست؟

تفاوت بین مدیر شبکه و "ifconfig" "ifup" و غیره چیست؟

چه تفاوتی بین بروزرسانی-گراب و آپدیت-grub2 وجود دارد؟

[symbolic-link] سوال برچسب


نحوه لیست تمام بسته های نصب شده

چگونه می توان یک بسته واحد را با استفاده از apt-get آپدیت کرد؟

چگونه می توانم از docker بدون سودو استفاده کنم؟

پیام خطا "sudo: قادر به برطرف کردن میزبان (هیچ)"

متن را با استفاده از دستورات متن را پیدا کرده و جایگزین کنید

چگونه می توانم رمزعبور اداری گمشده را تنظیم مجدد کنم؟

چگونه یک فهرست را از طریق خط فرمان تغییر نام دهم؟

چگونه می توانم به صورت بازگشتی تمام پرونده های یک برنامه افزودنی خاص را در فهرست فعلی حذف کنم؟

چگونه می توانم وابستگی های برآورده نشده پس از افزودن PPA را برطرف کنم؟

چگونه اسکریپت ها را در هنگام راه اندازی اجرا کنیم؟