چگونه با Bash شاد کام باشیم (2)

استاندارد

یا علایم خاص در Bash

در قسمت قبل به بحث completion در Bash پرداختیم. این بار بحث شیرین Special Characters را خواهیم داشت. کاراکترهای خاص برای ایجاد قابلیتها و کاربردهای خاصی طراحی شدند که در امور روزمره کار با shell و همچنین در داشتن shell scriptهای بهینه‌تر به ما کمک میکنند.

Pipe (|)
این کاراکتر (که با Shift+\ قابل دسترسیه) همونطور که از اسمش پیداست کار ارتباطی انجام میده، به این شکل که با استفاده از pipe میشه خروجی (stdout) یک دستور رو به دستور بعدش فرستاد. کاربرد این موضوع زمانی هست که بخواید داده‌ای رو با استفاده از چند دستور یا برنامه پردازش کنید و خروجی فیلتر شده یا متفاوتی داشته باشید.
مثال ساده: برای دیدن یک پروسه خاص از لیست پروسه‌ها:

ps aux | grep apache2

دستور ps با پارامترهای داده شده فهرستی از پروسه‌های فعال در سیستم به ما میده. این فهرست معمولا طولانی هست. دستور grep هم عبارت داده شده رو داخل خطوط یک فایل یا ورودی پیدا میکنه و کل خط رو برمیگدونه. حالا نتیجه ترکیب این دو دستور با pipe اینه که خطوط حاوی عبارت apache2 از بین لیست طولانی پروسه‌ها جدا میشه و نمایش داده میشه. Pipe میتونه به تعداد نامحدودی در یک دستور خطی استفاده بشه:

cd /home; du --max-depth=1 ./ | sort -nr | head | awk '{ print $2 }' | cut -d/ -f2

که این دستور لیست 10 شاخه‌ای که بیشترین فضا رو در شاخه home اشغال کردند نمایش میده.

ًRedirections (>,<,>>)
این کاراکترها برای تغییر مسیر ورودی (stdin) و خروجی (stdout) و یا حتی خطاها (stderr) کاربرد دارند. برای مثال میتونید از یک فایل حاوی داده به عنوان ورودی استفاده کنید و بعد از پردازش لازم نتیجه رو در فایل دیگه‌ای ذخیره کنید یا به انتهاش اضافه (append) کنید.
کاراکتر > برای استفاده از محتویات یک فایل (معمولا متنی) به عنوان ورودی (stdin) استفاده میشه. کاراکتر < برای ذخیره خروجی (stdout) یک دستور در یک فایل و کاراکتر << برای append کردن خروجی به انتهای فایل استفاده میشه.
برای مثال از فایلی به نام ‘results’ حاوی لیست نمرات و اسامی دانش‌آموزان سطرهایی حاوی عبارت ali را جدا کرده و در فایل list ذخیره میکنیم:

sort -nr < results | grep -in ali > list

از این کاراکترها برای تغییر مسیر stdout به stderr و بالعکس هم میشه استفاده کرد، مثلا برای دستوراتی که به طور خودکار (مثلا cron) اجرا میشند گاهی این کار انجام میشه:

some_command 2>&1 >> /var/log/command_output

Tilde (~)
این کاراکتر همواره به شاخه خانگی (home directory) کاربر فعلی (که شما دارید باهاش کار میکنید یا دستور به نام اون اجرا میشه) اشاره میکنه. در مسیر دادن به کار میاد:

cd ~/projects → cd /home/ali/projects

به خواندن ادامه دهید

Regexxer

استاندارد

امروز مجددا از طریق فیدهای سایت Fedora Package A Day با برنامه‌ای آشنا شدم که دقیقا چند روز پیش به شدت بهش نیازمند بودم!
مواقعی پیش میاد که توی یک فایل متنی، اعم از کد برنامه‌ای یا فایل تنظیمات یا … نیاز دارید تا چیزی رو Find & Replace کنید. ولی همیشه هم اون String خاص ثابت نیست که به طور معمول این کارو انجام بدید. اینجا لازمه از Regular Expression کمک بگیرید و با کمک برنامه ای که هم برای Find و هم برای Replace یا Substitute از Regex پشتیبانی کنه این کارو انجام بدید. به این شکل میتونید با pattern مناسب اون عبارتی که میخواید از داخل فایل بیرون بکشید و تغییرش بدید.
من چند روز پش برای تغییر کلی لیست استانهای ایران به این موضوع نیاز داشتم. هر چند 30 خط بیشتر نبود. ولی شدیدا ترجیح میدادم که با Regex انجام بدم. ولی نشد. امروز که این برنامه رو دیدم خیلی خوشحال شدم. از این به بعد زیاد به کارم میاد. 😀

برنامه Regexxer با یک محیط نسبتا ساده امکان جستجو و بازنشانی یک pattern خاص رو در بین چندین فایل در یک شاخه میده. برای انتخاب فایل هم امکان مشخص کردن pattern هست.
تصویر Regexxer

همونطور که داخل عکس مشخصه، دو فیلد برای pattern جستجو و یکی هم برای ترکیب replace سمت راست هست. زیرش بخشی از فایل و نمونه متنی که match میشه هست و در پایین هم کادر کوچیکی نمونه از متن بعد از replace رو نمایش میده.

اگر کاربر اوبونتو هستید، از طریق Synaptic یا apt-get میتونید برنامه رو نصب کنید. برای سایرین هم سورس و نسخه rpm برنامه داخل سایتش هست.

امیدوارم این برنامه همونطور که برای من مفید بود، به درد شما هم بخوره. 😉

چگونه با Bash شاد کام باشیم (1)

استاندارد

یا completion در Bash

اصولا webmaster یا sysadminهای لینوکسی روزانه سر و کار زیادی با shell دارند. یکی از shellهای پرکاربرد و محبوب و نسبتا کامل برای خاندان یونیکس bash هست. bash مخفف born again shell یا shell خیلی باحال میشه! 😀
اطلاعات بیشتر راجع به bash اینجا هست: http://en.wikipedia.org/wiki/Bash

کار کردن با شل قلق ها و ترفندها و به قولی short handهای زیادی داره، که اگر بدونیم خیلی شیرین و لذت بخش و سریع خواهد بود! اغلب علت اینکه تازه کارهای بی تجربه از شل و ترمینال و … بدشون میاد (یا حتی میترسند) وارد نبود به این ریزه کاریها و نکته هاست.

یکی از نکات کنکوری کار کردن با اکثر ترمینال ها استفاده از قابلیت completion هست. این قابلیت کما بیش توی اکثر محیطهای متنی دیده میشه… حتی cmd ویندوز هم داره .. ولی خیلی ناقص و فقط در حد شاخه‌ها و اسم فایلها! این قابلیت برای تکمیل عبارات و کلمات مربوط به دستورها یا نام شاخه ها عموما به کار میره (میتونه فراتر از اینها هم باشه!)
کلیدی که عموما کار کامل کردن رو انجام میده TAB هست. مثلا شما فایل هایی به این شکل در یک شاخه دارید:

.
..
linux-2.0-5.2.687.tar.gz
linux-3.0-5.2.687.tar.gz
linux-2.1-5.2.687.tar.gz
linux-2.5-5.2.687.tar.gz
linux-4.0-5.2.687.tar.gz
ali.tar.gz

حالا مثلا میخواید با دستور cp یکی از اینها (فرضا linux-2.5-5.2.687.tar.gz) رو کپی کنید، به این شکل میتونید از completion استفاده کنید:

cp l(TAB)
که میشه
cp linux-


cp linux-2(TAB)
که میشه
cp linux-2.


cp linux-2.5(TAB)
که اینبار کامل میشه:
cp linux-2.5-5.2.687.tar.gz

مرحله اول ما دستور cp رو تایپ کردیم و بعد از حرف “L” کلید TAB رو یکبار زدیم، bash چک میکنه و میبینه توی این شاخه 5 تا فایل هست که با “L” شروع میشند که وجه اشتراک همشون -linux هست. پس خودش تا کاراکتر “-” که بین همه L دارها مشترکه پیش میره. بعد که ما عدد 2 رو هم وارد کردیم چک کرد و دید 3 تا گزینه مونده و اشتراکشون “.” هست. اینهم کامل کرد. وقتی ما عدد 5 رو وارد کردیم دیگه مورد مشابهی که با linux-2.5 شروع بشه وجود نداشت.. در نتیجه کل نام فایل رو برامون آورد. به این میگند completion!
حالا اگر بخواید فایل ali.tar.gz رو انتخاب کنید کافیه حرف a رو تایپ کنید و TAB رو بزنید! اسم فایل کامل میشه! چون دیگه هیچ فایلی با a شروع نشده.

