بایگانی برچسب: s

هواشناسی در ترمینال: مثل اینکه تا یکشنبه هم فضای بارونه

سایت wttr.in یک هواشناسی تحت ترمینال است. جذابیت خاص؟ با curl که یک ابزار بسیار قدرتمند لینوکسی برای دریافت یو آر ال‌ها با تکنیک‌ها و مکانیزمهای و گزینه‌های مختلف است هم می تونین بهش درخواست بدین. مثلا اگر لینوکس (یا کرل) دارین کافیه این دستور رو بزنین:

curl http://wttr.in/tehran

دستورات گنو/لینوکس بالاخره در شل ویندوز

اگر مطالب من رو دنبال کنین یا رادیوگیک می دونین که هر بار حرف از ویندوز شده من گفته‌ام که یکی از مهمترین قدم‌های پیشرفت ویندوز می تونه اضافه کردن دستورات فوق العاده خط فرمان گنو/لینوکس به ویندوز باشه. همین حرف دقیقا وقتی تکرار می شد که من مطالب چرا گنو/لینوکس رو دوست دارم رو می‌نوشتم و حواسمون بود که هفتاد هشتاد درصد کارهایی که می کنم در واقع مربوط به دستورات شل و گنو است.

امکان اضافه کردن این برنامه‌ها به ویندوز از طریق پروژه های جانبی مثل سیگ وین بوده ولی حالا خبر فوق العاده برای دنیای ویندوز اینه که مایکروسافت اعلام کرده در آینده نزدیک پوسته خط فرمان اصلی لینوکس یعنی بش و دستورات و حتی پشتیبانی از باینری های اوبونتو رو به ویندوز ۱۰ اضافه خواهد کرد. اگر این اتفاق بیافته عملا ویندوز بالاخره دارای حجم عظیمی از برنامه‌های مفید خط فرمان می شه که نبودشون شدیدا هر آدم حرفه ای که نیاز به ssh، rsync، grep، … داشته باشه رو آزار می‌داده.

لازمه یادآوری کنم که یکی از مزیت های عظیم سیستم های مک OSX به ویندوز، داشتن همین دستورات در خط فرمان بوده که باعث می شده افرادی با نیازمندی های فنی بتونن ازش استفاده کنن. حالا ویندوز هم می خواد از قافله عقب نمونه. این احتمالا جذابترین خبر در مورد ویندوز در سال ۹۵ خواهد بود.

هرچیزی که لازمه در مورد «۲۸ بار بک اسپیس» بدونین

این روزها همه دارن از باگ ۲۸ تا بک اسپیس‌ حرف می‌زنن. باگی بعضی‌ها می‌نویسن اجازه می‌ده به هر لینوکسی دسترسی پیدا کنین. هر چقدر هم نویسند‌ه‌ای از منطق و لینوکس دورتر باشه، خطرات بزرگتری رو براش قائل می‌شه. این باگ اولین توسط اسماییل ریپول و هکتور مارکو کشف شده و اینجا نگاهی دقیق داریم به اجزاش برای کسانی که دوست دارن بدونن واقعا ماجرا چی بوده و چه عواقبی داره.

آیا باگ واقعا وجود داشته؟

اما آیا این باگ وجود داره؟ جواب یک بله محکم و همراه پوزخند است. این باگ سوتی بدی بوده که از برنامه‌نویس‌های خوب در یکی از برنامه‌های بسیار پیچیده انتظار نمی‌رفته. این باگ روی گراب تاثیر می‌ذاره. ویندوزها از گراب استفاده نمی‌کنن و به جاش بوت لودرهای خودشون رو دارن که امکانات و توانایی‌های محدودتری داره و به شکل اختصاصی برای ویندوز توسعه پیدا کرده. گراب اونی است که در مرحله اول یک کامپیوتر رو بوت می‌کنه و بعد کنترل کامپیوتر رو به یک سیستم‌عامل (از جمله لینوکس یا ویندوز) تحویل می‌ده. اگر گراب نباشه سیستم‌عامل‌ها مجبور هستن خودشون یک ضرب کامپیوتر رو بوت کنن و دیگه امکان حضور چند سیستم عامل روی یک کامپیوتر یا بوت شدن کامپیوتر حتی بعد از خراب شدن سیستم عامل وجود نخواهد داشت.

