Einführung in die Linuxshell

Die Shell (Terminal, Kommandozeile, Befehlszeile) ist ein Befehlsinterpreter im Linux-System. Befehle werden in Textform eingegeben und durch drücken der ENTER-Taste ausgeführt. Die Linuxshell ist vergleichbar mit der Eingabeaufforderung in Windows, aber weitaus mächtiger als diese. Viele Arbeiten in einem Linuxsystem lassen sich mit der Shell viel effektiver durchführen, als mit grafischen Tools.

Basics

Shell-Prompt

Wenn man die Shell startet, steht vor dem Befehl dass Shell-Prompt, aus dem sich bestimmte Informationen ablesen lassen.

user@linux:~$

user Nutzername des angemeldeten Nutzers

@ - „auf“

linux - Recchnername

~ gibt das Verzeichnis an (~ ist eine Abkürzung für das Homeverzeichnis /home/user)

$ - Es handelt sich um einen ganz normalen Nutzer ohne Administrator-Recchte

Das Shell-Prompt für den Administrator (root) sieht so aus:

root@linux:~#

Kommandos

Kommandos oder Befehle sind ausführbare Dateien (Programme, Scripte). Damit sie ausgeführt werden können müssen sie im Suchpfad liegen bzw. muss man den vollständigen Pfad angeben.

Kommandos können Übergabeparameter und Optionen haben.

Schauen wir uns das Kommando ls an:

ls - listet die Dateien und Ordner in einem Verzeichnis auf

Optionen: -l Langform, -a auch versteckte Dateien werden angezeigt

Parameter: das Verzeichnis

Beispiele:

user@linux:~$ ls [] user@linux:~$ ls -l [] user@linux:~$ ls -a [] user@linux:~$ ls -la [] user@linux:~$ ls -la /home/ []

Um sich alle Optionen des Befehls des Befehls ls anzeigen zu lassen kann man den Befehl man benutzen:

user@linux:~$ man ls

Autovervollständigung Wenn man nicht genau weiß, wie der Befehl oder ein Pfad heißt, kann man sich mit der Tab-Taste den Befehl vervollständigen lassen.

Aufgabe 1

Teste alle Beispiele!

Suchmuster

In der Shell kann man in den Namen von Parametern einen oder mehrere Zeichen ersetzen. Dadurch erhält man flexible Ausgaben. Der * ersetzt dabei mehrere Zeichen, das ? ein Zeichen.

Beispiele:

