لینوکس‌لرنینگ

آموزش کامل استفاده از دستور cat در لینوکس

اگر تا به حال حتی برای چند ساعت با ترمینال لینوکس کار کرده باشید، به احتمال زیاد نام دستورcat  به گوشتان خورده است. این دستور یکی از ابزارهای پایه‌ای و در عین حال بسیار قدرتمند در خط فرمان است که هر کاربری، از مبتدی تا حرفه‌ای، باید با آن آشنا باشد. اما دستور cat  در لینوکس چیست و چه کارهایی می‌توان با آن انجام داد؟

دستورcat  که نام آن مخفف کلمه “concatenate” (به معنای به هم پیوستن یا الحاق کردن) است، یکی از فرمان‌های اساسی در سیستم‌عامل‌های شبه یونیکس (Unix-like systems) از جمله لینوکس (Linux) محسوب می‌شود. تاریخچه این دستور به اولین روزهای پیدایش یونیکس برمی‌گردد و سادگی و کارایی آن باعث شده تا امروز هم یکی از پراستفاده‌ترین ابزارها باقی بماند.

کاربرد دستور cat در نگاه اول بسیار ساده به نظر می‌رسد: نمایش محتوای یک یا چند فایل در خروجی استاندارد (معمولاً صفحه ترمینال). اما قدرت واقعی

 این cat command  زمانی مشخص می‌شود که آن را با ابزارهای دیگر خط فرمان مثل ریدایرکشن (redirection) و پایپ (pipe) ترکیب می‌کنیم. کاربردهای اصلی این دستور را می‌توان در سه دسته خلاصه کرد:

  1. نمایش محتوای فایل‌ها: سریع‌ترین راه برای دیدن محتویات یک فایل متنی.
  2. ادغام (Concatenate) فایل‌ها: ترکیب محتوای چندین فایل در یک فایل واحد.
  3. ایجاد فایل‌های جدید: ساختن سریع فایل‌های متنی کوتاه بدون نیاز به باز کردن ویرایشگر متن.

برای شروع، بیایید یک مثال خیلی ساده را ببینیم. فرض کنید فایلی به نام file.txt  داریم و می‌خواهیم محتوای آن را ببینیم:

Bash

cat file.txt

با اجرای این دستور ساده، تمام محتویات فایل file.txt  در ترمینال شما نمایش داده می‌شود. به همین سادگی! در ادامه این مقاله، به صورت دقیق‌تر و با جزئیات کامل، تمام این کاربردها و گزینه‌های مختلف دستورcat  را بررسی خواهیم کرد. با ما همراه باشید.

سینتکس و کاربردهای اصلی دستور cat

برای استفاده مؤثر از هر دستوری در لینوکس، اولین قدم یادگیری سینتکس (Syntax) یا ساختار کلی آن است. خوشبختانه، سینتکس دستورcat  بسیار ساده و قابل فهم است و به شما اجازه می‌دهد به‌راحتی محتوای فایل‌ها را بخوانید.

ساختار کلی دستور به شکل زیر است:

Bash

cat [OPTION] [FILE]…

  • [OPTION]: این بخش شامل گزینه‌ها یا آپشن‌هایی است که رفتار دستور cat را تغییر می‌دهند. در بخش‌های بعدی به تفصیل آپشن‌های دستور cat را بررسی خواهیم کرد.
  • [FILE]…: در این بخش، نام یک یا چند فایلی که می‌خواهید با آن‌ها کار کنید را وارد می‌کنید. اگر هیچ فایلی را مشخص نکنید،cat  ورودی را از ورودی استاندارد (معمولاً کیبورد) می‌خواند.

نحوه نمایش محتوای یک فایل با دستور cat

اصلی‌ترین و رایج‌ترین کاربرد دستور  cat، نمایش محتوای فایل است. این کار برای مشاهده سریع فایل‌های کانفیگ، لاگ‌ها، یا هر فایل متنی دیگری بدون نیاز به باز کردن یک ویرایشگر متن کامل، فوق‌العاده مفید است.

برای مثال، اگر فایلی به نام shopping-list.txt  با محتوای زیر داشته باشیم:

Milk

Eggs

Bread

Coffee

برای خواندن فایل با cat در ترمینال، کافیست دستور زیر را اجرا کنیم:

Bash

cat shopping-list.txt

خروجی دستور دقیقاً محتوایات فایل خواهد بود:

Milk

Eggs

Bread

Coffee

