• Keine Ergebnisse gefunden

Technische Praxis der Computersysteme 1

N/A
N/A
Protected

Academic year: 2021

Aktie "Technische Praxis der Computersysteme 1"

Copied!
95
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Technische Praxis der Computersysteme 1

Thomas Leitner <thomas.leitner@univie.ac.at>

Fakultät für Mathematik, Universität Wien Wintersemester 2015

Letzte Änderung: 2015-12-04 09:00

(2)

Foliensatz 0

Organisatorisches

Organisatorisches

• VO und UE werden gemeinsam als VU angerechnet

• VO-Termine

• Geblockt 10 Termine jeweils am Donnerstag 13:15 bis 15:30 im HS02, W29

• 01.10.2015, 08.10.2015, 15.10.2015, 22.10.2015, 29.10.2015, 05.11.2015, 12.11.2015, 19.11.2015, 26.11.2015, 03.12.2015

• Prüfung

• Mündlich

• Dauer circa 30 Minuten

• Anmeldung per E-mail

• Jederzeit nach Ende der Vorlesung

Inhalte der Vorlesung

• Installation einer Linux-Distribution

• Geschichte von Linux

• Was ist ein Betriebsystem?

• Systemstart

• Prozesse

• Dateisysteme

• Berechtigungen (Authentifizierung/Authorisierung)

• Grundlegender Umgang mit der Shell

• Graphische Oberflächen

• Shell-Scripting Ziel:

Studierende sind in der Lage, Linux zu installieren und beherrschen den Umgang mit der Shell.

(3)

Foliensatz 1

Geschichte von Linux

Inhalt

• Geschichte von Unix und Linux

• Urheberrecht und Lizenz

• Open Source und Freie Software

Whirlwind Computer

Der erste Rechner, der in Echtzeit arbeitete und einen Bildschirm für die Ausgabe hatte.

Motivation Betriebssystem

• Mitte des letzten Jahrhunderts waren Computer anders als heute: Es waren große Rechenanlagen, die viele Mitarbeiter brauchten - genannt „Operatoren“. Diese haben, wenn notwendig, Programmcode oder Daten in die Maschine eingegeben, wenn diese es durch einen „Interrupt“

verlangten. Die Idee eines „Operating Systems“ war, diese Tätigkeiten zu automatisieren.

• Später kamen zusätzliche Fähigkeiten hinzu: Time-Sharing (mehrere Anwender gleichzeitig auf derselben Maschine), Tastatur & Terminal für Ein- und Ausgabe, Netzwerkfähigkeit (Ethernet), grafische Oberfläche & Maus, und mit dem Personal Computer der Einzug ins Wohnzimmer.

• Zu Beginn hatte jeder Computer ein anderes Betriebssystem. Das stellte sich als nicht praktikabel heraus und man suchte nach Lösungen…

(4)

Unix Anfänge

• Unix wurde von Ken Thompson und Dennis Ritchie Anfang der 1970er Jahre geschaffen

Geschichte von Unix 1

1969 kommerzielles Projekt von AT&T-Angestellten bei Bell Labs

• Grundlage war Idee von Mehrbenutzersystem „Multics“; später „Unix“ getauft

• Parallel dazu Programmiersprache „C“ entwickelt; dadurch war es auf verschiedene Hardware- Plattformen portierbar - kein direkter Maschinencode!

• Quellcode aus rechtlichen Gründen gratis (Unkostenersatz) weitergegeben, Fragmentierung

• 1980er Jahre: Krieg zwischen verschiedenen Unix Systemen

• System V (1983), 4.2BSD (1983), IBM AIX (1986), …

• Standardisierung: POSIX (einheitliche Schnittstellen für Unix-Systeme)

• GNU (1983) von Richard Stallman (Kürzel: RMS, gegen Proprietarisierung)

• Minix (1987) von Andrew S. Tanenbaum für Lehrzwecke entwickelt (hatte selbst nie eine große Bedeutung, war aber Inspiration für Linux)

Unix-Philosophie

• Es gibt viele, kleine Programme, die genau eine Sache machen, und die dafür gut.

Small is beautiful.

(5)

• Programme sollen so geschrieben sein, dass sie gut zusammen arbeiten.

• Als universelle Schnittstelle dienen Textströme.

• Alles ist eine Datei.

Everything is a file.

• Daten sollen in Textdateien gespeichert werden.

Siehe auch Unix-Philosophie auf Wikipedia

Geschichte von Unix 2

Geschichte von Linux

• Ab 1991 von Linus Torvalds, ursprünglich nur für x86-Prozessoren entwickelt

• Der Öffentlichkeit in einem Usenet-Posting am 25. August 1991 vorgestellt

• Ursprünglicher Name Freax, später wurde daraus Linux

• Entwicklung:

• 1992: Linux-Kernel unter GNU GPL vertrieben, erste freie Linux- Distributionen

• 1993: 100+ Entwickler arbeiten am Linux-Kernel

• 1994: Version 1.0 (netzwerkfähig, graphische Oberfläche)

• 1995-jetzt: Portierung auf andere Platformen

• 1996: Version 2.0 (mehrere Prozessoren parallel benutzbar)

(6)

• 2001: Version 2.4 (64GB RAM, Journaling-Dateisystem)

• 2003: Version 2.6

• Jetzt: Version 4.2.2

Siehe auch: Geschichte von Linux auf Wikipedia

Linux und Unix im Alltag

Linux:

• Embedded Systems und Spezialhardware (z.B. Netzwerkswitches)

• Smartphones (z.B. Android)

• Großteil der Internetserver

• Circa 75% der Rechner der Fakultät für Mathematik Unix:

• Nach wie vor kommerzielle Varianten im Einsatz (IBM AIX, HP UX, …)

• Apple Mac OS X (seit 2001, basierend auf BSD und Mach-Kernel)

• Smartphones (Apple iPhone, neuere BlackBerry-Modelle auf QNX-Basis)

UNIX GUI dazumals

UNIX GUI ungefähr 1990, mit twm, xman, xlogo, xterm, …

(7)

Linux GUI heute

Gnome GUI aus 2013

Urheberrecht und Lizenz

• Berner Übereinkunft zum Schutz von Werken der Literatur und Kunst

• Der, der etwas schafft, ist der Urheber; hat Urheberrechte („Copyright“) an seinem Werk. Kann in den meisten Ländern nicht abgeben werden (Ausnahme: „Public Domain“ in USA).

• Urheberrecht impliziert, dass andere nur das mit dem Werk machen dürfen, was der Urheber erlaubt (das Werk verwenden, duplizieren, ändern, …)

• Hier kommt die Lizenz ins Spiel: Sie regelt – im Rahmen der Gesetze –, was andere mit dem Werk machen dürfen (Weitergabe, Vervielfältigung, …), ohne dass man den Urheber fragen muss.

Für uns interessant in Bezug auf Software:

• Closed Source Software: „proprietäre“ Software, meist ohne Quellcode, darf man nur benutzen (nicht weitergeben, vervielfältigen)

• Open Source Software: kostenlos, Quellcode einsichtig, darf man kopieren, ändern und weitergeben (eventuell mit Einschränkungen)

Closed Source Software

• Der Quellcode, der Entwicklungsprozess und die zukünftige Ausrichtung sind geheim

• Keine Mitsprache bei Änderungen und zukünftigen Features

• Abhängigkeit von der Softwarefirma

• Eingebaute Algorithmen sind verborgen: unmöglich um Fehler zu analysieren, Forschung zu

(8)

betreiben, …

• Support (Unterstützung) ist normalerweise kostenpflichtig.

• Man kann das Programm nicht kaufen, sondern man erwirbt nur eine Lizenz, die die Benützung erlaubt.

• Man darf das Programm auch nicht an andere weitergeben.

• Manchmal ist diese Lizenz kostenlos erhältlich (bzw. ein Programm mit reduziertem Funktionsumfang)

• Wird das Programm nicht mehr weiterentwickelt oder hört die Firma auf zu existieren, gibt es keine Möglichkeit die Software weiterzuentwickeln.

Open Source vs. Freie Software

• Begriff „Open Source“ erst 1998 eingeführt, weil im Englischen „Free Software“ nicht nur „Freie Software“, sondern auch „Kostenlose Software“ bedeuten kann

• Einige Open Source Lizenzen besagen, dass man den Quellcode und das Programm bekommt und damit machen darf, was man will. Insbesondere darf man auch Erweiterungen vornehmen und das Produkt kommerziell verwerten.

Beispiele: BSD, Apache 2.0, CC

Diese Lizenzen können zum Beispiel unter der GPL re-lizensiert werden, umgekehrt geht das nicht!

• Begriff „Freie Software“ oft für strengere Lizenzen wie GPL und LGPL verwendet

• Gängiger Überbegriff F(L)OSS: Free/Libre Open Source Software

Freiheiten von Freier Software

1. The freedom to run the program, for any purpose (freedom 0).

2. The freedom to study how the program works, and change it so it does your computing as you wish (freedom 1). Access to the source code is a precondition for this.

3. The freedom to redistribute copies so you can help your neighbor (freedom 2).

4. The freedom to distribute copies of your modified versions to others (freedom 3). By doing this you can give the whole community a chance to benefit from your changes. Access to the source code is a precondition for this.

„free“ as in „free speech“, not as in „free beer“!

Siehe The Free Software Definition

Copyright und Lizenz

• Copyright: Thomas Leitner thomas.leitner@univie.ac.at

• Basiert teilweise auf den Folien von Harald Schilly harald.schilly@univie.ac.at

• Lizenz: Creative Commons CC BY-NC-SA

(9)

„Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Österreich.“ - http://creativecommons.org/licenses/by-nc-sa/3.0/at/

Abweichendes Copyright von Inhalten:

• Die „Geschichte von Unix“-Grafik steht unter der CC BY-SA 3.0

• Der Unix Screenshot steht unter der CC BY-SA 3.0

• Tux-Logo von Larry Ewing, Simon Budig, Anja Gerwinski

