명령어 실행 시 진행 상황을 무작정 기다리는 대신, Linux의 pv와 progress 명령어를 사용하여 작업 과정을 시각적으로 확인해 보세요. 이러한 유틸리티는 일반적으로 진행률 표시줄이 없는 명령에 진행률을 제공하며, 완료 예상 시간까지 표시해 줍니다.
장거리 비행 중 좌석 모니터가 없는 비행기에서는 현재 비행 상황을 알기가 쉽지 않습니다. 출발 시간과 비행 시간은 알 수 있지만, 계획대로 진행되는지, 제시간에 도착할지, 아니면 지연되고 있는지는 파악하기 어렵습니다. 기내 영화를 보고 싶지 않다면, 보통 모니터를 통해 항공기 위치가 표시된 지도를 확인하거나 도착 예정 시간(ETA)과 같은 통계를 얻을 수 있습니다.
터미널 창에서 명령을 실행하는 것도 이와 유사합니다. 진행 상황을 나타내는 정보가 없어 프로세스가 제대로 진행되고 있는지, 멈췄는지, 얼마나 완료되었는지 알 수 없습니다. 깜빡이는 커서만으로는 충분한 정보를 얻기 어렵습니다.
pv와 progress 명령어는 몇 가지 통계 정보와 시각적인 피드백을 제공하여 프로세스 진행 상황을 파악하는 데 도움을 줍니다. 이를 통해 실행 중인 프로세스의 ETA를 예측할 수 있어, 단순히 커서만 바라보는 것보다 훨씬 유용합니다.
pv 설치
먼저 pv를 설치해야 합니다.
Ubuntu에 pv를 설치하려면 다음 명령어를 사용하세요.
sudo apt-get install pv
Fedora에 pv를 설치하려면 다음 명령어를 사용하세요.
sudo dnf install pv
Manjaro에 pv를 설치하려면 다음 명령어를 사용하세요.
sudo pacman -Syu pv
pv 사용법
pv는 파이프 뷰어입니다. 따라서 파이프를 통해 명령에 연결해야 합니다. 다음은 ISO 이미지를 zip으로 압축하여 압축된 zip 파일을 만드는 예시입니다.
이 문서의 예시에서는 화면 캡처를 위해 명령 속도를 늦추기 위해 일부 파일을 느린 외부 USB 드라이브(SILVERXHD)에 저장했습니다.
pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso | zip > gparted.zip
표시되는 정보는 왼쪽에서 오른쪽 순서대로 다음과 같습니다.
지금까지 전송된 데이터 양
경과된 시간
데이터 전송 속도 (처리량)
진행률 표시줄 및 완료 비율
완료 예상 시간 (ETA)
pv를 이용한 파일 복사
pv의 출력을 사용하여 파일을 복사하려면 다음 명령어를 사용하세요.
pv /media/dave/SILVERXHD/gparted-live-1.0.0-1-amd64.iso > gparted.iso
파일 복사 과정에서 진행 상황을 실시간으로 확인할 수 있습니다.
pv를 이용한 다중 파일 복사
pv를 사용하여 여러 파일과 폴더를 복사하려면 약간의 트릭이 필요합니다. tar 명령어를 사용하여 파일을 전송합니다.
tar -c help-files/ | pv | tar -x -C Documents/
위 명령어에서 ‘tar -c help-files/’ 부분은 tar가 help-files 폴더의 파일 아카이브를 생성하도록 지시합니다. 이 아카이브는 pv를 통해 파이프되어 진행률이 표시됩니다. 그런 다음 tar로 다시 파이프됩니다. 아카이브는 추출(-x)되고 추출 전 디렉토리는 Documents로 변경(-C)됩니다.
결과적으로, help-files 폴더의 파일과 폴더들이 진행률 표시와 함께 Documents 폴더로 복사됩니다.
이번에는 출력이 약간 다릅니다.
ETA는 표시되지 않습니다. 대신 진행률 표시줄이 움직이는 표시기로 나타납니다. 프로세스가 활성화되었음을 나타내지만, 일반적인 진행률 표시줄처럼 왼쪽에서 오른쪽으로 확장되지는 않습니다. pv는 파이프된 프로세스에서 추출할 수 있는 정보에 따라 제한됩니다.
pv와 tar를 이용한 아카이브 생성
pv와 tar를 사용하여 파일을 복사하더라도 실제 아카이브 파일은 생성되지 않습니다. tar에 의해 “가상” 아카이브가 생성되어, 파일 추출을 위해 tar로 다시 공급됩니다. 파일 복사가 목적이라면 이 방법으로 충분합니다. 하지만 아카이브 파일을 만들고 싶다면 어떻게 해야 할까요?
tar를 사용하여 아카이브 파일을 만들고, pv를 통해 진행 보고서를 받을 수 있습니다. tar 명령어에 사용되는 옵션은 다음과 같습니다. -c(아카이브 생성), -z(gzip으로 압축), -f(아카이브 파일 이름).
tar가 사용하는 파일 이름으로 ‘-’를 지정하면 표준 출력을 사용하겠다는 의미이며, 결과는 터미널 창에 출력됩니다. 이 출력이 pv를 통해 파이프되므로 사용자는 해당 출력을 볼 수 없습니다.
아카이브의 실제 이름은 pv의 출력을 파이핑하는 파일 이름이 됩니다. 이 예시에서는 ‘help-files.tgz’입니다.
tar -czf - ./help-files/ | pv > help-files.tgz
pv 디스플레이 옵션
pv 명령어와 함께 다양한 옵션을 사용하여 보고서 세부 정보를 변경할 수 있습니다.
이러한 옵션 중 하나를 사용하면 다른 모든 옵션이 비활성화됩니다. 따라서 여러 옵션을 사용하려면 필요한 옵션을 모두 명시해야 합니다.
옵션 없이 pv를 사용하는 것은 ‘-pterb’ 옵션을 사용하는 것과 같습니다.
-p: 완료율을 표시합니다 (진행률 표시줄과 완료율 수치).
-t: 경과 시간을 표시합니다.
-e: ETA를 표시합니다.
-r: 데이터 전송 속도를 표시합니다.
-b: 전송된 데이터 크기(바이트)를 표시합니다.
-n: 백분율을 정수로 표시합니다. 이 옵션을 사용하면 완료된 백분율이 정수로 인쇄되고, 각 업데이트는 새로운 행에 표시됩니다.
마지막 명령을 반복하고 pv에 -p (완료율) 옵션을 전달해 보겠습니다.
tar -czf - ./help-files/ | pv -p > help-files.tgz
wc와 함께 pv 사용
pv를 사용하여 텍스트 파일(또는 파일)을 wc로 파이핑할 수 있습니다. wc는 줄 수, 문자 수, 단어 수를 계산하며, pv는 진행 보고서를 제공합니다.
다음 예시에서는 help-files 디렉토리의 모든 ‘.page’ 파일을 wc로 파이핑합니다.
wc가 완료되면 help-files 폴더의 모든 ‘.page’ 파일에 대한 줄 수, 문자 수, 단어 수를 확인할 수 있습니다.
progress 명령어 설치
progress 명령어는 pv와 유사하게 유용한 정보를 제공하지만, 특정 Linux 명령어 세트에서만 작동합니다.
Ubuntu에 progress를 설치하려면 다음 명령어를 사용하세요.
sudo apt-get install progress
Fedora에 progress를 설치하려면 다음 명령어를 사용하세요.
sudo dnf install progress
Manjaro에 progress를 설치하려면 다음 명령어를 사용하세요.
sudo pacman -Syu progress
progress 명령어 작동 방식
터미널 창에 ‘progress’를 입력하고 Enter 키를 누르면 progress가 작동하는 명령어 목록이 표시됩니다.
progress
파이프를 이용한 progress 사용
progress를 사용하여 명령어를 모니터링하는 두 가지 방법이 있습니다. 첫 번째 방법은 파이프를 사용하는 것입니다.
tar 명령어는 progress가 모니터링할 수 있는 명령어 목록에 있으므로, tar 명령어를 사용해 보겠습니다.
사용할 옵션은 표준 옵션인 -c (아카이브 생성), -z (gzip으로 압축), -f (파일 이름)입니다. help-files 폴더의 모든 항목을 압축된 아카이브로 만들고, 아카이브 이름은 ‘help.tgz’로 지정합니다.
진행 상황을 확인하기 위해 progress에 파이프하고, -m (모니터) 옵션을 사용하여 progress가 완료될 때까지 프로세스에 대한 보고를 계속하도록 설정합니다.
tar -czf help.tgz ./help-files/ | progress -m
아카이브를 생성하는 동안 터미널 창에 tar 명령어의 진행 상황이 표시됩니다.
각 파일이 처리될 때마다 다음 정보가 표시됩니다.
프로세스 ID
프로세스 이름
완료 비율
처리된 데이터 크기 및 전체 파일 크기
데이터 전송 속도 (처리량)
예상 남은 시간 (ETA)
두 번째 데이터 세트가 표시되는 것에 놀랄 수 있습니다. 첫 번째 데이터 세트는 tar에 대한 정보이고, 두 번째는 gzip에 대한 정보입니다. tar는 압축을 수행하기 위해 gzip을 호출하며, gzip도 지원되는 명령어 목록에 있으므로 progress에 의해 보고됩니다.
연속 모니터 모드에서 progress 사용
-M (모니터) 옵션을 사용하여 실시간 연속 모니터링 모드에서 progress를 사용할 수 있습니다.
터미널 창에 다음 명령어를 입력합니다.
progress -M
progress는 모니터링할 실행 중인 명령이 없다고 보고합니다. 하지만 명령줄로 돌아가지 않고, 모니터링할 수 있는 명령이 시작될 때까지 기다립니다. 이후 자동으로 보고를 시작합니다.
다른 터미널 창에서 progress가 모니터링할 수 있는 명령어 목록에 있는 명령어를 입력합니다.
이번에는 ‘cat’ 명령어를 사용해 보겠습니다. 너무 빨리 완료되는 명령어는 progress에 등록되지 않으므로, 매우 긴 텍스트 파일의 내용을 출력해 보겠습니다.
cat words.page
progress가 실행 중인 터미널 창에서 cat 명령어가 실행되어 완료될 때까지 통계를 확인할 수 있습니다.
cat이 파일 출력을 마치면 progress는 대기 상태로 돌아갑니다.
progress는 보고할 수 있는 명령어 중 하나가 상당한 작업을 수행할 때마다 자동으로 모니터링하고 보고합니다.
매우 편리합니다.
100% 완료
오래 실행되는 명령어가 어떻게 작동하는지 궁금해하며 추측하는 대신, pv와 progress를 사용하여 잠시 동안 휴식을 취하십시오.