مدیریت پارامترهای ارسالی به اسکریپت‌های بش با دستور getopts

در برنامه‌های خط فرمانی cli کاربر با استفاده از پارامتر با برنامه و یا اسکریپت ارتباط برقرار می‌کنه بنابراین یکی از اولین قدمهای نوشتن یک اسکریپت حرفه‌ای اینه که پارامترهای ارسال شده به اسکریپت رو بصورت کاملا حرفه‌ای بررسی کنید. دستور getopts یکی از برنامه‌های خیلی خوب برای مدیریت پارامترهای ارسالی به اسکریپته که به زیباترین شکل ممکن آپشن‌های را بررسی و پارس میکنه. اما قبل از بررسی این دستور بهتره تا حدودی با پارامترهای ارسالی به برنامه‌های cli آشنا بشیم.
در لینوکس پارامترهایی که به یک دستور یا اسکریپت بش ارسال می‌کنیم به سه صورت میتونه باشه.
آپشن‌های تک کاراکتری ( single-character options) مثل ‎-a در دستور ls
آپشن‌های طولانی سبگ گنو (GNU-style long option) مثل ‎- -all
آپشن‌های طولانی سبک XF86 یا (XF86-style long options) مثل ‎-all

برنامه getops قادر به بررسی آپشن‌های طولانی سبگ گنو و آپشن‌های طولانی سبک XF86 نیست و فقط میتونه پارامترهای رو به شکل تک حرفی ببینه.

این مثالها رو در نظر بگیرید.

 

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

این کد رو یک نگاهی بهش بکنید تا ببینیم چجوری باید از getopts استفاده کنیم.

از اونجا که پارامترهای ارسالی به اسکریپت ما ممکنه بیش از یکی باشه از یک حلقه while استفاده می‌کنیم تا تک تک پارامترها رو بررسی کنیم

عبارت abc:d:‎  به getopts میگه که پارامترهای اسکریپت اینهاست

  • -a
  • -b
  • -c param
  • -d param

حرف a به تنهایی حرف b به تنهایی حرف c به همراه یک پارامتر و بلاخره حرف d به همراه یک پارامتر اضافه!  توجه دارید که هر دو نقطه جلوی یک پارامتر به معنی یک پارامتر اضافه است! در هر بار اجرای getopts یکی از پارامترهای ارسالی به اسکریپت خونده میشه و توی متغییر OPTION ریخته میشه و ما با استفاده از یک حلقه case این پارامترها رو دونه دونه بررسی می‌کنیم!  اگه پارامتر اضافه‌ای داشته باشیم توی متغییر OPTARG ریخته میشه.

اگر اسکریپت رو با همراه پارامترها اجرا کنیم نتیجه این خواهد بود.

 

ارسال شده در اپن سورس, کامپیوتر, لینوکس, نرم افزار آزاد, نرم‌افزار آزاد | برچسب‌شده , , , , , , , , , | پاسخ دهید:

فایل و پوشه موقت temp در لینوکس

هر توزیع لینوکس دو دایرکتوری موقت داره که توی مسیرهای ‎/tmp و ‎/var/tmp قرار دارند. این دو دایرکتوری  با هم کاملا متفاوت هستند. فایلهای دایرکتوری ‎/tmp در هر بار ریبوت سیستم ممکنه پاک بشه ولی اطلاعات دایرکتوری ‎‎/var/www بعد از ریبوت سیستم پاک نخواهد شد.

برخی توزیع‌ها پوشه ‎/tmp رو با فایل سیستم tmpfs ایجاد می‌کنند. فایل سیستم tmpfs یک فایل سیستم موقته که به جای هارد توی رم ساخته میشه و چون در رم قرار داره سرعت بسیار بالاتری از   هارد داره و البته بعد از ریبوت اطلاعات پاک خواهد شد (که برای دایرکتوری ‎/tmp نه تنها بد نیست که لازمه).

دستور  mktemp یک فایل یا پوشه موقت و یا temp توی سیستم میسازه و نام پوشه یا فایلی که ساخته رو به عنوان خروجی نمایش می‌ده. این دستور به این شکل استفاده می‌شه.