• Gnu-Logo von Aurelio A. Hecker, Shaddy Zeineddine; unter der Free Art License

(10)

Foliensatz 2

Betriebssystem am Beispiel Linux

Inhalt

• Installation von Linux

• Programmvergleich Linux/Windows/OS X

• Aufbau des Betriebssystems Linux

• Linux-Distributionen

Installation von Ubuntu Linux 1

Zwei Möglichkeiten:

1. Lade die Installations CD („Desktop version“) herunter, boote von ihr und folge der Installationsanleitung.

Ist keine Partition frei, mache ein Backup und verkleinere bestehende Partitionen, damit Platz (min.

10GB) für neue entsteht.

2. Virtualisieren: Installiere VirtualBox, erzeuge eine virtuelle Festplatte (~10GB), starte vom Image der CD wie in Punkt 1 und installiere Ubuntu.

Installation von Ubuntu Linux 2

Was ist bei einer Installation zu beachten?

Sprache: Nachträglich können meist Pakete für zusätzliche Sprachen installiert werden. Diese umfassen Lokalisierungen für die Anwendungen, Wörterbücher, Dokumentation, …

Lokalisierung: Ort, Zeit und Zeitzone. Es ist üblich, die Uhrzeit über das Internet zu synchronisieren (mittels NTP).

Partitionierung: Bei Installation in einer virtuellen Maschine am besten die Standardeinstellungen verwenden. Ansonsten je nach Anwendungsfall eine oder mehr Partitionen:

• / ist die Systempartition, ~20GB, am Anfang der Platte, unbedingt nötig

• /boot ist die Bootpartition, ~200MB, wichtig beim Booten via (U)EFI

• /home für Benutzerdaten, optional, so groß wie möglich

• swap unter 2GB RAM sollte es eine Swap-Partition geben; kann auch nachträglich als Datei in / erzeugt und eingebunden werden (also nicht als Partition).

(11)

Installation von Ubuntu Linux 3

• Nach der Installation muss das System neu gestartet werden und danach ist es benutzbar. Bei der Installation werden die wichtigsten Programme installiert, d.h. man hat Web-Browser, E-Mail- Programme, Bildbetrachtungs- und Bildbearbeitungsprogramme, Media-Player und vieles mehr zur Verfügung.

• Falls bestimmte Funktionalitäten nicht vorhanden sein sollten, können diese über den Paketmanager einfach nachinstalliert werden. Unter Ubuntu hat man dazu die graphische Oberfläche Ubuntu Software Center zur Verfügung bzw. das Programm apt-get in einem Terminal.

• Wird ein Befehl in einem Terminal eingegeben, der nicht bekannt ist, aber über ein (oder mehrere) Paket installiert werden könnte, wird eine entsprechende Meldung ausgegeben:

$ fortune

The program 'fortune' is currently not installed. You can install it by typing:

sudo apt-get install fortune-mod

$ sudo apt-get install fortune-mod # Zur Installation des Pakets

Programmvergleich Linux/Windows/OS X 1

Office-Suite

» Linux: LibreOffice, OpenOffice, Calligra

» Windows: MS Office, LibreOffice, OpenOffice, Calligra

» OS X: Apple Productivity Apps, MS Office, LibreOffice, OpenOffice, Calligra Browser

» Linux: Chromium (oder Google Chrome), Firefox, Opera

» Windows: Chromium (oder Google Chrome), Firefox, Opera, Internet Explorer

» OS X: Safari, Chromium (oder Google Chrome), Firefox, Opera Mailprogramm

» Linux: Thunderbird, KMail, Evolution

» Windows: Thunderbird, Outlook

» OS X: Apple Mail, Thunderbird, Outlook

Programmvergleich Linux/Windows/OS X 2

Bildbearbeitung

» Linux: Gimp

» Windows: Adobe Photoshop, Gimp

» OS X: Adobe Photoshop, Gimp Vektorgrafiken

» Linux: Inkscape, Karbon (Teil von Calligra)

» Windows: Adobe Illustrator, Inkscape

» OS X: Adobe Illustrator, Inkscape 3D Grafiken

» Linux: Blender, Maya

» Windows: Blender, Maya, 3DS MAX, SketchUp

» OS X: Blender, Maya, SketchUp

(12)

Programmvergleich Linux/Windows/OS X 3

Videoplayer

» Linux: VLC, mplayer

» Windows: VLC, MPC-HC, Windows Media Player

» OS X: VLC, QuickTime Desktop Publishing

» Linux: Scribus

» Windows: Scribus, QuarkXPress, Adobe FrameMaker, Adobe InDesign

» OS X: Scribus, QuarkXPress, Adobe FrameMaker, Adobe InDesign

Hardware

Ein Computersystem besteht aus Hardware und Software.

Hardware bezeichnet alle physischen Teile:

• Prozessor (CPU = Central Processing Unit)

• Speicher für Daten

• RAM = Arbeitsspeicher: Schneller Zugriff, aber Daten nicht permanent gespeichert

• Festplatte: Vergleichsweise langsamer Zugriff, Daten permanent gespeichert

• Externe Medien: USB-Stick, DVD, Netzwerk, …

• Mainboard mit Grafikkarte, Soundkarte, Erweiterungssteckplätzen, …

• Eingabegeräte (Tastatur, Maus, Touchpad, …)

• Ausgabegeräte (Bildschirm mittels Grafikkarte, Lautsprecher mittels Soundkarte, Drucker, …)

Software

• Die Software bestimmt, was der Prozessor mit den Daten machen soll. Sie liegt entweder in Form eines kompilierten Programmes vor oder als Quelltextdatei, die von einem Interpreterprogramm abgearbeitet wird.

Beispiele von Software: Webbrowser, E-Mail-Programm, Shell-Skripte, …

• Der Kernel eines Betriebssystems ist ein spezielles Programm, welches beim Starten des Systems geladen wird. Er organisiert das Zusammenspiel von Hardware und aller anderen Software. Als einzige Software hat er vollen Zugriff auf die Hardware.

• Das Gesamtsystem, auf dem die Software läuft, heißt Plattform (Hardware + Betriebssystem).

(13)

Aufbau des Betriebssystems Linux

1. Kernel:

• Verwaltung der Hardware (Gerätetreiber, Dateisystem, Arbeitsspeicher, Interrupts, …), erstes geladenes Programm (nach Boot-Loader)

• Verwaltung der Software (Prozesse, Multitasking, …)

• Abstrahierung des Dateisystems, API/ABI-Schnittstellen, … 2. Init-System:

• Konfiguration und Management des Systemstarts

• Starten und Monitoring von Hintergrundprozessen („Daemonen“) 3. Shell (Kommandozeileninterpreter)

• Dialog mit Kernel mittels Hilfsprogrammen

• Bietet auch Skript-Sprache für kleine Programme (bash, zsh, …) 4. Systemprogramme und -bibliotheken

• Zum Beispiel coreutils (ls, cd, cp, rm, mv, …)

• Zusätzliche Utilites und solche mit einer GUI

Linux Kernel

• Abstraktionsschicht zwischen Hardware und anderen Programmen

• Dateisystem (gleicher Zugriff, egal, wo Daten physisch liegen – Festplatte, USB-Stick, Netzwerkserver, …; ist auch Schnittstelle zum Zugriff auf Geräte)

• Speicher (Prozesse glauben, sie hätten eigenen Speicherbereich; automatische Speicherzuweisung und eventuell Auslagerung von Speicherblöcken)

• Verwaltung von Prozessen (Prozess = Instanz eines Programmes; Schnittstelle für Prozess- Erzeugung; automatisches Scheduling; Multitasking)

• Ermöglicht Mehrbenutzerbetrieb (mehrere Benutzer gleichzeitig am selben System, private Datenbereiche, unterschiedliche Rechte, Sicherheitskonzept, …)

• … und bietet vieles mehr (Netzwerkprotokolle, jede Menge Gerätetreiber, …)!

Init-System

• Das Init-System ist das erste vom Kernel nach dem Booten gestartete Programm und verantwortlich für den weiteren Start des Betriebssystems.

• Es konfiguriert das System (z.B. die Netzwerkschnittstellen) und lädt alle Dienste (Daemonen – Disk and Execution Monitors), die im Hintergrund laufen sollen (z.B. einen Webserver), und schließlich die Login-Programme (entweder nur die textbasierten Login-Programme oder auch die graphische Oberfläche).

• Es gibt mehrere verschiedene Init-Systeme, früher SysV-Init mit den Init-Skripten. Um den Start zu optimieren, verwenden moderne Distributionen andere init-Programme, meist systemd.

(14)

Shell

Die Shell ist ein interaktiver Kommandozeileninterpreter.

• Es gibt mehrere Shells (z. B. dash, ksh, csh, zsh, …), wir verwenden die bash (Bourne-again Shell), die Standard-Loginshell der meisten Linux-Distributionen.

• Um Zugriff auf eine Shell zu erhalten, braucht man ein Terminal. Im Normalfall gibt es sechs „ echte“ Terminals (wechseln zwischen ihnen mit Strg+Alt+F1 - Strg+Alt+F6). Auf der grafischen Oberfläche (Strg-Alt-F7) bekommt man eine Shell mittels eines „Terminal“-Programmes (z.B.

gnome-terminal unter Gnome oder konsole unter KDE).

• Das Prinzip ist, dass Text eingetippt und die Eingabe mit der Eingabetaste bestätigt wird. Das veranlasst die Shell, die entsprechenden Zeichen zu interpretieren, zu verarbeiten und die Befehle abzuarbeiten. Anschließend wird die Ausgabe dem Benutzer präsentiert und man kann erneut Befehle eintippen.

Den Umgang mit der Shell muss man beherrschen, wenn man Linux effektiv und effizient benutzen will!

Mehrbenutzerbetrieb („Multi-User“)

• Ursprünglicher Grund für UNIX: Mehrere Benutzer sollen über Terminals an einem zentralen Großrechner arbeiten können („Time Sharing“). Es werden mehrere Benutzer mit jeweils mehreren Prozessen parallel verwaltet und die Ressourcen verteilt.

