Shell GPT (OpenAI API)

Shell-GPT ist ein auf Python basierendes Kommandozeilen-Utility, das auf KI Large Language Models (LLM) basiert und für verschiedene Betriebssysteme und Shells geeignet ist. Es ermöglicht die Generierung von Shell-Befehlen, Code-Snippets, Kommentaren und Dokumentation. Die Anwendung unterstützt einfache Anfragen, Shell-Befehle und Code-Generierung, bietet Chat-Funktionalität zum Speichern und Fortsetzen von Unterhaltungen und ermöglicht die Integration in die Kommandozeile. Sie benötigt einen OpenAI API Key und bietet Anpassungsmöglichkeiten durch konfigurierbare Rollen und Funktionen. Weitere Details und Anwendungsinformationen finden Sie auf der PyPI-Webseite des Projekts.

Für unsere Zwecke in Kali Linux ist Shell GPT geeignet, um Befehle zu generieren, die vorgeschlagenen Parameter zu erklären und die Ausgabe zu analysieren. Dies ist besonders nützlich für komplexe Aufgaben und deren Dokumentation.

Die OpenAI-API ist kostenpflichtig. Die Kosten für die Verwendung der API hängen von der Anzahl der Tokens ab, die für die Anfrage und die Antwort verwendet werden. Detaillierte Informationen zu den Preisen und Plänen finden Sie auf: https://openai.com/pricing

Abhängigkeiten

Shell-GPT verwendet Python3, da es in Python geschrieben ist und Python-Funktionen sowie Bibliotheken für die Interaktion mit der OpenAI API nutzt. Zusätzlich wird das Paket jq (Command-line JSON processor) benötigt, um JSON-Antworten von der OpenAI API effizient zu verarbeiten und zu analysieren. Beide Komponenten sind wesentlich für die Funktionsweise und Leistungsfähigkeit von Shell-GPT. In einer standardmäßigen Linux Kali Installation sollten beide Pakete bereits installiert sein.

Installation

Installieren Sie Shell-GPT mit dem folgenden Kommando. Da Shell-GPT ein auf Python basierendes Programm ist, nutzen Sie dafür den Package Installer for Python (pip):

┌──(pronto㉿kali)-[~]
└─$ pip install shell-gpt

Die Programmdateien werden im Homedirectory des Benutzers im Unterverzeichnis .local/bin installiert:

┌──(pronto㉿kali)-[~/.local/bin]
└─$ ls -l
total 12
-rwxr-xr-x 1 pronto pronto 215 Jan 23 15:59 instructor
-rwxr-xr-x 1 pronto pronto 209 Jan 23 15:59 openai
-rwxr-xr-x 1 pronto pronto 201 Jan 23 15:59 sgpt

Starten Sie das Program sgpt und geben Sie Ihren API-Key ein:

┌──(pronto㉿kali)-[~/.local/bin]
└─$ python sgpt
Please enter your OpenAI API key:

Um zu überprüfen, ob der API-Schlüssel (Zeile 16) korrekt eingetragen wurde, oder um ihn ggf. später durch einen anderen zu ersetzen, können Sie die Angaben in der Datei ~/.config/shell_gpt/.sgptrc ändern:

CHAT_CACHE_PATH=/tmp/chat_cache
CACHE_PATH=/tmp/cache
CHAT_CACHE_LENGTH=100
CACHE_LENGTH=100
REQUEST_TIMEOUT=60
DEFAULT_MODEL=gpt-4-1106-preview
OPENAI_BASE_URL=https://api.openai.com/v1
DEFAULT_COLOR=magenta
ROLE_STORAGE_PATH=/home/pronto/.config/shell_gpt/roles
DEFAULT_EXECUTE_SHELL_CMD=false
DISABLE_STREAMING=false
CODE_THEME=dracula
OPENAI_FUNCTIONS_PATH=/home/pronto/.config/shell_gpt/functions
OPENAI_USE_FUNCTIONS=true
SHOW_FUNCTIONS_OUTPUT=false
OPENAI_API_KEY=<paste your key here>

