GICT knowledge base
How to Use watch for Command Output Monitoring in Linux
Published
Monitoring system states, resource usage, or changes in files and processes is a critical part of Linux administration, scripting, and troubleshooting. The watch command is an invaluable tool that enables you to execute any command repeatedly at a specified interval, displaying the output in real-time. This makes it easy to track changes as they happen and quickly respond to issues as they arise.
This in-depth guide (over 2000 words) explores the full power of watch for command output monitoring. You will learn its syntax, options, advanced use cases, scripting integration, and best practices for leveraging watch in daily operations and complex automation.
Introduction to watch
The watch command is a utility included in most Unix-like operating systems, including all major Linux distributions. Its main job is to execute a specified command repeatedly at fixed time intervals and show the output fullscreen, refreshing each time.
This is particularly useful for:
- Monitoring system resource usage (CPU, memory, disk, network)
- Tracking file or directory changes in real-time
- Watching the output of scripts that calculate or summarize data
- Debugging and observing application behavior during tests
- Visualizing the effect of commands or scripts that update frequently
Basic Usage and Syntax
Command Structure
The basic syntax is:
$ watch [options] <command>
By default, watch runs the command every 2 seconds and displays the output in the terminal. It clears the terminal before each run, showing only the latest results.
Example:
$ watch ls -lh /tmp
This command updates the list of files in /tmp every two seconds.
How watch Works
- Executes the specified command at the set interval.
- Clears and redraws the terminal for each execution.
- Shows a header with interval, command, and current time.
- Can optionally highlight differences between updates.
Key watch Options and Their Use
watch offers several powerful options to customize its behavior:
- -n, –interval <seconds>: Set the interval (in seconds) between executions. Example:
$ watch -n 5 df -h
- -d, –differences[=permanent]: Highlight (in color) the differences between successive updates. Use permanent to keep differences highlighted until they change again. Example:
$ watch -d free -m
- -t, –no-title: Hide the header row at the top of the output. Example:
$ watch -t date
- -p, –precise: Try to run the command precisely every N seconds, compensating for the command’s runtime. Example:
$ watch -p -n 1 uptime
- -e, –errexit: Exit watch if the command has a non-zero exit status. Example:
$ watch -e my_script.sh
- -x, –exec: Pass the command to exec instead of sh -c.
- -b, –beep: Beep if the command produces output.
- -h, –help: Show help message.
Tip: Use man watch for the complete list of options.
Practical Examples
Monitor Disk Usage
$ watch -n 5 df -h
See disk space usage for all mounted filesystems every 5 seconds.
Monitor a Growing Log File
$ watch tail -n 20 /var/log/syslog
Continuously display the last 20 lines of the system log.
Watch Network Interface Statistics
$ watch -d -n 2 ifconfig eth0
Update every 2 seconds, highlighting differences in network stats.
Monitor Process Table for a Specific User
$ watch "ps -u alice -o pid,cmd,%cpu,%mem"
Show real-time resource usage for all processes belonging to user ‘alice’.
Track File or Directory Changes
$ watch -d ls -lh /home/alice/Documents
See size and timestamp changes in a directory, with differences highlighted.
Check System Uptime
$ watch uptime
See how long the system has been running, load averages, and logged-in users.
Advanced Monitoring Techniques with watch
Combine with Pipes and Complex Commands
You can monitor the output of piped commands, but enclose the whole command in quotes:
$ watch "netstat -ant | grep ESTABLISHED"
Monitor all established TCP connections.
Use with Scripts
Monitor the output of a script that summarizes system health:
$ watch ./my_health_check.sh
Monitor Multiple Metrics
You can run a script or a chained command that outputs multiple metrics:
$ watch "echo 'CPU:'; mpstat 1 1 | tail -2; echo 'Memory:'; free -h"
Monitoring Remote Systems
If you have passwordless SSH access:
$ watch "ssh user@remotehost uptime"
Monitor with Custom Formatting
Use column to format output for readability:
$ watch "df -h | column -t"
Colorizing Output for Clarity
Using –differences Option
The -d or –differences option highlights changes between consecutive outputs, making it easy to spot updates.
$ watch -d free -h
Using ANSI Color Codes
Some commands (like ls –color=always) output colored text. By default, watch runs the command with sh -c, which might strip or mangle color codes. To preserve color output, use the -c option (Bash specific) or invoke the command with script.
Bash/Zsh workaround:
$ watch --color ls --color=always
or
$ watch -c 'ls --color=always'
Using script utility:
$ watch 'script -q -c "ls --color=always" /dev/null'
[!NOTE] Not all terminals or versions of watch support color highlighting out-of-the-box. Test with your system.
Integrating watch with Scripts
Automating Health Checks
Write a script, e.g., disk_health.sh:
#!/bin/bash echo "Disk Usage:" df -h echo echo "Inodes:" df -i
Then monitor it:
$ watch ./disk_health.sh
Scheduling with Cron (for Logging Instead of Monitoring)
While watch is interactive, you can use similar periodic execution in the background with cron for automated logging:
*/5 * * * * df -h >> /var/log/disk_usage.log
Using watch in System Maintenance
Monitor the status of a long-running backup:
$ watch "du -sh /backup"
Performance, Optimization, and Limitations
Minimal Overhead
watch itself is lightweight. The primary constraint is the resource demand of the command being run. Be cautious when using watch with system-intensive commands or on production servers.
Interval Considerations
Too short an interval may spike CPU usage or overwhelm logs. Too long an interval may miss rapid changes. Choose a balance appropriate for the system and the task.
Output Limitations
watch displays output that fits within the terminal. Outputs exceeding the terminal size are truncated. Use less or redirect to a file for full outputs.
Troubleshooting and Best Practices
- Use quotes for complex commands or those with pipes, redirects, or shell operators.
- Test commands independently before running with watch.
- Use the -t option to hide the title for scripts that parse output.
- Use Ctrl+C to exit watch.
- For long-running watch sessions, monitor system resources to avoid performance issues.
Troubleshooting Tips
- If output appears uncolored or garbled, verify your terminal’s color support and check command syntax.
- If watch does not highlight differences as expected, check your command’s output format or try the –differences=permanent option.
- If commands require a password (e.g., sudo), run them outside of watch or configure passwordless execution for specific scripts.
Alternatives and Related Tools
- top / htop / glances: Real-time system monitoring with interactive interfaces.
- tail -f / multitail: For real-time file and log monitoring.
- conky: Graphical system monitor for desktop environments.
- Custom scripts: Use while loops with sleep for more complex or conditional monitoring:
while true; do
date
df -h
sleep 10
clear
done
Conclusion
The watch command is a powerful yet simple utility for real-time command output monitoring in Linux. By mastering watch and its options, you can monitor system states, track changes, and debug issues with speed and clarity. Its ability to highlight differences, run commands at custom intervals, and integrate with scripts makes it an essential tool for administrators, developers, and power users alike.
Whether you are keeping an eye on disk space, watching for changes in log files, or monitoring remote systems, watch is the right fit for continuous, interactive observation. Combine it with good scripting practices, colorized output, and complementary tools for a complete monitoring and troubleshooting workflow.
[!NOTE] For mission-critical or large-scale monitoring, consider integrating watch with professional monitoring suites like Nagios, Zabbix, or Prometheus, which offer alerting and historical data retention features.
Related guides
How to Set Up zram on a Small VPS
Configure zram on Ubuntu with kernel and swap checks. Understand compressed memory limits, monitor real use and avoid unsafe swap-file changes.
LinuxHow to Find Services That Need a Restart After Updates with needrestart
Find services using outdated libraries with needrestart on Ubuntu. Read restart reports, review automatic restart policy and plan maintenance safely.
LinuxHow to Limit a Linux Service’s Memory with systemd
Limit a Linux service with systemd MemoryHigh, MemoryMax and swap controls. Check cgroup support, diagnose pressure and remove only your own policy.
LinuxHow to Protect SSH with CrowdSec on Ubuntu
Protect SSH with CrowdSec on Ubuntu. Connect log detection to firewall enforcement and test temporary blocking without losing administrator access.