نمایش محتوای چندین فایل به صورت همزمان با دستور cat

همانطور که از نام “concatenate” پیداست، یکی از قابلیت‌های کلیدی دستور cat، نمایش پیوسته محتوای چندین فایل است. این دستور فایل‌ها را به ترتیبی که در فرمان وارد کرده‌اید، می‌خواند و محتوای آن‌ها را پشت سر هم در خروجی نمایش می‌دهد.

فرض کنید دو فایل دیگر هم داریم. file1.txt شامل:

Hello from file 1.

This is the first line.

و file2.txt  شامل:

Welcome to file 2.

This is the second file.

حالا اگر بخواهیم محتوای هر دو فایل را با هم ببینیم، دستور زیر را اجرا می‌کنیم:

Bash

cat file1.txt file2.txt

خروجی به این شکل خواهد بود که محتوای file2.txt  بلافاصله بعد از محتوای file1.txt  چاپ می‌شود:

Hello from file 1.

This is the first line.

Welcome to file 2.

This is the second file.

این قابلیت برای ادغام فایل‌های لاگ، قطعه کدهای مختلف یا هر نوع داده متنی دیگری که به بخش‌های مختلف تقسیم شده، بسیار کاربردی است.

ساخت فایل با دستور cat

شاید برایتان کمی عجیب به نظر برسد، اما شما می‌توانید از دستوری که برای خواندن فایل‌ها استفاده می‌شود، برای ایجاد آن‌ها نیز استفاده کنید. نحوه ایجاد فایل با دستورcat  یکی از ترفندهای کاربردی خط فرمان است که با استفاده از مفهومی به نام ریدایرکت (Redirect) یا تغییر مسیر خروجی، امکان‌پذیر می‌شود. اما چگونه با cat یک فایل بسازیم؟

پاسخ این سوال در استفاده از یک کاراکتر خاص نهفته است، یعنی “>” .

کاربرد cat با علامت > این است که به جای نمایش خروجی دستور در ترمینال (خروجی استاندارد)، آن را به یک فایل مشخص هدایت یا “ریدایرکت” می‌کند. اگر فایل مورد نظر وجود نداشته باشد، ساخته می‌شود و اگر وجود داشته باشد، محتوای قبلی آن به طور کامل پاک و محتوای جدید جایگزین آن می‌شود. این نکته بسیار مهمی است که باید به آن دقت کنید.

بیایید با یک مثال عملی ببینیم چگونه با cat یک فایل بسازیم. فرض کنید می‌خواهیم یک فایل جدید به نام note.txt  ایجاد کنیم و چند خط متن در آن بنویسیم.

  1. دستور زیر را در ترمینال وارد کنید:

Bash

cat > note.txt

  1. بعد از زدن کلید Enter، متوجه می‌شوید که هیچ اتفاقی نمی‌افتد و مکان‌نما به خط بعدی می‌رود و منتظر می‌ماند. این به دلیل آن است که cat  حالا منتظر دریافت ورودی از کیبورد شما (ورودی استاندارد) است.
  2. شروع به تایپ کردن متن دلخواه خود کنید. برای رفتن به خط بعد، کلید Enter را بزنید.

This is my first note.

Created using the cat command.

It’s a simple but powerful trick.

  1. پس از این که نوشتن متن تمام شد، برای ذخیره کردن فایل و خروج از این حالت، کلیدهای Ctrl + D  را فشار دهید. این کلید ترکیبی، سیگنال “پایان انتقال” (End of Transmission) را ارسال می‌کند و به cat  می‌فهماند که کار شما با ورودی تمام شده است.

حالا یک فایل جدید به نام note.txt  در دایرکتوری فعلی شما ایجاد شده است. برای اطمینان، می‌توانید با خود دستور cat  محتوای آن را مشاهده کنید:

Bash

cat note.txt

خروجی:

This is my first note.

Created using the cat command.

It’s a simple but powerful trick.

این روش برای ساخت سریع فایل‌های کانفیگ کوچک، نوشتن یادداشت‌های کوتاه یا ایجاد فایل‌های تست، بدون نیاز به باز کردن ویرایشگرهای سنگین‌تری مثل nano  یا vim، بسیار کارآمد است.

افزودن محتوا به فایل موجود

در بخش قبل یاد گرفتیم که چطور با استفاده از عملگر > یک فایل جدید بسازیم یا محتوای یک فایل موجود را به‌طور کامل بازنویسی کنیم. اما اگر بخواهیم متنی را به انتهای یک فایل اضافه کنیم بدون اینکه محتوای قبلی آن از بین برود، چه باید بکنیم؟ اینجاست که عملگر >> وارد می‌شود.