user@linux:~$ ls /etc/*tab [] user@linux:~$ ls -l /dev/sd? []

Aufgabe 2

Teste die Beispiele!

History

Alle Befehle, die von einem Benutzer in der Shell ausgeführt werden, werden in der Datei .bash_history gespeichert. Der Punkt vor dem Dateinamen gibt dabei an, dass es sich um eine versteckte Datei handelt. Mit den Pfeil nach oben bzw Pfeil nach unten Tasten kann man in diesen Befehlen blättern und sie (eventuell in abgeänderter Form) erneut ausführen. Durch den Befehl history kann man sich alle Befehle anzeigen lassen.

Aufgabe 3

Teste dass blättern und führe den Befeh history aus!

Hilfe auf der Kommandozeile

In der Shell gibt es vielfältige Möglichkeiten, sich Hilfe zu holen. Das Kommando man haben wir bereits kennengelernt.

Hilfeoption im Befehl:

Mit

user@linux:~$ befehl -h

bzw.

user@linux:~$ befehl --help

kann man sich die Hilfe zu einen Befehl anzeigen lassen.

Beispiel:

user@linux:~$ ls -h [] user@linux:~$ ls --help []

Manpage

Mit

user@linux:~$ man befehl

ruft man die Manpage eines Befehls auf. Sie ist meistens ausführlicher als die interne Hilfe.

Beispiel:

user@linux:~$ man ls []

Infoseite

Noch ausführlicher als die Manpage ist die Infoseite zu einem Befehl:

user@linux:~$ info befehl

Beispiel:

user@linux:~$ info ls []

Der Befehl apropos

Mit dem Befehl „aprops“ kann man sich alle Befehle anzeigen lassen, die mit einem bestimmten Thema zu tun haben. Im Beispiel werden alle Befehle angezeigt, die mit kopieren zu tun haben.

user@linux:~$ apropos ls []

Der Befehl whatis

Mit whatis kann man sich die Kurzbeschreibung eines Befehls anzeigen lassen.

Beispiel:

user@linux:~$ whatis ls []

Aufgabe 4

Teste die Beispiele!

Das Linux-Dateisystem

Aufbau

Im Unterschied zu Windows gibt es unter Linux keine Laufwerksbuchstaben. Auf einen Datenträger (z.B. auf einer internen Festplatte) befindet sich das Wurzeldateisystem (root). In dieser Wurzel befinden sich die wichtigsten Systemordner. (Siehe Abbildung!)

Weitere Datenträger (Festplatten, USB-Sticks, DVD-Laufwerke) können in dieses Dateisystem eingehängt (gemountet) werden. Wechseldatenträger erscheinen dabei meist im Ordner /media. Im Ordner /home befinden sich die Nutzerverzeichnisse. In diesen Verzeichnissen haben die Nutzer jeweils alle Rechte. In den Übrigen Verzeichnissen (außer /var und /tmp) darf nur ein Systemadministrator Änderungen vornehmen.

Relative und absolute Pfade

Mit dem Befehl

user@linux:~$ pwd /home/user

kann man sich das aktuelle Verzeichnis Verzeichnis anzeigen lassen.

Der Befehl cd

Mit dem Befehl cd kann man in ein bestimmtes Verzeichnis des Dateisystems wechseln. Dabei sind Abkürzungen möglich.

Beispiele:

user@linux:~$ cd /home/user/Dokumente user@linux:~/Dokumente$ pwd /home/user/Dokumente

Mit diesem Befehl wechselt man ins Verzeichnis /home/user/Dokumente. Wie man sieht erscheint jetzt am Prompt ~/Dokumente. Die Tilde ~ ist eine Abkürzung für das Homeverzeichnis des Nutzers.

user@linux:~/Dokumente$ cd ~ user@linux:~$ pwd /home/user

Gehen wir nun in ein anderes Verzeichnis:

user@linux:~$ cd /usr/bin user@linux:/usr/bin$ pwd /usr/bin

Wie man sieht, wird jetzt im Prompt das vollständige Verzeichnis angegeben.

Weitere Abkürzungen für Verzeichnisse sind der Punkt . für das aktuelle Verzeichnis und zwei Punkte für das übergeordnete Verzeichnis.

user@linux:/usr/bin$ cd .. user@linux:/usr/$ pwd /usr user@linux:/usr/$ cd . user@linux:/usr/$ pwd /usr

Aufgabe 5

Teste die Beispiele! Ersetze user durch deinem Benutzernamen!

Unter einem Pfad versteht man den Weg von einem Punkt im Dateisystem zu einen anderen. Zu jedem Ort im Dateisystem kommt man, indem man den Pfad von der Wurzel aus angibt. Einen solchen Pfad nennt man einen absoluten Pfad. Wenn man von einem Punkt des Dateisystems in ein Unterverzeichnis dieses Punkts möchte, muss man nicht den vollständigen Pfad angeben. Eine solche Pfadangabe nennt man relativen Pfad.

Beispiel

user@linux:~$ cd /home/user/Dokumente user@linux:~/Dokumente$ pwd /home/user/Dokumente
user@linux:~$ cd Dokumente user@linux:~/Dokumente$ pwd /home/user/Dokumente

In relativen Pfaden kann man auch die Abkürzungen .., . und ~ nutzen.

Beispiel

user@linux:~$ cd ./Dokumente user@linux:~/Dokumente$ pwd /home/user/Dokumente

Aufgabe 6

Teste die Beispiele! Ersetze user durch deinem Benutzernamen!

Aufgabe 7

Finde mindestens drei Möglichkeiten, um mit dem Befehl cd vom Verzeichnis /home/user ins Verzeichnis /home/user/Downloads zu kommen. Ersetze user durch deinem Benutzernamen!

Erstellen, Löschen und Verschieben von Dateien

Dateien und Verzeichnisse erstellen

mit dem Befehl touch lässt sich der Zeitstempel einer Datei ändern. Man kann ihn aber auch nutzen, um eine neue Datei anzulegen.

Beispiel:

Zunächst soll mit ls eine Textdatei angezeigt werden, die noch nicht existiert:

user@linux:~$ ls datei.txt ls: Zugriff auf 'datei.txt' nicht möglich: Datei oder Verzeichnis nicht gefunden

Nun wird die Datei mit touch angelegt und mit ls angezeigt:

user@linux:~$ touch datei.txt user@linux:~$ ls datei.txt datei.txt

Mit dem Befehl mkdir kann man Verzeichnisse anlegen. Wenn dass Verzeichnis schon existiert, wird, im Gegensatz zu touch eine Fehlermeldung angezeigt. (Mit -ld wird der Inhalt des Verzeichnisses in Langform angegeben.)

Beispiel:

user@linux:~$ ls -ld dir ls: Zugriff auf 'dir' nicht möglich: Datei oder Verzeichnis nicht gefunden user@linux:~$ mkdir dir user@linux:~$ ls -ld dir drwxrwxr-x 2 user user 4096 Mär 9 10:50 dir user@linux:~$ mkdir dir mkdir: das Verzeichnis »dir“ kann nicht angelegt werden: Die Datei existiert bereits

Wenn man bei mkdir die Option -p verwendet, kann man auch verschachtelte Verzeichnisse anlegen.

user@linux:~$ mkdir -p dir1/dir2/dir3 user@linux:~$ ls -ld dir1 drwxrwxr-x 3 user user 4096 Mär 9 12:44 dir1 user@linux:~$ ls -ld dir1/dir2 drwxrwxr-x 3 user user 4096 Mär 9 12:44 dir1/dir2 user@linux:~$ ls -ld dir1/dir2/dir3 drwxrwxr-x 2 user user 4096 Mär 9 12:44 dir1/dir2/dir3

Aufgabe 8

Teste die Beispiele!

Aufgabe 9

Lege in deinem Homeverzeichnis auf der Kommandozeile die folgende Ordnerstruktur an:

Erstelle auf der Kommandozeile im Ordner Deutschland die Datei berlin.txt und im Ordner Frankreich die Datei paris.txt.

Dateien und Verzeichnisse kopieren

Mit dem Kommando cp kann man Dateien und Ordner kopieren. cp erfordert mindestens zwei Argumente „Quelle“ und „Ziel“. Wenn man cp ohne zusätzliche Argumente verwendet, muss die Quelle eine Datei (kein Verzeichnis) sein.

Wenn das Ziel eine Datei ist, entstehen zwei identische Dateien mit unterschiedlichen Namen. Wenn das Ziel ein Verzeichnis ist, wird die Quelldatei unter denselben Namen in dem Verzeichnis abgespeichert.

Beispiele:

user@linux:~$ touch quelldatei.txt user@linux:~$ cp quelldatei.txt zieldatei.txt

Es entsteht eine zur Datei quelldatei.txt identische Datei zieldatei.txt.

user@linux:~$ touch quelldatei.txt user@linux:~$ cp quelldatei.txt Dokumente

Die Datei quelldatei.txt wird in den Ordner Dokumente kopiert, der Name bleibt erhalten.

Wenn man cp mit mehr als zwei Argumenten ohne Optionen verwendet, muss das letzte Argument ein Verzeichnis sein, alle anderen Argumente müssen Dateien sein. Die Dateien werden dann in das Verzeichnis kopiert. Ihre Namen ändern sich nicht.

Beispiel:

user@linux:~$ touch q1.txt user@linux:~$ touch q2.txt user@linux:~$ touch q3.txt user@linux:~$ cp q1.txt q2.txt q3.txt Dokumente

Die Dateien q1.txt, q2.txt und q3.txt werden in den Ordner Dokumente kopiert.

Wenn man ganze Ordner kopieren möchte, muss man cp mit der Option -r aufrufen.

Beispiel:

user@linux:~$ mkdir kopierverzeichnis user@linux:~$ touch kopierverzeichnis/quelldatei.txt user@linux:~$ cp -r kopierverzeichnis Dokumente

Der Ordner kopierverzeichnis wird mit Inhalt in den Ordner Dokumente kopiert.

Aufgabe 10

Arbeite den Abschitt Daateien und Verzeichnisse kopieren durch und teste die Beispiele!

Aufgabe 11

Kopiere die Datei berlin.txt aus Aufgabe 9 in den Ordner Dokumente!

Kopiere die Datei berlin.txt aus Aufgabe 9 unter den Namen peking.txt in den Ordner China.

Kopiere den Ordner Erde mit Inhalt in den Ordner Dokumente.

Löschen von Dateien und Verzeichnissen

Eine einzelne Datei kann man mit dem Befehl rm löschen. Ein leeres Verzeichnis löscht man mit dem Befehl rmdir. Ein Verzeichnis mit Inhalt löscht man mit dem Befehl rm -r.

Beispiele:

user@linux:~$ rm quelldatei.txt user@linux:~$ rmdir dir user@linux:~$ rm -r dir1

Aufgabe 12

Teste die Beispiele! Lösche alle Dateien und Ordner, die du in den Aufgaben 8 bis 11 angelegt und kopiert hast möglichst geschickt.

Weitere wichtige Befehle

find

Mit dem Befehl find kann man Verzeichnisse nach Dateien durchsuchen. find erwartet als Argument ein Verzeichnis, dass durchsucht werden soll und danch eine Option, was mit der Datei passieren soll.

Mögliche Optionen:

-name - listet die gefundenen Dateien auf

-delete - löscht die gefundenen Dateien

-exec - führt Programme aus, an die die gefundenen Dateinen übergeben werden.

Beispiele:

user@linux:~$ find /etc -name "fs*" ...

grep

grep filtert einzelne Zeilen aus Textdateien.

Beispiel:

user@linux:~$ grep root /etc/passwd root:x:0:0:root:/root:/bin/bash

less

Das Programm less gibt Text (z.B. eine Textdatei) seitenweise aus. Dabei kann man in den Text suchen und blättern. Mit q beendet man die Ausgabe.

user@linux:~$ less /var/log/syslog

head und tail

Das Programm head gibt standardmäßig die ersten 10 Zeilen einer Textdatei aus. Mit der Option -n kann man auch eine andere Zeilenanzahl ausgeben.

Das Programm tail gibt standardmäßig die letzten 10 Zeilen einer Textdatei aus. Mit der Option -n kann man auch eine andere Zeilenanzahl ausgeben.

Mit der Option -f ändert sich die Ausgabe in Echtzeit.

user@linux:~$ head -n 5 /etc/passwd ... user@linux:~$ tail -f /var/log/syslog ...

sort

Mit dem Programm sort kann man Eingaben, Ausgaben oder den Inhalt von Dateien sortiert ausgeben. Standartmäßig wird alphabetisch sortiert. Mit der Option -r kann man rückwärts sortieren.

Beispiel:

user@linux:~$ sort /etc/passwd ...

cut

Manche Textdateien haben auch einen spaltenartigen Aufbau. Mit dem Programm cut kann man bestimmte Spalten einer Textdatei ausgeben. Beispiel:

user@linux:~$ cut -d: -f1 /etc/passwd ...

Der Parameter -d gibt das Trennzeichen (in diesem Fall der Doppelpunkt) zwischen den Spalten an, der Parameter -f gibt die Nummer (in diesem Fall die 1. Spalte) der Spalte an.

wc

Das Programm wc („word count) kann man zum Zählen von Wörtern (-w), Zeilen (-l) und Zeichen(-m) benutzen.

Beispiel:

user@linux:~$ wc -w /etc/passwd ... user@linux:~$ wc -l /etc/passwd ... user@linux:~$ wc -m /etc/passwd ...

Aufgabe 13

Teste die Beispiele!

Aufgabe 14

Gegeben ist eine Textdatei cbp19cd.zip 1) Quelle: https://danielpeters.eu/quellen-fuer-grosse-csv-dateien.html . Lade Sie herunter und entpacke sie!

a) Gib alle Zeilen der Datei auf der Kommandozeile aus, in denen das Wort Alabama vorkommt.

b) Lass dir die Datei mit less anzeigen!

c) Gib die Datei sortiert aus!

d) Gib die zweite Spalte der Datei aus! (Trennzeichen ,)

e) Zähle Wörter, Zeilen und Zeichen der Datei!

Ein- und Ausgabe-Umleitungen

Einige Kommandos können ihre Ausgabe in eine Datei umleiten (>) oder Informationen aus einer Datei einlesen (<). Im folgenden wird die Ausgabe des Kommandos ls in die Datei test.txt umgeleitet. Anschließend wird die Datei test.txt vom Kommando wc eingelesen und die Zeichen werden gezählt.

user@linux:~$ ls > test.txt user@linux:~$ wc -m < test.txt ...

Wenn man an Stelle von einem größer als > zwei größer als » benutzt, wir die Ausgabe an eine vorhandene Datei angehängt:

user@linux:~$ date > datum.txt user@linux:~$ date >> datum.txt user@linux:~$ date >> datum.txt user@linux:~$ cat datum.txt ...

Pipes

Mehrere Befehle können durch das Pipe-Zeichen verknüpfen. Dabei wird die Ausgabe des einen Befehls als Eingabe für den zweiten Befehl verwendet. Im Beispiel wird die Ausgabe des Befehls ls als Eingabe für den Befehl wc verwendet.

user@linux:~$ ls | wc -m ...

Aufgabe 15

a) Leite die ersten 15 Zeilen der Datei cbp19cd.txt in eine Datei uebung.txt um!

b) Hänge an die Datei das aktuelle Datum an!

c) Gib mit cut die 3.Spalte der Datei aus und leite die Ausgabe über eine Pipe an wc weiter, so dass die Worte gezählt werden!

d) Leite die Ausgabe der history an den Befehl grep weiter und gib alle Zeilen aus, in denen der Befehl ls verwendet wurde!