user-activity-reporter is a command-line tool designed for system administrators to track user activities including login times, online duration, and active process counts. It provides real-time monitoring capabilities and supports multiple export formats.
- Seyyedeh Fargol Nazemzadeh
- Zahra Kamalian
- Reihaneh Sharifi
- Fatemeh Mohammadganji
- User Activity Monitoring: Track last login times, online duration, and process counts
- Real-time Monitoring: Watch mode with configurable refresh intervals
- Multiple Export Formats: Export reports in Table, JSON, or CSV format
- Sorting and Filtering: Sort by user, login time, duration, or process count
- Color-coded Output: Visual highlighting for high process counts
- Configurable Settings: Customizable via configuration file
- Activity Thresholds: Alert when process counts exceed specified limits
- Standard CLI Options: Support for
--helpand--versionflags
user-activity-reporter/
βββ src/
β βββ user-activity-reporter # Main executable (755)
β βββ user-activity-lib.sh # Shared library (644)
β βββ user-activity.conf # Configuration file (644)
βββ man/
β βββ user-activity-reporter.1 # Man page (644)
βββ debian/ # Debian packaging files
βββ rpm/ # RPM packaging files
βββ scripts/ # Build scripts
βββ Makefile # Build automation
βββ LICENSE # MIT License
βββ GUIDE.md # Packaging guide
βββ PACKAGING.md # Packaging info
βββ REPORT.md # Project report
βββ README.md # This file
# Install dependencies
sudo apt install build-essential debhelper devscripts
# Build package
./scripts/build-deb.sh
# Install package
sudo dpkg -i build/deb/user-activity-reporter_1.1.0_all.deb# Install dependencies
sudo dnf install rpm-build rpmdevtools
# Build package
./scripts/build-rpm.sh
# Install package
sudo rpm -i build/rpm/user-activity-reporter-1.1.0.noarch.rpm# Install using Makefile
sudo make install
# Or manually
sudo cp src/user-activity-reporter /usr/bin/
sudo chmod 755 /usr/bin/user-activity-reporter
sudo mkdir -p /usr/share/user-activity-reporter
sudo cp src/user-activity-lib.sh /usr/share/user-activity-reporter/
sudo mkdir -p /etc/user-activity-reporter
sudo cp src/user-activity.conf /etc/user-activity-reporter/
sudo mkdir -p /usr/share/man/man1
sudo cp man/user-activity-reporter.1 /usr/share/man/man1/# Show activity for all users
user-activity-reporter
# Show activity for a specific user
user-activity-reporter -u username
# Show version
user-activity-reporter --version
# Show help
user-activity-reporter --help# Watch mode with default 5-second refresh
user-activity-reporter -w
# Watch mode with custom 10-second refresh
user-activity-reporter -w 10# Export to JSON
user-activity-reporter -o report.json -f json
# Export to CSV
user-activity-reporter -o report.csv -f csv
# Export to TXT (table format)
user-activity-reporter -o report.txt -f table# Sort by process count (ascending)
user-activity-reporter -s processes
# Sort by process count (descending)
user-activity-reporter -s processes -r
# Sort by login time
user-activity-reporter -s login
# Sort by duration
user-activity-reporter -s duration# Use custom configuration file
user-activity-reporter -c /path/to/custom.conf
# Disable colored output
user-activity-reporter --no-color
# Highlight users with more than 50 processes
user-activity-reporter --threshold 50
# Combine options
user-activity-reporter -u username -s processes -r --threshold 100| Option | Description |
|---|---|
-h, --help |
Show help message |
-v, --version |
Show version information |
-u, --user USER |
Show activity for specific user |
-a, --all |
Show all users (default) |
-s, --sort FIELD |
Sort by field (user, login, duration, processes) |
-r, --reverse |
Reverse sort order |
-w, --watch [SECONDS] |
Real-time monitoring mode |
-o, --output FILE |
Export report to file |
-f, --format FORMAT |
Output format (table, json, csv) |
-c, --config FILE |
Use custom config file |
--no-color |
Disable colored output |
--threshold N |
Alert if process count exceeds N |
USER LAST LOGIN DURATION PROCESSES
root 2026-01-19 14:30:00 2h 15m 45
fargol 2026-01-19 16:00:00 7m 30s 12
{
"timestamp": "2026-01-19T16:13:28+03:30",
"users": [
{
"username": "root",
"last_login": "2026-01-19T14:30:00+03:30",
"duration_seconds": 8100,
"duration_formatted": "2h 15m",
"process_count": 45
}
]
}username,last_login,duration_seconds,duration_formatted,process_count
root,2026-01-19T14:30:00+03:30,8100,2h 15m,45
fargol,2026-01-19T16:00:00+03:30,450,7m 30s,12The configuration file is located at /etc/user-activity-reporter/user-activity.conf.
# Output settings
DEFAULT_FORMAT="table"
ENABLE_COLORS=true
SHOW_HEADER=true
# Monitoring settings
DEFAULT_REFRESH_INTERVAL=5
PROCESS_THRESHOLD=100
# Display settings
TIME_FORMAT="%Y-%m-%d %H:%M:%S"
DATE_FORMAT="%Y-%m-%d"
# Export settings
EXPORT_DIR="/var/log/user-activity"
DEFAULT_EXPORT_FORMAT="json"
# User filtering
EXCLUDE_USERS="nobody,systemd-*"
INCLUDE_ONLY=""
# Advanced settings
MIN_UID=1000
MAX_UID=60000
SHOW_SYSTEM_USERS=false
DEFAULT_SORT_ORDER="asc"
DEFAULT_SORT_FIELD="user"| File | Location | Permission | Type |
|---|---|---|---|
| user-activity-reporter | /usr/bin/ | 755 | Executable |
| user-activity-lib.sh | /usr/share/user-activity-reporter/ | 644 | Library |
| user-activity.conf | /etc/user-activity-reporter/ | 644 | Config |
| user-activity-reporter.1 | /usr/share/man/man1/ | 644 | Man page |
sudo dpkg -r user-activity-reportersudo rpm -e user-activity-reportersudo make uninstall- Bash 4.0 or higher
- Standard Linux utilities:
who,last,ps,date,getent - Read access to
/etc/passwd,/var/log/wtmp, and/proc
# Make scripts executable
chmod +x scripts/*.sh
# Build Debian package
./scripts/build-deb.sh
# Build RPM package
./scripts/build-rpm.sh
# Build both packages
./scripts/build-all.sh
# Or use Makefile
make packageOutput will be in the build/ directory.
- Man Page:
man user-activity-reporter
user-activity-reporter -u fargol -w 10user-activity-reporter -o "report-$(date +%Y%m%d).json" -f jsonuser-activity-reporter -s processes -r --threshold 50user-activity-reporter -o activity.csv -f csvEnsure the script has execute permissions:
sudo chmod 755 /usr/bin/user-activity-reporterCheck if you have read access to system files:
ls -l /var/log/wtmp
ls -l /etc/passwdVerify the user exists:
id usernameMIT License - See LICENSE file.
This project was developed as a final project for the Operating Systems Lab course at the University of Tehran.
- Faculty of Farabi, University of Tehran
- Operating Systems Laboratory Course
- Academic Year 1404β1405