به جای همه X های که بعد از نام وارد شده یک کاراکتر تصادفی ایجاد میشه و به نام فایل اضافه میشه.

خروجی می‌تونه چیزی مثل این باشه nameutIz یعنی یک فایل با نام nameutIz توی دایرکتوری جاری ساخته میشه و نام فایل یعنی nameutIz هم در خروجی استاندارد چاپ میشه.

فایل خروجی این دستور مجوزهای محدودی داره و دیگر کاربرها قادر به دیدن و تغییر فایل نیستند (فایل‌های موقت و یا temp به دلایل امنیتی باید فقط بوسیله ایجاد کننده قابل مشاهده باشند.)

 

ارسال شده در اپن سورس, دسته‌بندی نشده, کامپیوتر, لینوکس, نرم افزار آزاد, نرم‌افزار آزاد | برچسب‌شده , , , , | پاسخ دهید:

پارامتر‌های کرنل

پارامترهای مختلفی را می‌توان در هنگام بوت به کرنل لینوکس فرستاد. با استفاده از این پارامترها می‌توان به کرنل اطلاعاتی در مورد پارامترهای سخت‌افزار داد. طول پارامترهای ارسالی به کرنل باید حداکثر ۲۵۵ کاراکتر باشد.
پارامترها را با فرمت زیر به کرنل ارسال می‌کنیم.

name=value1 , value2, value3

چند پارامتر کرنل که بیشتر استفاده می‌شود.
quiet: لاگ سیستم را غیرفعال می‌کند.
nfsroot: آدرس فایل سیستم NFS که به عنوان روت استفاده می‌شود.
nfsaddrs: آدرس فایل سیستم ان‌اف‌اس.
init : دستور نخستین (initial) که کرنل لینوکس باید اجرا کند. به عنوان مثال
init=/sbin/init
single: به init دستور می‌دهد که سیستم را به صورت تک کاربره بوت کند.
root=/dev/device: به کرنل دیوایسی (ابزاری) که به عنوان فایل سیستم روت است را اعلام می‌کند.به عنوان مثال
root=/dev/sda2
vga: حالت ویدئو را مشخص می‌کند.مثال
vga=ask یک منو برای انتخاب حالت ویدئو باز می‌شود.
ro: این پارامتر به کرنل اعلام می‌کند که سیستم فایل روت را به صورت فقط خواندنی مونت کند.
rw: به کرنل اعلام می‌کند که فایل سیستم روت را به صورت خواندنی نوشتنی بوت کند.
panic: به صورت پیش فرض کرنل بعد از یک «کرنل پنیک» ری‌بوت نمی‌شود. اما با تنظیم این پارامتر می‌توان به کرنل دستور داد که بعد از «کرنل پنیک» بعد از مدت زمان مشخص شده ری‌بوت شود. مثال
panix=10
maxcpus: همانطور که از نام پارامتر مشخص است این پارامتر حداکثر تعداد پروسسوری که کرنل استفاده خواهد کرد را مشخص می‌کن. از این پارامتر می‌توان برای بررسی و تست سیستم عامل و نرم‌افزارها در سخت‌افزارها با سرعت متفاوت استفاده کرد. مثال
maxcpus=2
debug: دیباگ کرنل لینوکس را فعال می‌کند.
selinux: در زمان بوت selinux را فعال یا غیر فعال می‌کند.
raid=/dev/mdN: آرایه RAID در کرنل را مقدار دهی می‌کند. مثال
raid=noautodetect
mem: مقدار حافظه قابل استفاده حافظه برای کرنل را مشخص می‌کند. مثال

mem=2048M

initrd: مسیر initrd را مشخص می‌کند و کرنل این initrd و یا رم‌دیسک نخستین را لود می‌کند.با استفاده از initrd می‌توان ماژول‌ها و درایورهای مورد نیاز را لود کرد. مثال
initrd /initrd.img

noprobe: برای عیر فعال کردن هارد‌دیسک‌های hdb استفاده می‌شود. مثال
hdX =noprobe

