این آزمون چهار درس بخش «پروسهها و سیستم» را میسنجد. جواب هر سؤال همان لحظه با توضیح نشان داده میشود و نتیجهات در همین مرورگر ذخیره میشود (پیشرفت من).
kill -9 را چه زمانی میزنی؟
اول SIGTERM، چند ثانیه صبر، بعد SIGKILL بهعنوان آخرین راه.
دستور jobs چه چیزی را نشان میدهد؟
jobs فقط به shell فعلی مربوط است؛ برای بقیه ps یا pgrep بزن.
کدام حرف در ستون STAT خروجی ps یعنی پروسه zombie است؟
zombie مرده است و فقط منتظر والدش است که کد خروج را بخواند؛ با kill نمیمیرد.
nohup دستور & برای چیست؟
بدون آن، shell هنگام بستهشدن SIGHUP را به کارهای پسزمینه میرساند و میمیرند.
سرویسی enabled است ولی الان inactive. بعد از ریبوت چه میشود؟
enabled یعنی symlink در multi-user.target.wants؛ در هر بوت راهاندازی میشود.
در خروجی systemctl status علامت × (و failed) یعنی…
برای علت، journalctl -u نام را ببین؛ بعد از رفع، reset-failed و دوباره start.
کدام دستور لاگ یک سرویس را زنده دنبال میکند؟
-u سرویس را فیلتر میکند و -f مثل tail -f ادامه میدهد.
Restart=on-failure دارد و برنامه با کد خروج ۰ تمام میشود. چه میشود؟
برای ریستارت همیشگی Restart=always لازم است.
برای پیدا کردن اینکه کدام پوشه بیشترین جا را گرفته چه میزنی؟
df میگوید دیسک چقدر پر است؛ du میگوید چه چیزی آن را پر کرده.
free فقط ۲۰۰ مگابایت است ولی available حدود ۲ گیگابایت. وضعیت؟
لینوکس RAM بیاستفاده را به کش میدهد؛ available نشان میدهد برای برنامهی جدید چقدر هست.
load average ۰٫۵ روی سیستمی با ۸ هسته یعنی…
load را با تعداد هستهها مقایسه کن؛ بسیار کمتر از تعداد هستهها یعنی بیکار.
df -h فضای زیادی نشان میدهد ولی ساخت فایل خطای No space left on device میدهد. اول چه بزنی؟
هر فایل یک inode میخواهد؛ میلیونها فایل کوچک inode ها را تمام میکند.
DEBUG=1 python app.py چه اثری دارد؟
VAR=value دستور، متغیر را فقط برای همان دستور میگذارد.
اسکریپتی به نام ls در ~/bin هست و ~/bin اول PATH است. با ls چه اجرا میشود؟
با type -a ls همهی منطبقها را ببین؛ پوشهی خودت را اول میگذاری فقط وقتی عمداً میخواهی دستور سیستمی را عوض کنی.
alias و تابع شخصی را در کدام فایل مینویسی تا در هر ترمینال تازه فعال باشند؟
.bashrc برای هر shell تعاملی خوانده میشود؛ بعد از ویرایش source ~/.bashrc بزن.
چرا alias داخل یک اسکریپت bash کار نمیکند؟
در اسکریپت از تابع یا مسیر کامل استفاده کن.
یک سرویس کوچک بساز که ۴ درس این بخش را کنار هم بگذارد (روی ماشین systemdدار آزمایشی):
۱. اسکریپت /usr/local/bin/lx-disk-watch.sh: هر ۵ ثانیه با df درصد پر بودن / را بخواند و اگر از متغیر محیطی THRESHOLD (پیشفرض ۸۰) بیشتر یا مساوی بود، خط WARNING و در غیر این صورت OK چاپ کند.
۲. یک unit file با Environment=THRESHOLD=1 (تا هشدار فوراً فعال شود)، Restart=always و WantedBy=multi-user.target.
۳. با systemctl enable --now راهش بینداز و با journalctl -u هشدارها را نشان بده.
۴. ثابت کن متغیر واقعاً در محیط پروسه هست (با systemctl show و /proc/PID/environ).
۵. پروسهی اصلی را با kill -9 بکش و ثابت کن systemd دوباره راهش انداخت (PID جدید).
۶. همهچیز را پاک کن.
راهنمایی
برای درصد: df --output=pcent / | tail -1 | tr -dc '0-9'. در unit: Environment=THRESHOLD=1. PID اصلی: systemctl show -p MainPID --value نام. محیط پروسه: tr '\0' '\n' < /proc/PID/environ.
راهحل
cat > /usr/local/bin/lx-disk-watch.sh <<'EOF'#!/bin/bashLIMIT="${THRESHOLD:-80}"while true; do used=$(df --output=pcent / | tail -1 | tr -dc '0-9') if [ "$used" -ge "$LIMIT" ]; then echo "WARNING: دیسک ${used}% پر است (آستانه ${LIMIT}%)"; else echo "OK: دیسک ${used}% پر است"; fi sleep 5doneEOFchmod +x /usr/local/bin/lx-disk-watch.shcat > /etc/systemd/system/lx-disk-watch.service <<'EOF'[Unit]Description=Disk usage watcher (challenge)
[Service]Environment=THRESHOLD=1ExecStart=/usr/local/bin/lx-disk-watch.shRestart=alwaysRestartSec=1
[Install]WantedBy=multi-user.targetEOFsystemctl daemon-reloadsystemctl enable --now lx-disk-watchsleep 2echo "== ۳) لاگ سرویس"journalctl -u lx-disk-watch -n 2 --no-pager -o catecho "== ۴) متغیر در محیط پروسه"systemctl show -p Environment lx-disk-watchpid=$(systemctl show -p MainPID --value lx-disk-watch)tr '\0' '\n' < /proc/$pid/environ | grep '^THRESHOLD='echo "== ۵) kill -9 و ریستارت خودکار"echo "PID قبل: $pid"kill -9 $pidsleep 3echo "PID بعد: $(systemctl show -p MainPID --value lx-disk-watch) | ریستارتها: $(systemctl show -p NRestarts --value lx-disk-watch) | وضعیت: $(systemctl is-active lx-disk-watch)"echo "== ۶) پاکسازی"systemctl disable --now lx-disk-watchrm -f /etc/systemd/system/lx-disk-watch.service /usr/local/bin/lx-disk-watch.shsystemctl daemon-reloadCreated symlink /etc/systemd/system/multi-user.target.wants/lx-disk-watch.service → /etc/systemd/system/lx-disk-watch.service.== ۳) لاگ سرویسStarted lx-disk-watch.service - Disk usage watcher (challenge).WARNING: دیسک 6% پر است (آستانه 1%)== ۴) متغیر در محیط پروسهEnvironment=THRESHOLD=1THRESHOLD=1== ۵) kill -9 و ریستارت خودکارPID قبل: 586PID بعد: 600 | ریستارتها: 1 | وضعیت: active== ۶) پاکسازیRemoved "/etc/systemd/system/multi-user.target.wants/lx-disk-watch.service".