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.

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 "

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

1 Comment

  1. 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.

WordPress Cookie Hinweis von Real Cookie Banner