ارسال شده در اپن سورس, تکنولوژی, علم, کامپیوتر, لینوکس, نرم افزار آزاد, نرم‌افزار آزاد | برچسب‌شده , , , , , , , , , , , | یک پاسخ

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

به اشتراک گزاری اینترنت در لینوکس کار سختی نیست. برای اشتراک اینترنت در لینوکس باید چند رول رو به iptables اضافه کنید.
یک اسکریپت خیلی ساده  برای انجام اینکار نوشتم که اطلاعاتی مثل کارت شبکه و … رو از شما میگیره و تنظیمات رو انجام میده! البته این اسکریپت فعلا فقط روی اوبونتو و دبیان جواب میده اما سازگاری کردنش با سایر توزیع‌ها خیلی ساده است 🙂
شاید مجوز تعیین کردن برای چند خط کد ساده کار خنده داری باشه 🙂 اما مجوز این اسکریپت GPL و GPL2 هست! این کد رو قراره تغییرات بیشتری بدم و کاملترش کنم 🙂
خوب این هم اسکریپت توی یک فایل ذخیره کنید و بهش مجوز اجرا بدید. اینطوری:

$chmod 755 script.sh

و با کاربر ریشه اجرا کنیدش:

sudo script.sh ppp0 eth0 s

به اسکریپت سه تا پارامتر میتونید بدید:
پارامتر اول دیوایس اینترنت شما هست مثلا اگه از adsl استفاده میکنید به احتمال زیاد دیوایش شما میشه ppp0 ویا اگه اینترنت رو از کابل شبکه میگیرید میشه eth0
پارامتر دوم دیوایسی هست که قصد دارید اینترنت رو با اون به اشتراک بگذارید مثلا eth0
و بلاخره پارامتر سوم که تعیین میکنه قصد دارید اشتراک اینترنت رو بصورت موقت و تا زمان ری‌استارت بعدی داشته باشید و یا دائم! برای حالت موقت از s و برای حالت دائم از p استفاده کنید.
اگه موقع اجرای برنامه پارامتری رو وارد نکنید اسکریپت پارامترها رو از شما میپرسه!

 

ارسال شده در اپن سورس, شبکه, علم, کامپیوتر, لینوکس | برچسب‌شده , , , , , , , | ۷ پاسخ

جنگ ویتنام

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

نتیجه این جنگ برای مردم ویتنام حکومت دیکتاتوری و فقر و فلاکت بود.

ارسال شده در اجتماعی, سیاسی | پاسخ دهید:

رمزنگاری ۱

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

خوب فرض کنیم علی تصمیم داره به مهناز یک ایمیل یا نامه بفرسته! خوب کامپیوتر علی که همون S هست پیام رو به F که در اینجا سرور اینترنت هست میفرسته و F هم پیام رو به کامپیوتر E و A و بعد C و D و G و H میفرسته و در انتها پیام به مهناز میرسه! نکته مهم اینجاست که اگه علی همین پیام رو مجددا بفرسته ممکنه پیام مسیر کاملا متفاوتی رو طی کنه و مثلا اینبار از شبکه B هم عبور کنه! از طرفی در حالت معمولی پیامها بدون رمزنگاری در شبکه منتقل میشن و این یعنی تمام سرورها و نودهای داخل اینترنت یعنی A C D G و … خیلی راحت میتونن پیامها رد و بدل شده بین علی و مهناز رو بخونن و حتی متن پیام اونها رو تغییر بدن!

خوب سئوال اینجاست که برای امن کردن ارتباطات چه باید کرد؟ برای امن کردن ارتباطات در اینترنت از یک روش بسیار پیچیده و البته بسیار ساده استفاده میشه! دانشمند‌ها دو تا دستگاه ساختن (کلید عمومی و خصوصی) که این دستگاه‌ها باید با هم استفاده بشن، این یعنی که دستگاه کلید خصوصی من فقط با دستگاه کلید عمومی من کار میکنه و دستگاه کلید خصوصی شما با دستگاه کلید عمومی شما!  اگه شما پیام خودتون رو به دستگاه کلید خصوصی بدید این دستگاه پیام شما رو به رمز در میاره و خروجی این دستگاه کاملا رمز شده است! حالا اگر این پیام رمزشده رو به دستگاه کلید عمومی بدید کلید عمومی اون پیام رمز شده رو به پیام اصلی تبدیل میکنه. لطفا عکس رو ببینید! (برای دیدن عکس با اندازه بزرگ روی عکس کلیک کنید.)

