คำสั่ง watch: วิธีใช้ ช่วงเวลา -n ไฮไลต์ -d และออกเมื่อเอาต์พุตเปลี่ยน
คำสั่ง watch เป็นคำสั่ง Linux ที่รันคำสั่งที่กำหนดซ้ำทุก 2 วินาทีและวาดเอาต์พุตใหม่เต็มหน้าจอเทอร์มินัล เมื่อใช้ watch ดูไฟล์บนเซิร์ฟเวอร์ AlmaLinux 9 ขณะแก้ไฟล์จากอีกหน้าต่าง ตัวเลือก -d ไฮไลต์ตัวอักษรที่เปลี่ยน และตัวเลือก -g จบ watch หลังเอาต์พุตเปลี่ยน
ผลลัพธ์ด้านล่างได้จากการรันด้วยบัญชี root ในโฟลเดอร์ทำงานบนเซิร์ฟเวอร์ AlmaLinux 9.8 ส่วนบนเซิร์ฟเวอร์ Debian 12 ตรวจเฉพาะเวอร์ชัน ชื่อโฮสต์ในบรรทัดหัวด้านบนสุดของหน้าจอเปลี่ยนเป็นค่าตัวอย่าง server1 และเวลาเป็น UTC
1️⃣ วิธีใช้คำสั่ง watch
เขียนคำสั่งที่จะรันซ้ำไว้หลัง 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 2026ตามหน้า man ช่วงเวลาตั้งให้สั้นกว่า 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 $?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.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 $$ และทุกครั้งที่รีเฟรชจะแสดง PID ของ sh ที่เพิ่งรันใหม่
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 '000d\n' 0 >> grow.logEvery 2.0s: du -sh . server1: Thu Oct 29 02:30:36 2026
36K .🔲 ตัวจำลองคำสั่ง watch
ในตัวจำลองด้านล่าง ให้รัน watch แล้วใช้ชิป [🖊 หน้าต่างอื่น] เปลี่ยนไฟล์ เพื่อดูด้วยตัวเองว่าหน้าจอเปลี่ยนอย่างไร
🔢 FAQ & เนื้อหาแนะนำ
สถานะระบบ
คำสั่ง uptime ของ Linux (ตรวจเวลาที่เซิร์ฟเวอร์ทำงาน&โหลดเฉลี่ย 1, 5, 15 นาที)
คำสั่ง uptime แสดงในบรรทัดเดียวว่าเซิร์ฟเวอร์เปิดมานานเท่าไรและโหลดเฉลี่ย 1, 5 และ 15 นาที
ข้อความ
คำสั่ง head และคำสั่ง tail ของ Linux
คำสั่ง head และ tail แสดงส่วนต้นและส่วนท้ายของไฟล์ ถ้าจะตามท้ายล็อกที่ยาวขึ้นเรื่อย ๆ ให้ใช้ [tail -f]
ดิสก์
คำสั่ง df
คำสั่ง df แสดงขนาดทั้งหมด พื้นที่ที่ใช้ และพื้นที่ว่างของแต่ละระบบไฟล์
ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน