Aktualisiere repository URLs
[eineseite.git] / unix-shell.tex
blob296acbae87ae26becfb1b4fe1fa33fd6b62c452b
1 \documentclass[paper=a4,DIV=33,pagesize,fontsize=10pt]{scrartcl}
2 %\documentclass[paper=a4,landscape,DIV=30,pagesize,fontsize=10pt]{scrartcl}
3 %\usepackage[T1]{fontenc}
4 \usepackage[utf8]{inputenc}
5 %\usepackage{ae}
6 \usepackage{ngerman}
8 \setlength{\emergencystretch}{1ex}
10 \setcounter{secnumdepth}{-1}
11 %\newcommand{\myitem}[1]{\subparagraph{\texttt{#1}}}
12 \newcommand{\myitem}[1]{\noindent\textbf{\texttt{#1}}\quad}
13 \newcommand{\myitemx}[2]{\myitem{#1\textrm{,} #2}}
14 \newcommand{\afterexample}[1]{\newline\mbox{\verb"#1"}}
15 \newcommand{\example}[1]{\mbox{\verb"#1"}}
16 \newcommand{\key}[1]{\subparagraph{\textsf{#1}}}
17 \newcommand{\strg}[1]{\key{Strg-#1}}
18 \newcommand{\mytt}[1]{\texttt{#1}}
20 \newcommand{\dontshow}[1]{}
22 \pagestyle{empty}
24 \DeclareFontShape{OT1}{cmtt}{bx}{n}{
25 <5><6><7><8><9><10><10.95><12><14.4><17.28><20.74><24.88>cmttb10}{}
27 \begin{document}
28 %# Die Welt der (Unix-)Shell
29 %oder
30 %# Eine Seite über die Unix-Shell
32 \twocolumn
34 \begin{center}
35 {\Large Die Welt der (Unix-)Shell}
37 \verb"harald@ccbib.org"
38 \end{center}
40 Dieser Text soll die wichtigsten Grundlagen zusammenfassen und trotzdem
41 so kurz sein, dass er leicht vollständig gelesen werden kann.
42 Auch ohne alle Details zu verstehen wird der Überblick helfen, im
43 Anlassfall schneller die gesuchte Information zu finden.
45 Einzig die Befehle \mytt{man} und \mytt{apropos} sind essenziell.
46 Der Rest ist hoffentlich als Merkzettel nützlich.
48 Der aktuellste Sourcecode für diesen Zettel ist unter:\\
49 \texttt{http://repo.or.cz/eineseite.git}\\
50 bzw. \texttt{git://repo.or.cz/eineseite.git}
52 \section{Das Dateisystem}
53 Unter Unixsystemen gibt es keine Laufwerke. Alle Dateien sind in einer
54 abstrakten Hierarchie angeordnet, unabhängig davon auf welchem Gerät
55 die Daten tatsächlich gespeichert sind. Das mag für Umsteiger ungewohnt
56 wirken, hat aber den großen Vorteil, dass das Dateisystem auf allen
57 Unixsystemen sehr ähnlich aufgebaut ist. Dadurch ist es leicht sich auf
58 neuen Computern zurechtzufinden bzw. bei vielen Servern den Überblick
59 nicht zu verlieren.
61 In einem Dateiort (Pfad) werden Verzeichnisnamen durch
62 Slash ("`\texttt{/}"') getrennt.
63 Das oberste Verzeichnis in der Hierarchie (sozusagen die Wurzel des
64 Dateisystembaums -- auch root-Verzeichnis genannt) wird nur mit einem
65 "`\texttt{/}"' bezeichnet. In den darunterliegenden Verzeichnissen befinden sich
66 die Systemdateien. Im Folgenden werden die wichtigsten Verzeichnisse
67 kurz angeführt:
69 \myitem{/etc}
70 Hier befinden sich die Konfigurationsdateien des Systems. Das sind
71 üblicherweise kleine Textdateien, die mit einem beliebigen Editor
72 geöffnet werden können.
74 \myitemx{/bin}{/sbin}
75 In diesen beiden Verzeichnissen befinden sich die wichtigsten
76 Programme, ohne die das System nicht starten kann. Die Programme
77 in /sbin sind nur für \texttt{root} vorgesehen.
79 \myitem{/dev}
80 Auf unixartigen Systemen werden auch Geräte wie z.\,B. (Festplatten, Mäuse,
81 USB-Sticks, \ldots) als Dateien repräsentiert -- dafür ist dieses
82 Verzeichnis vorgesehen.
83 Grund\-sätzlich kann darauf auch ähnlich wie auf normale Dateien zugegriffen
84 werden, sofern das verwendete Programm etwas mit den Rohdaten anfangen kann.
86 \myitem{/lib}
87 In diesem Verzeichnis befindet sich ausführbarer Code, der von verschiedenen
88 Programmen benötigt wird.
89 \dontshow{Z.\,B. Kernelmodule (entspricht ca. Treibern)
90 oder dynamisch ladbaren Bibliotheken (das sind die \texttt{.dll}-Dateien
91 unter Windows).
94 \myitem{/home}
95 Der Ort für die Daten der Benutzer. Es gibt kein wirklich einheitliches
96 Format, aber üblich ist, dass es für jeden Benutzer ein
97 Unterverzeichnis (sein sogenanntes HOME-Verzeichnis)
98 gibt, in dem alle seine (privaten) Daten liegen.
100 \myitem{/var/log}
101 In \texttt{/var} speichern Programme ihre Betriebsdaten, um die sich
102 der Benutzer normalerweise nicht kümmern muss. \texttt{/var/log} ist von
103 besonderem Interesse: Hier liegen
104 zahlreiche Logfiles. Das sind Dateien, in denen protokolliert wird, was das
105 System gerade macht. Wenn irgendetwas nicht funktioniert, dann finden
106 sich in den Logfiles oft wichtige Hinweise auf die Ursache.
108 \myitem{/proc}
109 In diesem Verzeichnis sind keine normalen Dateien (vgl. mit \texttt{/dev})
110 sondern "`virtuelle Dateien"', die das System beschreiben: Welche
111 Treiber sind geladen, welche Hardware wurde erkannt, welche Programme
112 laufen gerade, \ldots
114 \myitem{/usr}
115 Der Großteil des Systems, also zum Beispiel alle
116 Programme die nicht zum Booten des Rechners notwendig sind. Der
117 Aufbau erinnert ein bisschen an das Wurzelverzeichnis selbst.
119 \myitem{/usr/share}
120 Zusätzliche Daten, die die Funktionalität von Programmen erweitern oder
121 ergänzen; z.\,B. Schriften, Logos, Skripte, \ldots
123 \myitem{/usr/share/doc}
124 Sofern vorhanden: Dokumentation.
125 \dontshow{Hängt stark von der verwendeten Distribution ab,
126 wie das organisiert ist.}
128 \section{Befehle}
129 Die Shell führt jede eingegebene Zeile als Befehl aus. Eine typische
130 Befehlszeile beginnt mit dem Namen des Befehls gefolgt von optionalen
131 Argumenten.
132 Es gibt ein paar Sonderzeichen mit Spezialeffekten,
133 außerdem bietet die Shell auch einfache Programmierkonstrukte
134 wie Variablen und Schleifen, mit denen große Aufgaben (z.\,B. das Umbenennen
135 von vielen Dateien) automatisiert werden können. Ein paar Beispiele\dontshow{,
136 nach Komplexität geordnet}:
137 \begin{verbatim}
138 help
139 man sh
140 ls -l /var/log >logfiles.txt
141 grep log logfiles.txt | wc
142 for i in *; do echo $i; done
143 for i in *.JPG; do mv $i $(basename $i JPG)jpg; done
144 \end{verbatim}
146 Die Ausgabe eines Befehls wird normalerweise
147 am Bildschirm angezeigt, kann aber (mit "`\verb">""')
148 in eine Datei umgeleitet oder (mit einem sog. Pipe-Symbol "`\verb"|""')
149 als Eingabe für einen weiteren Befehl verwendet werden.
152 \subsection{Übersicht der wichtigsten Befehle}
153 \myitem{cd}
154 Wechselt das Verzeichnis. Es können absolute Pfade angegeben werden,
155 wie \example{cd /lib} oder relative \example{cd modules}.
156 Als Besonderheit gibt es in \emph{jedem} Verzeichnis einen Eintrag
157 \mytt{..} (zwei Punkte), der das jeweils darüberliegende Verzeichnis
158 meint. Also mit \example{cd ..} kommt man aus einem Verzeichnis heraus.
160 \myitem{ls}
161 Zeigt den Inhalt des Verzeichnis an. Die Optionen \texttt{-a} (versteckte
162 Dateien anzeigen) und \texttt{-l} (Details anzeigen) sind besonders
163 wichtig.
165 \myitem{echo}
166 Gibt alle Argumente auf dem Standardausgabegerät aus. -- Für Umsteiger ist
167 es vielleicht befremdlich, dass es für so eine einfache Aufgabe ein
168 eigenes Programm gibt. Tatsächlich gehört \texttt{echo} aber zu den
169 wichtigsten Tools, die auf absolut jedem Linuxsystem installiert sind.
171 \myitem{cat}
172 Alle Argumente werden als Dateien aufgefasst und eine nach der anderen
173 auf der Standardausgabe ausgegeben. Unter anderem praktisch um kleine
174 Textdateien am Bildschirm anzuzeigen.
176 \myitemx{more}{less}
177 Ähnlich wie \texttt{cat} aber mit dem Unterschied, dass nur maximal
178 eine Bildschirmseite angezeigt wird. Mit der Leertaste kann man
179 weiterblättern. \texttt{less} erlaubt außerdem das Zurückscrollen
180 mit den Pfeiltasten.
182 \myitem{man}
183 Auf Unixsystemen gibt es normalerweise zu jedem Programm eine
184 manual page (Handbuchseite). \texttt{man} mit einem Befehlsnamen als
185 Argument zeigt diese
186 Handbuchseite an. Dies ist meist der schnellste Weg, um herauszufinden,
187 welche Argumente ein Befehl versteht bzw. was eine bestimmte Option
188 bedeutet.
189 Beispiel: \example{man man}
191 \myitem{apropos}
192 Jede manual page hat eine Kurzbeschreibung.
193 Die Argumente von \texttt{apropos} sind Suchwörter. Alle passenden
194 Kurzbeschreibungen werden ausgegeben. Das ist sehr praktisch, wenn man
195 für eine bestimmte Aufgabe einen Befehl sucht, dessen Namen man vergessen
196 hat. Die interessanten Befehle aus der ausgegebenen Liste kann man dann
197 mit \texttt{man} genauer nachlesen.
198 Beispiel: \example{apropos page}
200 \myitem{whatis}
201 Gibt zu einem Befehl die Kurzbeschreibung aus.
203 \myitem{ssh}
204 Über eine verschlüsselte Verbindung mit der Shell auf einem anderen
205 Rechner im Netzwerk oder Internet verbinden. Z.\,B.
206 \example{ssh root@192.168.0.1}
208 \myitem{sudo}
209 Einen Befehl mit Administratorrechten ausführen. Es ist wesentlich
210 sicherer als normaler Benutzer zu arbeiten und nur ausgewählte
211 Befehle mit \texttt{sudo} zu starten anstatt immer als Administrator
212 zu arbeiten.
214 \myitem{sudoedit}
215 Eine geschützte Datei bearbeiten.
217 \myitem{exit}
218 Die Shell beenden.
220 \myitem{cp}
221 Kopieren von Dateien (Verzeichnisse mit \texttt{-r}).
223 \myitem{mv}
224 Eine Datei (Verzeichnis) verschieben bzw. umbenennen.
226 \myitem{rm}
227 Eine Datei löschen (für immer). Mit der Option \texttt{-r} werden Verzeichnisse
228 rekursiv gelöscht. Mit \texttt{-f} werden auch schreibgeschützte
229 Dateien gelöscht, ohne nachzufragen.
231 \myitem{mkdir}
232 Verzeichnis anlegen.
234 \myitem{chmod}
235 Zugriffsrechte einer Datei verändern. Unter Unix sind jeder Datei
236 Lese-, Schreib- und Ausführungsrechte zugeordnet und zwar getrennt für
237 den Besitzer einer Datei, die Gruppe des Besitzers und alle
238 anderen.
240 \myitem{mount}
241 Wie schon erwähnt gibt es unter Unix keine Laufwerksbuchstaben, sondern alle
242 Dateien werden in einem gemeinsamen Hierarchie dargestellt. \texttt{mount}
243 bindet den Inhalt eines neuen Datenträgers ein. Beispiel für eine
244 Diskette: \afterexample{mount /dev/fd0 /media/floppy0}
246 \myitem{grep}
247 Durchsucht die Eingabe nach einem Textmuster und gibt alle passenden
248 Zeilen auf der Standardausgabe aus. Als Muster können reguläre
249 Ausdrücke verwendet werden -- siehe manpage.
251 \myitem{gzip}
252 Das übliche Komprimierungstool unter Unix. Mit der Option
253 \texttt{-d} werden bereits komprimierte Dateien
254 wieder ausgepackt. \texttt{gzip} kann allerdings keine Archive
255 erzeugen, dafür wird meist \texttt{tar} verwendet.
257 \myitem{tar}
258 Das Standardtool um Archive zu erzeugen und verwalten. Es gibt viele
259 Optionen, die wichtigsten sind \texttt{-x}, \texttt{-c}, \texttt{-f},
260 \texttt{-z}. Beispiel: \example{tar -xzf archiv.tgz}
262 \myitem{ps}
263 Zeigt gerade am System laufende Prozesse an.
264 Mit \texttt{-A} werden alle Prozesse angezeigt. Nützlich um zu sehen,
265 ob ein Prozess überhaupt noch läuft und wieviel CPU-Zeit er verbraucht.
267 \myitem{kill}
268 Einen Prozess beenden. Die Option \texttt{-9} erzwingt das sofortige
269 Beenden, z.\,B. wenn der Prozess abgestürzt ist. Der Prozess wird als
270 PID (siehe Ausgabe von \texttt{ps}) angegeben. Beispiel:
271 \texttt{kill -9 1234} --- technisch gesehen sendet \mytt{kill} ein
272 sogenanntes Signal an den Prozess. Manche Signale können auch durch
273 Tastenkombinationen ausgelöst werden, allerdings ausgerechnet das
274 Signal \mytt{-9}, das sofortiges Beenden erzwingt, nicht.
276 \section{Tastenkombinationen}
277 Je nach Arbeitsumgebung gibt es eine Vielzahl verschiedener Tastenbelegungen.
278 Hier wird nur auf die unmittelbar für die Shell wichtigsten eingegangen:
280 \strg{C}
281 Sendet an den momentan aktiven Prozess ein sog. Interrupt-Signal. Das
282 hat bei den meisten Programmen eine ähnliche Wirkung wie wenn es mit
283 \texttt{kill} beendet wird.
285 \strg{Z}
286 Sendet an den momentan aktiven Prozess ein Stop-Signal. Dadurch wird
287 die Ausführung des Programms angehalten (und der Benutzer zurück
288 in die Shell geworfen) ohne den Prozess wirklich zu beenden. Der
289 Prozess kann dann z.\,B. mit dem Befehl \texttt{bg} im Hintergrund
290 fortgesetzt werden.
292 \strg{S}
293 Bildschirmausgabe anhalten. Das ist auf modernen Systemen selten
294 nützlich, kann aber verwirren, wenn es unabsichtlich
295 gedrückt wurde und der Computer scheinbar nicht mehr reagiert.
296 Mit \textsf{Strg-Q} kann die Sperre wieder aufgehoben werden.
298 \strg{R}
299 Die meisten Shells haben eine Befehlshistory, über die z.\,B. mit
300 den Pfeiltasten die zuletzt verwendeten Befehle wieder aufgerufen
301 werden können. Mit \textsf{Strg-R} kann in dieser History rückwärts
302 inkrementell gesucht werden. Einfach ausprobieren und anfangen einen
303 alten Befehl eingeben \ldots
305 \key{Tab}
306 Moderne Shells können Befehle selbst vervollständigen.
308 \section{Environment}
309 Unter Unix bekommt jeder Prozess beim Start ein sogenanntes Environment,
310 das ist eine Liste von Variablen, die das Programm ähnlich wie
311 eine Konfigurationsdatei verwenden kann um Einstellungen zu lesen.
312 Es gibt also (bei manchen Programmen) zwei Möglichkeiten eine
313 Konfiguration vorzunehmen -- über Konfigurationsdateien \emph{und}
314 das Environment. Das kann manchmal zu Verwirrung führen \ldots
316 Der Befehl \texttt{env} zeigt das aktuelle Environment an. Mit dem
317 Befehl \texttt{export VAR=value} wird eine Variable für die Dauer
318 einer Shell-Sitzung gesetzt. Soll nur ein einziger Befehl mit einer
319 bestimmten Variable ausgeführt werden, so ist die Syntax
320 \example{LANG=C man env} um z.\,B. statt der deutschen die englische
321 manpage von \texttt{env} zu lesen, praktisch.
323 Welche Umgebungsvariablen
324 ein bestimmtes Programm auswertet, ist nicht allgemein festgelegt, steht
325 aber in der manpage. Deshalb hier nur eine Liste der
326 Meistverwendeten:
328 \myitem{PATH}
329 Wird von der Shell verwendet um die Programme zu finden. Diese Variable
330 ist einfach eine Liste von Verzeichnissen, in denen nach Programmen gesucht
331 werden soll. Soll ein Programm, das in einem anderen Verzeichnis liegt,
332 ausgeführt werden, dann muss der Pfad beim Befehlsnamen explizit
333 mit angegeben werden.
335 \myitem{EDITOR}
336 Es gibt Befehle (z.\,B. \texttt{sudoedit}), die einen interaktiven Editor
337 starten. Sind mehrere Editoren installiert, so kann ein bestimmter
338 oft über diese Variable ausgewählt werden.
340 \myitem{TERM}
341 Informationen über das Terminal, für das die Ausgabe formatiert werden
342 soll. Das ist wichtig, damit man, wenn man sich mit \texttt{ssh} auf
343 einen anderen Rechner verbindet, trotzdem eine passende Ausgabe für
344 das \emph{eigene} Terminal bekommt. Normalerweise funktioniert das
345 alles automatisch. Folgende Werte sind üblich: \texttt{xterm},
346 \texttt{linux}, \texttt{ansi}, \texttt{vt100}, \ldots
348 \myitem{LANG}
349 sagt welche Spracheinstellungen verwendet werden sollen. Wichtig ist das
350 vor allem, falls ein Programm mit deutschen Einstellungen fehlerhaft
351 funktioniert. Dann hilft es oft, temporär \example{LANG=C} zu setzen.
353 \section{Anregungen (zum Spielen und Lesen)}
354 \begin{flushleft}
355 Was machen die folgenden Befehle (sofern sie installiert sind):
356 \mytt{pwd}, \mytt{free}, \mytt{df}, \mytt{rmdir}, \mytt{passwd},
357 \mytt{date},
358 \mytt{info}, \mytt{killall}, \mytt{uname}, \mytt{uptime}, \mytt{chown},
359 \mytt{find}, \mytt{whoami}, \mytt{alias}, \mytt{file}, \mytt{fg}
361 \medskip
362 Außerdem noch ein paar interessante/lustige Dateien:
363 \mytt{/dev/zero}, \mytt{/dev/urandom}, \mytt{/dev/null},
364 \mytt{/proc/partitions}, \mytt{/proc/cpuinfo},
365 \mytt{/etc/profile}, \mytt{/etc/environment}, \mytt{/etc/sudoers},
366 \mytt{/usr/local/}
367 \end{flushleft}
368 \end{document}