Davon geblieben ist die Einteilung in Benutzer und Gruppen sowie das Multitasking.

• Jeder, der am Rechner arbeiten möchte, muss sich gegenüber dem Betriebssystem authentifizieren (meist mit Benutzername und Passwort). Damit bekommt man eine Identität und hat bestimmte Rechte:

• Jeder Benutzer hat Zugriff auf seine eigenen Daten.

• Jedes Gruppenmitglied hat Zugriff auf die Daten der Gruppe.

• Der Administrator („root“) hat Zugriff ohne Einschränkungen.

Start des Betriebssystems

• Das BIOS (Basic Input Output System) bzw. das UEFI (Unified Extensible Firmware Interface) – gespeichert auf einem Chip direkt am Motherboard – initialiert die Hardware und läd den Boot- Loader von einer Partition einer Festplatte, von einem USB Gerätes, von einer CD, …

• Der Boot-Loader (unter Linux meist grub2) übergibt die Kontrolle an ein Betriebssystem, in unserem Fall dem Linux-Kernel. Der Boot-Loader grub2 bietet die Möglichkeit, verschiedene Betriebssystem zu laden (Linux, Windows, *BSD); diese Funktionalität bietet aber UEFI auch von sich aus.

• Der Linux-Kernel bereitet die Hardware vor und übergibt dann an das Init-System, welches das System konfiguriert.

• Sobald die initiale Konfiguration des Systems abgeschlossen ist, werden die Login-Programme gestartet und der Benutzer kann sich einloggen.

(15)

Linux-Distribution 1

Eine Distribution besteht aus mehreren Teilen, nämlich

• dem Linux-Kernel, der in einer Linux-Distribution immer vorhanden sein muss;

• Bibliotheken, Systemprogrammen, Init-System, Default-Konfigurationen, etc. – das sind Teile, die den Anwender im Normalfall nicht betreffen, jedoch für die Administration wichtig sind;

• und Anwendungsprogrammen, die für den Benutzer wichtig sind.

Linux wird oft auch GNU/Linux genannt, da viele der Systemprogramme und -bibliotheken aus dem GNU Projekt stammen (z.B. coreutils).

Linux-Distribution 2

• Als Linux-Distribution bezeichnet man eine gewisse Zusammenstellung dieser drei Komponenten.

Es wird eine Auswahl getroffen und es werden bestimmte Techniken oder Mechanismen verwendet (z. B. Init-System, Hardware-Erkennung, Paketverwaltungssystem, …) und ausgewählte Anwendungen vorinstalliert.

Hauptaufgabe ist es, ein funktionierendes Repository getesteter Anwendungsprogramme zur Verfügung zu stellen und (automatische) Updates für die gesamte Software auszuliefern.

• Beispiele von Distributionen: Debian (eine der ersten Distributionen, Allroundsystem), Ubuntu (basiert auf Debian, Fokus auf Benutzer, weit verbreitet), Red Hat (für Server, kommerzielle Ausrichtung), Fedora (für Software-Entwickler).

• Auch Systeme wie Android oder Open webOS basieren auf dem Linux-Kernel, haben aber mit klassischen Linux-Distributionen nicht viele Gemeinsamkeiten.

Siehe auch Linux-Distribution auf Wikipedia

Linux-Distribution 3

• Ein Repository ist ein Verzeichnis für Software, meist spezifisch für jede Distribution. Es umfasst jeden Typ von Software (Kernel, Administration, Anwendung) und zusätzlich auch Dokumentation sowie Default-Konfigurationen.

(16)

• Die Software wird in Form von Paketen bereitgestellt und zwischen diesen Paketen sind Abhängigkeiten definiert. Das heißt in der Praxis, dass ein Paket für ein Programm zusätzlich die Anwesenheit von weiteren Paketen benötigt. So wird zum Beispiel sichergestellt, dass bei der Installation eines Audio-Players die nötigten Audio-Codecs installiert werden.

• Die zwei verbreitetsten Paketformate sind deb („Debian package“; von Debian, Ubuntu und anderen Debian-Derivaten verwendet) und rpm („RPM Package Manager“; z.B. von Red Hat und openSUSE verwendet).

Copyright und Lizenz

• Copyright: Thomas Leitner thomas.leitner@univie.ac.at

• Basiert teilweise auf den Folien von Harald Schilly harald.schilly@univie.ac.at

• Lizenz: Creative Commons CC BY-NC-SA

„Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Österreich.“ - http://creativecommons.org/licenses/by-nc-sa/3.0/at/

Abweichendes Copyright von Inhalten:

• Die Grafik „Linux-Distribution“ steht unter der CC BY-SA 3.0 Lizenz.

(17)

Foliensatz 3

Grundlagen

Inhalt

• Benutzung X.org

• Benutzung Bash

• Aufbau eines Befehls / Manpage

• Allgemeine Befehle

X.org 1

X.org ist ein Programm, das die graphische Oberfläche verwaltet, ein sogenannter Display-Server.

Es kommuniziert mit der Grafikkarte und stellt eine Brücke zu einem Fenstermanager („window- manager“, z.B. Enlightenment, Fluxbox, Compiz, Mutter, KWin …) über ein Protokoll her.

• Der Festermanager verwaltet die Programmfenster (Rahmen, Platzierung, …) und bietet Möglichkeiten zum Minimieren, Maximieren, Wechseln,… von Programmfenstern. Der Inhalt der Programmfenster wird nicht vom Fenstermanager gestaltet, sondern dazu wird (fast immer) ein GUI- Toolkit (z.B. Qt, GTK, …) verwendet.

• Die Desktop-Umgebung (z.B. Gnome, KDE, XFCE, …) ist wiederum unabhängig vom Fenstermanager und bietet ein einheitliches Look and Feel sowie zusätzliche Funktionalitäten wie ein „Startmenu“, einen Dateimanager, Standardprogramme (Movieplayer, Audioplayer, Bildbetrachter, …) und dergleichen.

X.org 2

• Ein Display-Manager (z.B. XDM, KDM, GDM, LightDM, …) bietet die Möglichkeit zum graphischen Login und dem Anmelden an Rechnern im Netzwerk über XDMCP (X Display Manager Control Protocol).

• X.org kann sogar über das Netzwerk/Internet Applikationsfenster auf anderen X-Instanzen darstellen.

• freedesktop.org vereinheitlicht Fenstermanager und Desktop-Umgebungen durch Standards (z.B.

Notifikationen, „System Tray Icons“, …) und Software (xdg-utils, LightDM, …).

Tipps zur Bedienung, neben dem „Üblichen“:

• Text mit Maus markieren → Text wird automatich in die Zwischenablage kopiert

• Mittlere Maustaste drücken → Text aus der Zwischenablage einfügen

• Mittlere Maustaste auf Titelleiste → Fenster wird in den Hintergrund geschickt

• Alt-Taste + primäre Maustaste irgendwo im Fenster → Fenster verschieben

• Alt-Taste + sekundäre Maustaste irgendwo im Fenster → Fenstergröße ändern

(18)

X.org 3

• Die X.org Software ist eine Weiterentwicklung von X für Unix. In der Zeit als X entwickelt worden ist, gab es im Vergleich zu heute noch ganz andere Hardware, welche die Entwicklung stark beeinflusst hat. Mit X.org hat man gezeigt, dass dieses System für moderne Anwendungszwecke anpassbar ist, aber mittlerweile kommt man an die Grenzen des Machbaren.

• Deshalb wird derzeit ein Ersatz für X mit dem Namen Wayland entwickelt. Mit Wayland versucht man, die Komplexität zu verringern, in dem man sich auf das Wesentliche konzentriert. Wayland selbst ist nur eine Protokollspezifikation, die angibt, wie ein Display-Server mit Klienten zu kommunizieren hat. Die Referenzimplementierung des Display-Servers nennt sich Weston.

• Gleichzeitig wird von Ubuntu ein Display-Server unter dem Namen Mir entwickelt. Nachdem sogar von Seiten Xubuntu bzw. Kubuntu die Unterstützung für Mir ausbleibt, wird sich in den nächsten Jahren zeigen, wie es mit Mir weitergeht.

bash - Grundlagen 1

Die bash (Bourne Again Shell) ist die Standard-Shell auf Linux-Systemen und die, mit der wir uns befassen. Zur Wiederholung: Eine Shell dient dem Ausführen von Befehlen und der effizienten Manipulation von Textströmen.

Für die Eingabezeile wird die readline Bibliothek genutzt, daher gibt es einige Hilfsmittel für den Anwender:

• Befehls-History: Pfeiltaste rauf & runter

• History-Search: Strg-r sucht rückwärts in der History

• Navigation in der Zeile:

• Strg-Links / Alt-b → Cursor ein Wort nach links

• Strg-Rechts / Alt-f → Cursor ein Wort nach rechts

• Strg-a / Strg-e → Cursor zum Anfang/Ende der Zeile

• Die Tabulator-Taste vervollständigt (angefangene) Befehle, Pfade und Dateinamen. Zusammen mit dem Paket bash-completion werden auch Argumente und Optionen vieler Befehle vervollständigt.

bash - Grundlagen 2

Es gibt drei grundlegende Typen von Befehlen:

• Shell-interne Befehle, diese entsprechen keinem Programm (abhängig von der Shell, welche Befehle intern sind)

Alias, das ist ein Synonym für einen Befehl (nur in der Shell gültig)

• (Systemweite) Programme und Shell-Skripte

Welcher Befehl gewählt wird, hängt vom Pfad (der in der Variable

$PATH gespeichert ist) ab und lässt sich mittels type (oder dem Programm which) bestimmen.

Jeder Befehl hat einen Namen, eine bestimmte Syntax für Optionen/Parameter und benutzt meist Daten-Ströme (Standardeingabe stdin, Standardausgabe stdout und Standardfehlerausgabe stderr).

(19)

Anatomie eines Befehls

$ name [OPTIONEN] [ARGUMENTE]...

Beispiel:

$ ls -l -h --color=none change* copy*

total 10.1K

-rw-r--r-- 1 root root 1.8K Aug 11 2011 changelog.Debian.gz -rw-r--r-- 1 root root 8.3K Aug 11 2011 copyright

Ein Befehl hat auch einen Rückgabewert („exit value“ oder „exit status“; eine Zahl), welcher signalisiert, ob es einen Fehler gab (0 → fehlerfreie Ausführung, sonst nicht fehlerfreie Ausführung). Er steht in der Shell-Variablen $? zur Verfügung.

Beispiel:

$ rm not_existing_file

rm: cannot remove `not_existing_file': No such file or directory

$ echo $? # Datei erfolgreich gelöscht?

1

$ echo $? # Ausführung von echo-Befehl okay?

0

Anatomie eines Befehls - Optionen/Argumente

• Die Optionen und Argumente, die nach dem Befehlsnamen angegeben werden, folgen keiner allgemein gültigen Regel.

• Üblicherweise beginnen Optionen mit einem Bindestrich und meist gibt es short options (z.B. -f) und/oder long options (z.B. --force). Oft können short options auch kombiniert werden (z.B. -r -f

→ -rf).

• Einzelne Optionen/Argumente sind durch Leerzeichen voneinander getrennt. Kommt ein Leerzeichen in einer Option/einem Argument vor, kann man Anführungszeichen verwenden.

Beispiel:

$ rm -r --force /

$ find . -iname '*test*' -exec cat {} \;

$ ip addr show eth0

$ touch drei verschiedene dateien

$ touch "eine datei mit leerzeichen im namen"

Anatomie eines Befehls - Manpage

• Manpages (Befehl man) erklären, was ein Befehl macht und wie er aufgerufen werden kann bzw.

welche Optionen/Parameter er unterstützt.

• Unterstrichene Ausdrücke bedeuten meist, dass diese durch konkrete Werte ersetzt werden müssen.

„|“ gibt Alternativen an, „[…]“ optionale Argumente (Defaults beachten!), „…“ bedeutet, dass dieses Argument öfters vorkommen darf.

• Beendet wird das Programm mit q, mit /<WORT> und n/N kann man suchen.

Beispiele für die Synopsis eines Befehls:

(20)

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

ls [OPTION]... [FILE]...

Mehrere alternative Aufrufmöglichkeiten stehen untereinander:

mount [-lhV]

mount -a [-fFnrsvw] [-t vfstype] [-O optlist]

mount [-fnrsvw] [-o option[,option]...] device | dir mount [-fnrsvw] [-t vfstype] [-o options] device dir

Ausführen eines Befehls

Was passiert, wenn ein Programm oder Shell-Skript ausgeführt wird?

• Bash kopiert sich („fork“) - Kopie des bash-Prozesses ist Kind-Prozess.

• Der Kind-Prozess ersetzt sich selbst mit dem auszuführenden Programm („exec“). Es werden dabei alle Umgebungsvariablen des Eltern-Prozesses übernommen.

Wichtig: Ein Kind-Prozess kann nichts am Eltern-Prozess ändern, es gibt nur den Rückgabewert und Signale.

Siehe auch Bash and the process tree

Wichtige bash-Befehle

• type → Typ des Befehls (intern, Programm, …)

• echo [Argumente...] → Schreibt Argumente nach stdout

• cd → Wechseln des Arbeitsverzeichnisses

• pwd → Ausgabe des aktuellen Arbeitsverzeichnisses nach stdout

• exit → Beenden der Shell

Tastenkombinationen und wichtig „Kürzel“:

• Strg-c → Unterbrechen/Beenden eines aktiven Befehls (Signal INT)

• Strg-d → Beenden der Shell (nur, wenn noch keine Zeichen eingetippt wurden)

• ~ steht für das eigene Home-Verzeichnis

• . steht für das aktuelle Verzeichnis

• .. steht für das Elternverzeichnis des aktuellen Verzeichnisses

Variablen können mittels name=inhalt (kein Leerzeichen!) zugewiesen und der Inhalt mit $name (z.B.

echo $name) wieder ausgelesen werden.

Allgemeine Befehle - Benutzer (whoami, id)

Jeder muss sich am System authentifizieren, bevor er Programme ausführen kann. Alle von einem Benutzer gestarteten Prozesse laufen (fast immer) mit seinen Rechten und unter seinem Namen.

whoami - Gibt aus, wer man laut System ist

» $ whoami thomas

id - Zeigt Benutzer- und Gruppeninformationen an.

» Zeigt mehr Informationen als whoami an, zum Beispiel auch die Gruppen, in denen der Benutzer Mitglied ist.

(21)

» Verwendet den aktuellen Benutzer oder den via Parameter angegebenen.

» $ id

uid=1515(thomas) gid=1515(thomas) groups=1515(thomas),4(adm),20(dialout),24(cdrom), 46(plugdev),116(lpadmin),118(admin),124(sambashare),129(vboxusers)

$ id root

uid=0(root) gid=0(root) groups=0(root)

Allgemeine Befehle - Benutzer (w, who, last)

w - Listet auf, wer eingeloggt ist und was derjenige macht

» w <login name> schränkt die Ausgabe auf einen bestimmten Benutzer ein.

» $ w

 13:56:13 up 4 days, 2:19, 3 users, load average: 0.03, 0.06, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT leitner pts/1 2001:62a:4:2f00: 13:56 0.00s 0.34s 0.00s w

sascha pts/2 2001:62a:4:2f00: 08:05 5:49m 0.52s 0.47s ssh name@baka sascha pts/4 2001:62a:4:2f00: 11:00 2:46m 0.08s 0.08s -zsh

who - Zeigt nur an, wer gerade eingeloggt ist

» $ who

leitner pts/1 2012-10-09 14:01 (2001:62a:4:2f00:8ce:4ac0:c4ee:ecb2) sascha pts/2 2012-10-09 08:05 (localhost)

sascha pts/4 2012-10-09 11:00 (2001:62a:4:2f00:6ef0:49ff:fe25:fa5b) last - Zeigt die Benutzer an, die zuletzt eingeloggt waren

» $ last

david pts/1 2001:62a:4:2f00: Wed Oct 10 10:37 - 10:50 (00:12) leitner pts/1 2001:62a:4:2f00: Tue Oct 9 14:01 - 14:02 (00:01) sascha pts/3 eduroam-239-013. Mon Oct 8 12:22 - 12:50 (00:28) wtmp begins Mon Oct 1 08:37:10 2012

Allgemeine Befehle - Pager (less, more)

less und more sind zwei sogenannte Pager, Programme, die es ermöglichen, Dateien oder die Ausgabe von anderen Programmen seitenweise darzustellen. Dabei ist less vorzuziehen, da es deutlich mehr kann als more („less is more than more“).

Wichtigste Tastenkombination für less:

• Bild rauf/Bild runter oder Strg-b/Strg-f → eine Bildschirmseite nach oben/unten scrollen

• Pfeil rauf/Pfeil runter oder k/j → eine Zeile nach oben/unten scrollen

• /MUSTER → nach dem Muster suchen, danach mit n/N zur nächsten/vorigen Fundstelle springen

• q → Programm beenden

Allgemeine Befehle - Sonstige (uptime, date)

uptime - Zeigt an, wie lange das System läuft und wie sehr es ausgelastet ist.

» Diese Auslastung wird über die letzten 1, 5 und 15 Minuten berechet und gibt an, wieviele Prozesse durchschnittlich aktiv gelaufen sind. Als Faustregel gilt, dass die Auslastung kleiner gleich der Anzahl an ausführenden CPU Threads sein sollte.

» $ uptime

 11:22:35 up 66 days, 23:01, 125 users, load average: 2.03, 2.00, 1.94 date - Gibt das Datum in einem konfigurierbaren Format aus

(22)

» Mit der Option -d kann man ein beliebiges Datum, nicht nur das aktuelle, formatieren.

» Wichtige Formatsequenzen sind %H (Stunde 00..23), %M (Minute 00..59), %S (Sekunde 00..59), %d (Tag 01..31), %m (Monat 01..12) und %Y (Jahr)

» $ date

Tue Oct 9 17:41:43 CEST 2012

$ date +"%Y-%m-%d foo %H:%M:%S"

2012-10-09 foo 17:42:03

$ date -d "2010-07-02 15:30:12" +"%Y-%m-%d foo %H:%M:%S"

2010-07-02 foo 15:30:12

Allgemeine Befehle - Sonstige (script)

script - Aufzeichnen aller Ein- und Ausgaben in einer Datei

» Das ist vor allem für die Übungen sehr nützlich (wie auch in der Manpage angemerkt).

» $ script hardcopy

Script started, file is hardcopy

$ whoami thomas

$ exit exit

Script done, file is hardcopy

$ cat hardcopy

Script started on Tue 09 Oct 2012 06:08:07 PM CEST

$ whoami thomas

$ exit exit

Script done on Tue 09 Oct 2012 06:08:42 PM CEST

Copyright und Lizenz

• Copyright: Thomas Leitner thomas.leitner@univie.ac.at

• Basiert teilweise auf den Folien von Harald Schilly harald.schilly@univie.ac.at

• Lizenz: Creative Commons CC BY-NC-SA

„Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Österreich.“ - http://creativecommons.org/licenses/by-nc-sa/3.0/at/

(23)

Foliensatz 4

Dateisystem

Inhalt

• Dateisysteme in Linux

• Virtual Filesystem Switch (VFS)

• Filesystem Hierarchy Standard (FHS)

• Befehle für Verzeichnisse, Dateien und Dateisysteme

• Zugriffsrechte auf Dateien

• Harte und symbolische Links

Was ist ein Dateisystem?

• Ein Dateisystem kontrolliert, wie Daten auf einem Speichermedium angeordnet werden, damit diese Daten später wieder gefunden und gelesen werden können.

Wichtige Dateisysteme:

• Windows: FAT, NTFS

• Linux/Unix: Ext2-4, ReiserFS, XFS, JFS, ZFS, Btrfs (in Entwicklung)

• Netzwerk: NFS, SMB/CIFS (vorrangig Windows), Lustre (Supercomputing)

• Weiters wird unter Linux auch die Abstraktionsschicht im Kernel als Dateisystem bezeichnet, genauer gesagt als virtuelles Dateisystem.

Speichermedien und Partitionen 1

• Jedes Medium (USB-Stick, Festplatte, DVD) ist einfach eine Folge von Bits, hat keine Struktur; oft in Blöcke unterteilt, die nur auf einmal gelesen werden können.

• Die üblichen Dateisysteme organisieren die Daten in einem hierarchischen System bestehend aus Verzeichnissen und Dateien.

• Ein physisches Medium kann mit einem einzigen Dateisystem versehen sein oder mehrere Teile (Partitionen) besitzen, mit eventuell unterschiedlichen Dateisystemen. Das ist z.B. für das Aufteilen eines Systems in eine Betriebssystem-Partition und eine Daten-Partition nützlich.

Es gibt unterschiedliche Varianten, Partitionen auf einem physischen Medium zu kennzeichnen.

Früher wurde auf x86-Rechnern ein MBR (Master Boot Record) und die darin enthaltene Partitionstabelle verwendet, der Nachfolger nennt sich GPT (GUID Partition Table).

(24)

Speichermedien und Partitionen 2

• Partitionen einer Festplatte können (als Administrator) mittels fdisk -l /dev/[sdX|hdX] angezeigt werden. Partitionen einer Platte /dev/[sdX|hdX] heißen /dev/[sdX|hdX][1,2,3,...], wobei X ein Kleinbuchstabe ist. Dies ist jedoch nur eine gängige Konvention, es könnte auch anders sein!

• Ein gutes CLI-Programm für die Bearbeitung von Partitionen ist parted (es gibt auch eine GUI- Variante namens gparted).

• Ausgabe von fdisk für eine MBR-basierte Festplatte:

$ fdisk -l /dev/sda

Disk /dev/sda: 160.0 GB, 160041885696 bytes

255 heads, 63 sectors/track, 19457 cylinders, total 312581808 sectors Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000b57a2

   Device Boot Start End Blocks Id System /dev/sda1 * 16065 34668269 17326102+ 83 Linux

/dev/sda2 34668270 43054199 4192965 82 Linux swap / Solaris /dev/sda3 43070326 312576704 134753189+ f W95 Ext'd (LBA) /dev/sda5 43070328 312576704 134753188+ 83 Linux

Speichermedien und Partitionen 3

• Ausgabe von fdisk für eine GPT-basierte Festplatte:

$ fdisk -l /dev/sda

Disk /dev/sda: 477 GiB, 512110190592 bytes, 1000215216 sectors Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt

Disk identifier: 7DC1C01A-22A6-4216-AA7A-68CE77861CA4 Device Start End Sectors Size Type /dev/sda1 2048 411647 409600 200M EFI System

/dev/sda2 411648 102811647 102400000 48,8G Microsoft basic data /dev/sda3 283414528 1000214527 716800000 341,8G Microsoft basic data /dev/sda4 102813696 200469945 97656250 46,6G Microsoft basic data /dev/sda5 200469946 283413887 82943942 39,6G Microsoft basic data Partition table entries are not in disk order.

Speichermedien und Partitionen 4

(25)

Linux Virtual Filesystem (VFS)

Der Linux-Kernel bietet eine Abstraktion von den Spezifika eines Dateisystems und dem Medium, auf dem es liegt, das sogenannte virtuelle Dateisystem (bietet sowohl Abstraktion Richtung spezifische Dateisysteme als auch Richtung Benutzer/Applikationen). Der Pfad, unter welchem eine Datei erreicht werden kann, gibt daher keinen Aufschluss darauf, wo die Datei physisch tatsächlich liegt.

• Es gibt ein einziges, zentrales Wurzelverzeichnis, das mit / bezeichnet wird und „root“ heißt.

• Verzeichnisse und Unterverzeichnisse werden mit / voneinander getrennt.

• Spezifische Dateisysteme werden unter Verzeichnisnamen in dieses virtuelle Dateisystem eingehängt.

Nähere Information zum VFS: Kernel Hackers‘ Guide: A tour of the Linux VFS und The „Virtual File System“ in Linux

Verzeichnisse

• Jeder Prozess hat ein assoziiertes Arbeitsverzeichnis. Startet man einen neuen Prozess von der Shell aus, so bekommt dieser das Arbeitsverzeichnis der Shell (genauer: das Arbeitsverzeichnis wird vom Elternprozess vererbt).

• Pfade können absolut oder relativ angegeben werden. Absolute Pfade beginnen immer mit dem Wurzelverzeichnis, d.h. mit /. Alles andere sind relative Pfade, welche ausgehend vom Arbeitsverzeichnis aufgelöst werden.

• Die speziellen Verzeichnisnamen . und .. stehen für das aktuelle Verzeichnis bzw. das Elternverzeichnis.

(26)

Dateien

• GROSZ- und kleinschreibung in Dateinamen machen (in der Regel, hängt vom spezifischen Dateisystem ab) einen Unterschied.

• Versteckte Dateien/Verzeichnisse beginnen mit einem Punkt (z.B. .profile)

• Dateien können auch für Geräte stehen, Verzeichnisse für Prozesse, System- und Kerneleinstellungen, Statusinformationen, …

• Dateiendungen haben i.a. keine Bedeutung, Linux orientiert sich am tatsächlichen Inhalt (Befehl file).

Es gibt verschiedene Dateitypen (mit deren Kurzbezeichnung):

• - → Reguläre Datei: Beinahe jede Datei

• d → Verzeichnis: Sammlung von Dateien

• c → „Character device“: Für ungepufferte, direkte Ein-/Ausgabe (z.B. Terminal)

• b → „Block device“: Für gepufferte Ein-/Ausgabe (z.B. Festplatten)

• p → „Named pipe“: Für Interprozesskommunikation (IPC)

• s → Socket: Erlaubt auch Interprozesskommunikation, flexibler als named pipes

• l → Link: Spezielle Datei, zeigt auf eine andere Datei/ein anderes Verzeichnis

Filesystem Hierarchy Standard (FHS)

Damit Unix-ähnliche Betriebssystem zueinander kompatibler sind und die Interoperabilität von Computerprogrammen gefördert wird, gibt es den Filesystem Hierarchy Standard. Dieser legt die Lage und Bezeichnung von wichtigen Verzeichnissen und Dateien fest.

Beispiele:

• /bin/ → Verzeichnis mit grundlegenden Systembefehlen für alle Benutzer

• /bin/ls → Datei ls ist das Programm zum Zeigen eines Verzeichnisinhalts

• /home/<BENUTZERNAME>/ → Benutzerdaten eines Benutzers

• /home/Name/Dokumente/ → Dokumentenverzeichnis für den Benuzter „Name“

• /proc/cpuinfo → Virtuelle Textdatei, die Infos über die CPU(s) enthält

• /media/ → Verzeichnis mit eingebundene Wechselmedien wie (DVD, USB-Stick, Digitalkamera, …)

• /media/cdrom/file.odf → ODF Dokument auf einer CD-ROM Referenz: Filesystem Hierarchy Standard bzw. Manpage hier

Befehle für Verzeichnisse 1 (pwd, cd)

pwd - Zeigt das aktuelle Arbeitsverzeichnis an.

» „print working directory“, builtin-Befehl

» $ pwd

/home/thomas/work/praxis_website cd - Wechselt das aktuelle Verzeichnis.

» „change directory“, builtin-Befehl; erster Parameter ist Zielverzeichnis

» Ohne Parameter nach $HOME (Umgebungsvariable)

» Ist der Parameter -, wechselt man in das letzte Verzeichnis.

Tipp: Besser als cd - sind popd und pushd (builtin-Befehle).

» $ cd /; pwd /

(27)

$ cd -

/home/thomas/work/praxis_website

$ cd; pwd /home/thomas

Befehle für Verzeichnisse 2 (ls)

ls - Listet Verzeichnisinhalte auf.

» „listing“, listet alle Dateien im aktuellen oder angegebenen Verzeichnis auf

» Viele Optionen, z.B.: -l → langes Format‘; -h → Größen sinnvoller ausgeben; -a → alles, auch versteckte Dateien, anzeigen; -t → nach Zeit sortieren; -d → Verzeichnis statt Inhalte

» $ ls -lt total 36

-rw-rw-r-- 1 thomas thomas 3694 Oct 10 20:01 unterlagen.page drwxrwxr-x 2 thomas thomas 4096 Oct 9 17:23 scripts

drwxr-xr-x 7 thomas thomas 4096 Oct 8 16:19 src drwxrwxr-x 2 thomas thomas 4096 Oct 8 16:14 ext drwxrwxr-x 2 thomas thomas 4096 Oct 2 12:56 tmp drwxrwxr-x 7 thomas thomas 4096 Oct 2 12:56 out

-rw-rw-r-- 1 thomas thomas 147 Sep 30 12:18 webgen.config -rw-rw-r-- 1 thomas thomas 245 Sep 29 09:05 notizen.org drwxrwxr-x 4 thomas thomas 4096 Mar 5 2012 out_old

» Hinweis: Die Bedeutung der ersten vier Spalten wird später bei „Benutzer, Gruppen, Rechte“

erklärt. Ab der 5. Spalte sieht man die Dateigröße, das Datum der letzten Modifikation und den Namen.

Befehle für Verzeichnisse 3 (mkdir, rmdir)

mkdir - Erstellt ein oder mehrere Verzeichnisse.

» „make directory“, Parameter sind die zu erstellenden Verzeichnisse

» Mit der Option -p werden auch Elternverzeichnisse erstellt

» $ ls example/test

ls: cannot access example/test: No such file or directory

$ mkdir -p example/test

$ ls example test

rmdir - Löscht ein oder mehrere Verzeichnisse.

» „remove directory“; Parameter sind die zu löschenden Verzeichnisse

» Funktioniert nur, wenn das Verzeichnis leer ist!

» Mit der Option -p werden auch (leere) Elternverzeichnisse gelöscht

» $ rmdir example

rmdir: failed to remove `example': Directory not empty