کاربرد >> دقیقاً برای افزودن محتوا به فایل یا به اصطلاح الحاق (Append) طراحی شده است. وقتی از این عملگر استفاده می‌کنید، خروجی دستورcat  به انتهای فایل مشخص شده اضافه می‌شود و محتویات قبلی دست‌نخورده باقی می‌مانند.

بیایید با یک مثال عملی این موضوع را بررسی کنیم. فرض کنید همان فایل note.txt  از بخش قبل را داریم:

Bash

cat note.txt

خروجی فعلی:

This is my first note.

Created using the cat command.

It’s a simple but powerful trick.

حالا می‌خواهیم چند خط جدید به انتهای این فایل اضافه کنیم. برای این کار، دستور را به شکل زیر اجرا می‌کنیم:

Bash

cat >> note.txt

دوباره ترمینال، منتظر ورودی از کیبورد شما می‌ماند. متن جدید را وارد کنید:

This new text is appended.

It will not overwrite the original content.

و در نهایت با Ctrl + D  ورودی را خاتمه دهید و فایل را ذخیره کنید.

حالا اگر دوباره محتوای فایل note.txt  را با دستورcat  مشاهده کنیم، می‌بینیم که متن جدید به انتهای آن اضافه شده است:

Bash

cat note.txt

خروجی جدید:

This is my first note.

Created using the cat command.

It’s a simple but powerful trick.

This new text is appended.

It will not overwrite the original content.

تفاوت کلیدی بین > و >>

  • >  (Redirection): محتوای فایل را بازنویسی (Overwrite) می‌کند. اگر فایل وجود نداشته باشد، آن را می‌سازد.
  • >>  (Append): محتوا را به انتهای فایل الحاق (Append) می‌کند. اگر فایل وجود نداشته باشد، آن را می‌سازد.

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

گزینه‌های پرکاربرد دستورcat  (Options)

دستور cat به تنهایی ابزار قدرتمندی است، اما با استفاده از گزینه‌ها (Options) یا همان فلگ‌ها (flags)، می‌توانیم رفتار آن را برای نیازهای خاص خود تغییر دهیم. این آپشن‌ها به ما امکان کنترل بیشتری روی خروجی می‌دهند، از شماره‌گذاری خطوط گرفته تا مدیریت خط خالی و نمایش کاراکترهای غیرقابل چاپ.

در این بخش، به این سوال پاسخ می‌دهیم که آپشن‌های پرکاربرد دستور cat کدامند؟

آپشن-n  یا –number: شماره‌گذاری تمام خطوط

یکی از پرکاربردترین گزینه‌ها، آپشن -n  است. این گزینه تمام خطوط خروجی را، اعم از خالی یا پر، به ترتیب شماره‌گذاری می‌کند. این قابلیت برای بررسی فایل‌های طولانی، ارجاع به یک خط خاص در کد یا متن، و دیباگ کردن بسیار مفید است.

فرض کنید فایل poem.txt  را با محتوای زیر داریم:

The woods are lovely, dark and deep,

But I have promises to keep,

And miles to go before I sleep,

And miles to go before I sleep.

برای نمایش محتوای این فایل به همراه شماره خط، از دستور زیر استفاده می‌کنیم:

Bash

cat -n poem.txt

خروجی به این شکل خواهد بود:

     1        The woods are lovely, dark and deep,

     2        

     3        But I have promises to keep,

     4        And miles to go before I sleep,

     5        

     6        And miles to go before I sleep.

همانطور که می‌بینید، حتی خطوط خالی (خط 2 و 5) نیز شماره‌گذاری شده‌اند.

گزینه-b  یا –number-nonblank: شماره‌گذاری خطوط غیر خالی

گاهی اوقات شما فقط به شماره‌گذاری خطوطی که حاوی متن هستند نیاز دارید و نمی‌خواهید خطوط خالی در شمارش شما تأثیر بگذارند. در این حالت، آپشن -b  به کارتان می‌آید. این گزینه فقط خطوط غیر خالی را شماره‌گذاری می‌کند.

با استفاده از همان فایل poem.txt، دستور را این بار با -b  اجرا می‌کنیم:

Bash

cat -b poem.txt

خروجی متفاوت خواهد بود:

     1        The woods are lovely, dark and deep,

     2        But I have promises to keep,

     3        And miles to go before I sleep,

     4        And miles to go before I sleep.

