Document Details

RevolutionaryFern2779

Uploaded by RevolutionaryFern2779

Hochschule Esslingen

Rainer Keller, Tobias Heer

Tags

unix shell bash scripting linux operating systems

Summary

Lecture notes on Unix Shell and Bash, covering topics such as Bash commands and scripting. Details are also offered about the structure of Linux file systems.

Full Transcript

Unix Shell und Bash Prof. Dr.-Ing. Rainer Keller Prof. Dr. Tobias Heer Email: [email protected] Email: [email protected] 1 Überblick Bash Befehle lernen Bash programmieren Im Dateisysteme zurechtfinden... Betriebssysteme - Einfü...

Unix Shell und Bash Prof. Dr.-Ing. Rainer Keller Prof. Dr. Tobias Heer Email: [email protected] Email: [email protected] 1 Überblick Bash Befehle lernen Bash programmieren Im Dateisysteme zurechtfinden... Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 2 Lernziele Bash Programmierung lernen Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 3 Welche Vorteile hat den Linux : Wiederholung: Warum Linux! Stattdessen arbeiten wir mit und an Linux: » Linux ist Open Source: erlaubt Einblick wie das OS arbeitet » Wir werden Linux Source anschauen & Kernel übersetzen » Man kann selbst Änderungen vornehmen » Kostenlos Treiber programmieren (Windows-Quellen kostet $$$!) Weitere „Argumente“ J » Sie nutzen Linux täglich » Linux wird in vielen Bereichen eingesetzt! » Tux ist knuffig » Die Wahrscheinlichkeit ist groß, daß Sie im späteren Leben einen Zoo von Hardware- und Betriebssystem-Umgebungen haben (Solaris, Linux, IoT- Geräte, Mainframes und Windows-Desktops...) Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 4 “Spezielle” Distributionen Es gibt viele Distributionen mit spezialisiertem Fokus, z.B.: Durch die immense SW-Unterstütz- Tails: für Verschlüsselung, mit GPG, ung und langfristige (konservative) TOR-Browser, VPN und viele Sicherheits- Politik hat Debian eine spezielle Rolle feature mehr Gentoo: Es wird jegliche SW komplett YoctoLinux: Keine Distro; ein Framework immer wieder aus aktuellen Quellen ge- um eine eigene Distro zu bauen; für baut. Hierauf basiert Google ChromeOS. IoT/Embedded Geräte ideal! Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 5 Welche Distributionen hat den Linnec ? Debian , GenToo , yocto , Tails. Einführung in Benutzung der Bash Das sollten Sie an einem Linux-Rechner nachmachen Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 6 GUI vs. Bash Eingruppierung: Anwendungsprogramme (1) Grafische Benutzeroberfläche (1) Sun Java Desktop Systemnahe Programme(1/8) System JDS – auf Bibliotheken (3) Betriebssystem API (2) GNOME basierend Software Hardware Anwendungsprogramme (1) Grafische Benutzeroberfläche (1) Systemnahe Programme(1/8) Terminal Bibliotheken (3) Betriebssystem API (2) Software Hardware Grafische Programme erlauben eine intuitive und effiziente Arbeitsweise. Die Details und systemnahen Informationen bekommt man aber meist nur über Programme gestartet von der Shell, die in einem Terminal gestartet wird. Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 7 Anwendungsprogramme (1) UNIX Shell Grafische Benutzeroberfläche (1) Systemnahe Programme(1/8) Bibliotheken (3) Eine Shell ist die Kommandozeile mit der Betriebssystem API (2) Software man Programme startet. Hardware Die Shell ist somit die niedrigste, systemnahe Software, mit der ein User interagiert. Shells haben Eigenschaften von Programmiersprachen Historisch bedingt gibt es eine Unmenge Shells, z.B. 1. Bourne Shell (sh) 2. C Shell (csh) 3. Korn Shell (ksh) 4. Z-Shell (zsh) 5. Bourne Again Shell (bash) Wir betrachten hier nur die bash. Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 8 UNIX bash Mit der Unix bash können wir Anwendungsprogramme (1) Grafische Benutzeroberfläche (1) Systemnahe Programme(1/8) » Systemnahe Programme starten Bibliotheken (3) Betriebssystem API (2) » Software Grafische Programme starten Hardware » Programme killen » Komplexe Shell-Skripte ausführen! In der Kommandozeile steht die Eingabeaufforderung: tobi@mir:~$ ☐ Hier können Sie Programme starten, Programme pausieren (CTRL+Z) und beenden (CTRL+C) Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 9 UNIX bash Meine Syntax (und die der Man-Pages) Anwendungsprogramme (1) Grafische Benutzeroberfläche (1) sollte immer gleich sein...: Systemnahe Programme(1/8) Bibliotheken (3) - & $ Program [Param1] [P2|P3] –p pid Betriebssystem API (2) - Software Hardware Alles was auf der Schließen sich Parameter SHELL einzugeben aus, werden sie mittels ist, steht nach $. dem Oder | angegeben. Optionale Parameter Argumente für die Parameter sind in eckigen Klammern unterstrichen angegeben... Tipp: Die meisten Unix Tools verwenden ähnliche Parameter, die - man sich meist gut merken kann! -i Ignore case (Groß-/Kleinschreibung egal) -h Human readable (Einfach lesbar) -r Recursive (Alle Dateien & in Unterordnern) -p PID Process ID wird als Argument angegeben. - - Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 10 parameter in Unixbasch -i : Ignore Case (Groß-Kleinschreibung egal). - h : Human readable /Einfach Lesbar). -r : Recursive (alle Datein & in Unterordner). -P : process ID wird als Argument angegeben. pud : Das derzeitige verzeichnen. Oldpwd : Das oberige aktive Vorzeichnen User : Der Benutzer name. echo Home : gibt den Wert von Home. d BoldPwd Wechsel : in vorherige Verzeichnes. &: werden die Prozesse in Hintergrund gestartet firefox &: CTr-Z Wir die : Prozess im Hintergrund gestoppt ( verbraucht kein CPO Zeit mehr). Kill : stoppen. Kill PID - prozess Identifaktion !883 - · - , cd : Chang Dirctory cd/home/ : Wechsel in abslaten verzeiches. L : Gibt die inhalt der verzeichnen aus. LS -al : N d - in (Long-Format) UNIX bash Umgebungsvariablen sind wie echte Variablen, Anwendungsprogramme (1) Grafische Benutzeroberfläche (1) werden von Bash an Programme übergeben. Systemnahe Programme(1/8) Bibliotheken (3) Betriebssystem API (2) Software Hardware HOME zeigt auf das “Heimatverzeichnis“. Es gibt eine Unmenge sinnvoller Umgebungsvariablen, z.B.: » PWD: Das derzeitige Verzeichnis (Present working Directory) » OLDPWD: Das vorherige aktive Verzeichnis » USER: der Benutzername Umgebungsvariablen setzt man durch Zuweisung: $ MEINE_VARIABLE=1 Umgebungsvariablen liest man mit $VAR aus: $ echo $HOME↵ (Gibt den Wert von HOME aus) /home/tobi $ cd $OLDPWD↵ (Wechseln in vorheriges Verzeichnis) Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 11 UNIX bash Weitere nette Eigenschaften: Anwendungsprogramme (1) Grafische Benutzeroberfläche (1) » CTRL-C killt den laufenden Prozess Systemnahe Programme(1/8) Bibliotheken (3) » Mit CTRL-Z kann ein Prozess gestoppt werden Software Betriebssystem API (2) (verbraucht dann keine CPU Zeit mehr) Hardware Daraufhin kommt man zurück zur Shell. » Diesen Prozess kann man mit bg in den Hintergrund, bzw. mit fg wieder in den Vordergrund bringen (s. nächster Punkt) » Mit & werden Programme im Hintergrund gestartet tobi@mir:~$ firefox &↵ 8631 » Programme kann man einfach mit CTRL-C, » Oder mit kill PID (der Process Identification) abschiessen: $ kill 8631↵ (killt Firefox!) Viele weitere lustige Eigenschaften mit man bash. Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 12 UNIX bash Diese Zeile setzt sich zusammen aus: Anwendungsprogramme (1) Grafische Benutzeroberfläche (1) tobi@mir:~$ ☐ Systemnahe Programme(1/8) Bibliotheken (3) Betriebssystem API (2) Software Dem Usernamen Hardware Dem Verzeichnis (Directory), s.u., in dem man Dem Rechnernamen sich befindet – hier das Heim-Verzeichnis, auch gespeichert in der Umgebungsvariablen $HOME, oder auch kurz ~ (Tilde) genannt! Für Profis: Die anderen Zeichen @, :, $, (Space) sind syntaktischer Zucker, definiert durch die Umgebungsvariable PS1: $ echo $PS1↵ (Ausgabe von Variablen PS1) $ export PS1='User \u on \h in directory \w : ' setzt die Variable PS1 auf einen etwas ausführlichen Schreibstil: User tobi on mir in directory ~ : ☐ Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 13 UNIX bash Nach dem Einloggen befinden wir uns in Anwendungsprogramme (1) Grafische Benutzeroberfläche (1) dem Verzeichnis $HOME, oder kurz ~. Systemnahe Programme(1/8) Bibliotheken (3) Nun können wir uns frei in Verzeichnissen bewegen: Software Hardware Betriebssystem API (2) $ cd.. ↵ (für Change Directory) $ cd /home/↵ (Wechsel in absolutes Verzeichnis) Wir können uns den Verzeichnisinhalt ausgeben lassen: $ ls↵ (für List) $ ls -al↵ (gibt alle Dateien im Long-Format) Vor allem letzteres zeigt uns etwas UNIX-Spezifisches: Datei-Rechte, oder auch UNIX Permissions Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 14 UNIX Hilfen Zu allen Kommandos finden Sie unter Hilfe: Anwendungsprogramme (1) Grafische Benutzeroberfläche (1) $ man↵ (für manual), bspw. Systemnahe Programme(1/8) $ man bash↵ (Hilfeseite zur Bash) Bibliotheken (3) Betriebssystem API (2) Software Sucht, formatiert und stellt diese mit less dar (q=beendet) Hardware Die „Man-Pages“ sind eingruppiert in Bereiche 1-8 & n: $ man 1 bash↵ (1=System& Benutzerprogramme) $ man 2 gettimeofday↵ (2=Systemcalls & Kernelparameter) $ man 3 fprintf↵ (3=Bibliotheksaufrufe) $ man 4 kmem↵ (4=Gerätetreiber & Netz.-prot.) $ man 5 ssh_config↵ (5=Verschiedene Config.-Dateien) $ man 7 tcp↵ (7=Gerätetreiber und Protokolle) $ man 8 netstat↵ (8=Systemadmin-Tools) Obige Bereichsnummern gelten für Linux (nicht für Mac=BSD) Die Verzeichnisse definiert in $MANPATH durchsucht: /usr/share/man/:/usr/local/share/man Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 15 UNIX bash Scripte 1/3 Mehrere Kommandos zu „Scripten“ zusammenfassen: User-Administration (Anlegen von Benutzern) Starten- und Stoppen von Diensten (Web-,..., DB-server) Backup und überprüfen des laufenden Systems. Ein paar Regeln für Programmierung von Shell-Scripten: Dokumentieren: alles hinter # ist Kommentar. Eindeutig die Shell festlegen i.d. 1. Zeile:#!/bin/bash Modular programmieren: Unix-Philosophie Sauber programmieren: Parameter prüfen (wird ein Param. erwartet? sollte eine Datei verfügbar sein? Sind temp. Dateien in /tmp?) Diese Scripte lassen sich dann wie echte Programme aufrufen: $../mein_script ↵ # Interpretiere Script in dieser Shell $./mein_script ↵ # Starte neue Shell (wenn “x“ gesetzt) Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 16 UNIX bash Scripte 2/3Was bietet der shell skript. Die Bash bietet viele Variablen und Funktionen, um - - » Shell Skripte, d.h. kleine Programme mit eigenen Variablen und Funktionen, - - - - - - zu schreiben - - - - - » Um Maschinen zu administrieren (Systemautomatisierung) - - Ein Beispiel für ein Skript, z.B. als Datei script.sh: - USR_LIST="readit00 holysit01"; for USR in $USR_LIST; do ls –al `dirname $HOME`/$USR/ausgabe.txt || echo NOT FOUND; done § Schleife (for) über Benutzer aus der Liste USR_LIST, § Listing im „Long-Format“ (ls -al) der Datei ausgabe.txt, § Und zwar im HOME des Benutzers USR mittels Unteraufruf, § Falls die Datei nicht existiert: gebe „NOT FOUND“ aus... Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 17 UNIX bash Scripte 3/3 Skripte zur Systemautomation erleichtern die Arbeit: for PORT in `netstat -nat | grep -E 'LISTEN' | cut -f2-4 -d':' |cut -f1 -d' '|sed -e 's/://g'| sort -nu`; do PID=`fuser -n tcp $PORT | cut -c1-6` ; echo ""; echo "INFORMATION FOR OPEN PORT $PORT:”; echo "----------------------------"; ps -f -q $PID done § Damit finde ich alle laufenden Prozesse mit offenen Ports! § Und minimiere die Anzahl der offenen Netzwerkports! Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 18 Unix Dateisystembaum 1 Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 19 UNIX Dateisysteme Virtualisierung Festplattenspeicher: Hierarchisches Dateisystem (engl. File System, oder FS). Dateien sind im Verzeichnisbaum eingeordnet, z.B.: Pfade werden unter Unix durch Slash „/“ getrennt / (vgl. Windows mit Backslash „\“) Verzeichnisse mit Namen bin enthalten per Unix- bin/ Konvention Binaries, d.h. ausführbare Programme Das /dev/ Verzeichnis enthält Dateien zum Zugriff dev/ auf Hardware etc/ /etc/ enthält Konfigurationsdateien In /home/ liegen alle Benutzerdateien home/ Verzeichnisse mit Namen lib enthalten per Unix- lib/ Konvention Bibliotheken (engl. Libraries). Im /tmp/-Verzeichnis werden temporäre Dateien tmp/ gespeichert – Achtung: Admin könnte löschen! usr/ Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 20 UNIX Dateisystemrechte (engl. File permissions) Geben wir den Verzeichnisinhalt „long“ aus: $ ls –al↵ total 81657 drwxr-xr-x 21 rkeller staff 37 Mär 28 14:16. dr-xr-xr-x 20 root root 20 Mär 21 16:02.. drwx------ 3 rkeller staff 3 Mär 16 18:28.adobe -rw------- 1 rkeller staff 1274 Mär 28 14:51.bash_history -r--r--r-- 1 rkeller staff 373 Mär 12 12:44.bashrc User Group Größe Datum der Bytes letzten Anzahl Verweise Änderung 1. Typ (d=Directory, -=File, l=softlink) Name der Datei oder 2. Rechte v. „User“ (r=read, w=write, x=execute) des Unterverzeichnisses, 3. Rechte v. „Group members“ (hier staff) Namen beginnend mit „.“ werden bei ls versteckt. 4. Rechte v. „Other“ (auch Welt genannt) Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 21 UNIX Dateisystemrechte (engl. File permissions) Nun probieren Sie: $ rm –fr /tank/home/rkeller/↵ (rm=remove) Was erhalten Sie für eine Fehlermeldung? Das sollte nicht möglich sein! Warum nicht??? Setzen der Permissions (hier in der kurzen Fassung): $ chmod 600 ~/.bashrc↵ (setzt Read/Write Owner) Vergleichen Sie die Rechte von ~/.bashrc zu vorher: $ ls –al ~/.bashrc↵ (Ausgabe im Long Format) Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 22 UNIX Dateisystemrechte (engl. File permissions) Schauen wir uns das Setzen der Rechte genauer an: $ chmod 600 ~/.bashrc↵ (setzt Read/Write Owner) Jede Oktalzahl steht für bestimmte Benutzer/Rechte: » 400: der Besitzer (hier: rkeller) darf die Datei lesen » 200: der Besitzer (hier: rkeller) darf die Datei schreiben » 100: der Besitzer (hier: rkeller) darf die Datei ausführen » 040: der Gruppe (hier: staff) darf die Datei lesen » 020: der Gruppe (hier: staff) darf die Datei schreiben » 010: der Gruppe (hier: staff) darf die Datei ausführen » 004: alle anderen Benutzer („World“) dürfen die Datei lesen » 002: alle anderen Benutzer („World“) dürfen die Datei schreiben » 001: alle anderen Benutzer („World“) dürfen die Datei ausführen Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 23 UNIX Dateisystemrechte (engl. File permissions) Schauen wir uns das Setzen der Rechte genauer an: $ chmod 600 ~/.bashrc↵ (setzt Read/Write Owner) Für die obige Befehlszeile heißt das: » Die 1. Zahl (6) gibt an, dass Owner Lese-& Schreib-Rechte hat, » Die 2. Zahl (0) geben an, dass die Gruppe „staff“ und » Die 3. Zahl (0) alle anderen (Welt) keine Read-/Write oder Execute-Rechte haben! alle Keine Read/Write Rechte haben. a stalt Less 8 schrei -- Was würde der Wert 005 bedeuten? Um das Home nicht zugreifbar für Welt zu machen: $ chmod 700 ~↵ (zurücksetzen von HOME) Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 24 UNIX Dateisystemrechte (engl. File permissions) Diese Rechte lassen sich auch “lesbar“ formulieren: » Für Besitzer (user) schreibt man „u“, » Für Gruppe (group) schreibt man “g“, » Für Andere (other) schreibt man „o“ Mit „+“ fügt man weitere Rechte hinzu, mit „-“ werden Sie abgezogen, mit „=“ exakt gesetzt, zusammen Mit Lesen “r“, Schreiben „w“ und Ausführen “x“ ergibt: $ chmod gu=rw ~/.bashrc↵ (exakt rw/wr user&group) $ chmod o+x ~/.bashrc↵ (other darf nun ausführen) $ chmod g-w ~/.bashrc↵ (Group darf nun schreiben) Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 25 UNIX Dateisystemrechte (engl. File permissions) Für Dateien ist klar, was die Rechte bedeuten! Für Verzeichnisse (engl. Directories) erlauben Rechte: » Lese: Der Verzeichnisinhalt darf angezeigt werden (ls) » Schreib: Es dürfen Dateien/Verzeichnisse erzeugt werden » Ausführbar: in das Verzeichnis darf gewechselt werden (cd) Achtung: Es macht also keinen Sinn für Owner Lese- oder Schreibrechte für ein Verzeichnis zu verbieten! (Für die Gruppe oder Andere (World) aber sehr wohl!) Test: Setzen sie Ihr Home auf nicht-schreib- und ausführbar für World; erlauben aber das Lesen! Probieren Sie gegenseitig, ob sie eine (lesbare) Datei kopieren können!!? Betriebssysteme - Einführung in Linux Prof. Dr.-Ing. Rainer Keller, Hochschule Esslingen 26 UNIX Dateiinformationen Für Dateien/Ordner/... wird die Zeit gespeichert, wann: » Sie angelegt wurde (Created) » Sie das letzte mal gelesen wurde (Accessed) » Sie das letzte mal verändert wurde (Modified) Es ist ersichtlich dass gelten muss: tCreated

Use Quizgecko on...
Browser
Browser