باگ ۲۸ تا بک اسپیس چی بوده؟

این باگ وقتی کار می‌کرده که شما گراب داشته باشین و روی گراب پسورد گذاشته باشین. اتفاقی که خیلی کم می‌افته. گفته می‌شه در وضعیتی که قراره گراب از شما پسورد بپرسه، ۲۸ بار بک اسپیس رو بزنین سیستم کرش می‌کنه و شما به خط فرمانی می‌رین که دستورات بسیار محدودی داره که به منظور تعمیر سیستم گراب یا بوت کردن سیستم عامل‌هایی که روی کامپیوتر نصب شده تعبیه شده‌اند.

این اشتباه بدون شک خیلی ضایع و خیلی خنده داره (: البته تا الان همه لینوکس‌هایی که باهاشون برخورد داریم مشکل رو اصلاح کردن که خودش قشنگی دنیای آزاده. در واقع اصلا گفته نمی‌شه که اینطرف هیچ باگی نیست بلکه گفته می‌شه که باگ‌ها به محض کشف یا اعلام (یا حتی قبل از اعلام) رفع و در آپدیت‌های سریع، خنثی می‌شن.

آیا هکرها به هر لینوکسی دسترسی پیدا کردن؟

این قسمت جایی بود که من تصمیم گرفتم در این مورد بنویسم. بعضی مقاله‌های سایت‌های ایرانی با هیجان می‌نویسن که دیگه همه لینوکس‌ها در معرض خطر هستن و اطلاعات هر کسی قابل دستیابی توسط هکرها. این مشخصا از دو جور اشتباه می‌یاد:

  1. عدم درک شکل کارکرد جهان. برای اینکه بفهمین الان هکرها توان نفوذ به هر کامپیوتری رو ندارن کافیه به این فکر کنین که دارین این مطلب رو کجا می‌خونین. اگر این مطلب از روی اینترنت، تبلت، چت و .. به شما رسیده یعنی مهمترین کامپویترهای دینا که اتفاقا همه هم لینوکسی هستن دارن درست کار می کنن (: به این می گن استدلال با توجه به دیدن نتایج. لازم نیست من باگ رو درک کنم تا بفهمم که آیا همه کامپیوترها تحت سیطره هکرها هستن یا نه (: کافیه به اطرافم نگاه کنم. همونطور که لازم نیست سال‌ها در این مورد بحث کنم که فلان مدل حکومتی باعث پیشرفت می‌شه یا نه و کافیه نگاه کنم ببینم کدوم کشورها در حال پیشرفت هستن.

  2. عدم درک دنیای لینوکس و ویندوز و امنیت. اصولا این باگ داره در لایه‌ قبل از بوت شدن لینوکس اتفاق می‌افته و از طریق دسترسی فیزیکی. یک اصل خیلی خیلی مهم در دنیای امنیت هست که هیچ وقت نباید فراموشش کنین! این اصل می‌گه لایه اول امنیت،‌ امنیت فیزیکی است. در دنیای امنیت می‌گن اگر حمله کننده به «فیزیک» دستگاه مورد حمله دسترسی داشته باشه، صحبت کردن از هر شکل دیگه امنیت بی‌معنی است. این باگ – که خیلی هم ضایع بوده – به شما اجازه می‌داده که به هارد کامپیوتری که بهش دسترسی فیزیکی دارن دسترسی پیدا کنین. این مساله در همه سیستم‌های دیگه هم صادقه. اگر شما دسترسی فیزیکی دارین اصولا نیازی به این باگ نیست، کافیه هارد رو در بیارین و توی یک کامپیوتر دیگه بذارین یا با یک یو اس بی دیسک لایو یا یک سی دی لایو کامپیوتر رو بوت کنین یا هر روش دیگه. در این سطح تنها بحث امن کننده اطلاعات شما می‌تونه رمزنگاری باشه ولی سخت افزار رو هیچ چیز نمی‌تونه از حملات فیزیکی حفاظت کنه.

اگر این بحث براتون عجیبه، می‌تونم دو تا ویدئو درست کنم که توش ببینین چطوری هر ویندوز و هر لینوکسی با داشتن دسترسی فیزیکی قابل ورود هستن.

جمع بندی

گراب سیستم بوت کننده کامپیوتر و تحویل دهنده سخت افزار به سیستم عامل بعدی (لینوکس یا ویندوز) است. تقریبا همه لینوکس ها از گراب استفاده می کنن و اگر کسی روی گرابش پسورد گذاشته باشه، این امکان بوده که با ۲۸ بار زدن بک اسپیس وارد خط فرمان اضطراری گراب شد. این مساله یک سوتی ضایع و خنده دار برنامه نویسی بوده و حالا رفع شده و ارزش نرم افزار آزاد به همین رفع باگ‌ها در لحظه کشف است. ما لینوکسی‌ها باید خنده‌ها رو بپذیریم و سعی کنیم برنامه‌هامون کمتر و کمتر چنین باگ‌هایی داشته باشن. همه هم باید یادشون باشه که دسترسی فیزیکی عملا به معنی امکان ورود کاربر به سیستم است و تنها راه جلوگیری از ورود کسی که به کامپیوترمون دسترسی فیزیکی داره هیچ راهی‌ است؛ هرچند که می‌شه با رمزگذاری اطلاعات، دسترسی این آدم خبیث به اطلاعات‌ رو مسدود کرد.

آیا خط فرمان همه گنو/لینوکس‌ها شبیه همدیگه است؟

این سوال هوتن است و احتمالا خیلی‌های دیگه؛ همچنین آدم‌ها می‌خوان بدونن که تفاوت‌ توزیعهای لینوکس‌های مختلف مثل اوپن سوزه، فدورا، اوبونتو، دبیان و … چیه.

من مشابه این بحث رو مفصل در جاهای مختلفی توضیح دادم. مثلا در اینجا که می‌گه توزیع لینوکس چیه و اینجا که می‌گه چطوری یک توزیع رو انتخاب کنین؛ البته دقت کنین که اون کتاب تموم نشده و هنوز برای انتشار عمومی آماده نیست ولی خب یک جایی بالاخره باید لینک داد دیگه.

commandline

ااما برای تکمیل بحث، باید بگم که توزیع عملا ترکیبی از این‌ها است:

  • نرم افزارهای پیش فرضی که آدم های پشت توزیع انتخاب می‌کنن
  • منابع و مخازن اون توزیع یعنی برنامه‌هایی که می‌تونین بدون دردسر و با یک کلیک یا دستور نصب کنین
  • گرافیک، لوگو و …
  • دستورات خاص اون توزیع که خیلی وقت‌ها مربوط به تنظیمات یا مدیریت بسته‌های نرم افزاری می‌شن؛ مثلا توی دبیان apt برای نصب برنامه‌ها استفاده می‌شه، در فدورا yum و در سیستم‌های مبتنی بر آرچ pacman. مثال خوب دیگه می‌تونه مجموعه نرم افزارهای کنترل و مدیریت yast در اوپن سوزه.

حالا بخش عظیمی از چیزی که ما توی کامند لاین استفاده می‌کنیم و ازشون لذت می‌بریم محصولات پروژه ای به اسم gnu هستن که تقریبا در تمام توزیع‌ها نصب می‌شن و به همین خاطر بهتره به جای اسم لینوکس که فقط یک هسته است، از گنو/لینوکس که یک سیستم عامل کامله استفاده کنیم. حالا رابط ما با این دستورات محیطی ست به اسم پوسته‌ (یا شل‌ یا خط فرمان که همون صفحه سیاه با نوشته های سبز بالا است). اکثر پوسته‌ها یا دقیقا برنامه ای به اسم bash هستن یا چیزهایی تا حد خیلی زیادی مشابه با اون و در نتیجه وقتی توی خط فرمان یک لینوکس هستین، دستورات جالبش تقریبا در همه جا یکسانه و ترکیبی از دستورات پوسته و دستورات پروژه گنو.

نتیجه؟ از هر لینوکسی که استفاده می‌کنین، نود درصد کارهاتون مشابه است و اوه ده درصد هم مربوط می‌شه به عملیات بسیار مرتبط با اون توزیع مثل نصب و حذف برنامه‌ها یا دسترسی به کارت‌های شبکه و تنظیمات پیش فرض و اینجور چیزها. پس با هر توزیعی که کار می‌کنین و پشت هر توزیعی که می‌شینین، می‌تونین هک خوشحالی داشته باشین!

چرا گنو/لینوکس رو دوست دارم:‌ فهرست کردن کل فایل‌های قابل دانلود یک سایت

یک دوستی پرسیده که چطوری می تونیم فهرست همه فایل‌های قابل دانلود در سروری مثل dl.folan.net رو داشته باشیم. این سرور اجازه می‌ده شما دایرکتوری‌هاش رو ببینین:

Screenshot from 2015-11-25 11-57-46

و مثلا توی دایرکتوری فیلم‌ها:

Screenshot from 2015-11-25 11-58-08

درست؟ دوست همیشگی ما در سری چرا گنو/لینوکس رو دوست دارم دستور جذاب wget است. پس شروع می کنیم!

$ wget --spider --force-html -r -l5 htp://dl.folan.net/Movie/

می تونه به شکل یک اسپایدر فایل‌های اچ تی ام ال رو می‌گیره و توشون رو نگاه می کنه و پاک می کنه و اینکار رو تا پنج شاخه داخل دایرکتوری‌ها هم پی‌ می‌گیره. البته اگر ارور بگیریم، دردسر درست می‌شه پس با اضافه کردن یک عبارت کوچیک، ارورها رو هم به خروجی اضافه می کنیم:

$ wget --spider --force-html -r -l5 htp://dl.folan.net/Movie/ 2>&1 

این دستور خروجی‌هایی شبیه به این تولید می کنه:

Spider mode enabled. Check if remote file exists.
--2015-11-25 12:02:51--  htp://dl.folan.net/Movie/5/American.History.X.1998.720p.folan.Net.mkv
Reusing existing connection to dl.folan.net:80.
htp request sent, awaiting response... 200 OK
Length: 785963069 (750M) [application/octet-stream]
Remote file exists but does not contain any link -- not retrieving.

Removing dl.folan.net/Movie/5/American.History.X.1998.720p.folan.Net.mkv.
unlink: No such file or directory

Spider mode enabled. Check if remote file exists.
--2015-11-25 12:02:51--  htp://dl.folan.net/Movie/5/American.Justice.2015.1080p.folan.Net.mkv
Reusing existing connection to dl.folan.net:80.

من خط‌هایی رو می‌خوام که اولشون — داره و پس می ریم سراغ grep که می‌تونه توی یک متن خط‌هایی رو جدا کنه که چیز خاصی توشون هست:

$ wget --spider --force-html -r -l5 htp://dl.folan.net/Movie/ 2>&1 | grep '^--'
--2015-11-25 12:04:57--  htp://dl.folan.net/Movie/4/A.Good.Day.to.Die.Hard.2013.720p.folan.Net.mkv
--2015-11-25 12:04:57--  htp://dl.folan.net/Movie/4/A.Good.Marriage.2014.BluRay.720p.folan.Net.Mkv
--2015-11-25 12:04:57--  htp://dl.folan.net/Movie/4/A.Hijacking.2012.720p.folan.Net.mkv

و خب حالا می تونیم فقط بخش یو آر ال رو جدا کنیم. با استفاده از awk:

$ wget --spider --force-html -r -l5 htp://dl.folan.net/Movie/ 2>&1 | grep '^--' | awk '{ print $3 }' 
htp://dl.folan.net/6piljd5xepub7trr13ke.gif
htp://dl.folan.net/85film3.gif
htp://dl.folan.net/Movie/1/Into.the.Woods.2014.720p.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/Iyobinte.Pusthakam.2014.720p.DVDrip.%5Bfolan.Net%5D.mp4
htp://dl.folan.net/Movie/1/Kick.2014.720p.BluRay.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/La.Grande.Illusion.1937.720p.Farsi.Dubbed.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/Late.Phases.2014.720p.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/Le-Week-End.720p.%5Bfolan.net%5D.mkv
htp://dl.folan.net/Movie/1/Legendary.2010.LIMITED.720p.%5Bfolan.Net%5D.mkv

و بعد فقط خط‌هایی رو نگه داریم که آخرشون چیزهایی مثل / یا css یا html و .. نداره:

$ wget --spider --force-html -r -l5 htp://dl.folan.net/Movie/ 2>&1 | grep '^--' | awk '{ print $3 }' | grep -v '\.\(css\|js\|png\|gif\|jpg\)$' | grep -v '\/$' 
htp://dl.folan.net/Movie/1/Into.the.Woods.2014.720p.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/Iyobinte.Pusthakam.2014.720p.DVDrip.%5Bfolan.Net%5D.mp4
htp://dl.folan.net/Movie/1/Kick.2014.720p.BluRay.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/La.Grande.Illusion.1937.720p.Farsi.Dubbed.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/Late.Phases.2014.720p.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/1/Le-Week-End.720p.%5Bfolan.net%5D.mkv
htp://dl.folan.net/Movie/1/Legendary.2010.LIMITED.720p.%5Bfolan.Net%5D.mkv

ایول. حالا کافیه همه چیز رو بریزیم توی یک فایل و خروی‌ها رو یک چکی بکنیم که درست باشه:

$ sort -R all.urls | head
htp://dl.folan.net/Movie/5/Modern.Times.1936.720p.Farsi.Dubbed.folan.Net.mkv
htp://dl.folan.net/Serial/The%20Killing/S01/The.Killing.S01E08.480p.folan.Net.mkv.folan.Net.mkv.mkv
htp://dl.folan.net/Serial/Breaking%20Bad/S05/BreakingBad.S05E06.folan.Net.mkv
htp://dl.folan.net/Movie/2/Priest.of.Evil.2010.720p.%5Bfolan.Net%5D.mkv
htp://dl.folan.net/Movie/5/A.Midsummer.Nights.Dream.1999.720p.WEB-DL.folan.Net.mkv
htp://dl.folan.net/Serial/Castle/S05/Castle.S05E22.480p.folan.Net.mkv
htp://dl.folan.net/Serial/Twin%20Peaks/S02/Twin.Peaks.S02E22.480p.folan.Net.mkv
htp://dl.folan.net/Serial/Supernatural/S04/SN-S04_E11.folan.Net.mkv
htp://dl.folan.net/Movie/Problem%20Child%201990/Bacheye.DardesarSaz.1990.720pWEB-DL.HQ_folan.info.mkv
htp://dl.folan.net/Serial/Archer/S01/Archer.S01E08.folan.Net.mkv

$ wc -l all.urls 
11284 all.urls

اینجوری فهرستی از ۱۱هزار فایل قابل دانلود اون سایتی که تصمیم گرفتم به خاطر حفظ بیزنسش، آدرسش رو ندم رو داشته باشیم (: هدف این پست دانلود نیست،‌ یاد گرفتن شیوه کار با لینوکسه و همچنین دقت کنین که http ها رو کردم htp که وبلاگ سعی نکنه به عنوان فیلم لودشون کنه از یو آر ال گفته شده (: خوش باشین و خندون و توانمند.

چرا گنو لینوکس رو دوست دارم: پاسخ دادن به اینکه آیا سیستم ما وضعیت عادی داره یا مورد حمله است

ما سروری داریم که تازه تحویلش دادیم ولی هر روز حوالی ظهر با مشکل مواجه می شه. کار اصلی رو پروسه ای انجام می ده که اینجا بهش می گیم A. چندین پروسه A می تونن همزمان بالا باشن و کار کنن و ما گفتیم حداکثر این تعداد باید ۱۰۰ باشه. یعنی در صورت زیاد شدن بار، ۱۰۰ تا A بالا می یان و تقریبا صد برابر بهتر از یک A کار می کنن. یک بررسی سریع نشون می ده که در لحظه بروز مشکل دقیقا ۱۰۰ تا از پروسه A فعاله:

# ps -ef | grep A | wc -l
101

مشخصه دیگه: ps -ef پروسه ها رو نشون می ده، grep A فقط خط هایی که توشون A هست رو جدا می کنه و در نهایت wc -l تعداد خط ها رو می شمره (اگر گفتین چرا به جای ۱۰۰ تا شده صد و یکی؟).

علی الحساب تعداد Aها رو به حداکثر ۱۰۰۰ عدد افزایش می دیم و می ریم سراغ سوالی که مطرحه:

آیا ما مورد حمله هستیم؟ آیا حوالی ظهر سیستمی شروع به کار با سیستم ما می کنه که فشار رو به شکل غیرعادی بالا می بره؟ یا واقعا این شرایط عادی است و اینقدر از این سیستم استفاده می شه؟

ما لاگ هایی به این شکل داریم که حاصل کار A هستن:

127.0.0.1 -  26/Jul/2015:03:48:53 +0430 "POST /index.php?_url=xxxxx" 200 /home/adp/www/xxx/public/index.php 357.489 2048 86.72%
127.0.0.1 -  26/Jul/2015:03:48:58 +0430 "POST /index.php?_url=qqqq" 200 /home/adp/www/xxx/public/index.php 91.281 1280 98.60%
127.0.0.1 -  26/Jul/2015:03:49:32 +0430 "GET /index.php?aaa" 200 /home/adp/www/xxx/public/index.php 373.649 1792 56.20%
127.0.0.1 -  26/Jul/2015:03:50:03 +0430 "HEAD /index.php" 200 /home/adp/www/xxx/public/index.php 43.501 1280 91.95%
127.0.0.1 -  26/Jul/2015:03:55:03 +0430 "HEAD /index.php" 200 /home/adp/www/xxxx/public/index.php 63.519 1280 94.46%

من از چند روز پیش این لاگ ها رو فعال کردم تا همه درخواست ها ذخیره بشن و حالا کافیه بشمرم ببینم چه خبره! اول بذارین همه لاگ هار و به همدیگه بچسبونیم:

jadi@funlife:/tmp/dir$ ls -ltrh 
total 36M
-rw------- 1 jadi jadi 9.2M Jul 22 03:17 www.access.log-20150722
-rw------- 1 jadi jadi 6.0M Jul 23 03:10 www.access.log-20150723
-rw------- 1 jadi jadi 6.4M Jul 24 03:25 www.access.log-20150724
-rw------- 1 jadi jadi 2.5M Jul 25 03:25 www.access.log-20150725
-rw------- 1 jadi jadi 7.4M Jul 26 03:45 www.access.log-20150726
-rw------- 1 jadi jadi 4.2M Jul 26 15:17 www.access.log
jadi@funlife:/tmp/dir$ cat www.access.log-* www.access.log > all.log
jadi@funlife:/tmp/dir$ ls -ltrh 
total 72M
-rw------- 1 jadi jadi 9.2M Jul 22 03:17 www.access.log-20150722
-rw------- 1 jadi jadi 6.0M Jul 23 03:10 www.access.log-20150723
-rw------- 1 jadi jadi 6.4M Jul 24 03:25 www.access.log-20150724
-rw------- 1 jadi jadi 2.5M Jul 25 03:25 www.access.log-20150725
-rw------- 1 jadi jadi 7.4M Jul 26 03:45 www.access.log-20150726
-rw------- 1 jadi jadi 4.2M Jul 26 15:17 www.access.log
-rw-rw-r-- 1 jadi jadi  36M Jul 26 15:30 all.log

راحت و سر راست. دستور cat که محتوای فایل ها رو نشون می ده، کل فایل ها رو چسبونده به هم تا یک فایل بزرگ به اسم all.log داشته باشیم که هر خطش چنین فرمی داره:

127.0.0.1 -  26/Jul/2015:03:48:53 +0430 "POST /index.php?_url=xxxxx" 200 /home/adp/www/xxx/public/index.php 357.489 2048 86.72%

کافه من تاریخ رو جدا کنم. دستور کات همیشه دوست منه:

jadi@funlife:/tmp/dir$ cut -d' ' -f4 all.log | head
20/Jul/2015:12:03:35
20/Jul/2015:12:03:36
20/Jul/2015:12:03:39
20/Jul/2015:12:03:39

جذاب نیست؟ به سادگی گفتم کات کن با جدا کننده اسپیس و فیلد چهارم رو به من بده ولی حالا فقط چند خط اول رو نشون بده (head). عملا کار تموم شده! کافیه این خطها رو بشمرم؛ البته بعد از حذف کردن ثانیه و دقیقه. برای حذف اینها کافیه شش کاراکتر آخر هر خط رو بردارم یا با همون دستور کات دوباره بگم بر اساس :‌ جدا کنه و فیلد اول و دوم رو به من بده. این راه دوم برای من سر راست تره:

jadi@funlife:/tmp/dir$ cut -d' ' -f4 all.log | cut -d: -f1,2 | head
20/Jul/2015:12
20/Jul/2015:12
20/Jul/2015:12
20/Jul/2015:12
20/Jul/2015:12
20/Jul/2015:12
20/Jul/2015:12
20/Jul/2015:12
20/Jul/2015:12
20/Jul/2015:12

چقدر عالی. دیگه فقط کافیه سورت کنیم و بگیم بشمره. دستور uniq‌ می تونه با سوییچ های مختلف کارهای مختلف کنه. مثلا فقط خط های غیرتکراری بده، فقط خط های تکراری رو بده، از هر خط بیشتر از یکبار نده، بشمره از هر خط چند تا هست و … و البته این دستور وابسته به اینه که ورودی اش مرتب شده باشه. پس:

jadi@funlife:/tmp/dir$ cut -d' ' -f4 all.log | cut -d: -f1,2 | sort -n | uniq -c > data
jadi@funlife:/tmp/dir$ head data
   2795 20/Jul/2015:12
   2363 20/Jul/2015:13
   2383 20/Jul/2015:14
   2251 20/Jul/2015:15
   1796 20/Jul/2015:16
   1599 20/Jul/2015:17
    843 20/Jul/2015:18
    704 20/Jul/2015:20
    765 20/Jul/2015:19
   1039 20/Jul/2015:21

چه کردیم! (: فقط کافیه ترسیمش کنیم:

تعداد درخواست های سرور

و هر کسی که آمار یا حداقل نمودارهای نرمال بدونه می تونه بگه اتفاق غیرعادی ای در جریان نیست – حداقل در سطح درخواست ها. از ساعت هشت درخواست ها بالا می رن و بعد به شکلی نسبتا طبیعی افزایش پیدا می کنن تا آخر وقت اداری که دوباره آروم آروم پایین بیان. این پترن برای سایتی که مردم باهاش کار می کنن طبیعی است. مطمئنا می شه برنامه ما رو بهتر کرد ولی هدف من به عنوان مدیر سیستم این هست و بود که نشون بدم اتفاقی غیر عادی (درخواست ناگهانی از یک سیستم سر یک ساعت مشخص، حمله هکرها و …) در جریان نیست که تقریبا ثابت شده. اگر نمودارهای این تیپی دوست دارین بگین که بازم نمودارهایی واقعی از کارهای واقعی یک مدیر سیستم رو با هم مرور کنیم.