پروژهٔ پایانی؛ آزمایشگاه خانگی و گزارش قابل بازیابی
در این درس ۴ بخش
پایان این مسیر یک کار کامل است: ساخت آزمایشگاه در خانهٔ کاربر، تولید داده، جستوجو، گزارش و بازیابی پشتیبان. پروژه را روی لینوکس شخصی، ماشین مجازی یا Termux انجام دهید. آیفون نیز میتواند با SSH به میزبان لینوکسی مجاز متصل شود. خرید سرور و روتکردن گوشی شرط پروژه نیست. پیش از دیدن پاسخ، بیست دقیقه برای حل مستقل وقت بگذارید و فرمانهایتان را یادداشت کنید.
صورت مسئله و معیار پایان
یک پوشهٔ تازه با زیرپوشههای notes، reports، backups و restored بسازید. فایل notes/tasks.txt باید دقیقاً سه خط داشته باشد: دو کار با واژهٔ TODO و یک کار با DONE. فقط خطهای TODO را در reports/todo.txt ذخیره کنید. گزارش reports/summary.txt باید نوع محیط اجرا، زمان، مسیر آزمایشگاه و تعداد کارهای باز را ثبت کند. از notes و reports آرشیو بسازید، محتوا را فهرست کنید و در restored بازیابی کنید. پروژه وقتی کامل است که برابری فایل اصلی و بازیابیشده را بررسی و نتیجه را توضیح دهید.
پیش از اجرا روشن کنید: در کدام دستگاه و با کدام حساب هستم؟ پوشهٔ جاری کجاست؟ مقصد داخل خانهٔ خودم و بدون فایل مهم است؟ ابزارهای لازم موجودند؟ چه خروجی انتظار دارم؟ در SSH، میزبان و اثرانگشتش باید تأیید شده باشد. این پروژه به حذف فایل، تغییر فایروال، کاربرسازی یا دستکاری سرویس سیستم نیاز ندارد؛ برای تکمیل آن سراغ امتیاز مدیریتی نروید.
پاسخ تشریحی؛ ساخت داده و گزارش
پاسخ را در نشست Bash اجرا کنید. در Termux نیز Bash، ابزارهای پایه، grep، tar و gzip لازماند؛ بستهها را از مخزن همان محیط بگیرید. mktemp پوشهای تازه میسازد و lab مسیر آن را نگه میدارد. متن Environment گزارش را متناسب با محیط واقعی تغییر دهید. وجود هستهٔ Linux بهتنهایی مشخص نمیکند در اوبونتو، اندروید یا محیطی دیگر هستید.
lab=$(mktemp -d "$HOME/darsavand-final.XXXXXX")
mkdir "$lab/notes" "$lab/reports" "$lab/backups" "$lab/restored"
printf '%s\n' 'TODO practice paths' 'DONE create lab' 'TODO test restore' > "$lab/notes/tasks.txt"
grep '^TODO ' "$lab/notes/tasks.txt" > "$lab/reports/todo.txt"
{
printf 'Environment: personal practice shell\n'
printf 'Generated: '
date -u '+%Y-%m-%dT%H:%M:%SZ'
printf 'Lab: %s\n' "$lab"
printf 'Open tasks: '
wc -l < "$lab/reports/todo.txt"
} > "$lab/reports/summary.txt"
cat "$lab/reports/todo.txt"
cat "$lab/reports/summary.txt"دو خط شروعشده با TODO باید در خروجی دیده شود و Open tasks عدد دو باشد. الگوی ^TODO فقط خطهایی را انتخاب میکند که از ابتدای خط با این واژه و سپس فاصله شروع شدهاند؛ وجود TODO در وسط جمله کافی نیست. جهت > خروجی انتخاب را به فایل میفرستد و خطای احتمالی ابزار را به نتیجهٔ درست تبدیل نمیکند. در دادهٔ تعریفشده دو تطابق داریم؛ اگر هیچ تطابقی نبود، grep معمولاً وضعیت یک برمیگرداند که باید در یک اسکریپت متناسب با مسئله تفسیر شود.
پاسخ تشریحی؛ آرشیو و آزمون بازیابی
tar -czf "$lab/backups/project.tar.gz" -C "$lab" notes reports
tar -tzf "$lab/backups/project.tar.gz"
tar -xzf "$lab/backups/project.tar.gz" -C "$lab/restored"
cmp "$lab/notes/tasks.txt" "$lab/restored/notes/tasks.txt"
printf 'tasks comparison: %s\n' "$?"
cmp "$lab/reports/todo.txt" "$lab/restored/reports/todo.txt"
printf 'todo comparison: %s\n' "$?"
cmp "$lab/reports/summary.txt" "$lab/restored/reports/summary.txt"
printf 'summary comparison: %s\n' "$?"
printf 'Final lab: %s\n' "$lab"هر سه مقایسه باید صفر باشند. فقط اندازهٔ برابر فایلها معیار کافی نیست؛ cmp محتوا را مقایسه میکند. در فهرست آرشیو باید notes و reports و فایلهای داخل آنها را ببینید؛ backups و restored ورودی آرشیو نیستند. مقصد استخراج پوشهای خالی و متعلق به همین پروژه است. اگر نشست را بستهاید، مقدار lab دیگر لزوماً موجود نیست؛ مسیر چاپشده را از یادداشت خود بردارید و قبل از ادامه آن را با pwd و ls بررسی کنید. حدسزدن مسیر ممکن است شما را به آزمایشگاه دیگری ببرد.
بخش اختیاری: اگر میزبان SSH شخصی یا آموزشی دارید، آرشیو را با SFTP یا scp به یک پوشهٔ مجاز دیگر بفرستید، دوباره با نام تازه دریافت و در یک پوشهٔ خالی بازیابی کنید. جهت انتقال، پورت و مسیر مقصد را در گزارش بنویسید. اگر ندارید، همین بازیابی محلی پروژه را کامل میکند و میتوانید قالب انتقال را توضیح دهید. هیچ اطلاعات ورود، کلید خصوصی یا خروجی کامل تنظیمات حساب را به گزارش اضافه نکنید. در موبایل محل فایل دریافتشده را از محدودهٔ مجاز همان برنامه انتخاب کنید.
ارزیابی، رفع اشکال و ادامهٔ مسیر
گزارش نهایی شما باید پاسخ این پرسشها را داشته باشد: چه ساختم، کجا اجرا کردم، چه خروجی انتظار داشتم، چه دیدم و چگونه صحتش را سنجیدم؟ برای هر مورد یکی از وضعیتهای «انجام شد»، «نیاز به اصلاح» یا «اجرا نکردم» بنویسید. اگر تعداد کارها نادرست است، ابتدا خود tasks.txt و سپس الگوی grep را بررسی کنید. اگر tar فایل پیدا نمیکند، مقدار lab و نامها را ببینید. اگر مقایسه شکست خورد، فایلها را جداگانه بخوانید و پیش از اصلاح، علت تفاوت را ثبت کنید؛ اجرای دوباره بدون فهم علت، جای عیبیابی را نمیگیرد.
اکنون باید سه مفهوم را از هم جدا کنید: لینوکس هسته است و توزیعها مجموعهای از ابزارها و سیاستهای اجرایی پیرامون آن میسازند؛ SSH راه ارتباط و اجرای فرمان روی میزبان دیگر است؛ سرور دستگاه یا نرمافزاری است که خدمتی ارائه میدهد. نصب یک برنامهٔ SSH روی گوشی به معنی ساختن سرور لینوکسی نیست. مهارت بعدی را با نیاز خود انتخاب کنید: برای کار روزمره، مسیرها و مجوزها را بیشتر تمرین کنید؛ برای برنامهنویسی، Git و متغیرهای محیط؛ برای مدیریت سامانه، ابتدا شبکه، حسابها، بستهها، سرویسها و لاگها را روی یک ماشین مجازی جدا بیاموزید.
یک برنامهٔ ادامهٔ ساده بنویسید: هفتهٔ اول روزی یک تمرین فایل و جستوجو؛ هفتهٔ دوم تبدیل همین پروژه به اسکریپت با کنترل خطا؛ سپس تمرین SSH و انتقال فایل در شبکهٔ آزمایشگاهی. معیار پیشرفت، توانایی توضیح فرمان، پیشبینی اثر آن و بازیابی نتیجه است. گزارش امروز و نسخهٔ سالم اسکریپت را نگه دارید تا چند هفتهٔ بعد بدون نگاهکردن به پاسخ پروژه را تکرار کنید. تمامشدن متن دوره تنها آغاز تمرین مستقل است؛ خروجی واقعی شما همین آزمایشگاه و شواهد بررسی آن است.
منابع رسمی انگلیسی برای ادامه: Bash: https://www.gnu.org/software/bash/manual/ ؛ ابزارهای پایه: https://www.gnu.org/software/coreutils/manual/ ؛ grep: https://www.gnu.org/software/grep/manual/grep.html ؛ tar: https://www.gnu.org/software/tar/manual/tar.html ؛ SSH: https://man.openbsd.org/ssh ؛ محیط Termux: https://github.com/termux/termux-packages/wiki/Termux-execution-environment
تألیف و مثالهای اختصاصی: تحریریه درسآوند. منابع انگلیسی برای بررسی مفاهیم و مطالعهٔ تکمیلی معرفی شدهاند.
متن درسهای عمومی را بدون ورود بخوانید.