Linux / 명령어 / watch - 명령 결과를 주기적으로 반복 확인

watch는 지정한 명령을 일정 간격으로 반복 실행하고 결과를 터미널 전체 화면에 갱신하여 보여 주는 명령어입니다. 기본 실행 간격은 2초이며, -n으로 간격을 바꾸고 -d로 이전 결과와 달라진 부분을 강조할 수 있습니다.

메모리·디스크·프로세스·네트워크 상태처럼 계속 변하는 값을 짧은 시간 동안 관찰할 때 유용합니다. 종료하려면 일반적으로 q 또는 Ctrl+c를 사용합니다.

watch 명령어란?

watch는 procps-ng 도구 모음에 포함된 프로그램입니다. 명령의 표준 출력과 표준 오류를 반복해서 실행하며 첫 화면 분량을 표시하므로, 같은 명령을 여러 번 직접 입력하지 않고도 결과 변화를 확인할 수 있습니다.

기본 화면 상단에는 실행 간격, 실행한 명령, 호스트, 시각과 종료 상태 등의 정보가 표시됩니다. 실행 결과가 화면보다 길면 보이지 않는 부분이 생길 수 있으므로 긴 로그나 대량 출력 전체를 추적하는 용도에는 다른 도구가 더 적합할 수 있습니다.

기본 동작과 현재 옵션은 watch(1) 매뉴얼과 procps-ng의 watch 매뉴얼 소스에서 확인할 수 있습니다.

기본 문법과 사용법

watch [옵션] 명령 [명령의 인수...]

옵션 없이 free -h를 반복 실행하면 기본값인 2초마다 메모리 사용량을 갱신합니다.

watch free -h

1초 간격으로 실행하려면 -n 옵션을 추가합니다.

watch -n 1 free -h

watch 옵션은 반복할 명령보다 앞에 배치해야 합니다. 명령 뒤에 적은 옵션은 일반적으로 watch가 아니라 반복 실행되는 명령의 옵션으로 전달됩니다.

자주 사용하는 옵션

옵션 기능 활용 방법
-n 초 실행 간격 지정 watch -n 1 명령처럼 초 단위 값을 지정합니다.
-d 달라진 부분 강조 직전 화면과 비교하여 변경된 문자를 눈에 띄게 표시합니다.
-d=permanent 누적 변경 강조 첫 실행 이후 한 번이라도 달라진 부분을 계속 강조합니다.
-g 출력이 변하면 종료 파일이나 상태가 바뀔 때까지 기다리는 용도로 사용할 수 있습니다.
-e 명령 오류 시 갱신 중지 반복 명령이 0이 아닌 상태로 끝나면 화면을 멈추고 키 입력 후 종료합니다.
-b 명령 오류 시 알림음 반복 명령이 0이 아닌 상태를 반환하면 터미널 벨을 울립니다.
-p 정확한 시작 간격 시도 이전 실행의 시작 시점을 기준으로 지정한 간격에 맞춰 실행합니다.
-t 상단 제목 숨김 명령 결과를 표시할 공간을 조금 더 확보합니다.
-c ANSI 색상 해석 반복 명령이 출력하는 지원 가능한 색상과 스타일을 표시합니다.
-w 긴 행 줄바꿈 방지 화면 너비를 넘는 행을 다음 줄로 넘기지 않고 잘라서 표시합니다.
-x 셸을 거치지 않고 실행 sh -c 대신 프로그램을 직접 실행하여 셸 확장과 파이프를 사용하지 않습니다.

배포판에 포함된 procps-ng 버전에 따라 지원하는 옵션이 다를 수 있습니다. 현재 시스템에서 사용할 수 있는 옵션은 다음 명령으로 확인합니다.

watch --help
watch --version

간격과 출력 변화 제어하기

-n으로 실행 간격 지정

-n 또는 --interval 뒤에 초 단위 값을 지정합니다. 소수도 사용할 수 있지만 너무 짧은 간격은 CPU, 디스크, 네트워크와 대상 서비스에 불필요한 부하를 줄 수 있습니다.

watch -n 0.5 date
watch -n 5 df -h

간격을 생략하면 기본값은 2초입니다. 현재 procps-ng 매뉴얼에서는 지나치게 작거나 큰 값에 제한을 적용하며, 구체적인 범위는 설치된 버전에서 확인하는 것이 좋습니다.

-d로 변경된 부분 강조

-d는 현재 화면을 직전 화면과 비교하여 달라진 부분을 강조합니다. 값이 빠르게 변하는 메모리, 프로세스와 네트워크 통계를 볼 때 편리합니다.

watch -n 1 -d free -h

첫 화면 이후 변경된 모든 위치를 계속 표시하려면 설치된 버전이 지원하는 경우 -d=permanent를 사용합니다.

watch -n 1 -d=permanent free -h

-g로 변경될 때 종료

-g 또는 --chgexit는 화면에 보이는 출력이 달라지면 watch를 종료합니다. 파일 수정 시각이나 배포 작업 상태가 바뀌기를 기다릴 때 사용할 수 있습니다.

watch -g -n 1 'stat -c %Y /tmp/result.txt'

