watch 명령어: 사용법과 -n 간격, -d 강조, 출력이 바뀌면 끝내기

watch 명령어는 지정한 명령을 2초마다 다시 실행해 그 출력을 터미널 화면 전체에 새로 그리는 리눅스 명령어입니다. AlmaLinux 9 서버에서 다른 창으로 파일을 바꾸며 watch로 지켜본 결과, -d 옵션은 바뀐 글자를 강조했고 -g 옵션은 출력이 바뀐 뒤 watch를 끝냈습니다.
아래 출력은 AlmaLinux 9.8 서버(root 계정)의 작업 폴더에서 실행한 결과이고, Debian 12 서버에서는 버전만 확인했습니다. 화면 맨 위 머리 줄의 호스트 이름은 예시 값 server1로 바꿨고, 시각은 UTC로 출력했습니다.
1️⃣ watch 명령어 사용법
watch 뒤에 다시 실행할 명령을 적으면, 옵션이 없을 때는 2초마다 그 명령을 실행하고 화면을 새 출력으로 바꿉니다. date를 지켜보자 화면 맨 위에 머리 줄이 나오고, 한 줄을 비운 뒤 date의 출력이 이어졌습니다.
watch dateEvery 2.0s: date server1: Thu Oct 29 02:28:07 2026
Thu Oct 29 02:28:07 UTC 2026머리 줄 왼쪽은 갱신 간격과 실행 중인 명령이고, 오른쪽은 호스트 이름과 마지막으로 실행한 시각입니다. 2초 뒤 같은 화면을 다시 확인하자 머리 줄의 시각과 date 출력이 함께 바뀌어 있었습니다.
Every 2.0s: date server1: Thu Oct 29 02:28:09 2026
Thu Oct 29 02:28:09 UTC 2026watch는 직접 끝낼 때까지 계속 실행되므로 Ctrl+C로 끝냅니다. Ctrl+C를 누르자 watch 화면이 사라지고 프롬프트가 돌아왔습니다. 이어서 확인한 종료 코드는 0이었습니다.
echo $?0watch는 한 번 출력하고 끝나는 명령을 되풀이해 실행할 때 사용합니다. 프로세스마다 CPU와 메모리 사용량이 바뀌는 모습을 보려면 화면을 스스로 새로 그리는 top 명령어가 맞습니다.
watch는 procps-ng 패키지에 들어 있는 명령입니다. 버전은 [watch -v]로 확인하며, AlmaLinux 9.8 서버는 3.3.17, Debian 12 서버는 4.0.2였습니다.
watch -vwatch from procps-ng 3.3.17watch -vwatch from procps-ng 4.0.22️⃣ watch 간격과 강조 옵션
-n 뒤에 초를 적으면 갱신 간격이 바뀝니다. [watch -n 1 date]로 실행하자 머리 줄 왼쪽이 Every 1.0s로 바뀌었습니다.
watch -n 1 dateEvery 1.0s: date server1: Thu Oct 29 02:28:15 2026
Thu Oct 29 02:28:15 UTC 2026man 페이지 기준으로 간격은 0.1초보다 짧게 정할 수 없고, 그보다 작은 값은 0.1초로 바뀝니다. 소수점은 마침표와 쉼표를 모두 인식합니다.
-d는 바로 앞 갱신과 달라진 글자를 강조합니다. 작업 폴더의 size.log를 [ls -l]로 지켜보는 동안, 다른 창에서 이 파일에 한 줄을 더했습니다.
watch -d -n 1 ls -l size.logEvery 1.0s: ls -l size.log server1: Thu Oct 29 02:28:53 2026
-rw-r--r-- 1 root root 7 Oct 29 02:28 size.logprintf 'line 2\n' >> size.log파일 크기가 7에서 14로 바뀌자 크기 칸부터 줄 끝까지가 강조되었습니다. 숫자가 한 자리 늘어 그 뒤 글자가 모두 한 칸씩 밀렸기 때문입니다. 다음 갱신에서는 값이 그대로여서 강조가 사라졌습니다.
Every 1.0s: ls -l size.log server1: Thu Oct 29 02:28:54 2026
-rw-r--r-- 1 root root 14 Oct 29 02:28 size.log처음 실행했을 때와 견줘 바뀐 곳을 계속 강조하려면 [--differences=permanent]를 사용합니다(man 페이지 기준).
-t는 머리 줄과 그 아래 빈 줄을 없애고 명령의 출력만 남깁니다.
watch -t -n 1 dateThu Oct 29 02:28:19 UTC 20263️⃣ watch 명령어 종료 조건과 옵션
-g는 명령의 출력이 바뀌면 watch를 끝냅니다. 상태 파일의 내용이 바뀌기를 기다렸다가 다음 작업으로 넘어갈 때 사용합니다.
watch -g -n 1 cat status.txtEvery 1.0s: cat status.txt server1: Thu Oct 29 02:29:12 2026
running다른 창에서 아래 명령으로 status.txt의 내용을 done으로 바꿨습니다.
printf 'done\n' > status.txt그러자 watch가 끝나 프롬프트가 돌아왔고, 종료 코드는 0이었습니다.
echo $?0-e는 명령이 0이 아닌 종료 코드로 끝나면 화면 갱신을 멈춥니다. 작업 폴더에 없는 파일을 ls로 지켜보자, ls의 오류 출력과 함께 화면 맨 아래 줄에 키를 누르면 끝난다는 안내가 나왔습니다.
watch -e -n 1 ls nofile.txtEvery 1.0s: ls nofile.txt server1: Thu Oct 29 02:29:18 2026
ls: cannot access 'nofile.txt': No such file or directory
command exit with a non-zero status, press a key to exit머리 줄의 시각은 실행 직후 시각에서 멈춰 있었고, 키를 하나 누르자 watch가 끝났습니다. 이때 종료 코드는 8이었습니다.
echo $?8man 페이지는 종료 코드 8을 명령이 오류로 끝난 경우를 포함한 값으로 설명합니다.
📌 주요 옵션: 이 글에서 실행한 결과
| 옵션 | 하는 일 | 이 글에서 본 결과 | |
|---|---|---|---|
| -n 초 | 갱신 간격을 바꿈(기본 2초) | 머리 줄이 Every 1.0s로 바뀜 | |
| -d | 바로 앞 갱신과 달라진 글자를 강조 | 파일 크기 7 → 14에서 그 칸부터 줄 끝까지 강조, 다음 갱신에서 사라짐 | |
| -t | 머리 줄과 그 아래 빈 줄을 끔 | date 출력 한 줄만 남음 | |
| -g | 출력이 바뀌면 watch를 끝냄 | running → done 뒤 끝남, 종료 코드 0 | |
| -e | 명령이 오류로 끝나면 화면을 멈춤 | 키를 누르자 끝남, 종료 코드 8 | |
| -v | 버전 정보를 출력 | AlmaLinux 9.8 서버는 watch from procps-ng 3.3.17, Debian 12 서버는 watch from procps-ng 4.0.2 |
📎 그 밖의 옵션: 공식 매뉴얼 기준
| 옵션 | 하는 일 | |
|---|---|---|
| -b | 명령이 0이 아닌 종료 코드로 끝나면 경고음을 냄 | |
| -c | ANSI 색과 글자 꼴 코드를 해석해 명령 출력의 색을 그대로 출력 | |
| -p | 간격마다 실행하도록 맞춰 갱신 시각이 뒤로 밀리지 않게 함 | |
| -x | 명령을 sh -c 대신 exec로 실행해 따옴표를 덜 씀 | |
| -w | 긴 줄을 다음 줄로 넘기지 않고 잘라서 출력 | |
| --differences=permanent | 처음 실행한 뒤로 바뀐 곳을 모두 계속 강조 | |
| -h | 도움말을 출력 |
4️⃣ watch 명령어 따옴표와 파이프
watch는 받은 명령을 sh -c로 실행하므로, 파이프(|)나 $가 들어간 명령은 명령 전체를 작은따옴표로 감쌉니다. 작업 폴더의 파일 수를 [ls | wc -l]로 지켜보자 머리 줄에 파이프까지 명령 전체가 나왔습니다.
watch -n 1 'ls | wc -l'Every 1.0s: ls | wc -l server1: Thu Oct 29 02:30:22 2026
6다른 창에서 파일 하나를 더 만들자, 다음 갱신에서 숫자가 6에서 7로 바뀌었습니다.
printf 'c\n' > q3.txtEvery 1.0s: ls | wc -l server1: Thu Oct 29 02:30:24 2026
7따옴표 없이 [watch -n 1 ls | wc -l]로 입력하면 셸이 파이프를 먼저 나눠, watch의 화면 출력 전체가 wc로 넘어갑니다. 그래서 지켜볼 명령에 파이프가 있으면 명령 전체를 따옴표로 감쌉니다.
$도 같은 규칙을 따릅니다. 따옴표 없이 [watch -n 1 echo $$]로 실행하자 지금 셸이 $$를 먼저 숫자로 바꿔, 머리 줄의 명령에도 그 숫자가 나왔습니다.
watch -n 1 echo $$Every 1.0s: echo 3755802 server1: Thu Oct 29 02:29:37 2026
3755802작은따옴표로 감싸면 $$가 그대로 넘어가므로, 머리 줄에는 echo $$가 나오고 갱신할 때마다 새로 실행한 sh의 PID가 출력되었습니다.
watch -n 1 'echo $$'Every 1.0s: echo $$ server1: Thu Oct 29 02:29:40 2026
3756270Every 1.0s: echo $$ server1: Thu Oct 29 02:29:41 2026
3756333지금 셸의 PID를 [echo $$]로 확인하자, 따옴표 없이 실행했을 때 고정되었던 숫자와 같았습니다.
echo $$3755802디스크 사용량처럼 천천히 바뀌는 값은 간격을 몇 초로 두고 지켜봅니다. du 명령어의 -s는 합계만, -h는 K·M 같은 단위로 출력합니다. 작업 폴더를 [du -sh .]로 지켜보는 동안 다른 창에서 로그 파일에 8,001바이트를 더하자, 다음 갱신에서 28K가 36K로 바뀌었습니다.
watch -n 2 du -sh .Every 2.0s: du -sh . server1: Thu Oct 29 02:30:34 2026
28K .printf '%08000d\n' 0 >> grow.logEvery 2.0s: du -sh . server1: Thu Oct 29 02:30:36 2026
36K .🔲 watch 명령어 시뮬레이터
아래 시뮬레이터에서 watch를 실행한 뒤, [🖊 다른 창] 칩으로 파일을 바꾸며 화면이 어떻게 바뀌는지 직접 확인할 수 있습니다.
🔢 FAQ & 추천 콘텐츠
ℹ️ 제휴 안내
본 사이트의 콘텐츠에는 제휴 링크가 포함되어 있습니다. 방문자가 이 링크를 통해 상품 또는 서비스를 구매하면 본 사이트는 판매처로부터 수수료를 지급받습니다. 이 과정에서 구매자가 지불하는 금액(이벤트 할인 시 금액이 내려갑니다↓)은 오르지 않습니다. 게시된 가격·할인·재고 정보는 작성 시점 기준이며 실제와 다를 수 있으므로, 구매 전 판매처에서 최종 확인하시기 바랍니다. 상품 선정과 평가는 자체 기준에 따라 작성되며, 수수료 지급 여부가 소개 순서나 평가 내용에 영향을 주지 않습니다.