9 أمثلة عملية لأمر الذيل في نظام Linux

كمستخدمي Linux، غالبًا ما نعمل مع العمليات الخلفية لفترات طويلة على Linux، التي تُسمى الشياطين أو الخدمات. بعض الأمثلة الشائعة على الخدمات هي Secure Shell (sshd)، ومدير الشبكة (networkd)، ومدير الحجم (LVM)، Cron، والقائمة تطول.

في كثير من الأحيان نحتاج إلى مراقبة سجلات هذه الخدمات لتصحيح مشاكل النظام. ومع ذلك، أحد التحديات الرئيسية هي أن هذه الخدمات تولد الكثير من السجلات وفي معظم الأوقات يجعل الانتقال من خلال هذه السجلات أمرًا مزعجًا، وهنا يمكننا استخدام أمر tail.

أمر tail هو أداة سطر الأوامر، مشابهة لأمر head التي تقرأ ملفًا وتطبع أخر 10 أسطر (المحتوى) من ملف واحد أو أكثر إلى الإخراج القياسي.

في هذا الدليل التطبيقي، سنتعلم حول أمر tail. بحلول نهاية هذا الدليل، سيكون مستخدمو سطر الأوامر في Linux قادرين على استخدام أمر tail بفعالية.
جدول المحتويات

صيغة أمر الأذيل

صيغة أمر الأذيل مماثلة لـ أوامر Linux الأخرى:

$ tail [OPTIONS] [FILE-1] [FILE-2] ...

1. طباعة آخر 10 أسطر من الملف في Linux

بشكل افتراضي، يقوم أمر الأذيل بطباعة آخر 10 أسطر من الملف المحدد كما هو موضح.

$ tail /var/log/secure


Apr  2 14:17:24 TecMint sshd[201178]: Disconnected from user tecmint 192.168.0.162 port 59774
Apr  2 14:17:24 TecMint sshd[201165]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 14:29:12 TecMint sshd[201366]: Accepted password for tecmint from 192.168.0.162 port 56378 ssh2
Apr  2 14:29:12 TecMint systemd[201371]: pam_unix(systemd-user:session): session opened for user tecmint(uid=1002) by (uid=0)
Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session opened for user tecmint(uid=1002) by (uid=0)
Apr  2 14:29:12 TecMint sshd[201382]: Received disconnect from 192.168.0.162 port 56378:11: disconnected by user
Apr  2 14:29:12 TecMint sshd[201382]: Disconnected from user tecmint 192.168.0.162 port 56378
Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2
Apr  2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

هنا، يمكننا رؤية أن الأمر أعلاه يعرض آخر عشرة أسطر من ملف /var/log/secure.

2. طباعة آخر N أسطر من الملف في Linux

في المثال السابق، يقوم الأمر بطباعة آخر 10 أسطر من الملف المحدد. ومع ذلك، يمكننا استخدام الخيار -n الذي يسمح لنا بتحديد عدد الأسطر التي يتم طباعتها على الشاشة كما هو موضح.

$ tail -n 3 /var/log/secure

Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2
Apr  2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

في هذا المثال، يمكننا أن نرى أن الأمر الآن يعرض ثلاثة أسطر فقط بدلاً من العشرة.

3. تجاهل أول N أسطر من الملف في Linux

هنا، يمكننا استخدام رمز الزائد (+) مع الخيار -n، الذي يسمح لنا بالتحكم في نقطة البداية من الملف المعطى.

لفهم ذلك، دعنا نستخدم القيمة +5 لبدء الإخراج من السطر الخامس:

$ tail -n +5 /var/log/secure

Apr  2 14:17:24 TecMint sshd[201178]: Disconnected from user tecmint 192.168.0.162 port 59774
Apr  2 14:17:24 TecMint sshd[201165]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 14:29:12 TecMint sshd[201366]: Accepted password for tecmint from 192.168.0.162 port 56378 ssh2
Apr  2 14:29:12 TecMint systemd[201371]: pam_unix(systemd-user:session): session opened for user tecmint(uid=1002) by (uid=0)
Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session opened for user tecmint(uid=1002) by (uid=0)
Apr  2 14:29:12 TecMint sshd[201382]: Received disconnect from 192.168.0.162 port 56378:11: disconnected by user
Apr  2 14:29:12 TecMint sshd[201382]: Disconnected from user tecmint 192.168.0.162 port 56378
Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2
Apr  2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

4. عرض آخر N أحرف من الملف

بشكل مماثل للأسطر، يمكننا أيضًا استخدام الأمر لعرض آخر N أحرف من الملف باستخدام الخيار -c كما هو موضح أدناه:

$ tail -c 7 /var/log/secure

(uid=0)

في هذا المثال، يمكننا رؤية أن الأمر يظهر آخر سبعة أحرف ASCII من الملف المعطى.

5. إزالة أول N أحرف من الملف

بالمثل، يمكننا استخدام رمز الزائد (+) مع الخيار -c لتخطي الحرف الأول N. لذلك دعنا نتخطى السطر الأول من الملف باستخدام الأمر أدناه:

$ tail -c +5 /var/log/secure

Apr  2 03:02:59 TecMint sudo[162801]: root : TTY=pts/2 ; PWD=/root ; USER=root ; COMMAND=/bin/dnf install R
Apr  2 03:02:59 TecMint sudo[162801]: pam_unix(sudo:session): session opened for user root(uid=0) by root(uid=0)
Apr  2 03:03:02 TecMint sudo[162801]: pam_unix(sudo:session): session closed for user root
Apr  2 03:11:17 TecMint groupadd[163602]: group added to /etc/group: name=avahi, GID=70
Apr  2 03:11:18 TecMint groupadd[163602]: group added to /etc/gshadow: name=avahi
Apr  2 03:11:18 TecMint groupadd[163602]: new group: name=avahi, GID=70
Apr  2 03:11:19 TecMint useradd[163610]: new user: name=avahi, UID=70, GID=70, home=/var/run/avahi-daemon, shell=/sbin/nologin, from=none
Apr  2 03:13:41 TecMint groupadd[163704]: group added to /etc/group: name=colord, GID=986
Apr  2 03:13:41 TecMint groupadd[163704]: group added to /etc/gshadow: name=colord

هنا، يمكننا رؤية أن الأمر يظهر جميع الأسطر باستثناء السطر الأول.

6. عرض اسم الملف في العنوان

يمكننا أن نوجه الأمر tail لعرض اسم الملف الحالي كعنوان عرض، وهو أمر مفيد أثناء العمل مع ملفات متعددة.

لذا، دعنا نستخدم الخيار -v لتمكين عرض العنوان:

$ tail -n 3 -v /var/log/secure

==>/var/log/secure <==
Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2
Apr  2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

==> /var/log/secure <== يمثل رأس العرض.

7. عرض اسم الملف كرأس في ملفات متعددة

مثل أي أمر آخر لمعالجة الملفات، يمكننا أيضًا استخدام ملفات متعددة مع أمر tail. في مثل هذه الحالات، يتم استخدام رأس العرض لفصل محتويات الملف.

$ tail -n 3 -v /var/log/secure /var/log/secure-20230402

==> /var/log/secure <==
Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2
Apr  2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

==> /var/log/secure-20230402 <==
Mar 31 03:50:53 TecMint groupadd[156163]: new group: name=docker, GID=987
Mar 31 04:46:11 TecMint sshd[159403]: Accepted password for root from 192.168.0.162 port 46480 ssh2
Mar 31 04:46:11 TecMint sshd[159403]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

في الإخراج أعلاه، يمكننا رؤية رأس العرض لكل ملف.

8. كيفية تعطيل رأس العرض في الملف

في المثال السابق، رأينا أن الأمر يمكن أن يمكّن رأس العرض أثناء العمل مع ملفات متعددة. ومع ذلك، يمكننا كبح هذا السلوك الافتراضي باستخدام الخيار -q.

$ tail -q -n 3 /var/log/secure /var/log/secure-20230402

Apr  2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint
Apr  2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2
Apr  2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
Mar 31 03:50:53 TecMint groupadd[156163]: new group: name=docker, GID=987
Mar 31 04:46:11 TecMint sshd[159403]: Accepted password for root from 192.168.0.162 port 46480 ssh2
Mar 31 04:46:11 TecMint sshd[159403]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)

هنا، يمكننا رؤية أن الأمر يعرض محتويات الملف واحدة تلو الأخرى بدون أي رأس عرض.

9. كيفية مراقبة ملف للتغييرات

حتى الآن رأينا أن أمر tail يخرج بمجرد معالجة عدد السطور أو الحروف المطلوبة. ومع ذلك، في بعض الأحيان نريد عرض السجلات المولدة حديثًا أيضًا.

في مثل هذه الحالات، يمكننا استخدام الخيار -f مع الأمر، الذي يسمح لنا بمراقبة الملف للتغييرات في الوقت الفعلي.

لفهم هذا، دعنا ننفذ أولاً الأمر أدناه في الطرفية الأولى:

$ tail -f /var/log/messages


Apr  2 15:13:28 TecMint NetworkManager[741]:   [1680462808.8441] policy: set-hostname: current hostname was changed outside NetworkManager: 'TecMint'
Apr  2 15:13:28 TecMint systemd[1]: Starting Network Manager Script Dispatcher Service...
Apr  2 15:13:28 TecMint systemd[1]: Started Network Manager Script Dispatcher Service.
Apr  2 15:13:37 TecMint arpwatch[11001]: rename arp.dat -> arp.dat-: Operation not permitted
Apr  2 15:13:38 TecMint systemd[1]: NetworkManager-dispatcher.service: Deactivated successfully.
Apr  2 15:13:58 TecMint systemd[1]: systemd-hostnamed.service: Deactivated successfully.
Apr  2 15:18:03 TecMint systemd[1]: Starting dnf makecache...
Apr  2 15:18:03 TecMint dnf[202235]: Metadata cache refreshed recently.
Apr  2 15:18:03 TecMint systemd[1]: dnf-makecache.service: Deactivated successfully.
Apr  2 15:18:03 TecMint systemd[1]: Finished dnf makecache.

هنا، يمكننا رؤية أن الأمر ينتظر بلا نهاية بعد عرض آخر عشرة أسطر:

الآن، دعنا نفتح محطة أخرى ونضيف بعض النص إلى ملف numbers-2.txt:

$ echo "View Logs in Real-Time" >> /var/log/messages

الآن، دعنا ننتقل إلى المحطة الأولى لعرض النص الذي تمت إضافته حديثًا:

$ tail -f /var/log/messages

Apr  2 15:13:28 TecMint NetworkManager[741]:   [1680462808.8441] policy: set-hostname: current hostname was changed outside NetworkManager: 'TecMint'
Apr  2 15:13:28 TecMint systemd[1]: Starting Network Manager Script Dispatcher Service...
Apr  2 15:13:28 TecMint systemd[1]: Started Network Manager Script Dispatcher Service.
Apr  2 15:13:37 TecMint arpwatch[11001]: rename arp.dat -> arp.dat-: Operation not permitted
Apr  2 15:13:38 TecMint systemd[1]: NetworkManager-dispatcher.service: Deactivated successfully.
Apr  2 15:13:58 TecMint systemd[1]: systemd-hostnamed.service: Deactivated successfully.
Apr  2 15:18:03 TecMint systemd[1]: Starting dnf makecache...
Apr  2 15:18:03 TecMint dnf[202235]: Metadata cache refreshed recently.
Apr  2 15:18:03 TecMint systemd[1]: dnf-makecache.service: Deactivated successfully.
Apr  2 15:18:03 TecMint systemd[1]: Finished dnf makecache.
View Logs in Real-Time

هنا، يمكننا رؤية أن أمر الذيل يعرض النص الذي تمت إضافته حديثًا.

هل تعرف أي مثال آخر جيد لأمر الذيل في نظام التشغيل لينكس؟ دعنا نعرف آرائك في التعليقات أدناه.

Source:
https://www.tecmint.com/tail-command-linux/