نصب و مدیریت برنامهها در لینوکس با استفاده از دستور apt-get
در لینوکس به جای دانلود یک فایل اجرایی (exe) از یک وبسایت، اجرای آن و آرزوی اینکه فایل اجرایی دانلود شده فایلهای کتابخانهای (DLL) قبلی شما را به هم نریزد، و یا نرمافزارهای مخرب و مشکوک بر روی سیستم شما نصب نکند، فایلهای مورد نیازتان را مستقیماً از گنجینهای غنی از نرمافزارها که مخزن یا ریپازیتوری (repositories) نامیده میشوند دریافت میکنید. همهی نرمافزارهای موجود در مخزن برای همان توزیع بستهبندی شده و برای سازگاری با بقیهی توزیعها هم آزمایش شدهاند.
در این آموزش، خواهیم دید که نصب نرمافزار در توزیعهایی که از Advanced Packaging Tool یا به اختصار apt استفاده میکنند، چگونه انجام میشود. apt سیستم مدیریت نرمافزاری است که توسط دبیان توسعه داده شده و توسعههایی از اوبونتو گرفته تا رازبیان (توزیع مخصوص رزبری پای) از آن استفاده میکنند.
مخازن (ریپازیتوریها)
یک مخزن مجموعهای از پکیجهای نرمافزاری برای یک توزیع خاص است. هر نسخهی اصلی یک توزیع لینوکس، مخزن مخصوص به خودش را دارد و پکیجها برای آن نسخه ساخته و تست میشوند. اما مخزن چیزی بیش از مجموعهای از فایلها است.
هر مخزن (که گاهی به اختصار به آن ریپو (repo) هم گفته میشود) ایندکس شده است تا یافتن چیزی که میخواهید در آن به آسانی صورت بگیرد. همچنین بدون اینکه نیازی به سر زدن به وبسایت هر نرمافزار وجود داشته باشد، میتوان به آسانی آپدیت بودن مدیریت پکیج را چک کرد.
از همه مهمتر، هر پکیج موجود در مخزن توسط کلید (GPG (GNU Privacy Guard امضا شده است، که موقع نصبِ پکیجها این امضاء بررسی میشود. این بدان معنا است که میتوانید به نرمافزار نصب شده از مخزن اطمینان کنید و مطمئن باشید که دقیقاً همان چیزی است که قرار است باشد، نه یک تروجان که با اهداف پلیدی آپلود شده است. ماهیت لینوکس و به طور کلی سیستمهای مبتنی بر Unix تأکید بر حفظ حریم خصوصی و امنیت کاربران در برابر هر نوع مهاجم خارجی است. در این راستا تلاشهای گستردهای هم صورت گرفته که این مورد هم یکی از آنها است.
البته فراموش نکنید که هویت و اعتبار این امضاها به واسطهی مجموعههای امنیتی نرم افزاری داخل سیستم عامل موسوم به keyrings محرز میشود و در صورت دستکاری این مجموعه ها تمهیدات امنیتی ابزارهایی مثل apt بی اثر خواهد بود. در مواقع نادری که امضای پکیج معتبر نباشد، ابزار apt به شما هشدار میدهد و برای ادامه فرایند نصب سؤال می پرسد. در این حالت یا واقعاً بستهی نامعتبر و مخربی برای سیستم شما ارسال شده، یا نیاز است که مجموعه keyring سیستم آپدیت شود که معمولاً حالت اول برقرار است؛ چرا که فرایند آپدیت و نصب این مجموعه ها بدون دخالت کاربر انجام می شود. اما میتوانید با جستجو در اینترنت بررسی کنید که آن بستهی خاص نیازمند چه کلیدهایی است و اگر لازم است که مجموعه keyring آپدیت شود، باید برای آن بسته به طریقی اقدام کنید.
مخزن همچنین ادارهی وابستگیها (dependency) را هم راحت میکند. وابستگی برنامهای است که نرمافزاری که میخواهید نصب کنید برای اجرا به آن نیاز دارد؛ چیزی شبیه کتابخانه (library) و فایلهای DLL در ویندوز. با این تفاوت که در ویندوز همه چیز در پکیج بستهبندی میشود و بعد از مدتی کپیهای یکسان متعددی از یک کتابخانه بر روی کامپیوتر خود خواهید داشت، در حالی که در لینوکس پکیج به سادگی وابستگیهای خود را لیست میکند، تا پکیج منیجر بتواند بررسی کند که آیا آنها از قبل بر روی کامپیوتر شما نصب هستند یا باید آنها را از مخزن دریافت و نصب کند.
علاوه بر مخازن پیشفرض که توسط توزیعها فراهم میشوند، انواع مخازن شخص ثالثی هم وجود دارند که میتوانید آنها را به پکیج منیجرتان اضافه کنید. توجه داشته باشید که تضمینی وجود ندارد که این مخازن هم با همان استانداردهای انواع رسمی تست شده و قابل اعتماد باشند؛ اما خیلی از آنها بسیار خوب هستند و اگر از مخازن مشهور و خوشنام برای توزیع خود استفاده میکنید، کار چندان خطرناک و اشتباهی انجام ندادهاید.
اوبونتو هم مفهوم جدیدی به نام آرشیو پکیج شخصی (Personal Package Archive) یا به اختصار PPA را معرفی کرده است، که در واقع مخازن کوچکی برای پروژههای شخصی است. اینها هم هرکدام میتوانند به صورت جداگانه به پکیج منیجر شما اضافه شوند، اما مواظب باشید که هیچ منبع نامطمئنی را اضافه نکنید.
مدیریت پکیجها
تا اینجای متن چندین بار از عبارت "پکیج منیجر" استفاده کردهایم؛ اما این عبارت به چه معنا است؟ به بیان ساده، پکیج منیجر برنامهای است که شما را قادر میسازد تا نرمافزارها را نصب، آپدیت و پاک کرده و همچنین به وابستگیها هم رسیدگی کنید. علاوه بر عملکردهای دیگر، شما میتوانید با استفاده از آن به جستجوی برنامههای مورد علاقهتان بپردازید. همهی توزیعها ابزار خط فرمان مدیریت پکیج دارند. میتوانید با استفاده از سرچ سیستم خود و جستجوی عبارت terminal و یا استفاده از کلیدهای ترکیبی Ctrl+Alt+T در دسکتاپهایی مثل Unity، Gnome یا Xfce (حتی اگر این دسکتاپها از ظاهر گرافیکی فانتزی هم استفاده کنند) به آن دسترسی پیدا کنید. دستورات اصلی عبارتند از:
apt-get: پکیجها را نصب، آپدیت و حذف میکند.
apt-cache: این دستور با فایلهای ایندکس مخزن کار میکند، مانند جستجو برای پکیجها
add-apt-repository: مخازن جدید به سیستم اضافه میکند.
Dpkg: ابزاری برای نصب پکیج های دبیان که معمولاً از روی فایلهای مخصوص با فرمت deb انجام می شود. این دستور بر خلاف apt-get اقدام به نصب وابستگیها نمیکند. میتوان این دستور را نسخهی سادهای از apt در نظر گرفت.
این دستورات معمولاً احتیاج به دسترسی روت (superuser) دارند، پس باید در روت یا با sudo اجرا شوند. ما در اینجا از روش sudo وارد میشویم. قبلاً اشاره کردیم که مخازن ایندکس میشوند، پس اولین کاری که باید بکنید این است که فایلهای ایندکس خود را آپدیت کنید تا با محتویات فعلی مخزن مطابقت داشته باشند. انجام این کار با دستور زیر صورت میگیرد:
sudo apt-get update
بعد از آن احتمالاً میخواهید مطمئن شوید که سیستم شما آپدیت است:
sudo apt-get upgrade
این دستور پکیجهایی که قرار است نصب شوند را لیست میکند و به شما میگوید که چقدر فضا برای نصب آنها نیاز است. پس از تایید شما پکیجها دانلود و نصب میشوند. همچنین میتوانید از دستور زیر استفاده کنید که علاوه بر انجام وظیفهی دستور بالا، به شکل هوشمندانهای به مدیریت تغییرات وابستگیها و نسخه های مختلف پکیج ها میپردازد:
sudo apt-get dist-upgrade
این دستور از یک طراحی نرم افزاری تحت عنوان "مدیریت تداخل هوشمند" برخوردار است که نصب پکیجها را بنا بر اهمیت آنها اولویت بندی کرده و در صورت نیاز برای حفظ و پایداری پکیج های مهم و جدید، برخی پکیج های مرتبط و قدیمی را از سیستم عامل حذف میکند.
وقتی بخواهید نرمافزارهای جدید نصب کنید، اگر اسم دقیق نرمافزار را ندانید، شاید بخواهید آن را اینگونه جستجو کنید (در دستور زیر به دنبال نرمافزار ویرایش تصاویر GIMP میگردیم):
apt-cache search gimp
دستور فوق لیست بلندبالایی از نرمافزارها را نمایش میدهد؛ چرا که هم در نام، و هم در توضیحات نرمافزارها به جستجو میپردازد و هر چیزی که کوچکترین اشارهای به نام gimp کرده باشد را لیست میکند. برای جستجو در میان نام نرمافزارها به این صورت از گزینهی n– یا names-only-- استفاده کنید:
apt-cache search -n gimp
این دستور معمولاً نتایج مرتبطتری را نمایش میدهد، ولی شاید باز هم نتایج به قدری زیاد باشند که در پنجرهی ترمینال شما جای نگیرند. راه حل این مشکل استفاده از دستور less است:
apt-cache search -n gimp | less
دستور less یک صفحه ساز است که به شما این امکان را میدهد که متن را صفحه به صفحه بخوانید. این دستور میتواند در هر برنامهای که خروجی ترمینال زیادی تولید میکند استفاده شود تا بتوان نتایج را راحتتر مطالعه کرد. دستور بالا از تکنیک معروف خط لوله یا PIPE استفاده میکند. این تکنیک یکی از قدرتمندترین و مفیدترین ویژگیهای خط فرمان لینوکس است.
وقتی که پکیج مورد نظر خود را پیدا کردید، نصب آن به راحتی هر چه تمام و به این صورت است:
sudo apt-get install gimp
دستور بالا نرمافزار gimp را دانلود و نصب میکند. همچنین میتواند با استفاده از دستور apt-get چندین برنامه را به صورت همزمان نصب کنید:
sudo apt-get install program1 program2...
شاید نرم افزاری که نصب کردهاید دقیقاً همان چیزی که انتظار داشتید نباشد و بخواهید آن را اینگونه پاک کنید:
sudo apt-get remove program1
برای همین منظور میتوانید از دستور زیر هم استفاده کنید:
sudo apt-get purge program1
هر دو دستور بالا نرمافزار را پاک میکنند، اما دستور remove فایلهای تنظیمات نرمافزار را باقی میگذارد در حالی که دستور purge این فایلها را هم پاک میکند.
گزینههای دیگری هم هستند که هنگام استفاده از دستور apt-get میتوانید از آنها استفاده کنید. با استفاده از دستور man به صورت man apt-get میتوانید لیست کاملی از این گزینهها را مشاهده کنید. یکی از مفیدترین این گزینهها dry-run-- است. این دستور به شما نشان میدهد که دستور apt-get ای که میخواهید اجرا کنید چکار میکند، بدون اینکه دستور اجرا شود. اگر مطمئن نیستید دستوری که در ترمینال تایپ کردهاید قرار است چکار کند، استفاده از این گزینه بسیار مفید است. به یاد داشته باشید کامپیوترها هر کاری که به آنها بگویید را انجام میدهند، نه لزوماً هر کاری که در نظر دارید! در نهایت معمولاً نیازی به استفاده از دستور dpkg نیست، ولی لیست کردن همهی چیزهایی که نصب کردهاید با استفاده از دستور dpkg –l میتواند مفید باشد. دقت کنید که تقریباً در تمامی دستورات لینوکس کوچک و بزرگ بودن حروف اهمیت دارد و دستورات لینوکس به اصطلاح Case Sensitive هستند. به طور مثال در دستور بالا با نوشتن L (حرف ال بزرگ انگلیسی) دستور مفهوم دیگری خواهد داشت.
در پایان لازم به یادآوری است که به علت گستردگی و قدرت بالای ترمینال لینوکس معمولاً برای انجام هر کاری چندین و چند روش مختلف وجود دارد. آنچه در بالا گفته شد تنها تعدادی از راهکارهای متداولتر بود. در همین راستا جوامع گنو/لینوکس اصطلاح معروفی دارند که میگوید:
where there's a shell, there's a way