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






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.

FIXME



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.

FIXME



Z-Shell (zsh)


Die Z-Shell (zsh) ist eine Erweiterung von Bourne-Shell, Korn-Shell und Bash. Die Z-Shell bietet sehr viele Funktionen.

FIXME



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.

FIXME



TC-Shell (tcsh)


Eine verbesserte C Shell (csh) mit voller Kompatibilität.

FIXME



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.

FIXME




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.




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



FIXME




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.


Danach muß noch eine neue „/boot/grub/grub.cfg“ Datei erstellt werden, damit die neue Konfiguration beim Systemstart ausgewertet wird.




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.




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.




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


Wird die Shell beendet geht auch der „alias“ verloren. Ein alias kann Übergabewerte ($1, $2, ..) nur einmal auswerten.




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'






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.




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






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






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






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


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.




In der Shell werden (*) null oder beliebig viele Zeichen und (?) ein beliebiges Zeichen anders Interpretiert, wie auf Suchmuster in Textdateien mit grep und den Programmen sed oder awk.




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.


Reguläre Ausdrücke werden nicht von jedem Programm gleich interpretiert.




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



FIXME



Quotes



FIXME




hans@home:~$ startx






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.


Um mit der „Hochstell+Bild Hoch u. runter zu scrollen trägt man „termcapinfo xterm|xterms|xs|rxvt ti@:te@“ in die .screenrc ein.




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)




Um in einer Shell die Manpage eines Programmes auszugeben gibt man den Befehl „man (Programmname)“ oder „(Programmname) –help“ ein.

FIXME


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






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



FIXME




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                    







FIXME




Eine Befehlsreverenz verschiedener Shellkommandos und Beispiele.




(1). ubuntuusers (deutschsprachiges Ubuntuportal).
(2). Free Software Foundation.



Cloud