Abschließend können Sie noch die notwendigen Pfade in Ihre Bash Konfigurationsdatei .bashrc eintragen:

┌──(pronto㉿kali)-[~]
└─$ echo "export PATH=$PATH:~/.local/bin:/usr/bin/python3" >> ~/.bashrc

Laden Sie die Konfigurationsdatei neu, oder starten Sie Ihr Terminal neu:

┌──(pronto㉿kali)-[~]
└─$ source ~/.bashrc

Benutzung

Ursprünglich hat OpenAI bei der Erstellung des ersten API-Keys ein Guthaben von 18$ gewährt, aber leider wurde dies im Jahr 2023 eingestellt. Jetzt müssen Sie mindestens 1$ auf Ihrem Konto haben, um sgpt benutzen zu können.

┌──(pronto㉿kali)-[~/.local/bin]
└─$ sgpt "Hello"
Hello! How can I assist you with programming or system administration today?

Optionen

Das Kommando sgpt bietet verschiedene Optionen zur Anpassung seiner Funktionalität. Dazu gehören Optionen für die Interaktion mit der OpenAI-API, das Setzen von Benutzereinstellungen, die Auswahl spezifischer Funktionen wie das Generieren von Code-Schnipseln oder Shell-Befehlen und die Anpassung der Chat-Funktion. Einige der gebräuchlichsten Optionen werden in den folgenden Abschnitten behandelt:

--chat

Der Parameter "--chat" in Shell-GPT wird verwendet, um eine Chat-Schnittstelle zu aktivieren, die es Benutzern ermöglicht, interaktiv mit Shell-GPT zu kommunizieren. Dies kann zum Beispiel verwendet werden, um Fragen zu stellen, Befehle zu generieren oder Hilfe bei der Code-Generierung zu erhalten. Damit der Chat zu einem späteren Zeitpunkt wieder aufgenommen werden kann, wird dem Befehl ein eindeutiger Session-Name zugewiesen, der die Identifizierung und Abgrenzung der Chats ermöglicht. Ein Beispiel für die Verwendung der Option --chat wäre:

┌──(pronto㉿kali)-[~/.local/bin]
└─$ sgpt --chat numbers "Meine Lieblingszahl ist 7"
Verstanden, ich werde mir merken, dass Ihre Lieblingszahl 7 ist. Wenn Sie möchten, dass ich diese   
Information in einem bestimmten Kontext verwende oder eine Aufgabe damit ausführen soll, lassen Sie 
es mich bitte wissen!                                                                               

┌──(pronto㉿kali)-[~/.local/bin]
└─$ sgpt --chat sol "Wie weit ist die Sonne von uns entfernt?"
Die Sonne ist durchschnittlich etwa 149,6 Millionen Kilometer (oder etwa 93 Millionen Meilen) von   
der Erde entfernt. Diese Entfernung wird als eine Astronomische Einheit (AE) bezeichnet und dient   
als Maßstab für Entfernungen im Sonnensystem.                                                       

┌──(pronto㉿kali)-[~/.local/bin]
└─$ sgpt --chat numbers2 "Meine Lieblingszahl ist 9"
Verstanden, ich werde mir merken, dass Ihre Lieblingszahl 9 ist. Wenn Sie möchten, dass ich diese   
Information in irgendeiner Weise verwende oder darauf Bezug nehme, lassen Sie es mich einfach       
wissen!                                                                                             

┌──(pronto㉿kali)-[~/.local/bin]
└─$ sgpt --chat numbers "Meine Lieblingszahl + 10 ist?"
Wenn Ihre Lieblingszahl 7 ist und Sie 10 hinzufügen, ist das Ergebnis:                              

7 + 10 = 17                                                                                         

