which - پیدا کردن ادرس کامل یک دستور

دستورهای مختلفی برای جستجو داریم که هرکدوم بر یک اساسی عمل جستجو رو انجام می‌دن. مثلا دستور locate از روی یک دیتابیس که قبلا ساخته شده دنبال فایل می‌گرده یا دستور find از روی خود هارد شروع به جستجو می‌کند. which هم روش خودش رو داره که بر اساس PATH$ شل‌مون دنبال فایل مورد نظر می‌گرده.

PATH چیست؟

وقتی دستوری رو در ترمینال می‌زنیم , شل‌مون اسم اون دستور رو از یک جایی باید پیدا کند تا بتونه اجراش کند که برای این‌کار شل‌مون در داخل یک سری فایل اسم اون دستوری که دادیم رو جستجو می‌کند. خوب حالا آدرس اون فایل‌ها همون PATH شل‌مون نامیده می‌شن که مجموعه‌ای از آدرس‌ها هستش که در این آدرس‌ها دستورات‌مون وجود دارن.

برای دیدن PATH ترمینال‌تون دستور زیر رو بزنین:

aliabry@lp:~$ $PATH
-bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:

پیدا کردن آدرس کامل یک دستور

برای این‌کار کافیه فقط اسم اون دستور رو در ادامه دستور بزنین. مثلا در زیر دستور fdisk رو جستجو می‌کنیم.

aliabry@lp:~$ which fdisk
/sbin/fdisk

بعضی اوقات بعضی دستورات رو در ترمینال می‌زنیم و کار هم می‌کنن ولی اگر برای مکانشون جستجو کنیم خروجی بهمون نمی‌ده . مثل دستور alias:

aliali@lp:~$ which alias

دلیل این‌که به ما خروجی نداد، این هست که دستورات به دو گروه تقسیم می‌شن:

  • یک گروه دستورات معمولی مثل fdisk که رو سیستم نصب می‌شن و به‌واسطه شل‌مون کار می‌کنن.
  • گروه دوم دستورات خود شل‌مون هستن که به اصطلاح build in shell نامیده می‌شن وجزئی از خود شل‌مون هستن پس براشون آدرسی وجود نداره.