$ rmdir -p example/test

$ ls example

ls: cannot access example: No such file or directory

Befehle für Dateien 1 (touch, cat, tac)

touch - Legt eine Datei an.

» Falls die Datei schon existiert, wird die Zugriffs- und Modifikationszeit auf die aktuelle Zeit gesetzt.

(28)

» -t [[CC]YY]MMDDhhmm[.ss] gibt das zu benutzende Datum an.

» $ touch file1

$ ls -l file1

-rw-rw-r-- 1 thomas thomas 0 Oct 11 10:37 file1

$ touch -t 201001010001 file1

$ ls -l file1

-rw-rw-r-- 1 thomas thomas 0 Jan 1 2010 file1 cat - Gibt den Inhalt einer oder mehrerer Dateien aus.

» „concatenate“; Parameter sind die Dateien.

» tac macht das gleiche, nur rückwärts (z.B. für die Ausgabe von Log-Dateien)

» $ echo -e "hallo\ndu" > file1

$ cat file1 hallo du

$ tac file1 du

hallo

Befehle für Dateien 2 (mv, cp, rm)

mv - Verschiebt eine Datei.

» „move“, wird auch zum Umbennen von Dateien verwendet.

» Hier wird entweder nur der Pfad geändert (im selben Dateisystem, sehr schnell), oder eine Kopie mit anschließendem Löschen gemacht.

» $ mv file1 file2

cp - Kopiert eine oder mehrere Dateien.

» „copy“, bei mehr als zwei Parametern muss der letzte ein Verzeichnis sein.

» Der Inhalt einer Datei wird in eine neue, unabhängige Datei geschrieben.

» Nützliche Optionen: -a → archivieren (Attribute identisch), -r → rekursiv kopieren, -i → beim Überschreiben nachfragen

» $ cp -a file2 file1

rm - Löscht eine oder mehrere Dateien.

» „remove“, Parameter sind die zu löschenden Dateien.

» Der Eintrag im Verzeichnis wird gelöscht. Die Daten könnten weiterhin erreichbar sein, wenn mehrere Dateinamen auf dieselbe Datei verweisen (harte Links).

» $ rm file1 file2

Befehle für Dateien 3 (stat, file)

stat - Liefert Details zu einer Datei.

» $ stat file1   File: `file1'

  Size: 9 Blocks: 8 IO Block: 4096 regular file Device: 806h/2054d Inode: 1485015 Links: 1

Access: (0664/-rw-rw-r--) Uid: ( 1515/ thomas) Gid: ( 1515/ thomas) Access: 2012-10-11 10:41:25.635363400 +0200

Modify: 2012-10-11 10:41:24.539366907 +0200 # Zeitstempel Änderung Inhalt Change: 2012-10-11 10:41:24.539366907 +0200 # Zeitstempel Änderung Metadaten  Birth: -

file - Erkennt Dateiformate.

(29)

» Das sind nicht die Dateitypen von Linux!

» Das Programm benutzt mehrere Algorithmen, um das Dateiformat einer Datei zu erkennen. In der Regel ist die Ausgabe korrekt.

» $ file tutorial.html

tutorial.html: HTML document text

$ file 20090708.txt

20090708.txt: ASCII text, with CRLF, CR, LF line terminators, with overstriking

$ file dokument1

dokument1: PDF document, version 1.4

Befehle für Dateien 4 (split)

split -Spaltet eine Datei in Teile auf.

» Die Dateien können mit cat wieder zusammengefügt werden.

» Syntax: split [Optionen] Datei [Präfix] (Präfix ist standardmäßig ‚x‘)

» Optionen: -l N → N Zeilen pro Ausgabedatei, -b N → N Bytes pro Ausgabedatei, -n N → N Ausgabedateien erzeugen, -d → numerischen Suffix verwenden

» $ split -n 3 -d /etc/passwd passwd

$ split -l 10 /etc/passwd passwd

$ ls -l passwd*

-rw-r--r-- 1 thomas thomas 823 Dez 7 09:57 passwd00 -rw-r--r-- 1 thomas thomas 823 Dez 7 09:57 passwd01 -rw-r--r-- 1 thomas thomas 823 Dez 7 09:57 passwd02 -rw-r--r-- 1 thomas thomas 344 Dez 7 09:57 passwdaa -rw-r--r-- 1 thomas thomas 459 Dez 7 09:57 passwdab -rw-r--r-- 1 thomas thomas 642 Dez 7 09:57 passwdac -rw-r--r-- 1 thomas thomas 575 Dez 7 09:57 passwdad -rw-r--r-- 1 thomas thomas 449 Dez 7 09:57 passwdae

$ cat passwdac | wc -l 10

Sonstige Befehle (find)

find - Sucht nach Dateien in einem Verzeichnisbaum.

» Sehr mächtiges Werkzeug, sollte man sich gut ansehen!

» Syntax: find [OPTIONEN] [PFAD...] [AUSDRUCK]

» Ein Ausdruck besteht aus Optionen, Tests und Aktionen, separiert mit Operatoren:

• Optionen (beeinflussen die gesamte Suche):

• -mindepth → minimale Suchtiefe

• -maxdepth → maximale Suchtiefe.

• Tests (selektieren Dateien):

• -name PATTERN → Dateien, deren Namen dem Muster entsprechen.

• -iname PATTERN → Wie -name, aber Groß-/Kleinschreibung egal.

• -type TYP → Dateien eines bestimmten Linux-Dateityps.

• -perm [-/]MODE → Dateien nach Zugriffsrechten filtern.

• -size N → Dateien nach Größe filtern.

(30)

Sonstige Befehle (find)

find…

» • Aktionen (machen etwas mit gefundenen Dateien):

• -print → Namen der Datei ausgeben, danach Zeilenumbruch.

• -print0 → Namen der Datei ausgeben, danach Null-Zeichen.

• -delete → Datei löschen.

• -exec BEFEHL ; → Befehl auf Datei ausführen ({} wird mit Dateiname ersetzt)

• Operatoren:

• -or/-not/-and → Logische Verknüpfung (default ist -and).

• ( AUSDRUCK ) → Gruppieren von Anweisungen.

» Von der Shell verwendete Zeichen (z.B. (, ), ;, …) müssen mit dem Maskierungszeichen („escape character“) \ versehen werden, damit die Shell sie nicht interpretiert.

Verwenden von Dateisystemen 1

• Wie erwähnt, müssen Dateisysteme in das VFS eingehängt („gemountet“) werden, damit sie verwendet werden können. Wenn ein Dateisystem nicht mehr gebraucht wird, kann es ausgehängt werden.

• Ein Dateisystem kann unter einem beliebigen Verzeichnis (dem Mountpoint) eingehängt werden.

Die vorher unter diesem Verzeichnis verfügbaren Dateien und Verzeichnisse sind dann solange nicht mehr erreichbar, bis das Dateisystem wieder ausgehängt wird.

Achtung: Neue Dateisysteme nicht unter Systemverzeichnisse (z.B. /bin/, /etc/, …) einhängen!

• Um ein Dateisystem einzuhängen braucht man das Gerät, auf dem es liegt (z.B. das DVD-Gerät oder eine Festplattenpartition) und ein Verzeichnis. Falls der Typ des Dateisystems (z.B. FAT, EXT4, …) nicht erkannt wird, muss auch diesen zusätzlich angeben.

• Bei aktuellen Linux-Distributionen werden Wechselmedien wie USB-Sticks und -Festplatten sowie DVDs automatisch erkannt und, falls möglich, eingehängt (in automatisch erstellten Verzeichnissen unter /media/).

Verwenden von Dateisystemen 2

• Für jeden Typ von Dateisystem werden Programme zum Erstellen bzw. Bearbeiten zur Verfügung gestellt.

Z.B. EXT2-4: mke2fs (auch z.B. als mkfs.ext4 benutzbar), e2fsck, debugfs, dumpe2fs.

• Die Funktionalität der Programme variert aber stark, weil nicht alle Dateisysteme gleich gut unterstützt werden bzw. sie sich in den Features unterscheiden.

Befehle für Dateisysteme 1 (mount)

mount - Hängt Dateisysteme in das VFS ein und listet sie auf.

» Ohne Parameter werden die eingebundenen Dateisysteme aufgelistet (Hinweis: mit mount | column -t bekommt man eine schönere Ausgabe)

(31)

» Üblicherweise kann nur der Administrator beliebige Dateisysteme einhängen.

» $ mount

/dev/sda1 on / type ext3 (rw,errors=remount-ro) proc on /proc type proc (rw,noexec,nosuid,nodev) sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) udev on /dev type devtmpfs (rw,mode=0755)

none on /run/shm type tmpfs (rw,nosuid,nodev) /dev/sda5 on /scratch type ext3 (rw,nosuid)

rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw) //share2/profiles on /profiles type cifs (rw)

Befehle für Dateisysteme 2 (mount)

mount…

» $ mount | column -t

/dev/sda1 on / type ext3 (rw,errors=remount-ro) proc on /proc type proc (rw,noexec,nosuid,nodev) sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) udev on /dev type devtmpfs (rw,mode=0755)

none on /run/shm type tmpfs (rw,nosuid,nodev) /dev/sda5 on /scratch type ext3 (rw,nosuid) rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw)

//share2/profiles on /profiles type cifs (rw)

» In der obigen Ausgabe sieht man zum Beispiel, dass das EXT3-Dateisystem auf dem Gerät /dev/sda1 (also der ersten Partition auf der ersten Festplatte) unter /, dem Wurzelverzeichnis eingehängt ist. Weiters sieht man mehrere „virtuelle“ Dateisysteme (wie z.B. sysfs) und auch ein Netzwerkdateisystem (CIFS).

Befehle für Dateisysteme 3 (mount, umount)

mount…

» Im folgenden Beispiel wird ein NTFS-Dateisystem mit einigen Optionen unter /media/windows eingebunden.

» $ mount -o ro,noexec -t ntfs /dev/sdb1 /media/windows umount - Hängt Dateisysteme aus dem VFS aus.

» Als Parameter sind ein oder mehrere Mountpoints anzugeben.

» Wenn das Dateisystem noch in Verwendung ist, kann es nicht ausgehängt werden!

» $ umount /media/windows

Befehle für Dateisysteme 4 (df)

df - Zeigt die Festplattenbelegung an.

» „disk free“, Option -h („human readable“) nützlich.

» Eine Zeile pro eingehängtem Dateisystem.

» $ df -h

Filesystem Size Used Avail Use% Mounted on /dev/sda1 14G 8.1G 5.0G 62% /

udev 3.8G 4.0K 3.8G 1% /dev tmpfs 1.6G 1.1M 1.6G 1% /run none 5.0M 0 5.0M 0% /run/lock none 3.9G 2.3M 3.8G 1% /run/shm /dev/sda6 79G 72G 2.3G 97% /home

(32)

/dev/sda4 9.6G 273M 8.9G 3% /data

Befehle für Dateisysteme 5 (du)

du - Zeigt den Platzverbrauch von Dateien/Verzeichnissen an.

» „disk usage“, als Parameter können Dateien/Verzeichnisse angegeben werden

» Standardeinheit der Größen ist 1024 Byte

» Verzeichnisse werden rekursiv behandelt

» Nützliche Optionen: --apparent-size → tatsächliche Größe anzeigen, -h → Größen sinnvoller ausgeben, -s → nur die Zusammenfassung, -c → Gesamtgröße ausgeben

» $ du -sc src tmp 1176 src 168 tmp 1344 total

$ du -sch src tmp 1.2M src 168K tmp 1.4M total

$ du --apparent-size -sch src tmp 988K src

159K tmp 1.2M total

Dateibesitzer und Zugriffsrechte 1

• Jede Datei gehört einem Benutzer (dem Besitzer) und einer Gruppe.

• Jedem Benutzer/jeder Gruppe ist eine eindeutige Nummer zugeordnet: die UID („User-ID“) dem Benutzer und die GID („Group-ID“) der Gruppe. Im Dateisystem selbst sind nur die UID/GID gespeichert!

• Diese Zuordnung kann auf jedem Linux-System anders sein (d.h. ein Benutzer auf System A muss nicht die selbe UID haben wie der gleiche Benutzer auf System B).

• Zusätzlich sind für jede Datei Zugriffsrechte definiert: Ein Set für den Besitzer (symbolisch u), eines für die Gruppe (symbolisch g) und eines für den Rest (symbolisch o, das sind alle außer dem Besitzer und den Gruppenmitgliedern). Es gibt drei verschiedene Arten von Zugriffsrechten:

• Lesen (symbolisch: r, numerisch: 4)

• Schreiben (symbolisch: w, numerisch: 2)

• Ausführen/Verzeichnis öffnen (symbolisch: x, numerisch: 1)

Manche Dateisysteme bieten darüber hinaus zusätzliche Dateiattribute an (z.B. EXT2/3/4-Attribute, POSIX ACLs).

Dateibesitzer und Zugriffsrechte 2

• Die Darstellung der Zugriffsrechte erfolgt immer in der Reihenfolge Lesen, Schreiben und Ausführen für den Besitzer, die Gruppe und den Rest.

• Falls ein Zugriffsrecht nicht gesetzt ist, wird in der symbolischen Schreibweise ein - an dessen Stelle geschrieben.

Zum Beispiel bedeutet rwxr-xr--, dass der Besitzer alle Rechte hat, die Gruppe darf Lesen und

(33)

Ausführen und der Rest darf nur Lesen.

• Die numerische Schreibweise bedient sich dem Oktalsystem, d.h. den Ziffern von 0 bis 7. Die Werte der gesetzten Rechte werden dabei addiert.

Berechnung: r → 4 = 2^2, w → 2 = 2^1, x → 1 = 2^0

In der Oktalschreibweise würden die Zugriffsrechte beim obigen Beispiel 754 sein.

Besitzer Gruppe Rest

symbolisch rwx r-x r--

Bits 111 101 100

Zugriffsrechte bei Verzeichnissen

• Die Zugriffsrechte werden für Verzeichnisse wie folgt interpretiert:

• Lesen bedeutet, dass der Verzeichnisinhalt (i.e. die Dateinamen) angezeigt werden darf.

• Schreiben bedeutet, dass der Verzeichnisinhalt geändert werden darf (i.e. Einträge dürfen angelegt bzw. gelöscht werden)

• Ausführen bedeutet, dass auf Dateien im Verzeichnis generell zugegriffen werden darf. Ob man die jeweiligen Dateien dann lesen/schreiben/ausführen darf, hängt wiederum von den Zugriffsrechten der Dateien selbst ab.

• Hat man auf ein Verzeichnis das Lese-, aber nicht das Ausführrecht, so kann man zwar den Verzeichnisinhalt ausgeben, aber auf keine Dateien zugreifen.

Im umgekehrten Fall (Ausführ-, aber kein Leserecht) kann man sich den Verzeichnisinhalt nicht anzeigen lassen, könnte aber auf bekannte Dateien zugreifen.

Zugriffsrechte - SUID/SGID/Sticky-Bit 1

Zusätzlich zu den genannten Zugriffsrechten gibt es noch drei spezielle Rechte:

• „Set-User-ID“ bzw. SUID-Bit (symbolisch: s, numerisch: 4)

Eine ausführbare Datei wird mit den Rechten des Besitzers ausgeführt, nicht mit den Rechten des aufrufenden Benutzers.

• „Set-Group-ID“ bzw. SGID-Bit (symbolisch: s, numerisch: 2)

Eine ausführbare Datei wird mit den Rechten der zugehörigen Gruppe ausgeführt, nicht mit den Rechten der primären Gruppe des aufrufenden Benutzers.

Auf ein Verzeichnis gesetzt, erhalten neu angelegte Dateien nicht die primäre Gruppe des anlegenden Benutzers, sondern die Gruppe des Verzeichnisses.

• „Restricted Deletion Flag“ oder „Sticky-Bit“ (symbolisch: t, numerisch: 1)

Verbietet in einem Verzeichnis einem unpriviligierten Benutzer das Löschen von Dateien/Verzeichnissen, wenn er nicht deren Besitzer ist. Wird üblicherweise z.B. auf das /tmp -Verzeichnis gesetzt.

(34)

Auf eine Datei angewandt, macht es jetzt nichts mehr. Früher würde das Programm in den Swap- Speicher geschrieben, damit es bei mehrmaligem Aufruf schneller ausgeführt wird.

Zugriffsrechte - SUID/SGID/Sticky-Bit 2

• In der symbolischen Schreibweise werden diese Rechte wie folgt dargestellt:

Ausführen SUID-Bit Besitzer SGID-Bit Gruppe Sticky-Bit Rest

x - x - x - x

x s s s s t t

- s S s S t T

Angewandt auf das obige Beispiel ergibt das in der symbolischen Schreibweise rwsr-xr-T, falls die SUID- und Sticky-Bits gesetzt sind.

• In der Oktalschreibweise werden die Werte der drei Rechte addiert und als vierte Ziffer den anderen dreien vorangestellt, z.B. ergibt das 6754 für das obige Beispiel, falls die SUID- und SGID-Bits gesetzt sind.

Siehe auch info coreutils 'Mode Structure'

Dateibesitzer und Zugriffsrechte - Anzeigen

Den Besitzer, die Gruppe sowie die zugehörigen Rechte von Dateien kann man sich mittels ls -l anzeigen lassen:

$ ls -ltd *

-rw-rw-r-- 1 thomas thomas 3694 Oct 10 20:01 unterlagen.page drwxrwxr-x 2 thomas thomas 4096 Oct 9 17:23 scripts

drwxr-xr-x 7 thomas thomas 4096 Oct 8 16:19 src drwxrwxr-x 2 thomas thomas 4096 Oct 8 16:14 ext drwxrwxrwt 2 thomas thomas 4096 Oct 2 12:56 tmp drwxrwxr-x 7 thomas thomas 4096 Oct 2 12:56 out

-rw-rw-r-- 1 thomas thomas 147 Sep 30 12:18 webgen.config -rw-rw-r-- 1 thomas thomas 245 Sep 29 09:05 notizen.org

$ ls -l /usr/bin/passwd

-rwsr-xr-x 1 root root 42824 Apr 9 2012 /usr/bin/passwd

• 1. Spalte: Linux-Dateityp (erstes Zeichen) und Zugriffsrechte.

• 2. Spalte: Link-Zähler (wird später bei „Harte und symbolische Links“ erklärt)

• 3. Spalte: Besitzer

• 4. Spalte: Gruppe

Die Rechte können mit chmod geändert werden, die Gruppe mit chgrp und der Besitzer mit chown.

Dateibesitzer und Zugriffsrechte - Befehle (chmod)

chmod - Ändert die Zugriffsrechte.

» Zwei Aufrufvarianten:

• chmod [OPTION]... OKTAL DATEI...: Mittels Oktalschreibweise.

(35)

• chmod [OPTION]... [ugoa...][+-=][rwxXst] DATEI...: Mittels symbolischer Schreibweise.

• u → Besitzer, g → Gruppe, o → Rest, a → Alle

• + → hinzufügen, - → löschen, = → exakt auf die Rechte setzen

• rwxst → klar (siehe oben), X → x setzen, falls auf ein Verzeichnis angewandt oder irgendein Benutzer schon das Recht hat

» Die Option -R erlaubt das rekursive Setzen der Zugriffsrechte.

» $ chmod a=rwx datei; ls -l datei

-rwxrwxrwx 1 thomas thomas 0 Oct 17 19:15 datei

$ chmod o-rwx datei; ls -l datei

-rwxrwx--- 1 thomas thomas 0 Oct 17 19:15 datei

$ chmod a-x,o+r datei; ls -l datei

-rw-rw-r-- 1 thomas thomas 0 Oct 17 19:15 datei

$ chmod 6744 datei; ls -l datei

-rwsr-Sr-- 1 thomas thomas 0 Oct 17 19:15 datei

Dateibesitzer und Zugriffsrechte - Befehle (chown, chgrp)

chown - Ändert den Besitzer (und optional auch die Gruppe) einer Datei.

» Syntax: chown [OPTION]... [BESITZER][:[GROUP]] DATEI...

» Aus Sicherheitsgründen darf nur der Administrator darf den Besitzer ändern!

» Option -R für rekursives Ändern.

» $ chown root datei

chown: changing ownership of `datei': Operation not permitted

