Skip to content
Christopher Ferrari

Published on May 13, 2025

A minimal CLI tool to analyze your shell command usage patterns. Gives insights into your most-used commands and usage trends.

Features:

  • Multi-shell support - Works with both Bash and Zsh
  • Smart analysis - Basic stats or detailed breakdowns
  • Command-specific analysis - Deep dive into specific commands and their variations
  • Timeline tracking - See usage patterns over time
  • Alias resolution - Resolves shell aliases to show actual command usage
  • Flexible filtering - Filter by date ranges, exclude commands, analyze specific time periods
  • Command correlations - Find commands often used together
  • Export reports - Save analysis to files

Quick Start:

# Clone and install
git clone https://github.com/Tecttano/freq.git
cd freq
chmod +x install.sh
./install.sh

# Basic usage
freq # Show top 10 commands
freq -n 20 # Show top 20 commands
freq -a # Detailed analysis

Installation:

Quick Install

  • Clone the repository:
git clone https://github.com/Tecttano/freq.git
cd freq
  • Run the installation script:
chmod +x install.sh
./install.sh
  • Start using freq:
freq
freq -a
freq -c git

Manual Installation

If you prefer to install manually:

# Copy to system directory
sudo cp freq.py /usr/local/bin/freq
sudo chmod +x /usr/local/bin/freq

User Installation (No sudo required)

If you don't have sudo access:

# Create local bin directory
mkdir -p ~/.local/bin

# Copy the script
cp freq.py ~/.local/bin/freq
chmod +x ~/.local/bin/freq

# Add to PATH (add this to your ~/.bashrc or ~/.zshrc)
export PATH="$HOME/.local/bin:$PATH"

# Reload your shell
source ~/.bashrc # or source ~/.zshrc

Usage Examples:

Basic Analysis

freq # Top 10 commands
freq -n 5 # Top 5 commands
freq -n 20 # Top 20 commands

Advanced Analysis

freq -a # Detailed breakdown with stats
freq -a -n 15 # Detailed analysis, top 15 commands

Command-Specific Analysis

freq -c git # Analyze all git command variations
freq -c python3 # Analyze python3 usage patterns
freq -c git --timeline # Git usage with timeline
freq -c npm --correlations # Commands often used with npm

Date Filtering

freq -d today # Today's commands only
freq -d week # Last 7 days
freq -d month # Last 30 days
freq -d 2025-05-01 # Specific date
freq -d 2025-05-01:2025-05-31 # Date range

Filtering and Exclusions

freq -x "ls,cd,pwd" # Exclude common navigation commands
freq --resolve-aliases # Resolve shell aliases
freq -c git -d week -x "git status" # Git commands this week, exclude status

Export Reports

freq -a -o report.txt # Save detailed analysis
freq -c git --timeline -o git_report.txt # Save git analysis

Advanced Combinations

# Detailed analysis with aliases resolved, excluding noise
freq -a --resolve-aliases -x "ls,cd,clear" -n 15

# Git analysis for last month with timeline and correlations
freq -c git -d month --timeline --correlations

# Today's activity excluding basic commands, save report
freq -d today -x "ls,cd,pwd,clear" -o daily_activity.txt

Command Options:

Option Description
-n, --number Number of top commands to show (default: 10)
-a, --advanced Show detailed analysis with statistics
-c, --command Analyze specific command and variations
-t, --timeline Show usage timeline (use with -c)
-d, --date Filter by date range (1h, 24h, week, month, year, today, YYYY-MM-DD)
-x, --exclude Exclude commands (comma-separated)
--correlations Show command correlations (use with -c)
--resolve-aliases Resolve shell aliases to actual commands
-o, --output Save output to file
-s, --shell Specify shell type (bash, zsh, all)
-f, --file Use custom history file
--list-files List available history files
--debug Show debug information

Sample Output:

Basic Analysis

Analyzed 959 commands from zsh history
 1. ls 138
 2. git 84
 3. python3 80
 4. sudo 67
 5. nano 45

Advanced Analysis

=== TOP 10 MOST USED COMMANDS ===
 1. ls (138 times)
 2. git (84 times)
 3. python3 (80 times)

=== TIME RANGE ANALYSIS ===
Data from: April 17, 2025
Data to: May 28, 2025
Total days: 42
Average commands per day: 22.8

=== COMMAND DIVERSITY ===
Unique commands: 108
Commands used only once: 42 (38.9%)

Command-Specific Analysis

=== TOP 10 'GIT' VARIATIONS ===
Total 'git' executions: 84

 1. git init (8 times)
 2. git commit -m "Initial" (8 times)
 3. git add . (7 times)
 4. git push origin main (6 times)

=== USAGE TIMELINE ===
First used: April 17, 2025 at 09:22
Last used: May 23, 2025 at 12:04
Average: 2.3 times per day over 37 days

Smart Features:

  • Auto-timeline: Automatically enables timeline for development commands (git, python3, node, etc.)
  • Recent activity detection: Auto-filters to last 24 hours when keywords like "today" or "recent" are detected
  • Alias resolution: Finds and resolves aliases from .bashrc, .zshrc, and other config files
  • Early filtering: Optimized parsing for large history files
  • Cross-shell detection: Automatically detects and uses the appropriate shell history format

Requirements:

  • Python 3.6+
  • Linux/Unix-like system (Windows WSL supported)
  • Bash or Zsh shell
  • Optional: psutil package for enhanced shell detection

Supported Shells:

  • Zsh - Full support including timestamped history
  • Bash - Full support with and without timestamps
  • Auto-detection - Automatically detects shell type and history format

History File Locations:

Zsh:

  • ~/.zsh_history
  • ~/.histfile
  • /root/.zsh_history Bash:
  • ~/.bash_history
  • /root/.bash_history

Troubleshooting:

Command not found after installation

# Check if installed correctly
which freq
ls -la /usr/local/bin/freq

# If using user install, ensure PATH is set
echo $PATH | grep -o ~/.local/bin

No history found

# List available history files
freq --list-files

# Use specific file
freq -f /path/to/your/history/file

# Check your shell's history settings
echo $HISTFILE

Permission errors

# For user installation (no sudo required)
./install.sh user

# Or install to user directory manually
cp freq.py ~/.local/bin/freq

Development:

Contributing

  • Fork the repository
  • Create a feature branch
  • Make your changes
  • Test with various shell configurations
  • Submit a pull request

Testing

# Test basic functionality
freq --debug
freq --list-files

# Test with different shells
freq -s bash
freq -s zsh

# Test date filtering
freq -d today --debug

Uninstall:

# Using install script
./install.sh uninstall

# Manual removal
sudo rm /usr/local/bin/freq

# User installation
rm ~/.local/bin/freq