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