حالا این روال برای دستورات هم وجود داره. میتونید کامندهای طولانی رو هم اینطوری کوتاه کنید. مثلا برای دستور traceroute (مثلا) کافیه tra و TAB و بعد ro و TAB رو بزنید… کامل میشه! برای دیدن لیست فایلها یا دستورات که با عبارت وارد شده شما شروع میشند باید دوبار TAB رو بزنید.

استفاده از همین تکنیک کوچیک توی کارهای روزانه و خصوصا برای کار در شاخه های مختلف با اسمهای نسبتا طولانی خیلی دستمون رو باز میکنه.

این دو مقاله در همین مورد هست:
http://www.debian-administration.org/articles/316
http://www.debian-administration.org/articles/317

توی مقاله دوم میتویند ببینید که این قابلیت چقدر انعطاف پذیره و میتونید برای خودتون قوانین و توابع completion دلخواه داشته باشید!

پ.ن: تیتر مطلب از نشریات زرد الهام گرفته شده، جدی نگیرید! 😉

امنیت آبی!

استاندارد

وقتی انقلابها میتونه مخملی و نارنجی و بنفش و پوست پیازی باشه، امنیت چرا آبی نباشه؟ 😉

امروز حین مرور feedها برنامه‌ای رو توی feedهای getdeb دیدم که برام جالب بود.
BlueProximity به شما کمک میکنه با یک روش نسبتا ساده کمی امنیت سیستمتون رو بیشتر کنید. حتما شنیدید که شدیدا توصیه میشه زمانی که سیستم رو ترک میکنید اون رو Lock کنید تا دیگران نتونند به اکانت شما دسترسی داشته باشند و احیانا با دسترسی ها شما جایی خرابکاری بکنند! (یا حتی فقط مانیتورتون رو ببینند). ولی اینکه همیشه یادمون بمونه که سیستم رو Lock کنیم و بعد هم یکبار پسورد وارد کنیم خیلی ساده نیست. شاید حتی ندونید که ممکنه بعد از بلند شدن از پشت سیستم درگیر کاری بشید و از سیستم فاصله بگیرید و به اتاق دیگه ای برید.
این برنامه با استفاده از bluetooth با موبایل شما ارتباط برقرار میکنه و به اصطلاح به عنوان handsfree گوشی pair میشه. بعد مدام فاصله گوشی از سیستم رو زیر نظر میگیره و زمانی که گوشی از یک مقدار معینی دورتر شد و زمان خاصی طول کشید سیستم رو به طور خودکار lock میکنه و باز زمانی که گوشی به سیستم نزدیک بشه سیستم unlock میشه.
این نمونه تنظیمات برنامست:
BlueProximity Settings

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

اگر میخواید زمان دور شدن و نزدیک شدن دستوری غیر از screensaver اجرا بشه میتونید این فایل رو ویرایش کنید:

~/.blueproximityrc

توضیحات بیشتر و نحوه نصب برنامه: http://blueproximity.sourceforge.net/manual.html
اگر اوبونتو/دبیان استفاده میکنید: http://www.getdeb.net/release.php?id=1273

پ.ن: نگران نباشید! همه چیز تحت کنترله! نه اینجا هک شده، نه من چیزی به سرم خورده! اتفاقیه که هر از گاهی میفته. 😀

تورنت در لینوکس

استاندارد

یکی از تمیزترین و سبکترین clientهای تورنت در لینوکس Deluge هست.
برنامه ای open source با ظاهری زیبا و امکانات نسبتا کامل. اگر کاربر ubuntu هستید میتونید این برنامه رو از طریق synaptic نصب کنید. از اونجایی که سبک و کم حجمه به یکبار امتحانش میارزه. جایی خونده بودم که لقب uTorrent لینوکس رو بهش دادند.
ظاهر و سبک طراحی سایت جدیدشون هم جای تامل داره (وردپرس باز هم هستند!).
اطلاعات بیشتر: http://deluge-torrent.org