Moderne Web-Anwendung zur Verwaltung von Systembefehlen. Organisiert Befehle nach Kategorien (Linux, Proxmox, Docker, Applications) mit Fuzzy-Suche, Sidebar-CRUD, Drag & Drop und Syntax-Highlighting.
- CRUD - Befehle erstellen, bearbeiten, löschen
- Kategorien-Management - Kategorien und Subkategorien direkt in der Sidebar erstellen, umbenennen und löschen
- Fuzzy-Suche - Levenshtein-basiert, findet auch bei Tippfehlern ("Lunix USer" → "Linux User-Verwaltung")
- Drag & Drop - Kategorien umsortieren oder per Drop zusammenführen, Subkategorien verschieben
- One-Click-Copy - Befehle direkt kopieren, optional mit SSH/Verzeichnis-Kontext
- Syntax-Highlighting - Shell-Befehle farblich hervorgehoben (highlight.js)
- Export/Import - JSON-Export und -Import (merge oder replace)
- Dark Mode - Modernes, dunkles Design mit CSS-Variablen
- Responsive - Optimiert für Desktop, Tablet und Mobile
- Auto-Setup - Datenbank-Tabellen und 62 Beispielbefehle werden automatisch erstellt
- Tastaturkürzel -
Ctrl+KSuche,Ctrl+NNeuer Befehl,EscModal schließen
📁 Linux [+] [✎] [🗑] │ Befehl Beschreibung Tags
├─ User-Verwaltung [✎] [🗑] │ useradd -m -s /bin/bash Erstellt neuen User user,erstellen
├─ Dateien [✎] [🗑] │ passwd username Passwort setzen passwort
└─ Berechtigungen [✎] [🗑] │ usermod -aG group user Gruppe hinzufügen gruppe
📁 Docker │
📁 Proxmox │
📁 Applications │
- Apache2 mit PHP (>= 8.0)
- MariaDB / MySQL (>= 10.5)
- PHP-Module:
php-mysql,php-json
cd /opt
git clone https://github.com/Frank-Jettenbach/befehlsmanager.gitln -s /opt/befehlsmanager /var/www/html/befehlsmanagerCREATE DATABASE befehlsmanager CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'frank'@'localhost' IDENTIFIED BY 'dein_passwort';
GRANT ALL PRIVILEGES ON befehlsmanager.* TO 'frank'@'localhost';
FLUSH PRIVILEGES;Datei config.php bearbeiten:
return [
'db' => [
'host' => 'localhost',
'name' => 'befehlsmanager',
'user' => 'frank',
'pass' => 'dein_passwort',
],
'app' => [
'title' => 'Befehlsmanager',
'base_url' => '/befehlsmanager',
],
];http://HOSTNAME/befehlsmanager/
Beim ersten Aufruf werden beide Tabellen und 62 Beispielbefehle automatisch erstellt.
MariaDB mit zwei Tabellen:
-- Eigenständige Kategorie-Verwaltung (auch leere Kategorien)
CREATE TABLE kategorien (
id INT AUTO_INCREMENT PRIMARY KEY,
kategorie VARCHAR(100) NOT NULL,
subkategorie VARCHAR(100) DEFAULT NULL,
sort_order INT DEFAULT 0,
UNIQUE KEY uq_kat_sub (kategorie, subkategorie)
);
-- Befehle mit Volltext-Index
CREATE TABLE befehle (
id INT AUTO_INCREMENT PRIMARY KEY,
kategorie VARCHAR(100) NOT NULL,
subkategorie VARCHAR(100) NOT NULL,
titel VARCHAR(255) NOT NULL,
befehl TEXT NOT NULL,
beschreibung TEXT DEFAULT NULL,
beispiel TEXT DEFAULT NULL,
tags VARCHAR(500) DEFAULT '',
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FULLTEXT INDEX ft_search (titel, befehl, beschreibung, tags, beispiel)
);| Aktion | Methode | URL |
|---|---|---|
| Alle Befehle | GET | api.php?action=list |
| Filtern | GET | api.php?action=list&kategorie=Linux&search=docker |
| Einzelner Befehl | GET | api.php?action=get&id=1 |
| Erstellen | POST | api.php?action=create |
| Aktualisieren | POST | api.php?action=update |
| Löschen | POST | api.php?action=delete |
| Aktion | Methode | URL |
|---|---|---|
| Kategorien laden | GET | api.php?action=categories |
| Kategorie hinzufügen | POST | api.php?action=add_kategorie |
| Kategorie umbenennen | POST | api.php?action=rename_kategorie |
| Subkategorie umbenennen | POST | api.php?action=rename_subkategorie |
| Kategorie löschen | POST | api.php?action=delete_kategorie |
| Subkategorie löschen | POST | api.php?action=delete_subkategorie |
| Kategorie verschieben | POST | api.php?action=move_kategorie |
| Subkategorie verschieben | POST | api.php?action=move_subkategorie |
| Reihenfolge speichern | POST | api.php?action=reorder_kategorien |
| Befehle zählen | GET | api.php?action=count_befehle&kategorie=Linux |
| Aktion | Methode | URL |
|---|---|---|
| Tags | GET | api.php?action=tags |
| Export | GET | api.php?action=export |
| Import | POST | api.php?action=import&mode=merge |
Beim Hover über Kategorien/Subkategorien erscheinen Action-Icons:
- [+] Sidebar-Header: Neue Kategorie erstellen (Inline-Input)
- [+] bei Kategorie: Neue Subkategorie hinzufügen
- [✎] Inline-Rename (Text wird zu Input, Enter = Speichern, Esc = Abbrechen)
- [🗑] Löschen mit Bestätigungs-Dialog (zeigt Anzahl betroffener Befehle)
- Kategorie auf Kategorie (Rand): Reihenfolge ändern →
sort_orderin DB - Kategorie auf Kategorie (Mitte): Alle Befehle zusammenführen
- Subkategorie auf Kategorie: Subkategorie in andere Kategorie verschieben
Client-seitige Suche mit Levenshtein-Algorithmus:
- Alle Befehle werden einmalig geladen und lokal gefiltert
- Exakte Substring-Matches bekommen höchste Priorität
- Fuzzy-Matches mit ≥60% Ähnlichkeit werden einbezogen
- Ergebnisse nach Relevanz sortiert
Beispiel: "Lunix USer" findet "Linux User-Verwaltung" (lunix↔linux: 80%, user↔user: 100%)
Falls du von einer älteren SQLite-Version migrierst:
php migrate.phpDas Script liest alle Befehle aus data/befehlsmanager.db und schreibt sie in MySQL.
mysqldump -u frank -p befehlsmanager > backup_$(date +%Y-%m-%d).sqlOder JSON-Export über die Weboberfläche: Button "Export" in der Toolbar.
befehlsmanager/
├── config.php # DB-Credentials und App-Konfiguration
├── db.php # PDO-Verbindung, Auto-Setup Tabellen
├── api.php # REST API (15 Endpunkte)
├── index.php # Frontend HTML
├── menu.php # Navigationsleiste
├── seed.php # 62 Beispielbefehle + Kategorien
├── migrate.php # SQLite → MySQL Migration
├── assets/
│ ├── app.js # Frontend-Logik (Fuzzy-Search, CRUD, DnD)
│ └── style.css # Dark-Theme Stylesheet
└── data/ # (alt) SQLite-Datenbank
- Backend: PHP 8 + MariaDB (PDO, Prepared Statements)
- Frontend: Vanilla JavaScript (IIFE, kein Framework)
- Styling: Custom CSS mit CSS-Variablen (Dark Mode)
- Syntax-Highlighting: highlight.js
- Webserver: Apache2