Cách theo dõi tiến trình của các lệnh Linux bằng tiện ích PV và Progress

theanh

Administrator
Nhân viên
Hãy xem xét một tình huống mà bạn vừa bắt đầu sao chép một tệp rất lớn từ ổ đĩa bút vào hệ thống Linux của mình thông qua dòng lệnh. Vì tệp đó nặng, bạn biết quá trình này sẽ mất thời gian, vì vậy bạn bắt đầu làm một số công việc khác.

Sau một lúc, bạn quay lại, chỉ để thấy lệnh vẫn đang chạy. Bạn quyết định cho hoạt động sao chép đang diễn ra thêm một chút thời gian. Sau một lúc, khi bạn xem lại, bạn thấy không có gì thay đổi, nghĩa là quá trình sao chép vẫn chưa kết thúc và lệnh cũng không báo lỗi.

Bạn đã từng gặp phải tình huống như vậy chưa? Nếu có, bạn đã làm gì? Thành thật mà nói, không có nhiều việc bạn có thể làm trong những trường hợp như vậy, đặc biệt là nếu bạn đang làm việc trên một hệ thống Linux không có giao diện người dùng - hầu hết thời gian, chúng ta hoặc là đợi, hoặc chỉ cần hủy thao tác đang diễn ra bằng Ctrl+C rồi bắt đầu lại.

Sẽ tốt hơn nếu chúng ta có thể thấy thanh tiến trình (hoặc thứ gì đó tương tự) trong những tình huống như thế này, giống như khi chúng ta cố gắng sao chép một tệp thông qua GUI? Chắc chắn, một thanh tiến trình cho các thao tác dòng lệnh sẽ rất hữu ích. Nếu bạn đang tìm kiếm một giải pháp như vậy, thì không cần tìm đâu xa vì trong bài viết này, chúng ta sẽ thảo luận về hai tiện ích dòng lệnh, PV và Progress, sẽ giúp cuộc sống của bạn trên dòng lệnh trở nên dễ dàng hơn.

Xin lưu ý rằng tất cả các lệnh và hướng dẫn mà chúng tôi đã đề cập trong hướng dẫn này đã được thử nghiệm trên Ubuntu 14.04.


Lệnh PV Linux​

Theo tài liệu chính thức, lệnh pv giám sát luồng dữ liệu qua một đường ống. Lệnh này hiển thị thông tin sau về một hoạt động đang diễn ra: thời gian đã trôi qua, phần trăm hoàn thành (có thanh tiến trình), tốc độ thông lượng hiện tại, tổng dữ liệu đã truyền và ETA.

"Để sử dụng, hãy chèn lệnh này vào đường ống giữa hai quy trình, với các tùy chọn phù hợp", trang hướng dẫn giải thích. "Đầu vào chuẩn của lệnh sẽ được truyền đến đầu ra chuẩn và tiến trình sẽ được hiển thị khi có lỗi chuẩn".

Bây giờ, chúng ta hãy tìm hiểu cách sử dụng lệnh pv thông qua một ví dụ. Nhưng trước đó, hãy đảm bảo rằng tiện ích này có trên hệ thống của bạn. Nếu không, bạn có thể dễ dàng tải xuống và cài đặt nó trên các hệ thống chạy Debian (như Ubuntu) bằng lệnh sau:
Mã:
sudo apt-get install pv
Bây giờ, đến với ví dụ. Ảnh chụp màn hình sau đây cho thấy lệnh pv đang hoạt động khi tôi đang sao chép hình ảnh được lưu trong một thư mục trong ổ đĩa USB của mình vào màn hình nền của hệ thống:



Như bạn có thể thấy, lệnh pv hiển thị thanh tiến trình cũng như các thông tin hữu ích khác. Đây là hành vi mặc định của lệnh. Tuy nhiên, nếu bạn muốn giới hạn đầu ra, bạn có thể thực hiện bằng cách sử dụng các công tắc hiển thị. Ví dụ, lệnh sau sẽ chỉ hiển thị thanh tiến trình và không hiển thị gì khác.
Mã:
pv -p /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz
Đó là vì chúng ta đã sử dụng công tắc hiển thị -p, công tắc này yêu cầu pv chỉ bật thanh tiến trình. Để biết danh sách đầy đủ các công tắc hiển thị, hãy truy cập trang hướng dẫn của lệnh.

Sau đó, có một số trình sửa đổi đầu ra. Ví dụ, sử dụng tùy chọn -W hoặc --wait với lệnh sẽ yêu cầu lệnh đợi cho đến khi byte đầu tiên được truyền trước khi hiển thị bất kỳ thông tin tiến trình nào hoặc tính toán bất kỳ ETA nào. Điều này đặc biệt hữu ích trong trường hợp chương trình bạn đang chuyển đến hoặc đi yêu cầu thông tin bổ sung trước khi bắt đầu.

Và cuối cùng, lệnh pv cũng cung cấp một số trình sửa đổi truyền dữ liệu. Ví dụ, nếu muốn, bạn có thể giới hạn việc truyền ở một số byte cụ thể trên giây. Nếu xem ảnh chụp màn hình được đưa vào trước đó trong hướng dẫn, tốc độ truyền dữ liệu là hơn 18MBps. Bây giờ, giả sử bạn muốn giới hạn ở mức 5MBps, vì vậy bạn sẽ chạy lệnh sau:
Mã:
pv -L 5m /media/himanshu/1AC2-A8E3/Maldives-2016/* | gzip > ./Desktop/trip-pictures.gz
Tùy chọn -L theo sau là giá trị '5m' thực hiện thủ thuật này. Xem lệnh trên đang hoạt động trong ảnh chụp màn hình sau:



"Có thể thêm hậu tố 'k', 'm', 'g' hoặc 't' để biểu thị kilobyte (*1024), megabyte, v.v.", trang hướng dẫn giải thích. Thông tin chi tiết về đầu ra cũng như các trình sửa đổi truyền dữ liệu cũng có sẵn trên trang hướng dẫn của lệnh.


Lệnh Linux Progress​

Progress(trước đây gọi là cv) là một tiện ích dòng lệnh cung cấp tiến trình cho các hoạt động đang diễn ra liên quan đến các lệnh cơ bản của coreutils, chẳng hạn như cp, mv, dd, tar, gzip/gunzip, cat, v.v. "Nó cũng có thể hiển thị thời gian ước tínhthông lượng, và cung cấp chế độ 'giống như trên cùng' (giám sát)", tài liệu chính thức cho biết.

Trước khi cài đặt Progress, trước tiên bạn phải đảm bảo rằng thư viện 'ncurses' có trên hệ thống của bạn vì lệnh phụ thuộc vào thư viện này. Nếu không, người dùng Debian/Ubuntu có thể tải xuống và cài đặt gói ncurses bằng lệnh sau:
Mã:
sudo apt-get install libncurses5-dev
Sau đó tải xuống gói lệnh Progress từ kho GitHub của nó bằng lệnh sau:
Mã:
git clone https://github.com/[I]Xfennec[/I]/[I]progress.git[/I]
Sau đó, hãy vào thư mục 'progress' và chạy các lệnh sau:
Mã:
make
Mã:
sudo make install
Vậy là xong. Lệnh Progress sẽ được cài đặt trên hộp Linux của bạn. Ảnh chụp màn hình sau (lấy từ trang GitHub của dự án) cho thấy lệnh đang hoạt động:



Như bạn thấy, lệnh Progress cung cấp cho bạn thông tin về tất cả các hoạt động đang diễn ra liên quan đến lệnh coreutil. Giống như bất kỳ công cụ dòng lệnh Linux nào khác, Progress cũng cung cấp một số tùy chọn dòng lệnh. Sau đây là danh sách các tùy chọn có thể hữu ích với bạn:
  • -m (--monitor) : lặp trong khi các tiến trình được giám sát vẫn đang chạy
  • -M (--monitor-continuously) : giống như lệnh monitor nhưng không bao giờ dừng (tương tự như lệnh watch progress )
  • -c (--command cmd) : chỉ giám sát tên lệnh này (ví dụ: firefox). Tùy chọn này có thể được sử dụng nhiều lần trên dòng lệnh.
  • -p (--pid id) : chỉ giám sát ID quy trình số này (ví dụ: `pidof firefox`). Tùy chọn này có thể được sử dụng nhiều lần trên dòng lệnh.
  • -i (--ignore-file file) : không báo cáo quy trình cho 'file'. Nếu tệp chưa tồn tại, bạn phải cung cấp đường dẫn tuyệt đối đầy đủ và sạch. Tùy chọn này có thể được sử dụng nhiều lần trên dòng lệnh.

Kết luận​

Mặc dù công cụ Progress bị giới hạn ở các lệnh coreutils, nhưng nhìn chung có thể sử dụng PV để giám sát mọi hoạt động dòng lệnh. Thêm vào đó, PV cũng dễ tải xuống và cài đặt. Nhưng trước khi bạn kết luận rằng PV tốt hơn Progress, hãy nhớ rằng không giống như PV, với Progress, bạn không phải sửa đổi lệnh mà bạn muốn giám sát. Vì vậy, tùy chọn nào trong hai tùy chọn này phụ thuộc vào yêu cầu của bạn.
 
Back
Bên trên