اگر تا به حال حتی برای چند ساعت با ترمینال لینوکس کار کرده باشید، به احتمال زیاد نام دستورcat به گوشتان خورده است. این دستور یکی از ابزارهای پایهای و در عین حال بسیار قدرتمند در خط فرمان است که هر کاربری، از مبتدی تا حرفهای، باید با آن آشنا باشد. اما دستور cat در لینوکس چیست و چه کارهایی میتوان با آن انجام داد؟
دستورcat که نام آن مخفف کلمه “concatenate” (به معنای به هم پیوستن یا الحاق کردن) است، یکی از فرمانهای اساسی در سیستمعاملهای شبه یونیکس (Unix-like systems) از جمله لینوکس (Linux) محسوب میشود. تاریخچه این دستور به اولین روزهای پیدایش یونیکس برمیگردد و سادگی و کارایی آن باعث شده تا امروز هم یکی از پراستفادهترین ابزارها باقی بماند.
کاربرد دستور cat در نگاه اول بسیار ساده به نظر میرسد: نمایش محتوای یک یا چند فایل در خروجی استاندارد (معمولاً صفحه ترمینال). اما قدرت واقعی
این cat command زمانی مشخص میشود که آن را با ابزارهای دیگر خط فرمان مثل ریدایرکشن (redirection) و پایپ (pipe) ترکیب میکنیم. کاربردهای اصلی این دستور را میتوان در سه دسته خلاصه کرد:
- نمایش محتوای فایلها: سریعترین راه برای دیدن محتویات یک فایل متنی.
- ادغام (Concatenate) فایلها: ترکیب محتوای چندین فایل در یک فایل واحد.
- ایجاد فایلهای جدید: ساختن سریع فایلهای متنی کوتاه بدون نیاز به باز کردن ویرایشگر متن.
برای شروع، بیایید یک مثال خیلی ساده را ببینیم. فرض کنید فایلی به نام 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 ایجاد کنیم و چند خط متن در آن بنویسیم.
- دستور زیر را در ترمینال وارد کنید:
Bash
cat > note.txt
- بعد از زدن کلید Enter، متوجه میشوید که هیچ اتفاقی نمیافتد و مکاننما به خط بعدی میرود و منتظر میماند. این به دلیل آن است که cat حالا منتظر دریافت ورودی از کیبورد شما (ورودی استاندارد) است.
- شروع به تایپ کردن متن دلخواه خود کنید. برای رفتن به خط بعد، کلید Enter را بزنید.
This is my first note.
Created using the cat command.
It’s a simple but powerful trick.
- پس از این که نوشتن متن تمام شد، برای ذخیره کردن فایل و خروج از این حالت، کلیدهای 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”
در این مثال:
- cat access.log محتوای کامل فایل را میخواند و به خروجی استاندارد میفرستد.
- پایپ |)) این خروجی را میگیرد و به جای نمایش در ترمینال، به ورودی دستور بعدی میدهد.
- grep “ERROR” این ورودی را دریافت میکند و فقط خطوطی را که با الگوی “ERROR” مطابقت دارند، فیلتر میکند و در خروجی نهایی نمایش میدهد.
اگرچه در این مورد خاص، میتوانستید مستقیماً از grep “ERROR” access.log استفاده کنید (که بهینهتر هم هست)، اما الگوی cat | command برای درک مفهوم پایپ و در سناریوهای پیچیدهتر که چندین دستور را به هم زنجیر میکنید، بسیار مهم و کاربردی است. برای اطلاعات بیشتر میتوانید به مقاله “آموزش دستورgrep ” مراجعه کنید.
نتیجهگیری و خلاصه
در این راهنما، دیدیم که دستور cat بسیار فراتر از یک ابزار ساده برای نمایش فایلهاست. این دستور یکی از بنیادیترین و در عین حال تطبیقپذیرترین ابزارها در جعبهابزار هر کاربر لینوکس است.
ما سفر خود را از درک نام cat (مخفف “concatenate”) و کاربرد اصلیاش یعنی نمایش و ادغام سریع فایلها آغاز کردیم. سپس، با قدرت واقعی آن در ترکیب با عملگرهای ریدایرکشن آشنا شدیم و یاد گرفتیم که چگونه با > و >> به سادگی فایلهای جدید بسازیم یا محتوایی به انتهای آنها اضافه کنیم. همچنین بررسی کردیم که چطور میتوان با گزینههای پرکاربردی مانند-n برای شمارهگذاری خطوط یا -s برای مدیریت فضاهای خالی، خروجی را کاملاً سفارشی کرد.
مهمتر از همه، جایگاه cat را در اکوسیستم بزرگتر لینوکس درک کردیم؛ تفاوت آن با ابزارهای صفحهبندی مانند less را شناختیم و دیدیم که چگونه از طریق پایپ (|) به یک جزء کلیدی در زنجیره دستورات، مانند ترکیب با grep، تبدیل میشود.
شایدcat در نگاه اول ساده به نظر برسد، اما تسلط بر آن و درک نحوه ترکیب هوشمندانهاش با سایر ابزارهای خط فرمان، بهرهوری شما را در مدیریت فایلها و وظایف روزمره در لینوکس به شکل چشمگیری افزایش میدهد. این دستور یک نمونه کلاسیک از فلسفه قدرتمند یونیکس است: ابزاری که یک کار را به بهترین شکل انجام میدهد و به خوبی با دیگر ابزارها ترکیب میشود.