مقدمه

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

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

نمایش و اتصال فایل‌ها با cat

دستور cat یکی از بنیادی‌ترین و پراستفاده‌ترین دستورات در سیستم‌های Unix-like است. نام این دستور از واژه‌ی concatenate به معنای «به هم پیوستن» گرفته شده است. همانطور که از نامش پیداست، وظیفه‌ی اصلی آن خواندن داده‌ها از فایل‌ها و نمایش آن‌ها در خروجی استاندارد (صفحه ترمینال) است. ساده‌ترین کاربرد آن، نمایش کامل محتوای یک فایل است.

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...

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

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

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

آپشن توضیح
-n تمام خطوط خروجی را شماره‌گذاری می‌کند (حتی خطوط خالی).
-b فقط خطوطی که خالی نیستند را شماره‌گذاری می‌کند.

بیایید خروجی دستور را با آپشن -n ببینیم:

$ cat -n /etc/passwd
     1	root:x:0:0:root:/root:/bin/bash
     2	daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
     3	bin:x:2:2:bin:/bin:/usr/sbin/nologin
...

یک نکته‌ی احتیاطی

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

برعکس‌خوانی فایل‌ها با tac

دستور tac دقیقاً برعکس cat عمل می‌کند. اگر نام آن را از آخر به اول بخوانید، به cat می‌رسید! این دستور محتوای یک فایل را می‌خواند اما آن را از خط آخر به خط اول نمایش می‌دهد.

این دستور شاید در نگاه اول عجیب به نظر برسد، اما کاربرد بسیار مهمی در تحلیل فایل‌های گزارش (Log files) دارد. معمولاً در فایل‌های گزارش، رویدادهای جدید به انتهای فایل اضافه می‌شوند. با استفاده از tac، می‌توانید آخرین رویدادها را در ابتدای خروجی ببینید بدون اینکه نیازی به اسکرول کردن تا انتهای یک فایل طولانی داشته باشید.

$ tac logfile.log
2025-07-20 03:20:15 - ERROR: Connection failed.
2025-07-20 03:20:10 - INFO: Attempting to connect to database.
2025-07-20 03:19:55 - INFO: Service started.
...

نگاهی به ابتدای فایل‌ها با head

گاهی اوقات ما به کل محتوای یک فایل نیاز نداریم و فقط می‌خواهیم ببینیم فایل با چه چیزی شروع می‌شود. این کار به ویژه برای شناسایی نوع یا ساختار یک فایل بسیار مفید است. دستور head دقیقاً برای همین منظور طراحی شده است. به طور پیش‌فرض، این دستور ۱۰ خط اول یک فایل را نمایش می‌دهد.

$ head /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin

کنترل تعداد خطوط خروجی

می‌توانیم با استفاده از آپشن -n به دستور head بگوییم که چه تعداد خط از ابتدای فایل را نمایش دهد. برای مثال، برای دیدن تنها ۳ خط اول یک فایل، به این صورت عمل می‌کنیم:

$ head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin

مشاهده‌ی انتهای فایل‌ها با tail

همانطور که head ابتدای فایل را نمایش می‌دهد، دستور tail انتهای آن را نشان می‌دهد. این دستور نیز به طور پیش‌فرض ۱۰ خط آخر فایل مشخص‌شده را در خروجی چاپ می‌کند. کاربرد اصلی tail، مانند tac، در بررسی فایل‌های گزارش است تا آخرین رویدادهای ثبت‌شده را مشاهده کنیم.

$ tail /var/log/syslog
Jul 20 03:25:01 my-pc CRON[12345]: (root) CMD (cd / && run-parts --report /etc/cron.hourly)
Jul 20 03:26:11 my-pc systemd[1]: Started Session 12 of user me.
...

پایش زنده‌ی فایل‌ها

یکی از قدرتمندترین و مفیدترین قابلیت‌های دستور tail، آپشن -f یا --follow است. وقتی از این آپشن استفاده می‌کنیم، tail پس از نمایش ۱۰ خط آخر، به کار خود پایان نمی‌دهد. در عوض، منتظر می‌ماند و هر زمان که خط جدیدی به فایل اضافه شود، آن را بلافاصله در ترمینال نمایش می‌دهد. این ویژگی برای پایش (monitoring) زنده‌ی فایل‌های گزارش و دنبال کردن رویدادها در لحظه، فوق‌العاده کاربردی است.

برای مثال، برای مشاهده‌ی زنده‌ی گزارش‌های سیستمی، می‌توانید دستور زیر را اجرا کنید:

$ tail -f /var/log/syslog

پس از اجرای این دستور، ترمینال شما منتظر می‌ماند. هر اتفاق جدیدی که در سیستم ثبت شود، خط مربوط به آن در صفحه ظاهر خواهد شد. برای متوقف کردن tail و بازگشت به خط فرمان، کافی است کلیدهای Ctrl+C را فشار دهید.