Lệnh progress là một tiện ích dòng lệnh trên Linux dùng để hiển thị phần trăm, tốc độ và thời gian ước tính khi các lệnh như cp, mv, dd, tar, gzip,… đang xử lý dữ liệu. Trong bài viết này, mình sẽ hướng dẫn bạn cách dùng progress Linux để giám sát các lệnh cp, mv, dd, tar,… trong thời gian thực nhanh chóng, chính xác.
Những điểm chính
- Quan điểm của mình: Lệnh progress không chỉ là một tiện ích hiển thị tiến trình đơn thuần, mà là một trợ thủ đắc lực giúp các quản trị viên hệ thống chủ động kiểm soát tài nguyên, hạn chế tối đa rủi ro gián đoạn dịch vụ hoặc hỏng hóc dữ liệu khi thao tác với file lớn.
- Định nghĩa lệnh progress Linux: Hiểu rõ
progresslà công cụ dòng lệnh dùng để hiển thị phần trăm hoàn thành, tốc độ và thời gian ước tính cho các lệnh xử lý dữ liệu lớn. - Các trường hợp nên sử dụng: Nắm được các tình huống thực tế cần dùng
progressnhư sao chép file lớn, nén/giải nén hoặc giám sát lệnhdd. - Cách cài đặt: Biết cách cài đặt
progressnhanh chóng trên các bản phân phối Linux phổ biến và cả phương pháp cài đặt từ mã nguồn. - Bảng tùy chọn phổ biến: Có được một bảng tra cứu nhanh các tùy chọn quan trọng, giúp bạn tùy chỉnh việc giám sát theo nhu-cầu.
- Hướng dẫn sử dụng: Thành thạo các lệnh cơ bản để hiển thị tiến trình, xem tốc độ và thời gian ước tính.
- Cách theo dõi tiến trình cụ thể: Nắm vững các phương pháp để giám sát các lệnh cụ thể như
cp,mv,tarvà cách theo dõi từ một cửa sổ terminal khác. - Lưu ý khi sử dụng: Nắm được các lưu ý quan trọng để sử dụng
progressmột cách an toàn và hiệu quả, từ vấn đề quyền hạn đến độ chính xác của các chỉ số. - Giải đáp thắc mắc (FAQ): Có được câu trả lời cho các vấn đề thực tế như tại sao không thấy tiến trình, khi nào nên dùng các tùy chọn
-c/-avà cách tích hợpprogressvào hệ thống giám sát.
Lệnh progress Linux là gì?
progress Linux (trước đây là cv – Coreutils Viewer) là công cụ dòng lệnh nhẹ, mã nguồn mở, có chức năng quét và hiển thị phần trăm hoàn thành khi hệ thống đang chạy các lệnh xử lý dữ liệu lâu như cp, mv, dd, tar, gzip, cat, grep. Công cụ này giúp bạn theo dõi trực quan quá trình thực thi, cho biết đã xử lý bao nhiêu dữ liệu, tốc độ hiện tại, thời gian đã trôi qua và thời gian ước tính để hoàn thành.

Về cơ chế hoạt động, progress sẽ liên tục quét thư mục /proc để tìm kiếm các lệnh đang được thực thi. Sau đó, lệnh sẽ tìm kiếm trong các thư mục fd và fdinfo để xác định các file đang được mở và vị trí của con trỏ đọc/ghi. Nhờ cơ chế này, công cụ hiển thị dữ liệu chính xác và tiêu tốn rất ít tài nguyên. Công cụ này cũng hỗ trợ chế độ giám sát liên tục tương tự như lệnh quen thuộc trên Linux.top
Các trường hợp nên sử dụng lệnh progress
Công cụ progress đặc biệt hữu ích trong các tình huống quản trị hệ thống hàng ngày:
- Sao chép hoặc di chuyển dữ liệu lớn: Mặc định, lệnh
cphaymvkhi xử lý file sẽ chỉ nhấp nháy con trỏ chuột, do đó việc sử dụngprogresssẽ giúp bạn biết chính xác đã tiến trình đã sao chép được bao nhiêu %, tốc độ bao nhiêu MB/s và còn bao lâu nữa thì xong. - Thao tác với ổ đĩa bằng lệnh dd: Lệnh progress sẽ hữu ích khi bạn thao tác với ổ đĩa bằng lệnh dd, giúp giám sát xem việc ghi đĩa có đang diễn ra bình thường không, từ đó hạn chế việc rút USB ra sớm làm hỏng dữ liệu.
- Nén hoặc giải nén file: Các tác vụ backup hoặc giải nén mã nguồn lớn thường tốn nhiều thời gian, khi đó lệnh progress giúp bạn giám sát quá trình này mà không cần phải dùng các lệnh phức tạp như
pv. - Khi quên bật chế độ hiển thị chi tiết: Nếu bạn gõ
cpfile_khung /dich mà quên không thêm tham số-vđể xem, bạn không cần hủy lệnh đi làm lại. Khi đó bạn chỉ cần mở một terminal khác và gõprogressđể xem ngay lập tức.

