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.
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.