Von Hauke Lubenow. Datum: 15.09.2026
Jede Anwendung der hier beschriebenen Hinweise und Tips erfolgt ausschließlich auf eigene Gefahr. Keine Haftung für die Richtigkeit der Darstellung. Jegliche Haftung für irgendwelche Schäden aufgrund dieses Textes ist ausgeschlossen.
There's strictly no warranty for the correctness of this text. You use any of the information provided here at your own risk.
"Linux" ist ein Computer-Betriebssystem. Genaugenommen ist "Linux" nur der Kernel (der Kern), das gesamte Betriebssystem wird als "GNU/Linux" bezeichnet. Aber selbst das ist eigentlich umstritten, doch das brauchen wir hier nicht zu vertiefen. Wir nennen einfach das Betriebssystem, um das es auf dieser Seite geht, "Linux".
Die meiste Linux-Software ist sogenannte "freie Software". Was das genau bedeutet, wird in einem der letzten Abschnitte dieser Seite erklärt. Ein Grundprinzip freier Software besteht darin, daß der Programmquelltext für jedermann offen einsehbar ist; insofern handelt es sich dabei um Open-Source-Software.
Linux ist gewissermaßen ein freier Klon des früheren kommerziellen Betriebssystems "Unix", das auf die allerersten Tage der Computertechnik in den 1970er Jahren zurückgeht. Daher finden sich viele Konzepte von Unix, auch in Linux wieder, etwa das Mehrbenutzersystem oder der Verzeichnisbaum.
Die Linux-Software wird in sogenannten "Distributionen" gebündelt.
Distributionen enthalten das Linux-Betriebssystem, aber auch Linux-Anwendungen. Wenn man also eine Linux-Distribution installiert, installiert man im Grunde die gesamte benötigte Software auf einmal. Natürlich kann man später Programme entfernen, die man nicht benötigt, oder andere Programme zur Installation hinzufügen.
Programme, die Bestandteil der jeweiligen Distribution sind, lassen sich relativ einfach hinzufügen. Schwieriger kann es dagegen sein, andere Programme zu installieren, die nicht Bestandteil der Distribution sind, sondern die irgendwo anders im Internet angeboten werden.
Heute sind beispielsweise folgende Linux-Distributionen verbreitet:
In einem installierten System wird die Linux-Software in sogenannten "Paketen" gebündelt. Die Speicherorte der Dateien im Verzeichnisbaum und ihre Zuordnung zu den Paketen werden in einer Datenbank gespeichert. Es gibt zwei verschiedene Arten solcher Datenbanksysteme. Das eine verwendet das Programm "rpm" ("Red Hat Package Manager"), das andere "dpkg" ("Debian Package Manager").
Es gibt größere Distributionen, die eine riesige Sammlung von Softwarepaketen enthalten, und kleinere, reduzierte Distributionen, die nur eine kleinere Auswahl enthalten, beispielsweise nur eine einzige Anwendung für eine bestimmte Aufgabe.
Ich benutze seit vielen Jahren OpenSuSE, derzeit in Version 15.6. Es hat mit meiner Hardware immer gut funktioniert, und ich war damit stets zufrieden.
Heute installieren viele Leute zuerst Ubuntu oder Linux Mint. Ich würde jedoch eine größere Distribution empfehlen. Wenn schon nicht OpenSuSE, dann wenigstens Debian, weil es dann später einfacher ist, weitere Software hinzuzufügen, falls man andere Programme verwenden möchte als diejenigen, die in den vorab ausgewählten Ubuntu- oder Mint-Paketen enthalten sind.
Was Standardsoftware unter Linux betrifft, enthalten die verschiedenen Distributionen im Grunde dieselben Programme: Beispielsweise bieten sie "Firefox" als Webbrowser, "LibreOffice" für Textverarbeitung und Tabellenkalkulation, "Audacity" zur Bearbeitung von Audiodateien, und "GIMP" zur Bildbearbeitung.
Das bedeutet, daß die Distributionen an der einen oder anderen Stelle zwar etwas unterschiedlich aussehen können. Letztlich unterscheiden sie sich jedoch nicht so stark voneinander, wie man zunächst vielleicht denkt.
Heute scheint es eine Art Werbekampagne zu geben, neue Benutzer, die von Windows kommen, dazu zu bewegen, Linux Mint zu installieren. Ich sehe jedoch keine wesentlichen Vorteile von Linux Mint gegenüber anderen Distributionen wie beispielsweise OpenSuSE.
Wie bereits erwähnt, ist Linux Mint eine reduzierte Distribution. Die größeren Distributionen wie OpenSuSE bieten eine wesentlich größere Auswahl an Software. Das wäre insbesondere für Anfänger eigentlich ein Vorteil.
Vor einigen Jahren sprach jeder über Ubuntu. Auch damals konnte ich nicht nachvollziehen, warum.
Ein sehr gutes und bekanntes Nachschlagewerk über Linux ist: Michael Kofler: "Linux: Das umfassende Handbuch". Es hat in der aktuellen Auflage jedoch über 1.400 Seiten.
Die Anmerkungen dazu, wie man Linux installiert, sprengen den Rahmen dieses Absatzes. Daher habe ich sie hierhin ausgelagert.
Nach dem Installationsprozeß gelangt der Benutzer schließlich zum Desktop. Wahrscheinlich gibt es unten eine Taskleiste oder beispielsweise ein Dateidock. Ein Klick auf die Menüschaltfläche in der Taskleiste öffnet ein Menü, über das Programme wie Firefox gestartet werden können.
Im Menü finden sich außerdem Programme, mit denen man das Aussehen und das Verhalten des Systems anpassen, und Systemeinstellungen vornehmen kann.
Auf einem heutigen Linux-System werden bestimmte Anwendungen typischerweise für bestimmte Aufgaben verwendet. Hier ein Überblick:
vim und Emacs sind die beiden klassischen Texteditoren unter Linux. Beide sind sehr leistungsfähig, für Anfänger aber auch sehr ungewohnt. Außerdem unterscheiden sie sich stark voneinander. Die anderen Texteditoren verwenden die von Windows bekannten Tastenkombinationen.
Nehmen wir an, man hat mit LibreOffice ein Textdokument erstellt. Nun möchte man es abspeichern, und wählt wie gewohnt "Datei / Speichern unter". Anschließend wird man nach dem Speicherort für die Datei gefragt, woraufhin einem der Verzeichnisbaum angezeigt wird.
Dieser sieht fremdartig aus, weil zur Trennung der Verzeichnisse Schrägstriche ("/") anstelle von Backslashes verwendet werden, und es ganz oben kein Laufwerk (wie "C:\") gibt, sondern lediglich einen einfachen Schrägstrich.
Wo soll man die Datei speichern?
Nun, während der Installationsprozesses wird ein Benutzer angelegt. Er hat einen Namen und ein Passwort. Außerdem hat er sein eigenes Verzeichnis im Verzeichnisbaum, das während der Installation für ihn angelegt wurde.
Das Benutzerverzeichnis hat den Namen "/home/username". Wenn es also einen Benutzer mit dem Benutzernamen "john" gibt, befinden sich seine Dateien unterhalb von "/home/john".
Zu beachten ist, daß Linux im Gegensatz zu Windows immer zwischen Groß- und Kleinschreibung unterscheidet (= case sensitive). Das bedeutet, z.B. "/home/john" wäre etwas völlig anderes als "/home/John". Beide Verzeichnisse könnten nebeneinander existieren, und wären völlig verschieden.
Das Linux-System verwaltet die Benutzer und ihre Zugriffsrechte auf Dateien und Verzeichnisse so, wie es aus der Unix-Tradition überliefert ist:
Zu jeder Datei und jedem Verzeichnis werden Zugriffsrechte gespeichert. Es gibt drei Arten dieser Rechte: Lesen (r), Schreiben (w) und Ausführen (x). Außerdem gehört jede Datei und jedes Verzeichnis einem bestimmten Eigentümer.
Wenn "john" eine Datei "hello.txt" erstellt (beispielsweise in oder unterhalb seines Verzeichnisses "/home/john"), wird er dadurch zum Eigentümer dieser Datei, und kann die Dateirechte für andere festlegen, also bestimmen, ob andere die Datei lesen, schreiben oder ausführen dürfen.
Zudem gibt es einen speziellen Benutzer namens "root", der der Systemadministrator ist. Der Name "root" ist für diesen Benutzer so festgelegt.
"root" kann per Definition auf dem System alles tun. Er kann auch Systemdateien löschen, die für den Betrieb des Systems unverzichtbar sind. "root" darf das System also auf jede Weise verändern, selbst wenn es dadurch unbrauchbar würde.
"root" kann außerdem auf sämtliche Dateien aller Benutzer zugreifen, unabhängig davon, welche Benutzerrechte für sie festgelegt sind.
Und "root" kann auch die Benutzerrechte der Eigentümer von Dateien festlegen. Auch hier gibt es wieder die drei Rechte: Lesen (r), Schreiben (w) und Ausführen (x).
Wenn "john" also Eigentümer einer Datei ist, kann "root" dies ändern, und die Datei sich selbst oder einem dritten Benutzer, beispielsweise "paul", zuweisen. "root" kann "john" auch das Recht entziehen, seine eigene Datei zu lesen.
Benutzer können außerdem Mitglieder von Gruppen sein. Auch für Gruppen gibt es wiederum die drei genannten Rechte.
Insgesamt bestehen die mit einer Datei gespeicherten Benutzerrechte also aus: "rwx (Eigentümer) rwx (Gruppe) rwx (Andere)" (wobei "rwx" für "read - write - execute" steht).
Ein Beispiel: Angenommen, "john" erstellt die Datei "hello.txt". Sie enthält einen Text privater Natur. "john" selbst möchte die Datei lesen und schreiben können, sie aber nicht ausführen können, da es sich lediglich um eine Textdatei handelt. Gruppen und andere Benutzer sollen überhaupt nichts mit der Datei machen können. Er würde daher die Rechte für die Datei auf "rw- --- ---" setzen.
Auf Verzeichnisse kann nur zugegriffen werden, wenn für sie das Recht "Ausführen (x)" gesetzt ist.
"john" besitzt sein Home-Verzeichnis namens "/home/john", und "paul" besitzt sein Home-Verzeichnis namens "/home/paul". Wenn das "x"-Recht für Gruppen und andere Benutzer für "john"s Home-Verzeichnis entzogen wird, und "paul" versuchen würde, nach "/home/john" zu wechseln, würde dies fehlschlagen, und "paul" würde eine Fehlermeldung über fehlende Berechtigungen erhalten.
Dieses System von Benutzerrechten trägt zur Sicherheit des Linux-Systems bei.
Es erhöht auch die Sicherheit gegenüber Viren. Momentan sind Viren für Linux-Systeme ohnehin kein allzugroßes Problem, da weltweit auf wesentlich mehr Systemen Windows verwendet wird, und die Entwickler von Viren daher stärker daran interessiert sind, Windows anzugreifen.
Es ist auch möglich, ein Linux-System mit nur einem einzigen Benutzer zu betreiben. Dieser Benutzer müßte dann auch der Systemadministrator "root" sein. Aus Sicherheitsgründen wird jedoch empfohlen, zusätzlich ein Konto für einen normalen Benutzer zu verwenden.
Eine natürliche Person kann also mehrere Konten auf einem Linux-System haben, beispielsweise ein Konto für einen gewöhnlichen Benutzer, und ein weiteres Konto für "root".
Wenn man ein Einbenutzersystem betreibt, arbeitet man normalerweise als gewöhnlicher Benutzer. Nur wenn man Systemdateien ändern will, wechselt man für kurze Zeit zu "root".
Dies geschieht auf der Shell mit dem Befehl "su".
Im Verzeichnisbaum befinden sich die Dateien eines Benutzers in dessen Home-Verzeichnis, also beispielsweise die Dateien von "john" in "/home/john".
Nur der Benutzer "root" besitzt für die Systemdateien außerhalb von "/home" Schreibrechte.
Das Verzeichnis der obersten Ebene (= die Wurzel des Verzeichnisbaums) ist einfach "/". Wenn man einen der oben aufgeführten Dateimanager verwendet (beispielsweise Dolphin), und man ihn auf "/" richtet, sieht man typischerweise einige der folgenden Verzeichnisse:
bin boot dev etc home lib media opt proc root tmp usr var windows
Diese Verzeichnisse haben folgende Inhalte bzw. Bedeutungen:
Der Linux-Verzeichnisbaum ist nicht an ein bestimmtes Laufwerk gebunden. Stattdessen sind die Dateien, mit denen Linux gestartet wird, über den gesamten Verzeichnisbaum verteilt. Bei den meisten handelt es sich um Systemdateien.
Werden die Dateien eines externen Laufwerks oder eines USB-Sticks benötigt, findet man sie in dem Verzeichnis, in das das Gerät eingebunden wurde. Dieser Ort kann "/media" oder "/mnt" sein, möglicherweise auch "/var/run/media/username".
Gewöhnliche Benutzer halten sich normalerweise in ihrem Home-Verzeichnis auf ("/home/john" für den Benutzer "john"). Dort können sie eine (nahezu) unbegrenzte Anzahl eigener Unterverzeichnisse anlegen.
Von ihrem Home-Verzeichnis aus können Benutzer jedoch auch Programme ausführen, die sich in den Verzeichnissen "/usr/bin" oder "/usr/local/bin" befinden. Aufgrund des Mechanismus mit der "$PATH"-Variable müssen die Benutzer nicht erst in diese Systemverzeichnisse wechseln, um die Programme auszuführen. Sie können in ihrem Home-Verzeichnis bleiben, und das System findet die Programme für sie.
Wenn man den Linux-Verzeichnisbaum zum ersten Mal sieht, wird er einem wahrscheinlich sehr fremdartig vorkommen. "Was um alles in der Welt ist das?", wird man sich vielleicht fragen.
Man sollte jedoch bedenken: Die meisten Verzeichnisse des Linux-Verzeichnisbaums enthalten Dateien eines Typs, den proprietäre Betriebssysteme normalerweise vollständig vor dem Benutzer verbergen.
Wann hat man unter einem anderen Betriebssystem das letzte Mal nach solchen Dateien gesucht?
Und: Wenn man Linux über einen längeren Zeitraum verwendest, gewöhnt man sich wahrscheinlich innerhalb einiger Wochen an diesen Verzeichnisbaum. Es gibt ihn bereits seit Jahrzehnten. Und vermutlich wird es ihn noch weitere Jahrzehnte geben.
Das Wissen über den Linux-Verzeichnisbaum gehört also zu den wenigen Dingen, die man für's ganze Leben lernt. Es handelt sich um die Art von Wissen, die man eines Tages vielleicht seinen Enkelkindern weitergeben kann.
Unter Linux gibt es mehrere sogenannte "Window Manager". Das sind Programme, die – zusammen mit einem weiteren Programm namens "X-Server" – für die Darstellung des grafischen Desktops verantwortlich sind.
(Zum Vergleich: Unter Windows ist der Code zur Verwaltung des Fenstersystems Bestandteil des Betriebssystems und hat keinen eigenen Namen. Dem Benutzer wird ein festgelegter Windows-Desktop zur Verfügung gestellt.)
Diese Window Manager werden mit weiterer Software zu einer sogenannten "Desktop-Umgebung" kombiniert. Die verbreitetsten unter Linux sind:
KDE und GNOME sind die größten Desktop-Umgebungen, die anderen sind ressourcenschonender. Momentan bin ich mit Xfce, Version 4, recht zufrieden.
Der grafische Desktop eines Linux-Systems ist also nicht fest vorgegeben. Es gibt viele Möglichkeiten, wie er aussehen kann. Aber die grundlegenden Prinzipien des Linux-Systems – also der Verzeichnisbaum, die Verwaltung der Benutzer und ihrer Rechte sowie der Systemadministrator "root" – gelten unabhängig von der verwendeten Desktop-Umgebung.
Es ist auch möglich, mehrere Desktop-Umgebungen auf einem Linux-System zu installieren. Dann kann man einfach eine davon verwenden, beispielsweise Xfce. Man kann aber innerhalb von Xfce auch Anwendungen starten, die beispielsweise für KDE oder GNOME geschrieben wurden. Man muß also nicht auf KDE- oder GNOME-Anwendungen verzichten, wenn man eine andere Desktop-Umgebung als KDE oder GNOME verwendet.
Die standardmäßige Desktop-Umgebung von Ubuntu ist GNOME. Es gibt weitere Varianten der Distribution, die jeweils eine der anderen Umgebungen verwenden: "Kubuntu" (KDE), "Xubuntu" (Xfce) und "Lubuntu" (LXQt).
Früher war die Standardumgebung von Ubuntu "Unity", das Elemente von KDE und GNOME miteinander zu verbinden versuchte. Wie gesagt, ist die Distribution inzwischen wieder zu GNOME zurückgekehrt.
Dies ist ein gutes Beispiel für den Unterschied zwischen einer reduzierten Distribution (wie Ubuntu oder Linux Mint) und einer großen Distribution (wie OpenSuSE): Bei OpenSuSE kann man während der Installation eine dieser vier Desktop-Umgebungen auswählen. Man kann auch mehrere davon installieren (oder alle vier, wenn man möchte), und anschließend am grafischen Anmeldebildschirm auswählen, welche davon man verwenden möchte.
Ubuntu bietet dagegen nur eine einzige Desktop-Umgebung an. Wenn man eine andere verwenden möchte, kannt man sie nicht einfach zusätzlich installieren (zumindest nicht ohne weiteres), sondern muß eine andere Distribution aus der Ubuntu-Familie installieren, die wiederum eine reduzierte Distribution ist.
Linux Mint verfolgt einen ähnlichen Ansatz wie Ubuntu: Die Standarddistribution ist "Linux Mint Cinnamon", die die Desktop-Umgebung "Cinnamon" (mit dem Window Manager "Muffin") verwendet. Es gibt aber auch die ressourcenschonendere Distribution "Linux Mint MATE" (mit dem Window Manager "Marco") und "Linux Mint Xfce".
Das Aussehen der Fenster von Linux-Anwendungen wird durch bestimmte Softwareschichten festgelegt, die man "GUI-Toolkits" nennt. Es gibt:
Diese GUI-Toolkits sind Softwarebibliotheken, die Code zur Erstellung sogenannter "Widgets" (= "Fensterelemente") bereitstellen. Widgets können beispielsweise Schaltflächen, Eingabefelder, Schieberegler oder Kontrollkästchen sein. Wenn man eine grafische Anwendung entwickelt, greift man auf die Bibliothek des Toolkits zu, um solche Widgets zu erzeugen. Diese bestimmen anschließend das Aussehen und das Verhalten der Fenster der Anwendung.
(Übrigens: Auch Microsoft Windows verwendet ein GUI-Toolkit bzw. eine Softwarebibliothek zur Erstellung von Widgets. Nämlich die alte "Windows API" und die "MFC" ("Microsoft Foundation Classes"). Nur kommt der durchschnittliche Windows-Benutzer mit diesen Interna des Betriebssystems normalerweise nicht in Berührung.)
Unter Linux gibt es eine besondere Möglichkeit, Fenster zu ziehen:
Man kann die "Alt"-Taste gedrückt halten, dann an einer beliebigen Stelle auf ein Fenster klicken (also nicht nur auf die Titelleiste), und die linke Maustaste gedrückt halten. Dann kann man das Fenster auf diese Weise verschieben.
Das ist eine sehr nützliche Funktion, denn auf diese Weise kann man Fenster weit über den Bildschirmrand hinaus verschieben. Es gibt auch Fälle, in denen das nötig ist.
Vielleicht ist es nun an der Zeit, ein Terminalprogramm zu öffnen. Man sollte eines im Menü der Taskleiste im Bereich "System" oder "System Tools" finden.
In einem Terminalprogramm (auch "Konsole" genannt) kann man Befehle eingeben, die dann ausgeführt werden. Die Befehle werden von einem Programm namens "Shell" interpretiert. Auf diese Weise wird dem Benutzer ein "CLI" ("Command Line Interface", also eine Kommandozeile) zur Verfügung gestellt.
Der Begriff "Terminal" geht auf die frühen Tage der Computertechnik zurück, und bezeichnete damals elektronische Geräte, die lediglich gewisse Daten an einen Zentralrechner sandten, eine Ausgabe zurückerhielten, und diese irgendwie anzeigen konnten. Mehrere solcher Terminals – die selbst keine Computer waren – konnten an einen einzigen großen Zentralrechner angeschlossen werden. Dieser konnte gleichzeitig die Eingaben von mehreren Terminals und von mehreren Benutzer verarbeiten, weil darauf wahrscheinlich Unix lief. In diesem Video kann man sich anschauen, was es mit diesen historischen Hardware-Terminals auf sich hatte.
Die Terminalprogramme auf modernen Linux-Rechnern sind natürlich lediglich virtuelle Nachbildungen dieser alten Geräte, und haben außer ihrem Zweck mit diesen nicht viel gemeinsam.
Es gibt mehrere Terminalprogramme für Linux. Es gibt "xterm" und "rxvt". "konsole" ist das Terminal von KDE, "gnome-terminal" das von GNOME. Da ich momentan Xfce verwende, benutze ich "xfce4-terminal", und bin damit recht zufrieden.
Man sollte darauf achten, daß das Terminal richtig eingestellt ist, insbesondere was die verwendete Schriftart und die Schriftgröße betrifft. Die Buchstaben im Terminal sollten ebenso leicht zu lesen sein wie die in einem Webbrowser.
Wenn sich das Terminal schnell öffnet, und zügig läuft, wenn sich Schriftart und Schriftgröße einstellen lassen, und wenn die Einstellungen für das nächste Mal gespeichert werden können, ist es ein gutes Terminal. "xfce4-terminal" ist in dieser Hinsicht gut. Aber nicht alle anderen sind es.
Es ist außerdem notwendig, das Terminal schnell öffnen und schließen zu können. Ich empfehle, zumindest ein Symbol des Terminals auf dem Desktop abzulegen. Noch besser ist es jedoch, eine Tastenkombination zu definieren, mit der das Terminal geöffnet werden kann.
Wie dies eingerichtet wird, hängt von dem verwendeten Window Manager ab. Ich benutze die Tastenkombination "Alt-d", um das Terminal einschließlich aller benutzerdefinierten Einstellungen zu öffnen. "Ctrl-d" funktioniert standardmäßig zum Schließen, da diese Tastenkombination dazu dient, sich aus der aktiven Shell abzumelden.
Auf meinem System öffnet also "Alt-d" das Terminal, und "Ctrl-d" schließt es. Das geht sehr schnell, und so läßt es sich gut bedienen.
Wenn das Terminal passend konfiguriert ist, ist es an der Zeit, etwas einzugeben. Wie erwähnt, läuft im Terminal ein Programm namens "Shell", das die Befehle interpretiert, die der Benutzer eingibt. Die Standard-Shell unter Linux ist "Bash" (obwohl es auch eine ganze Reihe anderer gibt, z.B. "sh", "ksh", "tcsh", "zsh"). Hier sind einige grundlegende Befehle in Bash:
Über das Löschen von Dateien:: Dateien werden mit dem Befehl "rm" (remove) gelöscht. Zum Löschen von Verzeichnissen wird dieser Befehl mit der Option "-r" verwendet. Es gibt hier aber keine Sicherheitsvorkehrungen (wie einen "Papierkorb" oder ähnliches). Grundsätzlich sind gelöschte Daten für immer verloren. Man ist also selbst dafür verantwortlich, nicht versehentlich seine Daten zu löschen. Jemand sagte einmal sinngemäß, Linux gebe einem an dieser Stelle eine geladene Pistole in die Hand, und schütze einen nicht davor, wenn man sich dann damit in den Fuß schieße. Man sollte mit "rm" also vorsichtig sein.
Ein Befehl "wipe" löscht Dateien noch sicherer als "rm", indem die Daten der Dateien zusätzlich noch überschrieben werden. Neben "wipe" gibt es noch "shred", das eine ähnliche Funktion wie "wipe" erfüllt.
Es gibt eine Menge Optionen zu den Shell-Befehlen. Man erhält zu ihnen Hilfe, indem man "man", und dann den Namen des Befehls eingibt ("man" steht für "manual"), wie zum Beispiel "man ls".
Der Befehl "ls -lisa somefile" kann weitere Informationen über die Datei "somefile" anzeigen, insbesondere ihre Größe.
Im Terminal gibt es einige besonders wichtige Tastenkombinationen
Bash hat zwei Eigenschaften, die die Benutzung besonders erleichtern:
Außerdem können in der Shell einige spezielle Symbole verwendet werden:
Also bedeutet
mv ./myfile.txt ~
soviel wie: "Verschiebe die Datei 'myfile.txt' aus dem aktuellen Verzeichnis in mein Home-Verzeichnis."
Das Symbol "&" kann an einen Befehl angehängt werden, um das aufgerufene Programm in einer sogenannten "Sub-Shell" zu starten und die aktuelle Shell nicht zu blockieren. Zum Beispiel öffnet der Befehl "firefox &" Firefox, und wartet nicht darauf, daß der Browser wieder geschlossen wird, sondern ermöglicht es, die aktuelle Eingabeaufforderung sofort weiter zu benutzen.
Mit dem Symbol ";" können mehrere Befehle in der Kommandozeile voneinander getrennt werden. Dadurch ist es möglich, mehrere Befehle in einer Zeile einzugeben: echo "one"; echo "two"
Leerzeichen, Shell-Expansion, Variablen und die Verwendung von Anführungszeichen
In der Shell trennt das Leerzeichen Dateinamen (sowie Befehle und Optionen) voneinander. Das bedeutet, daß Dateinamen, die selbst Leerzeichen enthalten, in Anführungszeichen gesetzt werden müssen, damit sie von der Shell richtig erkannt werden.
Bevor die Shell einen Befehl ausführt, führt sie etwas durch, das man "Shell-Expansion" nennt. Die Symbole, die in der Kommandozeile verwendet wurden (beispielsweise "*"), werden zu dem expandiert, wofür sie stehen (beispielsweise zu Dateinamen).
Außerdem können Variablen in der Shell verwendet werden:
a="Hallo Welt"; echo "$a"
Aufgrund der oben erklärten Bedeutung des Leerzeichens sollten Variablen bei ihrer Verwendung in der Shell so wie gezeigt in Anführungszeichen gesetzt werden. Sie könnten zu einer Zeichenkette expandiert werden, die Leerzeichen enthält, und solche Zeichenketten sollten, wie bereits erwähnt, in Anführungszeichen stehen.
Für einen Ausdruck findet keine Shell-Expansion statt, wenn er in einfache Anführungszeichen gesetzt ist: Das heißt, in dem Befehl "echo '$a'" wird die Variable nicht expandiert, sondern es wird die Zeichenkette "$a" wörtlich, bzw. buchstabengetreu ausgegeben: Dollarzeichen a.
Pipes und Umleitung der Ausgabe von Befehlen
Die Ausgaben von Bash-Befehlen können umgeleitet werden. Zum Beispiel gibt das Kommando
echo "Hallo Welt"
die Zeichenkette auf dem Bildschirm (auf der Konsole) aus. Die Ausgabe kann aber auch mit den Symbolen ">" und ">>>" in eine Datei umgeleitet werden (hier "test.txt" genannt - falls sich bereits eine Datei "test.txt" im Verzeichnis befindet, wird sie überschrieben):
echo "Hello World" > test.txt
Das Ergebnis kann man mit "cat test.txt" überprüfen.
Wichtig: Eine weitere Verwendung von ">" würde die Datei überschreiben. Mit ">>" dagegen wird weiterer Text an die Datei angehängt:
echo "N'Abend allerseits" >> test.txt
Danach würde die Ausgabe von "cat test.txt" also folgendermaßen aussehen:
Hallo Welt N'Abend allerseits
Die Ausgabe eines Kommandos kann auch mit dem Symbol "|" an ein anderes Kommando weitergeleitet werden. Eine solche Weiterleitung wird "Pipe" genannt.
Das Kommando "wc" kann Wörter, Zeilen oder Zeichen einer Zeichenkette zählen. Dieses Kommando wird typischerweise in einer Pipe verwendet, zum Beispiel um die Wörter in einer Zeichenkette zu zählen:
echo "Hallo Welt" | wc -w
Das Ergebnis ist "2" (da diese Zeichenkette zwei Wörter enthält).
Ein wenig Hintergrundwissen zur Erzeugung einer Pipe (das aber immer noch zum grundlegenden Bash-Wissen gehört): Das Betriebssystem weist einem Programm sogenannte "Streams" zu. Ein Programm besitzt einen Stream "stdout", in den es schreiben kann. Und einen Stream "stdin", aus dem es Daten lesen kann. Beim Erzeugen einer Pipe werden diese beiden Streams verwendet: Ohne weitere Zusätze schreibt das Kommando 'echo "Hallo Welt"' nach "stdout", was dazu führt, daß die Zeichenkette auf dem Bildschirm (im Terminal) angezeigt wird. Das Kommando "wc" liest Daten von seinem "stdin". Das Pipe-Symbol "|" leitet die Ausgabe von "echo" von dessen "stdout" zum "stdin" von "wc" um.
Entsprechend leiten die Symbole ">" und ">>" die Ausgabe von "echo" von dessen "stdout" in eine Datei um.
Ein weiteres Beispiel: Das Werkzeug "bc" kann Berechnungen durchführen (das Programmpaket, zu dem es gehört und das Bestandteil der Distribution sein sollte, muß möglicherweise zunächst installiert werden). Die Zeile
echo "25 * 5" | bc
erzeugt die Ausgabe "125".
Längere Ausgaben eines Kommandos werden häufig an ein kleines Programm namens "less" weitergeleitet, das ist ein Textbetrachter für die Konsole. Zum Beispiel:
echo "Hello World" | less
oder
ls -lisa /home/username | less
Mit den Cursor-Tasten "Up" und "Down" kann man sich in "less" bewegen. Mit "q" beendet man das Programm.
Kurze Einführung in das Schreiben von Bash-Skripten
Shell-Befehle können nicht nur in der Kommandozeile eingegeben werden, sondern auch in eine Textdatei geschrieben werden, die anschließend als Skript ausgeführt wird. Bash ist also eine Programmiersprache. Bash-Skripte werden unter anderem häufig als Installationsroutinen verwendet. Sie spielen auch eine wichtige Rolle beim Linux-Bootvorgang.
Es folgt eine kurze Einführung, wie man Bash-Skripte schreiben und ausführen kann. Angenommen, man hat eine Textdatei namens "beispielskript.sh" mit folgendem Inhalt:
#!/bin/bash # beispielskript.sh - Beispiel für ein Bash-Skript. echo "Zaehlen wir doch mal bis zehn:" for (( i=1; i<=10; i++ )) do echo "$i" done
Anschließend kann man die Textdatei mit diesem Kommando ausführbar machen:
chmod +x beispielskript.sh
Danach kann man das Skript mit folgendem Kommando ausführen:
./beispielskript.sh
Es gibt (von mir) eine eigene Seite über Bash, auf der diese Themen ausführlicher erklärt werden.
Text zu kopieren und einzufügen, funktioniert unter Linux folgendermaßen: Wenn man Text mit der Maus markiert, wird der Text automatisch in einen systemweiten Textpuffer kopiert. Solange der Text noch markiert ist, kann der Cursor an eine andere Stelle oder sogar in ein anderes Fenster einer anderen Anwendung positioniert werden. Durch Drücken der mittleren Maustaste wird der Text dann aus dem Textpuffer in das Fenster eingefügt, das an der Position des Cursors den Fensterfokus hat.
Aber auch das von Windows bekannte "Ctrl+c, Ctrl+v" funktioniert häufig. Offenbar ist das ein zweiter Mechanismus.
Hier ein kurzer Überblick über die Linux-Software, die ich benutze:
vim ("vi improved") ist ein leistungsfähiger Texteditor. Er ist ein Open-Source-Klon des Unix-Editors "vi" ("vi" für "visual"). Normalerweise wird er auf der Konsole ausgeführt. Eine Voraussetzung, um vim zu benutzen, ist es daher, das Terminalprogramm so zu konfigurieren sein, daß die Buchstaben im Terminal gut lesbar sind.
Zu Beginn wirkt vim sehr ungewohnt, aber mit ein wenig Übung wird die Benutzung tatsächlich recht einfach.
Die Konsolenversion von vim ist standardmäßig auf allen guten Linux-Distributionen installiert (und diejenigen, auf denen er standardmäßig nicht installiert ist, die sind nicht gut). Es gibt auch eine grafische Version mit einer GTK-Oberfläche namens "gvim", aber unter Linux ist die Konsolenversion völlig ausreichend. Diese Seite wurde mit vim auf der Konsole geschrieben. Wenn die Schrift der Konsole richtig konfiguriert ist, ist es wie gesagt gar kein Problem, darin ernsthaft Texte zu schreiben.
Es gibt zwei grundlegende Modi in vim: Einen "Kommandomodus" und einen "Einfügemodus".
vim wird mit
vim textdatei.txt
im Kommandomodus gestartet. Das bedeutet, daß Text nur eingegeben werden kann, wenn in den Einfügemodus gewechselt wird. Dies geschieht durch Drücken der Taste "i". Durch Drücken der Taste "Escape" wechselt man zurück in den Kommandomodus.
Eine Datei kann gespeichert werden, indem man im Kommandomodus ":w" eingibt.
":sav f2.txt" führt "Speichern unter" aus und überschreibt dabei ebenfalls eine bereits vorhandene Datei.
vim kann ohne Speichern beendet werden, indem man im Kommandomodus ":q!" eingibt. ":wq" speichert die Datei und beendet dann vim, was in dieser Kombination ziemlich praktisch ist.
Der Cursor kann mit den Tasten "h, j, k, l" "nach links, unten, oben, rechts" bewegt werden, aber auch die Cursor-Tasten funktionieren.
"^" bewegt den Cursor im Kommandomodus an den Anfang der Zeile, "$" bewegt ihn an das Ende der Zeile. "w" bewegt den Cursor um ein Wort vor, "b" bewegt ihn um ein Wort zurück. "gg" bewegt den Cursor im Kommandomodus an den Anfang des Dokuments, "G" bewegt ihn an das Ende des Dokuments.
Wenn man im Kommandomodus "%" drückt, während sich der Cursor auf einer Klammer befindet, wird der Cursor zur entsprechenden Klammer bewegt.
Das Kopieren und Einfügen von Text funktioniert folgendermaßen:
"y$" kopiert im Kommandomodus den Text bis zum Ende der aktuellen Zeile in einen Textpuffer. "10y$" kopiert die nächsten zehn Zeilen. "yG" kopiert den Text von der Cursorposition bis zum Ende des Dokuments. "yw" kopiert ein Wort, "5yw" die nächsten 5 Wörter.
Anschließend wird "p" verwendet, um den Text aus dem Puffer an der aktuellen Cursorposition in das Dokument einzufügen.
Es gibt außerdem einen "Visual-Modus", in den man durch Drücken von "v" gelangt. In diesem Modus kann Text ausgewählt werden, beispielsweise mit den Cursor-Tasten. Dann können Befehle wie "y" (kopieren), aber auch "d" oder "x" (ausschneiden) auf den ausgewählten Text angewendet werden. Durch erneutes Drücken von "v" kann der Visual-Modus wieder verlassen werden.
Man kann auch mit "i" in den Einfügemodus wechseln, und dann Text aus anderen Anwendungen in das Dokument kopieren, indem man die mittlere Maustaste drückt.
"dd" löscht die aktuelle Zeile. "dw" löscht das aktuelle Wort bis zu seinem Ende. Auf diese Weise gelöschter Text wird ebenfalls kopiert und kann daher mit "p" an anderer Stelle wieder eingefügt werden.
"u" macht die letzte Aktion rückgängig.
"Ctrl+r" stellt die zuletzt rückgängig gemachte Aktion wieder her.
"/expression" durchsucht das Dokument nach "expression".
Während der Suche sucht "n" nach dem nächsten Vorkommen des Ausdrucks.
Wenn der Such-Ausdruck Sonderzeichen wie "." oder "/" enthält, muß davor ein "\" geschrieben werden.
Mit dem Kommando ":set ignorecase" wird die Groß-/Kleinschreibung bei Suchvorgängen abgeschaltet.
:% s/expression1/expression2/gc"
ersetzt "expression1" im gesamten Dokument durch "expression2", fragt den Benutzer aber vor jedem Ersetzen.
Mit ":set nu" werden Zeilennummern angezeigt, mit ":set nonu" werden sie wieder ausgeblendet.
"a" bewegt den Cursor hinter das aktuelle Wort und wechselt in den Einfügemodus.
"o" bewegt den Cursor eine Zeile nach unten und wechselt in den Einfügemodus.
"x" löscht das aktuelle Zeichen.
"r" ersetzt im Kommandomodus das aktuelle Zeichen durch ein anderes, ohne in den Einfügemodus zu wechseln.
"cw" löscht das aktuelle Wort und wechselt in den Einfügemodus.
"." wiederholt die Ausführung des letzten Kommandos.
"J" fügt die nächste Zeile an die aktuelle an (dieses Kommando wird häufiger verwendet, als man denkt).
":r textdatei.txt" lädt den Inhalt von "textdatei.txt" an der aktuellen Cursorposition in das Dokument.
"gU" ändert in Verbindung mit einer Cursorbewegung (wie "w") die Zeichen des Wortes in Großbuchstaben. "gu" ändert sie in Verbindung mit einer Cursorbewegung (wie "w") in Kleinbuchstaben.
Dies funktioniert auch mit anderen Cursorbewegungs-Kommandos, beispielsweise "gUG".
Die Optionen und Konfigurationen von vim werden in einer Datei "/home/username/.vimrc" gespeichert. (Auf älteren Systemen war auch manchmal die Datei "/home/username/.exrc" von Bedeutung.)
Eine Zeile
iab ts test
in "/home/username/.vimrc" bewirkt, daß, wenn das Wort "ts" im Dokument geschrieben und anschließend ein Leerzeichen eingegeben wird, das Wort durch "test" ersetzt wird.
Der Eintrag "set backspace=2" in "/home/username/.vimrc" bewirkt, daß die Backspace-Taste über den Anfang der aktuellen Zeile hinaus verwendet werden kann (was bei anderen Editoren das Standardverhalten ist).
Wenn sich vim zunächst nicht so verhält, wie man es erwartet, findet man im Internet wahrscheinlich eine Vorlage für eine Konfigurationsdatei mit einer Zeile, die das Problem löst (oder man fragt die KI nach so einer Zeile). vim ist also extrem anpassungsfähig und konfigurierbar.
"grep" ist ein häufig verwendetes Konsolenprogramm. Es filtert Textzeilen aus der Ausgabe anderer Programme. Es kann auch Zeilen aus Textdateien filtern. Betrachten wir dieses Kommando:
echo -e "one\ntwo\nthree\nfour\nthirty"
Es gibt "one two three four thirty" in fünf Zeilen aus. "\n" ist das Zeilenumbruch-Zeichen unter Linux.
Nun leiten wir die Ausgabe dieses Kommandos mit einer Pipe an "grep" weiter und lassen es alle Zeilen herausfiltern, die "th" enthalten:
echo -e "one\ntwo\nthree\nfour\nthirty" | grep "th"
Das Ergebnis ist "three thirty" (ausgegeben in zwei Zeilen).
"grep" hat eine Option "-i", die die Groß-/Kleinschreibung ignoriert.
Es gibt außerdem eine Option "-v", die dafür sorgt, daß "grep" nur diejenigen Zeilen ausgibt, die die übergebene Zeichenkette nicht enthalten. Mit der Option "-v" wäre das Ergebnis des Kommandos also "one two four" (ausgegeben in drei Zeilen).
"grep" wird häufig in Verbindung mit dem Kommando "find" verwendet, das die Namen aller Dateien und Verzeichnisse im aktuellen Verzeichnis und darunter ausgibt. Wenn man also nach einer Datei namens "test.txt" irgendwo im aktuellen Verzeichnis oder darunter sucht, kann man
find | grep "test"
ausführen, und es wird möglicherweise der Speicherort der Datei ausgegeben.
"grep" kann auch auf Dateien angewendet werden, etwa mit "grep -i hello test.txt". Dadurch werden alle Zeilen in der Datei "test.txt" ausgegeben, die "hello" oder "Hello" enthalten.
Es gibt außerdem eine Option "-r", mit der "grep" rekursiv nach Dateien sucht und deren Inhalte durchsucht.
Das Kommando "ps" listet die Prozesse auf, die momentan laufen. Ohne Optionen zeigt es nur die Prozesse des Benutzers an, die zu dessen Terminal gehören.
ps xa
listet alle Prozesse auf. Da diese Liste ziemlich lang sein kann, ist es sinnvoll, "grep" zusammen mit "ps" zu verwenden. Als Beispiel kann man einmal Firefox starten, ein weiteres Terminal öffnen und dann folgenden Befehl ausführen:
ps xa | grep -i firefox
Das sollte eine Reihe von Prozessen anzeigen, die zu Firefox gehören.
In der ersten Spalte der Liste wird die "process ID" (PID) jedes Prozesses angezeigt. Diese PID kann verwendet werden, um einen Prozeß zu beenden. Das ist zum Beispiel nützlich, wenn der Prozeß hängengeblieben ist, und nicht mehr reagiert. Das Kommando "kill -9" wird dann zusammen mit der Nummer des Prozesses (der PID) verwendet, um den Prozeß zu beenden.
Es gibt außerdem ein Kommando "killall", das zusammen mit dem Namen des Programms verwendet werden kann, zum Beispiel "killall firefox".
Eine grafische Liste der Prozesse, sortiert nach CPU- und Speicherverbrauch, wird mit dem Kommando
top
angezeigt. "top" kann durch Drücken von "q" beendet werden.
Heutzutage gibt es offenbar auch grafische Task-Manager, wie zum Beispiel "xfce4-taskmanager" für Xfce.
Oft reicht es nicht aus, Werkzeuge und Programme als normaler Benutzer auszuführen.
Um "root" zu werden, kann man in der Konsole das Kommando "su" ("su" für "substitute user" oder "switch user") ausführen. Nach Eingabe des "root"-Paßworts wird die Identität des Benutzers zu "root" geändert, und man kann dann mit Systemdateien arbeiten. Natürlich sollte jemand, der den vollständigen Systemzugriff von "root" besitzt, Vorsicht walten lassen, sonst können Daten verloren gehen, oder Dateien beschädigt werden. Es kann sogar geschehen, daß so wichtige Systemdateien gelöscht werden, daß das System gar nicht mehr arbeitet, und eine Neu-Installation erforderlich ist. Obwohl mir die Befugnisse von "root" schon klar sind, ist mir das im Laufe der Jahre trotzdem vielleicht zwei- oder dreimal passiert (einmal durch einen Schreibfehler bei einem auf ein Verzeichnis angewendeten "rm"-Befehl), das kann also schon vorkommen.
Es gibt zudem die Möglichkeit für einen normaler Benutzer, bestimmte Kommandos als "root" auszuführen, ohne für längere Zeit "root" zu werden. Der Benutzer kann "sudo einbefehl" eingeben, und wenn vorher festgelegt wurde, daß er berechtigt ist, "einbefehl" als "root" auszuführen, kann er es tun.
"root" kann mit dem Kommando "visudo" festlegen, welche Kommandos Benutzer mit "sudo" ausführen dürfen. Dieses Kommando ändert unter OpenSuSE Linux die Datei "/etc/sudoers". Um "visudo" zu verwenden, sollte "root" mit der Bedienung des Editors "vim" vertraut sein - wie das geht, wurde in einem anderen Abschnitt oben beschrieben.
Die Einträge in der Datei "/etc/sudoers" haben folgendes Format:
username computername= NOPASSWD: command
Dabei gibt das Kommando "hostname" den Namen des Computers an.
Wenn "root" mit "visudo" die Zeile
john linuxbox= NOPASSWD: /usr/sbin/userdel
einträgt, kann der Benutzer namens "john" das Kommando "/usr/sbin/userdel" als "root" auf dem Computer namens "linuxbox" ausführen, indem er "sudo /usr/sbin/userdel" eingibt.
Auf meinem System kümmere ich mich kaum um "sudo", sondern werde einfach mit "su" zu "root".
".zip"-Dateien können mit folgendem Kommando entpackt werden:
unzip somefile.zip
Eine neue ".zip"-Datei kann aus einem Verzeichnis mit folgendem Kommando erzeugt werden:
zip -r archive.zip somedirectory
Unter Linux liegen Archivdateien häufig im Format ".tar.gz" oder ".tgz" vor (tar: "Tape Archive", gz von "gzip"). Diese Dateien können mit folgendem Kommando entpackt werden:
tar -xzvf archive.tar.gz
Es gibt auch Archive im Format ".tar.bz2". Sie können mit folgendem Kommando entpackt werden:
tar -xjvf Datei.tar.bz2
Und es gibt Archive im Format ".tar.xz". Sie können mit folgendem Kommando entpackt werden:
tar -xf Datei.tar.xz
Ein ".tar.gz"-Archiv kann aus einem Verzeichnis mit folgendem Kommando erzeugt werden:
tar -czvf archive.tar.gz somedirectory
"mc", der Midnight Commander, kann ebenfalls mit Archivdateien umgehen. Man kann damit Archive durchsuchen oder einzelne Dateien oder Verzeichnisse daraus extrahieren. Man kann damit auch Dateien oder Verzeichnisse zu bereits vorhandenen Archiven hinzufügen.
Das Kommando "df" zeigt die eingehängten Dateisysteme, wieviel Speicherplatz von ihnen belegt ist, und wieviel noch verfügbar ist.
Das Kommando "du" zeigt, wieviel Speicherplatz die Dateien im aktuellen Verzeichnis und darunter belegen. Man kann ihm auch den Namen eines anderen zu untersuchenden Verzeichnisses übergeben. Es gibt die Option "-h", um die Ausgabe von "du" für Menschen besser lesbar zu machen. Typischerweise wird "du" also so verwendet:
du -h .
Dabei steht der Punkt für das aktuelle Verzeichnis.
Es gibt einen Mechanismus, mit dem die Shell nach Kommandos sucht.
In der Shell kann es Variablen geben. Sie können zum Beispiel folgendermaßen definiert und verwendet werden (der Code sollte hier jeweils in einer eigenen Zeile eingegeben werden):
a="Hello" echo "$a"
Man beachte, daß links und rechts vom Gleichheitszeichen keine Leerzeichen stehen (wenn dort welche wären, würde es nicht funktionieren).
Man beachte auch, daß die Variable bei ihrer Verwendung mit dem Dollarzeichen davor ("$a") verwendet wird, aber bei ihrer Definition ohne dieses Zeichen.
Und es ist eine gute Idee, bei der Verwendung Anführungszeichen um die Variable zu setzen ("$a"), wegen der Shell-Expansion (die weiter oben bereits beschrieben wurde).
Es gibt auch Systemvariablen, die standardmäßig vordefiniert sind. Es gibt eine Systemvariable "$PATH". Auf meinem System liefert die Ausführung von "echo "$PATH"" folgendes Ergebnis:
/home/user/bin:/usr/local/bin:/usr/bin:/bin
Die Systemvariable "$PATH" enthält also die Verzeichnisse, in denen die Shell nach Befehlen sucht, getrennt durch Doppelpunkte.
Das bedeutet: Wenn "." nicht in "$PATH" enthalten ist, kann ein Kommando (zum Beispiel ein Skript namens "somescript.sh"), das sich im aktuellen Arbeitsverzeichnis befindet, nicht einfach durch Eingabe seines Namens ausgeführt werden. Stattdessen müssen ein Punkt und ein Schrägstrich vor seinem Namen eingegeben werden. Dadurch teilt man der Shell mit, daß sich der Befehl, der ausgeführt werden soll, im aktuellen Arbeitsverzeichnis befindet. Wenn man also
./somescript.sh
schreibt, wird das Skript ausgeführt (vorausgesetzt, daß das Datei-Attribut "ausführbar" gesetzt ist - was mit "chmod +x somescript.sh" bewirkt werden kann).
Standardmäßig ist auch das Verzeichnis
/usr/local/bin
in der "$PATH"-Variable genannt. Es ist also eines der Verzeichnisse, in denen die Shell nach Befehlen sucht.
Wenn man ein Skript geschrieben hat, es ausführbar gemacht hat, und möchte, daß alle Benutzer es auf der Konsole ausführen können, dann kann man das Skript einfach als "root" nach "/usr/local/bin" kopieren. Dann findet die Shell es unabhängig vom aktuellen Arbeitsverzeichnis des Benutzers.
Nochmal ein Beispiel dazu: "john" befindet sich in "/home/john/1". Dort hat er ein Skript "hello.sh" geschrieben. Er macht es ausführbar: "chmod +x hello.sh". Nun kann es es mit "./hello.sh" ausführen. Er will es aber auch aus anderen Verzeichnissen heraus ausführen können. Also wird er "root" ("su"), und kopiert das Skript nach "/usr/local/bin":
cp /home/john/1/hello.sh /usr/local/bin
Danach wird "john" wieder zum normalen Benutzer: Er drückt "Strg+d", um den "root"-Modus zu verlassen. Nun ist er wieder "john". Er wechselt in ein anderes Verzeichnis: "cd /home/john/2". Und nun kann er auch da sein Skript ausführen: "hello.sh". Nun ohne das "./" davor, weil es sich ja nicht im aktuellen Arbeitsverzeichnis befindet. Stattdessen findet das System es in "/usr/local/bin".
Wenn man das so in Worten beschreibt, klingt es irgendwie kompliziert. Aber solche Dinge macht man ständig, wenn man Linux benutzt: Dateirechte ändern, "root" werden, Dateien kopieren, wieder normaler Benutzer werden, Verzeichnisse wechseln, Programme oder Skripte ausführen - alles ganz normal. Typische Linux-Benutzung.
Das Shell-Kommando "which" teilt mit, in welchem Verzeichnis sich ein verfügbares Kommando befindet. Zum Beispiel gibt das Kommando "which ls" die Zeichenkette "/usr/bin/ls" aus.
Wie bereits erwähnt, sollten größere Skripte ausführbar gemacht, und dann nach "/usr/local/bin" kopiert werden.
Für kürzere Befehle kann ein sog. "alias" erstellt werden. Zum Beispiel definiert der Befehl
alias show_usrlocalbin="cd /usr/local/bin;ls"
ein "alias" namens "show_usrlocalbin", das den Teil in Anführungszeichen ausführt. Nachdem man also den "alias"-Befehl definiert hat, kann man in der Konsole einen neuen Befehl "show_usrlocalbin" verwenden, der den Inhalt des genannten Verzeichnisses anzeigt. Natürlich ist das nur ein Beispiel für die Verwendung von "alias".
Vorerst ist der neue Befehl nur in der aktuellen Shell verfügbar. Wenn man also das Terminal schließt, ist das "alias" wieder weg. Um es dauerhaft zu definieren, kann es in die Datei
/home/username/.bashrc
geschrieben werden. Diese Datei wird jedes Mal ausgeführt, wenn die Shell gestartet wird, d.h. wenn ein Terminal geöffnet wird.
Der Punkt am Anfang des Dateinamens ".bashrc" bedeutet, dass die Datei versteckt ist. Mit einem einfachen "ls" ist die Datei nicht sichtbar. "ls -lisa" zeigt die Datei jedoch an, sie ist also nicht vollständig vor dem Benutzer verborgen.
Bei solchen versteckten Dateien handelt es sich meist um Konfigurationsdateien. In der Regel bedinden sie sich in dem Verzeichnis "/home/username".
Heute gibt es auch oft ein Verzeichnis "/home/username/.config", das benutzerspezifische Konfigurationsdateien von Anwendungen enthält.
Die "alias"-Zeile in "/home/username/.bashrc" zu schreiben, stellt den neuen Befehl dem jeweiligen Benutzer zur Verfügung.
Sie als root in die Datei
/etc/bash.bashrc.local
zu schreiben, macht den Befehl für alle Benutzer des Systems verfügbar. Es kann sein, daß diese Datei zunächst nicht vorhanden ist. Dann kann man sie erstellen. Alternativ kann die Datei "/etc/bash.bashrc" verwendet werden.
Unter Linux ist das Zeichen für das Ende einer Zeile ("End of Line") "\n".
DOS und Windows verwenden ein anderes Zeichen. Beim Austausch von Textdateien mit diesen Systemen müssen die Dateien daher neu formatiert werden. Dies geschieht mit den Befehlen "unix2dos" und "dos2unix".
Textdateien haben auch eine bestimmte Kodierung. Dies ist von Bedeutung für Textdateien in anderen Sprachen als Englisch. Zum Beispiel enthalten Textdateien in deutscher Sprache Vokale wie "ä" und "ö".
Die häufigsten Kodierungen sind "ASCII", "ISO-8859-1" und "UTF-8" (was mit Unicode zusammenhängt).
Der Befehl "file textdatei.txt" gibt Auskunft über die Kodierung einer Textdatei.
Die Kodierung kann mit dem Befehl "recode" geändert werden.
Beispielsweise kann der folgende Befehl verwendet werden, um eine Textdatei von "ISO-8859-1" auf "UTF-8" neu zu codieren:
recode ISO-8859-1..UTF-8 textdatei.txt
Auf modernen Linux-Systemen ist die standardmäßige Zeichenkodierung in der Regel "UTF-8". Diese Kodierung kann mit Zeichen wie deutschen Vokalen ohne weiteres umgehen.
Neben Dateien und Verzeichnissen kann es in den Verzeichnissen eines Linux-Dateisystems sogenannte "symbolische Links" geben. Das sind kleine Dateien, die auf andere Dateien oder Verzeichnisse verweisen. Der Zugriff auf die Links wird dann auf die Zieldateien und -Verzeichnisse umgeleitet.
Wenn es zum Beispiel im Verzeichnis "/home/username" eine Datei "test.txt" gibt, die mit dem Befehl
echo "Hello" > /home/username/test.txt
erstellt wurde, dann kann ein Link mit dem Namen "linktotest" mit
ln -s /home/username/test.txt /home/username/linktotest
erstellt werden (bei dem Befehl "ln -s" also "erst das Ziel, dann den Link" schreiben). Danach kann der Inhalt von "test.txt" in eine Datei "test2.txt" kopiert werden, indem man den Link verwendet:
cp -v /home/username/linktotest /home/username/test2.txt
Es wurde dann also über den symbolischen Link "linktotest" auf die Datei "test.txt" Zugriff genommen.
Hinweis: Wenn ich auf meinem System den symbolischen Link "linktotest" mit "rm -v /home/username/linktotest" lösche, dann ist die Zieldatei "test.txt" davon nicht betroffen.
Der Befehl "date" zeigt Datum und Uhrzeit auf der Konsole. In der grafischen Oberfläche gibt es natürlich auch eine Uhr in der Taskleiste. Die Systemuhr wird über Dienste über das Internet aktualisiert.
Der Befehl "cal" zeigt einen kleinen "grafischen" Kalender auf der Konsole. "cal -3" erweitert den Kalender auf die drei Monate in der Nähe. Der Befehl kann auch den Kalender anderer Jahre (oder den dieses Jahres) anzeigen, das heißt, es wird dann jeweils der Kalender für alle 12 Monate ausgegeben. Man muß also darauf achten, nicht einfach "cal 3" zu schreiben, da das den Kalender des Jahres 3 nach Christus von vor mehr als 2.000 Jahren ausgeben würde.
Wie oben erwähnt, würde ein Benutzer, um eine Datei in seinem Home-Verzeichnis zu finden, zunächst mit dem Befehl "cd ~" in sein Heimatverzeichnis "/home/username" wechseln. Dann würde er folgenden Befehl ausführen:
find | grep -i teil_eines_dateinamens
Wobei "teil_eines_dateinamens" für einen Teil des Namens einer Datei steht, die der Benutzer sucht (der vollständige Name der Datei wäre natürlich auch möglich).
Es gibt viele Optionen für den "find"-Befehl. Wird der Befehl ohne Optionen aufgerufen, gibt er die Namen aller Dateien und Verzeichnisse aus, die sich in und unter dem aktuellen Arbeitsverzeichnis befinden (das ist dasjenige, in dem "find" aufgerufen wurde). Indem man Optionen verwendet, kann "find" eine ganze Reihe von speziellen Dingen tun, zum Beispiel kann es nur solche Dateien auflisten, die erst nach einem bestimmten Zeitpunkt angelegt wurden, und so weiter. Aber ich kann hier nicht auf alle Details dieser Optionen eingehen.
Wenn man als "root" nach einer bestimmten Datei im gesamten Verzeichnisbaum sucht (es handelt sich dabei wahrscheinlich um eine Systemdatei), gibt es dafür noch eine andere Möglichkeit. Alle Dateien des Linux-Systems können in eine Datenbank geschrieben werden, die vom System gespeichert wird. Dies geschieht als "root" mit dem Befehl:
updatedb
Nachdem mit diesem Befehl die Daten über die Dateien und Verzeichnisse in die Datenbank geschrieben wurden, ist es möglich, eine Datei oder ein Verzeichnis mit folgendem Befehl zu finden:
locate teil_eines_dateinamens
Heute werden die meisten Geräte wie zum Beispiel USB-Sticks automatisch eingehängt, wenn sie an den Computer angeschlossen werden. Das heißt, für sie wird ein Verzeichnis im Verzeichnisbaum erstellt, auf deren Inhalt dann dort zugegriffen werden kann.
Auf meinem OpenSuSE 15.6-System werden diese Verzeichnisse automatisch unterhalb des Verzeichnisses "/var/run/media/username" erstellt, oder auch entfernt.
In einigen Fällen kann es jedoch nützlich sein, zu wissen, wie man Geräte von Hand einhängt oder aushängt ("mountet" oder "unmountet").
Wenn man den Befehl "mount" ohne Optionen ausführt, zeigt er die eingehängten Geräte an. Es gibt auch noch einen Befehl "lsusb", der Informationen über die eingehängten USB-Geräte ausgibt.
Der Befehl zum Aushängen von Geräten heißt "umount". Zu beachten ist, daß der Befehl kein "n" enthält: Es heißt wirklich "umount".
Sofern es in den automatisch erstellten Verzeichnissen unterhalb von "/var/run/media/username" keine Lese- oder Schreibaktivität mehr gibt, ist es auch möglich, "umount" auf diese Verzeichnisse anzuwenden.
In einigen Fällen kann es sinnvoll sein, Geräte manuell zu mounten. Dies geschieht typischerweise als "root". Der "mount"-Befehl benötigt dann die Informationen über das Gerät: Sein Dateisystem, seinen Geräteknoten ("device node", der sich irgendwo im Verzeichnis "/dev" befindet), und das Verzeichnis, in dem der Inhalt eingehängt werden soll.
USB-Sticks bis zu 32 GB Speicher verwenden häufig das alte Windows-Dateisystem "FAT32". Unterstützt wird dies durch "mount" mit der Option "-t vfat".
Die Option für Linux-Partitionen (auf externen Geräten, die gemountet werden sollen) ist oft "-t ext3" oder "-t ext4".
Oft ist es möglich, zum Beispiel ".iso"-Dateien zu mounten, und ihre Inhalte in dem Verzeichnis, wo sie gemountet wurden, zu untersuchen oder aus diesem Verzeichnis herauszukopieren.
Der "mount"-Befehl, um so eine ".iso"-Dateien zu mounten, wäre:
mount -t iso9660 -o loop,ro abbilddatei.iso verzeichnis
In den alten Linux-Zeiten, als es üblicher war, Geräte von Hand zu mounten, wurden die allgmeinen Informationen der Geräte in eine systemweite Datei namens
/etc/fstab
geschrieben. Auf diese Weise wurde das Schreiben des mount-Befehls auf der Konsole einfacher, da die Geräteinformationen für die Optionen des Befehls aus dieser Datei gelesen werden konnten.
Die genannte Datei existiert auf heutigen Linux-Systemen immer noch, und es ist auch immer noch möglich, Geräteinformationen dort zu speichern.
Es scheint so, daß die Systemfunktion, um Geräte automatisch zu mounten und zu umounten, deaktiviert ist, wenn die Geräte dort aufgelistet sind.
Die Zeilen in der Datei "/etc/fstab" haben ein bestimmtes Format. Aber ich brauche dieses Format hier nicht zu beschreiben, denn diese Informationen kann man leicht an anderer Stelle im Internet finden.
Auf OpenSuSE Leap (bis Version 15.6) können Softwarepakete mit dem Systemtool "YaST2" der Distribution verwaltet werden. Auf der Konsole gibt es auch das High-Level-Software-Management-Tool "zypper"
"apt" ist das Hauptsoftware-Installationstool auf Ubuntu. Es ist ein Konsolenprogramm, mit dem man "dpkg"-Pakete verwalten kann. Es gibt auch die grafischen Tools "Synaptic" und "Ubuntu Software Center", aber es scheint unter Ubuntu immer noch üblich zu sein, "apt" auf der Konsole zu nutzen.
Im Gegensatz zu Ubuntu verwendet OpenSuSE Softwarepakete im "rpm"-Format. Das traditionelle Tool zur Verwaltung dieser Pakete (als "root") heißt "rpm". Hier sind einige nützliche "rpm"-Befehle:
Die Installation von Softwarepaketen hängt häufig davon ab, daß andere Softwarepakete bereits installiert sind. Im Allgemeinen sollten alle Abhängigkeiten erfüllt sein, das heißt, ein Paket sollte nur installiert werden, wenn die Pakete, von denen es abhängt, bereits installiert sind. YaST2 kann sich um diese Abhängigkeiten kümmern, also alle anderen, benötigten Softwarepakete gleich mitinstallieren.
Es kann vorkommen, daß man ein rpm-Paket von Hand in ein Verzeichnis heruntergeladen hat, und daß man es nun (entgegen den Empfehlungen des Systems) installieren möchte, obwohl die Abhängigkeiten nicht erfüllt sind. Dies kann man (als "root") mit folgendem Befehl tun:
rpm -i [paket.rpm] --nodeps --force
Die Option "---force" kann auch mit "rpm -e" angewendet werden, also dann, wenn das System einen daran hindern möchte, ein bestimmtes Paket zu deinstallieren.
Mit dem "Midnight Commander" (mc) ist es möglich, "rpm"-Dateien zu durchsuchen, und einzelne Dateien daraus zu extrahieren.
Aber auch der folgende Befehl kopiert alle Dateien aus einem "rpm"-Paket in das aktuelle Verzeichnis:
rpm2cpio package.rpm | cpio -i --make-directories
Unter Linux ist der Window Manager der Desktop-Umgebung nicht das einzige Programm, das den grafischen Desktop erzeugt. Stattdessen ist der Fenstermanager ein Client für ein anderes Programm namens X-Server. Die meisten Linux-Systeme verwenden einen X-Server namens "X.Org". Und es gibt ein Protokoll namens "X11". Einige Systeme verwenden stattdessen ein neueres Protokoll namens "Wayland", aber bis jetzt konnte es "X11" nicht vollständig ersetzen.
Die Hauptkonfigurationsdatei des X-Servers war früher "/etc/X11/xorg.conf". Heute ist ihr Inhalt auf mehrere Dateien verteilt, die sich in einem Verzeichnis
/etc/X11/xorg.conf.d
befinden. In diesem Verzeichnis befinden sich also die Konfigurationsdateien für die Grafikkarte, den Monitor und die Tastatur. Meist schreiben die grafischen Programme der Systemsteuerung automatisch die passenden Einstellungen in diese Dateien. Normalerweise sollte der Benutzer diese Dateien also eher nicht von Hand verändern (es sei denn, er weiß, was er tut).
Es gibt eine Reihe von kleinen und alten, aber leistungsfähigen Programmen, die einen auf bestimmte Funktionen des X-Servers zugreifen lassen:
Bevor man auf den grafischen Desktop gelangt, wird zunächst ein Anmeldebildschirm angezeigt. Dieser wird von einem speziellen Programm namens "Display Manager" erzeugt. Die verschiedenen Desktop-Umgebungen verfügen in der Regel über ein jeweils eigenes Programm dieser Art. Es gibt zum Beispiel "KDM" (KDE), "GDM" (GNOME), "LightDM" (Xfce) und "SDDM" (LXQt).
Mit dem "Display Manager" hängt typischerweise auch die sogenannte "Autologin"-Funktion zusammen. Diese Funktion ermöglicht es, sich als ein bestimmter Benutzer automatisch anzumelden, ohne ein Passwort eingeben zu müssen. Ich erkläre hier nicht, wie diese Funktion aktiviert wird, denn das hängt vom verwendeten Display Manager ab. Im Allgemeinen ist es aus Sicherheitsgründen sowieso besser, die Autologin-Funktion lieber nicht zu verwenden, sondern immer Benutzername und Passwort einzugeben.
Programme können automatisch zusammen mit dem grafischen Desktop gestartet werden. Dafür muß eine sogenannte ".desktop"-Datei in dem Verzeichnis
/home/username/.config/autostart
erstellt werden. Der Inhalt einer ".desktop"-Datei hat ein bestimmtes Format. Wenn man sich andere ".desktop"-Dateien anschaut, kann man leicht herausfinden, wie dieses Format aussieht.
Auf Xfce-Systemen kann zudem
/etc/xdg/autostart
ein systemweites Autostart-Verzeichnis sein.
Für die Wiedergabe von Videos nutzen die großen, bekannten, kommerziellen Internetplattformen einfach den Browser (z.B. Firefox), und stellen einen eigenen Videoplayer zur Verfügung.
Für die Wiedergabe von Videos außerhalb des Webbrowsers ist "VLC-Player" unter Linux beliebt.
Ich verwende jedoch ein anderes (wahrscheinlich älteres) Programm namens "MPlayer". Es gibt viele Optionen für die "mplayer"-Befehl. Zum Beispiel:
Während der Wiedergabe kann "MPlayer" mit Tasten gesteuert werden:
"ffmpeg" ist ein leistungsstarkes Konsolenwerkzeug, um Mediendateien neu zu kodieren (was zum Beispiel die Grundlage für das Schneiden von Videos ist).
"mencoder" macht etwas Ähnliches, aber inzwischen bevorzugen die meisten Leute wohl "ffmpeg".
"kdenlive" ist eine größere grafische Anwendung, mit der man Videos bearbeiten kann.
"OBS Studio" ist eine größere grafische Anwendung, um Videos aufzunehmen, oder Live-Streams durchzuführen. Soweit ich weiß, kann es auch Bilder des Benutzer-Desktops mit der Webcam-Aufnahme des Benutzers kombinieren.
Der "Midnight Commander" (Shell-Befehl "mc") ist ein grafischer Dateimanager für die Linux-Konsole. Es sieht so ähnlich aus wie der alte "Norton Commander" für DOS, so daß er für heutige Verhältnisse also nicht so ansehnlich ist.
Trotzdem handelt es sich um ein ziemlich mächtiges Programm.
Zwei Verzeichnisse werden in zwei (Unter-)Fenstern gleichzeitig angezeigt, was die Verwaltung von Dateien schnell und bequem macht.
Zwei Dinge vorweg:
Einige häufig verwendete Tastenkombinationen in Midnight Commander sind:
Man kann Midnight Commander verwenden, um Archivdateien wie ".zip"-Dateien, ".tar.gz"-Dateien und so weiter zu durchsuchen. Auch ".rpm"-Dateien werden unterstützt. Wenn sich der Cursor auf der Archivdatei befindet, und ihre Dateiberechtigungen auf "nicht ausführbar" gesetzt sind, kann man die "Return"-Taste drücken, und sich dann innerhalb des Archivs bewegen. Dort können die üblichen Tasten wie "F5" und so weiter verwendet werden, so als ob der Speicherort nur ein weiteres Verzeichnis in der Verzeichnisstruktur wäre (zumindest ist das die Idee).
Auf Papier zu drucken, und Drucker überhaupt, haben in den letzten Jahren an Bedeutung verloren, da sich die Kommunikation immer mehr in Richtung von E-Mail und Web-Formularen bewegt.
Für die Installation und Verwaltung von Druckern sollten die Distribution grafische Programme zur Verfügung stellen.
Auf der Konsole gibt es zwei traditionelle Werkzeuge, die manchmal aber immer noch nützlich sein können:
(Es gibt auch "lp", das Rohdaten an einen Drucker sendet, aber das kann man heute als veraltet ansehen. Um etwas zu drucken, würde man heute eine größere Anwendung wie "LibreOffice Writer" verwenden.)
Auf vielen Linux-Systemen läuft im Hintergrund ein Drucker-Daemon namens "CUPS" ("Common Unix Printing System"). Er fungiert auch als lokaler Webserver. Daher kann man man mit einem Web-Client eine Verbindung zu ihm herstellen, um Drucker zu konfigurieren. Auf CUPS kann also zugegriffen werden, indem man mit einem Webbrowser wie Firefox an die Adresse "http://localhost:631" geht (also hierhin). Wenn der CUPS-Daemon aktiv ist, sollte es dort möglich sein, eine Reihe von Einstellungen für den, bzw. die Drucker vorzunehmen. Aber wie gesagt, es kann in der Distribution auch andere grafische Programme geben, mit denen man das tun kann.
Das Drucken auf Papier hat möglicherweise an Bedeutung verloren, aber das Scannen von Papierdokumenten hat es nicht. Unter Linux gibt es eine Anwendung namens "xsane", die sich praktisch um alle Aspekte des Scan-Prozesses kümmert.
Auf Linux-Systemen läuft im Hintergrund ein Dienst namens "cron daemon", der Programme zu vorgegebenen Zeiten selbstständig ausführen kann.
Der Cron-Daemon überprüft die folgenden Verzeichnisse auf Programme, die in den sogleich angegebenen Intervallen ausgeführt werden sollen:
/etc/cron.hourly/ /etc/cron.daily/ /etc/cron.weekly/ /etc/cron.monthly/
Wenn der Cron-Daemon etwas zu einem anderen Zeitpunkt oder in einem anderen Intervall tun soll, wird dies in der Datei
/etc/crontab
festgelegt. Zeilen in dieser Datei müssen in einem bestimmten Format sein. Ich erkläre das Format hier nicht, man findet diese Informationen im Internet.
Eine andere Möglichkeit, Programme zu anderen Zeiten auszuführen, ist der Befehl "at" in Kombination mit dem Daemon "atd". Wenn dieser Daemon läuft, können neben "at selbst die Befehle "atq" und "atrm" verwendet werden, um die Aufgaben-Warteschlange zu steuern. Hier sind Beispiele, wie man solche Aufgaben mit "at" festlegt:
at 15:20 -f /home/username/someprogram at now + 15 min -f /home/username/someprogram
Es können Probleme auftreten, wenn man versucht, grafische Programme mit "at" zu starten, da der Zugriff auf den grafischen Desktop des Benutzers verwehrt sein kann. Aufgaben mit "at" einzurichten, kann gegebenenfalls also mehr Schwierigkeiten bereiten, als man zunächst denkt.
Es gibt spezielle Dateien, die "Module" genannt werden, und die dem Kernel bestimmte Funktionen hinzufügen können. Dabei handelt es sich meist um Treiber für Hardwaregeräte. Module können an den Kernel angeschlossen, und wieder davon entfernt werden. Man verwaltet sie normalerweise als "root".
Der Befehl "lsmod" zeigt die Module, die derzeit an den Kernel angeschlossen sind.
"modprobe [Modulname]" stellt fest, ob das angegebene Modul im Moment an den Kernel angeschlossen ist, und wenn es das nicht ist, schließt es das Modul an den Kernel an.
"rmmod [Modulname]" entfernt das angegebene Modul vom Kernel. Dies kann unter Umständen dazu führen, daß der Kernel nach Ausführung des Befehls nicht mehr alles tun kann, was er davor konnte.
Wenn man z.B. den Soundtreiber entfernt, hat man keinen Sound. Logisch.
Bootloader (auch "Boot-Manager" genannt) sind die Programme, die für das Hochfahren ("Booten") des Betriebssystems verantwortlich sind.
Von einem laufenden Linux-System aus können Änderungen an der GRUB2-Konfiguration vorgenommen werden, die dann beim nächsten Start wirksam werden. Natürlich ist es mit Risiko verbunden, solche Änderungen vorzunehmen, denn wenn es falsch gemacht wird, kann es sein, daß das System nicht mehr bootet.
Auf OpenSuSE Leap 15.6 gibt es zum Beispiel eine Template-Datei namens
/etc/default/grub
in der solche Änderungen vorgenommen werden können (natürlich als "root"). Bevor man diese Datei ändert, sollte man auf jeden Fall eine Sicherheitskopie von ihr erstellen:
cp /etc/default/grub /root
In der Datei gibt es Zeilen mit Optionen für GRUB2.
Zeilen, die mit "#" beginnen, sind nur Kommentare, die ignoriert werden.
Auf meinem System sieht die wichtigste Zeile der Datei wie folgt aus:
GRUB_CMDLINE_LINUX_DEFAULT="splash=silent quiet security=apparmor mitigations=auto"
Das sind die Kernel-Optionen. Die Zeile muß genau in diesem Format sein. Das heißt insbesondere, es darf keine Leerzeichen vor oder hinter den Gleichheitszeichen ("=") geben.
Auf einigen Systemen kann es auch eine Kernel-Option "preempt=full" geben. Darüber, was diese Kernel-Optionen bewirken, und welche Optionen für das System am besten wären, sollte man sich im Vorfeld Klarheit verschafft haben, bevor man Änderungen an der Konfigurationsdatei vornimmt.
Wenn alle Änderungen abgeschlossen sind, können die Einstellungen aus der Vorlage-Datei in die Bootloader-Konfiguration mit folgendem Befehl geschrieben werden (der als "root" ausgeführt werden muß):
update-bootloader
(In älteren Distributionen lautete der entsprechende Befehl: "grub2-mkconfig -o /boot/grub2/grub.cfg")
Die eigentliche Konfigurationsdatei von GRUB2 ist also "/boot/grub2/grub.cfg". Diese Datei sollte jedoch nicht direkt bearbeitet werden. Stattdessen sollte man Änderungen nur wie oben beschrieben vornehmen, d.h. indem man die Template-Datei "/etc/default/grub" bearbeitet, und dann den Befehl "update-bootloader" ausführt.
Linux-Distributionen können an die Wünsche des Benutzers angepaßt werden. Sie enthalten grafische Programme, um zum Beispiel das Aussehen und das Verhalten der Fenste zu ändern. In der Desktop-Umgebung "Xfce4" findet man diese grafischen Programme in "xfce4-settings-manager".
Es gab eine Reihe von Dingen, die ich in meinen OpenSuSE-Distributionen für mich geändert habe. Also habe ich mir Notizen zu diesen Änderungen gemacht, das heißt, ich habe andere Webseiten (auf Englisch) über die Anpassung des Systems an meine persönlichen Bedürfnisse geschrieben. Das wären:
Natürlich braucht man einige Grundkenntnisse über das System im Allgemeinen, bevor man eigene Änderungen daran vornimmt. Ich hoffe, diese Seite "Wie man Linux benutzt" kann die dazu nötigen Informationen liefern.
Hier ist ein kurzer Überblick über einige Programmiersprachen, deren Programmierwerkzeuge (Interpreter, Compiler) Linux-Systeme dem Entwickler zur Verfügung stellen. Zu diesen Sprachen habe ich jeweils andere Webseiten (meist auf Englisch) geschrieben, die ich hier ebenfalls nenne:
Doch was ist dieses Linux überhaupt, und warum kann es (normalerweise) kostenlos heruntergeladen und verwendet werden?
Linux ist "freie Software", und verfolgt daher bei der Verteilung von Software an Benutzer einen ganz anderen Ansatz als proprietäre Software.
Und das kam so:
Es war einmal, in den 1970er Jahren, da arbeitete ein Programmierer namens Richard Stallman in einem Rechenzentrum irgendwo in den USA.
Da die Rechenleistung damals extrem gering und knapp war, mußten mehrere Programmierer an demselben Computer arbeiten.
Jede Person hatte ihren eigenen Arbeitsplatz und ihre eigene Tastatur (genannt "Terminal"), aber alle Tastaturen waren an einen einzigen Computer angeschlossen.
Diese Leute teilten sich auch die Software auf diesem Computer, und jeder, der es wollte, konnte den Source-Code lesen oder verändern.
Dann, eines Tages, kaufte das Rechenzentrum ein Programm eines externen Softwareunternehmens. Ähnlich wie Windows (das damals allerdings noch gar nicht existierte) handelte es sich um Closed-Source-Software. Also konnten die Mitarbeiter des Rechenzentrums (die Benutzer) seine Quellen nicht lesen oder das Programm verändern.
Immer mehr Unternehmen produzierten proprietäre Software, und immer mehr Programme, die nach diesem Prinzip produziert worden waren, wurden gekauft.
Richard Stallman war damit unzufrieden. Er wollte, daß Software wieder so sein sollte, wie er es vorher gekannt hatte, als jeder die Quellen lesen und verändern konnte.
Also wurde er Aktivist und gründete die "Free Software Foundation" ("Stiftung für freie Software").
Diese Stiftung sagte: "Wirtschaftsunternehmen mögen proprietäre Software herstellen, aber wir stellen unsere eigene Art von Software her, freie Software."
Im Deutschen kann man zwischen dem Wort "frei", also frei von Bindungen oder Zwängen, und dem Wort "kostenlos" unterscheiden. Der Ausdruck "freie Software" bezieht sich auf die erste Bedeutung, also "frei" im Sinne von "Freiheit".
Das bedeutet zugleich, daß freie Software nicht unbedingt kostenlos sein muß: Es kann sein, daß man sie von jemandem kauft, und dann für sie bezahlen muß.
Es war also das Anliegen der "Free Software Foundation", die Rechte des Computernutzers gegenüber den Herstellern von Hard- und Software zu stärken Bei freier Software sollte der Benutzer insbesondere vier Freiheiten haben. Der Benutzer sollte das Recht haben,
Proprietäre Software kann die Berechnungen, die auf dem Computer des Benutzers ablaufen, kontrollieren. freie Software ermöglicht es dem Benutzer, seine eigenen Berechnungen selbst zu kontrollieren.
Die "Free Software Foundation" entwickelte eine Lizenz für diese Art Software, die dem Computerbenutzer diese vier Freiheiten (oder Rechte) gewährt, die "GNU General Public License" (GPL).
Es ist zu beachten, daß diese Lizenz dem Benutzer auch das Recht gibt, die Software gegen Geld zu verkaufen (als Teil des Rechtes, die Software weiterzugeben). Das bedeutet, obwohl man heute freie Software an vielen Stellen im Internet kostenlos herunterladen kann, kann es sein, daß jemand anders versucht, einem die Software gegen Geld zu verkaufen, sei es in einem Geschäft oder im Internet. Nach der Lizenz ist er dazu berechtigt, und wenn man die Software von ihm kauft, muß man sie auch bezahlen.
Dann gründete die "Free Software Foundation" das "GNU Projekt", um selbst freie Software zu entwickeln. Viele Kommandozeilenprogramme für ein Betriebssystem wurden geschrieben, aber auch solche Programme wie "GNU Chess". Richard Stallman schrieb den leistungsfähigen Editor "GNU Emacs".
Das GNU Projekt wollte ein vollständiges freies Betriebssystem entwickeln.
Aber der Kernel des GNU Projekts war noch nicht fertig, als Linus Torvalds 1991 mit einem Projekt begann, um seinen eigenen Kernel namens "Linux" zu entwickeln.
Viele Entwickler unterstützten Linus Torvalds über das Internet, das sich gerade entwickelte.
Der Kernel "Linux" wurde schließlich benutzbar, und man fügte die Systemwerkzeuge des GNU Projekts hinzu. Auf diese Weise wurde ein freies unixartiges Betriebssystem für Intel-Prozessoren fertiggestellt. Es sollte eigentlich "GNU/Linux" heißen, aber da nur "Linux" kürzer ist, nennen die meisten Leute es nur so. Der Linux-Kernel verwendet ebenfalls die "GNU General Public License" (GPL, Version 2).
Die Art und Weise, neue Software zu entwickeln, unterscheidet sich also bei beiden Modellen:
Die Ausbreitung des Internets hat die Entwicklung komplexerer Programme in drastischer Weise gefördert. "Linux ist ein Kind des Internets."
Aus dem oben Gesagten folgt, daß Entwickler proprietärer Software sehr daran interessiert sind, Marktanteile zu gewinnen. Sie möchten ihre Programme so oft wie möglich verkaufen, weil sie auf diese Weise ihr Geld verdienen.
Für freie Software und ihre Entwickler haben Marktanteile dagegen überhupt keine Bedeutung.
Außerdem ist der Benutzer, der freie Software (insbesondere kostenlos) herunterlädt, niemandes Kunde.
"Der Kunde ist König" - Dieser Satz gilt möglicherweise für den Käufer proprietärer Software. Aber nicht für denjenigen, der freie Software heruntergeladen hat.
Wenn ihm die Software nicht gefällt, wenn sie nicht das tut, was er von ihr erwartet, wenn er sie nicht noch einmal herunterladen würde, dann spielt das für die freie Software einfach keine Rolle.
Wenn ein freies Programm so schlecht ist, daß niemand es benutzt, ist das dennoch ohne Bedeutung.
Das sollte man beachten, wenn man mit Linux umgeht. Man ist nicht Kunde (es sei denn, man bezahlt Unternehmen für Support-Dienstleistungen). Man ist daher nicht König. Man hat nur die vier Freiheiten (zu benutzen, zu lesen und zu verändern, und die Software weiterzugeben (sei es kostenlos oder gegen Geld)).
Wenn einem ein Programm des GNU/Linux-Betriebssystems nicht gefällt, sollte man sich nicht beschweren, es hat keinen Sinn.
Es wäre an einem selbst, es besser zu machen. Wenn man das nicht kann, weil einem die dazu nötigen Kenntnisse fehlen, oder die Zeit, bleibt einem nur, das Programm nicht zu benutzen (bis jemand anders es vielleicht verbessert).
Nun sollte der Grund dafür klar geworden sein, warum viele freie Linuxprogramme bis zu einem gewissen Grade unfertig, unschön, altmodisch oder experimentell wirken, und daß das daran liegt, daß ihre Entwicklung nicht auf den Prinzipien des Kapitalismus beruhte.
Daß eine Software frei ist, bedeutet nicht notwendigerweise, daß sie technisch besser ist. Es kann gut sein, daß proprietäre Software eine Aufgabe besser erfüllt. Dennoch bleibt dabei das Problem, daß proprietäre Software bewirken kann, daß der Benutzer die Kontrolle über seinen Computer verliert, und daß sie ihn z.B. ausspioniert.
Oder wie Linus Torvalds es ausgedrückt hat: "Software is like sex: It's better when it's free."
Richard Stallman erklärt die Zusammenhänge von freier Software (auf Englisch) hier.
In einem anderen Vortrag (an der Universität von Calgary (Kanada), 03.02.2009; auf Englisch) geht er zudem darauf ein, daß die Forderung nach den oben genannten "vier Freiheiten" sich nur auf Software beziehen könne, weil diese Freiheiten mit der Eigenart von Software zusammenhingen.
Nur bei kompilierter Software gibt es ein ausführbares Programm mit einem zugehörigen Source-Code, der gegebenenfalls zurückgehalten oder verändert werden kann. Nur Software und andere digitale Daten lassen sich leicht und schnell millionenfach kopieren und verbreiten.
Bei Sachen des täglichen Lebens wie etwa einem Tisch oder einem Stuhl ist das in der Form nicht der Fall. Ein Tisch selbst hat keinen Source-Code, und der Tisch selbst kann auch nicht ohne weiteres millionenfach kopiert werden. Es mag ein Fertigungsmuster (wie z.B. eine technische Zeichnung) für den Tisch geben, aber das wäre etwas anderes als der Tisch selbst.
Die Unausgewogenheit im Verhältnis zwischen Softwarehersteller und Softwarebenutzer und die Forderung nach den "vier Freiheiten" des Benutzers ist also eine Problematik, die es in dieser Form nur bei Computerprogrammen gibt, und die deshalb in der öffentlichen Diskussion noch nicht die notwendige Beachtung gefunden hat. Aber je weiter die Digitalisierung der Welt fortschreitet, desto wichtiger und drängender werden diese Fragen.
Zur Geschichte von Unix und Linux
Ebenfalls Anfang der 1970er Jahre brauchten die Informatiker, die in Rechenzentren arbeiteten, ein Betriebssystem für ihre Maschinen.
In den AT&T Bell Laboratories (USA) wurde daher das Betriebssystem "Unix" entwickelt. Daran beteiligt waren u.a. Ken Thompson, Dennis Ritchie und Brian Kernighan.
Die erste Version von Unix wurde 1973 fertiggestellt.
Um die Kommandozeilenbefehle von Unix programmieren zu können, entwickelte Dennis Ritchie die Programmiersprache C.
1991 war Linus Torvalds Informatikstudent an der Universität von Helsinki. Als Teenager in den 1980er Jahren hatte er den Heimcomputer VC-20 und später den Sinclair QL. Für diese etwas exotischen Geräte gab es nicht viel Software. Daher verbrachte er anders als die meisten Gleichaltrigen seine Zeit nicht mit Computerspielen, sondern lernte, diese Geräte auf einer sehr grundlegenden Ebene zu programmieren, damit er seine eigenen Programme schreiben konnte.
Als Student kaufte er sich einen PC mit einem 386er-Prozessor. An der Universität fand eine Veranstaltung über Unix statt, die sich auf das Buch "The Design of the UNIX Operating System" (Maurice Bach, 1986) bezog.
So kam Linus Torvalds auf die Idee, ein unixartiges Betriebssystem für seinen 386er-PC zu schreiben.
Er gab seine Pläne in einer Newsgroup bekannt, erhielt Hilfe von Anderen und hatte schließlich Erfolg.
Linux ist also grundsätzlich ein freier Klon von Unix. Damals dachte niemand daran, daß es eines Tages das altehrwürdige, kommerzielle Unix verdrängen könnte.
Das Maskottchen von Linux ist ein Pinguin namens "Tux":
Unix war in den 1970er Jahren seiner Zeit weit voraus. Insbesondere war es von Anfang an ein Multitasking-Betriebssystem, das auf mehrere Benutzer ausgelegt war, und daher Benutzerrechte verwalten konnte.
Microsoft DOS (MS-DOS), erstmals 1981 veröffentlicht, unterstützte dagegen nur einen Task und einen Benutzer.
In Unix/Linux führt Multitasking dazu, daß jedes Programm in seiner eigenen, getrennten Umgebung abläuft. Programme können also abstürzen wie in jedem anderen Betriebssystem auch. Aber das zieht in Unix/Linux nicht den Rest des Systems mit sich. Der Rest des Systems ist normalerweise vom Absturz eines Programms nicht betroffen, und bleibt also intakt. Deshalb ist Unix/Linux bekannt dafür, besonders stabil zu laufen.
Was haben wir auf dieser Seite über Linux gelernt?
Hier ist eine Liste derjenigen Dateien und Verzeichnisse in alphabetischer Reihenfolge, mit denen ein Benutzer auf einem Linux-System gegebenenfalls in Berührung kommt. Diese wurden bereits in den vorigen Abschnitten erwähnt:
| /bin | Ein Verzeichnis mit ausführbaren Befehlen. Andere Verzeichnisse mit Befehlen sind "/usr/bin", "/usr/local/bin" und "/usr/sbin" (siehe unten). |
| /boot/grub2/grub.cfg | Dies ist die echte Konfigurationsdatei des Bootloaders "GRUB2". Die Datei sollte nicht direkt bearbeitet werden. Wenn diese Datei beschädigt wurde, kann es sein, daß das Betriebssystems nicht mehr bootet. Am besten, man läßt diese Datei in Ruhe. |
| /etc/bash.bashrc | Die systemweite Konfigurationsdatei für die Shell "Bash". |
| /etc/bash.bashrc.local | Eine andere systemweite Konfigurationsdatei für Bash, die zu dem Zweck existiert, daß die lokalen Einträge gesondert gespeichert sind. |
| /etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly | Ausführbare Dateien in diesem Verzeichnis werden vom Cron-Daemon täglich/stündlich/monatlich/wöchentlich ausgeführt. |
| /etc/crontab | Diese Datei kann verwendet werden, um noch weitere Aufgaben für den Cron-Daemon zu programmieren. |
| /etc/default/grub | Die Vorlage-Datei, die bearbeitet werden kann, um Änderungen am Bootloader "GRUB2" vorzunehmen. |
| /etc/fstab | Diese Datei enthielt die technischen Spezifikationen der mountbaren Geräte, damit diese vom "mount"-Befehl gelesen werden konnten. |
| /etc/sudoers | In dieser Datei können Befehle definiert werden, die Benutzer als "root" ausführen können, indem sie den "sudo"-Befehl verwenden. Um diese Datei zu bearbeiten, sollte das spezielle Programm "visudo" verwendet werden. |
| /etc/X11/xorg.conf.d | In diesem Verzeichnis befinden sich Konfigurationsdateien für die Grafikkarte, die Tastatur und den Monitor. Diese Dateien sollte man normalerweise nicht von Hand ändern. |
| /home/username | Das Home-Verzeichnis, in dem der Benutzer normalerweise arbeitet. In diesem Verzeichnis kann der Benutzer beliebig viele Unterverzeichnisse anlegen. |
| /home/username/.bash_history | In dieser Datei speichert Bash die Befehle, die der Benutzer zuvor eingegeben hat. Die Daten in dieser Datei ermöglichen es, auf der Befehlszeile mit den Cursor-Tasten durch die zuvor eingegebenen Befehle zu blättern. |
| /home/username/.bashrc | Die Konfigurationsdatei des Benutzers für die Shell "Bash". |
| /home/username/.config | In diesem Verzeichnis speichern viele Anwendungen ihre Konfigurationsdateien. |
| /home/username/.config/autostart | Programme, die eine entsprechende ".desktop"-Datei in diesem Verzeichnis haben, werden direkt nach dem Start des grafischen Desktops automatisch ausgeführt. |
| /root | Dies ist das Home-Verzeichnis von "root", dem System-Administrator. |
| /usr/bin | Das Standardverzeichnis der Systembefehle. |
| /usr/local/bin | Ein weiteres wichtiges Verzeichnis mit Befehlen. Da es in der $PATH-Variable enthalten ist, können ausführbare Dateien, die hierher kopiert wurden, von überall im System ausgeführt werden. |
| /usr/local/share | Ähnlich wie "/usr/share". |
| /usr/sbin | Ein Verzeichnis mit Systembefehlen, die nur von "root" ausgeführt werden sollen. |
| /usr/share | In diesem Verzeichnis speichern Anwendungen ihre Programmdaten, wie z.B. die Bilddaten für Fenster-Symbole. |
| /var/run/media/username | In meiner Distribution OpenSuSE Leap 15.6 befinden sich in diesem Verzeichnis die Verzeichnisse von automatisch eingehängten externen Geräten wie z.B. USB-Sticks. |
Das sollten erstmal genug Informationen sein, um Ihnen den Einstieg in die Benutzung von Linux zu ermöglichen.