این آزمون پنج درس بخش اول را میسنجد: کامپیوتر از چه ساخته شده؟، بیت، بایت و اعداد باینری، متن در کامپیوتر، فایل، پوشه و مسیر و سیستمعامل و برنامههای در حال اجرا. بعد از هر پاسخ، جواب درست و توضیح کامل (و برای بعضی سؤالها دلیل غلط بودن گزینههای دیگر) نشان داده میشود. نتیجهات در همین مرورگر ذخیره میشود (پیشرفت من).
سایت فروشگاهی هر شب ساعت ۹ کند میشود. در همان ساعت
free -hنشان میدهد ستونavailableتقریباً صفر است ولی دیسک ۳۰٪ پُر است. پیشنهاد درست چیست؟جواب درست: RAM بیشتر بگیریم، چون وقتی RAM تمام شود سیستمعامل از دیسک کند کمک میگیرد
علامت مشکل RAM این است که
availableبه صفر برسد. در این حالت سیستمعامل مجبور میشود بخشی از داده را روی دیسک (swap) بگذارد که هزاران برابر از RAM کندتر است و همهچیز کند میشود. دیسک پر نیست، پس مشکل ظرفیت دیسک نیست.- دیسک بزرگتر بخریم ← دیسک فقط ۳۰٪ پُر است؛ مشکل فضای ذخیرهسازی نیست.
- پردازندهی سریعتر بخریم ← قبل از ارتقای پردازنده باید ببینی پردازنده واقعاً مشغول است؛ علامت اینجا کمبود RAM است.
- سرعت اینترنت را بالا ببریم ← اینترنت مربوط به ارتباط با کاربر است؛ علامت اینجا مصرف داخلی RAM است.
برنامهای متغیری را در حافظه نگه میدارد و یک عدد را هم در فایل مینویسد. بعد از بسته شدن و اجرای دوبارهی برنامه چه چیزی میماند؟
جواب درست: فقط فایل؛ متغیر در RAM بود و با پایان برنامه از بین رفت
RAM موقت است و با بسته شدن برنامه آزاد میشود؛ فایل روی دیسک میماند. این همان مثال شمارنده در درس اول بود: متغیر هر بار ۱ شد، فایل ۱ و ۲ و ۳.
- هر دو ← متغیر در RAM بود و آزاد شد.
- فقط متغیر ← برعکس: دیسک میماند نه RAM.
- هیچکدام ← فایل روی دیسک ذخیره شده و باقی میماند.
عدد باینری
1100در مبنای ۱۰ چند است؟جواب درست: ۱۲
جایگاهها از چپ ۸، ۴، ۲، ۱ هستند.
1100یعنی ۱ هشت + ۱ چهار + ۰ دو + ۰ یک = ۸ + ۴ = ۱۲.- ۴ ← ۴ فقط رقم دوم را حساب کرده؛ رقم اول (جایگاه ۸) را هم باید جمع کنی.
- ۸ ← ۸ فقط رقم اول است؛ رقم دوم (جایگاه ۴) هم یک است.
- ۱۱۰۰ ← ۱۱۰۰ همان نوشتهی باینری است؛ سؤال مقدار در مبنای ۱۰ را میخواهد.
اینترنت «۲۴۰ مگابیت در ثانیه» داری. حداکثر سرعت دانلود فایل (به مگابایت در ثانیه) چقدر است؟
جواب درست: ۳۰
هر بایت ۸ بیت است؛ برای تبدیل مگابیت به مگابایت تقسیم بر ۸ میکنیم: ۲۴۰ ÷ ۸ = ۳۰ مگابایت در ثانیه. (در عمل کمی کمتر میشود.)
- ۲۴۰ ← ۲۴۰ مگابیت است و برنامههای دانلود مگابایت نشان میدهند.
- ۱٬۹۲۰ ← ضرب در ۸ جهت اشتباه است؛ از بیت به بایت باید تقسیم کرد.
- ۲۴ ← ۲۴ مربوط به تقسیم بر ۱۰ است، نه بر ۸.
چرا هگز (مبنای ۱۶) برای برنامهنویسها محبوب است؟
جواب درست: چون هر رقم هگز دقیقاً ۴ بیت است و یک بایت دو رقم هگز میشود؛ خواندن و نوشتنش از باینری کوتاهتر و راحتتر است
کامپیوتر فقط باینری میفهمد. هگز یک **نوشتار کوتاهتر** برای همان بیتهاست:
11111101010(یازده رقم) میشود7ea(سه رقم). فشردهسازی یا امنیت در کار نیست؛ فقط راحتی خواندن است.- چون کامپیوتر هگز میفهمد ← کامپیوتر فقط باینری میفهمد؛ هگز فقط راه نوشتن آدمی است.
- چون هگز امنتر است ← هگز هیچ امنیتی اضافه نمیکند؛ فقط شکل نمایش است.
- چون هگز فشرده میکند ← اندازهی داده را کم نمیکند؛ فقط ظاهر کوتاهتر دارد.
در
xxdدیدی کلمهی «سلام» در UTF-8 هشت بایت است. چرا؟جواب درست: چون هر حرف فارسی در UTF-8 دو بایت جا میگیرد: ۴ × ۲
در الگوی UTF-8، حرفهای فارسی و عربی دو بایت میشوند (۱۱۰xxxxx ۱۰xxxxxx). «سلام» چهار حرف دارد: ۴ × ۲ = ۸. حرف انگلیسی یک بایت است و ایموجی چهار بایت.
- چون «سلام» هشت حرف دارد ← سلام چهار حرف است نه هشت؛ تفاوت حرف و بایت همینجاست.
- چون کامپیوتر فارسی را بیشتر دوست دارد ← کامپیوتر ترجیح ندارد؛ فقط قرارداد encoding است.
- چون UTF-8 هر چیزی را دو برابر میکند ← UTF-8 همه چیز را دو برابر نمیکند: انگلیسی یک بایت و ایموجی چهار بایت است.
فایل CSV در اکسل بهجای «علی» نوشتهی
ط¹ظ„غŒرا نشان میدهد. چه اتفاقی افتاده؟جواب درست: بایتهای UTF-8 با encoding اشتباه (مثلاً cp1256) خوانده شدهاند؛ باید با UTF-8 باز شود
بایتها سالماند، ولی خواننده با «دفترچهی رمز» دیگری آنها را میخواند. راهحل: هنگام باز کردن یا وارد کردن فایل encoding را UTF-8 انتخاب کنی.
- فایل خراب است ← اگر فایل خراب بود در همهی برنامهها خراب دیده میشد.
- اکسل فارسی را پشتیبانی نمیکند ← اکسل فارسی را نشان میدهد؛ مشکل فقط encoding است.
- فونت فارسی نصب نیست ← مشکل فونت با مربع (□) دیده میشود، نه حرفهای دیگر.
چرا جستجوی «علی» در متنی که «علي» (با ي عربی) دارد جواب نمیدهد؟
جواب درست: این دو «ی» در یونیکد شمارهی متفاوت دارند و برای کامپیوتر دو حرف جدایند؛ راهحل نرمالسازی متن است
یای فارسی
U+06CCو یای عربیU+064Aاست. کامپیوتر فقط شمارهها را مقایسه میکند. پیش از ذخیره یا جستجو، «ي» را به «ی» و «ك» را به «ک» تبدیل کن.- جستجو خراب است ← جستجو درست کار میکند و دقیق مقایسه میکند.
- فارسی را نمیشود جستجو کرد ← جستجوی فارسی ممکن است؛ فقط حرفها باید یکسان باشند.
- حروف رنگ متفاوت دارند ← رنگ در متن وجود ندارد.
در پوشهی
/home/ali/shop/jsهستی. مسیر نسبی../css/style.cssبه کدام فایل اشاره میکند؟جواب درست: /home/ali/shop/css/style.css
..یعنی یک پوشه بالاتر؛ ازjsبهshop. بعد واردcssو فایلstyle.cssمیشویم:/home/ali/shop/css/style.css.- /home/ali/shop/js/css/style.css ← این یعنی
cssداخلjsباشد؛ اما..یک پوشه به بالا میرود. - /home/ali/css/style.css ← برای رسیدن به این مسیر باید
../../css/style.cssمینوشتی (دو پوشه بالا). - /css/style.css ← این مسیر از ریشه شروع میشود، در حالی که مسیر ما نسبی است.
- /home/ali/shop/js/css/style.css ← این یعنی
روی سرور لینوکس فایل
Logo.PNGداری، ولی سایت تصویر/logo.pngرا نمییابد (۴۰۴). علت محتمل؟جواب درست: لینوکس به حروف بزرگ و کوچک حساس است؛
logo.pngباLogo.PNGدو اسم متفاوت استدر ویندوز معمولاً فرقی نمیکند، برای همین روی لپتاپ کار میکند و روی سرور لینوکس نه. اسمها را یکدست و ترجیحاً با حروف کوچک بنویس.
- سرور خراب است ← سرور سالم است؛ فقط اسم فایل را پیدا نمیکند.
- تصویر فشرده شده ← فشردگی ربطی به پیدا نشدن فایل ندارد.
- پسوند PNG پشتیبانی نمیشود ← پسوند PNG همهجا پشتیبانی میشود.
فایل
notes.txtدر واقع یک تصویر PNG است که اسمش را عوض کردهاند.file notes.txtچه میگوید؟جواب درست: PNG image data
fileاز روی چند بایت اول محتوا (شمارهی جادویی؛ برای PNG امضای89 50 4e 47) نوع واقعی را میگوید و به پسوند اعتنا نمیکند.- ASCII text ← ASCII text یعنی محتوا متن است؛ این فایل محتوای تصویر دارد.
- خطا میدهد ←
fileبرای همهی فایلها جواب میدهد و خطا نمیدهد. - empty ← فایل خالی نیست؛ محتوای تصویر دارد.
چرا
mv big.iso /tmp/داخل همان دیسک آنی است ولیcp big.iso /tmp/دقایق طول میکشد؟جواب درست: mv فقط اسم را در جدول پوشه عوض میکند (بایتها جابهجا نمیشوند)؛ cp همهی بایتها را دوباره مینویسد
اسم فایل در جدول پوشهی والد است.
mvداخل یک دیسک فقط همان خط را عوض میکند.cpیک فایل جدید میسازد و همهی داده را مینویسد. (جابهجایی بین دو دیسک مثل کپی + حذف است.)- mv فشرده میکند ←
mvداده را فشرده نمیکند. - cp از اینترنت استفاده میکند ← کپی داخلی است و اینترنت لازم ندارد.
- mv فایل را حذف میکند ← فایل بعد از
mvکاملاً وجود دارد.
- mv فشرده میکند ←
در
topهشت پروسهی پرمصرف روی ماشین چهارهستهای میبینی. جمع%CPUحدوداً چند است؟جواب درست: حدود ۴۰۰٪ (ظرفیت کل چهار هسته)
هر هسته حداکثر ۱۰۰٪ دارد؛ پس چهار هسته حداکثر ۴۰۰٪. وقتی پروسهها بیشتر از هستهها باشند، سیستمعامل پردازنده را بینشان نوبتی تقسیم میکند و جمع به ۴۰۰٪ میرسد، نه بیشتر.
- ۸۰۰٪ ← هشت پروسه نمیتوانند بیش از ظرفیت فیزیکی چهار هسته مصرف کنند.
- ۱۰۰٪ ← ۱۰۰٪ فقط ظرفیت یک هسته است؛ اینجا چهار هسته داریم.
- ۴۰٪ ← ۴۰٪ خیلی کم است؛ همهی هستهها مشغولاند.
کاربر معمولی
kill 1(پروسهی شمارهی ۱ که مال root است) را میزند و خطایOperation not permittedمیگیرد. چرا؟جواب درست: سیستمعامل اجازه نمیدهد کاربر معمولی پروسهی کاربر دیگر (root) را ببندد
هر پروسه صاحب دارد و سیستمعامل فقط به صاحب (و مدیر) اجازهی بستنش را میدهد. اگر پروسه وجود نداشت پیام
No such processمیدیدی.- پروسه وجود ندارد ← وجود ندارد؟ پیام برای آن حالت
No such processاست. - ترمینال قفل است ← ترمینال سالم است؛ پیام از سیستمعامل است.
- RAM پر است ← RAM ربطی به اجازهی بستن پروسه ندارد.
- پروسه وجود ندارد ← وجود ندارد؟ پیام برای آن حالت
هنگام
strace cat /etc/hostnameدیدیcatبایدopenatرا صدا بزند. اصلاً چرا برنامه خودش دیسک را نمیخواند؟جواب درست: چون برنامهها در حالت محدود (حالت کاربر) اجرا میشوند و فقط هسته اجازهی کار مستقیم با سختافزار دارد؛ برنامه باید از هسته درخواست (system call) کند
این یکی از مهمترین طراحیهای سیستمعامل است: اگر هر برنامه میتوانست مستقیم به دیسک و RAM دست بزند، یک برنامهی خراب (یا بدخواه) کل سیستم را خراب میکرد. هسته مجوز را چک میکند و بعد کار را انجام میدهد.
- چون دیسک کند است ← کند بودن علت این طراحی نیست؛ امنیت و ثبات علت است.
- چون cat خراب است ←
catسالم است؛ همهی برنامهها همینطور کار میکنند. - چون فایلها رمز دارند ← رمز در کار نیست؛ مسئلهی دسترسی به سختافزار است.
یک اسکریپت 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".
راهحل
#!/usr/bin/env bash# one-page report: CPU, RAM, disk, OS and the top RAM consumerscpu=$(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"fibash sysreport.shrm -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 coresRAM : 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 هر ساعت اجرا و نتیجه را ذخیره کرد.