Wer sich des öfteren auf der Kommandozeile einer Synology DiskStation bewegt, wird sich sicherlich schonmal darüber geärgert haben, dass der Prompt mit einem kaum aussagekräftigen DiskStation>
daher kommt. Andere Linux-basierte Systeme zeigen dort auch den Benutzernamen und das aktuelle Verzeichnis an.
Im folgenden Beitrag möchte ich Euch zeigen, wie man sich den Prompt nach belieben anpassen kann.
Grundlagen
Der Prompt ist für jeden Benutzer separat einzustellen. Da in der Regel jedoch nur der root
Zugriff auf die Kommandozeile der DiskStation hat, zeige ich es anhand dieses Benutzers.
Linux-Systeme haben meist mehrere Prompts, die durchnummeriert sind. PS1
ist der Standardprompt auf der Kommandozeile, also der, der immer angezeigt wird. PS2
hingegen wird angezeigt, wenn man einen unvollständigen Befehl eingegeben hat, der noch weitere Argumente benötigt, um abgearbeitet zu werden. Der PS2-Prompt sieht normalerweise so aus: >
. Wir bleiben hier beim PS1.
Der Prompt wird in der .profile
-Datei des Benutzers definiert, die sich im jeweiligen Benutzerordner ~
, bzw. /root
befindet. Es gibt verschiedene Platzhalter die eingebunden werden können. Außerdem kann man die einzelnen Elemente auch farbig, fett oder blinkend hervorheben.
Gestaltungsmöglichkeiten
Es gibt 3 verschiedene Möglichkeiten den Text zu formatieren. Das sind die Texteigenschaften, Vordergrundfarbe und Hintergrundfarbe. Zu jedem Gestaltungselement gibt es einen zugehörigen ANSI-Code.
Texteigenschaften | Vordergrundfarben | Hintergrundfarben | |||||
0 | keine Gestaltung | 30 | schwarz | 40 | schwarz | ||
1 | Fettschrift | 31 | rot | 41 | rot | ||
4 | unterstrichen | 32 | grün | 42 | grün | ||
5 | blinken | 33 | gelb | 43 | gelb | ||
7 | Farben umkehren | 34 | blau | 44 | blau | ||
8 | verstecken | 35 | magenta | 45 | magenta | ||
36 | cyan | 46 | cyan | ||||
37 | weiß | 47 | weiß |
Verwendet werden sie nach dem Schema \e[n;nn;nnm , sodass sich für fetten, grünen Text auf rotem Hintergrund folgende Werte ergeben:
\e[1;32;41m
Benötigt man keine Hintergrundfarbe, lässt man sie einfach weg. Um die Textgestaltung abzuschließen und nachfolgenden Text wieder normal zu formatieren wird \e[m
verwendet.
Variablen
Mit Variablen wird der Prompt dynamisch gestaltet und zeigt wechselnden Inhalt an. Die aus meiner Sicht interessanteste und wichtigste Variable ist die für das aktuelle Verzeichnis. Aber es gibt noch mehr. Leider funktionieren nicht alle Parameter, die auf anderen Linux-Systemen verfügbar sind, daher gibt es hier nur eine reduzierte Auswahl:
Variablen | ||
Variable | Bedeutung | Beispiel |
\h | Hostname | DiskStation |
\n | neue Zeile | |
\u | Benutzername | root |
\w | vollständiges Arbeitsverzeichnis | /volume1/@appstore |
\W | Verzeichnisname | @appstore |
\nnn | ASCII-Zeichen (Ersetze nnn durch Octal-Code, z.B. \043) | # |
Octal-Codes für ausgewählte Sonderzeichen | ||||||||||
Zeichen | Octal | Zeichen | Octal | Zeichen | Octal | Zeichen | Octal | |||
! | 041 | * | 052 | = | 075 | ` | 140 | |||
„ | 042 | + | 053 | > | 076 | { | 173 | |||
# | 043 | , | 054 | ? | 077 | | | 174 | |||
$ | 044 | – | 055 | @ | 100 | } | 175 | |||
% | 045 | . | 056 | [ | 133 | ~ | 176 | |||
& | 046 | / | 057 | \ | 134 | |||||
‚ | 047 | : | 072 | ] | 135 | |||||
( | 050 | ; | 073 | ^ | 136 | |||||
) | 051 | < | 074 | _ | 137 |
Prompt zusammensetzen und ausprobieren
Bevor wir unseren Prompt fest in den Profileinstellungen verankert, probieren wir unsere Zusammenstellung erstmal aus. Mein Prompt soll so aussehen:
root@DiskStation /volume1/@appstore $
Er beinhaltet den Benutzernamen, den Hostnamen, sowie das aktuelle Verzeichnis. Als letztes Zeichen kommt im Standardlinux ein $
für normale Nutzer, oder #
für Benutzer mit root-Rechten. Mir persönlich ist das ziemlich egal, denn ich nutze nur den root
. Für das von mir gewünschte Ergebnis muss ich den Prompt wie folgt formatieren:
\e[1;32m\u@\h\e[m \e[1;34m\w $\e[m - - - -- - --- - - -- - - --- | | | || | | | | | | | | | | | || | | | | | | | +--> Textformatierung beenden | | | || | | | | | | +-----> $ | | | || | | | | | +-------> Vollständiges Arbeitsverzeichnis | | | || | | | | +-----------> Textfarbe blau | | | || | | | +-------------> Fettschrift | | | || | | +---------------> Textformatierung beginnen | | | || | +-------------------> Textformatierung beenden | | | || +----------------------> Hostname | | | |+------------------------> @ | | | +-------------------------> Benutzername | | +-----------------------------> Textfarbe grün | +-------------------------------> Fettschrift +---------------------------------> Textformatierung beginnen
Per SSH verbinden wir uns auf die DiskStation und setzen folgenden Befehl ab, um uns das Ergebnis unserer Zusammenstellung anzuschauen:
DS> export PS1="\e[1;32m\u@\h\e[m \e[1;34m\w \$\e[m "
Der Prompt wird direkt entsprechend den Vorgaben formatiert und bleibt so bestehen, bis wir die Sitzung verlassen. Da es eventuell ein paar Versuche brauchen wird, bis das gewünschte Ergebnis erscheint, kann man so die verschiedenen Möglichkeiten gut ausprobieren.
Nachdem wir das gewünschte Ergebnis erhalten haben, wollen wir es jetzt noch fest in den Einstellungen verankern, damit der Prompt auch nach dem Beenden der Verbindung seine Formatierung behält. Dazu editieren wir die Datei .profile
im Benutzerverzeichnis:
DS> vi /root/.profile
Auf Zeile 21 finden wir die Formatierung für den bisherigen Prompt:
# umask 022 #PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin #export PATH #This fixes the backspace when telnetting in. #if [ "$TERM" != "linux" ]; then # stty erase #fi HOME=/root export HOME TERM=${TERM:-cons25} export TERM PAGER=more export PAGER PS1="`hostname`> " alias dir="ls -al" alias ll="ls -la"
Im Editor begeben wir uns zur Zeile 21, drücken wir die Taste i
für den Einfügemodus und kommentieren diese Zeile mit einer #
aus. Auf der nächsten Zeile fügen wir unsere Prompt-Formatierung, diesmal jedoch ohne das export
, ein, sodass sich nun folgender Inhalt ergibt:
# umask 022 #PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin #export PATH #This fixes the backspace when telnetting in. #if [ "$TERM" != "linux" ]; then # stty erase #fi HOME=/root export HOME TERM=${TERM:-cons25} export TERM PAGER=more export PAGER #PS1="`hostname`> " PS1="\e[1;32m\u@\h\e[m \e[1;34m\w \$\e[m " alias dir="ls -al" alias ll="ls -la"
Mit der Esc
-Taste beenden wir den Einfügemodus und schreiben :wq
, um die Änderungen zu speichern und den Editor zu verlassen.
Der neue Prompt ist nun dauerhaft geändert und erscheint auch nach dem Beenden und erneuten Herstellen der Verbindung wie gewünscht.
Tipp: Auf produktiven Systemen verwende ich übrigens einen magenta-farbenen Hostnamen, damit ich nicht versehentlich einen Befehl absetze, der für ein virtualisiertes Testsystem, wie beispielsweise XPEnology, gedacht war. Die Formatierung sieht dann so aus:
PS1="\e[1;32m\u@\e[m\e[1;35m\h\e[m \e[1;34m\w \$\e[m "
- Proxmox: „Failed to connect to Server“ mit Safari auf MacOS - 28. Januar 2023
- Loxone: Benachrichtigung per Telegram - 15. Januar 2022
- Telegram: Nachrichten per Bot von der Heimautomation aufs Handy - 2. Januar 2022
1 Comment