رفتن به محتوا

آزمون بخش ۱: کامپیوتر از درون

این آزمون پنج درس بخش اول را می‌سنجد: کامپیوتر از چه ساخته شده؟، بیت، بایت و اعداد باینری، متن در کامپیوتر، فایل، پوشه و مسیر و سیستم‌عامل و برنامه‌های در حال اجرا. بعد از هر پاسخ، جواب درست و توضیح کامل (و برای بعضی سؤال‌ها دلیل غلط بودن گزینه‌های دیگر) نشان داده می‌شود. نتیجه‌ات در همین مرورگر ذخیره می‌شود (پیشرفت من).

آزمون بخش ۱
  1. سایت فروشگاهی هر شب ساعت ۹ کند می‌شود. در همان ساعت free -h نشان می‌دهد ستون available تقریباً صفر است ولی دیسک ۳۰٪ پُر است. پیشنهاد درست چیست؟

  2. برنامه‌ای متغیری را در حافظه نگه می‌دارد و یک عدد را هم در فایل می‌نویسد. بعد از بسته شدن و اجرای دوباره‌ی برنامه چه چیزی می‌ماند؟

  3. عدد باینری 1100 در مبنای ۱۰ چند است؟

  4. اینترنت «۲۴۰ مگابیت در ثانیه» داری. حداکثر سرعت دانلود فایل (به مگابایت در ثانیه) چقدر است؟

  5. چرا هگز (مبنای ۱۶) برای برنامه‌نویس‌ها محبوب است؟

  6. در xxd دیدی کلمه‌ی «سلام» در UTF-8 هشت بایت است. چرا؟

  7. فایل CSV در اکسل به‌جای «علی» نوشته‌ی ط¹ظ„غŒ را نشان می‌دهد. چه اتفاقی افتاده؟

  8. چرا جستجوی «علی» در متنی که «علي» (با ي عربی) دارد جواب نمی‌دهد؟

  9. در پوشه‌ی /home/ali/shop/js هستی. مسیر نسبی ../css/style.css به کدام فایل اشاره می‌کند؟

  10. روی سرور لینوکس فایل Logo.PNG داری، ولی سایت تصویر /logo.png را نمی‌یابد (۴۰۴). علت محتمل؟

  11. فایل notes.txt در واقع یک تصویر PNG است که اسمش را عوض کرده‌اند. file notes.txt چه می‌گوید؟

  12. چرا mv big.iso /tmp/ داخل همان دیسک آنی است ولی cp big.iso /tmp/ دقایق طول می‌کشد؟

  13. در top هشت پروسه‌ی پرمصرف روی ماشین چهارهسته‌ای می‌بینی. جمع %CPU حدوداً چند است؟

  14. کاربر معمولی kill 1 (پروسه‌ی شماره‌ی ۱ که مال root است) را می‌زند و خطای Operation not permitted می‌گیرد. چرا؟

  15. هنگام strace cat /etc/hostname دیدی cat باید openat را صدا بزند. اصلاً چرا برنامه خودش دیسک را نمی‌خواند؟

🏁 چالش: گزارش وضعیت ماشینمتوسط

یک اسکریپت sysreport.sh بنویس که در یک صفحه این‌ها را چاپ کند:

۱. مدل پردازنده و تعداد هسته (lscpu، nproc). ۲. RAM کل و RAM در دسترس به گیگابایت (free)، و درصد RAM در دسترس. ۳. اندازه‌ی دیسک اصلی و درصد پُری (df). ۴. نسخه‌ی هسته و اسم توزیع (uname، /etc/os-release). ۵. سه پروسه‌ی پرمصرف از نظر RAM با PID و RSS به مگابایت (ps). ۶. اگر RAM در دسترس کمتر از ۱۰٪ بود، پیام هشدار چاپ کند.

راهنمایی

برای اعشار از awk استفاده کن (awk '{printf "%.1f", $2/1024}'). free -m مگابایت می‌دهد (ستون $2 کل، $7 در دسترس). برای RSS در ps به کیلوبایت است؛ تقسیم بر ۱۰۲۴ مگابایت. اسم توزیع: . /etc/os-release; echo "$PRETTY_NAME".

راه‌حل
sysreport.sh
#!/usr/bin/env bash
# one-page report: CPU, RAM, disk, OS and the top RAM consumers
cpu=$(lscpu | awk -F': +' '/Model name/ {print $2}')
cores=$(nproc)
read -r total avail < <(free -m | awk '/^Mem:/ {print $2, $7}')
pct=$(awk -v a="$avail" -v t="$total" 'BEGIN {printf "%.0f", a / t * 100}')
disk=$(df -h / | awk 'NR == 2 {print $2 " total, " $5 " used"}')
. /etc/os-release
echo "== machine report =="
echo "OS : $PRETTY_NAME (kernel $(uname -r))"
echo "CPU : $cpu, $cores cores"
awk -v t="$total" -v a="$avail" -v p="$pct" 'BEGIN {printf "RAM : %.1f GB total, %.1f GB available (%s%%)\n", t / 1024, a / 1024, p}'
echo "Disk / : $disk"
echo "-- top 3 processes by RAM --"
ps -eo pid,rss,comm --sort=-rss | awk 'NR > 1 && NR <= 4 {printf " PID %-6s %6.1f MB %s\n", $1, $2 / 1024, $3}'
if [ "$pct" -lt 10 ]; then
echo "WARNING: less than 10% RAM available"
fi
Terminal window
bash sysreport.sh
rm -f sysreport.sh
خروجی
== machine report ==
OS : Ubuntu 24.04.5 LTS (kernel 6.18.44-fc-v139)
CPU : Intel(R) Xeon(R) Processor @ 2.10GHz, 4 cores
RAM : 15.7 GB total, 15.1 GB available (96%)
Disk / : 252G total, 31% used
-- top 3 processes by RAM --
PID 5182 4.0 MB ps
PID 5168 3.9 MB bash
PID 5183 3.8 MB awk

گزارش همه‌ی شش خواسته را یک‌جا داد: lscpu و nproc برای پردازنده، free -m برای RAM (ستون هفتم، available، نه free)، df -h / برای دیسک و /etc/os-release برای توزیع. ps --sort=-rss پروسه‌های پرمصرف را مرتب کرد و awk رسیدن به مگابایت را انجام داد (چون این ماشین تقریباً بیکار است، پرمصرف‌ترین‌ها همین دستورهای خود اسکریپت‌اند). شرط آخر هشدار چاپ نکرد چون ۹۶٪ RAM در دسترس است. این اسکریپت را می‌شود در دوره‌ی Bash با cron هر ساعت اجرا و نتیجه را ذخیره کرد.