۱۳۹۱/۰۲/۲۹

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

سلام :)

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

دستور userdel


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

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


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

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


در صورتی که شما قصد استخراج کردن محتوای یک فایل فشرده را با دستور tar داشته باشید، باید از این دستور مانند زیر استفاده نمایید:
[bash]
tar -zxvf FILE.tar.gz DICRECTORY
[/bash]
حال اگر به جای x اشتباها از c استفاده نمایید، بدون هیچ اخطاری محتوای DIRECTORY جایگزین محتوای فعلی فایل بایگانی شما می شود!

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


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

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


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

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

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


اگر با خط فرمان و آدرس دهی فایل‌ها آشنا باشید می دانید که / به دایرکتوری ریشه و . به دایرکتوری جاری و .. به دایرکتوری پدر (parent) اشاره دارند. برای عوض کردن دسترسی دایرکتوری جاری در صورتی که در همان دایکتوری باشید باید دستوری مانند زیر را وارد نمایید:
[bash]
chmod -R 755 ./
[/bash]
حال فرض کنید که لازم است از sudo استفاده نمایید و دستور را اشتباها به یکی از صورت‌های زیر وارد کنید. به عدم وجود . قبل از / و فاصله بین . و / دقت نمایید:
[bash]
sudo chmod -R 755 /
sudo chmod -R 755 . /
[/bash]

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


دستور dd برای رونوشت برداشتن (کپی) از اطلاعات در سطح پایین استفاده می‌شود. به عنوان مثال برای رونوشت برداشتن از یک فایل و ذخیره آن باید از دستوری مشابه دستور زیر استفاده نمایید:
[bash]
dd if=big_null_file of=/dev/sdb
[/bash]
که به نظر شما /dev/sdb آدرس سخت افزار مورد نظر مانند فلش مموری است، حال اگر /dev/sdb آدرس دومین هارد شما باشد، تمامی اطلاعات آن از دست رفته و شما فقط یک big_null_file دارید!


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


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

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

  • قبل از اجرای دستورات اساسی مانند rm، mv و chmod حتما یکبار دیگر آن را بازخوانی نمایید.

  • دستور rm را همیشه با پارامتر -i اجرا نمایید.

  • به جای حذف مستقیم اطلاعات توسط rm آن ها را به سطل آشغال منتقل نمایید. برای انجام اینکار در اوبونتو مقاله Make "rm" Move Files To Trash Instead Of Completely Removing Them را مطالعه نمایید. روش های مشابهی نیز در سایر سیستم عامل ها وجود دارد.




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




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