ניהול קבצים ביעילות באמצעות פקודות head, tail ו-cat ב-Linux

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

Manage Files in Linux

היום, במאמר זה נדבר על הפקודות הפופולריות ביותר בשם head, tail ו־cat, רובנו כבר מודעים לפקודות כאלה, אך מעט מאיתנו מיישמים אותן כאשר נדרש.

1. פקודת head

פקודת head קוראת את השורות הראשונות העשר של כל קובץ נתון. התחביר הבסיסי של פקודת head הוא:

head [options] [file(s)]

לדוגמה, הפקודה הבאה תציג את השורות הראשונות העשר של קובץ בשם '/etc/passwd'

# head /etc/passwd 

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

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

# head /etc/passwd /etc/shadow

==> /etc/passwd <== root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin ==> /etc/shadow <==
root:$6$85e1:15740:0:99999:7:::
bin:*:15513:0:99999:7:::
daemon:*:15513:0:99999:7:::
adm:*:15513:0:99999:7:::
lp:*:15513:0:99999:7:::
sync:*:15513:0:99999:7:::
shutdown:*:15513:0:99999:7:::
halt:*:15513:0:99999:7:::
mail:*:15513:0:99999:7:::
uucp:*:15513:0:99999:7:::

אם רצוי לקבל מספר גדול יותר של שורות מאשר ה־10 ברירת המחדל, אז נשתמש באפשרות '-n' יחד עם מספר שלם המציין את מספר השורות שיש לאחזר. לדוגמה, הפקודה הבאה תציג את השורות הראשונות 5 מהקובץ ' /var/log/yum.log'

# head -n5 /var/log/yum.log

Jan 10 00:06:49 Updated: openssl-1.0.1e-16.el6_5.4.i686
Jan 10 00:06:56 Updated: openssl-devel-1.0.1e-16.el6_5.4.i686
Jan 10 00:11:42 Installed: perl-Net-SSLeay-1.35-9.el6.i686
Jan 13 22:13:31 Installed: python-configobj-4.6.0-3.el6.noarch
Jan 13 22:13:36 Installed: terminator-0.95-3.el6.rf.noarch

בעצם, אין צורך להשתמש באפשרות '-n'. פשוט המינוס ולציין את המספר השלם בלי רווחים כדי לקבל את אותו התוצאה כמו הפקודה למעלה.

# head  -5 /var/log/yum.log

Jan 10 00:06:49 Updated: openssl-1.0.1e-16.el6_5.4.i686
Jan 10 00:06:56 Updated: openssl-devel-1.0.1e-16.el6_5.4.i686
Jan 10 00:11:42 Installed: perl-Net-SSLeay-1.35-9.el6.i686
Jan 13 22:13:31 Installed: python-configobj-4.6.0-3.el6.noarch
Jan 13 22:13:36 Installed: terminator-0.95-3.el6.rf.noarch

הפקודה head יכולה גם להציג כמות רצויה של בתים באמצעות האפשרות '-c' בעקבות מספר הבתים שיש להציג. לדוגמה, הפקודה הבאה תציג את 45 הבתים הראשונים של הקובץ הנתון.

# head -c45 /var/log/yum.log

Jan 10 00:06:49 Updated: openssl-1.0.1e-16.el

2. פקודת tail

הפקודת tail מאפשרת לך להציג את העשר שורות האחרונות של קובץ טקסט כלשהו. בדומה לפקודת head למעלה, הפקודת tail תומכת גם באפשרויות 'n' מספר של שורות ו-'n' מספר של תווים.

התחביר הבסיסי של פקודת tail הוא:

# tail [options] [filenames]

לדוגמה, הפקודה הבאה תדפיס את העשר שורות האחרונות של קובץ בשם 'access.log'.

# tail access.log 

1390288226.042      0 172.16.18.71 TCP_DENIED/407 1771 GET http://download.newnext.me/spark.bin? - NONE/- text/html
1390288226.198      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html
1390288226.210   1182 172.16.20.44 TCP_MISS/200 70872 GET http://mahavat.gov.in/Mahavat/index.jsp pg DIRECT/61.16.223.197 text/html
1390288226.284     70 172.16.20.44 TCP_MISS/304 269 GET http://mahavat.gov.in/Mahavat/i/i-19.gif pg DIRECT/61.16.223.197 -
1390288226.362    570 172.16.176.139 TCP_MISS/200 694 GET http://p4-gayr4vyqxh7oa-3ekrqzjikvrczq44-if-v6exp3-v4.metric.gstatic.com/v6exp3/redir.html pg 
1390288226.402      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html
1390288226.437    145 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html
1390288226.445      0 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html
1390288226.605      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html
1390288226.808      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html

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

# tail access.log error.log

==> access.log <== 1390288226.042      0 172.16.18.71 TCP_DENIED/407 1771 GET http://download.newnext.me/spark.bin? - NONE/- text/html 1390288226.198      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.210   1182 172.16.20.44 TCP_MISS/200 70872 GET http://mahavat.gov.in/Mahavat/index.jsp pg DIRECT/61.16.223.197 text/html 1390288226.284     70 172.16.20.44 TCP_MISS/304 269 GET http://mahavat.gov.in/Mahavat/i/i-19.gif pg DIRECT/61.16.223.197 - 1390288226.362    570 172.16.176.139 TCP_MISS/200 694 GET http://p4-gayr4vyqxh7oa-3ekrqzjikvrczq44-if-v6exp3-v4.metric.gstatic.com/v6exp3/redir.html pg  1390288226.402      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.437    145 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html 1390288226.445      0 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html 1390288226.605      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.808      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html ==> error_log <==
[Sun Mar 30 03:16:03 2014] [notice] Digest: generating secret for digest authentication ...
[Sun Mar 30 03:16:03 2014] [notice] Digest: done
[Sun Mar 30 03:16:03 2014] [notice] Apache/2.2.15 (Unix) DAV/2 PHP/5.3.3 mod_ssl/2.2.15 OpenSSL/1.0.0-fips configured -- resuming normal operations

באופן דומה, ניתן גם להדפיס את השורות האחרונות באמצעות האפשרות '-n' כפי שמוצג למטה.

# tail -5 access.log

1390288226.402      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html
1390288226.437    145 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html
1390288226.445      0 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html
1390288226.605      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html
1390288226.808      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html

ניתן גם להדפיס את מספר התווים באמצעות הפרמטר '-c' כפי שמוצג למטה.

# tail -c5 access.log

ymantec.com:443 - NONE/- text/html

3. פקודת cat

הפקודת 'cat' היא הכלי האוניברסלי והכי נפוץ ביותר. היא מעתיקה קלט סטנדרטי לפלט סטנדרטי. הפקודה תומכת בגלילה, אם קובץ הטקסט לא מתאים למסך הנוכחי.

התחביר הבסיסי של פקודת cat הוא:

# cat [options] [filenames] [-] [filenames]

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

# cat /etc/passwd 

root:x:0:0:root:/root:/bin/bash 
daemon:x:1:1:daemon:/usr/sbin:/bin/sh 
bin:x:2:2:bin:/bin:/bin/sh 
sys:x:3:3:sys:/dev:/bin/sh 
sync:x:4:65534:sync:/bin:/bin/sync 
games:x:5:60:games:/usr/games:/bin/sh 
man:x:6:12:man:/var/cache/man:/bin/sh 
lp:x:7:7:lp:/var/spool/lpd:/bin/sh 
…

פקודת cat גם משמשת לחיבור מספר קבצים יחד.

# echo 'Hi Tecmint-Team' > 1 
# echo 'Keep connected' > 2 
# echo 'Share your thought' > 3 
# echo 'connect us [email protected]' > 4
# cat 1 2 3 4 > 5
# cat 5 

Hi Tecmint-Team 
Keep connected 
Share your thought 
connect us [email protected]

זה יכול לשמש גם ליצירת קבצים. זה מתבצע על ידי ביצוע הפקודה cat ואחריה מפריד הכיווץ של פלט ושם הקובץ שיש ליצור.

# cat > tecmint.txt

Tecmint is the only website fully dedicated to Linux.

אנו יכולים להכיל סיומות מותאמות אישית עבור הפקודה 'cat'. הנה זה מיושם.

# cat > test.txt << end 

I am Avishek 
Here i am writing this post 
Hope your are enjoying 
end
# cat test.txt 

I am Avishek 
Here i am writing this post 
Hope your are enjoying

אל תכ�低估低估 the power of the 'cat' command and it can be useful for copying files.

# cat avi.txt

I am a Programmer by birth and Admin by profession
# cat avi.txt > avi1.txt
# cat avi1.txt

I am a Programmer by birth and Admin by profession

עכשיו מה ההפך מ-cat? כן זה 'tac'. 'tac' היא פקודה תחת Linux. עדיף להציג דוגמא של 'tac' מאשר לדבר על כל דבר על זה.

צור קובץ טקסט עם שמות כל החודשים, כך שמילה אחת מופיעה בשורה.

# cat month

January
February
March
April
May
June
July
August
September
October
November
December
# tac month

December
November
October
September
August
July
June
May
April
March
February
January

לדוגמאות נוספות של שימוש בפקודת cat, ראה 13 שימוש בפקודת cat

זה הכול לעכשיו. אני אחזור שוב עם מאמר מעניין נוסף, שווה לדעת. עדיין הישאר מעודכן ומחובר ל-Tecmint. אל תשכח לספק לנו משוב בערכך בקטע התגובות שלנו.

Source:
https://www.tecmint.com/view-contents-of-file-in-linux/