Linux kurz & gut - Daniel J. Barrett - E-Book
SONDERANGEBOT

Linux kurz & gut E-Book

Daniel J. Barrett

0,0
16,90 €
13,90 €
Niedrigster Preis in 30 Tagen: 16,90 €

oder
-100%
Sammeln Sie Punkte in unserem Gutscheinprogramm und kaufen Sie E-Books und Hörbücher mit bis zu 100% Rabatt.

Mehr erfahren.
Beschreibung

Das beliebte »kurz & gut« jetzt als erweiterte Jubiläumsausgabe - Distributionsübergreifende Linux-Referenz: schnell und unkompliziert auf die wichtigsten Linux-Befehle zugreifen - 200 nützliche Befehle verständlich und umfassend erklärt: mit Angaben zu Funktionalität, Syntax, den gebräuchlichsten Optionen und nachvollziehbaren Beispielen - Linux-Wissen aufbauen: durch gezieltes Nachschlagen oder Stöbern in der Referenz Wenn Sie Linux – ob beruflich oder privat – sicher verwenden möchten, ist »Linux – kurz & gut« das perfekte Nachschlagewerk für Sie. Distributionsübergreifend werden mehr als 200 Linux-Befehle erklärt – mit Angaben zu ihrer Funktionalität, Syntax und den gebräuchlichsten Optionen. Die Jubiläumsausgabe zum 20. Geburtstag des beliebten kurz & gut wurde deutlich erweitert und nach Funktionen gruppiert, um den Zugriff zu erleichtern. Ob Sie Anfänger oder erfahrene Benutzerin sind: Dieses Taschenbuch ist die ideale Schnellreferenz für alle gängigen Linux-Befehle. Was Sie lernen: - Grundlegende Konzepte – Befehle, Shells, Benutzer und das Dateisystem - Befehle rund um Dateien – zum Erstellen, Organisieren, Verändern und Verarbeiten von Dateien aller Art - Sysadmin-Grundlagen – Superuser, Prozesse, Benutzerverwaltung und Softwareinstallation - Wartung von Dateisystemen – Festplatten, RAID-Arrays, Logische Volumes, Backups und mehr - Netzwerkbefehle –mit Hosts, Netzwerkverbindungen, E-Mail und Daten aus dem Internet arbeiten - Sachen erledigt bekommen – von Mathematikaufgaben über die Versionskontrolle bis hin zu Grafik und Audio

Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:

EPUB

Veröffentlichungsjahr: 2024

Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Leserstimmen

Linux kurz & gut ist ein Buch, das auf jeden Schreibtisch mit einem Linux-Computer gehört – selbst jetzt, im digitalen Zeitalter. Es ist wie eine Sammlung meiner mit Lesezeichen versehenen Manpages, die ich regelmäßig aufsuche, aber leichter verständlich und besser zu lesen.

– Abhishek Prakash, Mitbegründer von It’s FOSS

Eines der heiß geliebten Features von Linux-Umgebungen ist die Sammlung kleiner Tools, die sich wunderbar kombinieren lassen, um Probleme zu lösen. Dieses Buch führt dieses Wissen in einer gut lesbaren Referenz zusammen. Selbst erfahrene Leserinnen und Leser werden bei ihren Lieblingstools vergessene Facetten und unglaubliche Optionen wiederentdecken.

– Jess Males, DevOps Engineer, TriumphPay

Das ist eine so praktische Referenz! Irgendwie schafft sie es, gleichzeitig umfassend und knapp zu sein.

– Jerod Santo, changelog.org

Copyright und Urheberrechte:

Die durch die dpunkt.verlag GmbH vertriebenen digitalen Inhalte sind urheberrechtlich geschützt. Der Nutzer verpflichtet sich, die Urheberrechte anzuerkennen und einzuhalten. Es werden keine Urheber-, Nutzungs- und sonstigen Schutzrechte an den Inhalten auf den Nutzer übertragen. Der Nutzer ist nur berechtigt, den abgerufenen Inhalt zu eigenen Zwecken zu nutzen. Er ist nicht berechtigt, den Inhalt im Internet, in Intranets, in Extranets oder sonst wie Dritten zur Verwertung zur Verfügung zu stellen. Eine öffentliche Wiedergabe oder sonstige Weiterveröffentlichung und eine gewerbliche Vervielfältigung der Inhalte wird ausdrücklich ausgeschlossen. Der Nutzer darf Urheberrechtsvermerke, Markenzeichen und andere Rechtsvorbehalte im abgerufenen Inhalt nicht entfernen.

4. Auflage

Linux

kurz & gut

Daniel J. Barrett

Daniel J. Barrett

Lektorat: Ariane Hesse

Übersetzung: Kathrin Lichtenberg und Thomas Demmig

Copy-Editing: Sibylle Feldmann, www.richtiger-text.de

Satz: III-Satz, www.drei-satz.de

Herstellung: Stefanie Weidner

Umschlaggestaltung: Karen Montgomery, Michael Oréal, www.oreal.de

Bibliografische Information der Deutschen Nationalbibliothek

Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.

ISBN:

Print978-3-96009-255-1

PDF978-3-96010-868-9

ePub978-3-96010-869-6

4. Auflage 2024

Translation Copyright für die deutsche Übersetzung © 2024 dpunkt.verlag GmbH

Wieblinger Weg 17

69123 Heidelberg

Authorized German translation of the English edition Linux Pocket Guide, 4th Edition

ISBN 9781098157968 © 2024 Daniel J. Barrett. This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same.

Dieses Buch erscheint in Kooperation mit O’Reilly Media, Inc. unter dem Imprint »O’REILLY«. O’REILLY ist ein Markenzeichen und eine eingetragene Marke von O’Reilly Media, Inc. und wird mit Einwilligung des Eigentümers verwendet.

Schreiben Sie uns:

Falls Sie Anregungen, Wünsche und Kommentare haben, lassen Sie es uns wissen: [email protected].

Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder die Verwendung in elektronischen Systemen. Es wird darauf hingewiesen, dass die im Buch verwendeten Soft- und Hardware-Bezeichnungen sowie Markennamen und Produktbezeichnungen der jeweiligen Firmen im Allgemeinen warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen. Alle Angaben und Programme in diesem Buch wurden mit größter Sorgfalt kontrolliert. Weder Autor noch Übersetzer oder Verlag können jedoch für Schäden haftbar gemacht werden, die in Zusammenhang mit der Verwendung dieses Buches stehen.

Inhalt

Das Wichtigste zuerst

1Grundlegende Konzepte

Was ist Linux?

Struktur von Befehlen

User und Administratoren

Das Dateisystem

Ausgewählte bash-Features

Hilfe erhalten

2Dateibefehle

Grundlegende Dateioperationen

Verzeichnisoperationen

Dateien betrachten

Dateierzeugung und -bearbeitung

Dateieigenschaften

Dateisuche

Dateitextmanipulation

Dateikomprimierung und -verpackung

Dateivergleiche

Dateien in andere Formate umwandeln

PDF- und PostScript-Dateien

Drucken

Rechtschreibkontrolle

3Grundlagen für die Systemadministration

Administrator werden

Prozesse betrachten

Prozesse steuern

Jobs zeitlich planen

Anmelden, abmelden und herunterfahren

Benutzer und deren Umgebung

Verwaltung der Benutzerzugänge

Gruppen verwalten

Software installieren

Software aus Quellcode installieren

4Wartung des Dateisystems

Festplatten und Dateisysteme verwenden

Dateisysteme erstellen und anpassen

RAID-Arrays für Redundanz

Logische Volumes für flexible Speicherlösungen

ZFS: Ein modernes und universelles Dateisystem

Backups und externe Speicherung

5Netzwerkbefehle

Informationen über Ihren Rechner

Hostpositionen

Netzwerkverbindungen

E-Mails im Alltag

E-Mail-Server

Im Internet surfen

6Dinge erledigen

Bildschirmausgabe

Kopieren und Einfügen

Mathematik und Berechnungen

Daten und Zeiten

Versionsverwaltung

Container

Bilder anzeigen und verarbeiten

Audio und Video

Mit Shell-Skripten programmieren

Abschließende Worte

Index

Das Wichtigste zuerst

Willkommen bei Linux! Falls Sie Linux-Einsteiger sind, kann dieses Buch Ihnen als Schnelleinstieg sowie als Referenz zu gebräuchlichen und praktischen Befehlen dienen. Haben Sie dagegen bereits Erfahrungen mit Linux, überspringen Sie die Einführung einfach.

Was erwartet Sie in diesem Buch?

