ค้นหาเว็บไซต์

จัดการไฟล์อย่างมีประสิทธิภาพโดยใช้คำสั่ง head, tail และ cat ใน Linux


มีคำสั่งและโปรแกรมหลายรายการจาก Linux สำหรับการดูเนื้อหาของไฟล์ การทำงานกับไฟล์ถือเป็นงานที่น่ากังวลอย่างหนึ่ง ผู้ใช้คอมพิวเตอร์ส่วนใหญ่ ไม่ว่าจะเป็นมือใหม่ ผู้ใช้ทั่วไป ผู้ใช้ขั้นสูง นักพัฒนา ผู้ดูแลระบบ ฯลฯ การทำงานกับไฟล์อย่างมีประสิทธิผลถือเป็นศิลปะอย่างหนึ่ง

วันนี้ในบทความนี้ เราจะมาพูดถึงคำสั่งยอดนิยมที่เรียกว่า head, tail และ cat ซึ่งพวกเราส่วนใหญ่ทราบอยู่แล้วถึงคำสั่งดังกล่าว แต่น้อยคนนักที่จะนำไปใช้เมื่อจำเป็น

1. หัวหน้าผู้บังคับบัญชา

คำสั่ง 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:::

หากต้องการดึงข้อมูลจำนวนบรรทัดมากกว่าสิบบรรทัดเริ่มต้น ตัวเลือก '-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 ช่วยให้คุณสามารถแสดงสิบบรรทัดสุดท้ายของไฟล์ข้อความใดก็ได้ เช่นเดียวกับคำสั่ง 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 [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 ' > 4
cat 1 2 3 4 > 5
cat 5 

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

นอกจากนี้ยังสามารถใช้สร้างไฟล์ได้อีกด้วย สามารถทำได้โดยการรัน 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

อย่าประมาทพลังของคำสั่ง "cat" ต่ำไป และจะมีประโยชน์สำหรับการคัดลอกไฟล์

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

ตอนนี้สิ่งที่ตรงกันข้ามกับแมวคืออะไร? ใช่แล้ว มันคือ 'แทค' 'tac' เป็นคำสั่งภายใต้ Linux เป็นการดีกว่าที่จะแสดงตัวอย่างของ 'แทค' ดีกว่าที่จะพูดอะไรเกี่ยวกับมัน

สร้างไฟล์ข้อความที่มีชื่อของเดือนทั้งหมด โดยให้มีหนึ่งคำปรากฏบนบรรทัด

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 อย่าลืมให้ข้อเสนอแนะอันมีค่าของคุณในส่วนความคิดเห็นของเรา