چند تا نکته اینجا وجود داره

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

و اما ببینیم مهناز و علی چجوری با رمزنگاری میتونن پیامهای خودشون رو به رمز در بیارن! علی و مهناز هر کدوم کلید خصوصی رو پیش خودشون نگه میدارند و اون رو به هیچ کس نمیدن. اما هر کدوم کلید عمومی خودشون رو به طرف مقابل میده! اینطوری علی کلید عمومی مهناز رو داره و مهناز کلید عمومی علی رو! حالا تصور کنیم علی تصمیم داره به مهناز یک پیام بده کافیه پیام رو با کلید «عمومی مهناز» به رمز در بیاره و اون رو برای مهناز بفرسته اون طرف هم مهناز بعد از دریافت پیام رمز شده، پیام رو با «کلید خصوصی» خودش از رمز خارج میکنه! به این شکل فقط مهناز میتونه پیام رو ببینه و سیستم‌ها و نودهایی که بین راه پیام رو میبینند یعنی (E A C D و …) قادر به خوندن پیام نیستند و تنها چیزی رو که میتونن ببین پیام به رمز شده است که چیزی جز یک سری کد ناخوانا نیست.

خوب تا اینجا همه چیز خوب پیش میره و دیگران قادر نیستن پیام ما رو بخونن اما هنوز چند اشکال وجود داره! فرض کنیم یکی از سیستم‌های بین راه مثلا A پیام ارسالی از علی رو دور بریزه و به جای اون یک پیام جعلی رو با کلید عمومی مهناز به رمز کنه و برای مهناز بفرسته! در این صورت مهناز میتونه پیام دریافت شده رو با کلید خصوصی خودش باز کنه و بخونه! اما این پیام پیام علی نیست و یک پیام جعلی است!

ادامه دارد 🙂

ارسال شده در اپن سورس, تکنولوژی, شبکه, علم, کامپیوتر, لینوکس | برچسب‌شده , , , , , | ۳ پاسخ

لذت موسیقی با MPD

به نظر شما یک نرم افزار پخش موسیقی خوب چه مشخصاتی باید داشته باشد!؟

  • انواع فرمتهای موسیقی را پشتیبانی کند.
  • اگر همزمان با پخش موسیقی کار هم میکنید محیط برنامه مزاحم کار شما نباشد.
  • بتوانید موسیقی را بر اساس خواننده سبک و یا … دسته‌بندی و اجرا کنید.
  • امکان کنترل برنامه از انواع محیط‌ها را داشته باشید.
  • و …

MPD و یا music player daemon یک برنامه یا دیمن ازاد و اپن‌سورس برای گنولینوکس است که بیشتر مشخصاتی که یک نرم‌افزار پخش موسیقی خوب باید داشته باشد را یک جا در اختیار شما قرار می‌دهد!

این برنامه بصورت دیمن اجرا می‌شود (دیمن به این معنی است که برنامه در پس‌زمینه اجرا می‌شود و محیط بصری برای ارتباط با برنامه وجود ندارد برای اشنایی با دیمن‌ها این را بخوانید.). این برنامه امکانات زیادی دارد مانند دسته بندی بر اساس خواننده و سبک و …

از آنجا که MPD بصورت دیمن و در پس‌زمینه اجرا می‌شود پس کاربر بصورت مستقیم نمیتواند با برنامه کار کند. برای ارتباط با برنامه باید از کلایت‌های MPD استفاده کرد. کلایت‌های زیادی برای MPD وجود دارد که بروی پلتفرم‌های مختلف قابل اجرا و نصب است و در نتیجه MPD را میتوان از هر محیطی کنترل کرد! چند کلاینت کاربردی MPD:

کلاینت‌های خط فرمانی:

MPC: یک کلاینت ساده که MPD را از خط فرمان لینوکس کنترل می‌کند.

