Fakultät Informatik, HFU Brückenkurs UNIX Einführung 1 Grundlegende Kommandos unter UNIX / LINUX Allgemeine Schreibweise: kommandoname [-opt1 -opt2 ] [objekt1 objekt2 ] Erste Shell Kommandos mkdir directoryname legt ein Verzeichnis mit dem Namen directoryname an cd oder cd~ change directory (ohne Angabe oder mit Angabe ~: Wechsel ins Homeverzeichnis cd.. gehe eine Ebene nach oben (bzw. zurück) cd /etc/init.d/ change directory, Verzeichnisziel mit absoluter Pfad Angabe cd Java/Beispiele mit relativer Pfad Angabe pwd print working directory, Anzeige des Verzeichnisses, in dem man sich befindet ls list short zeigt die Unterverzeichnisse und Dateien in einem Verzeichnis an. ll oder ls -l list long (ll ist kein Standardbefehl) zeigt ebenfalls die Unterverzeichnisse und Dateien in einem Verzeichnis an. Es werden zusätzliche Infos ausgegeben wie Dateityp, Zugriffsrechte, Eigentümer, Gruppe, Größe und Modifikationsdatum. Optionen zu ls und ll -a zeigt versteckte Dateien (.dateien) -ld directoryname zeigt nur Angaben von directoryname, nicht seinen Inhalt -F kennzeichnet Verzeichnisse mit / und ausführbare Dateien mit * more filename zeigt einen Dateiinhalt seitenweise auf dem Bildschirm an. less filename zeigt einen Dateiinhalt ebenfalls an, man kann in der Datei vor und zurückspringen und nach Begriffen suchen (nicht Standard). echo "irgend ein gibt irgend ein Text auf die Standardausgabe (Bildschirm) Text" aus. touch file berührt die Datei file und ändert das Modifikationsdatum Namenskonventionen für Dateinamen, Verzeichnisnamen: Alle Buchstaben des ASCII Zeichensatzes sind erlaubt (also keine Umlaute oder ß). Zahlen sind erlaubt. Minus Zeichen ist NICHT als 1. Zeichen erlaubt (reserviert zur Kennzeichnung von Optionen), innerhalb von Namen ist es erlaubt. Unterstrich _ ist überall im Namen erlaubt. Großbuchstaben und Kleinbuchstaben werden unterschiedlich behandelt (Uebung1 ist NICHT uebung1). Punkt als 1. Zeichen kennzeichnet versteckte Dateien. Punkt innerhalb eines Namens ist erlaubt. Leerzeichen sind möglich, müssen aber mit \ (Backslash) maskiert werden. Ansonsten Vorsicht bei Sonderzeichen, denn fast alle haben eine Sonderfunktion in der Shell.
2 Brückenkurs UNIX Einführung Fakultät Informatik, HFU Sonderzeichen in der Shell und ihre Funktion (Liste ist nicht komplett): - Als 1. Zeichen kennzeichnet es eine Option, ein Dateiname darf NICHT mit diesem Zeichen beginnen. Pipe, leitet die Ausgabe eines Kommandos als Eingabe des Nachfolgekommandos weiter. & legt Prozesse in den Hintergrund. > leitet die Kommandoausgabe in eine Datei um, alter Datei Inhalt wird überschrieben (Standardausgabe in Datei). >> leitet die Kommandoausgabe in eine Datei um, es wird die bestehende Datei weitergeschrieben (Standardausgabe in Datei, Anhängen an bestehende Datei). < versorgt ein Kommando mit dem Inhalt einer Datei (Standardeingabe aus Datei) / Trennzeichen im Pfadnamen für die unterschiedlichen Verzeichnis Ebenen * Wild Card, steht stellvertretend für eine beliebige Zeichenkette oder einen Leerstring.? Wild Card, steht stellvertretend für genau ein Zeichen, dass beliebig sein kann. [Xx] Sowohl X wie auch x kann an dieser Stelle stehen, X und x stehen hier als Beispiel, beliebige andere Zeichen möglich. Space, Feldseparatoren, z.b. zwischen zwei Parametern Tab \ Maskierungszeichen, dass die Funktion des nachfolgenden Sonderzeichens aufhebt (z.b. bei Leerzeichen im Dateinamen wird als Leerzeichen und nicht als Feldseparator behandelt). `cmd` cmd steht für ein beliebiges Kommando. Auswertung des Kommandos, wenn es auf der Parameter Position eines anderen Kommandos steht (Beispiel:: echo `date`). $ kennzeichnet eine Variablen. 'text' Klammerung von Zeichenketten, Sonderzeichen innerhalb der Quotierung haben keine Wirkung. "text" Klammerung von Zeichenketten, innerhalb der Quotierung werden aber die Zeichen $ `cmd` \! ausgewertet... kennzeichnet die übergeordnete Verzeichnisebene. kennzeichnet das aktuelle Verzeichnis Enter führt das Kommando aus Die folgenden Sonderzeichen finden hauptsächlich in Shell Skriptes Verwendung { } [ ] Klammerungen in Shell Skripten # Kennzeichnung eines Kommentares #!... sorgt dafür, dass das Skript in einer bestimmten Shell ausgeführt wird Aufgabe 1: a) Legt in eurem Homeverzeichnis folgende Verzeichnisstruktur an: ersteschritte/verzeichnis1 ersteschritte/verzeichnis2 b) Wechselt in das Verzeichnis1. Mit dem Kommando echo könnt ihr einen Text auf die Standardausgabe schreiben. Über das Umlenkzeichen > wird die Ausgabe von echo in eine Datei umgeleitet: echo blablabla > dateiname. Schreibt den folgenden Text: Ich heisse euername in die Datei meinedaten
Fakultät Informatik, HFU Brückenkurs UNIX Einführung 3 c) Nachdem ihr geprüft habt, ob die Datei auch vorhanden ist und den Inhalt enthält, ergänzt ihr meinedaten durch die Angabe und wohne in eurestadt Kontrolliert, ob meinedaten wirklich beide Zeilen enthält. d) Welche drei Möglichkeiten habt ihr, um in euer Homeverzeichnis zurückzukehren? Selbstdefinierte Kommandos Beim Login werden folgende Dateien durchlaufen (C Shell csh oder deren Weiterentwicklung tcsh): /etc/.cshrc für alle User, kann nur mit root Rechten geändert werden.cshrc im Homeverzeichnis, kann jeder User selbst ändern.login im Homeverzeichnis, kann auch jeder User selbst ändern Über diese Dateien wird die Systemumgebung festgelegt (wichtige Umgebungsvariablen, Aliase). Durch den Alias kann man einem Kommando in Verbindung mit ganz bestimmten Optionen einen neuen "Kurznamen" zuweisen. Beispiel: alias ll "ls -al" Löschen von Dateien und Verzeichnissen Ein weiterer "wichtiger" Alias, der bei uns durch die /etc/.cshrc gesetzt wird, ist alias rm "rm -i" damit interaktiv gelöscht wird Über die Option -i für "interaktives Löschen" wird das Kommando rm entschärft, man muss noch einmal bestätigen, dass man wirklich die Datei löschen will. rm dateiname rmdir directoryname löscht Dateien unwiederbringlich, standardmäßig ohne Rückfrage löscht ein Verzeichnis, das leer sein muss Das Kommando rm besitzt zwei weitere, sehr "effektive" Optionen: rm -r rm -f löscht rekursiv alle Unterverzeichnisse und deren Dateien, arbeitet aber interaktiv und fragt besonders bei schreibgeschützten Verzeichnisses und Dateien nach. löscht sofort alle Dateien in einem Verzeichnis, egal ob sie schreibgeschützt sind, ohne nachzufragen (inaktiviert die i Option). Die "tödliche" Kombination aus beiden Optionen und dem Wild Card Zeichen * rm -rf * kann deshalb sehr schnell im Homeverzeichnis Platz schaffen und sollte deshalb nur mit äußerster Vorsicht verwendet werden
4 Brückenkurs UNIX Einführung Fakultät Informatik, HFU Anzeigen von Dateiinhalten more file less file cat file1 file2... cat file1 file2 >file3 tail f logfile zeigt einen Dateiinhalt von file seitenweise auf dem Bildschirm an. zeigt einen Dateiinhalt ebenfalls seitenweise an, man kann in der Datei vor und zurückspringen und nach Begriffen suchen. kann den Dateiinhalt von mehreren Dateien anzeigen, macht keine seitenweise Anzeigeformatierung file3 wird aus file1 und file2 gebildet Die letzten Zeilen von logfile werden angezeigt, tail wird nicht beendet (zur Beobachtung von Logfiles). Aufgabe 2: Mit dem Kommando cat und der Ausgabe Umlenkung kann von der Konsole direkt in eine Datei geschrieben werden. Die Dateieingabe muss dann über Ctrl d (Setzen des EOF = End of File bzw. EOD = End of Data) abgeschlossen werden. a) Schreibt mit Hilfe von cat einen beliebigen Text in eine Datei, kontrolliert anschließend, ob die Datei vorhanden ist und tatsächlich den gewünschten Inhalt enthält. b) Nun ergänzt über cat diese Datei durch weiteren Text. Was ist zu beachten? Kontrolliert eure Eingabe. Aufgabe 3: Mit dem Kommando touch file "berührt" man eine Datei, das bedeutet, dass das Modifikationsdatum auf die aktuelle Zeit gesetzt wird. Existiert die Datei noch nicht, so wird sie angelegt, enthält aber keinen Inhalt. a) Legt über touch eine Datei an und kontrolliert ihr Vorhandensein und ihre Rechte. b) Zeigt den Inhalt von ersteschritte an. Welche Datums und Zeitangaben seht ihr bei den Dateieinträgen? Nun "berührt" das Verzeichnis Verzeichnis2. Kontrolliert abermals die Datumsund Zeitangaben. c) Löscht alle "leeren" Dateien (Dateien der Länge 0). Beschreibung aller Kommandos in den Manpages (manual pages) Die Manpages ruft man auf über man kommandoname Kurzbeschreibung der verfügbaren Optionen eines Kommandos über kommandoname --help (nicht standardisiert)
Fakultät Informatik, HFU Brückenkurs UNIX Einführung 5 Aufgabe 4: Ruft die Manpage des Kommandos ls auf und seht euch danach die Kurzbeschreibung der verfügbaren Optionen dazu an. Dateirechte Jede Datei und jedes Verzeichnis hat bestimmte Rechte, über die das System weiß, wer was damit machen darf. Die Rechte bekommen wir über das Kommando ll bzw. ls l angezeigt: ll ersteschritte/verzeichnis2/ total 4 -rw-r--r-- 1 mai users 51 Sep 15 10:09 beispiel1 -rw-r--r-- 1 mai users 0 Sep 15 11:14 leeredatei lrwxrwxrwx 1 mai users 9 Sep 15 11:19 Name2 -> beispiel1 drwxr-xr-x 2 mai users 72 Sep 15 10:12 verz3 Der erste Wert bezeichnet den Dateityp: - normale Datei d Verzeichnis l Link (Verweis auf eine andere Datei / Verzeichnis) b / c für Gerätetreiber / devices Dann kommen die Rechte des Users (u), der Gruppe (g) und aller anderen (o). Die Rechte werden in der Reihenfolge rwx angezeigt, das Minuszeichen zeigt an, dass das entsprechende Recht nicht gesetzt ist: r w x read write execute Die Rechte können auch in oktaler Form benannt werden, ein gesetztes Recht entspricht einer binären Eins, ein nicht gesetztes Recht eine Null. Beispiel: u g o u: Besitzer, g: gruppe, o: other d rwx r-x r-x 2 mai users 72 Sep 15 10:12 verz3 111 101 101 = 755 8 (default-rechte für Verzeichnisse)) - rw- r-- r-- 1 mai users 0 Sep 15 11:14 leeredatei 110 100 100 = 644 8 (default-rechte für Dateien) Minimale Rechte für Verzeichnisse: r w x Verzeichniseinträge können angezeigt werden, wenn zusätzlich das x Flag gesetzt ist. Dateien können angelegt und gelöscht werden. Man kann mit cd in das Verzeichnis wechseln. Verzeichniseinträge können angezeigt werden, wenn zusätzlich das r Flag gesetzt ist.
6 Brückenkurs UNIX Einführung Fakultät Informatik, HFU chmod 700 directory chmod 744 file chmod u+x file chmod go-x directory chmod a+x file Rechte Vergabe über die Oktal Werte für ein Verzeichnis Rechte Vergabe über die Oktal Werte für eine Datei Execute Recht für Dateibesitzer setzen Execute Recht des Verzeichnisses für Gruppe und andere entfernen Execute Recht der Datei für alle setzen (Besitzer, Gruppe, Other) Default Rechte festlegen Die Maximal Rechte in oktaler Form für Verzeichnisse sind 777 und für Dateien 666, da die meisten Dateien nicht ausgeführt werden und deshalb keine Execute Rechte brauchen. Aber alle ausführbaren Dateien (Shell Skripte, Programme) brauchen Execute Rechte. In der /etc/profile werden Standardprofil Einstellungen hinterlegt. Die Maximal Rechte bei der Generierung von Verzeichnissen und Dateien werden hier für alle Benutzer des Systems über den Befehl umask maskiert. Der Oktal Wert der Generierungsmaske wird von den Maximal Rechten abgezogen. umask 022 Verzeichnis: 777 022 -> 755 Datei: 666 022 -> 644 Ist eine andere Rechte Maskierung bei der Dateierzeugung gewünscht, so kann man in seiner.cshrc im Homeverzeichnis ein entsprechendes umask eintragen. Aufgabe 5: Verändert die Rechte eurer Dateien und Verzeichnisse über die entsprechenden Oktal Werte und über eine beliebige Angaben in der Form ugo±rwx Aufgabe 6: Um für die aktuelle Shell die File Generierungsmaske neu zu setzen, könnt ihr den umask Befehl direkt auf der Konsole absetzen. Definiert eine andere Maske als 022 und testet sie, indem ihr Dateien und Verzeichnisse anlegt und das Ergebnis überprüft. Aufgabe 7: Schreibt ein Mini Shell Skript folgenden Inhaltes echo "Jetzt ist `date`" (Tipp: cat > heute, Eingabe der Zeile, Eingabe abschließen mit Ctrl d) Führt das Programm aus über die Konsolen Eingabe./heute Es wird zu einer Fehlermeldung kommen, weil die Rechte nicht stimmen. Ändert diese so ab, dass das Programm läuft.
Fakultät Informatik, HFU Brückenkurs UNIX Einführung 7 Kopieren / Verschieben von Dateien cp file1 file2 kopiere file1 nach file2 cp file1 [file2...]verzeichnis2 kopiere eine oder mehrere Dateien nach verzeichnis2 mv file1 file2 benenne file1 in file2 um mv file1 [file2...] verzeichnis2 verschiebe eine oder mehrere Dateien nach verzeichnis2 Nachtrag zu Namenskonventionen Dateiendungen sind unter UNIX kein Muss, sondern ein Kann file.txt Textfile file.sh Shell Skript file.pl Perl Skript file.tar mit tar gepackte Datei file.tar.gz mit tar gepackte Datei, die zusätzlich mit zip komprimiert wurde Suchen nach bestimmten Dateien oder Dateien mit bestimmten Inhalten grep "text" * grep n "text" * grep l "text" * find. name "*.java" sucht den angegebenen text in allen Dateien des aktuellen Verzeichnisses, zeigt bei Auffinden die gesamte Zeile an, in der text auftritt, bei mehreren Dateien zusätzlich den Dateinamen zeigt zusätzlich die Zeilennummer an, in der text auftritt zeigt nur den / die Dateinamen an, die text enthält / enthalten durchsucht ab dem aktuellen Verzeichnis (.) den Verzeichnisbaum abwärts nach allen Dateien mit der Endung.java Der find Befehl ist ein sehr mächtiger Befehl (siehe man find), der auch mit weiteren Befehlen über die Option exec gekoppelt werden kann: find ~ -exec grep -l "suchmuster" {} \; durchsucht das gesamte Homeverzeichnis nach Dateien, die suchmuster enthalten und zeigt deren Pfad und Namen an. Identifikationen who whoami id zeigt an, welche Benutzer an der Workstation eingeloggt sind. gibt den eigenen Benutzernamen aus zeigt die eigene user id (uid) und group id (gid) an.
8 Brückenkurs UNIX Einführung Fakultät Informatik, HFU Prozess Identifikationen Wird ein Prozess gestartet, so bekommt er eine Prozess ID. Diese Prozess ID und mit dem Prozess verbundene Infos kann man über das Kommando ps (process status) anzeigen. ps ps -e ps -f ps auxww ohne Optionen zeigt es nur die eigenen Prozesse mit PID, TTY, Time und CMD Name an. zeigt alle Prozesse mit den oben genannten Parametern an. zeigt die eigenen Prozesse mit UID, PID, PPID, C, STIME, TTY, TIME, CMD an. nur unter LINUX: bringt weiterführende Infos zu allen Prozessen als die Option f. Angezeigte Parameter von ps UID PID PPID C STIME TTY TIME CMD User ID bzw. Login Name des Prozessbesitzers Prozess ID, über diese ID kann der Prozess gekillt werden ID des Parents Prozesses, der diesen Prozess gestartet hat Prozessor Auslastung für Scheduling Startzeit des Prozesses Terminal, von dem der Prozess gestartet wurde gesamte Ausführungszeit des Prozesses bis zu diesem Zeitpunkt Kommando Name des Prozesses Prozesse abbrechen Abbruch über Ctrl c Die meisten eigenen Prozesse laufen im Vordergrund. Will man einen Vordergrund Prozess beenden, so gelingt das in den meisten Fällen durch Drücken von Ctrl c. Abbruch über das Kommando kill processid Hintergrundprozesse geben ihre Prozess ID nach dem Start zurück. Die Prozess ID kann man, wie auf der vorhergehenden Seite beschrieben, auch über das Kommando ps herausfinden. Über kill processid wird das Standardsignal SIGTERM an den Prozess gesendet, der den Prozess beendet. Manche Prozesse reagieren nicht auf das Standardsignal SIGTERM. Sie lassen sich nur über das Signal SIGKILL mit der Signalnummer 9 beenden: kill -9 processid Signal SIGKILL beendet den Prozess (Datenverluste möglich) Suchen einer Prozess ID zum Abbrechen über das Kommando kill: Eine weitere Konsole öffnen, den Prozess suchen über ps ef grep loginname grep cmd -> processid, den Prozess beenden über kill -9 processid