این آزمون چهار درس بخش «متن، ورودی و خروجی» را میسنجد. جواب هر سؤال همان لحظه با توضیح نشان داده میشود و نتیجهات در همین مرورگر ذخیره میشود (پیشرفت من).
شمارهی stdout و stderr به ترتیب؟
0 stdin است.
تفاوت > و >>؟
با > محتوای قبلی از دست میرود.
کدام دستور هر دو جریان (خروجی و خطا) را در یک فایل میریزد؟
ترتیب مهم است: اول فایل، بعد 2>&1.
cmd >/dev/null 2>&1 یعنی…
برای اجرای بیصدا در cron و اسکریپت.
چرا sudo echo x > /etc/file خطا میدهد؟
فقط echo با sudo اجرا میشود، نه redirect.
چرا sort f > f خطرناک است؟
از sort f -o f یا فایل موقت استفاده کن.
علامت | چه میکند؟
pipe یک لولهی هسته بین دو پروسه است.
چرا قبل از uniq -c معمولاً sort میزنیم؟
sort یکسانها را کنار هم میآورد.
برای ۱۰ مقدار پرتکرار ستون اول یک فایل؟
الگوی «پرتکرارترینها».
xargs چه میکند؟
برای دستورهایی مثل rm که از stdin نمیخوانند.
grep -rn ERROR dir چه میکند؟
-r بازگشتی و -n شمارهی خط.
برای «ERROR یا WARN» با grep؟
در BRE | عادی است؛ -E یا \| لازم است.
در regex نقطه (.) یعنی…
مثلاً 1.5 با 125 هم جور میشود.
sed 's/a/b/g' چه میکند؟
g یعنی global.
awk -F: '{print $1, $7}' /etc/passwd چه میدهد؟
-F جداکنندهی فیلد را تعیین میکند.
یک لاگ وبسرور داری (فرمت: IP - - [زمان] "GET مسیر HTTP/1.1" کد حجم). با ابزارهای همین بخش یک گزارش چهاربخشی بساز و همهی خروجیها را هم در report.txt و هم روی صفحه نشان بده (با tee):
۱. تعداد کل درخواستها و تعداد IP های یکتا.
۲. ۳ آدرس IP پرتکرار (با cut | sort | uniq -c | sort -rn | head).
۳. تعداد درخواستها به ازای هر کد وضعیت (با awk و آرایه).
۴. فهرست مسیرهایی که خطای 404 گرفتهاند (یکتا و مرتب)، بههمراه تعداد خطا برای هر کدام.
۵. خطاهای ۴xx و ۵xx را (فقط خطهایشان) در errors.log و بقیهی خطها را در ok.log بریز و تعداد هر فایل را بنویس.
راهنمایی
برای ۴: awk '$9 == 404 {print $7}' access.log | sort | uniq -c | sort -rn. برای ۵: awk '$9 ~ /^[45]/ {print > "errors.log"; next} {print > "ok.log"}' access.log.
راهحل
# ساخت لاگ نمونه (۶۰۰ خط)awk 'function rnd(n) { x = (x * 69069 + 1) % 4294967296; return int(x / 65536) % n }BEGIN { x = 7 split("203.0.113.5 203.0.113.5 203.0.113.5 198.51.100.7 198.51.100.7 192.0.2.44 192.0.2.8", ip, " ") split("200 200 200 200 301 404 404 500", st, " ") split("/index.html /about /api/users /login /old-page", pa, " ") for (i = 1; i <= 600; i++) printf "%s - - [03/Oct/2026:12:%02d:%02d +0000] \"GET %s HTTP/1.1\" %s %d\n", ip[rnd(7)+1], int(i/60)%60, i%60, pa[rnd(5)+1], st[rnd(8)+1], 100 + rnd(900)}' > access.log{echo "== ۱) کل درخواستها و IP یکتا"echo "کل: $(wc -l < access.log) IP یکتا: $(cut -d' ' -f1 access.log | sort -u | wc -l)"echo "== ۲) ۳ IP پرتکرار"cut -d' ' -f1 access.log | sort | uniq -c | sort -rn | head -3echo "== ۳) کدهای وضعیت"awk '{c[$9]++} END {for (k in c) print c[k], k}' access.log | sort -rnecho "== ۴) مسیرهای 404"awk '$9 == 404 {print $7}' access.log | sort | uniq -c | sort -rn} | tee report.txtawk '$9 ~ /^[45]/ {print > "errors.log"; next} {print > "ok.log"}' access.logecho "== ۵) errors.log: $(wc -l < errors.log) خط | ok.log: $(wc -l < ok.log) خط | گزارش: $(wc -l < report.txt) خط"== ۱) کل درخواستها و IP یکتاکل: 600 IP یکتا: 4== ۲) ۳ IP پرتکرار 226 203.0.113.5 193 198.51.100.7 100 192.0.2.8== ۳) کدهای وضعیت295 200140 40490 50075 301== ۴) مسیرهای 404 34 /about 33 /api/users 26 /old-page 26 /index.html 21 /login== ۵) errors.log: 230 خط | ok.log: 370 خط | گزارش: 17 خط