Resource icon

[Linux]Einführung in Linux

  1. Der Desktop
  2. Das Dateisystem
  3. Das Benutzersystem
  4. Wichtige Programme
  5. Netzwerk
  6. Entwickeln unter Linux
Der Desktop
Wenn man ein aktuelles Linux bootet, sei es von der Festplatte oder einem Livemedium, erscheint in der Regel ein Logindialog. Nach Eingabe von Usernamen und Passwort gelangt man auf einen Desktop. Je nach Linuxversion kann dieser unterschiedlich aussehen, er verhält sich jedoch grundsätzlich ähnlich wie der Windowsdesktop. Es gibt Verknüpfungen und Menüs, die Programme starten oder Befehle ausführen. Unter Linux genügt jedoch meist ein einfacher Mausklick, was am Anfang etwas verwirrend sein kann. Mit der rechten Maustaste lassen sich fast überall wie gewohnt Kontextmenüs öffnen. Für die nachfolgenden Erläuterungen wird voraussgesetzt, das der Anwender sein Linux booten kann und Programme per Mausklick starten kann. Da Linux sein volles Potential erst über die Shell entfaltet, wird der graphische Desktop im Folgenden nicht behandelt. Alle Beispiel erforden ein Terminal (auch als Konsole bezeichnet, das sich fast immer direkt über den Desktop starten lässt und in dem Eingaben für die shell gemacht werden.

Die Shell
Die Shell ist ein Kommadozeileninterpreter, der eingebene Befehl verarbeitet (parst) und ausführt. Über die shell können Programme gestartet werden. Linux benutzt eine Variable namens PATH um bekannte Pfade zu speichern, bei Programmen, die in einem bekannten Pfad liegen genügt der Name um das Programm auf zurufen. Zu beachten ist hier, dass das aktuelle Verzeichnis . nicht im Pfad liegt, hier muss ./Programmname eingegeben werden.

Shellexpansion
Die Bash verfügt über ein mächtiges Werkzeug, das den Umgang mit Befehlen stark vereinfacht. Die Shellexpansion ersetzt Teile eines eigegebenen Befehls vor der Ausführung nach vorgegebenen Mustern (Reguläre Ausdrücke).
  • Wildcard - Ein Stern "*" in einer Befehlskette passt auf alle Muster. Wird ein einfacher Stern anstelle eines Dateinamens benutzt, wird er durch alle Dateien im selben Verzeichnis ersetzt. Ein "*.txt" würde durch alle Dateien mit der Endung .txt ersetzt. Vorsicht ist geboten bei "*.*", das im DOS für alle Dateien steht , unter Linux schließt dieser Ausdruck auch das übergeordnete Verzeichnis "../" mit ein.
  • Variablen - Eine Zuweisung foo=bar erzeugt eine Variable foo, deren Inhalt bar ist. "bar" kann nun in der aktuellen Shell über "$foo" referenziert werden. Soll die Variable auch in weiteren Shells verwendet werden, muss sie exportiert werden.
    export $foo
    Diese Syntax gilt für die Bash und kompatible shells, in anderen Shells muss der Befehl
    set env foo=bar
    lauten. In der Bash sind einige häufig verwendete Variablen vordefiniert. $PATH enthält den Suchpfad für Programme, $HOME das Heimatverzeichnis des aktuellen Nutzers und $PWD den absoluten Pfad des aktuellen Verzeichnisses. Bei einem Verzeichniswechsel wird $PWD nach $OLDPWD kopiert und dann neu gesetzt. Eine Übersicht über alle gesetzten Variablen gibt der Befehl "env". In einem Shellscript sind die Variablen $0,$1,...,$n die Parameter des Skriptaufrufs. $0 ist dabei der verwendete Befehlsname.
  • Substitutionen - In Backticks `` eingeschlossene Befehle werden von der Shell zuerst ausgeführt und das Ergebnis an Stelle des Befehls eingefügt (substituiert)
Datenströme
Die Shell verfügt über 3 Kanäle, die für Ein und Ausgaben verwendet werden. Diese werden stdin (Standard In) für die Eingabe, stdout (Standard out) für die Ausgabe und stderr (Standard Error) für Fehlermeldungen. Programme können Parameter von stdin lesen und geben Ergebniss in stdout aus. Es ist Möglich, die Ein und Ausgabe Kanäle umzuleiten. So kann man mit dem > die Standardausgabe in eine Datei umleiten. Genauso kann man mit < die Standardeingabe durch eine Datei ersetzen. Der eingegebene Befehle liest dann für jeden Parameter, der auf stdin einzugeben wäre, eine Zeile aus der Datei. Mit dem Konstrukt 2>&1 leitet man die Fehlerausgabe in die Standardausgabe um, um zum Beispiel beides in eine Datei zu schreiben.

Befehlsketten
Eine wichtige Fähigkeit der Shell ist das Verbinden von Befehlen mit dem Pipe-Operator |.
Syntax:
Befehl1 | Befehl2
Die Ausgabe der ersten Befehls wird dabei als Eingabe des zweiten Befehls verwendet. Gibt Befehl1 eine Liste als Ausgabe zurück und erwartet Befehl2 dagegen einen einzelnen Wert als Eingabe funktioniert dies nicht. Das Programm xargs löst dieses Problem.

Das Dateisystem

Aufbau
Unter Linux ist das Dateisystem strikt hierarchisch geordnet. Die oberste Verzeichnisebene stellt das Wurzelverzeichnis "/" (engl. root) dar. Alle weiteren Verzeichnisse, auch solche die sich auf verschiedenen Datenträgern befinden, werden darunter angeordnet. Ausgehend vom Wurzelverzeichnis bildet sich so ein aus Verzeichnissen und Unterverzeichnissen bestehender Baum, dessen Blätter die Dateien bilden. Anders als in Windows werden unter Linux keine Buchstaben zur identifizierung von Geräten benutzt. Laufwerke können über ihren eindeutigen Gerätenamen angesprochen werden. Um den Zugriff zu erleichtern, können sie in das bestehende Dateisystem eigehät (engl. mount) werden. Das Dateisystem auf dem Datentäger wird dann als Ast in den Verzeichnisbaum integriert. Dies funktioniert mit Festplattenpartitionen genauso, wie mit CD's, USB-Sticks und Netzwerkfreigaben.
Navigieren im Dateisystem
Um von einem Verzeichnis in ein anderes zu gelangen, wird der Befehl cd (change directory) verwendet. Dabei können Verzeichnisse, die unterhalb des aktuellen Verzeichnisse liegen direkt mit dem Namen angesprochen werden.
cd foo
Jedes Verzeichnis kann über den absoluten Pfad ausgehend vom Wurzelverzeichnis referenziert werden. Als Pfadtrennzeichen wird "/" verwendet.
cd /var/log/messages
Für einige Verzeichnisse gibt es besondere Bezeichner, die einen schnellen Zugriff ermöglichen.
cd / # Wechsel in das Wurzelverzeichnis
cd ~ # Wechsel in das Heimatverzeichnis des jeweiligen Benutzers (engl. home)
cd .. # Wechsel in das übergeordnete Verzeichnis

Das jeweils aktuelle Verzeichnis wird mit "." referenziert, und kann in Befehlen das Quell und/oder Zielverzeichnis darstellen, wenn die Angabe zwingend erforderlich ist. Der Inhalt eines Verzeichnisses kann mit
ls bar
angezeigt werden. Für das aktuelle Verzeichnis reicht "ls", der Punkt kann hier weggelassen werden. Dies ist immer dann der Fall, wenn der Befehl genau einen Verzeichnisnamen als Argument erwartet. Bei der Angabe von zwei oder mehr Namen muss er mit angegeben werden. Weitere Details zu "ls" finden sich im Abschnitt "wichtige Programme"

Verwaltung
In diesem Abschnitt geht es um grundlegende Manipulationen, wie dem Anlegen von Verzeichniss. Der Befehl
mkdir foo
erzeugt ein neues leeres Verzeichnis. Das Gegenstück
rmdir bar
löscht ein leeres Verzeichnis.
cp foo bar
kopiert das Verzeichnis oder die Datei "foo" nach "bar".
mv foo bar
verschiebt das Verzeichnis oder die Datei "foo" nach "bar". Dieser Befehl kann auch angewendet werden um ein Verzeichnis oder eine Datei umzubenennen.
touch foo
erzeugt eine neue, leere Datei. Die Datei bekommt einen von der Endung abhängigen Dateityp zugewiesen.
rm foo
löscht eine Datei. Wie löscht man ein nicht leeres Verzeichnis? Dazu gibt es mehrere Möglichkeiten.
  1. Mit rm alle Dateien löschen, dann mit rmdir das Verzeichnis löschen. Sehr unpraktisch.
  2. Die allgemein verwendete Methode:
    rm -rf bar
    arbeitet rekursiv und löscht alle Dateien und Verzeichnisse unterhalb von bar, inklusive bar selbst.
  3. Eine weitere Möglichkeit ist das verschieben ins Datennirvana (/dev/null):
    mv bar /dev/null
    Dieser Befehl funktioniert auch dann, wenn rm aufgrund einer überfüllten Platte/Quota nicht mehr arbeitet.
Das Benutzersystem

Linux ist von Grund auf als Mehrbenutzersystem konzipiert. Dadurch können mehrere Benutzer gleichzeitig an einem Rechner arbeiten, es gibt ein umfassendes Rechtemanagment und eine klare Trennung zwischen System, Administration und Anwendern. Jeder Benutzer erhält eine eindeutige UserID mit der seine Rechte verwaltet werden. Der Benutzer mit der UserID wird "root" oder auch "superuser" genannt. Er ist der Administrator des Gesamtsystems und hat in den meisten Linuxdistributionen fast uneingeschränkte Rechte, bzw. kann sich die Rechte die er nicht hat verschaffen. Im Gegenzug dazu gibt es den User "nobody" der fast gar keine Rechte besitzt und nur für die Ausführung von sicherheitskritischen Programmen verwendet wird. Bei einem Angriff kann sich ein Angreifer meist nur die Rechte des Users verschaffen, in dessen Rechtebereich das angegriffene Programm läuft. Mit dem eingeschränkten Rechtebereich soll deshalb der Schaden reduziert werden, den ein Angreifer anrichten kann. Je mehr Prozesse allerdings als nobody laufen, desto geringer ist diese Wirkung. Dazu gibt es weitere Systemuser, die für die Ausführung eines speziellen Prozesses gedacht sind. Ein normaler Benutzer erhält neben der ID ein Heimatverzeichnis (HOME), ein Passwort sowie eine Loginshell zugewiesen. Mehrere Benutzer können zu Gruppen zusammengefasst werden. Standardmäßig ist jeder Benutzer in zwei Gruppen, seiner eigenen und der Grupper Users in der alle normalen Benutzer sind. Die Einteilung in Gruppen spielt bei der Verwaltung der Nutzungsrechte eine Rolle. Die Berechtigungen für Dateien und Verzeichnisse werden durch die drei Attribute lesen, schreiben und ausführen (engl. read,write, execute) definiert. Dabei werden drei Bereiche unterschieden, die Rechte des Nutzers, dem die Datei gehört, die Rechte der Gruppe, zu der die Datei gehört und die Rechte aller anderen Nutzer und Gruppen.
Beispiel: Die Rechte der Datei index.html
ls -l index.html #Listet detailierte Informationen zu einer Datei.
liefert die Ausgabe:
-rw-r--r--+ 1 USER users 5709 22. Jun 00:40 index.html

Dieser Eintrag ist wie folgt zu lesen: Die Datei gehört dem user ikosaeder und sie gehört der Gruppe users. Sie wurde am 22.6 erstellt. Die Rechte werden in der Form rwx angegeben. Ein vorhandener Buchstabe zeigt ein gesetztes Recht an, ein Strich ein nicht gesetztes. In dem Beispiel hat also der Nutzer die Rechte lesen und schreiben, die Gruppe und alle anderen dürfen die Datei lesen. Etwas anders sieht dies bei Verzeichnissen aus:

drwxr-xr-x+ 1 ikosaeder users 0 24. Jun 23:51 Bilder

Das d am Anfang des Eintrags kennzeichnet, das Bilder ein Verzeichnis ist. Ausserdem ist für alle das Attribut "Ausführen" gesetzt. Dies bedeutet bei Verzeichnissen das Recht in das Verzeichnis zu wechseln. Das Recht zu schreiben beinhaltet auch das Recht die Datei oder das Verzeichnis zu löschen. Die Rechte dürfen nur vom Besitzer und von root geändert werden. Dies geschieht mit dem Kommando "chmod", das weiter unten erläutert wird. Außerdem kann mit "chown" der Besitzer einer Datei geändert werden und mit "chgrp" die zugehörige Gruppe. Besitzer einer Datei ist derjenige, der sie erstellt, die Gruppe ist seine Hauptgruppe, in der Regel users oder seine eigene Gruppe. Beim Erstellen werden die Rechte der Datei auf einen Default-Wert gesetzt. Dieser kann mit dem Befehl "umask" festgelegt werden.

Wichtige Programme

find
Zum Suchen von Dateien und Verzeichnissen. Die allgemeine Syntax ist
find Verzeichnisname -option Parameter.
Beispiele:
find ./ -name Bild*
sucht im aktuellen Verzeichnis nach allen Dateien die mit "Bild" anfangen.
find ~/ -type d # Alle Verzeichnisse (directory) im Home des Users
find $HOME -type f # Alle Dateien (file) im Home des Users
Weitere Suchoptionen sind Alter,Größe oder Berechtigungen einer Datei. Nützliche Kombinationen von find:
find ./ -name *html -exec grep -i jquery.js {} \;
Findet alle html-Dateien, in denen jquery verwendet wird.
find ./ -name "*.bak" -exec rm -f {} \;
Findet alle Backup-Dateien und löscht sie. Das Konstrukt {} \; ist bei der Verwendung von exec sehr wichtig. Dabei muss zwingen ein Leerzeichen zwischen der Klammern und dem Backslash stehen. Die Klammer ist die Referenz auf das Ergebnis von find, das Semikolon schließt den Befehl für find ab, muss aber mit dem Backslash maskiert werden damit die Shell das Semikolon nicht selbst interpretiert.

grep
Zum Suchen von Strings in Dateien. Die allgemeine Syntax ist
grep -option Dateiname
Beispiele:
grep -i php index.html
Durchsucht die Datei index.html nach dem String \"php\". Das -i bewirkt dabei, das grep Groß und Kleinschreibung ignoriert. Weitere Optionen sind -n = Ausgabe der Zeilennummer in der der Ausdruck gefunden wurde, -R durchsucht alle Dateien im aktuellen Verzeichnis rekursiv und -v invervtiert die Suche. Die Option -L bewirkt, das statt der Fundstellen die Dateien aufgelistet werden, die das Suchmuster nicht enthalten, -l listet dagegen die Dateien auf, die das Muster enthalten. Als Suchmuster können sowohl einfache Strings als auch reguläre Ausdrücke verwendet werden.

man
man wird zum Anzeigen der Manpages (Hilfseiten) verwendet, die es zu den meisten Befehlen unter Linux gibt. Der Aufruf erfolgt mit
man Befehlsname
Zur Übung einfach mal die Manpages der hier vorgestellten Befehle ansehen, auch man man.

cat
cat kann zur Einfachen Ausgabe von Textdateien verwendet werden. Dann gibt es den Inhalt der Datei auf einmal auf dem Bildschirm aus. Dies ist bei kurzen Dateien ok, bei längeren Dateien ist es problematisch, weil man in der shell nur begrenzt scrollen kann (wenn überhaupt ). Die Hauptfunktion von cat ist aber das Zusammenführen von Dateien, bzw. das Anhängen von Daten an Dateien.

ls
Der List-Befehl ls liefert ohne Optionen nur die Namen der vorhandenen Unterverzeichnisse und Dateien in alphabetischer Reihenfolge. ls hat jedoch eine ganze Reihe von Optionen die eine sinnvollere Ausgabe ermöglichen
  • -l gibt eine ausführliche Beschreibung des Verzeichnisinhalts mit Rechten, Zugriffsinformationen und Größe (in Blocks) aus
  • -h gibt die Größe in Bytes aus (humanreadable)
  • -a zeigt auch versteckte Dateien mit an. Versteckte Dateien beginnen mit einem .
  • -t sortieren nach dem Zeitpunkt der letzten Änderung, neueste zuerst
  • -X alphabetisch nach der Erweiterung sortieren
  • -r Sortierreihenfolge umkehren
  • --color Färbt die Ausgabe nach einem vordefinierten Schema, unter Linux ist die Option meist voreingestellt und muss nicht mit angegeben werden

xargs
In einer Befehlskette liest xargs eine Liste von Strings von stdout und gibt diese auf stdin als einzelne Strings an ein Programm weiter.

top
top zeigt eine Liste aktuell laufender Prozesse an, inklusiver der Auslastung des RAM, der CPU und des Swap. Solange top läuft wird diese Liste aktualisiert. Die Liste kann sortiert werden und gefiltert. Top bietet außerdem die Möglichkeit, Prozesse zu killen.

ps
ps zeigt ebenfalls eine Liste laufender Prozesse an, jedoch ist diese im Gegensatz zu top statisch.

basename
Die meisten Programme liefern bei Ausgaben Dateinamen mit absolutem Pfad aus. basename entfernt den Pfad und liefert den Dateinamen zurück. Außdem kann die Dateiendung abgeschnitten werden.
basename ~/home/USER/foo.txt .txt
gibt foo zurück.

awk
awk ist ein Skriptinterpreter. Er läßt sich zum Beispiel verwenden um Berechnungen in Shellskripte einzubauen. Eine sehr nützliche Funktion ist die print Anweisung mit der z.B. einzelne Spalten aus Dateien extrahiert werden können.
awk '(print $1)' foo.txt
awk kann dabei auch Berechnungen mit den Spalten durchführen: Spalte 1 von Spalte 2 abziehen
awk '(print $2-$1)' bar.csv
Die Summe von Spalte 1 bilden
awk '(sum += $1); END (print sum)' foo.csv

sed
sed ist ein Editor für Datenströme. Die wichtigste Funktion ist dabei das Suchen und ersetzen von Text.
sed -i s/Muster/Ersatz/ foo.txt
Als Muster werden reguläre Ausdrücke akzeptiert.
Gefällt mir: Bratkartoffel
Autor
ikosaeder
First release
Last update
Bewertung
0,00 Stern(e) 0 Bewertungen

More resources from ikosaeder