Cách cài đặt progress trên Linux
Dưới đây là cách cài đặt progress chi tiết cho từng hệ điều hành:
Trên Debian/Ubuntu/Mint:
Người dùng cần cài đặt thư viện libncurses5-dev trước khi cài progress
sudo apt install libncurses5-dev
sudo apt install progressTrên RHEL/CentOS/Fedora/Rocky/AlmaLinux:
sudo yum install ncurses-devel
sudo yum install progressMẹo từ chuyên gia: Đối với các phiên bản AlmaLinux/Rocky Linux 8 hoặc 9 mới nhất, bạn nên sử dụng trình quản lý gói dnf thay cho yum (sudo dnf install progress) để tốc độ tải và giải quyết dependencies diễn ra nhanh hơn.
Trên Arch Linux:
sudo pacman -S ncurses-devel
sudo pacman -S progressCài đặt từ mã nguồn cho các distro khác:
Nếu hệ điều hành của bạn không có sẵn gói cài đặt, bạn có thể tự biên dịch từ mã nguồn gốc trên GitHub. Bạn cần đảm bảo hệ thống đã cài đặt thư viện ncurses (ví dụ: ncurses-devel hoặc libncursesw6).
git clone https://github.com/Xfennec/progress.git
cd progress
make
sudo make installKết quả hiện thị sau khi chạy lệnh cài đặt như sau:

Lỗi thường gặp: Khi chạy lệnh make, hệ thống thường báo lỗi thiếu thư viện ncurses. Để khắc phục, bạn cần đảm bảo hệ thống đã cài đặt gói ncurses-devel (trên họ RedHat) hoặc libncursesw6 (trên họ Debian) trước khi biên dịch.
Các tùy chọn phổ biến của lệnh progress
| Tùy chọn | Ý nghĩa |
|---|---|
-q hoặc --quiet | Tắt tất cả các thông báo. |
-d hoặc --debug | Hiển thị cảnh báo/lỗi nếu có. |
-w hoặc --wait | Hiển thị tốc độ I/O và thời gian còn lại. |
-W <giây> hoặc --wait-delay <giây> | Đợi số giây trước khi ước lượng tốc độ I/O. |
-m hoặc --monitor | Lặp lại liên tục đến khi tất cả các tiến trình cần theo dõi kết thúc. |
-M hoặc --monitor-continuously | Theo dõi không dừng lại, tương đương watch progress. |
-c <lệnh> hoặc --command <lệnh> | Chỉ theo dõi một lệnh cụ thể và có thể dùng nhiều lần. |
-a <lệnh> hoặc --additional-command <lệnh> | Thêm một lệnh tùy chỉnh vào danh sách các lệnh mặc định để theo dõi. |
-p <PID> | Theo dõi một tiến trình có PID cụ thể. |
Hướng dẫn sử dụng lệnh progress trong Linux
Hiển thị tất cả tiến trình Coreutils đang chạy
Để kiểm tra xem hệ thống có lệnh xử lý dữ liệu nào đang chạy, bạn gõ lệnh:
progressKết quả hiển thị các lệnh đang chạy như sau:

Lưu ý
Nếu không có lệnh nào trong danh sách hỗ trợ đang hoạt động, màn hình sẽ không hiển thị kết quả.
2. Hiển thị tốc độ và thời gian ước tính (ETA)
Để xem chi tiết tốc độ xử lý I/O và thời gian còn lại, bạn thêm tùy chọn -w:
progress -wKết quả sẽ hiển thị chi tiết tốc độ và thời gian ước tính hoàn thành như sau:

Cách theo dõi tiến trình cụ thể bằng lệnh progress
Theo dõi tiến trình sao chép file
Để sao chép file và hiển thị phần trăm ngay lập tức, bạn thực thi lệnh cp dưới dạng chạy nền và gọi progress:
cp bigfile.img ./vietnix & progress -mp $!Kết quả hiển thị lệnh như sau:

Theo dõi tiến trình di chuyển file
Lệnh sau đây sẽ giúp bạn chuyển file ISO sang thư mục đích, đồng thời hiện thanh tiến độ theo dõi quá trình di chuyển bằng progress:
mv file.iso /destination/path/ & progress -mp $!Sau khi chạy lệnh, màn hình sẽ hiển thị kết quả như sau:

progress -mp $!Giải thích cú pháp:
- $!: Biến đặc biệt trong Bash có nhiệm vụ trả về PID của tiến trình chạy gần nhất ở chế độ nền (dùng với &).
- progress: Công cụ dùng để theo dõi tiến trình của các lệnh như cp, mv, dd, tar,… đang chạy.
- -p <PID>: Tùy chọn Process ID chỉ định rõ PID của tiến trình mà bạn muốn theo dõi.
- -m: Tùy chọn monitor giúp bật chế độ theo dõi lặp lại đến khi tiến trình được theo dõi kết thúc.
Theo dõi tiến trình nén với tar
Để nén thư mục files/ thành file archive.tar.gz bằng tar, đồng thời dùng progress để theo dõi tiến độ, bạn thực thi lệnh sau:
tar czf archive.tar.gz files/ | progress -m $!Kết quả thực thi lệnh như sau:

