9 דוגמאות מעשיות של פקודת Tail ב־Linux

כמשתמשי Linux, אנו עובדים לעתים קרובות עם תהליכי רקע ב-Linux ארוכי טווח, הנקראים גם דמונים או שירותים. כמה מדוגמי השירותים הנפוצים הם Secure Shell (sshd), Network Manager (networkd), Volume Manager (LVM), Cron, והרשימה ממשיכה.

לעיתים קרובות אנו צריכים ל עקוב אחר הלוגים של אלה השירותים כדי לאתר בעיות במערכת. אחת האתגרים העיקריים הוא שהשירותים הללו יוצרים המון לוגים ורוב הזמן העברת דרך די קשה, וזהו המקום בו אנו יכולים להשתמש ב פקודת tail.

פקודת tail היא כלי שורת פקודה, דומה ל פקודת head שקוראת קובץ ומדפיסה את השורות האחרונות (התוכן) של אחד או יותר קבצים לפלט סטנדרטי.

במדריך המעשי הזה, נלמד על פקודת tail. עד סוף המדריך הזה, משתמשי קו הפקודה ב-Linux יוכלו להשתמש בפקודת tail ביעילות.
תוכן העניינים

תחביר פקודת tail

התחביר של פקודת tail דומה ל־פקודות אחרות ב־Linux:

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

1. הדפסת השורות האחרונות בקובץ ב־Linux

כברירת מחדל, פקודת tail מדפיסה את ה־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)

בדוגמה זו, אנו רואים שהפקודה מציגה את שבעת התווים האחרונים של הקובץ הנתון.

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

כאן, ניתן לראות כי הפקודה tail מציגה את הטקסט שהתווסף לאחרונה.

האם אתה מכיר דוגמה אחרת משובץ הפקודה tail בלינוקס? תספר לנו את דעתך בתגובות למטה.

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