🎯 Enhanced Features: - Integrated navi, cheat, tldr, and fzf for interactive help - Custom cheat sheets for PDF analysis, malware analysis, and system utilities - find-tool command for fuzzy searching through all REMnux tools - Comprehensive help command with workflows and examples - Complete offline documentation system 📚 Help System Components: - help - Main help system - help tools [term] - Search for tools (fuzzy matching) - help cheat <tool> - Show command examples - help examples - Browse examples interactively (navi + fzf) - help pdf/malware/forensics - Analysis workflows - help --offline - Verify offline capabilities 🛠️ Tools Added: - navi: Interactive cheat sheet browser - cheat: Command-line cheat sheets - tldr: Quick command examples - fzf: Fuzzy finder (already included) All documentation works completely offline with local REMnux docs database and custom cheat sheets for analysis workflows.
169 lines
5.6 KiB
Bash
Executable File
169 lines
5.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# REMnux Tool Finder - Fuzzy search through all available tools
|
|
# Usage: find-tool [search_term]
|
|
|
|
TOOLS_DB="/opt/remnux-docs/tools.db"
|
|
DOCS_DIR="/opt/remnux-docs"
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
BLUE='\033[0;34m'
|
|
YELLOW='\033[1;33m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m' # No Color
|
|
|
|
show_help() {
|
|
echo -e "${CYAN}🔍 REMnux Tool Finder${NC}"
|
|
echo ""
|
|
echo "Usage:"
|
|
echo " find-tool [search_term] - Search for tools"
|
|
echo " find-tool --list - List all available tools"
|
|
echo " find-tool --categories - Show tool categories"
|
|
echo " find-tool --interactive - Interactive fuzzy search (requires fzf)"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " find-tool pdf - Find all PDF-related tools"
|
|
echo " find-tool javascript - Find JavaScript analysis tools"
|
|
echo " find-tool parser - Find all parsers"
|
|
echo " find-tool --interactive - Browse all tools interactively"
|
|
}
|
|
|
|
list_categories() {
|
|
echo -e "${CYAN}📂 Available Tool Categories:${NC}"
|
|
if [[ -f "$TOOLS_DB" ]]; then
|
|
awk -F'|' '/^[^#]/ {print $3}' "$TOOLS_DB" | sort -u | while read -r category; do
|
|
count=$(awk -F'|' -v cat="$category" '/^[^#]/ && $3 == cat {count++} END {print count+0}' "$TOOLS_DB")
|
|
echo -e " ${GREEN}•${NC} $category (${YELLOW}$count tools${NC})"
|
|
done
|
|
else
|
|
echo -e "${RED}❌ Tools database not found. Run container build to initialize.${NC}"
|
|
fi
|
|
}
|
|
|
|
list_all_tools() {
|
|
echo -e "${CYAN}🛠️ All Available Tools:${NC}"
|
|
if [[ -f "$TOOLS_DB" ]]; then
|
|
awk -F'|' '/^[^#]/ {printf "%-20s %s\n", $1, $2}' "$TOOLS_DB" | sort
|
|
else
|
|
echo -e "${RED}❌ Tools database not found.${NC}"
|
|
fi
|
|
}
|
|
|
|
search_tools() {
|
|
local search_term="$1"
|
|
|
|
if [[ -z "$search_term" ]]; then
|
|
echo -e "${RED}❌ Please provide a search term${NC}"
|
|
show_help
|
|
return 1
|
|
fi
|
|
|
|
if [[ ! -f "$TOOLS_DB" ]]; then
|
|
echo -e "${RED}❌ Tools database not found.${NC}"
|
|
return 1
|
|
fi
|
|
|
|
echo -e "${CYAN}🔍 Searching for: ${YELLOW}$search_term${NC}"
|
|
echo ""
|
|
|
|
# Search in tool names, descriptions, categories, and usage hints
|
|
local matches=$(awk -F'|' -v term="$search_term" '
|
|
/^[^#]/ && (tolower($1) ~ tolower(term) || tolower($2) ~ tolower(term) || tolower($3) ~ tolower(term) || tolower($4) ~ tolower(term)) {
|
|
print $0
|
|
}' "$TOOLS_DB")
|
|
|
|
if [[ -z "$matches" ]]; then
|
|
echo -e "${YELLOW}⚠️ No tools found matching '$search_term'${NC}"
|
|
echo ""
|
|
echo -e "💡 Try broader terms like: ${GREEN}pdf${NC}, ${GREEN}malware${NC}, ${GREEN}javascript${NC}, ${GREEN}analysis${NC}"
|
|
return 0
|
|
fi
|
|
|
|
local count=0
|
|
echo "$matches" | while IFS='|' read -r name description category usage; do
|
|
count=$((count + 1))
|
|
echo -e "${GREEN}🔧 $name${NC}"
|
|
echo -e " ${BLUE}Description:${NC} $description"
|
|
echo -e " ${BLUE}Category:${NC} $category"
|
|
if [[ -n "$usage" && "$usage" != " " ]]; then
|
|
echo -e " ${BLUE}Usage:${NC} $usage"
|
|
fi
|
|
|
|
# Check if tool exists on system
|
|
if command -v "$name" >/dev/null 2>&1; then
|
|
echo -e " ${GREEN}✓ Available${NC}"
|
|
else
|
|
echo -e " ${YELLOW}⚠ Check path or alternative name${NC}"
|
|
fi
|
|
echo ""
|
|
done
|
|
|
|
local match_count=$(echo "$matches" | wc -l)
|
|
echo -e "${CYAN}📊 Found $match_count tool(s) matching '$search_term'${NC}"
|
|
}
|
|
|
|
interactive_search() {
|
|
if ! command -v fzf >/dev/null 2>&1; then
|
|
echo -e "${YELLOW}⚠️ fzf not found. Falling back to simple search.${NC}"
|
|
echo "Type search term and press Enter (or 'quit' to exit):"
|
|
while read -r -p "🔍 Search: " term; do
|
|
if [[ "$term" == "quit" || "$term" == "exit" ]]; then
|
|
break
|
|
fi
|
|
search_tools "$term"
|
|
echo "---"
|
|
done
|
|
return
|
|
fi
|
|
|
|
echo -e "${CYAN}🎯 Interactive Tool Search${NC}"
|
|
echo -e "Use ${GREEN}↑/↓${NC} to navigate, ${GREEN}Enter${NC} to select, ${GREEN}Ctrl+C${NC} to exit"
|
|
echo ""
|
|
|
|
local selected=$(awk -F'|' '/^[^#]/ {printf "%-20s │ %-30s │ %s\n", $1, $2, $3}' "$TOOLS_DB" | \
|
|
fzf --header="REMnux Tools - Select to see details" \
|
|
--header-lines=0 \
|
|
--preview='echo {} | cut -d"│" -f1 | xargs -I{} awk -F"|" -v tool="{}" "BEGIN{IGNORECASE=1} \$1 ~ tool {print \"🔧 Tool: \" \$1; print \"📝 Description: \" \$2; print \"📂 Category: \" \$3; if(\$4) print \"💡 Usage: \" \$4}" /opt/remnux-docs/tools.db' \
|
|
--preview-window=right:50%:wrap)
|
|
|
|
if [[ -n "$selected" ]]; then
|
|
local tool_name=$(echo "$selected" | cut -d'│' -f1 | xargs)
|
|
echo -e "${GREEN}Selected tool: $tool_name${NC}"
|
|
|
|
# Show detailed info
|
|
search_tools "$tool_name"
|
|
|
|
# Try to show help for the tool
|
|
echo -e "${CYAN}📖 Quick Help:${NC}"
|
|
if command -v "$tool_name" >/dev/null 2>&1; then
|
|
echo "Running: $tool_name --help"
|
|
timeout 3s "$tool_name" --help 2>/dev/null | head -10 || echo "No help available or timeout"
|
|
else
|
|
echo "Tool may be available under a different name or path"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Main logic
|
|
case "${1:-}" in
|
|
--help|-h|help)
|
|
show_help
|
|
;;
|
|
--list|-l)
|
|
list_all_tools
|
|
;;
|
|
--categories|-c)
|
|
list_categories
|
|
;;
|
|
--interactive|-i)
|
|
interactive_search
|
|
;;
|
|
"")
|
|
show_help
|
|
;;
|
|
*)
|
|
search_tools "$1"
|
|
;;
|
|
esac |