دستور which در لینوکس [مکان یابی فایل اجرایی دستور]
دستور which در لینوکس برای جستجوی مسیر فایل های اجرایی دستورات و برنامه ها در محیط Path استفاده می شود و برای کسانی که قصد خطایابی و دیباگ جریان اجرای دستورات را دارند، بسیار مفید است.
عیب یابی مشکلات مربوط به اجرای دستورات، نصب برنامه ها، رفع تضاد بین نسخه های مختلف ابزارها و برنامه ها و مدیریت محیط توسعه و زبان های برنامه نویسی از مهم ترین کاربرد های دستور which در دنیای واقعی است.
به این ترتیب، حتی اگر خواستید با خرید سرور مجازی لینوکس عملکرد و کیفیت کارهای خود را ارتقا دهید، با دستوراتی مثل which می توانید بسیاری از کارها را برای خود راحت تر کنید.
منظور از Path و فایل اجرایی چیست؟
PATH، یک متغیر محیطی است که به shell و سایر برنامه ها می گوید که کدام دایرکتوری ها را برای فایل های اجرایی جستجو کنند.
در واقع مسیرهای موجود در PATH، چراغ راه shell هستند. به این صورت که وقتی دستوری مثل ls را در ترمینال تایپ می کنید، شل مسیرهای موجود در PATH را بررسی می کند تا اینکه فایل اجرایی مربوط به آن را پیدا و اجرا کند.
فایل اجرایی یک دستور هم حاوی کدها و اسکریپت هایی است که سیستم عامل می تواند آنها را پردازش و اجرا کند و وظیفه مرتبط با آنها را انجام دهد.
حالا اگر مسیر فایل اجرایی برای برنامه یا دستور موردنظر در PATH تعریف نشده باشد، در خروجی با خطای not found مواجه خواهید شد.
پیش نیازهای اجرای دستور which
- سیستم یا سرور مجازی لینوکس
- دسترسی به ترمینال
- نصب بودن دستور which
این دستور به طور پیش فرض در تمام توزیع های لینوکس نصب است ولی اگر متوجه شدید که سیستم شما مجهز به این دستور نیست، ابتدا باید آن را نصب کنید تا بتوانید از آن استفاده کنید:
دستور نصب which در اوبونتو / دبیان
sudo apt update
sudo apt install which
دستور نصب which در CentOS / فدورا
sudo yum update
sudo yum install which
یا
sudo dnf update
sudo dnf install which
دستور نصب which در آرچ لینوکس
sudo pacman -Sy
sudo pacman -S which
بعد از اجرا دستور نصب، می توانید از دستور زیر برای اطمینان از نصب بودن آن استفاده کنید:
which --version
با دیدن شماره نسخه می توانید مطمئن شوید که این دستور روی سیستم شما نصب است.
سینتکس دستور which در لینوکس
سینتکس پایه دستور Which لینوکس به صورت زیر است:
which [options] [command_name]
[options]: آپشن ها که تحت عنوان فلگ ها هم شناخته می شود، برای مدیریت رفتار دستور which به کار می روند. البته، این دستور دامنه آپشن کوچکی دارد و a از رایج ترین آنها هستند که در بخش مثال های کاربردی از which به آن اشاره خواهیم کرد.
[command_name]: همان نام فایل اجرایی است که می خواهید مسیر آن را پیدا کنید.
مثال های کاربردی از دستور which در لینوکس
مشاهده مسیر دستور موردنظر
برای اینکه مسیر فایل اجرایی مربوط به دستور موردنظر را ببینید، کافیست اسم آن را به صورت زیر به دستور which اضافه کرده و آن را اجرا کنید:
which ls
اما چه دستورات و برنامه هایی دارای فایل اجرایی هستند که می توانید مسیر آنها را با which پیدا کنید؟
- دستورات اصلی لینوکس مثل cd و rm
- برنامه ها و ابزارهای نصب شده مثل git و python
- مفسرها (اجرا کننده های برنامه ها) مثل bash
- دستورات شبکه ای مثل ping و ssh
- مدیربسته ها مثل apt و yum
- …
تقریباً هر دستوری که در ترمینال اجرا می کنید، در پشت صحنه خود دارای یک فایل اجرایی است که در یکی از دایرکتوری های موجود در PATH قرار دارد و با which می توانید مسیر آن را ببینید.
بررسی مسیر چند فایل به صورت یکجا
اگر می خواهید چند آرگومان را به صورت یکجا در دستور which لحاظ کنید و مسیر آنها را با هم ببینید، می توانید which را به شکل زیر اجرا کنید:
which nc mount sort
این دستور، مسیر فایل های اجرایی دستور mount ،nc و sort را به ترتیب نشان می دهد.
مشاهده تمام نسخه های اجرایی دستور و برنامه موردنظر
اگر چند نسخه از یک برنامه روی سیستم نصب است و دوست دارید مسیر همه آنها را با هم ببینید تا نسخه ای که در اولویت قرار دارد را پیدا کنید، می توانید آپشن a را هم به دستور which اضافه کنید.
به عنوان مثال اگر می خواهید مسیر فایل های اجرایی پایتون را بررسی کنید، می توانید از دستور زیر استفاده کنید:
which -a python
خروجی چیزی شبیه دستور زیر خواهد بود:
به این ترتیب می توانید مسیرهای مختلف را بررسی کنید و اگر تضادی بین مسیرها وجود دارد، شناسایی و تصحیح کنید.
نادیده گرفتن بزرگ/کوچک بودن حروف برنامه یا دستور
اگر صرفاً می خواهید مسیر فایل اجرایی دستور یا برنامه موردنظر را پیدا کنید و بزرگ/کوچک بودن حروف موجود در اسم آن برای شما اهمیتی ندارد، می توانید آپشن i را به دستور اضافه کنید:
which -i Python
این دستور، همان مسیر python را به شما نشان می دهد و کاری با بزرگ بودن حرف P در دستور ندارد.
بررسی alias بودن دستور موردنظر
اگر یک دستور به صورت alias تعریف شده باشد یا به نوعی سفارشی سازی شده باشد، با همان آپشن a می توانید بررسی کنید که این دستور حالت alias چه دستوری است و فایل اجرایی آن در چه مسیری قرار دارد.
به عنوان اگر ll آلیاس دستور ls –color=auto باشد و دستور زیر را اجرا کنید:
which -a ls
با چنین خروجی مواجه خواهید شد:
ترکیب which با دستور cd
اگر می خواهید با یک دستور، مستقیماً به مسیر فایل اجرایی دستور یا برنامه موردنظر بروید، می توانید از دستور cd کمک بگیرید:
cd $(dirname $(which python))
این دستور، مسیر فعلی خط فرمان را به دایرکتوری حاوی فایل اجرایی پایتون تغییر می دهد.
مشاهده اطلاعات بیشتر در مورد دستور موردنظر
کافیست آپشن v را به دستور اضافه کنید:
which -v echo
برای دسترسی به اطلاعات بیشتر در مورد دستور which در لینوکس می توانید از دستورات زیر استفاده کنید:
man which
which -h
info which
کاربردهای مهم دستور which
- بررسی نصب بودن/نبودن دستور یا فایل اجرایی خاص
- ارائه مسیر دقیق فایل اجرایی موردنظر
- عیب یابی مسائل مربوط به متغیر PATH
- مشاهده نسخه های مختلف مربوط به دستورها و برنامه ها
- بررسی نسخه اولویت دار دستور و برنامه موردنظر
- تغییر اولویت نسخه های مختلف یک فایل
- …
حالا این شما هستید که باید بر اساس نیاز خود دست به کار شوید و از قدرت دستور which برای اجرای تسک های موردنظر خود استفاده کنید.
سخن آخر
دستور which در لینوکس برای نمایش مسیر فایل های اجرایی دستورات یا برنامه های موردنظر استفاده می شود و می توان آن را در زمینه هایی مثل شناسایی مسیر فایل های اجرایی، بررسی وضعیت نصب دستورات، حل تضادهای مربوط به مسیر دستورات و برنامه ها و … به کار برد.