Gnu Tips

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

انجام کار برای ایجاد کلید (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 همه‌ی خطوطی که شامل این الگو نمی‌شن رو فقط نشون بدیم. الگوی ‪”^$“‬ از این جهت شامل خطوط خالی می‌شه که بین نشانگر اوّل خط (^) و نشانگر آخر خط ($) هیچ کاراکتر دیگه‌ای وجود نداره! برای مثال به دستورات زیر توجه کنید:

 

 

تنظیم nameserver در سیستم‌های بر پایه Debian

postسلام

برای تنظیم nameserver در سیستم‌های گنو/لینوکس تقریباً اوّلین روشی که همه استفاده می‌کنند فایل resolve.conf موجود در مسیر ‪/etc/‬ هست که هر خط اون نشانگر یک nameserver با حالت کلی زیر هست:

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

اگر شما هم از اون دسته آدمایی هستین که تلاش می‌کنید با استفاده از دکمه‌ی tab دستور رو کامل کنید حتماً هنگام تایپ کردن کلمه‌ی resolve.conf متوجه شدین که در همان مسیر ‪/etc/‬ یک دایرکتوری به اسم resolving.conf.d وجود داره. درون این مسیر یه فایل به اسم base وجود داره که کارش ذخیره‌ی nameserverهاست. و به عبارت دیگه با هر بار بالا آمدن سیستم مقادیر موجود در آن درون فایل resolv.conf قرار می‌گیره. شکل کلی خطوط این فایل هم مانند فایل resolv.conf هست.

و در نهایت راه‌حل سوّم برای زمانی مناسب هست که اینترفیس شبکه قرار هست آدرس IP استاتیک داشته باشه و این کار رو از طریق فایل ‪/etc/network/interfaces‬ انجام می‌دیم. در این حالت هم کافی هست که آدرس IP سرور DNS رو با فرمت:

درون بلاک اینترفیس مورد نظر اضافه کنیم. برای مثال: