چرا گنو/لینوکس رو دوست دارم: بررسی تغییرات اخیر فایلها برای یک کلمه خاص

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

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

گنو/لینوکس یک ابزار عالی است با کلی خرت و پرت که می شه بهم جوششون داد. ما اول چی می‌خوایم ؟ پیدا کردن تمام فایل‌هایی که در ده دقیقه گذشته عوض شده‌اند. می‌دونم که دستور find مال این تیپ کارها است و راهنمای هر دستوری هم توی man پیدا می‌شه. پس می‌زنم man find و توش می‌بینم که:

-mmin n
              File's data was last modified n minutes ago

خلاص! پس فایند یک سوییچ داره که کل فایل‌هایی که در n دقیقه قبل عوض شدن رو نشون می‌ده. کافیه بزنم:

bash-4.1$ find /home -nmin -10
.
./gedit.jadi.2767816239
./plugtmp
./orbit-jadi
./orbit-jadi/linc-5b12-0-2c85f1f5cb706
./orbit-jadi/linc-60d9-0-436786093cc42
./orbit-jadi/linc-5ff8-0-6af67eaaaf2db
./orbit-jadi/linc-58be-0-373ce140b83c4
./1.txt

من که کیف می‌کنم (: حالا فهرستی دارم از تمام فایل‌هایی که در ده دقیقه قبل تغییر کردن. حالا کافیه روشون جستجو کنیم. می دونم که توی find یک سوییچ هم داریم به اسم exec که جلوش هر دستوری بزنیم روی خروجی ها اجرا می شه. برای گفتن به exec که دستورات تموم شده باید یک ;\ بذاریم و جلوی exec هم اگر {} بذاریم یعنی اسم فایلی که پیدا کرده رو اینجا بنویسه. راستی!‌ اینها رو من بار بار اول و دوم و سوم و چهارم و پنجم و ششم توی man find نگاه کردم ولی الان دیگه حفظ شدم. بذارین تست کنیم:

bash-4.1$ sudo find /home -mmin -10 -exec echo \{\} \;
.
./gedit.jadi.2767816239
./plugtmp
./orbit-jadi
./orbit-jadi/linc-5b12-0-2c85f1f5cb706
./orbit-jadi/linc-60d9-0-436786093cc42
./orbit-jadi/linc-5ff8-0-6af67eaaaf2db
./orbit-jadi/linc-58be-0-373ce140b83c4
./1.txt

درسته پس. الان قسمت اول فایند، فایل های تغییر کرده در ده دقیقه رو پیدا می کنه و قسمت exec اسم اون فایل رو جلوی یک echo می ذاره که دستور را چاپ می کنه. پس می رم قدم بعدی که grep کردن است. grep توی یک فایل دنبال یک عبارت می گرده و اگر بود، اون قسمت رو می نویسه. من یک سوییچ H هم اضافه می کنم تا اسم فایل رو هم بنویسه. پس در کل دارم:

bash-4.1$ sudo find /home -mmin -10 -exec grep hacked {} \;
grep: ./gedit.jadi.2767816239: No such device or address
grep: ./orbit-jadi/linc-5b12-0-2c85f1f5cb706: No such device or address
grep: ./orbit-jadi/linc-60d9-0-436786093cc42: No such device or address
grep: ./orbit-jadi/linc-5ff8-0-6af67eaaaf2db: No such device or address
grep: ./orbit-jadi/linc-58be-0-373ce140b83c4: No such device or address
this hacked my

اوه! اولا H رو یادم رفت بذارم و در نتیجه اسم فایلها چاپ نشدن و دوم اینکه یکسری error هم دارم. در لینوکس بعضی خروجی ها ارور هستن که با اینکه ما هر دو رو یکجا می بینیم اما ماهیتشون با خروجی برنامه فرق داره. این ارورها مال این هستن که در این حالت خاص من در اینجا روی فایل‌هایی گرپ کردم که فایل‌های معمولی نیستن و محتویات قابل خوندن ندارن.

چیکار کنیم؟ اضافه کردن H که آسونه! برای ارور هم ما یک «دستگاه» جذاب توی لینوکس داریم به عنوان null که مثل بقیه ابزارها توی دایرکتوری dev است و هر چیزی روش نوشته بشه می ره به ناکجا آباد و غیب می شه پس کافیه من خروجی ارور رو به جای خروجی معمولی که روی صفحه است، بریزم روی این دستگاه تا از شرش راحت بشم! خروجی ارور رو با این عبارت می شه کنترل کرد <2 پس در نهایت خواهم داشت:

bash-4.1$ sudo find /home -mmin -10 -exec grep -H hacked {} 2> /dev/null \;
./1.txt:this hacked my

عالی! (: نتیجه دلخواه دوستم کاملا آزاد و شاد همین دستوره:

توی دایرکتوری home بگرد. فایل هایی که در طول ده دقیقه قبل تغییر کردن رو نشون بده. بعد خط به خط اسم اون فایل رو بذار جلوی دستور گرپ که دنبال عبارت hacked می گرده. راستی! به خاطر سوییچ اچ، اسم فایل رو نشون بده و خروجی ارور استاندارد رو هم بریز توی نول که می ره به ناکجا آباد.

  • هاها.ایده خوبی بود جادی :D حالا اگر خروجی find رو به یه xargs هم پایپ میکردی تمام zero byte فایل‌هایی که find قادر به پیدا کردن اون‌ها نیست رو هم لیست میکرد.مثلا برای چک کردن فایل‌هایی که توی دو سال قبل مدیریت شدن/تغییر کردن میشه: 2*365=730.پس میشه:
    find ~ -type f -mtime +730 |xargs -r ls -l
    و اینکه حالا همزمان پرمیشن‌های فایل‌ها رو هم بررسی میکنیم م و البته قسمت‌های دیگه دستور خودت برای پیدا کردن hacked و ریختن استاندارد ارور توی null هم به دستور اضافه بشه یک ترکیب عالی میشه (:

  • alirezaimi

    so cool!!!

  • چرا من لينوكس را دوست ندارم؟

    من مدت ها بود به دنبال سيستم عامل ابونتو بودم. و اولين باری كه مشتاق شدم به اين سيستم عامل رو بيارم زمانی بود كه آرش زاد مدير سايت وبلاگينا مصاحبه ای با نيما اكبر پور انجام داد و يكی از سوال ها يی كه از نيما پرسيد درباره ابونتو بود و نيما هم پاسخ مثبتی درباره اين سيستم عامل به او داد از همان روز برای من ابونتو جذابيت پيدا كرد قبل از آن فقط اسم لينوكس به گوش من خورده بود. نه با لينوكس كار كرده بودم و نه بدی يا تعريفی از آن شنيده بودم. تا اينكه بعد از تحقيق فراوان و به كمك يكی از دوستان توانستم ابونتو رو نصب كنم. در ساعات اوليه برای من جذاب بود چون تا حدی برای من فضای مك را تداعی ميكرد ولی بعد از گذشت چند روز با وجود برخی خوبی هايی كه اين سيستم عامل دارد كه مهمترين آن ها ويروسی نشدنش هست به اين نتيجه رسيدم كه كار كردن با لينوكس يعنی غذا را دور سر خود چرخاندن و با عذاب خوردن.
    واقعا زمانی كه لينوكس را نصب ميكنيد يك سيستم عامل تقريبا خامی هست و همش بايد از ابتدا شروع به نصب پلاگين های مختلف كنيم تا بتوانيم مثلا يك فايل صوتی يا تصويری را اجرا كنيم. در صورتی كه در همين ويندوز شما پس از نصب بدون نصب هيچ برنامه ای‌قادر خواهيد بود بسياری كارها را انجام دهيد مثلا ميخواهيم vlc palyer نصب كنيم در ويندوز يا مك پس از نصب vlc قادر خواهيد بود اجرايش كنيد و به آسانی از آن استفاده كنيد ولی در ابونتو اينگونه نيست علاوه بر نصب بايد حال به دنبال پلاگين های مخصوص به آن باشيد
    نصب كردن برنامه ها بصورت آفلاين هم كه گرفتاری های خاص خودش را دارد.
    در كل به نظر من ابونتو يا همان لينوكس يك سيستم عاملی نيست كه بخواهد رضايت عموم را جلب كند و تا حدی ميتوان گفت يك سيستم عامل بی در و پيكر هست بيشتر برای كسانی خوب هست كه علايق زيادی با سر كله زدن با سيستم عامل های مختلف دارند و يا اينكه به دنبال برنامه نويسی هستند و دليل اينكه می گويند سبك است واقعا پس از نصبش چيزی ندارد كه بخواهد آن را سنگين كند همانطور كه در بالا هم اشاره كردم يك سيستم عامل خام هست كه بايد همش به فكر سير كردنش باشی

  • Reith

    دستور زیر باید خیلی سریع‌تر کار کنه:
    find /home -mmin -10 -type f -exec grep -H hacked ‘{}’ + 2> /dev/null \;
    تا سیستمش درست نشده امتحان کنید :دی

  • Reith

    time find /usr/portage/app-emulation/ -type f -exec grep -il kde ‘{}’ + 2>/dev/null
    real 0m0.061s
    user 0m0.035s
    sys 0m0.025s
    $ sync
    $ time find /usr/portage/app-emulation/ -exec grep -iH kde ‘{}’ \; 2>/dev/null:
    real 0m1.315s
    user 0m0.258s
    sys 0m0.910s

  • سامان: مطمئنی قبلا لینوکس رو نصب کردی؟ اوبونتو رو که نصب می کنی خیلی بیشتر از یک ویندوز تازه خرت و پرت داره (: مثلا مسنجر، آفیس، پی دی اف بین، پی دی اف نویس، فایرفاکس، … و اگر vlc رو هم نصب کنی همه فرمت ها رو پخش می کنه بدون نیاز به چیز دیگه (: البته قدرت لینوکس اینجاها نیست. قدرت لینوکس اون بالا است (:

    Reith: ایول (: برای من که سرعت مهم نبود ولی برای این دوستمون احتمالا مهمه زیاد.

  • بله آقای جادی عزيز من نصبش كردم اگر باور نداريد حاضر هستم شما از هر قسمنی از ابونتو رو دوست داريد واستون اسكرين شات هاش رو بفرستم. در ضمن به نظر شما هيچ لزومی داره من سيستم عاملی رو تجربه نكرده باشم و نصبش نكرده باشم بعد بيام وقت خودم رو بزارم وكلی واستون بنويسم؟
    اگر نوشته منو با دقت خونده باشيد من توش توضيح دادم در ساعات اوليه برای‌من جالب بود چون اندكی محيط مك رو برای‌من تداعی ميكرد مثلا وجود اون ساعت ثانيه شمار دار در بالای صفحه و هواشناسيسش و قسمت مسنجرهاش ولی مثلا برای نمونه در حالت عادی نميتونه فايل mp3 رو باز كنه وبايد روش پلاگين ريخت يا همون vlc نميتونه يك سی دی فيلم رو با پسوند dat رو باز كنه برای اون هم بايد پلاگين ريخت

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

    البته تکرار می کنم که نمی گم لینوکس در همه جنبه ها از ویندوز بهتره. هر چیزی ابزار خودش رو داره و دقیقا اون بالا دارم توضیح می دم که «چرا گنو/لینوکس رو دوست دارم».

  • بیننده

    سامان جان! خوب به جای اوبونتو بیا mint نصب کن دیگه همون مشکل mp3 و vlc هم نداری!! اگه فقط مشکلت اینه!!

  • بیننده

    ببخشید دو تا کامنت شد
    جادی جان! لطفا از این جور ÷ست ها زیادتر بگذار! اصلا در واقع هر وقت یه کاری کردی که تا حدی به درد بخور بود اینجا هم ک÷یش کن!

  • سامان:
    من اوایل که از اوبونتو استفاده می کردم مشکلات مشابهی داشتم، ولی بزودی علت پیدا شد. علتش این بود که من اصرار داشتم همون روش ها و عادت های ویندوزی رو روی گنو/لینوکس پیاده کنم. و بزودی فهمیدم اگر قصد داریم همون کارهای ویندوزی رو تو لینوکس انجام بدیم، درستش اینه که از همون ویندوز استفاده کنیم. با این کشف فلسفی! مشکل من از پایه و اساس حل شد، من به دنبال درک فلسفه نرم افزار آزاد رفتم که کلی کمکم کرد.
    در مورد اینکه یه نصب ساده از اوبونتو خامه و هیچی نداره هم راستش خیلی عجیبه! چون فکر می کنم همه لینوکس کارا صد در صد عکسش رو معتقدند! بله، شاید ابزارهایی که ویندوزکارها عادت دارند روی یک دی وی دی کنار دستشون داشته باشند و بعد از نصب ویندوز روش نصب کنند(کاری که قبلا خودم می کردم) روی لینوکس نباشه، اما شک دارم که بهتر از اون وجود نداشته باشه. مثلا توی ویندوز برای خوندن یک فایل ایمیج ساده باید یه برنامه نصب کرد ولی توی هر گنو/لینوکس هر فایل ایزوی استانداردی رو براحتی می شه ماونت کرد. برای یک ایمیج گرفتن ساده باید یک برنامه نصب کرد اما تو لینوکس با یه دستور dd ساده می شه ایمیج گرفت. در مورد فرمت صوتی mp3 پیش فرض روی اوبونتو نیست چون یک فرمت «آزاد» نیست و بجاش ogg هست که آزاده. اگر word نیست در ویندوز هم نیست و باید نصب بشه اما open office هست که فرمتش هم آزاده. دوبار تب زدن توی ترمینال چند هزار دستوری پیش روت می ذاره که با یاد گرفتن بخش کوچکی از اونها هم واسه خودت ابرقدرتی می شی! در مورد پلاگین هم تصور کن می خوای یه ویژگی ساده به نوت پد ویندوز اضافه کنی، اصلا امکانش هست؟؟ نیست، پس می ری و نوت پد پلاس پلاس نصب می کنی. اما توی همین نصب خام اوبونتو چند ویرایشگر قدرتمند توی ترمینال داره، مثلا vi و nano و برنامه ویرایشگر گرافیکی اش بنام gedit هم کلی ویژگی توپ داره مثل هایلایت کردن سینتکس زبونهای مخلتف و قابلیت پذیرفتن افزونه واسه گسترش دادن قابلیت های برنامه. برای برنامه نویس ها و ادمین ها هم که لینوکس بهشته، بماند.

  • راستی یه چیز جالب هم اضافه کنم. من قدیم ها کلی سی دی برنامه داشتم، حالا همه رو گم کردم. می دونید علتش چی بود؟ توی ویندوز که بودم واسه هر کاری دنبال دانلود کردن و نصب یک برنامه بودم. اما حالا توی گنو/لینوکس برای انجام دادن هر کاری دنبال «یاد گرفتن» کار با یک ابزار آزاد با یک روش درست و استاندارد هستم و چیزهایی که یاد می گیرم وابسته به چیزهایی هستند که آزادی اونها «گارانتی» شده. :)

  • دقیقا متوجه این جمله میشیم با این پست ها:
    Unix Is Simplicity
    و همینطور فلسفه های YAGNI و KISS رو هم در طراحی سیستم یونیکس بیسد می بینیم.

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

  • kal

    بسیار عالی بود جادی جان البته به شخصه زیاد از این تکنیک ها استفاده نمی کنم بلکه معمولا کارهامو با python انجام می دم

  • موفق باشی :-)
    راستی برای متصل شدن به هاستت هم لینوکس بهشته ها! با کمک ssh , scp (به شرط اینکه هاستت پشتیبانی کنه که خوب هاش همه دارند) چنان قدرتی در کار با سایتت پیدا می کنی که نگو! با sftp مثل هلو می تونی فایل ها رو بین کامپیوترت و هاستت جابجا کنی و از ترمینال توی دایرکتوری ها بچرخی و کانفیگ ها رو اصلاح کنی و مانند اینها. :-)