Linux - Unix - Shell
Die Shell ist das Programm, das nach dem Konsolen Login gestartet wird. Die Shell ist das klassische Arbeitsinstrument in Linux/Unix Umgebungen, in der Befehle, Kommandos und Programme ausgeführt werden können.
Es gibt in UNIX/LINUX Systemen eine ganze Reihe von Shells, die auch verschiedene Kommandoreferenzen besitzen. Der Ursprung der Shells ist die Bourne-Shell (sh), von S. R. Bourne 1978 entwickelt. Auf neueren Linux Systemen wird meist die „bash“ Shell verwendet.
In der Datei „/etc/shells“ stehen die Pfadnamen gültiger Loginshells. Die verfügbaren Shells befinden sich in „/bin/<shell>“. Die Standard Shell des Users wird in der Datei „etc/passwd“ gespeichert.
Hier stehen hinter jedem User die verfügbaren Shells mit Pfadangabe („/bin/bash“, „/bin/sh“ u.s.w.).
Zur Verkettung oder an bestimmte Bedingungen geknüpfte Ausführung von Shell Befehlen können Shellscripte verwendet werden. Mit Ihnen lassen sich auch komplexere Aufgaben erledigen. Um ein „Script“ ausführen zu können muß die Script Datei ausfürbar (xBit) sein.
Beispiel einer /etc/shells:
user@home:~# cat /etc/shells # /etc/shells: valid login shells /bin/csh /bin/sh /usr/bin/es /usr/bin/ksh /bin/ksh /usr/bin/rc /usr/bin/tcsh /bin/tcsh /usr/bin/esh /bin/dash /bin/bash /bin/rbash
Shells
Bourne-Again-Shell (bash)
Die Bash ist bei Linux die am meisten benutzte Shell und stellt eine freie implementierung der Bourne- und der Korn-Shell dar.
Korn Shell (ksh)
Die Korn Shell (ksh) ist in Unix und BSD Systemen meist die Standard Shell. Bei dieser Shell wurden interaktive Merkmale und Funktionen der C-Shell hinzugefügt. Bei manchen Distributionen wird die „ksh“ durch die „bash“ ersetzt und stellt eine weitere Version der Korn Shell, die Public Domain Korn-Shell (pdksh) zur verfügung.
Z-Shell (zsh)
Die Z-Shell (zsh) ist eine Erweiterung von Bourne-Shell, Korn-Shell und Bash. Die Z-Shell bietet sehr viele Funktionen.
A-Shell (ash)
Eine sehr kleine Shell, für Systeme mit sehr wenig Speicherplatz (60kb) oder Notfalldisketten sowie zum laden mit dem „init Prozess“ geeignet. Bei der A-Shell handelt es sich auch um eine erweiterte Bourne Shell.
TC-Shell (tcsh)
Eine verbesserte C Shell (csh) mit voller Kompatibilität.
Restricted Shells (rbash, rzsh)
Erweiterte Shell Varianten der bash und zsh. Hier handet es sich um restriktierte Shells, mit denen man Nutzer und deren Rechte einschränken kann.
Die Konfigurationsdateien der (Login-)Shells
Die jeweiligen Shells können nach den gewünschten bedürfnissen angepasst werden, wie das Aussehen des Prompts, Color Highlighting, Aliase, Bash History, Tastatur, Sprache. Veränderungen werden nach dem Neustart/Neuanmeldung an der Shell aktiv.
Globale Konfigurationsdateien
Sind systemweit für jeden Nutzer gültig.
- /etc/profile
- /etc/bashrc
- /etc/bash.bashrc
- /etc/inputrc
/etc/profile
[root@home ~]# less /etc/profile # /etc/profile # System wide environment and startup programs, for login setup # Functions and aliases go in /etc/bashrc pathmunge () { if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then if [ "$2" = "after" ] ; then PATH=$PATH:$1 else PATH=$1:$PATH fi fi } ...
Die Datei „/etc/profile“ ist die erste Konfigurationsdatei, die beim anmelden eines Nutzers eingelesen wird und enthält die erste PATH Anweisung und Umgebungsvariablen. Änderungen erfordern eine Neuanmeldung.
/etc/bashrc
[root@home ~]# less /etc/bashrc # /etc/bashrc # System wide functions and aliases # Environment stuff goes in /etc/profile # By default, we want this to get set. # Even for non-interactive, non-login shells. if [ $UID -gt 99 ] && [ "`id -gn`" = "`id -un`" ]; then umask 002 else umask 022 fi ...
Diese Konfigurationsdatei enthält systemweite Einstellungen, Aliase und Funktionen. Bei änderungen ist ein Neustart der Shell erforderlich.
/etc/bash.bashrc
user@home:/etc$ less bash.bashrc # System-wide .bashrc file for interactive bash(1) shells. # To enable the settings / commands in this file for login shells as well, # this file has to be sourced in /etc/profile. # If not running interactively, don't do anything [ -z "$PS1" ] && return ...
Systemweite Shell Konfigurationsdatei, wird z.B. von Debian und SuSE verwendet.
/etc/inputrc
[root@home ~]# less /etc/inputrc # do not bell on tab-completion #set bell-style none set meta-flag on set input-meta on set convert-meta off set output-meta on # Completed names which are symbolic links to # directories have a slash appended. set mark-symlinked-directories on ... Control-p: "|" Control-k: "<" Control-u: ">"
Enthält globale Einstellungen für die Tastatur z.B. Funktionstasten, Spracheinstellungen oder Hotkeys.
Lokale Konfigurationsdateien
Benutzerspezifische Konfigurationsdateien befinden sich mit einem . (Punkt) vorangestellt im Homeverzeichnis des jeweiligen Nutzers.
- ~/.bash_profile
- ~/.bash_login
- ~/.profile
- ~/.bashrc
- ~/.bash_logout
- ~/.inputrc
- ~/.dmrc
~/.bash_profile
Diese Datei wird, falls vorhanden gleich nach „/etc/profile“ und nur bei einer Neuanmeldung eingelesen. Sie Zeigt z.B. auf zusätzliche Pfadanweisungen, Umgebungsvariablen oder den Standardeditor.
~/.bash_login
Diese Datei wird wärend der Anmeldung eingelesen, sollte die Datei „~/.bash_profile“ nicht existieren.
~/.profile
Ursprüngliche Konfigurationsdatei der Bash. Diese wird auch nur wärend der Anmelung und solange keine „~/.bash_login“ und „~/.bash_profile“ Dateien existieren.
~/.bashrc
Diese Datei wird immer beim Aufruf einer Shell eingelesen. Hier können z.B. benutzerspezifische Aliase und Funktionen definiert werden. Bei Änderung der Datei ist kein Neustart erforderlich.
~/.bash_logout
Eine Optionale Datei, wird eingelesen wenn sich ein Nutzer abmeldet.
~/.inputrc
Die lokale Konfigurationsdatei für die Tastatur. Die Funktionsweise entspricht der /etc/inputrc.
~/.dmrc
user@home:~$ cat ~/.dmrc [Desktop] Language=de_DE.utf8 Layout=de
In dieser Datei definiert man das Tastaturlayout des Displaymanagers auf Nutzerebene.
Eingabeprompt
Die Konfiguration der Eingabeprompts „$PS1“ erfolgt je nach System in den „profile“ oder „bashrc“ Dateien.
Beispiel, Usershellprompt:
user@hostname:~$
Rootshellprompt:
root@hostname:/root#
$PS1:
Der primäre Standardprompt. Das abschließende Leerzeichen zeigt die Bereitschaft an, einen Befehl anzunehmen. Nur von diesem Prompt expandiert die Bash die Variable „$PROMPT_COMMAND“, welche jeden Code ausführen kann.
user@hostname:~$ echo $PS1 \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
Die Zeichen im Prompt:
- \a ⇒ Bell.
- \\ ⇒ Backslash.
- \[ ⇒ Beginn einer Sequenz nicht darstellbarer Zeichen, für weitere Formatierung.
- \] ⇒ Ende einer Sequenz.
- \e ⇒ Escape Zeichen zur weiteren Formatierung.
- \$ ⇒ Falls effectivr UID = 0 Prompt # ansonsten $.
- \d ⇒ Datum im Format (Wochentag, Monat, Tag).
- \D{Format} ⇒ Datum in strftime Format.
- \t ⇒ Aktuelle Uhrzeit (24h HH:MM:SS).
- \T ⇒ Aktuelle Uhrzeit (12h HH:MM:SS).
- \@ ⇒ Aktuelle Uhrzeit (12h am/pm).
- \A ⇒ Aktuelle Uhrzeit (24h HH:MM).
- \h ⇒ Hostname bis zum ersten Punkt.
- \H ⇒ gesamter Hostname.
- \u ⇒ Username.
- \w ⇒ aktuelles Verzeichnis, $HOME als Tilde.
- \W ⇒ $PWD, $HOME als Tilde.
$PS2
Um bei langen Kommandos die Zeile umzubrechen, kann man am Zeilenende ein [\] setzen, dadurch wird das „$PS2“ Prompt aktiviert.
Beispiel:
user@home:~$ cat \ > /etc/shells
TTY Schriftgröße / Auflösung
Sollte die Schriftgröße in der Konsole zu groß dargestellt werden, kann man die Framebuffer Auflösung, bei Debian Systemen in der Datei „/etc/default/grub“ einstellen.
Zuerst als „root“ die Datei „/etc/default/grub“ zum bearbeiten mit einem Editor öffnen.
... GRUB_GFXPAYLOAD_LINUX=tty/console-resolution GRUB_GFXPAYLOAD_LINUX=1280x1024 ...
Die gewünschte Konsolenauflösung kann hier eingetragen werden.
root@hostname:~# update-grub Generating grub.cfg ... Found background image: /usr/share/images/desktop-base/desktop-grub.png Found linux image: /boot/vmlinuz-2.6.32-5-686 Found initrd image: /boot/initrd.img-2.6.32-5-686 done
Nach einem Neustart des Systems ist die neue TTY Auflösung aktiv.
Bash History
Um in der Bash einen History Pfad zu bearbeiten oder anzulegen, lassen sich in den oben genannten Konfigurationsdateien einstellen.
Beispiel einer ~/.bashrc (debian):
.... # don't put duplicate lines in the history. See bash(1) for more options # don't overwrite GNU Midnight Commander's setting of `ignorespace'. HISTCONTROL=$HISTCONTROL${HISTCONTROL+:}ignoredups # ... or force ignoredups and ignorespace HISTCONTROL=ignoreboth # append to the history file, don't overwrite it shopt -s histappend # for setting history length see HISTSIZE and HISTFILESIZE in bash(1) HISTSIZE=10000 HISTFILESIZE=999999 ....
Es wird dann im jeweiligen Homeverzeichnis die Datei „~/.bash_history“ angelegt. Wird die Shell beendet werden die eingegebenen Kommandos in dieser Datei gespeichert. Bei erneuter Anmeldung an der „tty“ können durch drücken der [↑], [↓] Taste die letzten Kommandos aufgerufen werden.
Alias
Durch anlegen von „alias'e“ lassen sich ein oder mehrere Komandos miteinander verketten oder sehr lange Befehlsketten oder Kommandos verkürzen. Alias ohne Parameter aufgerufen gibt die im Moment verwendeten „aliase“ der Loginshell aus.
Syntax:
- alias aliasname=[Kommando-s]
Beispiele:
user@home:~$ alias alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l='ls -CF' alias la='ls -A' alias ll='ls -l' alias ls='ls --color=auto' alias more='less'
Gibt die im Moment aktiven aliase aus.
alias more='less'
Hier wird anstatt more less verwendet.
unalias more
„unalias“ löscht den „alias“ „more“.
Um einen „alias“ dauerhaft einzurichten, kann er global gültig, in der Datei „/etc/profile“ definiert werden. „aliase“ nach Nutzer können in den Dateien im Verzeichnis „/home/<nutzer>/“ „~/.bashrc“ oder „~/.profile“ eingetragen werden.
[root@home ~]# less .bashrc # .bashrc # User specific aliases and functions alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' ...
Unter anderem ist es auch möglich mehrere Befehle in einem „alias“ zu kombinieren.
[root@home ~]# alias frei='free; df'
Shell starten
Eine Shell lässt sich aus allen grafischen Oberflächen heraus starten. Mit der Tastenkombination [strg+alt+[F1-Fx]] starten. Die [↑] und [↓] Tasten können zum Scrollen verwendet werden. (In manchen Shells muß zum Scrollen mit den Tasten [↑] und [↓], zuvor mit [Fn + F12] das Scrollen aktiviert werden).
Durch drücken der Cursortasten [↑] und [↓] lassen sich auch die letzten Kommandos der Bash History anzeigen. Mit [Strg+Alt+Fx] (Fx ist dabei Systemabhängig) kommt man zur Grafischen Oberfläche zurück. Zum ausloggen können die Kommando's „exit“ oder „strg+D“ genutzt werden.
Eingabe / Ausgabe / Umleitung
Für die Ein- und Ausgabe von Kommandos stellt die Shell drei Dateidescriptoren bereit:
- stdin, Dateidescripzor 0 ⇒ Standardeingabekanal (Tastatur).
- stdout, Dateidescripzor 1 ⇒ Terminalausgabe (Standardausgabekanal).
- sterr, Dateidescriptor 2 ⇒ Terminalausgabe (Standarderrorkanal).
I/O Umleitungen | |
---|---|
befehl > datei | leitet Standardausgabe in Datei um. (falls vorhanden wird Datei überschrieben.) |
befehl >> datei | hängt Standardausgabe an Datei an. |
befehl < datei | Datei als Eingabekanal. |
befehl 2> datei | leitet Fehlermeldungen in Datei um. |
befehl > datei 2>&1 | leitet Ausgaben und Fehler in gleiche Datei um. |
befehl &> datei | leitet Ausgaben und Fehler in gleiche Datei um. |
befehl >& datei | leitet Ausgaben und Fehler in gleiche Datei um. |
befehl > datei1 2> datei2 | leitet Ausgabe in Datei1, Fehler in Datei2 um. |
befehl1 | befehl2 | leitet Ausgabe von Befehl1 an Eingabe von Befehl2 weiter. |
befehl | tee datei | zeigt Standardausgabe und leitet sie in Datei um. |
<&- | Schließt Standardeingabekanal. |
>&- | Schließt Standardausgabekanal. |
x <> datei | x als Ein u. Ausgabekanal mit Datei verbinden. |
Kommandoausführung
Kommandoausführung | |
---|---|
befehl | Führt Befehl in der Shell aus ($PATH, Pfad-Alias) sollte gesetzt sein. |
befehl1; befehl2 | führt Befehle hintereinander aus. |
befehl1 && befehl2 | logisches UND. Führt Befehl2 aus, wenn Befehl1 erfolgreich war (Rückgabewert NULL). |
befehl1 || befehl2 | logisches ODER. Führt Befehl2 aus, wenn Befehl1 nicht erfolgreich war (Rückgabewert ungleich NULL). |
befehl & | Startet Befehl im Hintergrund. |
befehl1 & befehl2 | Startet Befehl1 im Hintergrund, Befehl2 im Vordergrund. |
(befehl1; befehl2) | Führt beide Befehle in der gleichen Shell aus. |
Rückgabewerte
Bei der Eingabe eines Befehls wird geprüft, ob eine Funktion oder Alias für den Befehl existiert, ist beides nicht zutreffend prüft die Bash, ob es einen eingebauten Befehl gibt. Als nächstes wird der Befehl mit der Umgebungsvariablen $PATH gesucht. Wird auch hier der Befehl nicht gefunden, beendet die Bash die Suche mit dem Rückgabewert [127]. Bei Programmbeendigung durch Signale [+128] und [126] wenn der Befehl nicht ausführbar war. Bei erfolgreichen Programmstart ist der Rückgabewert [0], keine Berechtigung [2].
Beispiele:
user@home:~$ xyz; echo $? bash: xyz: Kommando nicht gefunden. 127
user@home:~$ ls /root; echo $? ls: Öffnen von Verzeichnis /root nicht möglich: Keine Berechtigung 2
user@home:~$ ls /root || echo ERROR ls: Öffnen von Verzeichnis /root nicht möglich: Keine Berechtigung ERROR
Shell Variablen
Die Shell-Variablen bieten eine Umgebung, mit der Skripte und Programme mit informationen versorgt werden können. Hierbei unterscheiden sich Umgebungsvariablen und Shellvariablen. Sie können durch verschiedene Konfigurationsdateien angepaßt werden.
Umgebungsvariablen
Umgebungsvariablen werden in Großbuchstaben geschrieben, sie gelten für alle Shells, die ein Nutzer verwendet. Darüberhinaus wird die Variable beim Aufruf einer Subshell automatisch exportiert(vererbt).
Shellvariablen
Shellvariablen müssen in jeder neuen Shell neu deklariert werden. Hier findet keine Vererbung statt. Dieser Variablentyp wird mit Kleinbuchstaben deklariert.
Syntax:
- var=wert ⇒ Variablendeklaration.
- var= ⇒ Variable ohne Wert deklarieren.
- export VAR=wert ⇒ Variable für Subshells exportieren.
- $var ⇒ Variablenausgabe.
- unset var ⇒ Variablen löschen.
Beispiele:
[root@home ~]# a=22 [root@home ~]# b=20 [root@home ~]# let c=$a+$b [root@home ~]# echo $c 42
Hier werden die Variablen „a“ und „b“ deklariert. Mit dem Kommando „let“ wertet man arithmetische Ausdrücke aus.
Diese Variablen bleiben innerhalb der Shell erhalten. Ruft man jedoch eine Subshell auf, kann man mit „export“ die Variable auch für Subshells verfügbar machen:
[root@home ~]# export c [root@home ~]# sh sh-3.2# echo $c 42
[root@home ~]# export D=1024 [root@home ~]# sh sh-3.2# echo $D 1024
Mit „unset“ können deklarierte Variablen wieder gelöscht werden:
[root@home ~]# unset a b c D [root@home ~]# echo $a $b $c $D
set
Der Aufruf von „set“ ohne Optionen, gibt eine Liste der Umgebungs und Shellvariablen aus, die gerade verwendet werden.
[root@home ~]# set | less BASH=/bin/bash BASH_ARGC=() BASH_VERSINFO=([0]="3" [1]="2" [2]="25" [3]="1" [4]="release" [5]="i686-redhat-linux-gnu") BASH_VERSION='3.2.25(1)-release' COLORS=/etc/DIR_COLORS.xterm EUID=0 GROUPS=() HISTFILE=/root/.bash_history HISTFILESIZE=1000 HISTSIZE=1000 INPUTRC=/etc/inputrc LANG=de_DE.utf8 bin:/usr/sbin:/usr/bin:/root/bin ...
env
Mit dem Kommando „env“ können Umgebungsvariablen angezeigt werden.
[root@home ~]# env | less ... TERM=xterm SHELL=/bin/bash HISTSIZE=1000 PATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin INPUTRC=/etc/inputrc LANG=de_DE.utf8 ...
Autovervollständigen
Die [tab] Taste dient zum Autovervollständigen in der Shell. Existieren von dem eingegebenen Zeichen meherere unterschiedlichen Dateien, Verzeichnisse oder Befehle, wird durch mehrmaliges drücken der [tab] Taste eine Liste der zur Verfügung stehenden Dateien, Verzeichnissen oder Befehle angezeigt.
Beispiel:
hans@home:~$ le+tabtab leaftoppm lessecho lesskey let less lessfile lesspipe lexgrog
Tastaturkommandos
strg+_ | letzte änderung rückgängig machen. |
strg+r | Kommandos suchen. |
strg+s | Kommandos in umgekehrter Folge suchen. |
strg+l | Bildschirm löschen. |
alt+. | zuletzt verwendeten Parameter einfügen. |
alt+t | letzten vorangehenden Wörter vertauschen. |
strg+t | letzten vorangehenden Zeichen vertauschen. |
backspace | Zeichen rückwärts löschen. |
entf | Zeichen vorwärts löschen. |
alt+d | Wort löschen. |
strg+k | bis zum Zeilenende löschen. |
strg+y | letzten gelöschten Text einfügen. |
↑ ↓ | letzten Kommandos anzeigen. |
← → | Cursor im Text bewegen. |
pos1 oder strg+a | Cursor zum Anfang der Zeile. |
ende oder strg+e | Cursor zum Ende der Zeile. |
alt+b | Cursor um ein Wort zurück. |
alt+f | Cursor um ein Wort vor. |
tab | Expansion des Befehls oder Dateinamens. |
Wildcards, Reguläre Ausdrücke, Expandierungen, Quotes
Wildcards
Um ein Kommando abzukürzen, können Wildcards angeben werden.
- * ⇒ Null oder beliebig viele Zeichen (Shell).
- ? ⇒ ein beliebiges Zeichen (Shell).
- [a-e] ⇒ ein Zeichen aus dem Bereich.
- [abc] ⇒ ersetzt die angegebenen Zeichen.
- [!abc] ⇒ ein Zeichen, das nicht aufgezählt ist.
- [^123] ⇒ ein Zeichen, das nicht aufgezählt ist.
Wildcards auf Suchmuster in Textdateien:
- * → null oder beliebig viele Wiederholungen des voranstehenden Zeichens.
- ? → null oder einmalige Wiederholung des voranstehenden Zeichens.
- + → einmaliges Vorkommen des voranstehenden Zeichens.
- . → Platzhalter für ein beliebiges Zeichen (außer Zeilenvorschub).
Beispiele:
hans@home:~$ ll workspace/ insgesamt 0 -rw-r--r-- 1 hans hans 0 14. Okt 12:49 abc -rw-r--r-- 1 hans hans 0 14. Okt 12:47 datei -rw-r--r-- 1 hans hans 0 14. Okt 12:47 datei1 -rw-r--r-- 1 hans hans 0 14. Okt 12:47 datei2 -rw-r--r-- 1 hans hans 0 14. Okt 12:47 datei3 -rw-r--r-- 1 hans hans 0 14. Okt 13:02 dateia -rw-r--r-- 1 hans hans 0 14. Okt 13:02 dateib -rw-r--r-- 1 hans hans 0 14. Okt 13:02 dateic
hans@home:~$ find /home/hans/workspace/ -name datei* /home/hans/workspace/datei3 /home/hans/workspace/datei1 /home/hans/workspace/datei /home/hans/workspace/dateia /home/hans/workspace/datei2 /home/hans/workspace/dateib /home/hans/workspace/dateic
hans@home:~$ find /home/hans/workspace/ -name datei[a-c] /home/hans/workspace/dateia /home/hans/workspace/dateib /home/hans/workspace/dateic
hans@home:~$ find /home/hans/workspace/ -name datei[^a-c] /home/hans/workspace/datei3 /home/hans/workspace/datei1 /home/hans/workspace/datei2
Reguläre Ausdrücke
Unter Reguläre Ausdrücke, versteht man eine Beschreibungssprache, die Suchmuster, z.B. Suchwort, Position im Text oder Wildcards verwendet. Auch „regular expressions“, „regexp“, „regex“ genannt.
Allgemeingültige Metazeichen:
+--------------------------------------------------+ | Metazeichen | Erläuterung | +-------------+------------------------------------+ | ^ | Textanker für Zeilenanfang | +-------------+------------------------------------+ | $ | Textanker für Zeilenende | +-------------+------------------------------------+ | \< | Markiert ein Wortanfang | +-------------+------------------------------------+ | \> | Markiert ein Wortende | +-------------+------------------------------------+ | \ | Schützt Zeichen vor Interpretation | +-------------+------------------------------------+ | [a-e] | Passt auf Zeichen ([a-e]) | +-------------+------------------------------------+ | [^#] | Passt nicht auf Zeichen # | +--------------------------------------------------+
Expandierungen
Klammernexpandierung
Quotes
GUI starten
hans@home:~$ startx
Terminal splitten - virtuelle Konsolen Sitzungen
screen
„screen“ ist ein Terminal Fenstermanager zum erzeugen und verwalten von mehreren Virtuellen Konsolensitzungen in einem „screen“ Konsolenfenster. Dabei können die Virtuellen Konsolen beliebig vertikal und horizontal gesplittet werden.
Es können auch Sitzungen getrennt werden, wobei das gestartete Programm im Hintergrund weiterläuft und später bei der nächsten Anmeldung die Sitzung mit dem Programm wieder aufnehmen kann.
Die Globale Konfiguration von „screen“ wird in der Datei „/etc/screenrc“ editiert, die „screen“ Konfiguration für Nutzer in der Datei „/home/<nutzer>/.screenrc“, existiert diese Datei nicht, kann sie angelegt werden.
Syntax:
- screen [optionen] [cmd [args]]
Optionen:
- -A ⇒ Anzeigegröße der Sitzung wird auf die größe des aktuellen Terminals angepasst.
- -m ⇒ Sitzung wird unabhängig vom Terminal oder einer bestehenden screen Sitzung gestartet.
- -d ⇒ startet die Sitzung im Hintergrund.
- -S [sitzungsname] ⇒ startet eine neue sitzung „sitzungsname“.
- -d [sitzungsname] ⇒ löst(detached) die Verbindung zur Sitzung „sitzungsname“.
- -r [sitzungsname][PID] ⇒ nimmt die gelöste Sitzung wieder auf. Ohne „sitzungsname“ werden Sitzungen gelistet.
- -x [sitzungsname][PID] ⇒ aktiviert die Sitzung in aktuellem Terminal.
- -ls ⇒ listet alle Sitzungen nach „sitzungsname“ sofern vergeben oder PID auf.
Nach dem Start von „screen“ können auch folgende Tastenkürzel verwendet werden:
- strg+a | ⇒ Terminal vertikal splitten.
- strg+a S ⇒ Terminal horizontal splitten.
- strg+a tab ⇒ wechselt in gesplittete Konsole.
- strg+a Q ⇒ hebt das splitting der Konsole auf. (Die erstellten Sitzungen bleiben erhalten).
- strg+a c ⇒ erstellt eine neue Sitzung.
- strg+a space ⇒ wechselt in die nächste vorhandene Konsolensitzung.
- strg+a backspace ⇒ wechselt in die vorherige Konsolensitzung.
- strg+a d ⇒ löst die Verbindung der Konsolensitzung.
- strg+a ? ⇒ listet eine Übersicht der Tastenkürzel auf.
- strg+a [0…9] ⇒ wechselt in angegebene Fenster.
- strg+a „ ⇒ listet alle Fenster der aktuellen Sitzung.
- strg+a A ⇒ Titel der Sitzung eintragen.
- strg+a K ⇒ screen Sitzung beenden (Kill), es kann auch „exit“ verwendet werden.
- strg+a n ⇒ wechselt ein Bildschirm weiter.
- strg+a p ⇒ wechselt ein Bildschirm zurück.
- strg+a x ⇒ sperrt die Konsole (zum entsperren userpasswort eintragen).
- strg+a [ ⇒ copy modus. Markieren wie im Vi.
- strg+a ] ⇒ einfügen modus.
Beispiele:
user@host:~$ screen -ls There are screens on: 5471.test (15.09.2011 20:36:02) (Attached) 5415.pts-0.host (15.09.2011 20:22:00) (Attached) 5360.pts-0.host (15.09.2011 20:19:14) (Detached) 4694.pts-0.host (15.09.2011 17:22:32) (Detached) 4675.pts-0.host (15.09.2011 17:21:53) (Detached) 4632.pts-0.host (15.06.2011 17:14:42) (Detached) 4550.pts-0.host (15.04.2011 17:03:38) (Detached) 19683.pts-0.host (14.04.2011 23:39:54) (Detached) 8 Sockets in /var/run/screen/S-user.
Obiger Code listet alle laufenden screen Sitzungen auf.
screen -S sit -X stuff $'ls -la\n'
Dieser Code sendet einen Befehl an die Sitzung „sit“ und führt ihn mit \n (enter) aus.(1)
screen -rx sit
Die Sitzung „sit“ kann an mehreren Computern angezeigt werden.
Statusleiste einblenden:
Um in einer „screen“ Sitzung eine Statusleiste einzublenden kann in der Sitzung folgender Code eingegeben werden (1):
# in screen Sitzung Statusleiste einblenden. screen -X caption always "%{rw} * | %H * $LOGNAME | %{bw}%c %D | %{-}%-Lw%{rw}%50>%{rW}%n%f* %t %{-}%+Lw%<" # Statusleiste automatisch einblenden. # Eintrag in /etc/screenrc oder ~/.screenrc caption always "%{rw} * | %H * $LOGNAME | %{bw}%c %D | %{-}%-Lw%{rw}%50>%{rW}%n%f* %t %{-}%+Lw%<"
Die Einträge in den {…} Klammern enthalten u.a. die Angabe der Farben. Der Eintrag “%50>“ schneidet bei zu langen Fensterleisten die Ausgabe so ab, dass sie mittig erscheint. In der Manpage von „screen“ stehen weitere String escapes.(1)
Erläuterung der Variablen | |
---|---|
$LOGNAME | Nutzername |
$H | Hostname |
%c | Uhrzeit (24h) |
%D | aktueller Wochentag |
%n | Nummer des Virtuellen Terminals |
%f | Flag, das Sternchen zeigt das aktive virtuelle Terminal an, ein Minuszeichen die zuletzt besuchte Sitzung. |
%t | Der mit strg+a A gesetzte Titel der Sitzung. |
%id` | Backtick-Referenz, id = 1,2,3 … (hierbei lassen sich z.B. Rückgabewerte von Shellscripten einblenden). |
Ein Backtick wird in der Form backtick id lifespan autorefresh cmd arg in die Datei „~/.screenrc“ oder „/etc/screenrc“ eingetragen und über „%id`“ in der Caption-Zeile referenziert. Um die IP-Adresse in die Caption-Zeile einzublenden kann das Shellscript: myip.sh(1) verwendet werden.
#!/bin/sh ifconfig | grep 'inet Adresse:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print $1}'
Die Datei „myip.sh“ sollte man dann in das Verzeichnis „/usr/local/bin“ kopieren und ausführbar machen (chmod +x myip.sh) und in die Datei „~/.screenrc“ oder „/etc/screenrc“ folgenden Eintrag einfügen.(1)
backtick 1 2 2 /usr/local/bin/myip.sh caption always "Meine IP-Adr.: %1`"
Benutzerhandbuch screen.pdf.(2)
Manpages
Um in einer Shell die Manpage eines Programmes auszugeben gibt man den Befehl „man (Programmname)“ oder „(Programmname) –help“ ein.
user@home:~# man bash
BASH(1) BASH(1) NAME bash - GNU Bourne-Again SHell SYNOPSIS bash [options] [file] COPYRIGHT Bash is Copyright (C) 1989-2009 by the Free Software Foundation, Inc. DESCRIPTION Bash is an sh-compatible command language interpreter that executes commands read from the standard input or from a file. Bash also incor‐ porates useful features from the Korn and C shells (ksh and csh). .... ....
Bc - Konsolen Rechner
Die Shells bieten viele kleine Tools, wie den Kommandozeilenrechner „bc“. Ohne Optionen gestartet rechnet „bc“ nur in ganzen Zahlen ohne Kommastellen. Beendet wird das Programm mit „quit“.
Syntax:
- bc [opt] [datei]
Optionen:
- -l ⇒ Mathematische Standard Bibliothek.
- -i ⇒ Interaktiver Modus.
- -h ⇒ Kurze Hilfe anzeigen.
- -v ⇒ Version.
Beispiel:
user@home:~$ bc -l bc 1.06.95 Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 42.2*24.4 1029.68
Shell Kalender
Das Kalenderwerkzeug „cal“, zeigt einen einfachen Kalender und kann das Datum in verschiedenen Formaten ausgeben. Ohne Argumente wird der aktuelle Monat ausgegeben.
user@home:~# cal 11 2010 November 2010 So Mo Di Mi Do Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Syntax:
- cal [optionen][args]
- ncal [optionen][args]
Optionen:
- -3 ⇒ gibt den vormonat, den aktuellen und den nächsten Monat aus.
- -h ⇒ stellt das Highlight des aktuellen Tages ab.
- -J ⇒ gibt Julianischen Kalender aus. In Verbindung mit -e Ostern. Nur mit ncal.
- -e ⇒ gibt Osterdatum aus. (westlich). Nur mit ncal.
- -m [monat][year] ⇒ Monat, Jahr.
- -j ⇒ gibt Tage ab 1. Januar aus.
- -s [country code] ⇒ Datum ergibt sich aus Ländercode.
Beispiele:
hans@home:~$ cal -j September 2010 So Mo Di Mi Do Fr Sa 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274
hans@home:~$ ncal -Je 8 April 2012
tf@jupiter:~$ cal -3 August 2010 September 2010 Oktober 2010 So Mo Di Mi Do Fr Sa So Mo Di Mi Do Fr Sa So Mo Di Mi Do Fr Sa 1 2 3 4 1 1 2 3 4 5 6 5 6 7 8 9 10 11 2 3 4 5 6 7 8 7 8 9 10 11 12 13 12 13 14 15 16 17 18 9 10 11 12 13 14 15 14 15 16 17 18 19 20 19 20 21 22 23 24 25 16 17 18 19 20 21 22 21 22 23 24 25 26 27 26 27 28 29 30 31 23 24 25 26 27 28 29 28 29 30 31 30
Figlet / Anmeldungstext
Shell Befehle
Eine Befehlsreverenz verschiedener Shellkommandos und Beispiele.
Dialog
Quellen
(1). ubuntuusers (deutschsprachiges Ubuntuportal).
(2). Free Software Foundation.
Cloud