توجه کنید که خطوط خالی همچنان نمایش داده می‌شوند، اما شماره‌ای به آن‌ها اختصاص داده نشده است.

گزینه-s  یا –squeeze-blank: حذف خطوط خالی تکراری

اگر با فایلی سر و کار دارید که در آن خطوط خالی پشت سر هم و تکراری زیادی وجود دارد، خروجی cat  می‌تواند بسیار طولانی و ناخوانا شود. گزینه -s  این مشکل را حل می‌کند. این آپشن چندین خط خالی متوالی را فشرده می‌کند و تنها یک خط خالی را نمایش می‌دهد.

فایل report.txt  را با محتوای زیر در نظر بگیرید:

Weekly Report

Item 1: Complete

Item 2: In Progress

Item 3: Pending

خروجی عادی دستور cat report.txt  تمام این خطوط خالی را نشان می‌دهد. اما با استفاده از آپشن -s:

Bash

cat -s report.txt

خروجی بسیار تمیزتر خواهد بود:

Weekly Report

Item 1: Complete

Item 2: In Progress

Item 3: Pending

گزینه-E  یا –show-ends: نمایش انتهای خطوط

در برخی موارد، به خصوص هنگام کار با اسکریپت‌ها یا فایل‌هایی که بین سیستم‌عامل‌های مختلف (مثل ویندوز و لینوکس) جابجا شده‌اند، دانستن اینکه هر خط دقیقاً در کجا به پایان می‌رسد، اهمیت دارد. گزینه-E  یک کاراکتر$  در انتهای هر خط نمایش می‌دهد تا مرز پایانی خطوط به وضوح مشخص باشد.

با استفاده از فایل poem.txt:

Bash

cat -E poem.txt

خروجی به این صورت خواهد بود:

The woods are lovely, dark and deep,$

$

But I have promises to keep,$

And miles to go before I sleep,$

$

And miles to go before I sleep.$

این آپشن‌های دستورcat  تنها بخشی از گزینه‌های موجود هستند، اما پرکاربردترین‌ها به شمار می‌روند و می‌توانند به طور قابل توجهی کارایی شما را در کار با فایل‌های متنی در ترمینال افزایش دهند.

مقایسه دستور cat با دستورات مشابه

در اکوسیستم لینوکس، معمولاً برای انجام یک کار چندین ابزار مختلف وجود دارد و هر کدام نقاط قوت و ضعف خود را دارند. دستورcat  نیز از این قاعده مستثنی نیست. برای استفاده بهینه از خط فرمان، درک تفاوت cat و more و less  در لینوکس و همچنین نحوه ترکیب آن با دستوراتی مانندgrep  ضروری است.

مقایسه دستور cat  با more  و less

هر سه دستور cat،more  و less  برای نمایش محتوای فایل‌ها استفاده می‌شوند، اما روش کار آن‌ها کاملاً متفاوت است.

  • cat (Concatenate): این دستور تمام محتوای فایل را یک‌جا و بدون توقف در ترمینال “تخلیه” (spew) می‌کند. اگر فایل بزرگ باشد، محتوای ابتدایی آن به سرعت از صفحه خارج می‌شود و شما فقط انتهای فایل را خواهید دید.cat  برای فایل‌های کوتاه یا زمانی که می‌خواهید خروجی را به دستور دیگری پایپ (|) کنید، ایده‌آل است.
  • more (بیشتر): این دستور یک “صفحه‌بند” (pager) ساده است. more محتوای فایل را صفحه‌به‌صفحه نمایش می‌دهد. پس از پر شدن اولین صفحه، دستور متوقف می‌شود و شما می‌توانید با فشردن کلید Space  به صفحه بعد و با کلید Enter  به خط بعد بروید. با این حال، قابلیت more  برای حرکت به عقب در متن محدود است.
  • less (کمتر): این دستور نسخه پیشرفته‌تر و مدرن‌ترmore  است و شعار معروفی دارد: “less is more”. دستورless  نیز یک صفحه‌بند است اما قابلیت‌های بسیار بیشتری دارد. با less  می‌توانید به راحتی با کلیدهای جهت‌نما یا Page Up  و Page Down  در کل متن به بالا و پایین حرکت کنید، در متن جستجو (با فشردن /) و از سایر امکانات آن استفاده کنید.less  قبل از نمایش، کل فایل را در حافظه بارگذاری نمی‌کند، به همین دلیل برای مشاهده فایل‌های بسیار بزرگ، پرسرعت و بهینه است.

