قدرت و کارایی عالی خط فرمان در گنو/لینوکس (9)

شل و برنامه های گنو/لینوکس، تمهیدات و امکانات بسیار غنی ای در زمینهء پردازش و دستکاری رشته ها داره. این درواقع بخش قابل توجه و بسیار مهمی از کاربردهای ضروری و اساسی ای هم هست که در محیط سیستم عامل و بخصوص مقوله هایی مثل مدیریت و خط فرمان و شل بهش نیاز داریم.
و اصولا بخش قابل توجهی از کاربرد و پردازش رایانه ها، کار با متن و پردازش رشته ها و فایلهای متشکل از کاراکتر هست. از سطح مدیریت گرفته تا اپلیکیشنها.
همونطور که گفتم بنده در این جستار تنها موارد تجربه و کاربرد عملی خودم رو بیان میکنم؛ بیش از این منوال و رفرنس خوندم، ولی بعلت محدودیت منابع و اولویت‌هام نمیتونم کاری مشابه ترجمه یا حتی اشارهء فراگیر به این برنامه ها رو انجام بدم.
بهرحال کاربردهای بنده، حداقل تاحد زیادی، برای همه، کاربردی و عمومی هست. گرچه خیلی بیش از اینها جای پرداختن هست و هرکس بنا به محدودهء فعالیت خودش ممکنه به انواع دیگری از این برنامه ها و عملیات نیاز داشته باشه.
بسیاری از این برنامه ها هست که هرکدوم دنیای کوچکی هستن (و حتی زبان و فرهنگ و مرجعی برای ساخت زبانهای برنامه نویسی مختلف شدن گاهی) برای خودشون و بعضی اندازهء یک کتاب کوچک رفرنس و منوال دارن.
بهرحال بنده همونطور که در ابتدا اعلام کردم، از همکاری و همفکری و تبادل تجربیات دیگر دوستان به شدت استقبال میکنم؛ وگرنه فکر میکنم بیش از اینها دیگر به تنهایی مطلب و وقت و انرژی چندانی ندارم که در اختیار دوستان بذارم؛ پس کتاب داره بسته میشه، بدون اینکه داستان حتی به نیمه های خودش رسیده باشه! چون داستان شل و برنامه های خط فرمان و کاربردهاشون بیش از اینها هست.
اگر بریم روی وادی آموزش و شروع از پایه ها که دیگه خودش یک مبحث بسیار غنی و بزرگی هست.
به دوستانی که میخوان کار اصولی و حرفه ای با شل و برنامه های خط فرمان بکنن و در این وادی تازه کار هستن، توصیه میکنم ابتدا رفرنس-منوال BASH رو که پایه هست بطور کامل مطالعه بکنن و با قابلیتهای این شل مجهز و قوی بقدر کافی آشنا بشن (البته توصیهء بنده بنا بر مطالعهء رفرنس رسمی اون هست – از کیفیت فرضا خودآموزهای دیگه اطلاعی ندارم).

خب سخن کوتاه؛ سریع و مختصر میریم سر اصل مطلب و رویهء مثال عملی و توضیحش:

find . -iregex '.*\.htm[l]?' -execdir sed -r -i.bckup 's#file:///c:/windows/desktop/manual#..#ig' {} \;

این فرمان رو بنده برای اصطلاح اشتباهی که در منوال مرحله سازی یک بازی ! کرده بودن (آخه تهیه کنندگانش حرفه ای نبودن دیگه؛ ظاهرا کم سن و سال هم بودن!!) بکار بردم.
داستان از این قرار بود که بعضی آدرس لینکهای منوال رو که به فرمت HTML بود بصورت مطلق داده بودن. همونطور که مشاهده میکنید مثلا آدرس دسکتاپ ویندوز خودشون رو! اونم ویندوزهای قدیمی تری که با ویندوزهای امروزی آدرس دسکتاپشون زمین تا آسمان تفاوت میکنه (اگر یادتون باشه این آدرس دسکتاپ ویندوزی مثل ۹۸ هست).
خب این لینکها بسادگی روی سیستم دیگران کار نمیکرد.

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

