Hướng dẫn sử dụng lệnh Linux time cho người mới bắt đầu (có ví dụ)

theanh

Administrator
Nhân viên
Đôi khi, khi bạn đang thực thi một chương trình, bạn có thể muốn biết mức sử dụng tài nguyên hệ thống của chương trình đó. Ví dụ như thời gian mà quy trình dành cho chế độ hạt nhân và chế độ người dùng, cùng các thông tin khác.

Rất may là có một công cụ - được gọi là thời gian - được xây dựng riêng cho mục đích này. Trong bài viết này, chúng ta sẽ thảo luận về những điều cơ bản của lệnh 'time' bằng một số ví dụ dễ hiểu.

Nhưng trước khi thực hiện, cần lưu ý rằng tất cả các ví dụ trong hướng dẫn này đều đã được thử nghiệm trên máy Ubuntu 18.04 LTS.

Lệnh time của Linux​

Lệnh time trong Linux cho phép bạn chạy các chương trình và tóm tắt mức sử dụng tài nguyên hệ thống của chúng. Sau đây là cú pháp của nó:
Mã:
time [OPTIONS] COMMAND [ARGS]
Đây là cách trang hướng dẫn của công cụ mô tả nó:
Mã:
time chạy chương trình COMMAND với bất kỳ đối số nào được đưa ra ARG.... Khi COMMAND kết thúc, time sẽ hiển thị
thông tin về các tài nguyên được COMMAND sử dụng (trên đầu ra lỗi chuẩn, theo mặc định). 

Nếu COMMAND thoát với trạng thái khác không, time sẽ hiển thị thông báo cảnh báo và trạng thái thoát.

time xác định thông tin nào sẽ hiển thị về các tài nguyên được COMMAND sử dụng từ 
chuỗi FORMAT. Nếu không có định dạng nào được chỉ định trên dòng lệnh, nhưng biến môi trường TIME 
được đặt, giá trị của biến này sẽ được sử dụng làm định dạng. Nếu không, định dạng mặc định được tích hợp vào time sẽ được sử dụng.

Các tùy chọn cho time phải xuất hiện trên dòng lệnh trước COMMAND. Bất kỳ thứ gì trên dòng lệnh sau 
COMMAND đều được truyền dưới dạng đối số cho COMMAND.
Sau đây là một số ví dụ theo kiểu Hỏi & Đáp sẽ giúp bạn hiểu rõ hơn về cách lệnh time hoạt động.

Câu hỏi 1. Làm thế nào để sử dụng lệnh time?​

Cách sử dụng cơ bản rất đơn giản - chỉ cần thực thi 'time' với lệnh/chương trình bạn muốn chạy làm đầu vào.

Ví dụ, tôi đã sử dụng lệnh time theo cách sau:
Mã:
time ping howtoforge.com
Và đây là đầu ra:
Mã:
PING howtoforge.com (104.24.0.68) 56(84) byte dữ liệu.
64 byte từ 104.24.0.68 (104.24.0.68): icmp_seq=1 ttl=59 time=93.8 ms
64 byte từ 104.24.0.68 (104.24.0.68): icmp_seq=2 ttl=59 time=91.5 ms
64 byte từ 104.24.0.68 (104.24.0.68): icmp_seq=3 ttl=59 time=93.1 ms
64 byte từ 104.24.0.68 (104.24.0.68): icmp_seq=4 ttl=59 time=102 ms
^C
--- howtoforge.com ping statistics ---
4 packet đã truyền, 4 packet đã nhận, 0% packet bị mất, thời gian 3003ms
rtt min/avg/max/mdev = 91.510/95.249/102.490/4.267 ms

[B]real 0m3.472s[/b]
[B]user 0m0.000s[/b]
[B]sys 0m0.004s[/b]
Ba lần cuối các dòng trong đầu ra được thêm vào bởi lệnh time. Trong khi 'real' biểu thị thời gian đồng hồ treo tường mà lệnh 'ping' lấy từ khi thực thi cho đến khi kết thúc, 'user' và 'sys' là thời gian 'ping' không gian người dùng và không gian hạt nhân, tương ứng. Chi tiết về ba thời gian này có thể được truy cập tại đây.

Q2. Làm thế nào để lệnh 'time' ghi đầu ra của nó vào một tệp?​

Nếu bạn muốn lệnh time ghi đầu ra của nó vào một tệp thay vì terminal, hãy sử dụng tùy chọn dòng lệnh -o, tùy chọn này mong đợi tên tệp/đường dẫn làm đầu vào.

Ví dụ:
Mã:
/usr/bin/time -o /home/himanshu/time-output.txt ping howtoforge.com
Lệnh này sẽ hiển thị đầu ra của ping trên stdout, trong khi đầu ra của lệnh 'time' sẽ được ghi vào tệp văn bản.

LƯU Ý: Chúng tôi đã sử dụng /usr/bin/time thay vì 'time' vì lệnh time tích hợp sẵn của shell không cung cấp tùy chọn -o.

Theo mặc định, mỗi khi bạn chạy lệnh này, tệp đầu ra sẽ bị ghi đè. Tuy nhiên, nếu muốn, bạn có thể đảm bảo đầu ra mới được thêm vào bằng cách sử dụng tùy chọn dòng lệnh -a.

Câu hỏi 3. Làm thế nào để time tạo ra đầu ra chi tiết?​

Bạn có thể thực hiện việc này bằng tùy chọn dòng lệnh -v. Ví dụ, khi tôi sử dụng tùy chọn này trong khi chạy 'time' với lệnh 'ping', các chi tiết sau đã được tạo ra trong đầu ra của lệnh 'time':
Mã:
Lệnh được tính thời gian: "ping howtoforge.com"
 Thời gian của người dùng (giây): 0,00
 Thời gian hệ thống (giây): 0,00
 Tỷ lệ phần trăm CPU mà công việc này nhận được: 0%
 Thời gian đã trôi qua (đồng hồ treo tường) (giờ:phút:giây hoặc phút:giây): 0:11,77
 Kích thước văn bản chia sẻ trung bình (kbyte): 0
 Kích thước dữ liệu không chia sẻ trung bình (kbyte): 0
 Kích thước ngăn xếp trung bình (kbyte): 0
 Kích thước tổng trung bình (kbyte): 0
 Kích thước bộ lưu trú tối đa (kbyte): 3064
 Kích thước bộ lưu trú trung bình (kbyte): 0
 Lỗi trang lớn (yêu cầu I/O): 0
 Lỗi trang nhỏ (lấy lại khung): 158
 Chuyển đổi ngữ cảnh tự nguyện: 14
 Chuyển đổi ngữ cảnh không tự nguyện: 0
 Hoán đổi: 0
 Đầu vào hệ thống tệp: 0
 Đầu ra hệ thống tệp: 0
 Tin nhắn socket đã gửi: 0
 Tin nhắn socket đã nhận: 0
 Tín hiệu đã gửi: 0
 Kích thước trang (byte): 4096
 Trạng thái thoát: 0
Vì vậy, bạn có thể thấy lệnh time tạo ra nhiều chi tiết khác trong chế độ này.

Câu hỏi 4. Làm thế nào để tùy chỉnh đầu ra lệnh time?​

Lệnh time cũng cung cấp tùy chọn dòng lệnh 'format' cho phép bạn tùy chỉnh đầu ra của công cụ này. Nó cung cấp một tập hợp các chỉ định tài nguyên mà bạn có thể sử dụng để tìm nạp bất kỳ loại thông tin nào được lệnh 'time' hỗ trợ (xem phần trước).

Ví dụ, lệnh time trong lệnh thực thi sau:
Mã:
/usr/bin/time -f "\t%C [Command details],\t%K [Total memory usage],\t%k [Number of signals process received]" ping howtoforge.com
tạo ra đầu ra này:
Mã:
ping howtoforge.com [Command details], 0 [Total memory usage], 0 [Number of signals process received]
Trang hướng dẫn lệnh time chứa các chi tiết liên quan đến tùy chọn dòng lệnh format.

Kết luận​

Lệnh time chủ yếu được các nhà phát triển và thử nghiệm phần mềm sử dụng. Tuy nhiên, không có hại gì khi biết lệnh này ngay cả khi bạn không phải là một trong số họ, vì bạn không bao giờ biết khi nào mình có thể cần đến nó. Bạn có thể tìm hiểu thêm thông tin về lệnh này thông qua trang hướng dẫn của công cụ.
 
Back
Bên trên