Khi bạn làm việc trên dòng lệnh của Linux, đôi khi bạn muốn xem nhanh những dòng đầu tiên của một tệp. Ví dụ, nếu tệp nhật ký liên tục được cập nhật, bạn có thể muốn xem 10 dòng đầu tiên của tệp nhật ký mỗi lần. Mặc dù luôn có tùy chọn để xem tệp trong trình soạn thảo (ví dụ: vim), nhưng có một công cụ dòng lệnh có tên là head cho phép bạn dễ dàng xem những dòng đầu tiên của tệp.
Trong bài viết này, chúng tôi sẽ giải thích những điều cơ bản về lệnh head bằng một số ví dụ dễ hiểu. Xin lưu ý rằng tất cả các bước/hướng dẫn được đề cập ở đây đã được thử nghiệm trên Ubuntu 22.04.
Sau đây là cách trang hướng dẫn của lệnh mô tả lệnh này:
Các ví dụ kiểu Hỏi & Đáp sau đây sẽ giúp bạn hiểu rõ hơn về cách thức hoạt động của công cụ này:
Ảnh chụp màn hình sau đây cho thấy lệnh đang hoạt động:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22219%22%3E%3C/svg%3E
Ví dụ, nếu bạn chỉ muốn in 5 dòng đầu tiên, bạn có thể truyền tải điều này đến công cụ theo cách sau:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22207%22%3E%3C/svg%3E
Ví dụ, nếu bạn muốn head chỉ hiển thị 25 byte đầu tiên, đây là cách bạn có thể thực thi lệnh:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22169%22%3E%3C/svg%3E
Vì vậy, bạn có thể thấy rằng công cụ chỉ hiển thị 25 byte đầu tiên trong đầu ra.
Xin lưu ý rằng [N] "có thể có hệ số nhân hậu tố: b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, v.v. đối với T, P, E, Z, Y."
Đây là một ví dụ:
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22300%22%3E%3C/svg%3E
Như bạn thấy, tên tệp 'file 1' đã được hiển thị trong đầu ra.
Trong bài viết này, chúng tôi sẽ giải thích những điều cơ bản về lệnh head bằng một số ví dụ dễ hiểu. Xin lưu ý rằng tất cả các bước/hướng dẫn được đề cập ở đây đã được thử nghiệm trên Ubuntu 22.04.
Lệnh head Linux
Như đã đề cập ở phần đầu, lệnh head cho phép người dùng xem phần đầu tiên của các tệp. Cú pháp của lệnh này như sau:
Mã:
head [OPTION]... [FILE]...
Mã:
In 10 dòng đầu tiên của mỗi FILE ra đầu ra chuẩn. Với nhiều hơn một FILE, hãy đặt trước mỗi
một tiêu đề nêu tên tệp.
Câu hỏi 1. Làm thế nào để in 10 dòng đầu tiên của một tệp trên thiết bị đầu cuối (stdout)?
Điều này khá dễ dàng khi sử dụng head - trên thực tế, đây là hành vi mặc định của công cụ.
Mã:
head [tên tệp]
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22219%22%3E%3C/svg%3E
Câu 2. Làm thế nào để điều chỉnh số dòng in của lệnh head?
Mặc dù 10 là số dòng mặc định mà lệnh head in ra, bạn có thể thay đổi số này tùy theo yêu cầu của mình. Tùy chọn dòng lệnh -n cho phép bạn thực hiện điều đó.
Mã:
head -n [N] [Tên tệp]
Mã:
head -n 5 file1.txt
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22207%22%3E%3C/svg%3E
Câu 3. Làm thế nào để hạn chế đầu ra ở một số byte nhất định?
Không chỉ số dòng, bạn cũng có thể hạn chế đầu ra của lệnh head ở một số byte cụ thể. Bạn có thể thực hiện việc này bằng tùy chọn dòng lệnh -c.
Mã:
head -c [N] [File-name]
Mã:
head -c 25 file1.txt
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22169%22%3E%3C/svg%3E
Vì vậy, bạn có thể thấy rằng công cụ chỉ hiển thị 25 byte đầu tiên trong đầu ra.
Xin lưu ý rằng [N] "có thể có hệ số nhân hậu tố: b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB 1000*1000*1000, G 1024*1024*1024, v.v. đối với T, P, E, Z, Y."
Câu hỏi 4. Làm thế nào để có head print filename trong đầu ra?
Nếu vì lý do nào đó, bạn muốn lệnh head cũng in tên tệp trong đầu ra. Bạn có thể thực hiện điều đó bằng cách sử dụng tùy chọn dòng lệnh -v.
Mã:
head -v [file-name]
data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22750%22%20height=%22300%22%3E%3C/svg%3E
Như bạn thấy, tên tệp 'file 1' đã được hiển thị trong đầu ra.
Câu hỏi 5. Làm thế nào để có NUL làm dấu phân cách dòng, thay vì xuống dòng?
Theo mặc định, đầu ra của lệnh head được phân cách bằng dấu xuống dòng. Nhưng cũng có một tùy chọn sử dụng NUL làm dấu phân cách. Tùy chọn -z hoặc --zero-terminated cho phép bạn thực hiện việc này.
Mã:
head -z [file-name]