Pipe، Redirection، جستوجو و پردازش متن
جریانهای استاندارد
هر فرایند در Linux سه جریان متنی استاندارد دارد:
- ورودی استاندارد (
stdin) — ورودی دستور؛ شمارهی توصیفگر فایل آن0است - خروجی استاندارد (
stdout) — خروجی عادی دستور؛ شمارهی آن1است - خطای استاندارد (
stderr) — پیام خطا؛ شمارهی آن2است
بهطور پیشفرض، ورودی از صفحهکلید و هر دو خروجی در ترمینال دیده میشوند. Redirection مقصد یا مبدأ این جریانها را تغییر میدهد:
>فایل را ایجاد یا جایگزین میکند؛ در نتیجه پیش از اجرا مطمئن شوید فایل مهمی را بازنویسی نمیکنید.>>خروجی را به انتهای فایل اضافه میکند.<محتویات فایل را ورودی دستور میکند.2>فقط خطاها را به فایل میفرستد.2>&1خطا را به همان مقصدی میفرستد که خروجی عادی رفته است.
Pipe
Pipe با |، stdout یک دستور را به stdin دستور بعدی وصل میکند. این مدل کوچک و ترکیبی، بخش مهمی از فلسفهٔ Unix است: هر ابزار یک کار محدود را خوب انجام میدهد.
در مثال اول، نوشتن [s]shd باعث میشود خود فرایند grep در نتیجه نمایش داده نشود (چرا؟). در بسیاری از موقعیتها pgrep sshd ابزار مناسبتر و خواناتری است.
برای دیدن همزمان خروجی در ترمینال و ذخیرهکردن آن در فایل از tee استفاده کنید:
جستوجوی متن با grep
grep خطهای منطبق با یک الگو را چاپ میکند. چند گزینهٔ پرکاربرد:
-nشمارهٔ خط و-iجستوجوی بدون حساسیت به بزرگی/کوچکی حروف را اضافه میکند.-vخطهای غیرمنطبق را انتخاب میکند؛ نمونهٔ بالا توضیحات را حذف میکند.-Eاز Extended Regular Expression استفاده میکند.-Rدر دایرکتوریها بازگشتی جستوجو میکند و-Iفایلهای باینری را نادیده میگیرد.
استفاده از single quote برای الگوهای regex امنتر است؛ به این شکل shell نویسههایی مانند * و ? را پیش از رسیدن به grep تغییر نمیدهد.
پیدا کردن فایلها با find
find فایلها را بر اساس نام، نوع، زمان، اندازه یا مالک پیدا میکند. نقطهٔ آغاز جستوجو را تا حد ممکن محدود انتخاب کنید:
-type fفایل و-type dدایرکتوری را انتخاب میکند.-mtime -7به فایلهای تغییرکرده در هفت روز اخیر اشاره دارد.-pruneدر مثال آخر مانع ورود به دایرکتوریهایnode_modulesمیشود.
اگر خروجی find به دستور دیگری میرود، با نامهای دارای فاصله درست رفتار کنید. ترکیب -print0 و xargs -0 جداکنندهٔ NUL به کار میبرد و برای همهٔ نامهای فایل امن است:
در عملیات مخرب، ابتدا نتیجه را فقط نمایش دهید و سپس دستور را اجرا کنید. برای نمونه، پیش از حذف فایلهای موقت، خروجی این دستور را بررسی کنید:
تبدیل و خلاصهسازی متن
ابزارهای کوچک زیر را کنار هم قرار دهید تا پاسخ یک سؤال عملی را بسازید:
cutستونها را با جداکنندهٔ مشخص استخراج میکند.sortمرتب وuniq -cتعداد رخدادهای متوالی را میشمارد؛ پس پیش از آن معمولاًsortلازم است.trنویسهها را تبدیل (ترجمه) میکند.sedبرای انتخاب یا جایگزینی خطها وawkبرای کار با ستونها مناسباند.
این pipeline تعداد IPهای پرتکرار در یک فایل لاگ دسترسی را نشان میدهد:
pipelineهای طولانی را مرحلهبهمرحله بسازید. ابتدا خروجی هر دستور را بررسی کنید، سپس آن را به دستور بعدی وصل کنید. این روش عیبیابی را سادهتر میکند.
منابع یادگیری
مستندات و مقالات
- ۱۰۳.۲ - پردازش استریمهای متنی با فیلترها - کتاب LPIC1 جادی — مقالهٔ مرتبط با فیلترهای پردازش متن و ترکیب دستورها
- ۱۰۳.۳ - مدیریت پایهٔ فایلها - کتاب LPIC1 جادی — مقالهٔ مرتبط با کپی، جابهجایی و حذف فایلها و دایرکتوریها
- ۱۰۳.۴ - استفاده از استریمها، Pipeها و Redirectها - کتاب LPIC1 جادی — مقالهٔ مرتبط با stdin، stdout، Redirection و Pipe
ویدیو
- الپیک ۱ - ۰۲۴ - ۱۰۳.۲ - فیلتر استریمهای متنی با دستورات گنو (۴ قسمت) - جادی — آشنایی با فیلتر استریمهای متنی و مشاهدهٔ محتوای فایلها با دستورهای GNU
- الپیک ۱ - ۰۲۹ - ۱۰۳.۳ - مدیریت فایلها - بخش ۲/۳ - دستورهای touch، dd، file و find - جادی — آموزش کار با
touch،dd،fileوfindبرای مدیریت فایلها - الپیک ۱ - ۰۳۱ - ۱۰۳.۴ - استفاده از استریمها و Redirection آنها در پوستههای یونیکسی (۲ قسمت) - جادی — آموزش استفاده از streamها و Redirection در shellهای یونیکسی