When monitoring system performance using the top command, you'll often see processes from all users including system accounts like root and nobody. In production environments, filtering out these system processes can help focus on application-specific metrics.
The quickest way to filter users is by pressing u followed by the username when top is running:
1. Launch top: top 2. Press 'u' 3. Enter the username to show (or prefix with '!' to exclude) !root,nobody
For persistent filtering, use these command-line options:
top -u \!root,\!nobody
Or to show only specific users:
top -u apache,www-data
For frequent use, create a .toprc file in your home directory:
cat > ~/.toprc <<EOF
RCfile for "top with windows" # shameless braggin'
Id:a, Mode_altscr=0, Mode_irixps=1, Delay_time=3.0, Curwin=0
Def fieldscur=AEHIOQTWKNMbcdfgjplrsuvyzX
winflags=30009, sortindx=10, maxtasks=0
summclr=1, msgsclr=1, headclr=3, taskclr=1
Job fieldscur=ABcefgjlrstuvyzMKNHIWOPQDX
winflags=62777, sortindx=0, maxtasks=0
summclr=6, msgsclr=6, headclr=7, taskclr=6
Mem fieldscur=ANOPQRSTUVbcdefgjlmyzWHIKX
winflags=62777, sortindx=13, maxtasks=0
summclr=5, msgsclr=5, headclr=4, taskclr=5
Usr fieldscur=ABDECGfhijlopqrstuvyzMKNWX
winflags=62777, sortindx=4, maxtasks=0
summclr=3, msgsclr=3, headclr=2, taskclr=3
EOF
For more complex filtering, combine with pgrep:
top -p $(pgrep -u \!root,\!nobody)
- Escaping special characters: Always escape
!with\in shells - Multiple users: Separate with commas, no spaces
- UID filtering: Use numerical UIDs when usernames are problematic
Consider these alternatives when top filtering isn't sufficient:
htop -u \!root atop -u \!nobody glances --disable-plugin users
When monitoring system processes with top, administrators often need to focus on specific user processes while excluding system accounts like root or nobody. The default view showing all processes can clutter the display with irrelevant system processes.
The quickest way to filter users is using top's interactive mode:
1. Launch top: top
2. Press U (uppercase)
3. Enter the username you want to display
4. For exclusion logic, use !username format
Example to exclude root and nobody:
U
!root,!nobody
For scripting or one-time use, specify users directly:
top -u $(awk -F: '$3 >= 1000 {printf "%s,",$1}' /etc/passwd | sed 's/,$//')
This complex command automatically filters system users (UID < 1000).
Create or modify ~/.toprc:
RCfile for "top with windows" # shameless bullshit line
Id:a, Mode_altscr=0, Mode_irixps=1, Delay_time=3.0, Curwin=0
Def fieldscur=AEHIOQTWKNMbcdfgjplrsuvyzX
winflags=64137, sortindx=3, maxtasks=0
summclr=6, msgsclr=2, headclr=3, taskclr=2
Job fieldscur=ABcefgjlrstuvyzMKNHIWOPQDX
winflags=62777, sortindx=0, maxtasks=0
summclr=6, msgsclr=6, headclr=7, taskclr=6
Mem fieldscur=ANOPQRSTUVbcdefgjlmyzWHIKX
winflags=62777, sortindx=13, maxtasks=0
summclr=5, msgsclr=5, headclr=4, taskclr=5
Usr fieldscur=ABDECGfhijlopqrstuvyzMKNWX
winflags=62777, sortindx=4, maxtasks=0
summclr=3, msgsclr=3, headclr=2, taskclr=3
For comprehensive monitoring, combine user filtering with other options:
top -u appuser,dbuser -o +%MEM -n 1 -b > process_report.txt
This command:
- Shows only appuser and dbuser processes
- Sorts by memory usage
- Runs once in batch mode
- Outputs to file
Consider these alternatives when top's filtering isn't sufficient:
# htop with better UI
htop --user=!root,!nobody
# ps with custom formatting
ps -eo user,pid,ppid,%mem,%cpu,cmd --sort=-%cpu | grep -vE 'root|nobody'