$mpc play اجرای موسیقی

$mpc next  رفتن به ترک بعد

$mpc prev بازگشت به ترک قبل

ncmpc: یک کلاینت برای کنترل از طریق خط فرمان برنامه ncpmc بر خلاف mpc که یک برنامه cli است برنامه cui است یعنی کاربر در یک محیط فعال با برنامه کار میکند.

ncmpcpp: شبیه برنامه ncmpc با محیط رنگی و امکانات بیشتر.

ncmpc++ncmpc++

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

GMPC: کلاینت MPD با توابع GTK برای محیط گنوم و قابل نصب در ویندوز.

ARIO: کلاینت با توابع GTK برای لینوکس و ویندوز.

سایر کلاینت‌ها:

افزونه برای مرورگر فایرفاکس: با استفاده از این افزونه میتوانید در مرورگر فایرفاکس MPD را کنترل کنید و از موسیقی لذت ببرید. برای نصب به این آدرس بروید.

کلاینتهای تحت وب: برای کنترل موسیقی از راه دور و از طریق اینترنت مانند ::phpMpReloaded:: و mpd remote

علاوه بر کلاینتهای بالا تعداد زیادی کلاینت دیگر هم وجود دارد مانند کلاینت برای مبایل (کنترل موزیک از مبایل) با استفاده از بلوتوث و وایرلس! کلاینتهای جاوا،‌ که میتوانید لیست همه کلایتنها را در اینجا ببینید.

نصب در گنولینوکس: برای نصب در اوبونتو دبیان و مینت کافی است از دستور‌های زیر استفاده کنید.

نصب MPD:

$ sudo apt-get install mpd

نصب mpc:

$ sudo apt-get install mpc

نصب ncmpc و ncmpcpp:

$sudo apt-get install ncmpc

$ sudo apt-get install ncmpcpp

نصب GMPC:

$ sudo apt-get install gmpc

نصب ario:

$ sudo apt-get install ario

ارسال شده در اپن سورس, شبکه, کامپیوتر, لینوکس, مبایل | برچسب‌شده , , , , , , | پاسخ دهید:

بازی تخته نرد

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

ارسال شده در اپن سورس, تکنولوژی, جامعه, سرگرمی, کامپیوتر, لینوکس | برچسب‌شده , , , , , , , , , , , , , , | ۲ پاسخ

همسترهای من

برای آخرین مرتبه همستر رو توی دستم گرفتم. باورش سخته که آدم به یک همستر (یا به قول خیلی‌ها موش) اینقدر عادت کنه! و دل کندن ازش اینقدر سخت بشه!

همستر


همستر


همستر

ارسال شده در سرگرمی, عکس | برچسب‌شده | ۳ پاسخ

مورچه‌ها سخت‌کوش نیستند

همیشه شعر‌ها و افسانه‌ها و داستان‌های قدیمی مورچه‌ها رو حشراتی کوشا و اجتماعی معرفی کرده. این تفکر اون قدر تکرار شده که تقریبا همه به این باور رسیدند که این حشرات دوست داشتنی خیلی کوشا و فعال و اجتماعی هستند. اما گویا واقعیت چیز دیگری است!
حشره شناس Boston Review از دانشگاه بوستون این موضوع رو بررسی کرده و نظریه دیگری رو ارائه میکنه.
او میگه حکایت‌هایی که در مورد جامعه دیوان‌سالاری مورچه‌ها (بروکراسی مورچه‌ها) گفته میشه تماما دروغه! بسیاری از رفتار‌های مورچه‌ها فقط پاسخ به محرک‌هاست و نه یک برنامه هدف‌مند! مورچه‌ها به این دلیل دور یک خوراکی جمع میشن چون بو و رایحه اون خوراکی (مواد شیمیایی) رو حس کردند!
و اما در مورد کوشا بودن مورچه‌ها، واقعیت اینه که حدود یک سوم مورچه‌های کلونی در لحظه کاری انجام نمی‌دن و بی‌کار هستن!

این مطلب رو به انگلیسی اینجا بخونید.

ارسال شده در جامعه, شعر, علم | برچسب‌شده | پاسخ دهید: