مهم‌ترین اشتباهات رایج در محیط خط فرمان

سلام :)

خط فرمان (Command Line) یکی از قدرتمندترین بخش‌های سیستم عامل های شبه یونیکس (Unix-like) و یونیکسی (Unix) است. مانند بسیاری از ابزارهای دیگر، در صورت استفاده نادرست از آن ممکن است که صدمات جبران ناپذیری به سیستم و در حالت کلی به سطح کاری شما وارد نماید. این مقاله قصد دارد تا با معرفی مهم‌ترین این اشتباهات، شما را از انجام دادن غیرعمدی آنها آگاه سازد. در انتهای مقاله نیز راه حل هایی جهت رفع ایرادات احتمالی معرفی است.

دستور userdel

این دستور به صورت پیش فرض فقط کاربر را حذف می کند و اثری بر روی فایل‌های کاربر ندارد. ولی در صورتی که در فایل تنظیمات /etc/deluser.conf حذف فایل‌ها نیز فعال شده باشد، با حذف کاربر، تمامی اطلاعات مربوط به آن نیز حذف می شود و ممکن است فایل های موجود در دایرکتوری وی مهم و ضروری باشد. این قضیه بیشتر بر روی سرورها و هنگام عوض شدن مدیرسیستم (SysAdmin) بروز پیدا می کند. پس قبل از پاک کردن کاربر از تنظیمات فایل /etc/deluser.conf و نیز مهم نبودن فایل‌های کاربر مورد حذف مطمئن شوید.

خراب کردن محتوای فایل با استفاده نادرست از > و >>

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

استفاده نادرست از پارامتر c به جای x

در صورتی که شما قصد استخراج کردن محتوای یک فایل فشرده را با دستور tar داشته باشید، باید از این دستور مانند زیر استفاده نمایید:

tar -zxvf FILE.tar.gz DICRECTORY

حال اگر به جای x اشتباها از c استفاده نمایید، بدون هیچ اخطاری محتوای DIRECTORY جایگزین محتوای فعلی فایل بایگانی شما می شود!

اشتباهی گرفتن خط فرمان‌ها

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

استفاده از * در دستور rm

دستور rm برای حذف فایل و دایرکتوری‌ها استفاده می‌شود. همچنین * نشان دهنده تمامی این عناصر است. گاهی اوقات ممکن است که این دو با یکدیگر و به صورت اشتباه استفاده شوند. در زیر نمونه‌هایی از این اشتباهات ارائه شده اند.
وجود فاصله بین * و آدرس دایکتوری مورد نظر بار حذف:

rm /foo/ *

استفاده از .* و پارامتر -R:

rm -R .*

اشتباه دستور با در این مورد است که در دایرکتوری جایی .. به دایکتوری پدر (parent) اشاره دارد و استفاده همزمان از .* و پارامتر -R باعث می‌شود که دستور rm از پایین به بالا (درون به بیرون) تمامی اطلاعات شما را حذف نماید!

استفاده نادرست از / و . و .. در آدرس‌دهی به پارامترهای دستورات

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

chmod -R 755 ./

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

sudo chmod -R 755 /
sudo chmod -R 755 . /

آدرس دهی اشتباه سخت افزار در دستور dd

دستور dd برای رونوشت برداشتن (کپی) از اطلاعات در سطح پایین استفاده می‌شود. به عنوان مثال برای رونوشت برداشتن از یک فایل و ذخیره آن باید از دستوری مشابه دستور زیر استفاده نمایید:

dd if=big_null_file of=/dev/sdb

که به نظر شما /dev/sdb آدرس سخت افزار مورد نظر مانند فلش مموری است، حال اگر /dev/sdb آدرس دومین هارد شما باشد، تمامی اطلاعات آن از دست رفته و شما فقط یک big_null_file دارید!

برای جلوگیری از این صدمات چکار کنیم؟

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

  • همیشه و در همه حال از تمامی اطلاعات خود نسخه پشتیبان داشته باشد. اگر توانستید نسخه پشتیبان را به صورت های مختلف مانند هارد اکسترنال، دی وی دی، بر روی وب و … به طور همزمان نگهداری نمایید.
  • قبل از اجرای دستورات اساسی مانند rm، mv و chmod حتما یکبار دیگر آن را بازخوانی نمایید.
  • دستور rm را همیشه با پارامتر -i اجرا نمایید.
  • به جای حذف مستقیم اطلاعات توسط rm آن ها را به سطل آشغال منتقل نمایید. برای انجام اینکار در اوبونتو مقاله Make “rm” Move Files To Trash Instead Of Completely Removing Them را مطالعه نمایید. روش های مشابهی نیز در سایر سیستم عامل ها وجود دارد.

منابع و اطلاعات بیشتر

لطفا در صورتی که شما نیز اشتباهاتی در خط فرمان انجام داده و یا از آنها مطلع هستید با به اشتراک گذاشتن آنها، سایرین را نیز آگاه نمایید.
همیشه در امن و امان باشید :)

نظارت همزمان بر چند فایل و دستور (MultiTail)

سلام،

بعد از مدت‌ها دوباره مطلبی در مورد برنامه‌های مفید موجود در لینوکس (و یونیکس) آماده کردم. در این مطلب به معرفی دستورات head، tail و نرم‌افزار MultiTail که برای نظارت (مونیتورینگ) دستورات و فایل‌ها به کار گرفته می شوند، پرداخته ام.

دستور head

این دستور برای بدست آوردن اطلاعات ابتدایی (خطوط) بالایی فایل و خروجی های پایپ شده کاربرد دارد. دستور head به صورت پیش فرض ۱۰ خط از اطلاعات را نمایش می دهد. نحوه استفاده از این دستور به صورت زیر است:

head [options] <file_name>

و یا:

command | head

مانند:

ls -tl | head -n5
total 72
drwxr-xr-x+ 12 saeid  staff    408 Jan 15 21:22 Desktop
drwx------+  9 saeid  staff    306 Jan 15 11:23 Downloads
drwx------@ 59 saeid  staff   2006 Jan 11 23:05 Library
drwxr--r--+ 23 saeid  staff    782 Jan  4 18:52 Documents

دستور tail

این دستور کاملا شبیه به دستور head است با این تفاوت که به جای خطوط ابتدایی، اطلاعات خطوط انتهایی را نمایش می دهد. مانند:

man ls | tail -n15
SEE ALSO
     chflags(1), chmod(1), sort(1), xterm(1), compat(5), termcap(5),
     symlink(7), sticky(8)

STANDARDS
     The ls utility conforms to IEEE Std 1003.1-2001 (``POSIX.1'').

HISTORY
     An ls command appeared in Version 1 AT&T UNIX.

BUGS
     To maintain backward compatibility, the relationships between the many
     options are quite complex.

BSD                              May 19, 2002                              BSD

پارامتر -f دستور tail

پارامتر -f دستور tail باعث می شود که این دستور به صورت زنده (live) باقی مانده و اطلاعات اضافه شده به فایل را در لحظه نشان دهد. این پارامتر بیشتر در بررسی فایل های لاگ استفاده می‌شود. مانند:

tail -f -n5 /var/log/apache2/access_log
127.0.0.1 - - [15/Jan/2012:22:30:12 +0330] "GET /~saeid/ HTTP/1.1" 200 -
127.0.0.1 - - [15/Jan/2012:22:30:27 +0330] "GET /~saeid/phpinfo.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.1" 200 2524
127.0.0.1 - - [15/Jan/2012:22:30:26 +0330] "GET /~saeid/phpinfo HTTP/1.1" 200 78141
127.0.0.1 - - [15/Jan/2012:22:31:11 +0330] "GET /~saeid/phpinfo HTTP/1.1" 200 78412
127.0.0.1 - - [15/Jan/2012:22:31:11 +0330] "GET /~saeid/phpinfo.php?=PHPE9568F34-D428-11d2-A769-00AA001ACF42 HTTP/1.1" 200 2524
127.0.0.1 - - [15/Jan/2012:22:31:11 +0330] "GET /~saeid/phpinfo.php?=SUHO8567F54-D428-14d2-A769-00DA302A5F18 HTTP/1.1" 200 2813

* برای خروج از tail -f از ترکیب Ctrl+C استفاده نمایید.

نرم‌افزار MultiTail

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

نصب MultiTail

برای نصب در اوبونتو/دبیان دستورات زیر را در خط فرمان اجرا نمایید:

sudo apt-get update; sudo apt-get install multitail

برای نصب در مک با استفاده از MacPorts دستور زیر را وارد نمایید:

sudo port install multitail

نحوه استفاده از MultiTail

برنامه MultiTail بسیار انعطاف‌پذیر بوده و قابلیت‌های بسیاری دارد. به عنوان دستور زیر را در نظر بگیرید:

multitail -l 'ping google.com' -l 'ping zebardast.ir'

تصویر زیر خروجی این دستور را نشان می دهد:

نمایش دو دستور Ping در MultiTail

* برای خروج از MultiTail از ترکیب Ctrl+C استفاده نمایید.

حال در کنار این دو Ping یک فایل را نیز به صورت زنده (live) بررسی می کنیم:

multitail -l 'ping google.com' -l 'ping zebardast.ir' /var/log/apache2/access_log

خروجی دستور بالا:

نمایش دو دستور Ping و لاگ آپاچی در MultiTail

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

multitail -l 'ping google.com' -L 'ping zebardast.ir'
PING zebardast.ir (79.175.162.75): 56 data bytes
PING google.com (173.194.69.105): 56 data bytes
64 bytes from 79.175.162.75: icmp_seq=0 ttl=54 time=87.961 ms
64 bytes from 173.194.69.105: icmp_seq=0 ttl=41 time=456.322 ms
64 bytes from 79.175.162.75: icmp_seq=1 ttl=54 time=97.724 ms
64 bytes from 173.194.69.105: icmp_seq=1 ttl=41 time=416.464 ms
64 bytes from 79.175.162.75: icmp_seq=2 ttl=54 time=96.657 ms

از جمله ویژگی‌های MultiTail امکان فیلتر کردن نتایج است. دستور زیر همانند دستور قبلی می باشد با این تفاوت که عبارت 64 bytes from را از خروجی دستور دوم حذف می کند:

multitail -l 'ping google.com' -ke "64 bytes from" -L 'ping zebardast.ir'
PING google.com (173.194.69.105): 56 data bytes
PING zebardast.ir (79.175.162.75): 56 data bytes
64 bytes from 173.194.69.105: icmp_seq=0 ttl=41 time=463.806 ms
 79.175.162.75: icmp_seq=0 ttl=54 time=45.223 ms
64 bytes from 173.194.69.105: icmp_seq=1 ttl=41 time=442.254 ms
 79.175.162.75: icmp_seq=1 ttl=54 time=84.238 ms
64 bytes from 173.194.69.105: icmp_seq=2 ttl=41 time=442.263 ms
 79.175.162.75: icmp_seq=2 ttl=54 time=98.428 ms
64 bytes from 173.194.69.105: icmp_seq=3 ttl=41 time=400.113 ms
 79.175.162.75: icmp_seq=3 ttl=54 time=81.723 ms

پیشنهاد می‌کنم برای مشاهده مثال‌های بیشتر به صفحه Example سایت MultiTail مراجعه کنید.

پیوندها

شاد و پیروز باشید :)

برنامه تلویزیونی صفر و یک با موضوع سیستم عامل های متن باز

سلام :)

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

برنامه صفر و یک

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

از اینکه صدا و سیما بعد از مدت ها بحثی را در زمینه گنو لینوکس آغاز کرده خیلی خوشحالم. در طول ۴۵ دقیقه که به نظر من خیلی کم بود، سعی کردم مفاهیم اصلی و پایه ای گنو/لینوکس را توضیح بدهم.  قرار شد هفته آینده نیز موضوع سیستم عامل های متن باز و آزاد ادامه پیدا کند.

به درخواست دوستان فیلم برنامه که حدود ۴۵ دقیقه است را آپلود کردم.

من حدود ۲۵ اسلاید را برای ارائه آماده کرده بودم که شامل بسیاری از مباحث گنو/لینوکس میشد که متاسفانه بدلیل کمبود وقت فرصت ارائه آن ها را پیدا نکردم. امیدوارم که اگر فرصت دوباره ای پیدا کردم، بحث های مهم تر مانند امنیت، افکت های تصویری و مهاجرت از ویندوز را بیشتر توضیح بدهم.

لینک های مرتبط با برنامه دیروز

پی نوشت

  • فعلا اسلاید مربوط به برنامه رو آپلود نکردم ولی بزودی اون رو هم آپلود می کنم.
  • در آخر ازتون می خوام که انتقادات و پیشنهاداتتون رو بگید. مطمئنا تا وقتی این انتقادات و پیشنهادات نباشه، امکان پیشرفت واقعی هم وجود نداره ;)
  • سرورهای سایت اوبونتو ایران خراب شدن. این هم از شانس بده اوبونتو کاران

از همه دوستانی برام آرزوی موفقیت کرده بودند، خیلی تشکر می کنم 8)
شاد و موفق باشید

بروزرسانی
روز شنبه ۲۷ شهریور ۱۳۸۹ برنامه دوم با موضوع سیستم عامل های متن باز ارائه شد. متاسفانه این برنامه ضبط نشده است.

تجربیات من از ۳ سیستم عامل ویندوز، لینوکس و مک

سلام :)

بعد از مدتی کار کردن با سیستم عامل های مختلف و در آخر با Mac OS X 10.6، تصمیم گرفتم که تجربه شخصی ام را بعد از استفاده از انواع مختلف سه سیستم عامل ویندوز، لینوکس و مک در وبلاگ قرار دهم.

ویندوز

ویندوز

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

ویندوز مزایایی نیز داشت که مهمترین آنها برای من موارد زیر می باشند:

  • کاربرپسند بودن
  • وجود ابزار های بسیار و متنوع
  • وجود بازی های مختلف و زیبا :D
  • در دسترس و عمومی بودن
  • وجود درایورهای سخت افزاری و پشتیبانی از بیشتر سخت افزارها

لینوکس

گنو/لینوکس

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

البته ایراداتی نیز دارد. مهم ترین ایراد آن نبود ابزارهای گرافیکی برای انجام کارهای مختلف و یا ضعیف بودن ابزارهای موجود است. وجود باگ های مختلف در ابزارهای گرافیکی نیز باعث عدم کارایی لازم آنها می شود. مشکل جستجو و دستیابی به اطلاعات نیز نسبت به ویندوز (۷) و به خصوص نسبت به مک واقعا ضعیف است. از طرف دیگر محیط های گرافیکی موجود مانند گنوم یا کی دی ای واقعا User Friendly (کاربرپسند) نیستند. منظور من افکت های تصویری نیست! رنگ بندی، نحوه چیدمان دسکتاپ و… نسبت و ویندوز و مک ضعیف ترند.

مک

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

مک

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

مک نیز مشکلاتی دارد. مثلا خیلی وقت ها شما مجبورید برای انجام دادن کارها از ماوس استفاده کنید در حالی که در ویندوز و لینوکس بسیاری از کارها براحتی با کیبورد قابل انجام می باشند. از طرفی Shortcut های مک بعضی اوقات واقعا سخت هستند. البته بعد از مدتی عادت می کنید :)

عیب دیگر آن گران بودن سخت افزارهای اپل می باشد که البته با نصب مک بر روی سیستم های x86 می توان حل کرد.

و در آخر مک برای من آن قدر مزایا دارد که بتوانم از ایرادات آن چشم پوشی کنم.

دسته بندی سیستم عامل ها و استفاده کنندگان

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

  • برنامه نویسان
    1. مک
    2. لینوکس
    3. ویندوز
  • طراحان و گرافیست ها
    1. مک
    2. ویندوز
    3. لینوکس
  • علاقمندان به بازی های کامپیوتری
    1. ویندوز
    2. مک
    3. لینوکس
  • سیستم های نسبتا قدیمی و ضعیف تر
    1. لینوکس
    2. ویندوز
    3. مک
  • سرورها
    1. لینوکس
    2. ویندوز
    3. مک
  • سایر استفاده کنندگان عمومی دسکتاپ
    1. مک
    2. ویندوز
    3. لینوکس

پیوند ها

پی نوشت

بزودی تجربیات بیشتر خود را در مورد مک می نوسیم.

بروزرسانی
مک اونقدرها هم که فکر می کردم نتونست من رو راضی کنه. برگشتم به دنیای زیبای گنو/لینوکس :)
موفق و شاد باشید :)

نصب Sun JDK 5 بر روی اوبونتو ۹.۱۰ و ۱۰.۰۴

سلام

بسته   Sun JDK نسخه ۱.۵ یا همان ۵ از مخازن اوبونتو ۹.۱۰ و ۱۰.۴ حذف شده و نسخه ۶ آن جایگزین شده است.

ساده ترین راه برای نصب نسخه Sun JDK 5 افزودن مخازن مربوط به آن در اوبونتو ۹.۰۴ به لیست مخازن ۹.۱۰ و ۱۰.۰۴ می باشد. برای این منظور مراحل زیر را دنبال کنید.

۱- فایل /etc/apt/sources.list را با یک ویرایش گر متن مانند gedit باز کنید:

sudo gedit /etc/apt/sources.list

۲- خطوط زیر را به آخر فایل اضافه کرده و بعد از ذخیره سازی آن را ببندید:

## for sun-java5-jdk
deb http://ir.archive.ubuntu.com/ubuntu jaunty-updates main multiverse

۳- لیست بسته ها را بروز کرده و sun-java5-jdk را نصب کنید:

sudo aptitude update
sudo aptitude install sun-java5-jdk

* روش بالا می توانید برای نرم افزارهای دیگر نیز بکار برید.

روش دیگر برای نصب jdk 5 دانلود کردن بسته ی نرم افزاری و وابسته های آن از سایت packages.ubuntu.com می باشد.

موفق باشید