Dieses Buch ist eine Kurzeinführung, keine umfassende Referenz. Wir behandeln wichtige, nützliche Aspekte von Linux, damit Sie produktiv arbeiten können. Wir stellen jedoch nicht jeden einzelnen Befehl und auch nicht die allerletzte Option vor (es tut uns leid, falls wir Ihren Liebling weggelassen haben) und verlieren uns auch nicht in den Details der Interna des Betriebssystems. Kurz und prägnant – das ist unser Motto.

Wir konzentrieren uns auf Befehle, diese nützlichen kleinen Wörter, die Sie auf einer Kommandozeile eingeben, um einem Linux-System mitzuteilen, was es tun soll. Hier ist z.B. ein Befehl, der die Textzeilen in einer Datei namens meinedatei zählt:

wc -l meinedatei

Wir behandeln die für den durchschnittlichen User wichtigsten Linux-Befehle, wie etwa ls (zum Auflisten von Dateien), grep (zum Suchen von Text), mplayer (zum Abspielen von Audio- und Videodateien) und df (zum Ermitteln des freien Plattenplatzes). Wir werden uns nur am Rande mit grafischen Umgebungen befassen, wie GNOME und KDE, die jeweils für sich ein »kurz & gut« füllen könnten.

Für einen einfacheren Lernweg haben wir das Material nach Funktionen organisiert. Um Sie z.B. beim Betrachten des Inhalts einer Datei zu unterstützen, führen wir viele der dazu vorhandenen Befehle zusammen ein: cat für kurze Textdateien, less für längere, od für Binärdateien und so weiter. Dann erläutern wir nacheinander die einzelnen Befehle und stellen kurz ihre gebräuchlichsten Einsatzfälle und Optionen vor.

