Bài viết này sẽ giới thiệu với các bạn về cách sử dụng lệnh head, tail, less và more trên hệ điều hành Linux.
1. Làm việc với file có lớn.
Các quản trị viên hệ thống thường làm việc với các tệp cấu hình, tệp văn bản, tệp tài liệu và tệp nhật ký và các tệp này có kích thước lớn hoặc khá lớn khi các tệp này tích luỹ dữ liệu trong quá trình sử dụng theo thời gian. Những tập tin này sẽ yêu cầu xem và cập nhật. Trong phần này, chúng ta sẽ học cách quản lý các tệp lớn.
Ví dụ: Hệ thống ngân hàng có một tệp nhật ký lớn là do ghi lại tất cả các giao dịch ATM của một ngày. Do một cuộc tấn công bảo mật hoặc sự cố, quản trị viên buộc phải kiểm tra một số dữ liệu trong tệp. Trong trường hợp như vậy, việc trực tiếp mở tệp trong trình chỉnh sửa sẽ gây ra sự cố, do sử dụng bộ nhớ cao, vì trình chỉnh sửa thường sẽ cố gắng đọc toàn bộ tệp vào bộ nhớ trước. Tuy nhiên, chúng ta có thể sử dụng lệnh less
để xem nội dung của một tệp lớn, cuộn lên xuống theo từng trang mà không cần hệ thống phải đặt toàn bộ tệp vào bộ nhớ trước khi bắt đầu. Điều này nhanh hơn nhiều so với sử dụng một trình soạn thảo văn bản.
Xem một tệp có thể được thực hiện bằng một trong hai lệnh sau:
less file
Hoặc
cat file | less
Để xem tham số đi kèm lệnh less
ta dùng: man less
2. Lệnh head và lệnh tail
Lệnh head
và lệnh tail
có cách sử dụng tương tự nhau, đều là lấy ra một phần bản văn của file.
2.1: Lệnh head
Lệnh head
dùng để xem những dòng đầu của tệp tin (theo mặc định là 10 dòng đầu tiên). Chúng ta có thể thay đổi số dòng bằng cách thêm -n vào sau lệnh head
. Cách dùng lệnh head
:
head [tuỳ chọn] file
Trong đó tùy chọn có thể là:
-n, --lines=[-]n
: In số dòng n đầu tiên của mỗi tệp-c, --byte=[-]n
: In số byte n đầu tiên của mỗi tệp-q
: Không in tiêu đề xác định tên tệp-v
: Luôn in tiêu đề xác định tên tệp--help
: Hiển thị các trợ giúp--version
: Thông tin về phiên bản và thoát
Ngoài ra chúng ta có thể tìm hiểu thêm các tùy chọn sử dụng lệnh: man head
Để hiểu rõ các tùy chọn trên chúng ta thực hiện một số ví dụ sau:
Ví dụ: Dùng lệnh head
xem 5 dòng đầu của /etc/passwd:
[root@test1 ~]# head -5 /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
Ví dụ: Dùng lệnh head
suất ra 20 byte (ký tự) đầu tiên của /etc/passwd
[root@test1 ~]# head -c 20 /etc/passwd
root:x:0:0:root:/roo
Lưu ý: Dòng mới được tính là một ký tự đơn vì vậy nếu head in ra một dòng mới thì no sẽ tính là một byte.
2.2: Lệnh tail
Lệnh tail
dùng để xem những dòng đầu của tệp tin (theo mặc định là 10 dòng). Lệnh tail
rất hữu ích khi khắc phục sự cố tệp nhật ký. Cách dùng lệnh tail
:
tail [tuỳ chọn] file
Trong đó tùy chọn có thể là:
-n, --lines=[-]n
: In số dòng n cuối cùng của mỗi tệp-n, --lines=[+]n
: In tất cả các dòng từ n về sau-c, --byte=[-]n
: In số byte n đầu cuối cùng mỗi tệp-q
: Không in tiêu đề đầu ra-f
: Tiếp tục đọc tập tin cho đến khi CTRL + C--help
: Hiển thị các trợ giúp--version
: Thông tin về phiên bản và thoát
Chú ý: Lệnh tail -f này rất hữu ích khi dùng để theo dõi trực tiếp các file log.
Ngoài ra chúng ta có thể tìm hiểu thêm các tùy chọn sử dụng lệnh: man head
Để hiểu rõ các tùy chọn trên chúng ta thực hiện một số ví dụ sau:
Ví dụ: Dùng lệnh tail
xem 5 dòng cuối của /etc/passwd:
[root@test1 ~]# tail -5 /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
centos:x:1000:1000::/home/centos:/bin/bash
tcpdump:x:72:72::/:/sbin/nologin
nginx:x:997:994:Nginx web server:/var/lib/nginx:/sbin/nologin
dang:x:1001:1001::/home/dang:/bin/bash
Ví dụ: Dùng lệnh tail
suất ra 20 byte (ký tự) cuối của /etc/passwd
[root@test1 ~]# tail -c 20 /etc/passwd
home/dang:/bin/bash
Ví dụ: Xuất ra dòng cuối cùng của /var/log/secure và theo dõi /var/log/secure để cập nhật; tail sau đó tiếp tục xuất ra bất kỳ dòng mới nào được thêm vào /var/log/secure. Để dừng lại việc xuất khi có dòng mới thêm vào ta dùng tổ hợp phím CTRL + C
[root@test1 ~]# tail -f /var/log/secure
Jan 27 03:40:14 test1 sshd[12910]: pam_unix(sshd:session): session closed for user root
Jan 27 07:35:38 test1 sshd[13205]: Accepted publickey for root from 45.126.99.150 port 32191 ssh2: RSA SHA256:cI/IPgRD+q6Cnia3t3XvDOdJSvMLyjybqu6lho+ss4c
Jan 27 07:35:38 test1 sshd[13205]: pam_unix(sshd:session): session opened for user root by (uid=0)
Jan 27 09:14:42 test1 sshd[13268]: Accepted publickey for root from 45.126.99.149 port 15327 ssh2: RSA SHA256:cI/IPgRD+q6Cnia3t3XvDOdJSvMLyjybqu6lho+ss4c
Jan 27 09:14:42 test1 sshd[13268]: pam_unix(sshd:session): session opened for user root by (uid=0)
3. Lệnh less và lệnh more
Trong trường hợp cần phải đọc toàn bộ dữ liệu từ một file nhưng lại không muốn mở file đó lên bằng một trình soạn thảo, chúng ta có thể sử dụng lệnh less
hoặc lệnh more
để phân trang file cần đọc.
3.1: Lệnh less
Lệnh less
dùng mở một tệp để đọc tương tác, cho phép di chuyển lên xuống và tìm kiếm. Để mở tệp tin:
less file
Trang lên trang xuống:
- Phím Space: di chuyển xuống trang mới
- Phím b: di chuyển lên lại trang phía trên
Lệnh less
có thể dùng phím mũi tên trên bàn phím để scroll lên xuống.
Di chuyển đến cuối, bắt đầu tập tin:
- Phím G: di chuyển đến cuối tập tin
- Phím g: di chuyển đến đầu tập tin
Tìm kiếm một chuỗi
/{chuỗi}
Hay
?{chuỗi}
Theo dõi đầu ra của tệp hiện đang mở:
- Phím F
Mở tệp hiện tại trong trình chỉnh sửa:
- Phím v
Thoát tệp hiện tại:
- Phím q
3.2: Lệnh more
Lệnh more
dùng mở một tệp để đọc tương tác, cho phép di chuyển lên xuống và tìm kiếm. Để mở tệp tin:
more file
Trang xuống:
- Phím Space: di chuyển xuống trang mới
Tìm kiếm một chuỗi
/{chuỗi}
Thoát tệp hiện tại:
- Phím q
Lưu ý: Điểm khác biệt giữa less và more là less cho phép cuộn ngược lên các trang dữ liệu đã đọc, còn more thì chỉ có thể đọc từ đầu tới cuối. Lệnh less có thể dùng phím mũi tên trên bàn phím để scroll lên xuống, lệnh more không có chức năng này.