Quản lý tệp hiệu quả bằng cách sử dụng lệnh tail, cat, head Linux

Hôm nay, trong bài viết này chúng ta sẽ thảo luận về các câu lệnh phổ biến nhất được gọi là tail, cat và head Linux, hầu hết chúng ta đã biết về các câu lệnh nhưng rất ít trong số chúng ta thực hiện khi cần.

Có một số câu lệnh và chương trình được cung cấp bởi Linux để xem nội dung của tệp. Làm việc với tệp là một trong những nhiệm vụ khó khăn, hầu hết người dùng máy tính dù là mới tìm hiểu, người dùng thường xuyên, người dùng nâng cao, nhà phát triển, quản trị viên, vv thực hiện. Làm việc hiệu quả và hiệu quả với tệp là một nghệ thuật.

View Content of Files in Linux

1. head command

Lệnh head đọc 10 dòng đầu tiên của một tệp được chỉ định bất kỳ. Cú pháp cơ bản của lệnh head là:

head [options] [file(s)]

Ví dụ, câu lệnh sau sẽ hiển thị 10 dòng đầu tiên của tệp có tên /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

Nếu có nhiều hơn một tệp được cung cấp, head sẽ hiển thị 10 dòng đầu tiên của mỗi tệp một cách riêng biệt. Ví dụ, câu lệnh sau sẽ hiển thị mười dòng của mỗi tệp.

# 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ếu muốn lấy nhiều hơn mười dòng mặc định, thì sử dụng tùy chọn -n kèm theo một số nguyên cho biết số dòng cần lấy. Ví dụ, câu lệnh sau sẽ hiển thị 5 dòng đầu tiên từ tệp /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

Thực tế, không cần sử dụng tùy chọn -n. Chỉ cần dấu gạch ngang và chỉ định số nguyên mà không có khoảng trống để có kết quả giống như câu lệnh trê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

Lệnh head cũng có thể hiển thị bất kỳ số byte nào bằng cách sử dụng tùy chọn -c theo sau là số byte cần hiển thị. Ví dụ, câu lệnh sau sẽ hiển thị 45 byte đầu tiên của tệp được cung cấp.

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

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

2. tail command

Lệnh tail cho phép bạn hiển thị mười dòng cuối cùng của bất kỳ tệp văn bản nào. Tương tự như lệnh head ở trên, lệnh tail cũng hỗ trợ các tùy chọn n số dòng và n số ký tự.

Cú pháp cơ bản của lệnh tail là:

# tail [options] [filenames]

Ví dụ, câu lệnh sau sẽ in ra mười dòng cuối cùng của một tệp có tên 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

Nếu cung cấp nhiều hơn một tệp, tail sẽ in ra mười dòng cuối cùng của mỗi tệp như được hiển thị bên dưới.

# 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

Tương tự, bạn cũng có thể in ra mấy dòng cuối cùng bằng cách sử dụng tùy chọn -n như được hiển thị bên dưới.

# 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

Bạn cũng có thể in ra số ký tự sử dụng đối số -c’ như được hiển thị bên dưới.

# tail -c5 access.log

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

3. cat command

Lệnh cat là công cụ được sử dụng rộng rãi, thông dụng nhất. Nó sao chép đầu vào chuẩn thành đầu ra chuẩn. Lệnh hỗ trợ cuộn trang, nếu tệp văn bản không vừa với màn hình hiện tại.

Cú pháp cơ bản của lệnh cat là:

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

Cách sử dụng phổ biến nhất của cat là để đọc nội dung của các tệp. Để mở một tệp để đọc, chỉ cần gõ cat, theo sau là một khoảng trống và tên tệp.

# 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 
…

Lệnh cat cũng được sử dụng để nối số lượng tệp lại với nhau.

# echo 'Hi Tecmint-Team' > 1 
# echo 'Keep connected' > 2 
# echo 'Share your thought' > 3 
# echo 'connect us tecmint.com@gmail.com' > 4
# cat 1 2 3 4 > 5
# cat 5 

Hi Tecmint-Team 
Keep connected 
Share your thought 
connect us tecmint.com@gmail.com

Nó cũng có thể được sử dụng để tạo tệp từ đầu. Điều này được thực hiện bằng cách thực thi cat, theo sau là toán tử chuyển hướng đầu ra và tên tệp cần tạo.

# cat > tecmint.txt

Tecmint is the only website fully dedicated to Linux.

Chúng ta có thể có đánh dấu cuối tùy chỉnh cho lệnh ‘cat’. Đây là cách thực hiện nó.

# 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

Đừng xem thường sức mạnh của ‘cat’ và nó có thể hữu ích khi sao chép tệp.

# 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

Bây giờ đây là đối lập của cat? Vâng, nó là ‘tac’. ‘tac’ là một lệnh dưới Linux. Tốt nhất là hiển thị một ví dụ về ‘tac’ thay vì nói về nó.

Tạo một tệp văn bản với tên của tất cả các tháng, sao cho một từ xuất hiện trên một dòng.

# 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

Đó là tất cả về tail, cat và head Linux, hy vọng những kiến thức này có thể giúp bạn áp dụng trong quá trình quản lý Linux.