1. Giới thiệu về lệnh pv
Lệnh pv
(Pipe Viewer) là một công cụ dòng lệnh trong Linux giúp theo dõi dữ liệu khi truyền qua pipe. Nó cung cấp hiển thị trực quan về tiến trình, giúp người dùng dễ dàng theo dõi trạng thái của các tác vụ truyền dữ liệu kéo dài.
Lệnh pv
đặc biệt hữu ích khi giám sát dữ liệu được gửi qua pipeline, cung cấp thông tin thời gian thực về tốc độ truyền dữ liệu, thời gian đã trôi qua, tổng lượng dữ liệu đã truyền, và thời gian dự kiến hoàn thành.
2. Các tính năng chính của lệnh pv
Lệnh pv
cung cấp các thông tin sau trong quá trình truyền dữ liệu:
✅ Thời gian đã trôi qua – Hiển thị tổng thời gian kể từ khi quá trình bắt đầu.
✅ Tiến độ hoàn thành – Hiển thị thanh tiến trình theo phần trăm.
✅ Tốc độ truyền dữ liệu – Hiển thị tốc độ dữ liệu đang được truyền (throughput).
✅ Tổng dữ liệu đã truyền – Hiển thị số lượng dữ liệu đã được truyền đi.
✅ Thời gian dự kiến hoàn thành (ETA) – Tính toán thời gian còn lại dựa trên tốc độ truyền dữ liệu hiện tại.
3. Cài đặt lệnh pv
trên Linux
Lệnh pv
có sẵn trong hầu hết các bản phân phối Linux và có thể cài đặt bằng trình quản lý gói của hệ thống.
🔹 Trên Debian/Ubuntu:
sudo apt-get install pv
🔹 Trên RedHat/CentOS:
sudo yum install pv
4. Cách sử dụng lệnh pv
Lệnh pv
thường được dùng để theo dõi quá trình truyền dữ liệu giữa hai tiến trình thông qua pipe (|
).
📌 Cú pháp chung:
pv fileName
pv OPTIONS fileName
pv fileName > outputFileName
pv OPTIONS | command > outputFileName
command1 | pv | command2
Lệnh pv
nhận dữ liệu từ stdin (dữ liệu đầu vào tiêu chuẩn) và chuyển nó sang stdout (dữ liệu đầu ra tiêu chuẩn), đồng thời hiển thị tiến trình lên stderr (lỗi tiêu chuẩn).
5. Các tùy chọn chính của lệnh pv
5.1. Tùy chọn hiển thị tiến trình
-p
,--progress
→ Hiển thị thanh tiến trình.-t
,--timer
→ Hiển thị thời gian đã trôi qua.-e
,--eta
→ Hiển thị thời gian dự kiến hoàn thành.-r
,--rate
→ Hiển thị tốc độ truyền dữ liệu hiện tại.-b
,--bytes
→ Hiển thị tổng dữ liệu đã truyền.-n
,--numeric
→ Hiển thị phần trăm dưới dạng số nguyên thay vì thanh tiến trình.-q
,--quiet
→ Ẩn tất cả thông tin hiển thị.
5. 2. Tùy chọn điều chỉnh đầu ra
-W
,--wait
→ Đợi đến khi dữ liệu đầu tiên được truyền mới hiển thị tiến trình.-i SECONDS
,--interval SECONDS
→ Cập nhật tiến trình sau mỗi SECONDS giây.-F
,--force
→ Hiển thị thông tin tiến trình ngay cả khi stderr không phải là terminal.-s SIZE
,--size SIZE
→ Giả định tổng dữ liệu cần truyền là SIZE byte (để tính phần trăm và ETA).-L
,--line-mode
→ Thanh tiến trình sẽ cập nhật theo số dòng thay vì kích thước dữ liệu.
5.3. Tùy chọn giới hạn tốc độ dữ liệu
-L RATE
,--rate-limit RATE
→ Giới hạn tốc độ truyền dữ liệu ở mức tối đa RATE byte/giây.-B BYTES
,--buffer-size BYTES
→ Thiết lập kích thước bộ đệm.
6. Ví dụ sử dụng lệnh pv
trong Linux
6.1. Hiển thị tiến trình khi sao chép file
Chúng ta có thể sử dụng pv
để theo dõi quá trình sao chép file:
pv history.log > $HOME/Documents/history.log
📌 Giải thích: Hiển thị tiến trình khi sao chép file history.log
vào thư mục Documents
.
6.2. Hiển thị tiến trình khi tạo file nén ZIP
Nếu muốn nén một file và theo dõi tiến trình, sử dụng:
pv history.log | zip > $HOME/Documents/history.zip
📌 Giải thích: Nén file history.log
và theo dõi tiến trình nén.
6.3. Đếm số dòng, từ, byte trong file
Dùng pv
kết hợp với wc
để đếm số dòng, số từ và số byte:
pv -p history.log | wc
📌 Giải thích: pv
hiển thị tiến trình trong khi wc
đếm số dòng, từ và byte.
6.4. Theo dõi tiến trình nén thư mục bằng tar
Khi nén thư mục bằng tar
, ta có thể dùng pv
để hiển thị tiến trình:
tar -czf - ./Documents/ | (pv -p --timer --rate --bytes > backup.tgz)
📌 Giải thích:
tar -czf - ./Documents/
→ Nén thư mụcDocuments
.pv -p --timer --rate --bytes > backup.tgz
→ Theo dõi tiến trình và lưu vào filebackup.tgz
.
7. Kết luận
Lệnh pv
là một công cụ hữu ích để theo dõi quá trình truyền dữ liệu trong Linux. Nó cung cấp thông tin trực quan theo thời gian thực về tốc độ, tiến trình và thời gian dự kiến hoàn thành.
Việc sử dụng pv
giúp quản trị viên hệ thống dễ dàng giám sát và quản lý các tác vụ xử lý dữ liệu lớn mà không cần phải chờ đợi trong vô định. Nếu bạn thường xuyên làm việc với pipe và luồng dữ liệu, pv
chắc chắn là một công cụ không thể thiếu! 🚀
Tham khảo 🔗 https://www.geeksforgeeks.org/pv-command-in-linux-with-examples/