یک اسکریپت بش بنویس که از یک فایل لاگ وبسرور (فرمت Common Log) خلاصهای شامل تعداد کل درخواستها، تعداد درخواستها به ازای هر کد وضعیت HTTP و پنج آدرس IP برتر (بیشترین تعداد درخواستها) تولید و چاپ کند.
14.0 بازدید آخرین ویرایش در 201 روز قبل ساعت 03:56 0.0
برای حل این مسئله از ابزارهای استاندارد خط فرمان در بش مانند awk، cut، sort، uniq و head استفاده کن. اسکریپت باید نام فایل لاگ را بهعنوان آرگومان بگیرد (یا از stdin بخواند)، با awk فیلدهای مورد نیاز را استخراج کند (معمولاً IP در فیلد اول و کد وضعیت در فیلد نهم)، برای شمارش از sort | uniq -c یا خودِ awk استفاده کند و نتایج را با sort -nr مرتب و با head تعداد برتر را نشان دهد؛ برای مقیاسپذیری از پردازش خطی (streaming) استفاده کن و خطاهای ورودی (عدم وجود فایل) را مدیریت نما.
1 پاسخ
جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من
در حال بارگیری...
برای ارسال پاسخ باید با حساب کاربری وارد شوید.
ورود به حساب کاربری
برای کارایی بالا، از awk با پردازش خط به خط (streaming) استفاده کن تا کل فایل را یکباره بارگیری نکند و خروجی به sort | head منتجه شود تا پنج آدرس IP برتر و آمار کدهای وضعیت استخراج شوند. ورودی را از فایل داده شده یا از stdin میخوانیم و وجود فایل را پیش از پردازش چک میکنیم تا خطاهای ورودی را مدیریت کنیم. در فرمت Common Log، به طور معمول IP در فیلد اول و کد وضعیت در فیلد نهم است، اما باید با تغییرات احتمالی لاگ مطمئن باشی. برای مقیاسپذیری، از آرایههای awk برای شمارش استفاده کن و در پایان با sort -nr و head -n 5 نتایج را چاپ کن تا خروجی پایدار و قابل پیشبینی باشد.
گزارش