Gnu Tips

وبلاگ شخصی وحید معانی

ایجاد یک مخزن محلی برای CentOS

postاز جمله مزیت‌های سیستم‌های گنو/لینوکس این هست که برای نصب برنامه‌ای، دیگه لازم نیست بریم توی اینترنت دنبال فایل نصبش بگردیم، کافیه از توی همون سیستم مخازنی راه‌دوری معرفی شده برای این منظور رو بگردیم. امّا گاهی بنا به دلایلی لازم هست که کار جستجو یا نصب از یک مخزن محلی مانند یک حلقه‌ی DVD یا یک فایل iso انجام بگیره. برای این کار باید این مخزن رو خودمون بسازیم. برای ساخت مخزن ابتدا لازم داریم که فایل iso رو مونت کنیم یا حلقه‌ی CD/DVD رو داخل رام قرار داده سپس مونتش کنیم. برای این کارها به ترتیب دستورات زیر به کار می‌رن:

حالا در مسیر ‪/etc/yum.repos.d‬ فایلی (مثلاً) به اسم local.repo می‌سازیم که شامل محتویات زیر باشه:

به تنها چیزی که باید دقت کنیم این هست که مقدار ‪//path/to/mount/point‬ باید دقیقاً با محلی که CD/DVD یا ISO رو توش مونت کردیم یکی باشه!

حالا کافی هست هر موقع نیاز به استفاده از این مخزن داریم با استفاده از آپشن‌های disablerepo و enablerepo بقیه‌ی مخازن رو غیرفعال و مخزن محلی رو فعال کرده و دستور مورد نظر رو اجرا کنیم. برای مثال دستورات زیر به ترتیب برای جستجو و نصب بسته‌ای به اسم pkgname داخل مخزن محلی که ساختیم مورد استفاده قرار می‌گیرند:

 

انجام کار برای ایجاد کلید (gpg)

postسلام

موقع ساختن کلید با استفاده از gpg معمولاً از ما می‌خواد که کاری با سیستم انجام بدیم تا بتونه کلید معتبرتری بسازه. این کار می‌تونه حرکت ماوس، تایپ یا حتی فشردن تصادفی و بی‌هدف کلید‌های کیبورد یا حتی باز و بسته کردن برنامه‌ها باشه. ولی وقتی قراره کلید بر روی ماشین راه دور (با استفاده از ssh) ایجاد بشه دیگه باز و بسته کردن یا حرکت دادن ماوس یه کار عبس و بیهوده هست. بهترین کار خواندن و نوشتن بر روی دیسک هست. یکی از بهترین روش‌های این کار استفاده از rngd هست. برای این کار ابتدا بسته‌ی rng-tools (بر روی سیستم‌های دبیان بیس) نصب کنید. و قبل از اقدام به ساخت کلید دستور زیر رو وارد کنید:

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

حالا کافی است با استفاده از دستور gpg –gen-key شروع به ساختن کلید کنید. خواهید دید که مثل آب خوردن کلید در عرض چند ثانیه ساخته خواهد شد.

فقط حتماً به یاد داشته باشید که بعد از اتمام ساخت کلید پروسه‌ی rngd که در پس‌زمینه در حال اجرا هست رو کیل کنید:

 

استفاده از یک اینترفیس خاص شبکه برای scp

postسلام

قطعاً تا بحال حداقل یک بار از دستور scp برای انتقال فایل بین دو ماشین گنو/لینوکسی استفاده کردین، ولی در این پست می‌خواهیم شرایط خاصی رو بررسی کنیم. این شرط خاصمون این هست که ماشینی رو به عنوان مبدأ در نظر می‌گیریم که بیش از یک اینترفیس شبکه داره و ما برای انتقال فایل (بنا به دلایلی مانند استفاده از شبکه‌ی داخلی یا …) در نظر داریم برای این کار از اینترفیس خاصی استفاده کنیم، در این صورت برای اینکه به scp بفهمونیم که کارش رو از روی کدوم اینترفیس انجام بده از آپشن BindAddress استفاده می‌کنیم. مقداری که این آپشن می‌گیره از نوع آدرس IP و دقیقاً برابر آدرس IP اینترفیسی که هست که برای این کار انتخاب شده هست. برای مثال دستور زیر مشخص می‌کند که کار انتقال فایل باید از روی اینترفیسی که IP ‫۱۷۲.۲۰.۴.۲۴ داره باید انجام بشه:

 

حذف خطوط خالی از فایل – Bash

postسلام

هنگام نوشتن یه اسکریپت Bash ممکنه لازم داشته باشیم که خطوط خالی یک فایل رو برای پردازش هر چه راحتتره اون نادیده بگیریم امّا چطور باید اینکار رو بکنیم؟!

اگر با دستور grep کار کرده باشید می‌دونید که کارش جستجوی یک الگو داخل یک فایل یا یک استریم هست و خروجیش همه‌ی خطوطی هست که داخل اون الگو صدق می‌کنن. برای مثال دستور زیر رو در نظر بگیرید:

بخش دوّم دستور که ورودیش رو از طریق پایپ (‪pipe (|)‬) از دستور lsmod گرفته همه‌ی خطوطی که توی اونها عبارت brcm وجود داره رو نشون می‌ده و بقیه رو حذف می‌کنه. آپشن ignore-case دستور grep رو در جریان این کار می‌زاره که نیازی به بررسی بزرگ یا کوچک بودن حروف عبارت نیست. یا مثلاً دستور زیر با استفاده از الگوی “^” به دستور grep می‌فهمونه که همه‌ی خطوطی که با الگوری brcm شروع می‌شن رو برگردونه (کاراکتر ^ برای نشون دادن ابتدای خط به کار می‌ره):

یا به عنوان یک مثال دیگه، دستور زیر با استفاده از یک دستور grep دیگه، همه‌ی خطوطی که به حرف c ختم می‌شن رو نشون می‌ده. برای این کار از الگوی “$” برای نشون دادن آخر خط استفاده می‌کنه:

دستور grep آپشنی به اسم invert-match داره که خروجی رو برعکس می‌کنه، یعنی همه‌ی خطوطی که در الگو صدق نمی‌کنن رو چاپ می‌کنه. برای مثال دستور زیر همه‌ی خطوط فایل resolve.conf رو نشون می‌ده بغیر از اونهایی که شامل کاراکتر # هستن:

خب این همه صغرا و کبرا چیدیم که برسیم به اینجا که وقتی لازم داشتیم که خطوط خالی یک فایل رو حذف کنیم می‌تونیم از دستور grep با ترکیب آپشن‌ها و الگوهایی که بررسی کردیم استفاده کنیم. یعنی از الگوی ‪”^$“‬ برای تشخیص خطوط خالی استفاده کنیم و با استفاده از آپشن invert-match همه‌ی خطوطی که شامل این الگو نمی‌شن رو فقط نشون بدیم. الگوی ‪”^$“‬ از این جهت شامل خطوط خالی می‌شه که بین نشانگر اوّل خط (^) و نشانگر آخر خط ($) هیچ کاراکتر دیگه‌ای وجود نداره! برای مثال به دستورات زیر توجه کنید: