Quản lý tệp tin với lệnh head, tail, cat trên Centos / Ubuntu / Debian / Fedora

Có nhiều lệnh và chương trình được cung cấp bởi Linux để xem nội dung của tệp tin. Làm việc với tệp tin là một trong những nhiệm vụ khó khăn, mà hầu hết người dùng máy tính, bất kể là người mới, 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,... Làm việc và quản lý tệp tin hiệu quả là một nghệ thuật. Trong bài viết này sẽ đề cập lệnh phổ biến là head, tail và cat, hầu hết chúng ta đã biết về các lệnh này, nhưng rất ít người sử dụng chúng khi cần thiết.

Cú pháp cơ bản của lệnh head, tail và cat

  • Cú pháp cơ bản của lệnh head:
head [options] [file(s)]
  • Cú pháp cơ bản của lệnh tail:
# tail [options] [filenames]
  • Cú pháp cơ bản của lệnh cat:
# cat [options] [filenames] [-] [filenames]

Quản lý tệp tin với 3 lệnh: head, tail, cat

Quản lý tệp tin với lệnh head

Ví dụ, lệnh sau sẽ hiển thị mười dòng đầu tiên của tệp tin 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 tin được cung cấp, lệnh head sẽ hiển thị mười dòng đầu tiên của mỗi tệp tin một cách riêng biệt. Ví dụ, lệnh sau sẽ hiển thị mười dòng của mỗi tệp tin.

# 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, ta 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ụ, lệnh sau sẽ hiển thị năm dòng đầu tiên từ tệp tin '/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

Trên 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 để đạt được cùng kết quả như 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ị một số lượng byte mong muốn bằng cách sử dụng tùy chọn '-c' theo sau là số lượng byte cần hiển thị. Ví dụ, lệnh sau sẽ hiển thị 45 byte đầu tiên của tệp được chỉ định.

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

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

Quản lý tệp tin với lệnh tail

Nếu bạn dùng lệnh tail để quản lý tệp tin thì công dụng của nó là 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 trong Linux cũng hỗ trợ các tùy chọn số lượng dòng '-n' và số lượng ký tự '-c'. Ví dụ, lệnh sau sẽ hiển thị mười dòng cuối cùng của 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 tệp, lệnh tail sẽ in ra mười dòng cuối cùng của mỗi tệp như dưới đây:

# 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ột số dòng cuối cùng sử dụng tùy chọn ‘-n‘ như dưới đây:

# 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 tùy chọn ‘-c’ như dưới đây:

# tail -c5 access.log

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

Quản lý tệp tin với lệnh cat

Lệnh cat trong Linux là một công cụ phổ biến và đa năng. Nó sao chép đầu vào tiêu chuẩn sang đầu ra tiêu chuẩn. Lệnh này 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.

Sử dụng 'cat' để quản lý tệp tin, điển hình là đọc nội dung của tệp - một trong những cách sử dụng phổ biến nhất. Để mở một tệp để đọc, bạn chỉ cần gõ 'cat' tiếp theo là một dấu cách 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 (concatenate) nhiều tệp lại với nhau.

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

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

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

# cat > phothongtin.txt

Tecmint is the only website fully dedicated to Linux.

Chúng ta có thể có một ký tự kết thúc 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

Không bao giờ đánh giá thấp sức mạnh của lệnh 'cat' và nó có thể hữu ích để sao chép các tệp tin.

# 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ờ, hãy xem ví dụ về 'tac' để hiểu rõ hơn. Hãy tạo một tệp văn bản chứa tên của tất cả các tháng, mỗi tháng trên một dòng riê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

Quản lý tệp tin là một điều không đơn giản nhưng khi có tổ hợp lệnh head, tail, cat bạn sẽ làm điều đó dễ dàng hơn. Hy vọng với những ví dụ thực tế trên sẽ giúp bạn thao tác thành thục hơn trên hệ điều hành Linux.

Mọi người cũng tìm kiếm: lệnh more trong linux, ubuntu cat tail, head tail, ent-shasta-rrs.symantec.com, head cat