Hans-Werner Heinl: Das Linux-Befehle-Buch
Transcrição
Hans-Werner Heinl: Das Linux-Befehle-Buch
Hans-Werner Heinl: Das Linux-Befehle-Buch Hans-Werner Heinl Das Linux-Befehle-Buch Alle in diesem Buch enthaltenen Programme, Darstellungen und Informationen wurden nach bestem Wissen erstellt und mit Sorgfalt getestet. Dennoch sind Fehler nicht ganz auszuschließen. Aus diesem Grund ist das in dem vorliegenden Buch enthaltene ProgrammMaterial mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autoren und Verlag übernehmen infolgedessen keine Verantwortung und werden keine daraus folgende Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieses ProgrammMaterials, oder Teilen davon, oder durch Rechtsverletzungen Dritter entsteht. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Buch berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann verwendet werden dürften. Alle Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt und sind möglicherweise eingetragene Warenzeichen. Der Verlag richtet sich im Wesentlichen nach den Schreibweisen der Hersteller. Andere hier genannte Produkte können Warenzeichen des jeweiligen Herstellers sein. Dieses Werk ist urheberrechtlich geschützt. Alle Rechte, auch die der Übersetzung, des Nachdruckes und der Vervielfältigung des Buches, oder Teilen daraus, vorbehalten. Kein Teil des Werkes darf ohne schriftliche Genehmigung des Verlages in irgendeiner Form (Druck, Fotokopie, Microfilm oder einem anderen Verfahren), auch nicht für Zwecke der Unterrichtsgestaltung, reproduziert oder unter Verwendung elektronischer Systeme verarbeitet, vervielfältigt oder verbreitet werden. Bibliografische Information Der Deutschen Bibliothek Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.ddb.de abrufbar. ISBN 3-938626-01-1 © 2007 Nicolaus Millin Verlag GmbH, Lohmar (http://www.millin.de) Umschlaggestaltung: Fritz Design GmbH, Erlangen Gesamtlektorat: Nicolaus Millin Fachlektorat: Satz: LATEX Druck: Gallus, Berlin Printed in Germany on acid free paper. Inhaltsverzeichnis 1 Einleitung 1 2 Die Shell 3 2.1 Einführung 2.2 Die Shell nutzen 2.3 . . . . . . . . . . 3 . . . . . . . . . 4 2.2.1 Nach der Anmeldung . . . . . . . 4 2.2.2 Befehle eingeben . . . . . . . . 5 2.2.3 Befehlshistorie . . . . . . . . 6 2.2.4 Befehls-Dokumentation . . . . . . 6 2.2.5 Befehls-Ergebnisse umleiten . . . . . 8 Besondere bash-Funktionen . . . . . . . 10 2.3.1 Maskierung und Quoting . . . . . . 10 2.3.2 Dateinamensubstitution . . . . . . 11 2.3.3 Kommandosubstitution . . . . . . 12 2.3.4 Gruppieren und Verknüpfen von Befehlen . . 12 2.4 Rechnen mit der bash . 2.5 Mit Kontrollstrukturen arbeiten . . . . . . . . 14 . . . . . . 18 2.5.1 Das Kommando test . . . . . . 19 2.5.2 Iteration über eine Liste (for) . . . . . 22 2.5.3 Iteration mit einem Zähler (for) . . . . . 22 2.5.4 Iteration mit einer Laufbedingung (while) . . 23 2.5.5 Iteration mit einer Abbruchbedingung (until) . 24 2.5.6 Bedingte Ausführung von Anweisungen (if) . 24 . V Inhaltsverzeichnis 2.6 2.7 2.5.7 Bedingt Anweisungsgruppen ausführen (case) 2.5.8 Kontrollfluss steuern (break und continue) Shell-Skripte . . . . . 26 . . 27 . . . . . . 28 . . . . . . 28 . . . . . . 29 . . 2.6.1 Shell-Skripte ausführen 2.6.2 Shell-Skripte erstellen 2.6.3 Parameter an Skripte übergeben . . . 30 2.6.4 Positions-Parameter in Schleifen verarbeiten . . 31 2.6.5 Interaktive Benutzereingabe mit read . . . 32 . . . 33 . Übersicht: interne Shell-Kommandos . . 3 Prozesse 35 3.1 Einführung . . . . . . . . 35 3.2 Prozesshierarchie und besondere Prozesse . . . . 37 3.2.1 Der Init-Prozess 3.2.2 verwaiste Prozesse 3.2.3 Daemonprozesse . . . . . . . . 37 . . . . . . . 38 . . . . . . . . 38 3.3 Laufende Prozesse anzeigen . . . . . . . 39 3.4 Mit Prozessen kommunizieren . . . . . . 40 . . . 44 3.4.1 . . Signale in Skripten mit trap abfangen 3.5 Mit Jobs arbeiten . . . 3.6 Übersicht: Prozesse und Jobs steuern . . . . . . 45 . . . . . 46 4 Dateisystem VI 49 4.1 Die Linux-Verzeichnishierarchie . . . . . . 49 4.2 Dateiarten . . . . . . 51 4.3 Mit Dateien und Verzeichnissen arbeiten . . . . 52 4.3.1 Wechseln von Verzeichnissen mit cd . . . . 53 4.3.2 Inhalt von Verzeichnissen anzeigen mit ls . . 53 4.3.3 Kopieren mit cp 4.3.4 verschieben mit mv 4.3.5 . . . . . . . . . . . . . 55 . . . . . . . 56 löschen mit rm und rmdir . . . . . . 57 4.3.6 Links erzeugen mit ln . . . . . . 57 4.3.7 Suchen von Dateien mit find . . . . . 57 . Inhaltsverzeichnis 4.3.8 4.4 Übersicht: mit Dateien und Verzeichnissen arbeiten Datei-Berechtigungen steuern . . 60 . . . . . 61 4.4.1 Rechte verändern mit chmod . . . . . 64 4.4.2 Rechtevoreinstellung mit umask . . . . . 65 4.4.3 Eigentümer festlegen mit chown und chgrp . . 67 4.5 Übersicht: Datei-Berechtigungen steuern 4.6 Daten sichern und archivieren 4.6.1 Einführung . . . . . . . 67 . . . . . . 68 . . . . . . 68 . . . . 70 4.7 Übersicht: Daten sichern und archivieren 4.8 Mit Dateiinhalten arbeiten . . . . . . . 70 4.8.1 Reguläre Ausdrücke . . . . . . . 71 4.8.2 Dateien nach Inhalten durchsuchen mit grep . . 73 4.9 Übersicht: mit Dateiinhalten arbeiten . . . . . 74 . . . . . . 76 . . . . . . 77 4.10.1.1 technische Sicht auf das Dateisystem . . 77 4.10.1.2 Benutzersicht auf das Dateisystem . . 78 . . 79 4.10 Verwaltung des Dateisystems . 4.10.1 Linux-Dateisystemstruktur 4.11 Übersicht: Verwaltung des Dateisystems 5 . . . Systemverwaltung 5.1 5.2 5.3 81 Laufzeitumgebung und Sitzungsinformationen verwalten . 81 5.1.1 Einführung . . . . . . . . . 81 5.1.1.1 Shell-Variablen . . . . . . 81 5.1.1.2 Umgebungsvariablen . . . . . 83 5.1.1.3 Befehls-Alias erstellen . . . . . 85 5.1.1.4 Shell-Optionen . . . . . 86 . Übersicht: Laufzeitumgebung und Sitzungsinformationen verwalten . . . . . . . . . . . . 89 Benutzerverwaltung . . . . . . . . . 90 . . . . . . . . 90 . . 91 5.3.1 Einführung 5.3.2 Benutzer und Gruppen erstellen / löschen 5.3.2.1 Benutzer erstellen / löschen . . . . 91 5.3.2.2 Gruppen erstellen / löschen . . . 93 VII Inhaltsverzeichnis 5.3.3 Benutzer-Einstellungen ändern . . . . . 94 5.3.4 Startskripte und Anmeldetexte . . . . . 94 . . . . . . 95 . . . . . . 97 5.4 Übersicht: Benutzerverwaltung 5.5 Druckumgebung verwalten 5.6 Übersicht: Druckumgebung verwalten . . . . . 97 5.7 Netzwerkumgebung verwalten . . . . . . 98 . 5.7.1 Netzwerk . . . . . . . . . 98 5.7.2 Protokolle . . . . . . . . . 98 5.7.3 OSI-Referenzmodell . . . . . . . 101 5.7.4 IP-Adressierung . . . . . . . 101 . 5.7.4.1 Adressklassen . . . . . . 103 5.7.4.2 Subnetzmasken . . . . . . 103 5.7.4.3 Beispiel 1 . . . . . . . 104 5.7.4.4 Beispiel 2 . . . . . . . 104 5.7.4.5 Beispiel 3 . . . . . . . 105 5.7.4.6 Beispiel 4 . . . . . . . 105 5.7.4.7 Broadcast . . . . . . . 105 5.7.4.8 Adressen vergeben . . . . . 106 . . 5.7.5 Routing . . . . . . . . 107 5.7.6 Client/Server, Daemonen, Ports und Sockets . . 107 5.7.7 DNS (Domain-Name-Services) . . . . . 108 5.8 Übersicht: Netzwerkumgebung verwalten . . . . 109 5.9 Mail-Kommandos . . . . . . . . . 109 5.9.1 . . . . . . . . . 109 5.10 Übersicht: Mail-Kommandos . . . . . . . 111 5.11 Datum- und Zeit-Befehle . . . . . . . . 112 5.11.1 Einführung . . . . . . . . 112 . . . . . 113 Einführung . 5.12 Übersicht: Datum- und Zeit-Befehle 6 Befehlsübersicht a-z 6.1 VIII 115 Hinweise zu Befehlsoptionen . . . . . . . 115 6.1.1 Erläuterungen zur syntaktischen Beschreibung . . 115 6.1.2 Linux-Befehle . . 118 . . . . . . Inhaltsverzeichnis alias (bash-builtin) apropos (1) . . . . . . . . . . 118 . . . . . . . . 118 . . . 119 at (1) atq (1) atrm (1) batch (1) awk (1) . . . . . . . . . . . 121 basename (1) . . . . . . . . . . 121 . . . . . . . . . 121 bg (bash-builtin) cal (1) . . . . . . . . . . . 122 cat (1) . . . . . . . . . . . 122 . . . . . . . . . 123 . . . . . . . . . . 124 . . . . . . . . . . 124 . . . . . . . . . . 126 cd (bash builtin) cfdisk (8) chage (1) . chattr (1) chfn (1) . . . . . . . . . . . 128 chgrp (1) . . . . . . . . . . . 129 chmod (1) . . . . . . . . . . . 129 chown (1) . . . . . . . . . . . 132 . . . . . . . . . . 133 chroot (1) chsh (1) . . . . . . . . . . . 134 clear (1) . . . . . . . . . . . 134 cmp (1) . . . . . . . . . . . 135 comm (1) . . . . . . . . . . . 135 cp (1) . . . . . . . . . . . . 136 cpio (1) . . . . . . . . . . . 137 cron (8) . . . . . . . . . . . 138 crontab (1) . . . . . . . . . . 139 csplit (1) . . . . . . . . . . 141 cut (1) . . . . . . . . . . . 143 date (1) . . . . . . . . . . . 145 dd (1) . . . . . . . . . . . . 147 . . . . . . . . 148 debugreiserfs (8) df (1) . . . . . . . . . . . . 149 diff (1) . . . . . . . . . . . 150 IX Inhaltsverzeichnis dig (1) . . . . . . . . . . . 152 . . . . . . . . . . 155 . . . . . . . . . . . 155 dumpe2fs (8) . . . . . . . . . . 156 e2fsck (8) . . . . . . . . . . 157 . . . . . . . . . . 158 . . . . . . . . . . 159 . . . . . . . . . . 159 exec (bash-builtin) . . . . . . . . . 160 exit (bash-builtin) . . . . . . . . . 160 expand (1) . . . . . . . . . 161 . . . . . . . . 161 dirname (1) du (1) . echo (1) . edquota (8) env (1) . . export (bash-builtin) expr (1) . . . . . . . . . . . 161 false (1) . . . . . . . . . . . 163 fdformat (8) . . . . . . . . . . 163 fdisk (8) . . . . . . . . . . 164 . . . . . . . . . 165 . fg (bash-builtin) file (1) . . . . . . . . . . . 166 find (1) . . . . . . . . . . . 167 . . . . . . . . . . 170 finger (1) fmt (1) . . . . . . . . . . . 171 fold (1) . . . . . . . . . . . 171 fsck (8) . . . . . . . . . . . 172 fuser (1) . . . . . . . . . . . 173 getopts (bash-builtin) . . . . . . . . 174 gpasswd (1) . . . . . . . . . . 176 . . . . . . . . . . . 176 groupadd (8) . . . . . . . . . . 177 groupdel (8) . . . . . . . . . . 178 groupmod (8) . . . . . . . . . . 179 groups (1) . . . . . . . . . . 180 . . . . . . . . . . 180 grep (1) grpck (8) X . Inhaltsverzeichnis gunzip (1) . . . . . . . . . . 181 gzip (1) . . . . . . . . . . . 182 halt (8) . . . . . . . . . . . 183 hash (bash-builtin) . . . . . . . . . 184 head (1) . . . . . . . . . 185 help (bash-builtin) . . . . . . . . . 185 host (1) . . . . . . . . . . 186 . . . . . . . . . . 188 . . . . . . . . . . . 189 ifconfig (8) . . . . . . . . . . 190 info (1) . . . . . . . . . . . 192 init (8) . . . . . . . . . . . 194 jobs (bash-builtin) . . . . . . . . . 194 join (1) . . . . . . . . . . . 195 kill (1) . . . . . . . . . . . 197 . . . . . . . . . . 197 last (1), lastb (1) . . . . . . . . . 198 lastlog (8) . . . . . . . . . . 200 . . hwclock (8) id (1) . killall (1) . ldd (1) . . . . . . . . . . . 200 less (1) . . . . . . . . . . . 201 line (1) . . . . . . . . . . . 202 ln (1) . . . . . . . . . . . . 203 locate (1) . . . . . . . . . . 204 logname (1) . . . . . . . . . . 205 . . . . . . . . 205 logout (bash-builtin) lpc (1) . . . . . . . . . . . 205 lpq (1) . . . . . . . . . . . 206 lpr (1) . . . . . . . . . . . 207 lprm (1) . . . . . . . . . . . 208 ls (1) . . . . . . . . . . . . 209 . . . . . . . . . . 210 . . . . . . . . . . 212 lsattr (1) lsof (8) . XI Inhaltsverzeichnis mail (1) . . . . . . . . . . . 212 man (1) . . . . . . . . . . . 215 mesg (1) . . . . . . . . . . . 217 mkdir (1) . . . . . . . . . . . 217 . . . . . . . . . . 218 mke2fs (8) mkfs (8) . . . . . . . . . . . 219 mknod (1) . . . . . . . . . . . 220 . . . . . . . . . 220 mkreiserfs (8) more (1) . . . . . . . . . . . 221 mount (8) . . . . . . . . . . . 221 mv (1) . . . . . . . . . . . . 224 netstat (8) . . . . . . . . . . 224 newgrp (1) . . . . . . . . . . 227 nice (1) . . . . . . . . . . . 228 nl (1) . . . . . . . . . . . . 229 nohup (1) . . . . . . . . . . . 231 od (1) . . . . . . . . . . . . 231 . . . . . . . . . . 233 passwd (1) paste (1) . . . . . . . . . . . 234 ping (1) . . . . . . . . . . . 235 pr (1) . . . . . . . . . . . . 237 ps (1) . . . . . . . . . . . . 238 . . . . . . . . . . 242 . . . . . . . . 243 . . . . . . . . . 243 . . . . . . . . . 244 quotaon/quotaoff (8) . . . . . . . . 245 read (bash-builtin) . . . . . . . . 246 readonly (bash-builtin) . . . . . . . . 246 reboot (8) . . . . . . . . . 247 . . . . . . . . . 247 . . . . . . . . . 249 pstree (1) pwd (1) (bash-builtin) quota (1) . . quotacheck (8) . reiserfsck (8) renice (8) XII . . Inhaltsverzeichnis repquota (8) . . return (bash-builtin) . . . . . . . . 250 . . . . . . . . 251 rm (1) . . . . . . . . . . . . 251 rmdir (1) . . . . . . . . . . . 252 route (8) . . . . . . . . . . . 253 rpm (8) . . . . . . . . . . . 254 runlevel (8) . . . . . . . . . . 257 sed (1) . . . . . . . . . . 258 set (bash-builtin) . . . . . . . . . 260 . . . . . . . . 262 . shift (bash-builtin) shutdown (8) . . . . . . . . . . 263 sleep (1) . . . . . . . . . . . 264 sort (1) . . . . . . . . . . . 265 split (1) . . . . . . . . . . . 267 su (1) . . . . . . . . . . . . 268 sum (1) . . . . . . . . . . . 268 sync (1) . . . . . . . . . . . 269 tac (1) . . . . . . . . . . . 269 tail (1) . . . . . . . . . . . 270 tar (1) . . . . . . . . . . . 271 tee (1) . . . . . . . . . . . 273 test (bash-builtin) . . . . . . . . . 274 time (1) . . . . . . . . . 276 . . . . . . . . 277 . . times (bash-builtin) top (1) . . . . . . . . . . . 277 touch (1) . . . . . . . . . . . 280 tr (1) . . . . . . . . . . . . 281 traceroute (8) . . . . . . . . . 283 trap (bash-builtin) . . . . . . . . . 284 true (1) . . . . . . . . . . . 286 tty (1) . . . . . . . . . . . 287 . . . . . . . . . . 287 tune2fs (8) XIII Inhaltsverzeichnis type (bash-builtin) . . . . . . . . . 288 . . . . . . . . 289 . . . . . . . . . 290 unalias (bash-builtin) . . . . . . . . 291 uname (1) . . . . . . . . . . . 291 uniq (1) . . . . . . . . . . . 292 . . . . . . . . 293 umask (bash-builtin) umount (8) . unset (bash-builtin) updatedb (1) . . . . . . . . . . 294 useradd (8) . . . . . . . . . . 294 userdel (8) . . . . . . . . . . 296 usermod (8) . . . . . . . . . . 297 . . . . . . . . . . 299 wait (bash-builtin) . . . . . . . . . 300 wall (1) . . . . . . . . . . . 300 wc (1) . . . . . . . . . . . . 301 whatis (1) . . . . . . . . . . 301 whereis (1) . . . . . . . . . . 303 w (1) . . which (1) . . . . . . . . . . . 304 who (1) . . . . . . . . . . . 305 . . . . . . . . . . 306 . . . . . . . . . . 306 whoami (1) write (1) . 7 Anhang 7.1 awk-Kurzreferenz . . . . . . . . . 309 . . . . . . . 309 7.1.1 Kommando-Syntax 7.1.2 Skriptsyntax . . . . . . . . . 310 7.1.3 Muster . . . . . . . . . 310 . . . . . 310 7.1.4 XIV 309 . 7.1.3.1 Regulärer Ausdruck 7.1.3.2 Ausdruck für Vergleich . . . . 310 7.1.3.3 Zusammengesetzter Ausdruck . . . 311 7.1.3.4 Bereiche 7.1.3.5 BEGIN / END . Prozedur/Anweisungen . . . . . . . 311 . . . . . . . 311 . . . . . . 311 Inhaltsverzeichnis 7.2 7.1.4.1 Kontrollflussanweisungen . . . . 311 7.1.4.2 Ausgabeanweisungen . . . . 312 7.1.4.3 Zuweisungen / Rechenoperationen . . 312 7.1.4.4 Funktionsaufrufe . . . . . . 313 7.1.5 String-Literale / Variablen . . . . . . 314 7.1.6 Beispiele . . . . . . . . . 315 vi-Kurzrefernz . . . . . . . . . 316 7.2.1 Aufrufen und Beenden des vi . . . . . 317 7.2.2 Befehle im Befehlsmodus . . . . . . 318 7.2.2.1 Cursorpositionierung . . . . . 318 7.2.2.2 Umschalten in den Eingabemodus . . 319 7.2.2.3 Text löschen 7.2.2.4 7.2.3 7.2.4 7.3 . . . . 320 Zeilen zusammenfügen . . . . 321 7.2.2.5 Befehle rückgängigmachen . . . . 321 7.2.2.6 Verschieben und Kopieren . . . . 321 7.2.2.7 Arbeiten mit eigenen Puffern . . . 322 7.2.2.8 Suchen . . . . 323 Befehle im Kommandozeilenmodus . . . . 323 7.2.3.1 Allgemeine Befehle . . . . . 323 7.2.3.2 Suchen und Ersetzen . . . . . 324 7.2.3.3 vi-Einstellungen verändern . . . 325 . . . 326 . . . . . . . . Mehrere Dateien gleichzeitig bearbeiten Wichtige Konfigurationsdateien . . . . . . 326 7.3.1 /etc/passwd . . . . . . . . 327 7.3.2 /etc/shadow . . . . . . . . 328 7.3.3 /etc/group . . . . . . . . 328 7.3.4 /etc/inittab . . . . . . . . 329 7.3.4.1 Aufbau . . . . . . . . 330 7.3.4.2 Häufig vom init-Prozess aufgerufenen Aktionen 330 7.3.4.3 Auszug aus der Datei /etc/inittab . 331 7.3.5 /etc/fstab . . . . . . . . 332 7.3.6 Initialisierungsdateien für den Benutzer . . . 333 XV Inhaltsverzeichnis 7.3.7 7.4 Index XVI Besondere Dateien . . . . . . . 333 Literaturverzeichnis / Hinweise . . . . . . 333 335 Kapitel 1 Einleitung Es ist nicht ganz einfach, den richtigen Einstieg in ein Thema wie Linux-Befehle zu finden. Die meisten Leser werden schon rudimentäre Kenntnisse über Linux haben. Dennoch wollte ich auch dem Einsteiger die Chance bieten, etwas Grundlagenwissen über die Shell, Prozesse und das Dateisystem zu erwerben. Daher beschäftigen sich die ersten drei Kapitel mit diesen Grundlagen. Im vierten Kapitel finden Sie dann eine Befehlsübersicht mit Beispielen, in denen viele Befehle mit den wichtigsten Parametern vorgestellt werden. Es gibt bestimmt einige Befehle in dieser Übersicht, die Sie nie brauchen werden. Auf der anderen Seite werden sie ggf. nach dem ein oder anderen Befehl vergeblich suchen. Ein umfassendes Werk aller Befehle zu erstellen und auf einem aktuellen Stand zu halten, dürfte kaum möglich sein. Für spezielle Anforderungen verweise ich deshalb schon hier auf die entsprechenden Manual-Seiten, die bei jeder Distribution vorhanden sind. Wie schon erwähnt erhebt dieses Werk keinen Anspruch auf Vollständigkeit. Bei der Befehlsübersicht wurden zum Teil bewusst Option, die erfahrungsgemäß nicht oder nur sehr selten benötigt werden, ausgelassen. Alle hier beschriebenen Befehle sind zum Großteil in der Standardinstallation der marktüblichen Linux-Distributionen enthalten oder können zumindest nachinstalliert werden. Sollten manche Befehls-Option nicht funktionieren, kann das an der Version des Kommandos liegen. Ein paar Hinweise zur Notation und zu Schreibweisen in diesem Buch: Bei den Beispielen können Sie am dargestellten Prompt erkennen ob der Befehl von einem normalen Benutzer aufgeführt werden kann, oder root-Rechte erfordert: user@linux:~ > ist der Prompt des normalen Benutzers. linux: # ist der Prompt des Systemverwalters root. 1 1 Einleitung Befehle, Dateinamen und Bildschirmausgaben werden allgemein in einer anderen Schriftart dargestellt. echo Hallo ist beispielsweise die Schriftart für Kommandos. Ausgaben der Programme werden zum Teil, auch aus Platzgründen, in einer kleineren Schrift dargestellt. drwxr-xr-x 2 user users drwxr-xr-x 2 user users 48 2004-08-13 13:01 bin 80 2004-08-13 13:01 Documents -rw------- 1 user users 1878 2004-08-25 11:19 nohup.out drwxr-xr-x 2 user users drwxr-xr-x 3 user users 80 2004-08-13 13:01 public_html 656 2004-08-30 17:16 work Oben sehen Sie eine Ausgabe des Befehls ls -l. Bei Syntax-Beschreibungen zu Kommandos bedeuten eckige Klammern, dass die Optionen oder Werte dazwischen auch weggelassen werden können. Kursiv dargestellte Wörter sind Platzhalter für Werte, die anstelle dieser Wörter angegeben werden müssen. Der Begriff Befehl und Kommando wird im gesamten Buch nicht unterschieden und gleichbedeutend verwendet. Zu erwähnen ist noch, daß Linux zwischen Groß-/und Kleinschreibung unterscheidet. 2 Kapitel 2 Die Shell 2.1 Einführung Je nach Anwendungsbereich haben Betriebssysteme Schnittstellen, die es dem Anwender oder Systemadministrator erlauben, verschiedene Prozesse zu starten. Ein Videorecorder hat beispielsweise ❏ eine LCD-Anzeige, ❏ das Fernsehgerät als Ausgabegerät, ❏ das Videoband als Datenspeicher und ❏ die Fernbedienung als Eingabegerät. Jedem Druckknopf der Fernbedienung ist eine bestimmte Anwendung (Prozess) zugeordnet. Der Benutzer kann durch Drücken der Play-Taste den eingelegten Film starten, d. h., es wird dem Videorecorder mitgeteilt, er soll das Programm zum Abspielen des Films starten. Auf der LCD-Anzeige wird der aktuelle Status des Programms angezeigt (Zeit, Modus) und auf dem Bildschirm der Film. Die Benutzerschnittstelle dieses Betriebssystems stellt uns die Möglichkeit zur Verfügung, bestimmte Kommandos an den Videorecorder zu schicken. Bei Computersystemen stehen dem Benutzer mehr Kommandos und Ressourcen zur Verfügung als bei einem Videorecorder, allerdings ist der Ablauf ähnlich: ein Kommando wird irgendwie vom Benutzer eingegeben und anschließend vom Betriebssystem interpretiert und verarbeitet. Die meisten Computerbetriebssysteme stellen zwei verschiedene Schnittstellen für Benutzer zur Verfügung, die sich durch Darstellung und die Art der Eingabe unterscheiden. Moderne Systeme sind in der Regel mit einer grafischen Benutzerschnittstelle (GUI Graphical User Interface) ausgestattet, bieten aber zusätzlich die Möglichkeit, verschiedene Kommandos über eine sogenannte Shell einzugeben. 3 2 Die Shell Früher war die Shell das wichtigste Programm auf einem Unix-System und auch heute ist sie das wichtigste Werkzeug für den Unix-/Linux-Administrator. Im Laufe der Zeit wurden mehrere Shell-Programme entwickelt. Da wäre die sh (Bourne Shell), die in älteren Unix-Systemen als Standard Shell eingesetzt wurde und einfache Funktionen beinhaltet. Die ksh (Korne Shell), die bereits wesentlich mehr Funktionalität als die Bourne Shell zur Verfügung stellt und immer noch in vielen Unix-Systemen als Standard eingesetzt wird. Für C-Programmierer gibt es die csh (C-Shell), die einen der Korne Shell ähnlichen Funktionsumfang bietet. Die Linux Standard-Shell ist die bash (Bourne Again Shell). Sie verbindet die Einfachheit der Bourne Shell mit der Vielseitigkeit der Korne Shell und wird heute nicht nur unter Linux gerne verwendet. Im folgenden wird ausschließlich mit der bash gearbeitet. Genau genommen ist eine Shell lediglich ein Benutzerprogramm. Sie stellt die Schnittstelle zwischen dem Benutzer und dem System dar. Sie umfaßt einen Kommandointerpreter, der Benutzereingaben analysiert und die dem Kommando zugeordneten Programme startet und Ausgaben des Kernels an den Benutzer zurückgibt. Sie verfügt aber auch über eine eigene Programmiersprache mit Sonderzeichen, Variablen und Funktionen, die es ermöglicht, sog. Shell-Skripte zu erstellen, um z. B. bestimmte administrative Aufgaben zu erleichtern. Im folgenden werden die syntaktischen Regeln und Möglichkeiten der bash ins Visier genommen. 2.2 Die Shell nutzen 2.2.1 Nach der Anmeldung Nach der erfolgreichen Anmeldung wird für jeden Benutzer eine eigene Shell (Kommandointerpreter) geladen. Während die Shell startet, laufen noch Initialisierungsskripte für spezielle Benutzereinstellungen ab. Als Kennzeichen, dass die Shell für den Empfang von Kommandos bereit ist, sieht man einen sog. Prompt (Eingabeaufforderung) am linken Bildschirmrand, falls man sich im Textmodus angemeldet hat. Hat man sich unter einer grafische Benutzeroberfläche angemeldet, kann mit einem Terminalfenster eine Shell gestartet werden, bei dem der Prompt ebenfalls am linken Rand zu sehen ist. Dieser Prompt kann individuell für jeden Benutzer eingestellt werden. Als Standard ist für den normalen Benutzer Benutzername@Rechnername:aktuelles Verzeichnis > festgelegt. Für root ist der Standard-Prompt Rechnername:Verzeichnis # 4 Kapitel 3 Prozesse 3.1 Einführung Ein Prozess ist ein Programm, das gerade ausgeführt wird. Ein Programm liegt meist in Form einer Datei auf dem Datenträger (Festplatte) vor und beschreibt eine Folge von Aktionen, die sequentiell durchgeführt werden. Erst durch das Laden des Programms in den Hauptspeicher und dessen Ausführung entsteht ein Prozess. In modernen Betriebssystemen werden immer mehrere Prozesse gleichzeitig abgearbeitet. Allerdings kann ein Prozessor nur immer einen Befehl zu einer bestimmten Zeit ausführen. Somit werden Prozesse in Ein-Prozessor-Systemen nie wirklich parallel ausgeführt. Die Zeit, die zwischen dem Umschalten von einem Prozess zum anderen vergeht, ist jedoch so gering, dass man von Pseudo-Parallelität spricht. Die Aufgabe, zu entscheiden welcher Prozess gerade Prozessorzeit erhält, übernimmt der sog. Scheduler, der nach folgenden Kriterien arbeitet: ❏ Fairness Jeder Prozess erhält einen gerechten Anteil an Prozessorzeit. ❏ Effizienz Der Prozessor ist immer vollständig ausgelastet. ❏ Kurze Antwortzeit Die Antwortzeit für die arbeitenden Benutzer wird minimiert. ❏ Großer Durchsatz Die Anzahl der ausgeführten Aufträge in einem bestimmten Zeitintervall wird maximiert. Das Betriebssystem muss zu jeder Zeit wissen, welche Prozesse gerade im Speicher sind, wie der aktuelle Zustand ist, an welcher Stelle der Prozess unterbrochen wurde und welche Speicherbereiche dem Prozess zugeordnet sind. Damit 35 3 Prozesse wird der Prozessverwaltung und der damit verbundenen Ressourcenverwaltung eine wichtige Rolle zugeteilt. In verschiedenen Tabellen merkt sich das Betriebssystem alle Informationen, die zu einem bestimmten Prozess gehören. Einige dieser Informationen sind: ❏ Register, Inhalt aller Prozessorregister Beim Umschalten zwischen den Prozessen müssen die Registerinhalte des Prozessors wieder hergestellt werden können. ❏ Befehls- bzw. Programmzähler Erhält ein Prozess wieder Rechenzeit, muss genau an der Stelle weitergearbeitet werden, wo er aufgehört hatte. ❏ Stack-Zeiger Jeder Prozess hat eine Ablage, wo Daten zwischengespeichert werden. Hier wird gespeichert, wo die oberste Stelle der Ablage ist. ❏ Prozesszustand Zu einer bestimmten Zeit befindet sich ein Prozess in einem bestimmten Zustand. Zustände sind: ➢ Aktiv Der Prozess wird gerade abgearbeitet. ➢ Wartend Der Prozess wartet auf das Ende einer Wartebedingung. ➢ Bereit Der Prozess wartet auf die Zuteilung eines Prozesses. ➢ Nicht existent Zustand eines Prozesses, der nicht mehr oder noch nicht im System existiert. Diese Zustände sind allgemeine Prozesszustände. Mit dem Kommando ps kann man sich in detaillierter Form anzeigen lassen, wie der aktuelle Zustand eines Prozesses ist. ❏ Prozessnummer Jedem Prozess ist eine eindeutige Nummer zugeordnet. ❏ Verbrauchte Prozessorzeit Die Zeit, die ein Prozess bereits an Rechenzeit hatte. ❏ Auftraggeber Benutzer-Nummer, des Benutzers, der den Prozess gestartet hatte. ❏ Ablaufpriorität Priorität des Prozesses, die angibt, wieviel Rechenzeit ein Prozess erhält. ❏ Zugriffsrechte Zugriffsrechte, die der Prozess hat. ❏ Zeiger auf Speichersegmente Speicherbereiche, die dem Prozess zugeordnet sind. 36 3.2 Prozesshierarchie und besondere Prozesse ❏ Signalstatus Signale, die der Prozess empfängt. ❏ Elternprozess Gibt die Nummer des Elternprozesses an, der diesen Prozess erzeugt hat. ❏ Reale und effektive Benutzernummer Reale und effektive Benutzernummer, mit der dieser Prozess arbeitet. ❏ Reale und effektive Gruppennummer Reale und effektive Gruppennummer, mit der dieser Prozess arbeitet. ❏ Dateideskriptoren Referenzen auf die Dateien, die von diesem Prozess benutzt werden. Für den Benutzer stehen verschieden Kommandos zur Verfügung, um sich die oben aufgeführten Informationen anzeigen zu lassen, mit Prozessen zu kommunizieren und Prozesse zu erzeugen. In den nachfolgenden Kapiteln werden einige dieser Kommandos vorgestellt. 3.2 Prozesshierarchie und besondere Prozesse In Linux-Systemen wird beim Laden des Betriebssystems der Init-Prozess gestartet. Aufbauend auf diesen Prozess wird eine Hierarchie erstellt. Jeder Prozess kann Elternprozess eines Kindprozesses sein. Ganz oben in der Hierarchie steht jedoch immer der Init-Prozess mit der Prozessnummer 1. Diese Hierarchie ist mit einem Stammbaum zu vergleichen, der sich nach unten immer weiter gabelt. Ein Elternprozess, der Kindprozesse erzeugt, gabelt sich. Vom Betriebssystem wird zur Erzeugung eines Kindprozesses der Befehl fork (engl. Gabel) verwendet. Für den Benutzer heißt das, wenn er ein Kommando an der Shell eingibt, entsteht ein neuer Prozess. Dieser neue Prozess ist das Kind der Shell, in der er das Kommando eingegeben hat. Mit dem Kommando pstree können Sie sich die Prozesshierarchie ansehen. Der Init-Prozess (init) steht bei der Ausgabe immer an der linken Seite ganz oben. Wenn Sie der Prozesshierarchie folgen, sehen Sie auch das eingegebene Kommando pstree als Kindprozess der bash. 3.2.1 Der Init-Prozess Nachdem der Linux-Kernel gestartet ist, überprüft dieser die Gerätekonfiguration und erzeugt den SWAP-Prozess, der für das Scheduling verantwortlich ist, sowie den Init-Prozess, der in unserer Hierarchie die oberste Stelle einnimmt. Gesteuert wird dieser Prozess durch die Datei /etc/inittab. In /etc/inittab befinden sich Informationen zum Start, d. h. welche Startskripte ausgeführt werden und in welchem Run-Level das System startet. Das Programm des Init-Prozesses befindet sich im Verzeichnis /sbin. Init startet das 37 3 Prozesse [1]+ 8472 Running user@linux:/home/user > [1]+ Done sleep 100 & sleep 100 Um einen Job wieder in den Vordergrund zu holen oder nachträglich einen Prozess in den Hintergrund zu stellen, werden die Kommandos fg jobnummer (foreground) und bg jobnummer (background) verwendet. Bevor ein Prozess in den Hintergrund gestellt werden kann, muss er mit dem Signal SIGTSTP durch gestoppt werden. die Tastenkombination Strg Z user@linux:/home/user > sleep 100 & [1] 8562 user@linux:/home/user > fg 1 sleep 100 Strg z [1]+ Stopped user@linux:/home/user > bg 1 [1]+ sleep 100 & user@linux:/home/user > jobs [1]+ Running sleep 100 sleep 100 & 3.6 Übersicht: Prozesse und Jobs steuern Tabelle 3.2: Prozesse und Jobs steuern Kommando Kurzbeschreibung Details at Jobs zur einmaligen Ausführung zu einem bestimmten Zeitpunkt in eine Warteschlange stellen Seite 119 atq Die at-Jobs in einer Warteschlange anzeigen lassen Seite 119 atrm Die at-Jobs aus einer Warteschlange löschen Seite 119 batch Jobs zu einem späteren Zeitpunkt (in Abhängigkeit von der Systemauslastung) ausführen lassen Seite 119 bg Angehaltene Programme im Hintergrund fortsetzen Seite 121 crontab periodische Aufträge, die durch den cron-Daemon gestartet werden, verwalten Seite 139 fg Angehaltene Programme im Vordergrund fortsetzen Seite 165 fuser Ausgabe der PID, die angegebene Dateien bzw. Dateisysteme verwenden Seite 173 46 3.6 Übersicht: Prozesse und Jobs steuern Tabelle 3.2 – Fortsetzung Kommando Kurzbeschreibung Details jobs Aktuelle Hintergrundprozesse der Shell anzeigen Seite 194 kill Signale an Prozesse anhand der Prozessnummer senden Seite 197 killall Mit Prozessen anhand des Namens Signale senden Seite 197 ldd Anzeige der dynamischen Abhängigkeiten eines Programms Seite 200 nice Kommando mit einer bestimmten Priorität (einem bestimmten Nice-Wert) ausführen Seite 228 nohup Ignorieren der Signale SIGINT, SIGQUIT und SIGHUP Seite 231 ps Prozess-Status anzeigen Seite 238 pstree Aktive Prozesse in Baumstruktur anzeigen Seite 242 renice Priorität eines bereits laufenden Prozesses manipulieren Seite 249 time Dauer von Kommandoausführung messen und anzeigen lassen Seite 276 times Benutzer- und Systemzeiten für Prozesse der aktiven Shell anzeigen lassen Seite 277 top CPU-intensive Prozesse ausgeben Seite 277 trap Signale abfangen Seite 284 47 Kapitel 4 Dateisystem 4.1 Die Linux-Verzeichnishierarchie Mit der Installation ihres Linux-Systems werden bereits viele Programme und Konfigurationsdateien auf Ihren Computer kopiert. Alle diese Dateien sind hierarchisch in Verzeichnissen geordnet. Nachfolgende Tabelle 4.1 enthält die wichtigsten Verzeichnisse, die nach einer Installation vorhanden sind. Die Schrägstriche (/) bei den Verzeichnisnamen haben eine besonderer Bedeutung. Befindet sich der Schrägstrich am Anfang eines Verzeichnisnamens zeigt das an, dass das Verzeichnis direkt unterhalb des Hauptverzeichnisses (root) ist. Trennt der Schrägstrich Verzeichnisnamen wie in /usr/bin zeigt das an, dass sich das Verzeichnis mit dem Namen bin in der Hierarchie unter dem Verzeichnis mit dem Namen usr befindet. Als Benutzer werden Sie hauptsächlich in ihrem Heimat-Verzeichnis (auch Home-Verzeichnis genannt) /home/<Anmeldename> arbeiten und dort ihre eigene Verzeichnishierarchie aufbauen, ihre Dateien speichern. Alle anderen Verzeichnisse enthalten Dateien, die vom System benötigt werden. Tabelle 4.1: Die Linux-Verzeichnishierarchie Verzeichnis Inhalt / Hauptverzeichnis (sog. root) für alle Benutzer, oberste Ebene der Hierarchie. /boot Enthält die Start-Dateien (Kernel) des Systems. /bin (binary) Verzeichnis für häufig benutzte Programme. /dev (device) Verzeichnis für Geräte-Dateien. 49 4 Dateisystem Tabelle 4.1 – Fortsetzung Verzeichnis Inhalt /etc Verzeichnis für Dateien zur Administration und Konfiguration des Systems. /home Enthält die Benutzerverzeichnisse (Heimat-Verzeichnisses), der dem System bekannten Benutzer. /lib (library) Verzeichnis für Programmbibliotheken /media Enthält Verzeichnisse, die mit bestimmten Datenträgern, wie Diskettelaufwerk und CD, verbunden sind. /opt (option) Verzeichnis für Programmepakete, z. B. KDE, Gnome, Open-Office, die optional installiert wurden. /proc Eigentlich kein wirkliches Verzeichnis, enthält LaufzeitInformationen zum System und zum Speicher. /tmp (temporary) Platz für temporäre Dateien, die vom System, verschieden Programmen oder Benutzern erstellt werden. /usr (unix special resource) Platz für Verzeichnisse, die verschiedene Programme, Bibliotheken und Dokumentationen enthalten. /usr/bin Programme für alle Benutzer. /usr/include Include-Dateien für die C / C++ Programmierung. /usr/lib Bibliotheken für verschiedene Programmiersprachen (je nach Installation). /usr/share Verzeichnis für gemeinsam genutzte Dateien und Dokumentationen. /usr/share/man (manual) Enthält die Manual-Pages, die mit man aufgerufen werden. /usr/sbin (special binary) Enthält Programme zur Administration des Systems, die nicht für alle Benutzer verwendbar sind. /usr/src (source) Quellcode des Systems, falls dieser installiert wurde. /sbin (special binary) Programme zur Administration, die nur für bestimmte Benutzer (root oder Administratoren) zur Verfügung stehen. 50 4.2 Dateiarten Tabelle 4.1 – Fortsetzung Verzeichnis Inhalt /var (variable) Verzeichnis für variable Daten wie DruckerWarteschlangen, Log-Dateien, Mails und Prozessnummern verschiedener Dienste. 4.2 Dateiarten In Linux- und Unix-Systemen gibt es verschiedene Arten von Dateien. Im Grunde wird alles als Datei bezeichnet, von dem aus Daten gelesen oder wohin Daten geschrieben werden können. Beispielsweise werden Netzwerkverbindungen (Stream), Terminals, Pipes, die Tastatur und der Bildschirm aus Sicht des Betriebssystems als Dateien betrachtet. Die Tabelle 4.2 gibt Auskunft über die Dateiarten, die Linux benutzt. Tabelle 4.2: Dateiarten unter Linux Art Verwendung Reguläre Datei Dies ist der gebräuchlichste Dateityp. Dies sind Programmdateien, Datenbankdateien, Bilddateien, Videodateien, Klangdateien, normale Textdateien und alle Dateien, die ein Benutzer mit Büroanwendungen erstellt. Verzeichnisse Dies sind Dateien, die zur Verwaltung dienen (Ordner) und können beliebige Dateien enthalten. Zeichenorientierte Geräte Dies sind Spezialdateien und repräsentieren serielle Geräte wie Terminals, Drucker oder das Netzwerk. Sie erlauben eine eigene Pufferung durch den zugeordneten Treiber. Blockorientierte Geräte Spezialdateien für Geräte wie Harddisklaufwerke, die dem Betriebssystem die Pufferung überlassen. 51 4.4 Datei-Berechtigungen steuern Tabelle 4.3 – Fortsetzung Kommando Kurzbeschreibung Details updatedb Aktualisieren der locate-Datenbank Seite 294 4.4 Datei-Berechtigungen steuern In Mehrbenutzersystemen können mehrere Anwender auf das Dateisystem zugreifen. Aus diesem Grund werden Berechtigungen vergeben, die regeln, welche Dateien von welchen Benutzern gelesen, bearbeitet oder ausgeführt werden dürfen. Linux- und Unix-Systeme kennen drei Rechte: ❏ das Leserecht (r) (engl. read), ❏ das Schreibrecht (w) (engl. write) und ❏ das Ausführrecht (x) (engl. execute). Die Vergabe dieser Rechte erfolgt jeweils für den ❏ Eigentümer (u) (engl. user), ❏ einer Gruppe (g) (engl. group), der die Datei zugeordnet ist, und ❏ die anderen (o) (engl. others), die nicht Eigentümer oder Mitglied der Gruppe sind. Zusätzlich können jeder Datei noch Funktionen zugeteilt werden, die sich auf das Verhalten von ausführbaren Dateien, auf die Weitergabe von Rechten innerhalb von Verzeichnissen und auf die Nutzung des Speichers auswirken. Details finden sich in den Befehlsbeschreibungen zu chattr auf Seite 126 und lsattr auf Seite 210. All diese Rechte und Sonderfunktionen werden in der I-Node-Tabelle einer Datei gespeichert. Hiefür stehen 12 Bit zur Verfügung. Ist ein Recht vergeben, ist das jeweilige Bit wie ein Schalter auf 1 (an) gesetzt. Die Tabelle 4.4 beschreibt die einzelnen Rechte und Funktionen. Tabelle 4.4: Rechte und Funktionen Kürzel Beschreibung r read (Lese-Recht) Dieses Bit ermöglicht das Lesen einer Datei. Für Verzeichnisse bewirkt es, dass der Inhalt des Verzeichnisses mit ls gelesen werden kann. w write (Schreib-Recht) Dieses Bit ermöglicht das Schreiben in eine Datei. Bei Verzeichnissen ist das Umbenennen, Erstellen oder Löschen von Dateien nur über die Kombination aus den Rechten w und x möglich. 61 4 Dateisystem Tabelle 4.4 – Fortsetzung Kürzel Beschreibung x execute (Ausführ-Recht) Dieses Bit ermöglicht das Ausführen einer Datei. Allerdings muss auch das Lese-Recht (r) vorhanden sein, um die Datei auszuführen. Nur wenn dieses Recht für ein Verzeichnis vergeben ist, kann in das Verzeichnis mit cd gewechselt werden. Außerdem können Dateien und Unterverzeichnisse in einem Verzeichnis nur angelegt oder gelöscht werden, wenn außer dem Schreib-Recht auch dieses Recht vorhanden ist. s SUID-Bit (set user ID) Ist diese Bit für eine ausführbare Datei gesetzt, wird der Prozess nicht mit der Benutzer-ID des aufrufenden Benutzers, sondern mit der Benutzer-ID des Datei-Eigentümers gestartet. Beispielsweise ist das Programm /bin/passwd mit diesem Bit ausgestattet. Erst dadurch ist es möglich, dass jeder Benutzer sein eigenes Passwort ändern kann, denn nur root hat die Rechte, in die Dateien zur Benutzerverwaltung, /etc/passwd und /etc/shadow, zu schreiben. Es versteht sich von selbst, dass diese Funktion nur mit äußerster Vorsichtig eingesetzt werden soll. g SGID-Bit (set group ID) Für Dateien ist die Funktionsweise dieselbe wie bei SUID, nur auf Gruppen bezogen. Ist es für ein Verzeichnis gesetzt, werden alle in diesem Verzeichnis angelegten Dateien nicht der Gruppe des Ersteller (owner) zugeordnet, sondern erhalten die gleiche Gruppenzugehörigkeit wie das Verzeichnis selbst. Interessanterweise wirkt sich das SGID-Bit auch die Unterverzeichnisse aus. Wird ein Unterverzeichnis in einem Verzeichnis mit SGID-Bit erstellt, so wird bei diesem das SGID-Bit automatisch gesetzt. t Sticky-Bit Der ursprüngliche Einsatzbereich dieses Bits lag darin, die Ladezeit von Programmen zu verringern. Ein Programm mit gesetzten Sticky-Bit (Klebe-Bit) wurde nach dem ersten Start im Speicher gehalten, um es bei erneutem Starten nicht mehr vom Datenträger holen zu müssen. Auch heute ist diese Funktionsweise noch vorhanden, wird allerdings wegen der inzwischen performanteren Hardware kaum noch eingesetzt. Wird dieses Bit auf ein Verzeichnis angewendet, so kann ein Benutzer nur die Dateien in diesem Verzeichnis löschen, deren Eigentümer er ist. Ausgenommen ist der Benutzer root, der alle Dateien löschen kann. Dieses Verhalten wird insbesondere bei Verzeichnissen für temporäre Dateien /tmp genutzt. Jeder Benutzer darf in dieses Verzeichnis Dateien stellen, allerdings darf sie nur der Eigentümer der Datei umbenennen oder löschen. 62 4.4 Datei-Berechtigungen steuern Folgende Darstellung zeigt die 12 Rechte-Bits und ihre Zuordnung: Zuordnung Kürzel Oktalwert Bitposition Funktion s g t 4 2 1 12 11 10 Eigentümer r w x 4 2 1 9 8 7 Gruppe r w 4 2 6 5 Andere r w 4 2 3 2 x 1 4 x 1 1 Alle Rechte, Funktionen und die Zuordnung einer Datei zum Eigentümer und zur Gruppe dürfen vom Eigentümer der Datei und vom Benuzter root verändert werden. Bei der Vergabe von Rechten wird in Linux oft auf die oktale Schreibweise zurückgegriffen. Dies ergibt sich aus der Konstellation, dass jeweils 3 Rechte oder Funktionen zur Verfügung stehen. Zur Darstellung der größten Ziffer des oktalen Zahlensystems (7) benötigt man auch 3 Bit ( 1 + 2 + 4 = 7). Hierzu ein paar Beispiele: Die Rechte ---rwxrw-r-- bedeuten Oktal 0754: Kürzel Bits Oktalwert addiert 0 - Funktion 0 0 0 r 1 4 Eigentümer w x 1 1 2 1 7 Gruppe r x 1 0 1 4 1 5 r 1 4 Andere 0 0 4 Für eine Datei bedeutet diese Rechte-Konstellation, dass der Eigentümer alles darf, die Gruppe nur lesen und ausführen, alle anderen nur lesen dürfen. Für ein Verzeichnis bedeuten diese Rechte, dass der Eigentümer alles, die Gruppe nur das Verzeichnis mit ls lesen (r) und mit cd in das Verzeichnis wecheln (x) darf. Für alle anderen bedeuten diese Rechte, dass sie zwar das Verzeichnis lesen dürfen jedoch nicht in das Verzeichnis wechseln. Die Rechte ---rw-rw---- bedeuten oktal 0640: Kürzel Bits Oktalwert addiert Funktion 0 0 0 0 Eigentümer r w 1 1 0 4 2 6 Gruppe r 1 0 4 4 0 - Andere 0 0 0 0 - Für eine Datei bedeuten diese Rechte, dass der Eigentümer nur lesen und schreiben darf (allerdings darf der Eigentümer die Rechte seiner Dateien jederzeit verändern, er darf ihnen also selbst fehlende Rechte geben). Die Gruppe darf die Datei nur lesen. Alle anderen sehen zwar die Datei mit ls, wenn die entprechenden Verzeichnisrechte vergeben wurden, können aber weder lesend noch schreibend auf diese Datei zugreifen. Auf ein Verzeichnis bezogen bedeuten diese Rechte, dass der Eigentümer das Verzeichnis lesen darf, allerdings nicht in das Verzeichnis wechseln darf (fehlendes x). Das Schreibrecht ist demzufolge überflüssig, da nur die Kombination von Schreib- und Ausführ-Recht das Schreiben, Löschen 63 4 Dateisystem und Erstellen innerhalb des Verzeichnisses erlauben. Die Gruppe und alle anderen haben hier somit effektiv die gleichen Rechte wie der Eigentümer. Das Rechte -gtrwxrwxr-x bedeuten oktal 3775: Kürzel Bits Oktalwert addiert Funktion g t 0 1 1 2 1 3 Eigentümer r w x 1 1 1 4 2 1 7 Gruppe r w 1 1 4 2 7 x 1 1 Andere r 1 0 4 5 x 1 1 Das letzte Beispiel bedeutet für eine Datei, dass der Eigentümer und die Gruppenmitglieder alles dürfen. Alle anderen dürfen die Datei nur lesen und ausführen. Die Datei wird nach dem ersten Starten im Speicher gehalten (t) und muss nicht neu vom Datenträger geladen werden. Diese Datei wird mit den Rechten der ihr zugeordneten Gruppe ausgeführt (g) und nicht mit den Rechten der Gruppe der ein ausführender Benutzer angehört. Für ein Verzeichnis bedeuten diese Rechte, dass alle Dateien, die im Verzeichnis erstellt werden, die Gruppenzugehörigkeit des Verzeichnisses erhalten, nicht die des erstellenden Benutzers (g). Außerdem darf ein Benutzer nur die Dateien löschen und umbenennen, die er selbst erstellt hat (t). Alle dürfen in das Verzeichnis wechseln (x) und den Inhalt des Verzeichnisses mit ls ansehen (r). Nur der Eigentümer und die Gruppe dürfen Dateien im Verzeichnis erstellen (w). 4.4.1 Rechte verändern mit chmod Der Eigentümer eine Datei und der Benutzer root können die Rechte mit dem Kommando chmod verändern. chmod [Optionen] Rechte Dateien Das Kommando chmod erlaubt die Angabe von Rechten in der oktalen Schreibweise und mit Kürzeln. Die oktale Schreibweise bietet den Vorteil, dass die ursprünglichen Rechte durch die neuen Rechte überschrieben werden, ist also immer eindeutig. Folgende Beispiele zeigen die oktale Rechtevergabe mit chmod: chmod 4754 d Setzt für die Datei d die Rechte s--rwxr-xr--, d. h. es wird das SGID-Bit gesetzt, für den Eigentümer werden alle Rechte gesetzt, für die Gruppe werden die Rechte Lesen und Ausführen gesetzt, für die anderen wird nur das Lese-Recht gesetzt. chmod 644 d Setzt für die Datei d die Rechte ---rw-r--r--, d. h. für den Eigentümer werden die Rechte lesen und ausführen gesetzt, für die Gruppe und alle anderen wird nur das Recht lesen gesetzt. Will man nur bestimmte Rechte entziehen oder vergeben, ohne andere Rechte zu 64 Kapitel 5 Systemverwaltung Im diesem Kapitel werden wichtige Linux-Befehle zur Syystemmverwaltung mit Optionen und kleinen Beispielen beschrieben. Zunächst erfolgt eine Übersicht der Befehle nach Themen. Da eine genaue Zuordnung eines Befehls nicht immer machbar ist tauchen manche Kommandos in mehreren der folgenden Tabellen auf. Danach werden kurz ein paar Erläuterungen zur syntaktischen Darstellung in den Befehls-Beschreibungen gegeben. 5.1 5.1.1 Laufzeitumgebung und Sitzungsinformationen verwalten Einführung Die Shell ist über Variablen konfigurierbar. Eine Variable ist ein kurzer Name für einen Wert. Ein Wert ist eine Zahl, ein Audruck, ein Text oder ein Kommando. Variablen sind flüchtig, d.h. bei jedem Neustart der Shell werden die Variablen neu initialisiert. Veränderungen oder neu erstellte Variablen gehen also verloren, wenn sie nicht permanent in einer Datei gespeichert werden. Meist erfolgt das Speichern von Variablen in den dafür vorgesehenen Startskripten. Diese Startskripte setzen die Variablen für das System, die Benutzerumgebung und für Programme. Unterschieden werden sog. Shell-Variablen und Umgebungsvariablen (Environment-Variable). 5.1.1.1 Shell-Variablen Variablen, die nur innerhalb der aktuellen Shell gültig sind, werden als ShellVariable bezeichnet. Erstellt wird eine Shell-Variable, indem man einem Variablennamen durch das Gleichheitszeichen (=), einen Wert zuweist. Das Komman- 81 5 Systemverwaltung do summe=0 weist der Variablen summe den Wert 0 zu. Bei der Zuweisung darf kein Leerzeichen zwischen dem Variablennamen und dem Wert stehen. Enthält der Wert Leerzeichen, muss er mit Hilfe von Quoting-Zeichen zugewiesen werden (text=’a b c d’). Der Zugriff auf den Inhalt einer Variablen erfolgt durch das $-Zeichen, das dem Variablennamen vorangestellt wird. Um den Inhalt der Variablen summe auszugeben oder zu verwenden, gibt man demnach $summe ein. Die Variable hinter dem $-Zeichen wird durch Ihren Wert ersetzt (Variablensubstitution). Die folgenden Beispiele verdeutlichen den Umgang mit Variablen. Zunächst werden den Variablen vorname und nachname die Werte Felix und Krull zugewiesen und anschließend mit dem Kommando echo ausgegeben. Es findet eine Ersetzung der Variablen durch die Werte statt: user@linux:/home/user > vorname=Felix user@linux:/home/user > nachname=Krull user@linux:/home/user > echo $vorname $nachname Felix Krull Fehlt das $-Zeichen, wird nur der Variablenname ausgegeben: vorname Gibt man nur $vorname ohne die Verwendung des Kommandos echo ein, wird die Variable ersetzt und die Shell versucht, den Wert zu interpretieren. Die Kommandos wer=who und echo $wer verdeutlichen dieses Verhalten. user@linux:/home/user > $vorname bash: Felix: command not found user@linux:/home/user > wer=who user@linux:/home/user > $wer user :0 Jul 28 07:29 (console) Die Variablen vorname und nachname werden im folgenden einer Variablen name zugewiesen. Da zwischen den beiden substituierten Werten ein Leerzeichen stehen soll, müssen die Variablen zusammen mit dem Leerzeichen in Quoting-Zeichen eingeschlossen werden. Verwendet man anstelle der doppelten Anführungszeichen (“ “) nur einfache Anführungszeichen (’ ’)1 , verliert das $Zeichen seine besondere Bedeutung und die Variablen werden nicht durch ihre Werte ersetzt: user@linux:/home/user user@linux:/home/user user@linux:/home/user user@linux:/home/user 1 bei 82 > > > > vorname=Felix nachname=Krull name="$vorname $nachname" echo $name Shift + # eingeben kann vielen Tastaturen das Zeichen, das man mit 5.1 Laufzeitumgebung und Sitzungsinformationen verwalten Felix Krull user@linux:/home/user > name=’$vorname $nachname’ user@linux:/home/user > echo $name $vorname $nachname Wird der Wert einer Variablen als Bestandteil einer Zeichenfolge benötigt, so muss der Variablenname in geschweifte Klammern gesetzt werden, da sonst kein Trennzeichen (Leerzeichen) zwischen Variablenname und Text vorhanden ist und die Shell beide zusammen als einen Variablennamen sieht. user@linux:/home/user > verz1=/home/user/ user@linux:/home/user > echo ${verz1}privat /home/user/privat Wenn Sie das Ergebnis eines Kommandos einer Variablen zuweisen wollen, müssen Sie die Quoting-Zeichen für Kommandosubstitution verwenden. Der Variablen datum wird das Ergebnis des Kommandos date zugewiesen und nicht das Kommando date. Während sich die Uhrzeit bei der Eingabe von date verändert, bleibt der Inhalt der Variablen datum unverändert: user@linux:/home/user > user@linux:/home/user > Mi Jul 28 11:05:14 CEST user@linux:/home/user > Mi Jul 28 11:13:22 CEST user@linux:/home/user > Mi Jul 28 11:05:14 CEST datum=‘date‘ echo $datum 2008 date 2008 echo $datum 2008 Mit dem Kommando set wird eine Liste aller definierten Variablen auf der Konsole angezeigt. Löschen kann man eine Variable mit dem Kommando unset. user@linux:/home/user user@linux:/home/user Felix user@linux:/home/user user@linux:/home/user > vorname=Felix > echo $vorname > unset vorname > echo $vorname user@linux:/home/user > 5.1.1.2 Umgebungsvariablen Mit Umgebungsvariablen oder Environment-Variablen wird die Umgebung der Shell gesteuert. Diese Variablen werden in Startdateien, die beim Starten der bash ausgeführt werden, mit Werten initialisiert. Zur besseren Übersicht sind die Variablennamen meist in Großbuchstaben geschrieben. Eine Umgebungsvariable zeichnet sich dadurch aus, dass sie an Kind-Prozesse weitergegeben wird. Mit 83 Kapitel 6 Befehlsübersicht a-z 6.1 Hinweise zu Befehlsoptionen Allgemein haben Linux--Befehle das Format: Kommando [Option[Arugment]][...] Optionen beginnen meist mit einem vorangestelltem Minus-Zeichen (-) und können ggf. Argumente besitzen. Folgende Optionen gibt es bei vielen Befehlen. Tabelle 6.1: Allgemeine Optionen Option Beschreibung -h, --help Mit dieser Option werden eine kurze Syntaxbeschreibung und die möglichen Optionen des Befehls ausgegeben -v, --verbose Mit dieser Option wird der Befehl meist veranlaßt, eine sog. wortreiche Ausgabe durchzuführe. Man kann auch sagen, der Befehl ist mit dieser Option „geschwätziger“. -r, -R steht für rekursiv und weist den Befehl an, auch Unterverzeichnisse in seine Aktivitäten einzubeziehen. Befehle, die mit Dateien und Verzeichnissen arbeiten, besitzen diese Option. 6.1.1 Erläuterungen zur syntaktischen Beschreibung Die Überschrift zu jedem Befehl enthält den Namen und die Sektionsnummer der man-Pages. Jede Befehlsbeschreibung enthält folgende Bereiche: 115 6 Befehlsübersicht a-z ❏ ❙ Einsatz: ob es sich um ein Anwender- , Administratoren-Kommando oder einen Dienst handelt ❏ ❙ Anwendung: eine kurze Erklärung, was der Befehl macht ❏ ❙ Syntax: eine syntaktische Beschreibung des Befehls ❏ Tabelle mit Optionen: eine Beschreibung der Optionen, sofern vorhanden ❏ ❙ Beispiel: ein oder mehrer Beispiele zur Anwendung des Befehls ❏ ❙ Besonderheiten: beschreibt Besonderheiten des Befehls und Hinweise zur Ausführung (nicht bei jedem Befehl vorhanden) ❏ Ausgabebeschreibung: beschreibt die Ausgabe des Befehls (nicht bei jedem Befehl vorhanden) ❏ Dateien: beschreibt Dateien die der Befehl nutzt oder verändert (nicht bei jedem Befehl vorhanden) ❏ ❙ Siehe auch: enthält eine Liste von Kommandos, die im gleichen Kontext verwendet werden. Folgende Tabelle 6.2 beschreibt die im weitern verwendeten Notationen bei der syntaktischen Beschreibung eines Kommandos. Tabelle 6.2: Eingesetzte Notation Notation Bedeutung [A] Angaben in eckigen Klammern [ ] Klammern sind nicht einzugeben). [A[B]] A und B sind optional. A kann ohne B angegeben werden oder beide zusammen. B alleine ist jedoch nicht erlaubt. [...] Mehrere Angaben des vorangehenden Typs können optional wiederholt werden. A | B [A | B] Bei Angaben, die durch einen Strich | (ODER) getrennt sind, darf wahlweise nur eine Angabe gemacht werden. (ODERZeichen sind nicht einzugeben) 116 sind optional (Die 6.1 Hinweise zu Befehlsoptionen Tabelle 6.2 – Fortsetzung Notation Bedeutung ABC +x Begriffe, Zeichen und Buchstaben in Fettschrift sind Schlüsselwörter und exakt wie dargestellt einzugeben. Wort N Begriffe und Buchstaben in Kursivschrift sind durch die jeweils möglichen Angaben zu ersetzen. DEL Return Tastenbezeichnung in Versalien sind Sondertasten oder Tastenkombinationen, z. B. Delete-Taste, Enter-Taste. Tastenkombination (Taste CTRL gedrückt halten und Taste v betätigen). Tastenfolge (zuerst Taste t betätigen, anschließend Taste z ). +v CTRL t z Die Reihenfolge der Angaben ist in den meisten Fällen zwingend einzuhalten. Linux unterscheidet zwischen Groß- und Kleinschreibung. Die Begriffe Befehl und Kommando werden in dieser Referenz gleichwertig im Sinne von BetriebssystemKommando verwendet. Der Begriff Kommando wird auch für Steueranweisungen in interaktiven Programmen verwendet. Bei den Beispielen unterscheidet sich der Prompt je nach dem, ob es sich um ein Kommando handelt das jeder Benutzer starten darf (user@linux:~ > ) oder ob das Kommando vom Benutzer root auszuführen ist (linux: # ). Beispiel: shutdown -h|-r [Optionen] [-t sec] time [warning-message] Mit dem Befehl shutdown muss entweder die Option -h (halt) oder -r (reboot) angegeben werden. Weitere Optionen sind optional. Die Option -t braucht jedoch die Angabe einer Sekundenanzahl (es ist die Anzahl der Sekunden, die zwischen dem Versenden des SIGTERM-Signals und dem darauffolgenden SIGKILLSignals verstreichen soll). Wird diese Option samt Sekundenangabe weggelassen, so greift der voreingestellte Standardwert. Die Angabe time muss unbedingt gemacht werden, um den Zeitpunkt des eigentlichen Herunterfahrens des Systems zu spezifizieren. Die warning-message ist wiederum optional zu der ohnehin erfolgenden Ausgabe, dass das System heruntergefahren wird. Mit den Optionen können damit den Benutzern ergänzende Informationen geliefert werden. Ein tatsächlich abgesetzter Befehl kann wie folgt aussehen: shutdown -h +10 Dringende Wartungsarbeiten Das Herunterfahren des Systems soll in 10 Minuten durchgeführt werden. Als warning-message erscheint „Dringende Wartungsarbeiten“. shutdown -rf now 117 6 Befehlsübersicht a-z Das Herunterfahren des Systems soll sofort (statt now kann auch +0 angegeben werden) und als reboot durchgeführt werden (-r), wobei jedoch ein sog. fast reboot (-f) durchgeführt wird, d. h. beim Hochfahren des Systems wird die Überprüfung des Dateisystems ausgelassen. Es ist keine warning-message angegeben. 6.1.2 Linux-Befehle alias (bash-builtin) ❙ Einsatz: Anwender ❙ Anwendung: alias ist eine interne Shell-Funktion (kein eigener Prozess). Abkürzungen für Befehle definieren. Die Shell gestattet es, für Befehle und deren Parameter Alias-Namen zu definieren. Vor allem bei häufig gebrauchten bzw. komplexen Befehlen ist dies sinnvoll. Mit Alias-Namen kann man nicht nur bestehende Kommandos verändern, man kann auch neue Kommandos definieren. ❙ Syntax: alias neuerBefehl="alter Befehl" ❙ Besonderheiten: Die Shell wertet zuerst die Alias-Namen aus. Wird der eingegebene Befehl nicht unter den Alias-Namen gefunden, so wird nach dem passenden Kommando im Dateisystem gesucht. Alias-Namen haben damit auch Vorrang vor gleichnamigen Befehlen. Wenn man ein Alias mit dem Befehl alias definiert, so gilt dieser Alias nur solange, bis die Shell beendet oder die Definition mit dem Befehl unalias wieder rückgängig gemacht wird. Soll ein Alias-Name für einen Benutzer dauerhaft definieren werden, so muss die Alias-Anweisung in eine der Benutzerstartdateien (.profile) im Heimatverzeichnis des Benutzers eingetragen werden. Wird die Alias-Anweisung in die Datei .bashrc im Heimatverzeichnis des Benutzers eingetragen, so gilt der Alias auch in jeder Sub-Shell der Login-Shell. ❙ Beispiel: user@linux:~ > alias rm="rm -i" Mit dieser Eingabe wird festgelegt, dass beim Ausführen des Löschbefehls rm der Befehl rm -i ausgeführt wird. Es wird also vor dem Löschen erst noch einmal nachgefragt. ❙ Siehe auch:: unalias auf Seite 291. apropos (1) ❙ Einsatz: Anwender ❙ Anwendung: Erleichtert das Durchsuchen von man-pages zu einem bestimmten Thema. Das Kommando apropos durchsucht die Titel der man-pages und die in den man-pages entaltenen Kurzbeschreibungen nach dem angegebenen Stichwort. Wird eine Übereinstimmung gefunden, so wird der Name der man-Page, die Sektion und eine Kurzbeschreibung des Befehls ausgegeben. Standardmäßig wird der Suchbegriff als regulärer Ausdruck behandelt. Das Stichwort kann auch Wildcards enthalten (-w). Man kann die Suche auch auf das exakte Stichwort beschränken (-e). ❙ Syntax: apropos [-e|-w|-r] Stichwort Tabelle 6.3: Optionen zu apropos Option Beschreibung -r, --regex Jedes Stichwort wird als regulärer Ausdruck verstanden, was auch dem Standardverhalten entspricht. 118 6 Befehlsübersicht a-z user@linux:~ > cd .. Das Verzeichnis /etc wird zum neuen Arbeitsverzeichnis: user@linux:~ > cd /etc Es wird ins vorherige Arbeitsverzeichnis zurückgewechselt: user@linux:~ > cd - cfdisk (8) ❙ Einsatz: root ❙ Anwendung: Partitionierung der Festplatte. Der Befehl cfdisk erfüllt die gleiche Funktion wie der Befehl fdisk, nur ist er übersichtlicher und komfortabler, da er über die Pfeil-Tasten und ein Menü bedient werden kann. Wird cfdisk aufgerufen, so liefert er zunächst eine Übersicht über die aktuelle Partitionierung der Festplatte (gefundenen Partitionen und jeweilige Größe). Mit den Pfeil-nachoben/unten Tasten kann die Partition ausgewählt werden, mit den Pfeil-nach-rechts/links Tasten können aus dem vorhandenen Menü die Befehle ausgewählt werden. ❙ Syntax: cfdisk [Optionen] [Gerät] Tabelle 6.8: Optionen zu cfdisk Option Beschreibung -a Als Cursor wird ein Pfeil, anstelle einer invertierten Zeile dargestellt. -g Verwendet nicht die Plattengemoetrie des Festplatten-Treibers -z Startet das Programm mit einer leeren Partitionstabelle, Partitionen auf der Festplatte bleiben zunächst erhalten -c cyl überschreibt BIOS-Zylinder mit cyl -h hd überschreibt BIOS-Köpfe mit hd -s sec überschreibt BIOS-Sektoren pro track sec -P opt Gibt die Paritionstabelle im angegebenen Format opt aus. Formate sind: „r“ (rawDaten-Format), „s“ (sector-order-Format),“t“ (partion-table-raw-format) ❙ Besonderheiten: Sollte der Befehl cfdisk auf einem System nicht zur Verfügung stehen, so verwenden Sie das dialogorientierte nicht ganz so komfortable fdisk. Es versteht sich, dass dieses Kommando mit äußerster Vorsicht verwendet werden muss! ❙ Beispiel: linux:~ # cfdisk Es wird die aktuelle Partitionierung von /dev/hda ausgegeben (Standard). ❙ Siehe auch: fdisk auf Seite 164. chage (1) ❙ Einsatz: root ❙ Anwendung: Einstellungen zu Benutzerpasswörtern vornehmen, (chage = change age). Dies betrifft vor allem Passwort-Lebensdauer und Passwort-Verfallsdatum. Sämtliche Zeiteinstellungen zu den Passwörtern werden in der Datei /etc/shadow gespeichert. Die Einstellungen in der Datei 124 6.1 Hinweise zu Befehlsoptionen /etc/shadow haben Vorrang vor den Einstellungen in der Datei /etc/passwd, d. h. ist ein Passwort tatsächlich abgelaufen, so schafft auch das Ausschalten der Passwortabfrage in der /etc/passwd (das „x“ im Passwort-Feld (2. Feld) entfernen) keine Abhilfe. ❙ Syntax: chage [-m min_days] [-M max_days] [-d last_day] [-I inactive] [-E expire_date] [-W warn_days] Benutzer chage -l Benutzer Tabelle 6.9: Optionen zu chage Option Beschreibung -m min_days Der als min_days angegebene Wert gibt die Mindestanzahl an Tagen an, die das Passwort nicht geändert werden darf. Setzt man hier den Wert 0 ein, so darf der Benutzer sein Paßwort jederzeit ändern. (4. Feld der Datei /etc/shadow). -M max_days Der mit max_days angegebene Wert bezeichnet die maximale Anzahl an Tagen die das Passwort, gerechnet ab der letzten Passwort-Änderung, gültig ist. Der Benutzer muss sein Passwort vor Ablauf dieser Frist ändern, will er das Ablaufen seines Passworts und das anschließende Sperren seines Kontos verhindern. (5. Feld der Datei /etc/shadow). Sinnvollerweise wird ein „Warn-Countdown“ (Option -W) und eine Gnadenfrist (Option -I) eingestellt. -d last_day Der Wert last_day bezeichnet das Datum der letzten Passwort-Änderung. Er kann entweder als Anzahl der Tage seit dem 1.1.1970 oder als Datum mit dem Format JJJJ-MM-TT angegeben werden (3. Feld der Datei /etc/shadow). -E expire_date Dies ist das absolute Verfallsdatum des Benutzerkontos. An dem hier angegebenen Datum wird das Konto unabhängig aller anderen Einstellungen gesperrt. Der Wert expire_date kann entweder als Anzahl der Tage seit dem 1.1.1970 oder als Datum im Format JJJJ-MM-TT angegeben werden (8. Feld der Datei /etc/shadow). -I inactive Der Wert inactive bezeichnet die Anzahl der Tage, die das Passwort nach Ablauf der maximalen Passwort-Gültigkeitsdauer immer noch gültig ist. Wird hier der Wert 0 eingesetzt, so kann kein regelmäßiges Ändern des Passworts durch den Benutzer erzwungen werden (7. Feld der Datei /etc/shadow). -W warn_days Der Wert warn_days bezeichnet die Anzahl der Tage, ab denen der ”WarnCountdown” läuft. Beim Einloggen erhält der Benutzer ab diesem Tag bei jeder Anmeldung einen Hinweis, in wie vielen Tagen sein Passwort abläuft (6. Feld der Datei /etc/shadow). -l Benutzer (list) die Abfrageoption ermöglicht allen Usern, ihre Passwort-Einstellungen abzufragen. ❙ Besonderheiten: Ohne Angabe einer Option wird ein interaktives Programm gestartet, welches ermöglicht, die aktuellen Werte aller Felder der Datei /etc/shadow der Reihe nach zu bearbeiten. Die aktuellen Werte sind in eckigen Klammern angegeben. Gibt man einen neuen Wert ein, so wird er übernommen, gibt man nichts ein, so gilt weiterhin der aktuelle Wert. Statt mit dem Kommando chage können sämtliche Passwort-Einstellungen durch Editieren der Datei /etc/shadow vorgenommen werden. Zum Aufbau der /etc/shadow (siehe man 5 shadow). Feldangaben in den folgenden Ausführungen beziehen sich immer auf die Datei /etc/shadow. 125 6 Befehlsübersicht a-z Soll aus Sicherheitsgründen ein regelmäßiges Ändern des Passwortes erzwungen werden, muss neben der Mindest-Lebensdauer und der maximalen Lebensdauer unbedingt auch eine Angabe gemacht werden, wie lange das Passwort nach Ablauf der maximalen Lebensdauer noch gültig ist, es muss ein Wert >=1 angegeben werden! Will man verhindern, dass ein Benutzer sein Passwort selbst verändern kann, so genügt es, die Mindest-Passwort-Lebensdauer höher einzustellen als die maximale Passwort-Lebensdauer. ❙ Beispiel: linux:~ # chage -M 20 peter Die Maximale Passwort-Lebensdauer für den Benutzer peter wird auf 20 Tage festgelegt. linux:~ # chage -E 2008-07-31 peter Das absolute Verfallsdatum für das Konto des Benutzers peter wird auf den 31. Juli 2008 festgelegt. linux:~ # chage peter Ändere Shadow-Informationen für peter. Minimales Passwortalter [0]: 20 Maximales Passwortalter [99999]: 50 Password Expiration Warning [7]: Passwort Inaktive [-1]: 2 Letzte Passwortänderung (JJJJ-MM-TT) [2004-08-14]: Account Expiration Date (YYYY-MM-DD) [1969-12-31]: 2004-09-30 Aging-Informationen geändert. Hier wurde das interaktive Programm zur Bearbeitung der Passwort-Einstellungen gestartet. Bei den ersten beiden und beim letzten Eintrag wurden die aktuellen Werte überschrieben, der Rest wurde durch Drücken der Enter-Taste beibehalten. Die neuen Einstellungen können wie folgt abgefragt werden: linux:~ # chage -l peter Minimum: 20 Maximum: 50 Warning: 7 Inactive: 2 Last Change: Aug Passwort verfällt: Okt Passwort Inaktive: Okt Account verfällt: Sep 14, 03, 05, 30, 2004 2004 2004 2004 chattr (1) ❙ Einsatz: Anwender ❙ Anwendung: Änderung von Dateiattributen (chattr = change attributes) in einem Linux-Dateisystem vom Typ ext2 oder ext3. Sämtliche Verwaltungsinformation zu Dateien wird im jeweiligen Inode gespeichert, so auch die Dateiattribute, die meist nicht näher erläutert werden. Man sollte jedoch zumindest ihr Konzept verstanden haben, selbst wenn man nicht so oft in die Verlegenheit kommen wird, sie anzuwenden. Die Attribute stellen sozusagen eine tiefergehende Ebene der Dateirechte dar. Vor allem für einige wichtige Systemdateien ist das Setzen dieser Attribute sinnvoll. Mit dem Befehl lsattr (= list attributes) kann überprüft werden ob und welche Attribute für eine Datei gesetzt sind (siehe Eintrag zu lsattr auf Seite 210). 126 Index abmelden, 205 Alias löschen, 291 Anmeldezeiten ausgeben, 200 Archiv, 137 Archiv erstellen, 271 archivieren, 137 Attribute, 210 Attribute anzeigen, 210 Ausdruch auswerten, 274 Ausdruck (awk), 311 Ausdruck auswerten, 162 Ausführrecht, 61 Ausführungszeit anzeigen, 276 Ausgabe, 158 Ausgabeanweisung (awk), 312 Benutzer erstellen, 91 Benutzer löschen, 296 Benutzereinstellungen ändern, 297 Benutzeridentität wechseln, 268 Benutzerinformationen ausgeben, 170 Benutzerinformationen ändern, 128 Benutzerinformationen anzeigen, 189 Benutzerkonfigurationsdateien, 333 Benutzerliste anzeigen (angemeldet), 299 Benutzerverwaltung, 90 Berechnungen durchführen, 162 Berechtigung, 61 Bereich (awk), 311 Betriebssystem Informationen, 291 bg, 46 Bildschirm löschen, 134 Blockorientiertes Gerät, 51 break Anweisung, 27 Builtin-Variablen (awk), 314 bash, 4 Befehle abkürzen, 118 Befehle (vi), 318 Befehle gruppieren, 12 Befehlshistorie, 6 Befehlsinformationen anzeigen, 303 Befehlsvervollständigung, 5 Benutzer anlegen, 294 case Anweisung, 26 cd, 53 chgrp, 67 chmod, 64 chown, 67 chroot-Umgebung, 133 continue Anweisung, 27 cp, 55 /etc/fstab, 332 /etc/group, 91, 93, 328 /etc/inittab, 329 /etc/issue, 333 /etc/motd, 333 /etc/nologin, 333 /etc/passwd, 91, 92, 327 /etc/profile, 333 /etc/shadow, 91, 92, 328 Bourne Again Shell, 4 Cursorpositionierung 318 (vi), Daemon, 108 Daemon Prozess, 38 Datei dekomprimieren, 181 Datei komprimieren, 182 Datei konvertieren, 147 Datei sortieren, 265 Datei umbenennen, 224 Datei aufteilen, 141, 267 Datei drucken, 207 Datei durchsuchen, 73 Datei Eigentümer, 67 Datei Gruppe, 67 Datei kopieren, 55, 136 Datei löschen, 57, 251 Datei nach Datum suchen, 58 Datei nach Größe suchen, 59 Datei rückwärts ausgeben, 269 Datei Rechte, 130 Datei suchen, 204 Datei umbenennen, 56 Datei verschieben, 56, 224 Dateianfang ausgeben, 185 Dateiart bestimmen, 166 Dateiarten, 51 Dateiattribute ändern, 126 Dateideskriptor, 5, 9 Dateieigentümer ändern, 132 Dateien versteckte, 54 Dateien durchsuchen, 176 Dateien seitenweise ausgeben, 237 Dateien mischen, 265 Dateien suchen, 57, 167 335 Index Dateien vergleichen, 135 Dateien verknüpfen, 195 Dateien zeilenweise verglichen, 136 Dateien zusammenfügen, 123, 234 Dateiende ausgeben, 270 Dateiliste anzeigen, 209 Dateiname extrahieren, 155 Dateinamensubstitution, 11 Dateisystem, 77 Dateisystem überprüfen/reparieren, 172 Dateisystem synchronisieren, 269 Dateisystem aushängen, 290 Dateisystem einhängen, 222 Dateisystem erstellen, 219 Dateisystem kopieren, 147 Dateisystem-Baums, 148 Dateisystemrechte, 61 Dateisystemstruktur, 77 Dateiunterschiede feststellen, 150 Dateiverarbeitung, 76 Dateizeit verändern, 280 Datenaustausch, 147 Datenblock, 76 Datensicherung, 68 Datum setzen, 145 Datum-Befehle, 112 Datumsformat, 145 Dekomprimierung, 181 DHCP, 107 Disketten formatieren, 163 DNS, 152 DNS Informationen ausgeben, 186 DNS Abfrage, 152 Dokumentation, 6 Domänen-Suchliste, 153 Druckauftrag, 206 Druckauftrag löschen, 208 drucken, 207 Drucker verwalten, 205 Druckerstatus, 205 Druckerwarteschlange anzeigen, 206 dump, 231 Dynamic Host Configuration Protocol, 107 dynamische Bibliotheken, 200 336 effektive Benutzeridentität ausgeben, 306 Eingabemodus (vi), 319 Eingaben in Skripten, 32 Einstellungen änderen (vi), 325 Elternprozess, 38 Entpacken, 181 env, 84 Environment Variablen, 83 Environment-Variable, 81 Ergebnisse umlenken, 8 Exit-Code, 160 export, 84 ext-Dateisystem, 77 ext2 Dateisystem erzeugen, 218 ext2 Dateisysteminformationen, 156 ext2/3 Dateisystem überprüfen, 157 ext2/3 Dateisystem reparieren, 157 ext2/3 Parameter, 287 ext3 Dateisysteminformationen, 156 Fehlerausgabe umleiten, 9 fehlerhaftes Dateisystem, 148 Felder ausschneiden, 143 fg, 46 FIFO, 52 find, 57 finger print, 128 Finger-Information, 128 Finger-Informationen ausgeben, 170 for Anweisung über Liste, 22 for Anweisung mit Zähler, 22 fork, 37 Formatdeskriptor, 145 Formatstring (awk), 312 freier Speicherplatz, 149 Funktion, 13 Funktion beenden, 251 Funktion löschen, 293 Funktionen (awk), 313 Funktiosaufrufe (awk), 313 Gerätedatei anlegen, 220 GMT, 145 GNU info, 8 Greewich Mean Time, 145 grep, 73 group Datei überprüfen, 180 Gruppe erstellen, 177 Gruppe löschen, 178 Gruppen erstellen, 93 Gruppen-Einstellungen ändern, 179 Gruppen-Passwort zuweisen, 176 Gruppenidentifikation ändern, 227 Gruppenmitgliedschaft anzeigen, 180 Gruppenzuordnung ändern, 129 gshadow Datei überprüfen, 180 Hardware-Uhr stellen, 188 Hardwareuhr, 112 Hash-Tabelle bearbeiten, 184 hexadezimal, 231 Hilfe ausgeben, 186 Hintergrundprozess, 45 Hintergrundprozesse, 194 Hintergrunprozess Beendigung abwarten, 300 History-Mechanismus, 6 I-Node, 78 if Anweisung, 24 Info-Dokumente anzeigen, 192 init Prozess, 37 Init-Prozeß, 37 init-Prozess, 194 inittab, 37 Internet Namensauflösung, 152 IPv6-Adresse, 191 job, 45 job-control, 194 Jobs, 165 jobs, 45 Journal, 148 Kalender, 122 Kanäle, 8 kill, 43 Kindprozess, 38 Kommando-Pfad ermitteln, 304 Kommandoausführung verzögern, 264 Index Kommandos ausführen, 160 Kommandosubstitution, 12 Kommandosubstitutionszeichen, 12 Kommandotyp, 289 Kommandozeilenmodus (vi), 323 Konfigurations-Dateien, 326 Kontrollfluss (awk), 311 Kontrollstrukturen, 18 Konvertierungen, 147 kopieren (vi), 321 Kurzbeschreibung anzeigen, 301 Leserecht, 61 let, 14 Link, 52 Link erzeugen, 57 Link hart, 52 Link symbolisch, 52 links erstelln, 203 Literale (awk), 314 ln, 57 Login-Name ausgeben, 205 Login-Shell ändern, 134 Login-Shell beenden, 205 ls, 53 Magnetband, 137 man, 6 man durchsuchen, 118 man page, 215 Manual, 6 Manual-Seiten, 215 maskieren, 10 Maximum Transfer Unit, 190 Metazeichen, 10 Mustervergleich durchführen, 162 mv, 56 Nachricht versenden, 306 Nachricht senden (an alle), 300 Nachrichten versenden/empfangen, 212 Nachrichtenempfang abschalten/einschalten, 217 NAT, 106 Network Address Translation, 106 Netzwerk konfigurieren, 190 Netzwerkstatistik, 224 Netzwerkstatus, 224 Netzwerkverbindungen anzeigen, 224 Neustart, 247 Online-Handbücher, 215 Operatoren für reguläre Ausdrücke, 71 Optionen auswerten, 175 OSI-Referenzmodell, 101 Package Manager, 255 Packen, 182 pager, 201 Paketverwaltung, 255 Parameterübergabe an Skripte, 30 Partition, 77 Partitionierung, 124, 164 Partitionsinformationen anzeigen, 164 Passwort ändern, 233 Passwort-Lebensdauer, 124 Passworteinstellungen, 124 PATH Variable, 28 periodische Aufträge, 138 periodische Aufträge verwalten, 139 Pfad, 53 Pfad absolut, 53 Pfad relativ, 53 Pipe, 9, 52 Pipes erstellen, 220 Pipes sichern, 273 Plattenplatz-Verbrauch überprüfen, 244 Plattenplatzbeschränkung ein-/ausschalten, 245 Plattenplatzbeschränkung anzeigen, 244 Plattenplatzbeschränkung einrichten, 159 POP3, 212 Positions-Parameter, 30 Positionsparameter verschieben, 262 Prüfsumme berechnen, 268 Priorität, 228 promiscuous Modus, 190 Prompt, 4 Prozedur (awk), 311 Prozedur beenden, 251 Prozess, 35 Prozess anzeigen, 39 Prozess beenden, 40, 197 Prozess im Hintergrund, 121 Prozess im Vordergrund, 165 Prozess-Monitor, 277 Prozess-Priorität, 228 Prozess-Priorität verändern, 249 Prozess-Status anzeigen, 239 Prozesse anzeigen, 239 Prozesshierarchie, 37 Prozesshierarchie ausgeben, 242 Prozessnummer ermitteln, 43 Prozessnummer für Dateien ermitteln, 173 Prozessverwaltung, 36 Prozesszustand, 36 ps, 39 pstree, 37 Psuedo-Parallelität, 35 Puffer (vi), 322 pwd, 53 Quota Zusammenfassung, 250 Quota-System, 159 Quotas überprüfen, 244 Quoting, 10 read Kommando, 32 Rechenoperationen (awk), 312 Rechenoperatoren, 15 rechnen, 14 Rechnerinformationen, 291 Rechte, 61 Rechte ändern, 64, 129 Rechte oktal vergeben, 64 Rechte symbolisch vegeben, 65 Rechte Voreinstellung, 65 Reguläre Datei, 51 regulärer Ausdruck, 71 reise Dateisystem Probleme lösen, 148 reiser, 78 reiser Dateisystem, 148 reiser Dateisystem überprüfen, 247 reiser Dateisystem erstellen, 221 rm, 57 rmdir, 57 root, 133 337 Index root-Verzeichnis, 133 root-Verzeichnis ändern, 133 Route verfolgen, 283 Routing-Tabelle, 253 Routing-Tabelle anzeigen/ändern, 253 Routinginformationen anzeigen, 224 Run-Level, 38, 194 Runlevel anzeigen, 257 Scheduler, 35 Schreibrecht, 61 Schreibschutz für Variablen, 246 Seiten formatieren, 237 Server, 38 set, 83, 86 SGID-Bit, 62 Shell, 4 Shell beenden, 160 Shell Optionen, 86 Shell Skripte, 28 Shell Variable, 81 Shell-Optionen, 260 Shell-Variablen, 81 Shell-Variablen anzeigen, 260 Signal, 197 Signal abfangen, 284 Signal an Prozess mit Name senden, 198 Signal an Prozess mit Nummer senden, 197 Signale abfangen, 44 Signale ignorieren, 231 Signalliste, 285 Singal senden, 40 Skripte, 28 Skripte ausführen, 28 Skripte erstellen, 29 SMTP, 212 Socket, 52, 108 Spalten ausschneiden, 143 Speicherverbrauch anzeigen, 155 Standardausgabe, 8 Standardeingabe, 8 Standardfehlerausgabe, 9 Startinformationen anzeigen, 198 Startskripte, 38 Stellungsparameter überprüfen, 174 338 Sticky-Bit, 62 Stream Editor, 258 suchen (vi), 323 suchen / ersetzen (vi), 324 Suchmuster, 71 Suchpfad, 28 Suffix entfernen, 121 SUID-Bit, 62 Superblock-Informationen, 148 Superuser, 133 Swap Prozess, 37 synchronisieren, 269 System initialisieren, 194 System anhalten, 183, 263 Systemadministrator, 133 Systemauslastung anzeigen, 277 Systembenutzer ausgeben, 305 Systemuhr, 112 Systemzeit, 145 Systemzeit anzeigen (abgelaufene), 277 Tabulatorzeichen umwandlen, 161 Terminalname ausgeben, 287 Terminalnutzung anzeigen, 198 test, 19 test Operatoren, 19 Text löschen (vi), 320 Textdateien anzeigen, 201, 221 Textformatierung, 171 trap, 44 Uhr stellen, 188 Uhrzeit setzen, 145 umask, 65 Umgebungs Variablen, 83 Umgebungs-Variable, 81 Umgebungsvarieblen abfragen / setzen, 159 Umlenkzeichen, 9 undo (vi), 321 Universal Time Convention, 145 unset, 83 until Anweisung, 24 UTC, 145 Variable, 81 Variable löschen, 293 Variable (awk), 314 Variablen exportieren, 161 Variablen vordefinierte, 84 Variablensubstitution, 82 Vergleich (awk), 310 Vergleiche durchführen, 19 Verknüpfungszeichen, 13 verschieben (vi), 321 versteckte Dateien, 54 verwaiste Prozess, 38 Verzeichnis, 51 Verzeichnis erstellen, 217 Verzeichnis kopieren, 56 Verzeichnis löschen, 57, 252 Verzeichnis wechseln, 53, 123 Verzeichnishierarchie, 49 Verzeichnisinhalt anzeigen, 209 vi (visual editor), 316 vi Einstellungen, 325 Visual Modus, 323 Wörter zählen, 301 while Anweisung, 23 wildcard, 11 xtrace-Modus, 89 Zeichen zählen, 301 Zeichen ersetzen, 281 Zeichenorientiertes Gerät, 51 Zeile einlesen, 246 Zeilen auffüllen, 171 Zeilen löschen (doppelte], 292 Zeilen lesen, 202 Zeilen numerieren, 229 Zeilen zählen, 301 Zeilen zusammenfügen (vi), 321 Zeilenumbruch einfügen, 172 Zeit-Befehle, 112 Zeitgesteuerte Aufträge, 138 zeitgesteuerte Ausführung, 119 Zeitstempel verändern, 280 Zombie, 38 Zugriffsrechte ändern, 129 Zugriffsrechte Voreinstellung, 289