مدیریت بستهها و پردازهها
نصب و بهروزرسانی نرمافزار با apt و توزیعهای دیگر، و دیدن و کنترل پردازهها با ps و top و kill.
آنچه در این درس میآموزید
- نرمافزار را از مخازن بسته نصب، بهروزرسانی و حذف کنید
- پردازههای در حال اجرا را با ps و top ببینید
- پردازهٔ سرکش را با kill پایان دهید و کدهای پشتزمینه را کنترل کنید
فهرست مطالب
دو کار در لینوکس تکرارشان میکنید تا آخر عمر: نصب نرمافزار و کنترل برنامههای در حال اجرا. هر دو از ترمینال انجام میشوند و هر دو برخلاف تصور، سادهتر از کلیک و دانلود و نصبکنندههای گرافیکیاند.
بسته و مدیر بسته چیست؟
هر برنامهٔ آمادهٔ نصب در لینوکس یک «بسته» (Package) است: فایل برنامه بهعلاوهٔ فهرست وابستگیها و نسخههایش. توزیع شما این بستهها را در «مخازن» (Repositories) رسمی جمع میکند و یک «مدیر بسته» (Package Manager) دارد که از آنها برنامه میگیرد، نصب میکند و بهروز نگه میدارد. شما آدرس برنامه را میدهید، نه لینک دانلود را؛ وابستگیها هم خودکار حل میشوند.
روی اوبونتو و دبیان مدیر بسته apt است. کار را همیشه با بهروزرسانی فهرست بستههای محلی شروع کنید:
sudo apt updateاین فرمان چیزی نصب نمیکند؛ فقط فهرست «چه چیزهایی و با چه نسخهای موجود است» را تازه میکند. بعد از آن:
sudo apt install curl # install a program
sudo apt upgrade # upgrade all installed programs
sudo apt remove curl # remove a program
apt search editor # search the package listگزینهٔ search به دسترسی مدیر نیاز ندارد چون فقط در فهرستها میگردد. خروجی نصب معمولاً طولانی است؛ شکل کلیاش چنین است:
Reading package lists... Done
Building dependency tree... Done
The following NEW packages will be installed:
curl
Setting up curl (8.5.0-2ubuntu10.6) ...پردازه چیست؟
هر برنامهٔ در حال اجرا یک «پردازه» (Process) است با یک شمارهٔ یکتا به نام PID. حتی خود ترمینال و پوستهٔ شما هم پردازهاند. برای دیدن پردازهها:
ps auxنمونهٔ خروجی (کوتاهشده):
USER PID %CPU %MEM STAT COMMAND
root 1 0.0 0.1 Ss /sbin/init
sara 2214 0.2 1.5 Ss /usr/bin/bash
sara 3407 1.8 4.2 Sl python3 app.pyستونهای کلیدی: PID شمارهٔ پردازه، %CPU و %MEM مصرف منابع و COMMAND خود برنامه. برای دیدن زنده و مرتبشدهٔ همین دادهها، فرمان top را اجرا کنید؛ فهرست را هر چند ثانیه تازه میکند و با q خارج میشوید.
پایان دادن به پردازهها
گاهی برنامهای قفل میشود یا باید آن را قطع کنید. فرمان kill به پردازهٔ هدف یک «سیگنال» میفرستد:
kill 3407 # request a clean exit (SIGTERM)
kill -9 3407 # forced exit (SIGKILL) - last resort onlyبدون گزینه، kill سیگنال SIGTERM میفرستد: به برنامه فرصت میدهد فایلهای بازش را ببندد و درست خارج شود. گزینهٔ -9 سیگنال SIGKILL است که پردازه را بدون هیچ فرصتی میکشد؛ پس فقط وقتی به کار ببرید که برنامه به SIGTERM پاسخ نمیدهد.
شمارهٔ پردازهٔ را با جستوجوی نام برنامه پیدا میکنید:
pgrep python3نمونهٔ خروجی:
3407در خود ترمینال هم راه کوتاهتری دارید: برنامهای که جلوی شما اجراست، با کلید ترکیبی Ctrl+C قطع میشود؛ همان سیگنال قطع، ولی با دست.
اجرای پشتزمینه
اگر کارِ طولانیای دارید ولی ترمینال را لازم نگه میدارید، در انتهای فرمان علامت & بگذارید:
sleep 60 &نمونهٔ خروجی:
[1] 3410فرمان بلافاصله برمیگردد و پردازهٔ تازه با شمارهٔ ۳۴۱۰ در پشتزمینه میرود؛ آن عدد در کروشه شمارهٔ کار در ترمینال فعلی است. حالا همان kill 3410 یا Ctrl+C روی فرمان جلویی، ابزار کنترل شماست.
تمرینها
تمرین
تمرین ۱ — برنامهای را نصب و حذف کنید
با apt برنامهٔ کوچک cowsay را نصب کنید، آن را اجرا کنید (کافی است cowsay hello بنویسید) و سپس حذفش کنید. فرمانهای بهروزرسانی فهرست را از یاد نبرید.
# Write your commands hereنمایش راهحل
sudo apt update
sudo apt install cowsay
cowsay hello
sudo apt remove cowsayنصب با دسترسی مدیر انجام شد ولی اجرای برنامه کاربر عادی کافی است؛ بستههای نصبشده برای همهٔ کاربران در دسترساند.
:::
تمرین
تمرین ۲ — پردازه بساز و پایان بده
با sleep 300 & یک پردازهٔ پشتزمینه بسازید، شمارهٔ آن را با pgrep sleep پیدا کنید و با kill به زندگیاش پایان دهید. سپس با pgrep دوباره تأیید کنید که پردازهای باقی نمانده است.
# Write your commands hereنمایش راهحل
sleep 300 &
pgrep sleep
kill 3420 # the number pgrep printed
pgrep sleeppgrep بعد از kill دیگر خروجیای چاپ نمیکند و فقط کد وضعیت برمیگرداند؛ یعنی پردازه تمام شده است. اگر پردازه با kill معمولی تمام نشد، آنوقت نوبت kill -9 است.
:::
خلاصه
- مدیر بسته برنامه را از مخازن رسمی با وابستگیهایش نصب میکند؛ در اوبونتو با
apt updateشروع و باapt installادامه دهید. - در فدورا
dnfو در آرچpacmanهمان نقش را دارند. - هر برنامهٔ در حال اجرا یک پردازه با شمارهٔ PID است؛
ps auxعکس لحظهای وtopنمای زنده میدهد. killپیشفرض SIGTERM میفرستد (خروج تمیز) وkill -9خروج اجباری است؛ Ctrl+C هم برای فرمان جلویی همان کار را میکند.- علامت
&فرمان را به پشتزمینه میفرستد و PID آن را چاپ میکند.
با این درس، دورهٔ لینوکس شما یک پایهٔ کامل دارد: در درخت فایلسیستم میگردید، مجوزها را میخوانید، نرمافزار نصب میکنید و پردازهها را مهار میکنید. از این نقطه به بعد، هر فرمان تازهای که یاد بگیرید فقط لایهای روی همین پایه است.