انسان یک گونه نقاد ، هنرمند و هوشمند است ! به همین خاطر است که پرسشگری میکند!
مفهوم مسیر های مطلق و نسبی در فایل سیستم | کتاب bash2003 بخش 1-4
فصل اول [ قسمت چهار از پنج ] (قسمت قبل)

خب بریم سراغ یکی از مفاهیم به شدت مهم . همونطور که در قسمت قبل براتون گفتم، ما در فایل سیستم کلا سه مفهوم کلیدی داشتیم :
root یا ریشه : که در مثالمون به تنه و ریشه ی درخت تشبیه شده بود که کلی شاخه بهش متصل شده بودند.
directory یا دایرکتوری (فولدر) : که این هم در مثالمون به شاخه های درخت تشبیه شده بود.
file یا فایل : که در واقع توی مثالمون به برگ ها تشبیه شده.
خب حالا میخوایم به وسیله این مفاهیم کلیدی ای که در رابطه با ساختار کلی یک فایل سیستم یاد گرفتیم. بیایم و سعی کنیم در رابطه با مسیر ها صحبت کنیم. اما قبل از هر چیز یه یادآوری کوچولوی دیگه از پست قبل داشته باشیم.
یادآوری چطور سه مفهوم بالا رو در CLI نشون میدادیم؟
قبل از ادامه لطفا چند لحظه سعی کنید که به این قضیه پاسخ بدید.
اگر نتونستید مشکلی نیست یاد آوری برای همینه :
برای نشون دادن root در CLI و بالطبع در شل ما از علامت اسلش / استفاده میکردیم.
برای نشون دادن directory ها از ترکیب نام + یک اسلش / استفاده میکردیم و
برای نشون دادن فایل ها صرفا از نامشون استفاده میکردیم.
پس اگر میخواستیم یک فایل رو که نامش ali.txt بود و در دایرکتوری ای به نام users که خود این دایرکتوری در root قرار داره رو نشون بدیم کافی بود بنویسیم :
/users/ali.txtکه نحوه خواندن و نوشتن این قضیه رو در پست قبل براتون کامل توضیح دادم. پس اگر این قضیه براتون آشنا نیست اون بخش رو مطالعه کنید.
خب بریم سراغ اصل مطلب.
مسیر ها در فایل سیستم
خب دیگه بریم سراغ بحث اصلیمون برای این که خوب این مبحث رو درک کنیم
اول کمی زاویه دیدمون رو به ساختار درختی فایل سیستم تغییر بدیم :
تا الان همش داشتیم فایل سیستم رو به شکل یک درخت واقعی میدیدم. از الان بیاید بیشتر با شکل واقعیش آشنا بشیم.
/
|----directory1/
| |----subdirectory1/
| | |----file.html
| |----file.txt
|----directory2/
همونطور که مبینید تمام فایل ها و دایرکتوری های داخل سیستم ما با توجه به چیزی که بالا داریم میبینیم اصولا در یک فایل سیستم و در محیط CLI به این شکل دیده میشوند.
اینجا چند تا نکته وجود داره root یا همون / زیر مجموعه هیچکس نیست و بالا تر از root چیزی نداریم.
همه چیز از root شروع میشه بعدش دایرکتوری هایی رو داریم که داخل روت قرار گرفتند مثل directory1 و directory2 هر دایرکتوری میتونه توی خودش فایل یا دایرکتوری دیگه ای داشته باشه مثلا directory1 داخل خودش subdirectory1 و یه دونه فایل به نام file.txt داره.
که اون subdirectory هم داخل خودش یه فایل داره به نام file.html
این چیزی که دارید میبینید شاید در نگاه اول براتون عجیب باشه ولی واقعیتش اینه که خیلی سادست و به زودی درکش میکنید. (البته اگر تا الان نکردید)
خب حالا که دیگه از شکل درخت اومدیم بیرون و به شکل واقعی تری به فایل سیستم نگاه کردیم.
بریم سراغ مسیر.
مسیر ها در فایل سیستم
توی پست قبلی گفتم یه جمله رو بدون سوال و پرسش حفظ کنید و اون این بود که همه چیز در لینوکس فایل هست همه چیزززز خب با توجه به این جمله وقتی شما میخواید با سیستم عاملتون کار کنید اصولا نیاز دارید که برای هر کاری گریزی به چند فایل بزنید و با فایل ها کار کنید.
از پست قبل میدونید که جایی که فایل های ما ذخیره میشوند دقیقا همین فایل سیستم هست پس باید بتونیم در فایل سیستم جا به جا بشیم و به سمت فایل هایی که نیاز داریم بریم.
برای این که بتونیم جابهجا بشیم باید مفهوم مسیر رو درک کنیم .
مسیر در حقیقت همون راهی هست که ما باید از جایی که هستیم پیش بگیریم تا برسیم به مقصدمون.
در فایل سیستم دو نوع مسیر داریم مسیر مطلق و مسیر نسبی.
مسیر مطلق (absolute path)
تصور کنید که فردی از شما آدرس آرامگاه شاعر بزرگ پارسی، حافظ رو میپرسید و شما از مبدا جهان و جایی که عالم شروع میشه.شروع به آدرس دادن میکردید برای مثال میگفتید :
جهان - فضا -گروه محلی - کهکشان راه شیری - بازوی برساووش - بازوی شکارچی - منظومۀ شمسی - سیارات داخلی - زمین - قارۀ آسیا - خاور میانه - ایران - استان فارس - شیراز - حدفاصل چهارراه ادبیات و چهارراه حافظیه، روبهروی ورزشگاه حافظیه.
آیا قبل از جهان در آدرس بالا چیزی وجود داره؟ در این مثال نه فرض میکنیم بالا تر از جهان چیزی وجود نداره دقیقا مثل root در فایل سیستم.
پس اگر بخوایم آدرس مطلق یک فایل رو در فایل سیستم بنویسیم : باید از root شروع کنیم یکی یکی دایرکتوری ها رو رد کنیم و به فایلمون برسیم.
پس اصولا یکی از خصیصه های یک آدرس مطلق شروع شدن از root هستش .
مثال : کدام یک از آدرس های زیر مطلق نیست!؟
/users/ali.log
users/ali.log
/users/user/ali.log
/users/user/ali/ali.log...... پاسخ :
کمک : گزینه ای که از root یا مبدا جهان شروع نشده آدرس مطلق نیست دیگه.
پس میشه ....
گزینه : users/ali.log
چراشو دیگه خودتون بگید.
مسیر نسبی (relative path)
حالا تصور کنید در مثال همون حافظ میخواستیم جای استفاده از مسیر مطلق از مسیر نسبی استفاده کنیم.
اینجا یه نکته ای رو باید رعایت کنیم :
نکته :
زمانی که از مسیر مطلق استفاده میکردیم مهم نبود که موقعیت مکانی ما کجاست فقط از مبدا جهان شروع میکردیم تا به مقصد برسیم. و هیچ اهمیتی به موقعیت مکانی خودمون یا کسی که ازمون سوال کرده بود نمیدادیم. اما در بحث مسیر نسبی اینجوری نیست و به موقعیت مکانی خودمون اهمیت میدیم و نسبت به اون آدرس رو میدیم.
پس در مسیر نسبی از جایی که هستیم شروع میکنیم و نه از مبدا جهان و root اوکی؟
مثلا توی مثال بالا اگر فرض بگیریم که توی استان فارس هستیم میتونیم بگیم :
شیراز- حدفاصل چهارراه ادبیات و چهارراه حافظیه، روبهروی ورزشگاه حافظیه
میبینید ؟ اصولا آدرس نصف و خب خیلی راحت تر شد حتی امکان این که خطایی در هنگام آدرس دهی صورت بگیره هم کمتر شد.
خب حالا تا اینجا همه چیز اوکیه ولی یه سوال چطوری در CLI نشون بدیم که از جایی که هستیم شروع کردیم؟
خب ما در CLI اصولا یا در root هستیم یا در یک directory. از اونجایی root خودش یه دایرکتوری هست که باقی فایل ها و دایرکتوری ها داخلش هستند پس به طور کلی در CLI ما همیشه در یک دایرکتوری هستیم. که به اون دایرکتوری که درش حضور داریم میگیم working directory یعنی دایرکتوری ای که داریم توش کار میکنیم (یا بهتر بگم اون دایرکتوری ای که توش هستیم)
حالا برای نشون دادن working directory همیشه از یک . (نقطه) استفاده میکنیم. و این نقطه در حقیقت مثل یک نام و نشان برای working directory ما میمونه .
و خب از اونجایی که نقطه نام working directory ما هست پس میتونیم به شکل یک دایرکتوری نشونش بدیم که گفتم : نام + اسلش
پس ما working directory رو به این شکل نمایش میدیم :
./تمام پس اگر تصور کنیم که میخوایم از جایی که هستیم بریم به دایرکتوری users و فایل ali.log رو ببینیم کافیه بنویسیم :
./users/ali.logالبته این در صورتی کار میکنه که در working directory مون دایرکتوری users وجود داشته باشه . یعنی یه همچین چیزی باشه :
/
|----directory1/
| |----subdirectory1/ 🯅
| | |----users
| | | |----ali.log
| | |----file.html
جایی که هستید رو با 🯅 مشخص کردم . پس اگر ساختار فایل سیستم این شکلی باشه چون هم دایرکتوری users در working directory تون قرار داره و هم داخلش ali.log هست پس مسیر نسبی ما کار میکنه و در حقیقت بهتره بگیم درسته.
خب این پست هم تموم شد.
خلاصه ماجرا :
زاویه دیدمون رو نسبت به فایل سیستم تغییر دادیم تا در پست بعد بتونیم وارد کار با شل بشیم و بلاخره دستور بزنیم و از طرفی با مسیر های نسبی و مطلق که برای جابهجا شدن توی فایل سیستم بهشون نیاز داشتیم آشنا شدیم.
و یاد گرفتیم که working directory چی هست و چطوری نمایشش میدیم.
تمرین :
سعی کنید آدرس خونه یا مثلا آدرس یک شی در آشپز خانه رو برای خودتون یک بار به شکل مطلق و absolute و بار دیگر به شکل relative و نسبی بیان کنید.
سخن پایانی
قسمت بعدی میریم که دیگه از دستورات استفاده کنیم، انیمیشن ببینیم و در نهایت آخرین بخش از فصل اول کتاب رو تموم کنیم. مرسی که همراهم هستید لطفا حتما انتشارات رو دنبال کنید و اگر دوست داشتید به چنل تلگرام FUCKT8EC0DE بپیوندید (لینکش توی انتشارات هست).
کتاب bash2003 تحت لایسنس CC-BY-SA منتشر میشه و میتونید آزادانه و با خیال راحت استفاده کنید.
پست بعدی ساعت ۱۳:۰۰ فردا
مطلبی دیگر از این انتشارات
چرا هنوز هم باید CLI بلد باشیم؟ | بخش 2-1 کتاب bash2003
مطلبی دیگر از این انتشارات
یونیکس و شبه-یونیکس قدم اول | بخش 3-1 کتاب bash2003
مطلبی دیگر از این انتشارات
بش اسکریپت، فصل اول | کتاب bash2003