$ sudo chown root datei; ls -l

-rw-rw-r-- 1 root thomas 0 Oct 17 19:29 datei

$ sudo chown thomas:adm datei; ls -l

-rw-rw-r-- 1 thomas adm 0 Oct 17 19:29 datei chgrp - Ändert die Gruppe einer Datei.

» Syntax: chgrp [OPTION]... GRUPPE DATEI...

» Option -R für rekursives Ändern.

» $ sudo chgrp staff datei; ls -l

-rw-rw-r-- 1 thomas staff 0 Oct 17 19:29 datei

Dateibesitzer und Zugriffsrechte - Befehle (umask)

umask - Zeigt und ändert die Maske der Standarddateiberechtigungen.

» Ist ein builtin-Befehl!

» Wird für die Zugriffsrechte benutzt, wenn eine neue Datei angelegt wird.

» Die Maske wird von den Zugriffsrechten (normalerweise 666 für Dateien und 777 für Verzeichnisse) abgezogen!

» Die Option -S gibt die Maske in symbolische Schreibweise aus.

» $ umask 0002

$ umask -S u=rwx,g=rwx,o=rx

$ umask 022

$ umask 0022

$ umask u=rwx,g=rx,o=

(36)

$ umask 0027

$ touch file; ls -l file; rm -f file

