Synology DiskStation: Command Line Prompt verbessern

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.

TexteigenschaftenVordergrundfarbenHintergrundfarben
0keine Gestaltung30schwarz40schwarz
1Fettschrift31rot41rot
4unterstrichen32grün42grün
5blinken33gelb43gelb
7Farben umkehren34blau44blau
8verstecken35magenta45magenta
36cyan46cyan
37weiß47weiß

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
VariableBedeutungBeispiel
\hHostnameDiskStation
\nneue Zeile
\uBenutzernameroot
\wvollständiges Arbeitsverzeichnis/volume1/@appstore
\WVerzeichnisname@appstore
\nnnASCII-Zeichen (Ersetze nnn durch Octal-Code, z.B. \043)#
Octal-Codes für ausgewählte Sonderzeichen
ZeichenOctalZeichenOctalZeichenOctalZeichenOctal
!041*052=075`140
042+053>076{173
#043,054?077|174
$044055@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 "

Synology DiskStation: Kommandozeilen-Prompt testen

Synology DiskStation: Kommandozeilen-Prompt testen

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 "

Sebastian

...ist staatlich geprüfter Techniker für Elektrotechnik, Schwerpunkt Prozessautomatisierung und Energietechnik. Die Themen Automatisierung und Programmierung haben es ihm besonders angetan.
Außerdem ist er für jede technische Spielerei zu haben 😉
Sebastian

1 Comment

  1. Avatar
    Antworten ALex K.

    Hallo Sebstian,

    hat bei mir super funktioniert!
    Vielen Dank für den sehr guten Artikel.

    Ich werde wohl Dein ganzes Blog zur Synology lesen

    Gruß
    Alex

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.