┌──(pronto㉿kali)-[~/.local/bin]
└─$ sgpt --chat numbers2 "Meine Lieblingszahl + 10 ist?"
Ihre Lieblingszahl ist 9. Wenn Sie 10 dazu addieren, ist das Ergebnis:                              

9 + 10 = 19        

┌──(pronto㉿kali)-[~/.local/bin]
└─$ sgpt --chat zahl "Was ist meine Liebingszahl?"
Da ich keine persönlichen Daten speichern oder auf frühere Gespräche zurückgreifen kann, weiß ich   
nicht, was Ihre Lieblingszahl ist. Sie müssten mir diese Information geben, damit ich sie für die   
Dauer unseres Gesprächs "speichern" kann.                                                                                  

┌──(pronto㉿kali)-[~/.local/bin]
└─$ sgpt --list-chats
/tmp/chat_cache/sol
/tmp/chat_cache/numbers
/tmp/chat_cache/numbers2
/tmp/chat_cache/zahl

--shell

Der Parameter --shell in Shell-GPT wird verwendet, um spezielle Shell-Befehle zu generieren oder Vorschläge für Shell-Operationen zu erhalten. Dies ist besonders nützlich, wenn Sie nach effizienten Möglichkeiten suchen, bestimmte Aufgaben in der Kommandozeile auszuführen, oder wenn Sie Hilfe beim Shell-Scripting benötigen. Dabei spielt es keine Rolle, für welche Plattform Sie einen Befehl benötigen:

Windows Powershell:

┌──(pronto㉿kali)-[~/.local/bin]
└─$ sgpt --shell "Welches Powershell-Kommando zeigt mir die Postfachgröße eines Benutzers an?"
Get-MailboxStatistics -Identity "Benutzername" | Select DisplayName, TotalItemSize, ItemCount
[E]xecute, [D]escribe, [A]bort: D
The command Get-MailboxStatistics -Identity "Benutzername" | Select DisplayName, TotalItemSize,     
ItemCount retrieves mailbox statistics for the specified user and then pipes the output to select   
only the DisplayName, TotalItemSize, and ItemCount properties.                                      

 • -Identity "Benutzername": Specifies the identity of the mailbox to retrieve statistics for.      
   "Benutzername" should be replaced with the actual username or email address of the mailbox.      
 • Select: This is an alias for the Select-Object cmdlet, which is used to select specific          
   properties from the input objects.                                                               
 • DisplayName: A property of the mailbox that shows the display name of the user.                  
 • TotalItemSize: A property that indicates the total size of all items within the mailbox.         
 • ItemCount: A property that represents the number of items (such as emails) within the mailbox.   
[E]xecute, [D]escribe, [A]bort: A

Linux Crontab:

┌──(pronto㉿kali)-[~/.local/bin]
└─$ sgpt --shell "Welchen Cron-Job Eintrag müsste ich setzen, damit ein bestimmtes Kommando jeden Tag um Mittag von root ausgeführt wird?"
echo "0 12 * * * root /pfad/zum/kommando" | sudo tee -a /etc/crontab
[E]xecute, [D]escribe, [A]bort: D
The command appends the given cron job to the system's crontab file using echo to output the cron   
schedule, which is then written to /etc/crontab with elevated privileges using sudo and tee -a.     

 • echo: Command used to display a line of text/string that is passed as an argument.               
 • "0 12 * * * root /pfad/zum/kommando": The string to be echoed, representing a cron job scheduled 
   to run at 12:00 PM every day, executed by the user root, with the command located at             
   /pfad/zum/kommando.                                                                              
 • |: A pipe that redirects the output of the echo command to the input of the following command.   
 • sudo: Executes a command with superuser privileges.                                              
 • tee: Reads from standard input and writes to standard output and files.                          
 • -a: Option for tee that appends the input to the given file(s) instead of overwriting.           
 • /etc/crontab: The file to which the cron job is appended.                                        
[E]xecute, [D]escribe, [A]bort: A

Happy computing...

Updated on 11. Februar 2024
Was this article helpful?

Related Articles