-rw-r--- 1 thomas thomas 0 Oct 17 20:04 file

Harte und symbolische Links

• Alle Informationen (Besitzer, Gruppe, Zugriffsrechte, Anzahl und Speicherort der Datenblöcke, …) zu einer Datei, bis auf den Namen, werden im VFS in einem sogenannten „inode“ („index node“) verwaltet. D.h. einer Datei entspricht immer ein inode.

• Zugriff auf eine Datei erhält man, indem man in einem Verzeichnis einen Namen mit dem inode der Datei verbindet. Dieses Zuordnen eines Namens zu einer Datei bezeichnet man als „linken“ und so einen Eintrag als harten Link (oder Hardlink).

Harte Links sind auf Grund der engen Verbundheit mit dem Dateisystem immer nur innerhalb eines physischen Dateisystems möglich!

Siehe z.B. Dateiformat von Verzeichnissen im EXT4-Dateisystem

• Es ist möglich, mehrere harte Links auf die selbe Datei zu setzen, auch in unterschiedlichen Verzeichnissen des selben Dateisystems. Aber man kann nur einen harten Link auf ein Verzeichnis setzen!

Harte und symbolische Links 2

• Neben den harten Links gibt es auch noch die sogenannten symbolischen Links (oder Softlinks).

• Im Unterschied zu harten Links verweisen symbolische Links nur auf eine andere Datei/ein anderes Verzeichnis. Das bedeutet, das beim Anlegen eines symbolischen Links eine neue Datei erstellt wird, dessen Inhalt der Pfadname auf die verwiesene Datei ist (kurze Pfadnamen – derzeit bis zu 60 Bytes – werden aus Platz/Geschwindigkeitsgründen direkt im inode gespeichert).

Dieser Pfadname kann absolut (vom Wurzelverzeichnis ausgehend) oder relative (zum Verzeichnis, in dem der symbolische Link liegt) sein.

Wenn das Ziel des symbolischen Links nicht (mehr) existiert, dann verweist der Link „ins Leere“.

Man spricht dann von einem „dangling or broken link“.

• Symbolische Links sind im Gegensatz zu harten Links auch auf Verzeichnissen und dateisystemübergreifend erlaubt.

Harte und symbolische Links - Befehle (ln)

ln - Legt harte oder symbolische Links an.

» Meistgenutzte Syntax: ln [-s] ZIEL [LINK_NAME]

» Die Option -s erlaubt das Anlegen von symbolischen statt harten Links.

» $ touch datei; ln datei hardlink; ln -s datei softlink; ls -il * 1485109 -rw-rw-r-- 2 thomas thomas 0 Oct 18 07:51 datei

1485109 -rw-rw-r-- 2 thomas thomas 0 Oct 18 07:51 hardlink

1485447 lrwxrwxrwx 1 thomas thomas 5 Oct 18 07:52 softlink -> datei

$ echo inhalt > datei; cat datei hardlink softlink

(37)

inhalt inhalt inhalt

$ rm datei; cat hardlink softlink inhalt

cat: softlink: No such file or directory

$ cp hardlink datei; ln softlink softlink.2; ls -l * 1484535 -rw-rw-r-- 1 thomas thomas 7 Oct 18 07:53 datei 1485109 -rw-rw-r-- 1 thomas thomas 7 Oct 18 07:53 hardlink

1485447 lrwxrwxrwx 2 thomas thomas 5 Oct 18 07:52 softlink -> datei 1485447 lrwxrwxrwx 2 thomas thomas 5 Oct 18 07:52 softlink.2 -> datei Mit Hilfe von cp -l kann man auch massenhaft harte Links erzeugen.

Harte und symbolische Links - Befehle (readlink)

readlink - Liest den Verweise eines symbolischen Links aus.

» Mit der Option -f wird der kanonische Dateiname (vollständiger Pfad mit aufgelösten symbolischen Links) zurückgegeben.

» $ readlink datei

$ readlink -f datei

/home/thomas/work/praxis_website/tmp/link/datei

$ readlink softlink datei

$ readlink -f softlink

/home/thomas/work/praxis_website/tmp/link/datei

Copyright und Lizenz

• Copyright: Thomas Leitner thomas.leitner@univie.ac.at

• Basiert teilweise auf den Folien von Harald Schilly harald.schilly@univie.ac.at

• Lizenz: Creative Commons CC BY-NC-SA

„Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Österreich.“ - http://creativecommons.org/licenses/by-nc-sa/3.0/at/

(38)

Foliensatz 5

Arbeiten mit der Bash

Inhalt

• Wie die Bash eine Eingabe verarbeitet

• Befehle miteinander kombinieren

• Ein- und Ausgabe umleiten

• Auswertungsunterdrückung

• Expansionen

• Wichtige Hilfsprogramme

Wie die Bash eine Eingabe verarbeitet

• Der eingegebene Text wird in Wörter (auch Token genannt) durch die Meta-Zeichen | & ; ( ) < >

space tab aufgeteilt, die Auswertungsunterdrückung wird dabei beachtet.

• Die Wörter werden analysiert und zu einfachen bzw. komplexen Befehlen zusammengefasst.

• Die verschiedenen Expansionen werden der Reihe nach durchgeführt.

Ein- und Ausgabeumleitungen werden angewandt.

• Die einzelnen Befehle werden ausgeführt.

Auf die einzelnen Teile dieser Verarbeitungsschritte werden wir jetzt näher eingehen.

Bash Shortcuts

• „Strg-l“ → Bildschirm löschen und Cursor in die erste Zeile setzen

• „Strg-k“ → Vom Cursor bis zum Zeilenende alles ausschneiden

• „Strg-y“ → Letzten ausgeschnitten Text einfügen

• „Strg-_“ → Letzte Eingabe rückgängig machen

• „Strg-x Strg-e“ → Aktuelle Befehlszeile im Editor öffnen und danach ausführen

• „Alt-Strg-e“ → Eine Befehlszeile wie die Bash expandieren

• „Alt-.“, „Alt-_“ → Letztes Wort der letzten Befehlszeile einfügen

• „Strg-x~“ → Benutzernamenvervollständigung anzeigen

Mehr Shortcuts findet man unter der Überschrift „READLINE“ in man bash.

Auswertungsunterdrückung (Quoting)

• Die Auswertungsunterdrückung (Quoting) erlaubt es, die spezielle Bedeutung von Zeichen oder Wörtern zu unterdrücken.

Referenzen

ÄHNLICHE DOKUMENTE

Beispiele von Distributionen: Debian (eine der ersten Distributionen, Allroundsystem), Ubuntu (basiert auf Debian, Fokus auf Benutzer, weit verbreitet), Red Hat (für

Shell-interne Befehle, diese entsprechen keinem Programm Alias, das ist ein Synonym für einen Befehl (nur in der Shell gültig) (Systemweite) Programme.. Shell-Skripte (systemweit

Operator || : Befehl2 wird nur dann ausgeführt, wenn Befehl1 einen Rückgabewert ungleich 0 hat!. Der Rückgabewert ist der Rückgabewert des letzten,

Signale können von einem Prozess abgefangen und verarbeitet/ignoriert werden. Wird das nicht gemacht, wird die Standardaktion für das Signal ausgeführt.. Ein Signal hat einen Namen

Der Rückgabewert ist in beiden Fällen der Rückgabewert des letzten ausgeführten Befehls der Liste2, oder 0, falls von Liste2 kein Befehl ausgeführt worden ist. Wir schreiben nun

→ Ausdruck kann einmal oder keinmal vorkommen (entspricht {0,1} ) + → Ausdruck kommt einmal oder mehrmals vor (entspricht {1,} ).. * → Ausdruck kommt keinmal, einmal oder

sehr nützlich, wenn man auf einem Server einen länger dauernden Befehl ausführen will, aber die Netzwerkverbindung zum Server nicht stabil ist oder man nicht das Ende abwarten

Um das Quadrat etwas einfacher zu programmieren, so dass ihr nicht alles vier mal programmieren müsst, gibt es den Befehl „Wiederhole x mal“.. Diesen findet ihr unter Kontrolle,