출력이 화면 범위를 넘어 잘린 부분에서만 바뀌면 변화를 감지하지 못할 수 있습니다. 변화 감지가 중요한 자동화라면 화면 출력 비교보다 대상 명령의 종료 상태나 전용 모니터링 도구를 사용하는 것이 안전합니다.

파이프와 셸 문법을 사용할 때 따옴표가 필요한 이유

기본적으로 watch는 전달받은 명령을 sh -c를 통해 실행합니다. 파이프, 리디렉션, 세미콜론, 변수와 와일드카드를 반복 명령의 일부로 사용하려면 전체 명령을 작은따옴표로 감싸는 편이 명확합니다.

간단한 명령은 그대로 전달

파이프나 리디렉션이 없는 명령은 다음처럼 바로 작성할 수 있습니다.

watch -n 2 ls -lh /var/log

파이프와 변수는 전체 명령을 묶기

다음 예제에서 작은따옴표는 현재 셸이 파이프를 먼저 처리하지 않도록 막고, 반복 실행될 셸에 전체 명령을 전달합니다.

watch -n 1 'ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 15'

리디렉션이나 여러 명령도 같은 방식으로 묶습니다.

watch -n 5 'date; df -h / /var'

-x 옵션은 셸을 거치지 않고 프로그램을 직접 실행합니다. 실행 비용을 조금 줄이고 인수 전달을 단순화할 수 있지만 파이프, 리디렉션, 변수 확장과 와일드카드 같은 셸 기능은 사용할 수 없습니다.

watch -x -n 2 ls -lh /var/log

따옴표의 일반적인 동작은 GNU Bash의 Quoting 문서에서 확인할 수 있습니다.

실무에서 자주 사용하는 예제

확인 대상 설명
메모리 free -h 결과를 1초마다 갱신하고 달라진 부분을 강조합니다.
디스크 공간 루트와 /var 파일 시스템의 사용량을 5초마다 확인합니다.
CPU 사용 프로세스 ps 결과를 CPU 사용량 순으로 정렬하여 상위 항목을 봅니다.
소켓 요약 ss -s로 네트워크 소켓의 전체 상태를 반복 확인합니다.
파일 크기 stat으로 다운로드나 압축 파일의 크기 변화를 관찰합니다.
서비스 상태 systemctl status를 --no-pager와 함께 반복 실행합니다.

메모리 사용량

watch -n 1 -d free -h

디스크 사용량

watch -n 5 'df -h / /var'

CPU 사용량이 높은 프로세스

watch -n 1 'ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 15'

네트워크 소켓 요약

watch -n 1 ss -s

파일 크기와 수정 시각

watch -n 1 'stat -c "%s bytes  %y" archive.tar'

서비스 상태

watch -n 2 'systemctl --no-pager --full status nginx'

서비스 상태처럼 출력이 길 수 있는 명령은 터미널 크기에 따라 일부만 보일 수 있습니다. 지속적인 로그 추적이 목적이라면 journalctl -f -u nginx처럼 해당 기능에 맞는 명령이 더 적절합니다.

정확한 실행 간격과 오래 걸리는 명령

기본 동작에서는 한 번의 명령 실행이 끝난 뒤 지정한 간격을 기다리고 다음 실행을 시작할 수 있습니다. -p 또는 --precise를 사용하면 이전 명령이 시작한 시점을 기준으로 다음 시작 시각을 맞추려고 합니다.

watch -p -n 10 'date; curl -fsS https://example.com/health'

반복 명령의 실행 시간이 지정한 간격보다 길다면 watch는 동시에 여러 개를 겹쳐 실행하지 않고 현재 명령이 끝나기를 기다립니다. 정확한 주기와 실행 보장이 필요한 배치 작업에는 watch보다 systemd timer나 작업 스케줄러를 사용하는 편이 적합합니다.

키보드로 제어하기

키 동작
q watch를 종료합니다. 실행 중인 자식 명령은 즉시 중단되지 않을 수 있습니다.
Ctrl+c 인터럽트 시그널을 보내 watch와 실행 중인 작업을 종료합니다.
Space 다음 예약 시각을 기다리지 않고 명령 실행을 요청합니다. 이미 실행 중이면 완료 후 다음 실행을 지연 없이 시작합니다.

키 동작은 procps-ng 버전에 따라 차이가 있을 수 있으므로 현재 시스템의 man watch를 우선 확인하세요.

watch를 사용할 때 주의할 점

  • 읽기 전용 확인 명령에 우선 사용: 삭제, 결제, 사용자 생성, 서비스 재시작처럼 상태를 바꾸는 명령을 반복하면 원하지 않는 결과가 발생할 수 있습니다.
  • 너무 짧은 간격 피하기: 데이터베이스 조회, 원격 API 요청과 큰 디렉터리 검색을 매우 짧은 주기로 실행하면 시스템이나 외부 서비스에 부하를 줄 수 있습니다.
  • 화면에 보이는 범위 확인: -g와 -d는 터미널에 표시되는 출력의 영향을 받으므로 잘린 영역의 변화는 감지하지 못할 수 있습니다.
  • 대화형 명령 피하기: 암호 입력, 편집기, 페이지 출력기처럼 사용자 입력을 기다리는 프로그램은 반복 실행에 적합하지 않습니다.
  • 종료 상태 구분: 기본적인 watch의 성공 상태가 반복 명령의 성공을 항상 의미하는 것은 아닙니다. 명령 오류에 반응해야 한다면 -e 등 현재 버전의 옵션을 확인합니다.

watch 대신 다른 도구가 적합한 경우

목적 적합한 도구
파일에 추가되는 로그 추적 tail -f 또는 tail -F
systemd 서비스 로그 추적 journalctl -f -u 서비스명
프로세스 자원 사용량 확인 top 또는 htop
정해진 시각의 반복 작업 systemd timer 또는 cron
장기 지표 수집과 알림 전용 모니터링 시스템

watch는 사람이 터미널을 보면서 짧은 시간 동안 변화를 확인하는 데 알맞습니다. 기록 보존, 알림과 장기 분석이 필요하면 해당 목적에 맞는 도구를 선택해야 합니다.

자주 묻는 질문

watch 명령어가 없다고 나옵니다

watch는 일반적으로 procps 또는 procps-ng 패키지에 포함됩니다. 최소 설치 환경에는 없을 수 있으므로 현재 배포판의 패키지 관리자로 해당 패키지를 설치해야 합니다. 패키지 이름과 설치 명령은 배포판 문서를 확인하세요.

별칭이나 셸 함수가 watch 안에서 실행되지 않습니다

별칭과 함수는 현재 대화형 셸에만 정의되어 있을 수 있고, watch가 기본적으로 호출하는 sh -c 환경에는 전달되지 않을 수 있습니다. 반복 작업은 실제 실행 파일, 명시적인 명령 또는 별도 셸 스크립트로 만드는 편이 예측하기 쉽습니다.

명령의 색상이 표시되지 않습니다

watch -c로 ANSI 색상 해석을 활성화하고, 반복 명령도 비대화형 환경에서 색상 코드를 출력하도록 설정해야 합니다. 프로그램에 따라 --color=always 같은 별도 옵션이 필요할 수 있습니다.

파이프가 포함된 명령은 왜 따옴표로 감싸야 하나요?

따옴표가 없으면 현재 셸이 파이프를 먼저 처리하여 watch의 출력 전체가 다른 명령으로 전달될 수 있습니다. 전체 파이프라인을 작은따옴표로 감싸면 watch가 반복 실행할 셸에 하나의 명령 문자열로 전달할 수 있습니다.

정리

watch는 명령 결과를 기본 2초 간격으로 반복 표시하는 간단한 관찰 도구입니다. -n으로 주기를 바꾸고, -d로 변화를 강조하며, -g로 출력이 바뀔 때 종료할 수 있습니다.

파이프와 리디렉션이 포함된 명령은 전체를 작은따옴표로 묶고, 반복 실행이 시스템에 미칠 부하와 부작용을 확인해야 합니다. 다른 명령어의 용도는 리눅스 명령어 목록에서 작업별로 찾아볼 수 있습니다.

같은 카테고리의 다른 글
Linux / 명령어 / xargs - 표준 입력을 명령 인수로 전달

Linux / 명령어 / xargs - 표준 입력을 명령 인수로 전달

Linux xargs 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / tar - 여러 파일을 묶고 압축 아카이브 풀기

Linux / 명령어 / tar - 여러 파일을 묶고 압축 아카이브 풀기

Linux tar 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.

Linux / 명령어 / shutdown - 시스템 종료·재시작 예약과 취소

Linux / 명령어 / shutdown - 시스템 종료·재시작 예약과 취소

Linux shutdown 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / df - 파일 시스템의 남은 용량 확인

Linux / 명령어 / df - 파일 시스템의 남은 용량 확인

Linux df 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / fsck - 파일 시스템 오류 검사와 복구 시 주의점

Linux / 명령어 / fsck - 파일 시스템 오류 검사와 복구 시 주의점

Linux fsck 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / getent - NSS 사용자·그룹·호스트 정보 조회

Linux / 명령어 / getent - NSS 사용자·그룹·호스트 정보 조회

Linux getent 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux / 명령어 / ln - 하드 링크와 심볼릭 링크 생성

Linux / 명령어 / ln - 하드 링크와 심볼릭 링크 생성

Linux ln 명령어로 하드 링크와 심볼릭 링크를 만드는 방법을 설명합니다. 두 링크의 차이, 상대 경로, 깨진 링크와 기존 링크 교체 시 주의점도 정리합니다.

Linux / 명령어 / scp - SSH로 로컬·원격 파일 복사

Linux / 명령어 / scp - SSH로 로컬·원격 파일 복사

Linux scp 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / lsblk - 디스크·파티션 구조와 마운트 지점 확인

Linux / 명령어 / lsblk - 디스크·파티션 구조와 마운트 지점 확인

Linux lsblk 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / who - 현재 로그인 세션 확인

Linux / 명령어 / who - 현재 로그인 세션 확인

Linux who 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.