본문 바로가기

command

[linux/command] pv - Pipe Viewer

개요

 

terminal-based tool for monitoring the progress of the through a pipeline. (from Official Description)

 

진행률 표시기를 지원하지 않는 대부분의 명령어에 파이프 및 리다이렉션 문법으로 진행률 표시 및 모니터링이 가능한 터미널 기반 툴입니다.

 

기존 cp 명령어에서 아쉬웠던 거의 대부분의 기능이 포함되어 있으므로 대용량 복사 또는 각종 파일 시스템 및 전송 프로토콜의 대역폭 측정에 도움이 됩니다.

 

  • 전송률 표시 (숫자 및 바 형태 모두 지원)
  • 전송 진행 시간 표시
  • 예상 완료 시간(ETA) 표시
  • 현재 전송 속도 표시
  • 평균 전송 속도 표시

 

이외 옵션이나 파이프 활용이 다양하기 때문에 (dialog로 표시 등) 매우 유용한 툴입니다.

 


설치 방법

 

많이 사용되는 대부분의 Unix 및 Linux 배포판에서 설치할 수 있습니다.

 

  • CentOS 및 RHEL - 개발자의 레포지토리나 RepoForge를 통해 yum으로 설치할 수 있습니다. 자세한 정보는 아래 링크를 확인하세요.
  • Fedora - yum으로 pv 패키지를 설치하시면 됩니다. (yum install pv)
  • Debian 및 Ubuntu - apt로 설치할 수 있습니다. (apt install pv 또는 apt-get install pv / 개인적으로 apt 사용을 권장)
  • Raspberry Pi OS(Raspbian) - 데비안과 마찬가지로 apt를 통한 설치가 가능합니다 (apt install pv)
  • macOS - MacPorts 또는 HomeBrew를 통해 설치할 수 있습니다. 패키지 명은 pv입니다. (port install pv 또는 brew install pv)

그외 OS(Slackware, Cygwin, BSD, Solaris, AIX, Spack 등)에서 설치하고자 하신다면

공식 페이지 www.ivarch.com/programs/pv.shtml의 Packages and ports를 확인하시기 바랍니다.

 


사용 방법

 

간단한 사용 방법은 다음과 같습니다.

 

 

  • test.log를 test_dir 디렉토리 내에 test.log 라는 이름으로 복사할 경우
pv /test.log > /test_dir/test.log

 

 

 

  • 결과
mark@machine ~ % pv /test.log > /test_dir/test.log
2.82MiB 0:00:00 [ 645MiB/s] [================================>] 100%

기본적으로 pv 명령어 사용시 어떠한 표시 스위치도 별도 명시되지 않는 경우

 

  • -p (진행률 바)
  • -t (진행 시간)
  • -e (남은 시간)
  • -r (전송 속도)
  • -b (전체 파일 크기)

스위치가 자동 적용되며, 아래의 Output Modifiers도 많이 사용됩니다.

 

  • -W, --wait
    • 진행률 표시 및 ETA(남은 시간) 계산 전 첫 번째 바이트가 전송될 때까지 기다립니다. 데이터 처리 전 암호 입력이 필요한 gpg나 mcrypt로 데이터를 파이핑하는 것처럼, 진행되기 전 추가 정보를 요구하는 경우 유용하다고 하네요.
  • -D, --delay-start SEC
    • 진행 정보를 표시하기 전 지정된 시간SEC 동안 대기합니다. 예를 들어 전송하는데 시간이 오래 걸리는 경우에만 진행률이 표시되도록 하는 스크립트를 짤 경우 유용하며 0.5와 같이 소수로 지정할 수도 있습니다.
  • -l, --line-mode
    • 총 바이트 크기 대비 전송 바이트를 계산하여 진행률을 표시하는 대신, 라인(개행 문자)을 기준으로 계산합니다.
    • 진행률 표시 바는 새 라인(개행)이 발견될 때만 이동하며, -s 옵션으로 전달된 값은 총 라인 수로 해석하게 됩니다.
    • 이 옵션을 사용하면 모든 파일을 두 번(전체 라인 수를 읽기 위한 것과 전송하기 위해 읽는 것) 읽을 필요가 없도록 파일 크기가 자동 계산되지 않습니다. 

 

특정 스위치를 입력시 입력된 스위치만 적용되므로 기본 표시 스위치에 -a (평균 전송 속도)를 추가 표시하고자 한다면 나머지 스위치도 함께 입력해야 하는데, 개발자가 권장하는 일반적인 스위치 조합 방식은 아래와 같습니다.

 

pv -ptebar

 

위에 명시된 스위치는 진행률, 진행 시간, 남은 시간, 용량 카운터, 평균 속도, 현재 속도를 표시합니다.

 

그외에도

 

1. pv -betlap
2. pv -t
3. pv -pterb

 

1. 진행률, 진행 시간, 남은 시간, 라인 카운터, 평균 속도, 바이트 대신 라인 수를 표시합니다.

2. 오직 남은 시간만 표시합니다. 단순한 타이머로 사용하기에 유용하며 sleep 명령어에 파이프를 활용합니다. (예 : sleep 10m | pv -t)

3. 일반적인 활용 방법입니다. 진행률, 진행 시간, 남은 시간, 현재 속도, 전체 용량이 표시되며, 굳이 스위치를 붙이지 않아도 동일한 스위치가 적용됩니다.

 

 

그 외 남은 시간을 로컬 시간으로 표시, 오류 발생시 exit status를 리턴하는 등 제공 옵션이 다양하므로 man page를 참고하시기 바랍니다.

 


주의

 

> (리다이렉션)으로 대상지 또는 대상 파일을 명시하지 않으면 해당 파일의 데이터가 현재 쉘의 버퍼로 출력됩니다.

 

파일이 클 경우 BOF에 의한 문제(일시적 쉘 폰트 파일 깨짐 등)가 발생할 수 있으므로 주의하시기 바랍니다.