Đô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.
Đây là cách trang hướng dẫn của công cụ mô tả nó:
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.
Ví dụ, tôi đã sử dụng lệnh time theo cách sau:
Và đây là đầu ra:
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.
Ví dụ:
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.
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.
Ví dụ, lệnh time trong lệnh thực thi sau:
tạo ra đầu ra này:
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.
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]
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.
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
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]
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Ư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
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
Mã:
ping howtoforge.com [Command details], 0 [Total memory usage], 0 [Number of signals process received]