Wir gehen davon aus, dass Sie Zugriff auf ein Linux-System haben und sich dort anmelden können. Falls nicht, ist es auf den meisten Computern einfach, Linux auszuprobieren. Laden Sie eine »Live«-Linux-Distribution herunter, installieren Sie sie auf einem USB-Stick und booten Sie von dort. Beispiele für solche Distributionen sind Ubuntu (https://ubuntu.com/download), Fedora (https://fedoraproject.org/de/workstation/) und Knoppix (https://www.knopper.net/knoppix/index.html), die Sie auf den meisten Computern booten können, um dann mit Linux zu spielen.

Was ist neu in der vierten Auflage?

Neue Befehle

Ich habe in dieser Auflage 50 neue Befehle hinzugefügt, wie zum Beispiel git und svn für die Versionsverwaltung, split und column zur Textbearbeitung, pandoc und ffmpeg für die Dateiumwandlung, snap und flatpak zur Paketverwaltung, mdadm, lvcreate und zfs für ein ausgefeiltes Storage-Management, gpg zur Verschlüsselung und viele weitere.

Klarere Struktur

Das Buch wurde nun neu gegliedert in Kapitel zu Konzepten, Dateien, zur grundlegenden Systemverwaltung, zu Netzwerken und zu anderen Themen.

Tschüss, alte Befehle

Manche Befehle aus früheren Auflagen dieses Buchs sind heutzutage weitgehend obsolet, wie zum Beispiel write und finger, oder veraltet, wie beispielsweise ftp. Ich habe sie durch relevantere Befehle für moderne Linux-Systeme ersetzt.

Wie Sie dieses Buch lesen

Jeder Befehl, den ich in diesem Buch vorstelle, beginnt mit einer Standardüberschrift. Abbildung 0-1 zeigt die Überschrift für den ls-Befehl, der die Namen und Attribute von Dateien auflistet. Diese Zeile demonstriert die allgemeine Benutzung in einem einfachen Format:

ls [optionen] [dateien]

Das bedeutet, Sie würden »ls« eintippen, wahlweise gefolgt von Optionen und dann von Dateinamen. Die eckigen Klammern [ und ] tippen Sie nicht ein, diese deuten nur an, dass ihr Inhalt optional ist. Kursiv gesetzte Wörter bedeuten, dass Sie Ihre eigenen Werte einsetzen müssen, z.B. Namen von realen Dateien. Wenn Sie einen senkrechten Strich zwischen Optionen oder Argumenten sehen, die möglicherweise in Klammern zusammengefasst sind, wie:

(datei | verzeichnis)

heißt das, dass Sie die Wahl haben: Sie können als Argument entweder einen Dateinamen oder einen Verzeichnisnamen angeben.

Isstdinstdout- datei-- opt--help--version

Is [optionen] [dateien]

Abbildung 0-1: Standardbefehlsüberschrift

Die Standardüberschrift in Abbildung 0-1 enthält darüber hinaus sechs Eigenschaften des Befehls, die schwarz (unterstützt) oder grau (nicht unterstützt) gedruckt sind:

stdin

Der Befehl liest normalerweise von der Standardeingabe, d.h. Ihrer Tastatur. Siehe »Eingabe/Ausgabe und Umleitung« auf Seite 44.

stdout

Der Befehl schreibt normalerweise auf die Standardausgabe, d.h. Ihren Bildschirm. Siehe »Eingabe/Ausgabe und Umleitung« auf Seite 44.

-datei

Wenn als Eingabedateiname ein Bindestrichargument (-) angegeben wird, liest der Befehl von der Standardeingabe statt von der Festplatte. In gleicher Weise schreibt der Befehl auf die Standardausgabe, wenn der Bindestrich als Ausgabedateiname angegeben wird. So liest z.B. der folgende wc-Befehl die Dateien datei1 und datei2, dann die Standardeingabe und dann datei3:

wc datei1 datei2 - datei3

--opt

Wenn Sie die Kommandozeilenoption -- angeben, bedeutet das »Ende der Optionen«: Alles, was anschließend auf dieser Kommandozeile folgt, wird nicht als Option behandelt. Das ist manchmal nötig, wenn man mit einer Datei arbeitet, deren Name mit einem Bindestrich beginnt und die ansonsten fälschlicherweise als Option behandelt werden würde. Falls Sie z.B. eine Datei namens -foo haben, würde der Befehl wc -foo fehlschlagen, weil -foo als (ungültige) Option behandelt werden würde. wc -- -foo funktioniert, weil -foo als Dateiname interpretiert wird. Sollte ein Befehl -- nicht unterstützen, können Sie dem Dateinamen den aktuellen Verzeichnispfad ./ voranstellen, damit der Bindestrich nicht mehr das erste Zeichen ist:

wc ./-foo

--help

Die Option --help lässt den Befehl eine Hilfe ausgeben, die die korrekte Benutzung erläutert; anschließend wird der Befehl beendet.

--version

Die Option --version lässt den Befehl seine Versionsinformationen ausgeben; anschließend wird der Befehl beendet.

Befehle, Prompts und Ausgabe

Die Linux-Kommandozeile, auch Shell genannt, gibt ein spezifisches Symbol aus – den Prompt –, wenn sie auf einen Befehl wartet. In diesem Buch ist der Prompt ein Pfeil nach rechts:

Prompts kann es in allen Formen und Farben geben, und zwar abhängig davon, wie Ihre Shell konfiguriert ist. Ihr Prompt kann ein Dollarzeichen sein ($), eine Kombination aus Computername, Benutzer und eventuell anderen Symbolen (myhost:~smith$), er kann aber auch ganz anders aussehen. Allen gemeinsam ist, dass die Shell nun auf Ihre Benutzereingabe wartet.

Wenn ich in diesem Buch eine Kommandozeile zeige, sollen manche Teile vom User eingegeben werden, andere aber nicht (wie der Prompt oder die Ausgabe des Befehls). Ich nutze dabei Fettdruck für die Elemente, die einzutippen sind. Manchmal füge ich noch Kommentare in Kursivschrift hinzu, um zu erläutern, was da passiert:

wc -l meinedateider Befehl, der am Prompt einzutippen ist

18 meinedateidie erzeugte Ausgabe

Ihr Freund, der echo-Befehl

In vielen unserer Beispiele schreiben wir Informationen mit dem echo-Befehl auf den Bildschirm. Wir beschreiben diesen Befehl »offiziell« in »Bildschirmausgabe« auf Seite 273. echo ist einer der einfachsten Befehle: Er gibt lediglich seine Argumente auf der Standardausgabe aus, sobald diese Argumente von der Shell verarbeitet wurden.

echo Mein Hund hat einen Floh

Mein Hund hat einen Floh

echo Mein Name ist $USERdie Shell-Variable USER

Mein Name ist smith

Lange Kommandozeilen

Manchmal wird ein Befehl so lang sein, dass er im Buch nicht mehr in eine Zeile passt. In diesen Fällen werden wir ihn auf mehrere Zeilen aufteilen, die mit einem Backslash enden. Ein abschließender Backslash bedeutet »wird auf der nächsten Zeile fortgesetzt«:

echo Dies ist ein langer Befehl, der nicht auf \ eine Zeile passt.

Dies ist ein langer Befehl, der nicht auf eine Zeile passt.

Geben Sie einen meiner mehrzeiligen Befehle in Ihre Shell ein, können Sie den Backslash natürlich dort einfügen, wo Sie es möchten, oder ihn auch komplett weglassen und den Befehl vollständig in eine Zeile schreiben.

Tastenkürzel

Ich nutze bestimmte Symbole, um Tastenkürzel anzudeuten. Das ^-Symbol (der Zirkumflex) bedeutet »drücke und halte die Control- oder Steuerung-Taste« (Ctrl bzw. Strg). So bedeutet z.B. ^D (gesprochen »Control D«): »Drücke und halte die Control-Taste und tippe D.« Wir schreiben außerdem Esc für »drücke die Escape-Taste«. Tasten wie Enter und die Leertaste sollten selbsterklärend sein.

Die Übungsdateien herunterladen

Ich habe einen Satz Dateien erstellt, die Ihnen dabei helfen sollen, mit Linux zu üben. Wenn Sie sie auf einen beliebigen Linux-Rechner herunterladen und dort installieren, können Sie die meisten der Beispielbefehle aus diesem Buch direkt ausprobieren. Um die Dateien erstmalig herunterzuladen, führen Sie die folgenden Befehle aus.1 (Beachten Sie, dass -O für ein großes »O« steht, nicht für eine Null.)

cd

curl -O https://linuxpocketguide.com/LPG4.tar.gz

tar -xf LPG4.tar.gz

Diese Befehle erstellen ein Verzeichnis namens linuxpocketguide in Ihrem Home-Verzeichnis. Wechseln Sie dorthin:

cd ~/linuxpocketguide

und führen Sie die Befehle beim Lesen dieses Buchs aus. Die Ausgabe sollte der aus dem Buch entsprechen – abgesehen von lokalen Abweichungen wie Datumsformaten oder Usernamen.

Um die Übungsdateien neu herunterzuladen und zu installieren (weil Sie sie zum Beispiel verändert haben), führen Sie einfach das Skript reset-lpg aus:

cd ~/linuxpocketguide

bash reset-lpg

Haben Sie die Dateien an einem anderen Ort als in Ihrem Home-Verzeichnis abgelegt, übergeben Sie diesen Verzeichnisnamen einfach an reset-lpg. Dieser Befehl erstellt oder aktualisiert die Beispiele im Verzeichnis /tmp/beispiele/linuxpocketguide:

bash reset-lpg /tmp/beispiele

Konventionen, die in diesem Buch genutzt wurden

Die folgenden typografischen Konventionen kommen in diesem Buch zum Einsatz:

Kursiv

Steht für neue Begriffe, URLs, E-Mail-Adressen, Dateinamen und Dateierweiterungen.

Schreibmaschinenschrift

Steht für Programmlistings, aber auch innerhalb von Absätzen, um sich auf Programmelemente wie Variablen oder Funktionsnamen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter zu beziehen.

Fette Schreibmaschinenschrift

Steht für Befehle oder anderen Text, der genau so einzugeben ist.

Kursive Schreibmaschinenschrift

Steht für Text, der durch von Ihnen bereitgestellte Werte oder durch sich aus dem Kontext ergebende Werte ersetzt werden soll.

Dieses Element enthält einen Tipp oder Vorschlag.

Dieses Element enthält einen allgemeinen Hinweis.

Dieses Element enthält eine Warnung.

Danksagung

Ich bin den vielen Leserinnen und Lesern dankbar, die in den letzten 20 (!) Jahren die ersten drei Auflagen dieses Buchs gekauft und damit die vierte Auflage möglich gemacht haben. Mein herzlichster Dank geht auch an meine Lektorin Virginia Wilson, den Acquisition Editor John Devians, das Produktionsteam bei O’Reilly, meine fantastischen technischen Gutachter (Abhishek Prakash, Dan Ritter, Doron Beit-Halahmi, Ethan Schwartz und Jess Males), Maggie Johnson von Google sowie Kerry und Lesley Minnear von Alucard Music. Und all meine Liebe geht an meine wunderbare Familie – Lisa, Sophia, Kay und Luna.

KAPITEL 1

Grundlegende Konzepte

Was ist Linux?

Linux ist ein freies Open-Source-Betriebssystem (Operating System, OS), das eine Alternative zu Microsoft Windows und Apple macOS darstellt. Es agiert hinter den Kulissen jedes Android-Smartphones oder Chromebooks und läuft auf Millionen von Netzwerkgeräten wie Routern, Firewalls und sogar auf Melksystemrobotern für Kühe (ernsthaft). Zudem läuft es wunderbar auf Desktop- und Laptop-Computern.

Linux besteht aus vier großen Bereichen, die in Abbildung 0-1 zu sehen sind:

Der Kernel

Low-Level-Software. Er kontrolliert die Hardware und die Grundfunktionen wie das Prozess-Scheduling und die Netzwerkaktivitäten. Nur weniger User interagieren direkt mit dem Kernel.

Mitgelieferte Programme

Tausende Programme zur Dateiverwaltung, Textbearbeitung, Softwareentwicklung, zum Browsen im Web, für Audio, Video, Verschlüsselung, Mathematik … alles, was Sie sich vorstellen können. Diese Programme kommunizieren mit dem Kernel. Programme, die auf der Kommandozeile laufen, werden Befehle genannt.

Die Shell

Ein Linux-Programm für das Ausführen von Befehlen und das Anzeigen der Ergebnisse. Linux bietet eine Reihe von Shells mit unterschiedlichen Features an. Dieses Buch konzentriert sich auf eine Shell namens bash, die oft als Standard bei User-Accounts zum Einsatz kommt. Andere Shells sind beispielsweise dash, fish, ksh (Korn-Shell), tcsh (TC-Shell oder T-Shell), zsh (Z-Shell) und (seltener eingesetzt) busybox. Alle Shells besitzen eine ähnliche Funktionalität, aber die Vorgehensweise unterscheidet sich leicht.

Grafische Benutzeroberfläche (optional)

Ein UI mit Fenstern, Menüs, Symbolen, Mausunterstützung und anderen vertrauten GUI-Elementen. Beliebte Umgebungen sind GNOME oder KDE Plasma. Die meisten Anwendungen, die für GNOME gebaut wurden, können auch in KDE laufen und umgekehrt.2

Abbildung 1-1: Die vier zentralen konzeptionellen Elemente von Linux. Low-Level-Kernelfunktionen werden von Programmen aufgerufen, die in einer Shell gestartet werden, die auf einer grafischen Benutzeroberfläche aufgerufen werden kann.

Dieses Buch konzentriert sich auf die Kommandozeilenanteile von Linux, vor allem auf die mitgelieferten Programme und die Shell. Windows und macOS besitzen ebenfalls Kommandozeilenschnittstellen (cmd und powershell unter Windows, Terminal auf dem Mac), aber die meisten User bleiben dort bei der GUI und bekommen eventuell nie eine Kommandozeile zu sehen. Unter Linux ist die Shell sehr viel wichtiger. Nutzen Sie Linux ohne die Shell, fehlt Ihnen etwas.

Linux lässt sich sehr weitgehend konfigurieren, und es wird in Hunderten Varianten angeboten, die unterschiedliche Anforderungen und Geschmäcker bedienen. Jede Variante wird als »Distro« bezeichnet (kurz für Distribution). Alle Distros haben gemeinsame Komponenten, sehen aber eventuell unterschiedlich aus und bringen verschiedene Programme und Dateien mit. Beliebte Distros sind beispielsweise Mint, Ubuntu, Manjaro, Arch, Gentoo, Red Hat oder OpenSUSE. Der größte Teil dieses Buchs sollte für jede Distro nutzbar sein.

Eine Shell aufrufen

Wo kommen Shells her? Manchmal startet Linux automatisch eine für Sie. Das ist oft der Fall, wenn Sie sich über das Netzwerk per ssh oder mit einem ähnlichen Tool verbinden. Dann sehen Sie als Erstes einen Shell-Prompt, der auf Ihren Befehl wartet.

In anderen Situationen müssen Sie eine Shell manuell starten. Das ist üblich, wenn Sie eine grafische Benutzeroberfläche voll mit Symbolen und Menüs nutzen, auf der weit und breit keine Shell zu sehen ist. Dann brauchen Sie eine GUI-Anwendung namens Terminal oder Terminalprogramm, die Shells in einem Fenster ausführt. Der Kasten »Shell versus Terminal« auf Seite 22 erklärt die Unterschiede zwischen Shells und Terminals.

Jede Distro mit einer grafischen Benutzeroberfläche besitzt mindestens ein Terminalprogramm, aber eventuell müssen Sie gezielt danach suchen. Halten Sie Ausschau nach einer Anwendung, einem Symbol oder einem Menüeintrag namens Terminal, Konsole, xterm, gnome-terminal, uxterm oder etwas Ähnlichem, und führen Sie dieses aus, um ein Terminal zu öffnen. Probieren Sie auch, Strg-Alt-t zu drücken (halten Sie die Strg- und die Alt-Taste gedrückt und drücken Sie dann T), womit in manchen Umgebungen ein Terminal geöffnet wird.

Shell versus Terminal

Eine Shell ist eine Kommandozeilenschnittstelle zum Starten von Linux-Befehlen durch die Eingabe von Text. Sie gibt einen Prompt aus und wartet auf Ihren Befehl:

Ein Terminal ist ein Programm, das ein Fenster öffnet und dort eine laufende Shell anzeigt (siehe Abbildung 1-2). Es ist so etwas wie eine grafische Verpackung für eine Shell. Ein Terminal bietet Menüs, Scrollbars, Copy-and-paste sowie andere GUI-Features, die die Shell unterstützen.

Abbildung 1-2: Ein Terminalprogramm öffnet ein Fenster, in dem eine Shell läuft.

Warmlaufen für die Befehle

Um Ihnen ein Gespür für Linux zu geben, finden Sie hier zehn einfache Befehle, die Sie direkt in einer Shell ausprobieren können. Sie müssen sie exakt wie hier angegeben eintippen – einschließlich korrekter Groß- und Kleinschreibung, Leerzeichen und aller Symbole nach dem Prompt. Am Ende jedes Befehls drücken Sie die Enter-Taste.3

Einen Kalender für den November 2023 anzeigen:

cal nov 2023

November 2023

Su Mo Tu We Th Fr Sa

1 2 3 4

5 6 7 8 9 10 11

12 13 14 15 16 17 18

19 20 21 22 23 24 25

26 27 28 29 30

Den Inhalt des Verzeichnisses /bin ausgeben, das viele Befehle enthält:

ls /bin

bash less rm

bunzip2 lessecho rmdir

busybox lessfile rnano

Die Anzahl der sichtbaren Elemente in Ihrem Home-Verzeichnis ausgeben (das hier durch die spezielle Variable HOME vertreten wird, auf die ich später noch eingehe):

ls $HOME | wc -l

8 Sie können einen anderen Wert haben.

Herausfinden, wie viel Platz auf einer Partition Ihrer Festplatte belegt ist:

df -h /

Filesystem Size Used Avail Use% Mounted on

/dev/sdb1 78G 30G 48G 61% /

Anzeigen, welche Prozesse auf Ihrem Computer laufen (mit q beenden Sie den Befehl wieder):

top -d1

Die Datei /etc/hosts ausgeben, in der die Namen und Adressen von Computern zu finden sind, aber auch Ihr Standarddrucker, sofern Sie einen eingerichtet haben:

lpr /etc/hosts

Wie lange sind Sie schon angemeldet?

last -1 $USER

smith pts/7 :0 Tue Nov 10 20:12 still logged in

Eine Datei sample.pdf von der Website dieses Buchs in Ihr aktuell genutztes Verzeichnis herunterladen, ohne einen Webbrowser dafür bemühen zu müssen:

curl -O https://linuxpocketguide.com/sample.pdf

Herausfinden, wem der Domainname oreilly.com gehört (mit der Leertaste blättern Sie seitenweise weiter, mit »q« beenden Sie den Befehl):

whois oreilly.com | less

Domain Name: OREILLY.COM

Registrar: GODADDY.COM, LLC

Schließlich noch den Inhalt des Fensters löschen:

clear

Herzlichen Glückwunsch: Sie sind nun ein Linux-Anwender!

Struktur von Befehlen

Ein Linux-Befehl besteht typischerweise aus einem Programmnamen, gefolgt von Optionen und Argumenten:

wc -l meinedatei

Der Programmname (wc, für word count) bezieht sich auf ein Programm, das sich irgendwo auf der Festplatte befindet und das von der Shell gesucht und ausgeführt wird. Optionen, die normalerweise mit einem Bindestrich beginnen, beeinflussen das Verhalten des Programms. Im vorangegangenen Befehl sagt die Option -l dem Programm wc, dass es Zeilen und nicht Wörter zählen soll. Das Argument meinedatei gibt die Datei an, die wc lesen und verarbeiten soll.

Befehle können mehrere Optionen und Argumente haben. Es ist möglich, Optionen einzeln anzugeben oder kombiniert hinter einem einzelnen Bindestrich:

wc -l -w meinedatei zwei einzelne Optionen

wc -lw meinedatei kombiniert, identisch mit -l -w

Allerdings sind manche Programme eigen und erkennen kombinierte Optionen nicht. Mehrere Argumente sind auch okay:

wc -l meinedatei1 meinedatei2 Zählt Zeilen in zwei Dateien.

Optionen sind nicht standardisiert. Sie können aus einem Bindestrich und einem Buchstaben (zum Beispiel -l) oder zwei Bindestrichen und einem Wort (--lines) bestehen oder auch ein ganz anderes Format besitzen. Der gleiche Optionsbuchstabe kann in unterschiedlichen Programmen unterschiedliche Bedeutungen haben: In wc bedeutet -l »zähle die Textzeilen (lines)«, in ls steht -l für »erzeuge längere Ausgaben (long)«. Zwei Programme können auch unterschiedliche Optionen für dieselbe Sache verwenden, wie etwa das Ausführen ohne Ausgaben: -q und -s für »leise ausführen« (run quietly bzw. run silently). Auf manche Optionen folgt ein Wert wie zum Beispiel -s 10, wobei das Leerzeichen dazwischen nicht immer erforderlich ist (-s10).

Bei Argumenten handelt es sich meist um Dateinamen zur Ein- oder Ausgabe, es kann sich aber auch um andere Dinge handeln, etwa um Verzeichnisnamen, Usernamen, Hostnamen, IP-Adressen, reguläre Ausdrücke oder beliebige Strings.

Ein Befehl, bei dem es sich nur um ein einfaches Programm ohne Optionen und Argumente handelt, ist ein einfacher Befehl. Hier folgt ein einfacher Befehl, der ausgibt, welche User an einem Linux-Server angemeldet sind:4

who

silver :0 Sep 23 20:44

byrnes pts/0 Sep 15 13:51

barrett pts/1 Sep 22 21:15

silver pts/2 Sep 22 21:18

Ein Befehl kann auch mehrere Programme auf einmal aufrufen und sie sogar so kombinieren, dass sie miteinander interagieren. Hier ein Befehl, der die Ausgabe von who mit der Eingabe von wc verbindet, die Textzeilen zählt. Das Ergebnis ist die Anzahl der Zeilen der Ausgabe von who:

who | wc -l

4

Der vertikale Balken, der als Pipe bezeichnet wird, stellt die Verbindung zwischen who und wc her. Linux-Expertinnen und -Experten nutzen diese Art kombinierter Befehle, auch als Pipelines bezeichnet, die ganze Zeit.

Befehle können auch Konstrukte von Programmiersprachen enthalten, wie zum Beispiel Variablen, Bedingungen oder Schleifen. Darauf gehe ich in »Mit Shell-Skripten programmieren« auf Seite 308 ein. So kann ein Befehl beispielsweise sagen: »Führe dieses Programm aus, schreibe die Ausgabe in eine Datei meiner Wahl, und wenn ein Fehler auftritt, schick mir eine E-Mail mit den Ergebnissen.«

User und Administratoren

Linux ist ein Multi-User-Betriebssystem: Mehrere Menschen können zur gleichen Zeit einen einzelnen Linux-Computer benutzen. Auf einem Computer wird jeder Benutzer durch seinen eindeutigen Benutzernamen identifiziert, wie etwa »smith« oder »lustigertyp«, und er besitzt einen (halbwegs) privaten Teil des Systems für seine Arbeit (siehe »Home-Verzeichnisse« auf Seite 30), sodass er sich nicht mit anderen Benutzerinnen und Benutzern ins Gehege kommt.

Darüber hinaus gibt es einen besonderen Benutzer namens root – den Superuser oder Administrator –, der das Recht besitzt, alles auf dem System zu machen. Er kann jegliche Datei erstellen, verändern oder löschen und jedes Programm ausführen. Normale Benutzer haben eingeschränkte Rechte: Sie dürfen zwar die meisten Programme ausführen, im Allgemeinen aber können sie nur die Dateien modifizieren, die ihnen gehören.

Manche Befehle in diesem Buch erfordern Administrationsberechtigungen. Diesen Befehlen stelle ich sudo voran:

sudohier kommen Administrationsbefehle

Mit sudo erhalten Sie die Macht, Ihr Linux-System zu zerstören.

In »Administrator werden« auf Seite 161 beschreibe ich sudo ausführlicher, jetzt reicht es zu wissen, dass sudo Ihnen Administrationsberechtigungen gibt und Sie manchmal nach Ihrem Passwort fragt. Um zum Beispiel die Zeilen in der geschützten Datei /etc/shadow zu zählen, können Sie diesen Befehl mit und ohne sudo ausführen:

wc -l /etc/shadowDas schlägt fehl.

wc: /etc/shadow: Permission denied

sudo wc -l /etc/shadowMit sudo ausführen.

[sudo] password: xxxxxxxx

51 /etc/shadow Es hat funktioniert!

Das Dateisystem

Um ein Linux-System benutzen zu können, müssen Sie sich mit Linux-Dateien und -Verzeichnissen (d.h. Ordnern) – dem Dateisystem – vertraut machen. In einer grafischen Benutzeroberfläche sind die Dateien und Verzeichnisse auf dem Bildschirm eindeutig zu erkennen. Auf einem Kommandozeilensystem wie der Linux-Shell hingegen sind die gleichen Dateien und Verzeichnisse zwar vorhanden, aber weniger sichtbar, sodass Sie sich häufig merken müssen, in welchem Verzeichnis Sie sich gerade befinden und in welcher Beziehung dieses zu anderen Verzeichnissen steht. Sie verwenden Shell-Befehle wie cd (Verzeichnis wechseln, change directory) und pwd (aktuelles Verzeichnis ausgeben, print working directory), um sich zwischen Verzeichnissen zu »bewegen« und den Überblick darüber zu behalten, wo Sie gerade sind.

Kommen wir zu einigen Begriffen. Linux-Dateien sind in Verzeichnissen organisiert. Die Verzeichnisse bilden eine Hierarchie (auch Baum genannt), wie in Abbildung 1-3 gezeigt: Ein Verzeichnis kann andere Verzeichnisse enthalten, die sogenannten Unterverzeichnisse, die wiederum weitere Dateien und Unterverzeichnisse enthalten können usw. – bis in die Unendlichkeit. Das oberste Verzeichnis wird als Root-Verzeichnis bezeichnet und durch einen Schrägstrich oder auch Slash (/) gekennzeichnet.5

Abbildung 1-3: Ein Teil eines Linux-Dateisystems. Der Root-Ordner befindet sich ganz oben. Der absolute Pfad zum Ordner »dan« lautet »/home/dan«.

Linux bezieht sich auf die Dateien und Verzeichnisse mittels einer »Namen-und-Schrägstriche-Syntax«, die Pfad genannt wird. Zum Beispiel bezeichnet der Pfad

/eins/zwei/drei/vier

das Root-Verzeichnis /, das ein Verzeichnis namens eins enthält, in dem sich das Verzeichnis zwei befindet, das wiederum ein Verzeichnis drei enthält, in dem schließlich die letzte Datei oder das letzte Verzeichnis zu finden ist, nämlich vier. Beginnt ein Pfad mit dem Root-Verzeichnis, bezeichnet man ihn als absoluten Pfad.

Pfade müssen nicht absolut sein – sie können relativ zu einem anderen Verzeichnis angegeben werden. In Abbildung 1-3 gibt es zwei verschiedene Verzeichnisse namens bin, deren absolute Pfade /bin und /usr/bin lauten. Beziehen wir uns einfach auf das »bin-Verzeichnis«, ist nicht klar, welches wir meinen. Wir brauchen mehr Kontext. Immer wenn Sie sich auf einen Pfad beziehen, der nicht mit einem Schrägstrich beginnt – zum Beispiel bin –, wird dieser als relativer Pfad bezeichnet.

Damit ein relativer Pfad Sinn ergibt, müssen Sie wissen, wo Sie sich im Linux-Dateisystem befinden. Diese Position wird als Ihr aktuelles Arbeitsverzeichnis (oder auch nur Arbeitsverzeichnis oder aktuelles Verzeichnis) bezeichnet.

Jede Shell besitzt ein aktuelles Arbeitsverzeichnis, und wenn Sie Befehle in dieser Shell ausführen, arbeiten diese relativ zu dem Verzeichnis. Befindet sich Ihre Shell zum Beispiel »im« Verzeichnis /usr und führen Sie einen Befehl aus, der sich auf einen relativen Pfad bin bezieht, geht es in Wirklichkeit um den Pfad /usr/bin. Ganz allgemein: Ist Ihr aktuelles Verzeichnis /eins/zwei/drei, würde ein relativer Pfad a/b/c dem absoluten Pfad /eins/zwei/drei/a/b/c entsprechen.

Zwei besondere relative Pfade werden mit . (einem einzelnen Punkt) und .. (zwei Punkten hintereinander oder »Punkt Punkt«) gekennzeichnet. Der erste Ausdruck steht für Ihr aktuelles Verzeichnis, der zweite Ausdruck bezieht sich auf das Elternverzeichnis, das sich eine Ebene darüber befindet. Ist Ihr aktuelles Verzeichnis also /eins/zwei/drei, bezieht sich . auf dieses Verzeichnis und .. auf /eins/zwei.

Sie »bewegen« Ihre Shell von einem zum anderen Verzeichnis mit dem cd-Befehl, der das aktuelle Arbeitsverzeichnis Ihrer Shell ändert:

cd /usr/local/binIn das Verzeichnis /usr/local/bin wechseln.

Dieser cd-Befehl hat einen absoluten Pfad genutzt. Sie können sich mit cd auch relativ bewegen:

cd dWechsle ins Unterverzeichnis d.

cd ../meinVerzGehe nach oben zu meinem Elternverzeichnis und von dort in das Verzeichnis meinVerz.

Datei- und Verzeichnisnamen können die meisten Zeichen enthalten, die man auch erwarten würde: Groß- und Kleinbuchstaben,6Zahlen, Punkte, Bindestriche, Unterstriche und die meisten Symbole (aber nicht der Schrägstrich /, weil dieser für das Trennen der Verzeichnisse reserviert ist). Vermeiden Sie im praktischen Einsatz jedoch auch Leerzeichen, Sternchen, Dollarzeichen, Klammern und andere Zeichen, die für die Shell eine besondere Bedeutung haben. Ansonsten müssen Sie diese Zeichen schützen (siehe »Quoting« auf Seite 48).

Home-Verzeichnisse

Die persönlichen Dateien der Benutzer sind oft im Verzeichnis /home (für normale Benutzer) oder /root (für den Administrator) zu finden. Ihr Home-Verzeichnis ist typischerweise /home/<Ihr-Benutzername>, also: /home/smith, /home/jones usw. Es gibt verschiedene Möglichkeiten, das Home-Verzeichnis zu finden oder anzusprechen:

cd

Ohne Argumente benutzt, bringt der cd-Befehl Sie zu Ihrem Home-Verzeichnis zurück (d.h., er stellt das Arbeitsverzeichnis der Shell entsprechend ein).

HOME-Variable

Die Umgebungsvariable HOME (siehe »Shell-Variablen« auf Seite 41) enthält den Namen Ihres Home-Verzeichnisses:

echo $HOMEGibt Verzeichnisnamen aus.

/home/smith

cd $HOME/linuxpocketguideRuft Unterverzeichnis auf.

~

Wird eine Tilde anstelle eines Verzeichnisses verwendet, wird sie von der Shell durch den Namen Ihres Home-Verzeichnisses ersetzt.

echo ~Gibt Verzeichnisnamen aus.

/home/smith

cd ~/linuxpocketguideRuft Unterverzeichnis auf.

Folgt auf die Tilde ein Benutzername (wie bei ~fred), erweitert die Shell diesen String zum Home-Verzeichnis des Benutzers:

cd ~fredFreds Home-Verzeichnis aufrufen (sofern vorhanden).

pwdBefehl zum Ausgeben des Arbeitsverzeichnisses.

/home/fred

Systemverzeichnisse

Ein Linux-System besitzt Zehntausende von Systemverzeichnissen. Diese enthalten Betriebssystemdateien, Anwendungen, Dokumentationen und praktisch alles mit Ausnahme der persönlichen Benutzerdateien (die typischerweise in /home residieren).

Wenn Sie kein Systemadministrator sind, werden Sie die meisten Systemverzeichnisse nie zu Gesicht bekommen, aber mit ein bisschen Hintergrundwissen können Sie zumindest ihren Zweck verstehen oder erraten. Ihre Namen enthalten oft drei Teile, die in Abbildung 1-4 zu sehen sind.

Abbildung 1-4: Verzeichnisbereich, Kategorie und Anwendung

Verzeichnispfad Teil 1: Gültigkeitsbereich

Der Gültigkeitsbereich eines Verzeichnispfads beschreibt den Zweck einer kompletten Verzeichnishierarchie. Gebräuchlich sind z.B.:

/

Systemdateien, die mit Linux geliefert wurden (Wurzelverzeichnis, gesprochen »root«).

/usr

Mehr Systemdateien, die mit Linux geliefert wurden (gesprochen »user«).

/usr/local

Systemdateien, die nicht mit Ihrer Distro geliefert werden; sie sind möglicherweise spezifisch für Ihr lokales Linux-Netzwerk oder für Ihren jeweiligen Computer.

In der Praxis gibt es keine klare Unterscheidung zwischen / und /usr, allerdings wird in gewisser Weise davon ausgegangen, dass / »niedriger« und dichter am Betriebssystem angesetzt ist.

Verzeichnispfad Teil 2: Kategorie

Die Kategorie eines Verzeichnispfads in Abbildung 1-4 verrät Ihnen, welche Arten von Dateien in einem Verzeichnis zu finden sind. Ist die Kategorie z.B. lib, können Sie ziemlich sicher sein, dass das Verzeichnis Bibliotheksdateien für das Programmieren enthält. Ist die Kategorie bin, handelt es sich beim Inhalt meist um Binärdateien – also ausführbare Programme.

Setzen Sie vor eine Kategorie wie bin einen Gültigkeitsbereich, entstehen Pfade wie /bin, /usr/bin oder /usr/local/bin. Die für eine Distro wichtigsten Systemprogramme wie ls oder cat finden sich üblicherweise in /bin, andere Systemprogramme in /usr/bin.7/usr/local/bin enthält lokal installierte Programme, die nicht aus Ihrer Distro stammen. Diese Regeln sind nicht absolut, sondern stellen typische Fälle dar. Gebräuchliche Kategorien sind unter anderem:

Kategorien für Programme

bin

Programme (normalerweise Binärdateien).

sbin

Programme (normalerweise Binärdateien), die für die Ausführung durch den Administrator gedacht sind.

lib

Bibliotheken mit Code, der von den Programmen benutzt wird.

Kategorien für Dokumentationen

doc

Dokumentationen.

info

Dokumentationsdateien für das in Emacs eingebaute Hilfesystem.

man

Dokumentationsdateien (Manpages), die vom man-Programm angezeigt werden. Die Dateien sind oft komprimiert und mit Schriftsatzbefehlen durchsetzt, die man interpretiert.

share

Programmspezifische Dateien, wie etwa Beispiele und Installationsanweisungen.

Kategorien für die Konfiguration

etc

Konfigurationsdateien (und diverse andere Dinge) für das System.

init.d

Konfigurationsdateien zum Booten von Linux.

rc.d

Konfigurationsdateien zum Booten von Linux, auch rc1.d, rc2.d …

Kategorien für die Programmierung

include

Header-Dateien für die Programmierung.

src

Quellcode für Programme.

Kategorien für Webdateien

cgi-bin

Skripte/Programme, die auf Webseiten laufen.

html

Webseiten.

public_html

Webseiten, typischerweise in den Home-Verzeichnissen der Benutzer.

www

Webseiten.

Kategorien für die Anzeige

fonts

Schriften.

X11

X Window-Systemdateien.

Kategorien für Hardware

dev

Gerätedateien als Schnittstellen zu Festplatten und anderer Hardware.

media

Mountpoints: Verzeichnisse, die Zugang zu Festplatten bieten.

mnt

Mountpoints: Verzeichnisse, die Zugang zu Festplatten bieten.

Kategorien für Laufzeitdateien

var

Dateien zum Status des Computers, sie werden häufig aktualisiert.

lock

Lock-Dateien, die von Programmen erzeugt werden, um zu sagen: »Ich laufe.« Die Existenz einer Lock-Datei könnte ein anderes Programm oder eine andere Instanz desselben Programms daran hindern, eine Aktion auszuführen.

log

Logdateien, die wichtige Systemereignisse mitschreiben sowie Fehler-, Warn- und Informationsmeldungen enthalten.

mail

Mailboxen für eingehende E-Mails.

run

PID-Dateien, die die IDs der laufenden Prozesse enthalten. Diese Dateien werden oft konsultiert, um bestimmte Prozesse zu verfolgen oder zwangsweise zu beenden.

spool

Zu versendende Dateien oder Dateien in einer Warteschlange, wie etwa ausgehende E-Mails, Druckaufträge und zu einer bestimmten Zeit auszuführende Jobs.

tmp

Temporärer Speicher, den Programme und/oder Personen benutzen können.

Verzeichnispfad Teil 3: Anwendung

Der Anwendungsteil eines Verzeichnispfads (siehe Abbildung 1-4) ist, falls vorhanden, normalerweise der Name eines Programms. So hat beispielsweise das Verzeichnis /etc/systemd den Gültigkeitsbereich Root (/), die Kategorie etc (Konfigurationsdateien) und die Anwendung systemd. Da es sich bei systemd um einen Service zum Konfigurieren von Linux-Rechnern handelt, kann man davon ausgehen, dass /etc/systemd Konfigurationsdateien für diesen Service enthält – und das ist in der Tat der Fall.

Kernelbezogene Verzeichnisse

Manche Verzeichnisse unterstützen den Linux-Kernel, den niedrigsten Teil des Linux-Betriebssystems:

/boot

Dateien, die zum Booten des Systems benötigt werden. Hier »lebt« der Kernel, der typischerweise /boot/vmlinuz oder ähnlich genannt wird.

/lost+found

Beschädigte Dateien, die von einem Plattenreparaturwerkzeug gerettet wurden.

/proc

Beschreibt aktuell laufende Prozesse; für fortgeschrittene Benutzer.

/sys

Dateien für Kernelinterna; für fortgeschrittene Benutzer.

Die Dateien in /proc und /sys liefern einen Einblick in den laufenden Kernel und haben besondere Eigenschaften. Dateien in /proc scheinen immer die Größe 0 zu haben, sind schreibgeschützt und haben stets das aktuelle Datum. Auf zauberhafte Weise enthalten sie jedoch Informationen über den Linux-Kernel:

ls -lG /proc/version

-r--r--r-- 1 root 0 Oct 3 22:55 /proc/version

cat /proc/version

Linux version 5.15.0-76-generic ...

Dateien in /sys besitzen ebenfalls eine irreführende Größenangabe und magische Inhalte:

ls -lG /sys/power/state

-rw-r--r-- 1 root 4096 Jul 8 06:12 /sys/power/state

cat /sys/power/state

freeze mem disk

/proc und /sys werden vor allem von Programmen benutzt, aber natürlich können Sie sie ebenfalls untersuchen. Hier sind einige Beispiele:

/proc/ioports

Eine Liste der Ein-/Ausgabehardware Ihres Computers.

/proc/cpuinfo

Informationen über die Prozessoren Ihres Computers.

/proc/version

Die Betriebssystemversion. Der Befehl uname gibt dieselben Informationen aus.

/proc/uptime

Die »Uptime« des Systems, d.h. die Zeit in Sekunden, seit das System zuletzt gebootet wurde. Der Befehl uptime liefert eine Ausgabe, die für Menschen besser zu verstehen ist.

/proc/NNN

Informationen über den Linux-Prozess mit der Prozess-ID NNN (wobei NNN ein positiver Integer ist, z.B. /proc/13542).

/proc/self

Informationen über den aktuellen Prozess, den Sie ausführen; ein symbolischer Link auf eine /proc/nnn-Datei, wird automatisch aktualisiert. Probieren Sie

ls -l /proc/self

mehrmals hintereinander aus: Sie werden feststellen, dass /proc/self sich ändert.

Dateiberechtigungen

Ein Linux-System kann viele Benutzerkonten haben. Um die Privatsphäre und die Sicherheit zu gewährleisten, können die meisten User nur auf einige Dateien des Systems zugreifen und nicht auf alle. Diese Zugangskontrolle läuft auf zwei Fragen hinaus:

Wer besitzt Rechte?

Jede Datei und jedes Verzeichnis hat einen Besitzer, der das Recht hat, damit alles zu tun. Typischerweise ist der Benutzer, der eine Datei angelegt hat, ihr Eigentümer, der Administrator kann das aber ändern.

Darüber hinaus kann eine vordefinierte Gruppe von Benutzern das Recht haben, auf eine Datei zuzugreifen. Gruppen werden vom Systemadministrator definiert und in »Gruppen verwalten« auf Seite 191 behandelt.

Schließlich kann eine Datei oder ein Verzeichnis auch von allen Benutzern mit Konten auf dem System geöffnet werden. Diese Menge von Benutzern wird auch als die Welt oder einfach als andere bezeichnet.

Welche Art von Rechten werden gewährt?

Dateieigentümer, Gruppen und die Welt haben eventuell jeweils das Recht, bestimmte Dateien zu lesen, zu schreiben (d. h. zu modifizieren) und auszuführen. Die Rechte greifen auch auf die Verzeichnisse über, die die Benutzer lesen (auf Dateien innerhalb dieses Verzeichnisses zugreifen), schreiben (Dateien innerhalb dieses Verzeichnisses anlegen und löschen) und ausführen (das Verzeichnis mit cd betreten) können.

Um die Besitzer und Zugriffsrechte einer Datei meinedatei zu sehen, führen Sie folgenden Befehl aus (siehe »Grundlegende Dateioperationen« auf Seite 63):

ls -l meinedatei

-rw-r--r-- 1 smith smith 1168 Oct 28 2015 meinedatei

Um die Besitzer und Zugriffsrechte eines Verzeichnisses verzname zu sehen, führen Sie diesen Befehl aus, ergänzt um die Option -d:

ls -ld meinverz

drwxr-x--- 3 smith smith 4096 Jan 08 15:02 meinverz

In der Ausgabe werden die Zugriffsrechte durch die zehn Zeichen ganz links dargestellt: einen String aus r für Lesen (read), w für Schreiben (write) und x für Ausführen (execute) sowie anderen Buchstaben und Bindestrichen, zum Beispiel:

-rwxr-x---

Diese Buchstaben und Symbole haben folgende Bedeutung:

Unser Beispiel -rwxr-x--- steht also für eine Datei, die vom Eigentümer gelesen, geschrieben und ausgeführt, von der Gruppe gelesen und ausgeführt, aber nicht geschrieben, und vom Rest der Welt gar nicht angefasst werden darf. Um den Eigentümer, die Gruppeneigentümerschaft oder die Rechte einer Datei zu ändern, benutzen Sie die Befehle chown, chgrp bzw. chmod so, wie in »Dateieigenschaften« auf Seite 85 beschrieben wird.

Ausgewählte bash-Features

Eine Shell führt nicht einfach nur Befehle aus, sondern kann noch mehr. Sie besitzt darüber hinaus leistungsfähige Eigenschaften, die diese Aufgabe einfacher machen: Wildcards (Platzhalter) zum Filtern von Dateinamen, eine »Befehlshistorie« zum schnellen erneuten Aufrufen von Befehlen, Pipes, mit denen man die Ausgabe eines Befehls zur Eingabe eines anderen Befehls machen kann, Variablen zum Speichern von Werten zur Benutzung durch die Shell usw. Nehmen Sie sich die Zeit, diese Eigenschaften und Funktionen kennenzulernen. Sie werden merken, dass Sie schneller und produktiver mit Linux arbeiten.8 Schauen wir uns kurz diese nützlichen Werkzeuge an. (Für eine vollständige Dokumentation führen Sie info bash aus.)

Welche Shell nutzen Sie?

Dieses Buch nimmt an, dass Sie die bash-Shell verwenden. Um herauszufinden, welche Shell Sie einsetzen, führen Sie folgenden Befehl aus:

echo $SHELL

/bin/bash

Ist das nicht die bash-Shell, möchten Sie diese aber ausprobieren, rufen Sie den Befehl bash direkt auf, weil bash – wie alle anderen Shells – einfach ein Programm ist. (Sie finden es unter /bin/bash.)

bash

Wenn Sie fertig sind, geben Sie den Befehl exit ein, um zu Ihrer normalen Shell zurückzukehren. Um bash als Ihre Standard-Shell festzulegen, schauen Sie sich den Befehl chsh in »Verwaltung der Benutzerzugänge« auf Seite 187 an.

Mustererkennung

Die Mustererkennung in der Shell, manchmal auch als Wildcards bezeichnet, bietet eine Abkürzung für das Arbeiten mit Gruppen von Dateien. So steht z.B. das Muster a* für alle Dateien, deren Namen mit einem kleingeschriebenen »a« beginnen. Wildcards werden von der Shell zu den tatsächlichen Dateinamen »erweitert«, die auf sie passen. Falls Sie also Folgendes eintippen:

ls a*

aardvark adamantium apple

erweitert die Shell zuerst das Muster a* zu den Dateinamen, die in Ihrem aktuellen Verzeichnis mit einem »a« beginnen. Das ist das Gleiche, als hätten Sie Folgendes eingetippt:

ls aardvark adamantium apple

ls merkt gar nicht, dass Sie ein Muster benutzt haben, es sieht nur die fertige Liste der Dateinamen, nachdem die Shell die Wildcard erweitert hat. Wichtig: Dies bedeutet, dass jeder Linux-Befehl ungeachtet seines Ursprungs mit Mustern und anderen Shell-Funktionen arbeitet. Man kann gar nicht oft genug darauf hinweisen, denn eine überraschend große Zahl an Linux-Anwendern geht fälschlicherweise davon aus, dass die Programme ihre eigenen Wildcards erweitern. Das tun sie nicht. Die Shell kümmert sich komplett um sie, bevor die entsprechenden Programme überhaupt aufgerufen werden.

Zwei Zeichen werden von Mustern nie gefiltert: ein führender Punkt und der Verzeichnisschrägstrich (/). Diese Zeichen müssen wörtlich angegeben werden, wie in .bash*, um .bashrc zu filtern, oder in /etc/*conf, um alle Dateinamen zu erfassen, die im /etc-Verzeichnis auf conf enden.

Punktdateien

Dateinamen mit einem führenden Punkt, die sogenannten Punktdateien, werden oft vor Ihren Augen verborgen, sofern Sie sie nicht explizit anfordern. Ein Beispiel ist die bash-Initialisierungsdatei .bashrc in Ihrem Home-Verzeichnis.

ls lässt die Datei beim Auflisten des Verzeichnisses weg, wenn Sie nicht zusätzlich die Option -a angeben.Shell-Wildcards erfassen einen führenden Punkt ebenfalls nicht.

Aus diesem Grund werden sie manchmal auch als »verborgene Dateien« bezeichnet.

Falls Sie beim Einsatz von Zeichenmengen einen wirklichen Bindestrich einfügen wollen, setzen Sie ihn an die erste oder letzte Stelle, sodass er nicht Teil eines Bereichs ist. Eine schließende eckige Klammer müssen Sie an die erste Stelle setzen oder mit einem Backslash maskieren (\]). Um ein ^ oder ! wörtlich einzufügen, setzen Sie es nicht an die erste Stelle, oder Sie maskieren das Zeichen.

Muster

Bedeutung

*

Null oder mehr nachfolgende Zeichen (außer einem führenden Punkt oder einem Verzeichnisschrägstrich).

?

Ein beliebiges einzelnes Zeichen (außer einem führenden Punkt oder einem Verzeichnisschrägstrich).

[Menge]

Ein beliebiges einzelnes Zeichen aus der angegebenen Menge, üblicherweise eine Folge von Zeichen, wie etwa [aeiouAEIOU] für alle Vokale, oder ein Bereich mit einem Bindestrich, wie etwa [A-Z] für alle Großbuchstaben, oder eine Kombination.

[!Menge]

Ein beliebiges einzelnes Zeichen, das nicht in der angegebenen Menge ist, wie zum Beispiel [!0-9] für alle Zeichen, die keine Ziffern sind.

[^Menge]

Wie [!Menge].

Erweiterung von geschweiften Klammern

Ähnlich wie Dateimuster werden auch Ausdrücke in geschweiften Klammern erweitert und bilden auf diese Weise mehrere Argumente für einen Befehl. Der kommaseparierte Ausdruck

{bubble,quick,merge}

wird innerhalb einer Kommandozeile zuerst zu bubble, dann zu quick und schließlich zu merge erweitert:

echo {bubble,quick,merge}sort.java

bubblesort.java quicksort.java mergesort.java

Der zentrale Unterschied zwischen geschweiften und eckigen Klammern ist, dass geschweifte Klammern mit allen Strings funktionieren, eckige Klammern aber nur bestehende Dateinamen finden.

Geschweifte Klammern können auch in eine Folge von Werten in einem Bereich erweitert werden, wenn Sie die Endpunkte des Bereichs durch zwei Punkte (..) trennen:

echo {3..12}

3 4 5 6 7 8 9 10 11 12

echo {A..E}

A B C D E

echo datei{1..5}.py

datei1.py datei2.py datei3.py datei4.py datei5.py

Shell-Variablen

Sie können Variablen und deren Werte definieren, indem Sie sie einander zuweisen:

MEINEVAR=3Der Variablen MEINEVAR den Wert 3 zuweisen.

Um auf einen Wert zu verweisen, setzen Sie einfach ein Dollarzeichen vor den Variablennamen:

echo $MEINEVAR

3

Manche Variablen sind Standard und werden beim Log-in von Ihrer Shell definiert:

Variable

Bedeutung

DISPLAY

Der Name Ihrer X Window-Anzeige.

HOME

Ihr Home-Verzeichnis, wie etwa /home/smith.

LOGNAME

Ihr Log-in-Name, wie etwa smith.

MAIL

Ihre Mailbox für eingehende E-Mails, wie etwa /var/spool/mail/smith.

OLDPWD

Das vorherige Verzeichnis Ihrer Shell vor dem letzten cd-Befehl.

PATH

Der Suchpfad Ihrer Shell: Verzeichnisse, die durch Doppelpunkte getrennt sind.

PWD

Das aktuelle Verzeichnis Ihrer Shell.

SHELL

Der Pfad zu Ihrer Shell, z.B. /bin/bash.

TERM

Die Art Ihres Terminals, z.B. xterm oder vt100.

USER

Ihr Log-in-Name.

Der Geltungsbereich der Variablen ist standardmäßig die Shell, in der sie definiert ist. Um eine Variable und ihren Wert für andere Programme verfügbar zu machen, die Ihre Shell aufruft (d. h. Unterprozesse), nutzen Sie den export-Befehl:

MEINEVAR=3

export MEINEVAR

oder die Abkürzung:

export MEINEVAR=3

Ihre Variable wird nun als Umgebungsvariable bezeichnet. Um einen Schritt weiterzugehen und eine Variable für jede neue Shell verfügbar zu machen, die Sie ausführen – und nicht nur für die Unterprozesse Ihrer aktuellen Shell –, stecken Sie die Variablendefinition zuvor in eine Shell-Konfigurationsdatei (siehe »Das Shell-Verhalten anpassen« auf Seite 59).

Um die Variablen einer Shell zu sehen, führen Sie folgenden Befehl aus:

printenv

Um den Wert einer Variablen nur einmal einem bestimmten Programm zu übergeben, stellen Sie auf der Kommandozeile Variable=Wert voran:

printenv HOME

/home/smith

HOME=/home/sally printenv HOME

/home/sally

printenv HOME

/home/smith Der Originalwert ist nicht betroffen.

Suchpfad

Programme sind eventuell über Ihr ganzes Linux-Dateisystem verstreut und stecken in Verzeichnissen wie /bin und /usr/bin. Wie findet die Shell ein Programm, das Sie über einen Shell-Befehl ausführen? Wenn Sie einen Befehl wie:

whoDie Shell muss das »who«-Programm zum Ausführen finden.

eintippen, muss die Shell das Programm im Dateisystem finden. Dazu fragt sie den Wert von der Umgebungsvariablen PATH ab, der aus einer Folge von Verzeichnissen gebildet wird, die durch Doppelpunkte getrennt werden:

echo $PATH

/usr/local/bin:/bin:/usr/bin Suchpfad mit 3 Verzeichnissen

Die Shell sucht in jedem dieser Verzeichnisse nach einer ausführbaren Datei namens who. Findet sie who (z.B. in /usr/bin/who), führt sie den Befehl aus und merkt sich den Ort für das nächste Mal (mit hash --help erfahren Sie mehr über das Caching). Ansonsten gibt sie eine Fehlermeldung aus, zum Beispiel:

bash: who: command not found

Um den Fundort in Ihrem Suchpfad auszugeben, führen Sie type oder which aus:

type who

who is /usr/bin/who

which who

/usr/bin/who

Um Verzeichnisse temporär zum Suchpfad Ihrer Shell hinzuzufügen, ändern Sie deren PATH-Variable. Um z.B. /usr/sbin an den Suchpfad der Shell anzuhängen, geben Sie Folgendes ein:

PATH=$PATH:/usr/sbin

echo $PATH

/usr/local/bin:/bin:/usr/bin:/usr/sbin

Diese Änderung beeinflusst nur die aktuelle Shell. Um sie dauerhaft zu machen, modifizieren Sie die PATH-Variable in einer bash-Konfigurationsdatei (siehe »Das Shell-Verhalten anpassen« auf Seite 59). Melden Sie sich dann ab und wieder an oder führen Sie die Konfigurationsdatei per Hand in jedem Ihrer geöffneten Shell-Fenster aus, zum Beispiel:

. $HOME/.$HOME/.bashrcFalls $HOME/.bashrc angepasst wurde.

Aliase

Der eingebaute Befehl alias definiert eine bequeme Kurzform für einen längeren Befehl. So definiert z.B.

alias ll='ls -lG'

einen neuen Befehl ll, der ls -lG ausführt:

ll

total 436

-rw-r--r-- 1 smith 3584 Oct 11 14:59 datei1

-rwxr-xr-x 1 smith 72 Aug 6 23:04 datei2

Definieren Sie Aliase in Ihrer ~/.bashrc-Datei (siehe »Das Shell-Verhalten anpassen« auf Seite 59), damit sie Ihnen immer zur Verfügung stehen, wenn Sie sich anmelden.9 Um all Ihre Aliase aufzulisten, geben Sie alias ein. Falls Aliase Ihnen nicht leistungsstark genug sind, sollten Sie »Mit Shell-Skripten programmieren« auf Seite 308 lesen, info bash ausführen und sich über Shell-Funktionen (Shell Functions) informieren.

Eingebaute Befehle

Die meisten Linux-Befehle sind Programme im Linux-Dateisystem. Beispiele dafür sind wc oder who, die im Allgemeinen im Verzeichnis /usr/bin zu finden sind. Die Shell finden sie zum Ausführen über die PATH-Variable (siehe »Suchpfad« auf Seite 42). Andere Befehle sind aber inhärente Features der Shell und sie werden als eingebaute Befehle bezeichnet. In diesem Kapitel haben Sie eine ganze Reihe davon kennengelernt, unter anderem cd, alias oder export. Um herauszufinden, ob ein Befehl im Dateisystem liegt, ein eingebauter Befehl oder ein Alias ist, führen Sie type aus:

type wc cd llDie Art dieser Befehle ausgeben

wc is /usr/bin/wc Ein Programm im Dateisystem

cd is a shell builtin Ein eingebauter Shell-Befehl

ll is aliased to 'ls -lG' Ein Alias

Eingabe/Ausgabe und Umleitung

Die meisten Linux-Befehle akzeptieren Eingaben und/oder erzeugen Ausgaben. Die Tastatureingabe wird als Standardeingabe oder stdin bezeichnet. Die Ausgabe auf Ihrem Bildschirm ist die Standardausgabe oder stdout. Fehlermeldungen werden gesondert behandelt und an der Standardfehlerausgabe oder stderr ausgegeben. Dabei handelt es sich im Allgemeinen ebenfalls um Ihren Bildschirm, aber Linux trennt intern stderr und stdout.10

Die Shell kann die Standardeingabe, die Standardausgabe und die Standardfehlerausgabe in und aus Dateien umleiten. Mit anderen Worten: Jeder Befehl, der von der Standardeingabe liest, kann seine Eingabe stattdessen auch aus einer Datei übernehmen. Dabei hilft der Shell-Operator <:

befehl < eingabedatei

Genauso kann jeder Befehl, der auf die Standardausgabe schreibt, seine Ausgaben stattdessen in eine Datei schreiben:

befehl > ausgabedateiAnlegen/Überschreiben von ausgabedatei

befehl >> ausgabedateiAnhängen an ausgabedatei

Ein Befehl, der auf die Standardfehlerausgabe schreibt, kann seine Ausgabe ebenfalls in eine Datei umleiten, während die Standardausgabe davon nicht beeinflusst wird:

befehl 2> fehlerdatei

Um sowohl die Standardausgabe als auch die Standardfehlerausgabe in Dateien umzuleiten, geben Sie Folgendes ein:

befehl > ausgabedatei 2> fehlerdateiseparate Dateien

befehl &> ausgabedateieine einzige Datei (üblich)

befehl >& ausgabedateieine einzige Datei (weniger üblich)