بخش ۹ – مسیر نسبی و مسیر مطلق در لینوکس
۱. مقدمه: چرا یاد گرفتن مسیرها انقدر مهم است؟
اگر بخوام صادق باشم، ۸۰٪ خطاهایی که تازهکارها در لینوکس میگیرند به خاطر اینه که نمیدونن الان دقیقاً کجا هستند یا مسیر (Path) رو اشتباه میزنن. تصور کن بهت میگم «برو کوچه سوم، پلاک ۱۲» ولی تو یادت نمیاد ما الان توی کدوم محله هستیم! طبیعیه که گم بشی.
لینوکس هم دقیقاً مثل نقشه شهر کار میکنه:
- یک مسیر کوتاه میتونه توی چند محله وجود داشته باشه، اما اون موقع باید آدرس کامل بدی.
- اگر مسیر کوتاه رو بدهی، سیستم باید از محل فعلیت حساب کنه.
درک مسیر کامل (مطلق) و مسیر کوتاه (نسبی) مثل درک آدرس خانهها در یک شهره.
۲. مسیر چیست؟ (Path)
در لینوکس «فایل» و «پوشه» فقط یک اسم ندارند، بلکه یک «آدرس» دارند. این آدرس شامل:
- ترتیب پوشهها از بالاترین سطح،
- و نام فایل یا پوشه نهایی.
مثال:
/home/ali/Documents/report.txt
اینجا:
/
→ ریشهی سیستمhome
→ پوشهٔ مخصوص همهٔ خانههای کاربریali
→ خانهٔ کاربر aliDocuments
→ پوشهٔ اسنادreport.txt
→ فایل اصلی ما
بدون دانستن این مسیر، سیستم نمیدونه کدوم «report.txt» مد نظرته.
۳. مسیر مطلق (Absolute Path)
تعریف
مسیر مطلق همیشه از /
شروع میشود و آدرس کامل یک فایل یا پوشه را از ریشه سیستم مشخص میکند.
چند مثال:
/home/ali/file.txt
/etc/passwd
/var/log/syslog
ویژگیها:
- مستقل از موقعیت فعلی کاربر است.
فرق نمیکند الان کجا باشید، این آدرس همیشه به همان محل اشاره دارد. - دقیق و کمریسکتر است.
تشبیه مسیر مطلق
فرض کن داری آدرس یک رستوران را به دوستی میدهی و میگویی:
«بیا به خیابان آزادی، پلاک ۲۰، رستوران A.»
مهم نیست دوستت الان کدام محله باشد، با این آدرس دقیق میتواند بیاید.
۴. مسیر نسبی (Relative Path)
تعریف
مسیر نسبی، مسیر یک فایل یا پوشه را نسبت به محل فعلی شما مشخص میکند.
برخلاف مسیر مطلق، با /
شروع نمیشود.
مثال
فرض کنیم الان در /home/ali
هستیم:
pwd
/home/ali
اگر تایپ کنیم:
cd Documents
سیستم این را تفسیر میکند به:
/home/ali/Documents
تشبیه مسیر نسبی
این مثل این است که بگویی:
«برو کوچه پایینی و بعد به سمت چپ.»
واضح است که این دستور فقط وقتی معنی دارد که طرف مقابل بداند الان در کجای شهر (دایرکتوری جاری) است.
۵. چرا باید هر دو را بلد باشیم؟
- مسیر مطلق → امن، دقیق، مناسب برای اسکریپتنویسی و کارهای حساس.
- مسیر نسبی → سریع، کوتاه، مناسب برای کارهای روزمره وقتی محل فعلی مشخص است.
مثلاً اگر بخواهی در یک اسکریپت حذف کنی، بهتر است مطلق بدهی:
rm -rf /home/ali/oldfiles
ولی وقتی دستی کار میکنی، ممکن است کوتاهتر بگویی:
rm -rf oldfiles
(به شرطی که الان در /home/ali
باشی.)
۶. کاراکترهای ویژه مسیرها
در لینوکس چند نماد مهم وجود دارد که بهویژه برای مسیر نسبی حیاتیاند:
نماد | معنی | مثال |
---|---|---|
. | دایرکتوری فعلی | ls . → نمایش همین پوشه |
.. | یک سطح بالاتر | cd .. از /home/ali → /home |
~ | مسیر خانگی کاربر فعلی | cd ~ → /home/username |
/ | ریشه سیستم | cd / → ریشه |
استفاده ترکیبی:
فرض کنیم در /home/ali/Documents
هستیم:
cd ../Music
این اول میرود به /home/ali
و بعد وارد Music
میشود.
۷. پیدا کردن مسیر مطلق مکان فعلی (pwd
)
گاهی با استفاده زیاد از مسیر نسبی، یادت میرود الان کجا هستی!
برای پیدا کردن مسیر کامل فعلیت:
pwd
(مخفف print working directory)
مثال:
pwd
/home/ali/Documents
۸. کاربرد مسیرها در دستورات مختلف
۸.۱. با cd
- مطلق:
cd /etc
- نسبی:
cd Documents
۸.۲. با cp
فرض کن در /home/ali
هستی:
cp /etc/hosts .
این فایل را از مسیر مطلق /etc/hosts
به محل فعلی (.) کپی میکند.
۸.۳. با rm
- خطرناک! مطلق:
rm -r /tmp/testfolder
- نسبی:
rm -r testfolder
۹. داستان واقعی: فاجعه با مسیر نسبی
یک مدیر سیستم میخواست محتویات پوشه /tmp/test
را حذف کند، دستور زیر را زد:
rm -rf test
فکر میکرد در /tmp
است، اما اشتباهی در /
(ریشه) بود…
نتیجه: تلاش برای حذف پوشه /test
از ریشه (که البته نبود)، ولی میتوانست کل سیستم را نابود کند.
درس: قبل از اجرای دستورات حساس، اول این را بزن:
pwd
۱۰. بهترین روشها (Best Practices)
- برای اسکریپتها و کارهای حساس → مسیر مطلق.
- برای کار روزمره و تایپ سریع → مسیر نسبی.
- استفاده زیاد از autocomplete با Tab برای جلوگیری از اشتباه.
- اگر اسمی فاصله دارد:
cd "My Documents"
یا:
cd My\ Documents
- قبل از
rm -rf
یا تغییرات مهم →pwd
بزن.
۱۱. تمرینهای عملی
تمرین ۱ – مطلق و نسبی
cd /
cd /home
cd /home/$USER
cd Documents
تمرین ۲ – استفاده از .
و ..
pwd
cd ..
pwd
تمرین ۳ – مسیر خانگی با ~
cd ~
تمرین ۴ – ترکیب نسبی و مطلق
cp /etc/hosts ~/hosts_backup
۱۲. نکته پیشرفته: مسیر نسبی در اسکریپتها
در Bash Script اگر بخواهی مسیر نسبی بدهی، همیشه دقت کن که اسکریپت از کجا اجرا میشود. بهتر است مسیر را به مطلق تغییر دهی:
MYDIR="$(cd "$(dirname "$0")" && pwd)"
۱۳. جمعبندی
- مسیر مطلق → از
/
شروع شده، همیشه یکسان و دقیق. - مسیر نسبی → نسبت به محل فعلی.
- نکات ایمنی: استفاده از
pwd
، تب تکمیل مسیر، استفاده از مطلق در کارهای حساس. - کاراکترهای ویژه (
.
,..
,~
) یادگیری را سریعتر میکند.