คำสั่ง watch: วิธีใช้ ช่วงเวลา -n ไฮไลต์ -d และออกเมื่อเอาต์พุตเปลี่ยน

สภาพแวดล้อมทดสอบตระกูล RHELAlmaLinux 9.8procps-ng 3.3.17บัญชี rootDebian 12 · procps-ng 4.0.2 บัญชีผู้ใช้ทั่วไป
คำสั่งโปรเซส · การตั้งเวลางานwatchตำแหน่ง/usr/bin/watchตรวจสอบเมื่อ 2026-11-05
ดูการเปลี่ยนแปลงของเอาต์พุตคำสั่ง

คำสั่ง watch เป็นคำสั่ง Linux ที่รันคำสั่งที่กำหนดซ้ำทุก 2 วินาทีและวาดเอาต์พุตใหม่เต็มหน้าจอเทอร์มินัล เมื่อใช้ watch ดูไฟล์บนเซิร์ฟเวอร์ AlmaLinux 9 ขณะแก้ไฟล์จากอีกหน้าต่าง ตัวเลือก -d ไฮไลต์ตัวอักษรที่เปลี่ยน และตัวเลือก -g จบ watch หลังเอาต์พุตเปลี่ยน

ผลลัพธ์ด้านล่างได้จากการรันด้วยบัญชี root ในโฟลเดอร์ทำงานบนเซิร์ฟเวอร์ AlmaLinux 9.8 ส่วนบนเซิร์ฟเวอร์ Debian 12 ตรวจเฉพาะเวอร์ชัน ชื่อโฮสต์ในบรรทัดหัวด้านบนสุดของหน้าจอเปลี่ยนเป็นค่าตัวอย่าง server1 และเวลาเป็น UTC

1️⃣ วิธีใช้คำสั่ง watch

  • ↪️ ช่วงเวลาเริ่มต้น 2 วินาทีและออกด้วย Ctrl+C

เขียนคำสั่งที่จะรันซ้ำไว้หลัง watch ถ้าไม่มีตัวเลือก watch จะรันคำสั่งนั้นทุก 2 วินาทีและแทนหน้าจอด้วยเอาต์พุตใหม่ เมื่อดู date บรรทัดหัวขึ้นที่ด้านบนสุดของหน้าจอ เว้นหนึ่งบรรทัด แล้วตามด้วยเอาต์พุตของ date

watch date
Every 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 2026

watch จะรันต่อไปจนกว่าคุณจะจบเอง จึงจบด้วย Ctrl+C เมื่อกด Ctrl+C หน้าจอ watch หายไปและพรอมต์กลับมา รหัสออกที่ตรวจต่อจากนั้นคือ 0

echo $?
0

watch ใช้รันคำสั่งที่แสดงผลครั้งเดียวแล้วจบซ้ำไปเรื่อย ๆ ถ้าต้องการดูการใช้ CPU และหน่วยความจำของแต่ละโปรเซสเปลี่ยนไป ควรใช้ คำสั่ง top ซึ่งวาดหน้าจอใหม่เอง

watch อยู่ในแพ็กเกจ procps-ng ตรวจเวอร์ชันได้ด้วย [watch -v] เซิร์ฟเวอร์ AlmaLinux 9.8 เป็น 3.3.17 และเซิร์ฟเวอร์ Debian 12 เป็น 4.0.2

watch -v
watch from procps-ng 3.3.17
watch -v
watch from procps-ng 4.0.2

2️⃣ ตัวเลือกช่วงเวลาและไฮไลต์ของ watch

  • ↪️ ช่วงเวลา -n ไฮไลต์ -d และ -t ปิดบรรทัดหัว

ใส่จำนวนวินาทีหลัง -n เพื่อเปลี่ยนช่วงเวลารีเฟรช เมื่อรัน [watch -n 1 date] ด้านซ้ายของบรรทัดหัวเปลี่ยนเป็น Every 1.0s

watch -n 1 date
Every 1.0s: date                                                   server1: Thu Oct 29 02:28:15 2026

Thu Oct 29 02:28:15 UTC 2026

ตามหน้า man ช่วงเวลาตั้งให้สั้นกว่า 0.1 วินาทีไม่ได้ ค่าที่เล็กกว่านั้นจะถูกเปลี่ยนเป็น 0.1 วินาที จุดทศนิยมใช้ได้ทั้งจุดและจุลภาค

-d ไฮไลต์ตัวอักษรที่ต่างจากการรีเฟรชครั้งก่อน ระหว่างดู size.log ในโฟลเดอร์ทำงานด้วย [ls -l] ได้เพิ่มหนึ่งบรรทัดลงในไฟล์นี้จากอีกหน้าต่าง

watch -d -n 1 ls -l size.log
Every 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.log
printf '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 date
Thu Oct 29 02:28:19 UTC 2026

3️⃣ เงื่อนไขการออกและตัวเลือกของคำสั่ง watch

  • ↪️ -g เมื่อเอาต์พุตเปลี่ยน และ -e เมื่อเกิดข้อผิดพลาด

-g จบ watch เมื่อเอาต์พุตของคำสั่งเปลี่ยน ใช้เมื่อต้องการรอให้เนื้อหาของไฟล์สถานะเปลี่ยนก่อนไปทำงานถัดไป

watch -g -n 1 cat status.txt
Every 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.txt
Every 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 $?
8

หน้า man อธิบายรหัสออก 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รันคำสั่งด้วย exec แทน sh -c จึงใช้เครื่องหมายคำพูดน้อยลง
-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.txt
Every 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 $$ และทุกครั้งที่รีเฟรชจะแสดง PID ของ sh ที่เพิ่งรันใหม่

watch -n 1 'echo $$'
Every 1.0s: echo $$                                                server1: Thu Oct 29 02:29:40 2026

3756270
Every 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 '000d\n' 0 >> grow.log
Every 2.0s: du -sh .                                               server1: Thu Oct 29 02:30:36 2026

36K     .

🔲 ตัวจำลองคำสั่ง watch

ในตัวจำลองด้านล่าง ให้รัน watch แล้วใช้ชิป [🖊 หน้าต่างอื่น] เปลี่ยนไฟล์ เพื่อดูด้วยตัวเองว่าหน้าจอเปลี่ยนอย่างไร

ตัวจำลองคำสั่ง watchprocps-ng 3.3.17
[root@server work]#
ทำงานเฉพาะในเบราว์เซอร์ของคุณ บนหน้าจอ watch ให้ใช้ชิป [หน้าต่างอื่น] เปลี่ยนไฟล์ และจบด้วย Ctrl+C

🔢 FAQ & เนื้อหาแนะนำ

ตามหน้า man ถ้าใส่จำนวนวินาทีไว้ในตัวแปรสภาพแวดล้อม WATCH_INTERVAL ค่านั้นจะถูกใช้เป็นช่วงเวลาเมื่อไม่ได้ใส่ -n ค่านี้ใช้กฎเดียวกับ -n จึงตั้งให้สั้นกว่า 0.1 วินาทีไม่ได้

ตามหน้า man watch จะลบอักขระควบคุมในเอาต์พุตก่อนวาด ถ้าต้องการเห็นสีขณะดูคำสั่งที่แสดงผลเป็นสี ให้ใส่ -c ด้วย เช่น [watch -c]

ตามหน้า man ในการรันแบบปกติ เศษวินาทีของเวลารีเฟรชจะเพิ่มขึ้นทีละน้อยทุกครั้งที่รีเฟรช ถ้าใส่ -p ด้วย watch จะรันให้ตรงทุกช่วงเวลา เศษวินาทีนั้นจึงคงที่เกือบเท่าเดิม

🔗 เนื้อหาแนะนำ
โปรเซส คำสั่ง ps (คำสั่งโปรเซส) คำสั่ง ps แสดงโปรเซสที่กำลังทำงานอยู่ในขณะนี้ เป็นคำสั่งที่แสดงผลครั้งเดียวแล้วจบ จึงใช้คู่กับ watch เพื่อดูซ้ำทุกไม่กี่วินาทีได้ อ่านบทความ → ตรวจโปรเซสด้วยคำสั่ง ps

ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

Prove your humanity: 5   +   6   =