در جدول زیر، خلاصه‌ای از تفاوت‌های cat  با more  و less را مشاهده می‌کنید:

دستور

کاربرد اصلی

حرکت در متن

مناسب برای فایل‌های بزرگ؟

cat

نمایش سریع، ادغام، پایپ کردن

خیر (فقط اسکرول ترمینال)

خیر

more

نمایش صفحه به صفحه

فقط به جلو

متوسط

less

نمایش تعاملی و پیشرفته

جلو و عقب، جستجو

بله، بسیار مناسب

چه زمانی از کدام استفاده کنیم؟

  • از cat  برای فایل‌های کوچک و یا زمانی استفاده کنید که می‌خواهید خروجی را به دستور دیگری بدهید.
  • از less  تقریباً در تمام موارد دیگر که فقط قصد مشاهده محتوای یک فایل را دارید، به خصوص فایل‌های طولانی، استفاده کنید. less عملاً جایگزین بهتری برای more است.

استفاده از cat  در ترکیب باgrep  (مفهوم پایپ |)

قدرت واقعی خط فرمان لینوکس در ترکیب دستورات با یکدیگر است. یکی از رایج‌ترین الگوها، استفاده از دستور cat برای خواندن یک فایل و سپس ارسال خروجی آن به دستور grep  برای جستجوی یک الگوی خاص است. این کار از طریق یک مکانیزم قدرتمند به نام پایپ (pipe) انجام می‌شود که با کاراکتر|  نمایش داده می‌شود.

پایپ، خروجی استاندارد (stdout) دستور سمت چپ را به عنوان ورودی استاندارد (stdin) دستور سمت راست هدایت می‌کند.

فرض کنید یک فایل لاگ به نام access.log  دارید و می‌خواهید تمام خطوطی که حاوی کلمه “ERROR” هستند را پیدا کنید. می‌توانید این کار را به شکل زیر انجام دهید:

Bash

cat access.log | grep “ERROR”

در این مثال:

  1. cat access.log محتوای کامل فایل را می‌خواند و به خروجی استاندارد می‌فرستد.
  2. پایپ |)) این خروجی را می‌گیرد و به جای نمایش در ترمینال، به ورودی دستور بعدی می‌دهد.
  3. grep “ERROR” این ورودی را دریافت می‌کند و فقط خطوطی را که با الگوی “ERROR” مطابقت دارند، فیلتر می‌کند و در خروجی نهایی نمایش می‌دهد.

اگرچه در این مورد خاص، می‌توانستید مستقیماً از grep “ERROR” access.log  استفاده کنید (که بهینه‌تر هم هست)، اما الگوی cat | command  برای درک مفهوم پایپ و در سناریوهای پیچیده‌تر که چندین دستور را به هم زنجیر می‌کنید، بسیار مهم و کاربردی است. برای اطلاعات بیشتر می‌توانید به مقاله “آموزش دستورgrep ” مراجعه کنید.

نتیجه‌گیری و خلاصه

در این راهنما، دیدیم که دستور cat بسیار فراتر از یک ابزار ساده برای نمایش فایل‌هاست. این دستور یکی از بنیادی‌ترین و در عین حال تطبیق‌پذیرترین ابزارها در جعبه‌ابزار هر کاربر لینوکس است.

ما سفر خود را از درک نام cat (مخفف “concatenate”) و کاربرد اصلی‌اش یعنی نمایش و ادغام سریع فایل‌ها آغاز کردیم. سپس، با قدرت واقعی آن در ترکیب با عملگرهای ریدایرکشن آشنا شدیم و یاد گرفتیم که چگونه با >  و >>  به سادگی فایل‌های جدید بسازیم یا محتوایی به انتهای آن‌ها اضافه کنیم. همچنین بررسی کردیم که چطور می‌توان با گزینه‌های پرکاربردی مانند-n  برای شماره‌گذاری خطوط یا -s برای مدیریت فضاهای خالی، خروجی را کاملاً سفارشی کرد.

مهم‌تر از همه، جایگاه cat را در اکوسیستم بزرگ‌تر لینوکس درک کردیم؛ تفاوت آن با ابزارهای صفحه‌بندی مانند less را شناختیم و دیدیم که چگونه از طریق پایپ (|) به یک جزء کلیدی در زنجیره دستورات، مانند ترکیب با grep، تبدیل می‌شود.

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

پیمایش به بالا