دستور Cd در لینوکس چه کار می کند ؟
یکی از پایهای ترین کارهایی که هر کاربر کامپیوتر در هر سیستم عاملی انجام میدهد گشت و گذار بین فایلهای ذخیره شده است. ابزارهای مدیریت فایل انجام این کار را توسط رابط کاربری گرافیکی بسیار ساده میکنند. اما در محیط رابط کاربری خط فرمان یا «Command Line Interface | CLI» نیز لازم است بتوانید فایلها و دایرکتوریهای مختلف را بررسی کنید. دستور cd در لینوکس به شما این امکان را میدهد که بین دایرکتوریهای مختلف جابهجا شوید و محتویات آنها را بررسی کنید. از همین دستور در محیط خط فرمان ویندوز و یا ترمینال سیستم عامل مک نیز میتوانید استفاده کنید.
در این مقاله پس از آشنایی با کارکرد دستور cd در لینوکس و بررسی ساختار آن، به بررسی هشت مثال از به کار گیری دستور cd در ترمینال لینوکس میپردازیم. طی بررسی این مثالها مهارت بیشتری در استفاده از این دستور برای انجام سریع و کارآمدتر امور در ترمینال لینوکس کسب میکنیم.
دستور cd در لینوکس چیست؟
هر کاربر لینوکس که چند مرتبه در اینترنت درباره رفع اشکالات روزمره یا انجام امور مختلف مربوط به سیستم از طریق ترمینال لینوکس جستجو کرده باشد، حتما به دستور cd در لینوکس برخورده است. حتی ممکن است حین دنبال کردن راهنماهای مختلف، از این دستور استفاده کرده باشید. آشنایی دقیق با این دستور به ما کمک میکند تا از دستور cd در لینوکس به صورت کارآمدتری استفاده کنیم.
دستور cd در لینوکس یکی از دستورهای پایهای است که از آن برای تغییر دایرکتوری فعال کنونی استفاده میشود. برای کاربرانی که از ترمینال لینوکس استفاده میکنند این دستور یکی از پرکاربردترین دستورها است که روزانه بارها از آن استفاده میکنند و به همین دلیل لازم است که آشنایی بهتر و دقیقتری با این دستور داشته باشیم. نام این دستور کوتاه شده عبارت «Change Directory» است و همانطور که گفتیم دایرکتوری فعال کنونی را با استفاده از آن تغییر میدهیم. اما پیش از ادامه بحث لازم است بدانیم منظور از «دایرکتوری فعال کنونی» چیست؟ مقدار دایرکتوری فعال کنونی در لینوکس در متغیری با نام PWD ذخیره میشود.
متغیر PWD در لینوکس چیست؟
متغیر PWD در لینوکس مسیر مطلق دایرکتوری فعال کنونی را ذخیره میکند. به مثال زیر دقت کنید:
در این مثال ابتدا دستور ls در لینوکس را فراخوانی کردهایم. چون هنگام فراخوانی دستور ls دایرکتوری مورد استفاده توسط این دستور را مشخص نکردهایم این دستور از دایرکتوری فعال کنونی استفاده خواهد کرد. به قسمتی از تصویر که با خط قرمز مشخص شده است دقت کنید. این مسیر نشان دهنده دایرکتوری فعال کنونی است. در مثال فوق میبینیم که مسیر ~/faradars به عنوان دایرکتوری فعال کنونی مورد استفاده قرار گرفته است. این مسیر در واقع یک مسیر مطلق است. در ترمینال لینوکس دایرکتوری home مربوط به هر کاربر با کاراکتر ~ مشخص میشود.
با دقت به قسمتی که با خط سبز مشخص شده است میبینیم عنوان soroosh در قسمت مربوط به نام کاربری که فرمان را اجرا میکند درج شده است. در نتیجه مسیر ~ به دایرکتوری home این کاربر اشاره میکند. به این ترتیب میدانیم مسیر ~/faradars که در این دستور به عنوان دایرکتوری فعال کنونی مورد استفاده قرار گرفته است معادل مسیر مطلق /home/soroosh/faradars است.
این مسیر همیشه در یک متغیر محلی با نام PWD ذخیره میشود و دستورهای مختلف لینوکس به عنوان دایرکتوری فعال کنونی از آن استفاده میکنند. در تصویر بالا میبینیم که با استفاده از دستور echo $PWD مقدار این متغیر را در ترمینال نمایش دادهایم. خروجی این دستور با رنگ زرد در تصویر مشخص شده است. همچنین در اسکریپتهای shell نیز میتوانید از این متغیر برای دسترسی به مسیر دایرکتوری فعال کنونی استفاده کنید.
زمانی که با استفاده از دستور cd در لینوکس مسیر دایرکتوری فعال کنونی را تغییر میدهید مقدار متغیر PWD نیز تغییر میکند.
ساختار دستور cd در لینوکس
ساختار کلی دستور cd در لینوکس به صورت زیر است:
cd [option] [dir]
در قسمت dir مسیر دایرکتوری جدیدی که میخواهیم به عنوان دایرکتوری فعال انتخاب کنیم را مشخص میکنیم. در این قسمت میتوانیم دایرکتوری جدید را با آدرس نسبی یا آدرس مطلق مشخص کنیم. تفاوت آدرسهای نسبی و مطلق را در ادامه خواهیم دید.
در قسمت option میتوانیم یکی از دو نشانه -L یا -P را استفاده کنیم. دستور cd در لینوکس به صورت پیشفرض از نشانه -L استفاده میکند. در صورتی که در قسمت dir دایرکتوری جدید را مشخص نکنیم دستور cd دایرکتوری فعال کنونی را به دایرکتوری home متعلق به کاربر فعلی تغییر میدهد. این مسیر را با کاراکتر ~ نیز میتوانیم مشخص کنیم.
در مثال زیر میبینیم که پس از فراخوانی دستور cd بدون آرگومان، دایرکتوری فعال کنونی به مسیر /home/soroosh/ تغییر داده شده است:
با وارد کردن دستور زیر نیز نتیجه مشابه حاصل میشد:
cd ~
مسیرهای مطلق و نسبی
هنگام به کار بردن دستور cd در لینوکس میتوانیم از مسیرهای نسبی یا مطلق استفاده کنیم. منظور از مسیر مطلق مسیری، مسیر کاملی است که به یک دایرکتوری یا یک فایل ختم میشود و از دایرکتوری ریشه که در لینوکس با کاراکتر / مشخص میشود، شروع میشود. در مثال بالا میبینیم که مسیر مطلق دایرکتوری faradars برابر با /home/soroosh/faradars است. فارغ از این که مقدار دایرکتوری فعال کنونی چه باشد مسیر دایرکتوری faradars به این صورت مشخص میشود. بر خلاف مسیر مطلق، مسیر نسبی بر اساس دایرکتوری فعال کنونی مشخص میشود. با استفاده از مسیرهای نسبی میتوانیم از دستور cd برای جابجایی سریعتر بین دایرکتوریها استفاده کنیم.
ساختار دایرکتوریهای زیر را در نظر بگیرید:
- /home/faradars - /home/faradars/articles - /home/faradars/images - /home/faradars/articles/linux - /home/faradars/articles/network - /home/faradars/images/linux
فرض کنید در حال حاضر مسیر /home/faradars به عنوان دایرکتوری فعال کنونی انتخاب شده باشد، در این صورت برای انتخاب دایرکتوری articles به عنوان دایرکتوری فعال با استفاده از مسیرهای مطلق باید از دستور زیر استفاده کنیم:
cd /home/faradars/articles
برای انجام همین کار با استفاده از مسیرهای نسبی از دستور زیر استفاده میکنیم:
cd articles
میبینید که استفاده از مسیرهای نسبی میتواند کار شما را سریعتر کرده و احتمال بروز خطای تایپی را نیز کاهش دهد. برای دانستن اینکه چه دایرکتوریهایی داخل یک دایرکتوری خاص قرار دارند میتوانیم از دستور ls استفاده کنیم. در ادامه این مقاله مجله فرادرس، از ساختار دایرکتوریهای فوق استفاده خواهیم کرد.
مثال کاربرد دستور cd در لینوکس
در ادامه، مثالهایی از کاربرد دستور cd در لینوکس را بررسی میکنیم. توصیه میکنیم برای آشنایی بیشتر با دستور cd ترمینال لینوکس را باز کرده و خودتان مثالها را اجرا کنید. برای ساخت دایرکتوریهایی که در این مثالها از آنها استفاده خواهیم کرد ابتدا دستور زیر را اجرا کنید:
cd ~
در مرحله بعد دستور زیر را اجرا میکنیم:
mkdir faradars faradars/articles faradars/images faradars/articles/linux faradars/articles/network faradars/images/linux
پس از وارد کردن دستور فوق دایرکتوریهایی که در این مثال از آنها استفاده خواهیم کرد در دایرکتوری home شما ساخته خواهند شد. با وارد کردن دستور زیر وارد دایرکتوری faradars شوید:
cd faradars
با وارد کردن دستور زیر میتوانید تمام دایرکتوریهایی که درون دایرکتوری faradars ساختهاید را بررسی کنید:
ls -R
پس از پایان مطالعه این مقاله برای حذف دایرکتوریهای ساخته شده دستور زیر را اجرا کنید:
rm -rd faradars
ورود به دایرکتوری home
در محیط ترمینال لینوکس فارغ از مقدار دایرکتوری فعال کنونی ، هر زمان دستور زیر را وارد کنید وارد دایرکتوری home متعلق به کاربر فعال خواهید شد:
cd ~
پیش از این دیدیم که با وارد کردن دستور cd بدون آرگومان هم نتیجه مشابهی حاصل خواهد شد. با وارد کردن دستور cd به صورت زیر میتوانید وارد دایرکتوری home متعلق به کاربر با نام کاربری username شوید:
cd ~username
همچنین از کاراکتر ~ در آدرسهای مطلق نیز میتوانیم استفاده کنیم. با استفاده از دستور زیر مجددا وارد دایرکتوری faradars خواهیم شد:
cd ~/faradars
به این نکته توجه کنید که نتیجه اجرای دستور فوق توسط کاربران مختلف، مقدار دایرکتوری فعال کنونی را به دایرکتوریهای یکسانی تغییر نمیدهد. مثلا اگر کاربری با نام کاربری user1 دستور فوق را اجرا کند وارد مسیر /home/user1/faradars خواهد شد و اگر کاربر دیگری با نام کاربری anotheruser همان دستور را اجرا کند، مقدار دایرکتوری فعال کنونی به /home/anotheruser/faradars تغییر خواهد کرد.
ورود به دایرکتوری root
دایرکتوری ریشه یا «root» در لینوکس با کاراکتر / مشخص میشود. برای ورود به دایرکتوری ریشه با استفاده از دستور cd در لینوکس کافی است دستور زیر را وارد کنید:
cd /
از آنجا که مسیر / که در دستور بالا مشخص شده است یک مسیر مطلق است، دستور فوق فارغ از این که مقدار دایرکتوری فعال کنونی چه باشد شما را به دایرکتوری ریشه منتقل میکند.
تغییر دایرکتوری فعال به مقدار قبلی
با وارد کردن دستور زیر مقدار دایرکتوری فعال کنونی به مقداری که پیش از تغییر کردن داشت، بازگردانده میشود:
cd -
مثلا اگر دو دستور زیر را به ترتیب وارد کنید، پس از ورود به دایرکتوری root، مجددا به دایرکتوری قبلی باز خواهید گشت.
cd /
دستور دوم در ادامه آورده شده است.
cd -
ورود به دایرکتوری والد
هنگام استفاده از مسیرهای نسبی استفاده با استفاده از .. میتوانیم به دایرکتوری والد اشاره کنیم. با استفاده از دستور زیر وارد مسیر ~/faradars/articles/linux شوید.
cd ~/faradars/articles/linux
حالا برای انتخاب مسیر ~/faradars/articles (محل قرار گرفتن دایرکتوری فعال کنونی) به عنوان دایرکتوری فعال کافی است دستور زیر را وارد کنید:
cd ..
به همین صورت میتوانید از .. در نوشتن مسیرهای نسبی استفاده کنید. مثلا اگر در حال حاضر که مقدار دایرکتوری فعال کنونی برابر ~/faradars/articles است، بخواهیم وارد مسیر ~/faradars/images شویم، میتوانیم دو دستور زیر را به ترتیب وارد کنیم:
cd .. cd images
با استفاده از .. در مسیرهای نسبی میتوانیم به جای دو دستور بالا از دستور زیر استفاده کنیم:
cd ../images
همچنین میتوانیم چند مرتبه از .. در مسیرهای نسبی استفاده کنیم. مثلا اگر مقدار دایرکتوری فعال کنونی برابر ~/faradars/articles/linux باشد برای ورود به مسیر ~/faradars/images از دستور زیر استفاده میکنیم:
cd ../../images
استفاده از نامهای دایرکتوری حاوی فاصله
در صورتی که نام یک دایرکتوری حاوی کاراکتر فاصله یا «space» باشد، باید نام آن دایرکتوری را درون کاراکترهای ‘ یا “ قرار دهیم. این موضوع به این دلیل ضرورت دارد که در ترمینال لینوکس آرگومانهای مختلف با یک کاراکتر فاصله از همدیگر جدا میشوند. به این ترتیب برای ورود به دایرکتوری با نام linux articles باید از دستور cd به صورت زیر استفاده کنیم:
cd "linux articles"
راهکار دیگر برای استفاده از دایرکتوریهایی که نام آنها حاوی کاراکتر فاصله است، قرار دادن یک کاراکتر \ پیش از کاراکتر فاصله است. به این ترتیب دستور بالا را به صورت زیر نیز میتوانیم بنویسیم:
cd linux\ articles
تغییر دایرکتوری فعال بدون دنبال کردن لینکهای نمادین
دستور cd در لینوکس در حالت عادی لینکهای نمادین را دنبال میکند. برای جلوگیری از دنبال کردن لینکهای نمادین و استفاده از ساختار فیزیکی دایرکتوریها باید از نشانه -P استفاده کنیم. به مثال زیر دقت کنید:
در این مثال ابتدا یک لینک نمادین یا «Symbolic link» برای مسیر ~/faradars/articles/linux ساختهایم و آن را در مسیر ~/faradars/linux-articles ذخیره کردهایم. دستور مربوط به این کار در تصویر با رنگ زرد مشخص شده است.
میبینیم که پس از استفاده از دستور cd برای ورود به دایرکتوری linux-articles دایرکتوری فعال کنونی برابر با ~/faradars/linux-articles مقداردهی شده است. به این معنی که دایرکتوری linux-articles، اگرچه صرفا یک میانبر برای مسیر ~/faradars/articles/linux است، اما در اینجا به عنوان یک دایرکتوری مستقل شناخته شده است. دستور مربوطه در تصویر با رنگ سبز مشخص شده است.
کرنل لینوکس چیست؟(در یک برگه جدید مرورگر باز میکند)نوشته
اما چنانچه از دستور cd در لینوکس به صورت زیر استفاده کنیم (مشخص شده با رنگ قرمز) میبینیم مقدار دایرکتوری فعال کنونی، برابر با مسیری خواهد شد که این لینک نمادین به آن اشاره میکند. به این ترتیب نشانه -P باعث شده است که دستور cd تنها از ساختار فیزیکی دایرکتوریها استفاده کرده و لینکهای نمادین را دنبال نکند. مقدار دایرکتوری فعال کنونی پس از استفاده از دستور cd با نشانه -P در تصویر بالا با رنگ آبی مشخص شده است.
cd -P linux-articles
تغییر دایرکتوری فعال و بررسی محتویات دایرکتوری
اگر دستور ls را به وسیله نشانه && به دستور ls الحاق کنیم، میتوانیم همزمان دایرکتوری فعال کنونی را تغییر داده و محتویات دایرکتوری فعال جدید را نیز بررسی کنیم. به طور مثال برای ورود به مسیر /etc و بررسی محتویات این دایرکتوری باید از دستور زیر استفاده کنید:
cd /etc && ls
دسترسی آسانتر به مسیرهای پرکاربرد
فرض کنید دایرکتوریهای موجود در مسیر ~/faradars دایرکتوریهای پرکاربردی باشند، در این صورت روزانه بارها باید از دستورهای cd ~/faradars/images یا cd ~/faradars/articles استفاده کنیم. مدیران سیستمهای کامپیوتری ترجیح میدهند از دستورهای کوتاهتری استفاده کنند تا هم احتمال بروز خطاهای تایپی کاهش پیدا کند و هم وظایف خود را سریعتر به انجام برسانند.
با مقداردهی متغیر CDPATH در لینوکس میتوانید مسیرهای پیشفرضی را که دستور cd برای جستجوی مسیرهای نسبی از آنها استفاده میکند را مشخص کنیم. این متغیر به صورت پیشفرض مقداری ندارد و دستور cd هربار که فراخوانی میشود برای تبدیل مسیرهای نسبی به مسیرهای مطلق از دایرکتوری فعال کنونی استفاده میکند.
برای اضافه کردن مسیر ~/faradars در متغیر CDPATH دستور زیر را در ترمینال لینوکس وارد کنید:
export CDPATH="~/faradars"
پس از وارد کردن دستور فوق فارغ از مقدار دایرکتوری فعال کنونی، هر زمان که دستور زیر را وارد کنیم وارد مسیر ~/faradars/articles خواهیم شد.
cd articles
ورود به مسیر ~/faradars/articles به این علت اتفاق میافتد که دستور cd برای تبدیل مسیر نسبی articles به یک مسیر مطلق ابتدا در میان دایرکتوریهای ذخیره شده در متغیر CDPATH جستجو میکند و پس از آن در میان دایرکتوریهای فرزند دایرکتوری فعال کنونی. به این ترتیب میتوانیم دسترسی به دایرکتوریهای پرکاربرد توسط دستور cd در لینوکس را تسهیل کنیم.
اما این راهکار باعث بروز یک مشکل نیز میشود، در صورتی که بین نام دایرکتوریهای فرزند دایرکتوری فعال کنونی و دایرکتوریهای فرزند دایرکتوریهای ذخیره شده در متغیر CDPATH اشتراکی وجود داشته باشد، دستور cd فرزندهای دایرکتوری فعال کنونی را نادیده میگیرد. برای رفع این مشکل دستور زیر را در ترمینال لینوکس وارد کنید:
export CDPATH=".:~/faradars"
دستور بالا مسیر . را به مسیرهای ذخیره شده در متغیر CDPATH اضافه میکند. لازم است به این نکته توجه کنیم که همیشه در صورتی که چند دایرکتوری را در متغیر CDPATH ذخیره کرده باشیم، مسیر . باید اولین مسیر ذخیره شده در این متغیر باشد. از کاراکتر : نیز همانطور که در این مثال مشخص است برای جداکردن مسیرهای مختلف ذخیره شده در متغیر CDPATH استفاده میکنیم.
مسیر . در واقع مسیر دایرکتوری فعال کنونی است. اعمال این تغییر در متغیر CDPATH باعث میشود دستور cd همیشه ابتدا دایرکتوری فعال کنونی را جستجو کند و در صورتی که مسیر مشخص شده را در بین فرزندهای دایرکتوری فعال کنونی پیدا نکرد، به جستجوی سایر دایرکتوریهای مشخص شده در متغیر CDPATH بپردازد.
مثالی از کاربرد متغیر CDPATH ، استفاده از آن، بروز مشکل ذکر شده در بالا و رفع این مشکل را در تصویر زیر میبینیم:
اگرچه استفاده از متغیر CDPATH میتواند دسترسی به دایرکتوریهای پرکاربرد را تسهیل کند، اما به این دلیل که ممکن است تداخل بین نام دایرکتوریها باعث تغییر دایرکتوری فعال به دایرکتوری اشتباه شود، بهتر است پیش از اجرای اسکریپتهای shell با استفاده از دستور زیر مقدار این متغیر را به یک رشته خالی تغییر بدهید:
export CDPATH=""
خلاصه مطلب و نحوه دسترسی به راهنمای دستور cd در لینوکس
ترمینال لینوکس یک رابط متنی قدرتمند برای مدیریت کامپیوتر است. از مدیریت فایلها تا نظارت بر اجرای برنامههای کاربردی و سرویسهای مختلف یا ویرایش فایلهای تنظیمات سرورهای وب، تقریبا هر کاری را میتوانیم از طریق ترمینال لینوکس انجام دهیم اما برای انجام سادهتر و سریعتر اغلب کارها لازم است دایرکتوری فعال کنونی را به مسیر مناسبی تغییر دهیم. دستور cd در لینوکس امکان ایجاد این تغییر را برای ما فراهم میکند. در جدول زیر مثالهای پرکاربرد دستور cd را میبینیم:
در انتهای این مطلب از مجله فرادرس، مثالهای پرکاربرد دستور cd آورده شده است.
دستور | توضیحات |
cd ~ | ورود به دایرکتوری home کاربر فعال |
cd ~username | ورود به دایرکتوری home کاربر مشخص شده |
cd / | تغییر دایرکتوری فعال به دایرکتوری ریشه |
cd – | تغییر دایرکتوری فعال به مقدار قبلی |
cd .. | تغییر دایرکتوری فعال به دایرکتوری والد |
cd “directory name” | تغییر دایرکتوری به مسیر حاوی کاراکتر فاصله |
cd directory\ name | مشابه دستور بالا |
cd -P directory | تغییر دایرکتوری بدون دنبال کردن لینکهای نمادین |
cd directory && ls | تغییر دایرکتوری فعال کنونی و نمایش محتویات دایرکتوری فعال جدید |
علاوه بر این، هر زمان که نیاز داشته باشیم میتوانیم با وارد کردن فرمان cd –help راهنمای دستور cd در لینوکس را در ترمینال لینوکس ببینیم.