\chapter{Wichtige Programme} \label{chap:programme} \section{Bash} \label{sec:bash} Die Bash (bourne again shell) nimmt Kommandos entgegen, interpretiert sie und gibt sie an das Betriebssystem weiter. \subsection{Variablen} \label{sec:variablen} \begin{tabular}{p{5cm}p{10cm}} \titel{Vordefinierte Shellvariablen} \ueber{Variable}{Inhalt} \eintrag{\$\#}{Anzahl der Parameter} \eintrag{\$?}{Rückgabewert des letzten Befehls} \eintrag{\$\$}{Prozessnummer des aktuellen Prozesses} %\eintrag{\$!}{Prozessnummer des letzten Hintergrundprozesses} \eintrag{\$0}{Name des aufgerufenen Befehls} \eintrag{\$n}{Parameter (n=1-9)} \eintrag{\$\{n\}}{Parameter (n>9)} \eintrag{\$LOGNAME}{Login-Name des Benutzers} \eintrag{\$OLDPWD}{vorheriges Arbeitsverzeichnis} \eintrag{\$PATH}{Suchpfad für ausführbare Programme} \eintrag{\$PWD bzw. \$CWD}{aktuelles Arbeitsverzeichnis} \end{tabular} \vspace{0.5cm} \begin{tabular}{p{5cm}p{10cm}} \titel{Befehle zum Arbeiten mit Variablen} \ueber{Befehl}{Bedeutung / Funktion} \eintrag{echo \$NAME}{Variableninhalt anzeigen} \eintrag{NAME=Wert}{Variable definieren} %\eintrag{NAME=`` `Kommando` ''}{Ergebnis des Kommandos wird der Variablen zugewiesen} \eintrag{NAME=\$(Kommando)}{Ergebnis des Kommandos wird der Variablen als Wert zugewiesen} \eintrag{export NAME}{Variable exportieren (steht dann in allen Sub-Shells zur Verfügung)} \eintrag{unset NAME}{Variable löschen} \end{tabular} \subsection[Die Datei \textasciitilde /.bashrc]{Die Datei \textasciitilde /.bashrc (rc = run command)} \label{sec:bashrc} Die Arbeitsumgebung der Shell kann durch Einstellungen in Konfigurationsdateien angepasst werden, die wichtigste davon ist \textasciitilde /.bashrc.\\ Nachfolgend ein Beispiel für mögliche Einstellungen:\\ \begin{center} \fbox{\parbox{12.7cm}{ \bashrc{\# Variablen erstellen und exportieren}\\ \bashrc{export GREP\textunderscore OPTIONS='-\,-color=auto'}\\ \bashrc{export GREP\textunderscore COLOR='31'}\\ \bashrc{\# Suchpfad für Programme}\\ \bashrc{export PATH='\$PATH:/usr/local/bin:/usr/local/share/scripts'}\\ \bashrc{\# Prompt anpassen}\\ \bashrc{PS1=''\textbackslash [\textbackslash 033[34m\textbackslash ]\textbackslash u@\textbackslash h(\textbackslash \#)->\textbackslash [\textbackslash 033[0m\textbackslash ]''}\\ \bashrc{\# bestehende Kommandos neu definieren}\\ \bashrc{alias cp='cp -i'}\\ \bashrc{alias mv='mv -i'}\\ \bashrc{alias rm='rm -i'}\\ %\bashrc{alias ls='ls -F'}\\ \bashrc{alias ssh='ssh -X'}\\ \bashrc{\# eigene Kommandos definieren}\\ \bashrc{alias h='history | tail -50 | more'}\\ \bashrc{alias hh='history | tail -200 | more'}\\ \bashrc{alias cd..='cd ..'}\\ \bashrc{alias ...='cd ../..'}\\ \bashrc{\# Funktionen definieren}\\ \bashrc{ll () \{ }\\ \bashrc{ ls -lhF \$* | more}\\ \bashrc{\} }\\ \bashrc{\#} \\ \bashrc{lll () \{ }\\ \bashrc{ ls -alhF \$* | more}\\ \bashrc{\} }\\ \bashrc{\#} \\ \bashrc{llt () \{ } \\ \bashrc{ ls -alFht \$* | head -20}\\ \bashrc{\} }\\ \bashrc{\#}\\ \bashrc{lld () \{ }\\ \bashrc{ ls -alFh \$* | egrep ''\textbackslash / \$''}\\ \bashrc{\} } }} \end{center} \newpage \subsection{Zeichen mit Sonderbedeutung} \label{sec:zeichen} Viele Zeichen haben in der Shell eine Sonderbedeutung und sollten daher nicht in Dateinamen verwendet werden. Die Zeichen \textbf{: . , \_ -} haben keine Sonderbedeutung und dürfen somit in Dateinamen vorkommen.\\ \begin{tabular}{p{5cm}p{10cm}} \hline \ueber{Zeichen}{Bedeutung / Funktion} \eintrag{*}{Folge von beliebig vielen Zeichen (ggf. auch kein Zeichen)} \eintrag{?}{genau ein beliebiges Zeichen} \eintrag{[...]}{eines der Zeichen, die in den Klammern enthalten sind} \eintrag{[!...]}{eines der Zeichen, die nicht in den Klammern enthalten sind} %\eintrag{\{... ...\}}{} \eintrag{\~}{Homeverzeichnis des aktuellen Benutzers} \eintrag{.}{das aktuelle Verzeichnis} \eintrag{..}{darüberliegendes Verzeichnis} \eintragl{Kommando}{>}{Datei}{Umleitung der Ausgabe eines Kommandos in eine Datei; existiert die Datei bereits, wird sie überschrieben} \eintragl{Kommando}{>\,>}{Datei}{die Ausgabe eines Kommandos wird an eine Datei angehängt} \eintragl{Kommando}{<}{Datei}{Eingabe erfolgt aus einer Datei} \eintragl{Kommando1}{\textbar}{Kommando2}{Pipe: Ausgabe von Kommando1 ist Eingabe für Kommando2} \eintragl{Kommando1}{;}{Kommando2}{Kommandos werden nacheinander ausgeführt} \eintragl{Kommando}{\&}{ }{Kommando wird im Hintergrund ausgeführt} \eintragl{Kommando1}{\&\&}{Kommando2}{Kommando2 wird nur ausgeführt, wenn Kommando1 erfolgreich war} \eintragl{Kommando1}{\textbar\textbar}{Kommando2}{Kommando2 wird nur ausgeführt, wenn Kommando1 fehlgeschlagen ist} \eintrag{\textbackslash}{hebt die Sonderbedeutung des folgenden Zeichens auf} \eintrag{´...´}{Sonderzeichen vor der Interpretation durch die Shell schützen (=maskieren)} \eintrag{\{...\}}{Inhalt einer Shellfunktion} \end{tabular} \subsection{Weitere Kommandos} \label{sec:wkommandos} \begin{tabular}{p{3cm}p{12cm}} \hline \ubs{for}{(Schleife)} \bsp{for i in *.ps} \bsp{do} \bsp{ps2pdf \$i} \bsp{done} \txt{Alle vorhandenen PostScript Dokumente werden nacheinander dem Befehl ps2pdf übergeben und ins pdf-Format umgewandelt} \end{tabular} \textbf{ }\\ \begin{tabular}{p{3cm}p{12cm}} \hline \ubs{printenv}{(print environment) Anzeigen der Umgebungsvariablen} \end{tabular} \textbf{ }\\ \begin{tabular}{p{3cm}p{12cm}} \hline \ubs{env}{(environment) Umgebungsvariablen vorübergehend ändern} \bsp{env Variable=Wert Kommando} \txt{setzt die Variable vorübergehend auf Wert und führt das Kommando in der geänderten Umgebung aus} \end{tabular} \textbf{ }\\ \begin{tabular}{p{3cm}p{12cm}} \hline \ubs{set}{zeigt die in der aktuellen Shell gesetzten Variablen} \end{tabular} \textbf{ }\\ \begin{tabular}{p{3cm}p{12cm}} \hline \ubs{exit}{beendet die aktuelle Shell} \end{tabular} \textbf{ }\\ \begin{tabular}{p{3cm}p{12cm}} \hline \ubs{logout}{Ausloggen und Beenden der Shell} \end{tabular} \textbf{ }\\ \begin{tabular}{p{3cm}p{12cm}} \hline \ubs{jobs}{zeigt alle angehaltenen oder im Hintergrund laufenden Jobs an} \end{tabular}