فکر کنید شما تعداد زیادی فایل دارید که میخواید یک خط یا قسمتهای معینی از اونها رو، درصورت وجود، با مقدار دیگری تعویض کنید.
مشخص هست که باز کردن جداگانهء هرکدوم از این صفحات در یک ادیتور و Replace کردن مقدار مورد نظر، همچین هم کار آسان و سریعی نیست و حوصلهء آدم رو سر میبره!! بخصوص که فایلها در دایرکتوریهای مختلفی پراکنده باشن. ضمنا امکان اشتباه و جاانداختگی هم همیشه وجود داره، ولو هرچقدر دقت به خرج بدیم بازهم طبق تجربه، با احتمال نه چندان ناچیز امکان انواع اشتباهات اجتناب پذیر و اجتناب ناپذیر ! وجود داره. فکر کنید تعداد فایلها اگر خیلی زیاد بود چطور!
خب این از اون مسایلی هست که اصولا ذاتش بدرد حل در خط فرمان میخوره.
روش خط فرمان بسیار سریع و راحت و کمتر مستعد خطا و از قلم اندازی هست. اما بهرحال باید بهش مسلط باشید و بدونید دارید چیکار میکنید و تدابیر امنیتی و محتاطانهء کافی رو بکار ببندید تا این مزایا رو باهاش بدست بیارید. اصولا خط فرمان برای افراد مسلط و حرفه ای هست، وگرنه میتونه حتی صدمه ای بیشتر از روشهای دیگه بزنه درصورت کاربرد غلط. مثلا شما با یک خط فرمان میتونید به سرعت تعداد زیادی فایل رو بطور غیرقابل برگشت یا حداقل «به سختی بسیار قابل برگشت»ی نابود یا غیرقابل استفاده کنید.
اما همین امر بخاطر قدرت و سرعت بالای خط فرمان هست. مثل سلاح یا ابزاری نیرومند که اگر آدم کاردان ازش استفاده کنه استفادهء بهینه و فراوان ازش میبره و اگر دست آدم ناشی بیفته و خطای خطرناکی بکنه، ممکنه فاجعه ببار بیاره.

خب، فرمان ما در بالا درواقع ترکیب دو برنامهء خط فرمان هست.
برنامهء find که در دایرکتوری جاری و تمام زیردایرکتوریهای اون میگرده و فایلهایی رو با نام مطابق با الگوی regex (همون رگولار اکسپرشن معروف) داده شده که بسادگی فایلهایی با پسوند htm یا html رو معرفی میکنه، پیدا کرده، بعد این فایلها رو به برنامهء sed معرفی میکنه (برنامهء sed رو با این پارامتر اجرا میکنه).
یک regex هم به sed داده شده که الگوی مورد جستجو در فایل رو معرفی میکنه (file:///c:/windows/desktop/manual) و یک عبارت جایگزین (..) که بجای هرمورد یافت شده جانشین میشه.
نتیجه این هست که تمام فایلهای ما درجا و به سرعت بالایی اصلاح میشن.
البته ما با دادن آپشن i به sed گفتیم که فایلها رو درجا ویرایش کنه. وگرنه بصورت عادی/پیشفرض اینطور کار نمیکنه.
با پارامتری که به این آپشن داده شده، یعنی .bckup بهش گفتیم که از نسخهء اصلی هر فایل یک بکاپ با این پسوند تهیه کنه (این فایلها در دایرکتوری ای که هر فایل قرار داره ایجاد میشن). این یک تمهید احتیاطی هست که درصورت اشتباه و خرابی نتیجه، بتونیم فایلهامون رو برگردونیم.
برگرداندن این فایلها هم با فرمانهای مربوطه براحتی امکان پذیر هست. همچنین بعد از اینکه کارمون تمام شد و همه چیز رو تست کردیم و مطمئن شدیم که اشتباهی رخ نداده و فایلهای ویرایش شده کاملا صحیح و قابل استفاده هستن، میتونیم با فرمان دیگری تمام این فایلهای پشتیبان رو به سرعت پاک کنیم.
البته خوب هست که اینطور فرمانهای مکمل رو هم اینجا لیست کنم، ولی بنده تا اینطور چیزها رو تست نکنم و صددرصد کار نکنه درج نمیکنم و فعلا وقت هم ندارم.

خب داستان ما به سر رسید و کلاغه به خونش نرسید!!

این دو برنامه، find و sed، برنامه های مفصل و قدرتمندی هستن و کاربردهای بسیاری دارن. find اندازهء یک کتاب کوچک منوال داره و برنامهء اساسی و پرکاربردی هست. چون با اون میتونید فایلها رو با معیارهای بسیار منعطفی از نام گرفته تا تاریخ و پرمیشن ها و غیره از مکانهای مختلف جستجو کرده و بر روی اونها کارهای مختلفی از چاپ سادهء نامشون تا همینطور عملیات که دیدید و دلیت و کپی و غیره انجام بدید. میتونید با برنامه های دیگه ترکیبش کنید و عملیات چند مرحله ای با چند برنامهء مختلف روی فایلهای مورد نظر انجام بدید.
سرعتش هم از جستجوی برنامه های محیط گرافیکی بالاتر هست.

فقط نکته ای که همیشه یادتون باشه اینکه، همیشه قبل از انجام کار واقعی تست کافی انجام بدید و تدابیر امنیتی کافی رو هم بکار ببرید.
یعنی مثلا یک عمل پیچیده رو ابتدا روی فایلهای تست انجام بدید تا از کارکردش اطمینان کافی بدست بیارید.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>