Mẹo từ chuyên gia: Khi thao tác với tar, dung lượng đích của file nén thường không xác định trước được (do quá trình gzip thu nhỏ dung lượng liên tục). Do đó, thanh phần trăm % có thể không hiển thị đầy đủ đến 100%, nhưng bạn vẫn có thể theo dõi được lượng file đang được nén và tốc độ xử lý.
4. Giám sát nhiều tiến trình từ một cửa sổ khác
Nếu bạn đang chạy một lệnh lâu dài ở Terminal 1 và muốn kiểm tra tiến độ ở Terminal 2, hãy thực hiện theo các bước sau:
Bước 1: Đầu tiên, bạn mở Terminal 1 và chạy lệnh tạo file giả lập:
dd if=/dev/zero of=~/bigfile.img bs=1M count=5120Lệnh này tạo file bigfile.img dung lượng khoảng 5GB
Bước 2: Sau đó, bạn mở Terminal 2 và chạy lệnh giám sát:
watch progress -qLệnh watch sẽ chạy lại progress sau mỗi 2 giây để cập nhật trạng thái.

Mở trang tài liệu hướng dẫn của progress
Để mở trang manual (tài liệu hướng dẫn) của lệnh progress, bạn thực thi lệnh sau:
man progressKết quả sẽ hiển thị các tùy chọn và các trường hợp cần sử dụng chi tiết:

Những lưu ý khi sử dụng lệnh progress
Dưới đây là những lưu ý mà bạn cần biết để sử dụng công cụ một cách hiệu quả:
- Vấn đề về quyền hạn: Mặc định, progress chỉ nhìn thấy các tiến trình do user hiện tại khởi chạy. Để giám sát các tiến trình của hệ thống hoặc của người dùng khác, bạn bắt buộc phải chạy lệnh với quyền quản trị
sudo progress. - Độ chính xác mang tính ước tính: Các chỉ số hiển thị như % hoàn thành, thời gian ETA,… được tính toán dựa trên kích thước file và vị trí con trỏ đọc/ghi hiện tại. Do đó, con số này chỉ mang tính tham khảo tương đối, đặc biệt khi tốc độ I/O của ổ đĩa không ổn định.
- Xử lý với file thay đổi kích thước: Nếu bạn đang copy một file mà file đó vẫn đang được ghi thêm dữ liệu, progress có thể hiển thị phần trăm bị sai lệch hoặc nhảy lùi do tổng dung lượng đích thay đổi liên tục.
- Giới hạn danh sách lệnh hỗ trợ: progress mặc định chỉ nhận diện các lệnh trong bộ Coreutils như cp, mv, dd, tar,… Nếu bạn muốn theo dõi một công cụ lạ hoặc lệnh tùy chỉnh, bạn cần sử dụng tùy chọn
-choặc-ađể khai báo thủ công để công cụ hiểu và hiển thị được.

Câu hỏi thường gặp
Vì sao chạy progress mà không thấy tiến trình nào, dù đang cp file rất lớn?
Nguyên nhân thường gặp là:
– Lệnh bạn đang chạy không thuộc nhóm coreutils mà progress nhận diện.
– Tiến trình chạy dưới user khác hoặc dưới quyền root trong khi bạn chỉ chạy progress với user thường, khiến không đọc được thông tin từ /proc của tiến trình đó.
Khi nào nên dùng tùy chọn -c và -a thay vì để progress tự phát hiện?
Tùy chọn -c phù hợp khi bạn chỉ quan tâm đến một hoặc vài lệnh cụ thể. Trong khi đó, tùy chọn -a hữu ích khi bạn dùng một tool không nằm trong danh sách mặc định như rsync, httpd hay tool backup riêng và muốn bổ sung vào bộ lệnh mà progress sẽ theo dõi.
Có thể kết hợp progress với script hoặc hệ thống giám sát như thế nào?
Bạn có thể dùng progress -q hoặc progress -m -q kèm grep, awk để trích xuất một số trường cần thiết rồi đẩy vào log hoặc Prometheus exporter. Ngoài ra, hãy kết hợp với watch hoặc systemd service để luôn có một dashboard CLI nhỏ hiển thị các tiến trình I/O quan trọng trên server.
progress Linux là công cụ dòng lệnh hữu ích giúp bạn theo dõi tiến trình các lệnh cp, mv, dd, tar, gzip,… chi tiết và chính xác trong thời gian thực với phần trăm, tốc độ và ETA rõ ràng. Nhờ khả năng quét /proc và giám sát nhiều tiến trình cùng lúc, bạn có thể chủ động kiểm soát các tác vụ sao chép, nén, ghi đĩa lớn mà không cần sửa lại lệnh đang chạy, từ đó làm việc an toàn hơn, hạn chế lỗi và tối ưu thời gian chờ trên hệ thống Linux của mình.




