آموزش کار با دستور Tail در لینوکس همراه با مثال های عملی
تا حالا در شرایطی قرار گرفته اید که نیاز داشته باشید انتهای یک فایل را به صورت بلادرنگ (real-time) مانیتور کنید یا اینکه چند خط آخر یک فایل لاگ را به سرعت بررسی کنید؟ اینجاست که دستور tail در لینوکس به کمک شما می آید!
دستور tail یکی از ابزارهای قدرتمند لینوکس است که کاربران به کمک آن می توانند بخش های انتهایی یک یا چند فایل را مشاهده کنند. از کاربردهای اصلی این دستور می توان به بررسی لاگ فایل ها، مانیتور اکتیویتی های سیستم یا تحلیل داده ها به صورت بلادرنگ اشاره کرد.
اگر دوست دارید اطلاعات بیشتری در مورد سینتکس ها و نحوه استفاده از دستور tail در لینوکس به دست بیاورید، با ادامه مقاله همراه باشید چون قرار است یک آموزش کامل و جامع در مورد این دستور پرکاربرد در اختیار شما قرار دهیم.
همچنین اگر علاقمند به کار کردن با دستورات لینوکس هستید و دوست دارید یک سرور با سیستم عامل لینوکس داشته باشید که فضای لازم برای بهره مندی از قدرت لینوکس در پروژه های خود داشته باشید، توصیه می کنیم که قدم اول را با خرید سرور مجازی لینوکس بردارید. با این کار در ازای پرداخت یک هزینه مقرون به صرفه، به فضایی که آرزویش را دارید دست پیدا خواهید کرد و محدودیت ها را در عرض سه سوت کنار خواهید گذاشت.
آشنایی با سینتکس دستور tail
این دستور آپشن های زیادی دارد که با استفاده از آنها می توانید خروجی را به شکل دلخواه خود در بیاورید ولی در حالت کلی سینتکس دستور tail به صورت زیر است:
tail [OPTION]... [FILE]...
کاربرد عمومی و اصلی این دستور به صورت زیر است:
tail filename
دستور بالا به طور پیش فرض ۱۰ خط آخر فایل موردنظر را در خروجی به شما نشان می دهد. مثلا اگر بخواهید ۱۰ خط آخر فایل مربوط به لیست دانشجویان را ببینید باید از دستور tail به صورت زیر استفاده کنید:
tail students.txt
همانطور که گفتیم این دستور آپشن های دیگری هم دارد که می توانید به دستور اضافه کنید تا رفتار دستور را متناسب با نیازهای خود سفارشی سازی کنید. در ادامه به چند مورد از رایج ترین آنها اشاره می کنیم:
n: اگر حالت پیش فرض دستور tail برایتان کارساز نیست و می خواهید تعداد خطوط بیشتر یا کمتر از ۱۰ را در خروجی ببینید می توانید از این آپشن استفاده کنید.
c: با استفاده از این آپشن می توانید تعداد بایت ها موردنظر برای نمایش از انتهای فایل را مشخص کنید. مثلاً، برای اینکه ۱۰۰ بایت آخر فایل students را ببینید، باید دستور tail را به صورت زیر اجرا کنید:
tail -c 100 students.txt
q: این آپشن هدرهای مربوط به فایل ها را نادیده می گیرد. به این صورت که اگر با چند فایل سروکار دارید و دوست ندارید اسم فایل ها را هم در خروجی ببینید، می توانید از این آپشن استفاده کنید.
v: این آپشن هم به صورت برعکس q عمل می کند و اگر می خواهید اسم هدرها یا همان اسم فایل ها را در خروجی ببینید باید این آپشن را هم در دستور لحاظ کنید:
f: با استفاده از این آپشن می توانید نحوه رشد فایل ها را نظارت کنید. به این صورت که با اضافه شدن خطوط جدید، ۱۰ خط آخری که قرار است به عنوان خروجی ظاهر شود، به روز می شود. دستور tail با آپشن f تا زمانی به اجرای خود ادامه می دهد که شما آن را متوقف کنید. پس اگر می خواهید ۱۰ خط آخر فایل های لاگ را به صورت کاملا آپدیت و به روز شده ببینید بهتر است از این آپشن کمک بگیرید.
s: موقع استفاده از آپشن f اگر نیاز دارید که بین آپدیت شدن خروجی ها فاصله بیندازید می توانید از آپشن s استفاده کنید.
آپشن های دیگری هم هستند که در صورت نیاز می توانید از آنها کمک بگیرید تا رفتار دستور tail کاملاً با نیازهای شما سازگار باشد. برای دستور به آپشن های این دستور می توانید از دستورات زیر کمک بگیرید:
man tail
tail --help
نحوه استفاده از دستور tail در لینوکس
برای آشنایی با نحوه استفاده از این دستور بهتر است با مثال جلو برویم تا متوجه شوید که چگونه و در چه مواقعی می توانید از دستور tail و آپشن های آن استفاده کنید:
نمایش خطوط آخر یک فایل
اگر تعداد این خطوط برایتان مهم است و نمی خواهید مطابق با پیش فرض ها جلو بروید، می توانید از آپشن n استفاده کنید. آپشن n این امکان را می دهد که تعداد خطوط را خودتان مشخص کنید. به عنوان مثال اگر می خواهید ۵ خط آخر یک فایل را ببینید، دستور tail را به صورت زیر اجرا کنید:
tail -n 5 filename
نمایش بایت های آخر یک فایل
اگر می خواهید به جای خط با واحد بایت یا همان کاراکتر جلو بروید و تعداد بایت اخیر یک فایل را مشخص کرده و به عنوان خروجی ببینید می توانید از آپشن c استفاده کنید.
به عنوان مثال برای مشاهده ۲۴ کاراکتر آخر فایل موردنظر، باید دستور tail را به صورت زیر اجرا کنید:
tail -c 24 debtors.txt
نمایش خطوط آخر یک فایل به صورت بلادرنگ
بررسی گزارشات لاگ فایل به صورت بلادرنگ یکی از اصلی ترین کاربردهای دستور tail است که با اضافه شدن آپشن f شکل بهینه تری برای عیب یابی مشکلات یا ردیابی فعالیت های سیستم پیدا می کند.
اگر یک خروجی ثابت برایتان کارساز نیست و دوست دارید که نحوه رشد یا آپدیت شدن خطوط آخر یک فایل را به صورت real time ببینید. باید از آپشن f استفاده کنید.
tail -f logfile
این دستور تا زمانی که شما اجرای آن را با فشردن دکمه ترکیبی Ctrl+ c متوقف نکرده اید به نمایش خطوط جدید و آپدیت شده ادامه می دهد بدون اینکه نیازی به اجرای مجدد دستور tail باشد.
اگر می خواهید بین مثلاً هر ۱۰ خروجی آپدیت شده و بلادرنگ فاصله بیندازید تا نظارت برایتان راحت تر باشد می توانید آپشن s را هم به دستور بالا اضافه کنید و مدت زمانی که می خواهید را بر حسب ثانیه به دستور اضافه کنید. مثلاً برای فاصله هایی به اندازه ۳ ثانیه، دستور زیر را اجرا کنید:
ٖtail -f -s 3 logfile
استفاده از دستور tail برای چند فایل
دستور tail این امکان را به شما می دهد که آخرین خطوط چند فایل را با هم و به صورت همزمان ببینید. برای این کار کافیست اسم فایل ها را به عنوان آرگومان دستور وارد کنید:
tail file1.txt file2.txt file3.txt
این دستور ۱۰ خط آخر هر کدام از این فایل ها را نشان می دهد و خروجی را با اسم فایل ها تفکیک می کند. اگر خواستید می توانید آپشن های دیگری را هم به آن اضافه کنید، این آپشن ها برای خروجی همه فایل ها لحاظ می شوند.
در صورت نیاز می توانید از آپشن q برای ادغام خروجی ها استفاده کنید و کاری کنید که اسم فایل ها در خروجی نمایش داده نشود.
ترکیب دستور tail با دستورات دیگر
زیبایی دستور tail در همین سازگاری آن است. وقتی بتوانید بین این دستور و دستورات دیگر ارتباط برقرار کنید، صد در صد می توانید کارهای خود را سرعت عمل بیشتری انجام دهید. به این صورت که می توانید دستور tail را به دستور دیگری وصل یا به اصطلاح pip کنید و از خروجی دستورات دیگر به عنوان ورودی دستور tail یا (برعکس) استفاده کنید.
به عنوان مثال، اگر می خواهید دستور ls را اجرا کنید منتها تعداد خطوط خروجی را خودتان مشخص کنید می توانید از دستور زیر استفاده کنید:
ls -l | tail -n 5
یا در صورت نیاز می توانید از دستور grep برای فیلتر کردن بعضی از خطوط استفاده کنید تا آن خطوط در خروجی دستور tail ظاهر نشوند. مثلاً برای فیلتر کردن خطوطی که شامل کلمه “force” هستند می توانید از دستور زیر استفاده کنید:
tail filename | grep "force"
فیلتر کردن خروجی با دستور tail
با اینکه دستور grep هم می تواند در این فیلتر سازی به شما کمک کند ولی خود دستور tail راه هایی را برای فیلتر کردن خروجی ارائه می دهد. مثلاً آپشن f به طور مداوم فایل را بررسی می کند تا ببیند سایز آن تغییر کرده است یا نه! اگر سایز آن تغییر کرده باشد، فایل را دوباره باز می کند و داده های جدید را چاپ می کند. حالا اگر بیاید از آپشن max-unchanged-stats استفاده کنید و آن را با n مقداردهی کنید، در واقع به آپشن f دستور می دهید که حتی اگر اندازه یک فایل تغییر نکرده باشد، بعد از هر n بار بررسی خطوط آخر فایل موردنظر را به شما نشان دهد.
tail --max-unchanged-stats=2 filename
استفاده از دستور tail با حروف عام یا wildcard ها
وقتی قرار است با چند فایل کار کنید، استفاده از wildcard ها و تعیین یک الگو که با چند فایل مطابقت داشته باشد می توانید کارها را برای خود راحت تر کنید. به عنوان مثال، برای نمایش ۵ خط آخر همه فایل های که در دایرکتوری فعلی خط فرمان هستند و پسوند log. دارند می توانید از دستور زیر استفاده کنید:
tail -n 5 *.log
چند آپشن پیشرفته تر برای کاربردهای خاص دستور tail
با این که آپشن های بالا به راحتی می توانند شما را به هدفتان برسانند ولی دستور tail آپشن های پیشرفته دیگری هم دارد که برای موارد خاصی استفاده می شوند. در این بخش به چند مورد از آنها اشاره می کنیم:
F: این آپشن مشابه آپشن f است منتها با این تفاوت که آپشن F از عهده کنترل شرایط خاصی مثل حذف فایل ساخت مجدد فایل برمی آید.
pid: آپشن pid– این امکان را به شما می دهد که یک فرآیند خاص را مشخص کنید تا با خاتمه یافتن آن فرآیند، اجرای دستور tail هم متوقف شود.
n +NUM: با استفاده از این سینتکس می توانید نقطه یا خط شروع را هم خودتان مشخص کنید و خروجی از آن نقطه به بعد برایتان نمایش داده شود.
b: با استفاده از آپشن b می توانید به جای خطوط، تعداد بلوک خروجی را مشخص کنید.
با این آپشن ها می توانید با کنترل و انعطاف بیشتری از دستور tail استفاده کنید و تعامل بهتری با این دستور داشته باشید.
مثال های کاربردی از دستور tail
دیگر وقتْ وقتِ عمل است و بیایید با چند مثال عالی ببینیم که در سناریوهای واقعی چگونه می توان از این دستور کمک گرفت.
مثال ۱) نظارت فایل لاگ دسترسی آچاچی به صورت real time
tail -f /var/log/apache/access.log
مثال ۲) نمایش ۲۰ خط آخر یک فایل لاگ بزرگ
tail -n 20 large_log_file.txt
مثال ۳) ترکیب دستور tail و grep برای فیلتر کردن پیام های خطا از یک فایل لاگ
tail error.log | grep "ERROR"
مثال ۴) مشاهده آخرین خطوط اصلاح شده یک فایل ( با آپدیت مداوم)
tail -f --max-unchanged-stats=2 file.txt
می بینید که آزادی عملی که با این دستور دارید خیلی زیاد است و با خیال راحت می توانید این مثال ها را تست کنید و مثال های دیگر را هم مطابق با نیاز خود طراحی و امتحان کنید تا متوجه تطبیق پذیری دستور tail شوید.
جایگزین های دستور tail
با اینکه دستور tail قدرت خود را اثبات کرده است ولی چند گزینه دیگر هم وجود دارد که بسته به نیازهای خود می توانید از آنها هم استفاده کنید. head ،sed و awk از بهترین جایگزین های دستور tail هستند که هر کدام، ویژگی ها و قابلیت های منحصر بفرد خود را دارند و می توانند از عهده هندل کردن درخواست های شما بر بیایند. اگر خواستید می توانید همه این دستورات را بررسی کنید و ببینید که کدام یک از آنها پتانسیل لازم برای برآورده کردن نیازهای شما را دارند.
کلام آخر
دستور tail یک ابزار مفید برای کار با فایل های لینوکس است که نظارت و بررسی فایل ها مخصوصاً فایل های لاگ را برای ادمین های سیستم راحت تر کرده است. با این دستور می توانید چند خط آخر فایل موردنظر را مشاهده کنید یا آپشن ها و دستورات دیگری را با آن ترکیب کرده و عملکرد این دستور را ارتقا دهید. در کل، دستور tail یک راه حل بسیار انعطاف پذیر و کارآمد است که با یادگیری کامل آن می توانید بهره وری خود را افزایش داده و تسک های پیچیده و نظارت فایل ها را خیلی راحت تر جلو ببرید.
سوالات متداول:
چگونه می توانم دستور tail که به صورت مداوم اجرا می شود را متوقف کنم؟
برای این کار کافیست به ترمینال بروید و کلید ترکیبی Ctrl + C را فشار دهید.
آیا فقط برای فایل های متنی می توان از دستور tail استفاده کنم؟
نه، این دستور با هر نوع فایلی سازگار است و بدون توجه به فرمت فایل، آخرین بخش آن را به شما نشان می دهد.
آیا دستور tail برای فایل های فشرده هم قابل استفاده است؟
بله، این دستور برای فایل های فشرده مثل gz و zip هم قابل استفاده است ولی اول باید فایل را از حالت فشرده در بیاورید و بعد، از دستور tail استفاده کنید.