Cách sử dụng lệnh head, tail, less, more Image Cách sử dụng lệnh head, tail, less, more

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