Linux Professional Institute Learning Logo.
Weiter zum Inhalt
  • Home
    • Alle Ressourcen
    • LPI Lernmaterialien
    • Mitmachen
    • Publishing Partner
    • Publishing Partner werden
    • Über uns
    • FAQ
    • Mitwirkende
    • Roadmap
    • Kontakt
  • LPI.org
103.1 Lektion 2
Thema 101: Systemarchitektur
101.1 Hardwareeinstellungen ermitteln und konfigurieren
  • 101.1 Lektion 1
101.2 Das System starten
  • 101.2 Lektion 1
101.3 Runlevel wechseln und das System anhalten oder neu starten
  • 101.3 Lektion 1
Thema 102: Linux-Installation und -Paketverwaltung
102.1 Festplattenaufteilung planen
  • 102.1 Lektion 1
102.2 Einen Bootmanager installieren
  • 102.2 Lektion 1
102.3 Shared Libraries verwalten
  • 102.3 Lektion 1
102.4 Debian-Paketverwaltung verwenden
  • 102.4 Lektion 1
102.5 RPM und YUM-Paketverwaltung verwenden
  • 102.5 Lektion 1
102.6 Linux als Virtualisierungs-Gast
  • 102.6 Lektion 1
Thema 103: GNU- und Unix-Befehle
103.1 Auf der Befehlszeile arbeiten
  • 103.1 Lektion 1
  • 103.1 Lektion 2
103.2 Textströme mit Filtern verarbeiten
  • 103.2 Lektion 1
103.3 Grundlegende Dateiverwaltung
  • 103.3 Lektion 1
  • 103.3 Lektion 2
103.4 Ströme, Pipes und Umleitungen verwenden
  • 103.4 Lektion 1
  • 103.4 Lektion 2
103.5 Prozesse erzeugen, überwachen und beenden
  • 103.5 Lektion 1
  • 103.5 Lektion 2
103.6 Prozess-Ausführungsprioritäten ändern
  • 103.6 Lektion 1
103.7 Textdateien mit regulären Ausdrücken durchsuchen
  • 103.7 Lektion 1
  • 103.7 Lektion 2
103.8 Grundlegendes Editieren von Dateien
  • 103.8 Lektion 1
Thema 104: Geräte, Linux-Dateisysteme, Filesystem Hierarchy Standard
104.1 Partitionen und Dateisysteme anlegen
  • 104.1 Lektion 1
104.2 Die Integrität von Dateisystemen sichern
  • 104.2 Lektion 1
104.3 Das Mounten und Unmounten von Dateisystemen steuern
  • 104.3 Lektion 1
104.5 Dateizugriffsrechte und -eigentümerschaft verwalten
  • 104.5 Lektion 1
104.6 Symbolische und Hardlinks anlegen und ändern
  • 104.6 Lektion 1
104.7 Systemdateien finden und Dateien am richtigen Ort plazieren
  • 104.7 Lektion 1
How to get certified
  1. Thema 103: GNU- und Unix-Befehle
  2. 103.1 Auf der Befehlszeile arbeiten
  3. 103.1 Lektion 2

103.1 Lektion 2

Zertifikat:

LPIC-1

Version:

5.0

Thema:

103 GNU- und Unix-Befehle

Lernziel:

103.1 Auf der Befehlszeile arbeiten

Lektion:

2 von 2

Einführung

Eine Betriebssystemumgebung umfasst die grundlegenden Werkzeuge — wie Kommandozeilen-Shells und manchmal eine GUI — die Sie benötigen, um Dinge zu erledigen. Aber Ihre Umgebung wird auch mit einer Reihe von Verknüpfungen und voreingestellten Werten bereitgestellt. Hier werden Sie lernen, wie man diese Werte auflistet, aufruft und verwaltet.

Finden Sie Ihre Umgebungsvariablen

Wie also identifizieren Sie die aktuellen Werte für jede der Umgebungsvariablen? Ein Weg besteht in der Ausführung des Befehls env:

$ env
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
XDG_RUNTIME_DIR=/run/user/1000
XAUTHORITY=/run/user/1000/gdm/Xauthority
XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
GJS_DEBUG_TOPICS=JS ERROR;JS LOG
[...]

Die Ausgabe des Befehls liefert eine Menge Zeilen - wesentlich mehr als das, was im obigen Auszug enthalten ist. Aber beachten Sie vorerst den PATH-Eintrag, der jene Verzeichnisse enthält, in denen eine Shell (und andere Programme) nach ausführbaren Programmen sucht, ohne dafür einen vollständigen Dateipfad angeben zu müssen. Mit diesen Variablen könnten Sie binäre Programme, welche z.B. in /usr/local/bin abgelegt sind, von Ihrem Homeverzeichnis aus starten.

Lassen Sie uns für einen Moment das Thema wechseln. Der Befehl echo liefert Bildschirmausgaben, entsprechend der übergebenen Werte. Ob Sie es glauben oder nicht, es wird mehrfach sehr zweckdienlich sein, echo buchstäblich etwas wiederholen zu lassen.

$ echo "Hi. How are you?"
Hi. How are you?

Aber echo erfüllt noch einen weiteren Zweck. Wenn es mit dem Namen einer Umgebungsvariablen gefüttern wird — und diesem sagen, dass es sich dabei um eine Variable handelt, indem Sie dem Variablennamen ein $ voranstellen — dann wird die Shell den Wert der Variable ausgeben, anstatt nur den Namen der Variable auszugeben. Sie sind sich nicht sicher, ob ein bestimmtes Verzeichnis aktuell Bestandteil von PATH ist? Dies lässt sich schnell überprüfen, indem man den Variablenwert einfach mittels echo ausgeben lässt:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Neue Umgebungsvariablen erstellen

Sie können Ihre eigenen benutzerdefinierten Variablen zu Ihrer Umgebung hinzufügen. Der einfachste Weg ist die Verwendung des = Zeichens. Die Zeichenfolge auf der linken Seite stellt den Name Ihrer neuen Variablen dar, und die Zeichenfolge auf der rechten Seite wird Ihr Wert. Sie können anschließend den Variablennamen an echo übergeben, um die Variablenzuweisung zu bestätigen:

$ myvar=hello
$ echo $myvar
hello
Note
Beachten Sie, dass während der Variablenzuweisung auf beiden Seiten des Gleichheitszeichens kein Leerzeichen vorhanden sein darf.

Aber hat es wirklich funktioniert? Geben Sie bash in ein Terminal ein, um eine neue Shell zu öffnen. Diese neue Shell sieht genau so aus wie jene zuvor, aber sie ist eigentlich ein Kind der ursprünglichen Shell (welche wir als Elternteil bezeichnen). Versuchen Sie nun, innerhalb dieser neuen Kindshell, echo dazu zu bringen, seine Magie wie zuvor wirken zu lassen. Nichts. Was geht hier vor?

$ bash
$ echo $myvar

$

Eine Variable, welche Sie auf die Weise erstellen, wie wir es gerade getan haben, ist stets nur lokal verfügbar — innerhalb der unmittelbaren Shellsitzung. Wenn Sie eine neue Shell starten — oder die Sitzung mit exit beenden — wird die Variable nicht exportiert. Wenn Sie nun exit eingeben, kehren Sie zum ursprünglichen Elternteil (Shell) zurück. Sie können echo $myvar noch einmal ausführen, um zu bestätigen, dass die Variable immer noch gültig ist. Geben Sie nun export myvar ein, um die Variable an alle Kindshells zu übergeben, die Sie anschließend öffnen. Probieren Sie es aus: Tippen Sie bash für eine neue Shell und dann echo:

$ exit
$ export myvar
$ bash
$ echo $myvar
hello

All dies mag sich ein bisschen albern anfühlen, wenn Sie Shells ohne wirklichen Zweck erzeugen. Zu verstehen, wie Shellvariablen durch Ihr System hindurchgereicht werden, ist essentiell, beispielsweise bei der Erstellung von Shellskripten.

Löschen von Umgebungsvariablen

Wollen Sie wissen, wie Sie all die temporären Variablen, welche Sie erzeugt haben, bereinigen können? Eine Möglichkeit besteht darin, einfach Ihre Elternshell zu schließen - oder Ihren Computer neu zu starten. Es gibt aber auch einfachere Wege. Wie zum Beispiel den Befehl unset. Die Eingabe von unset (ohne $) wird die Variable löschen. echo wird das beweisen.

$ unset myvar
$ echo $myvar

$

Wenn es einen unset Befehl gibt, dann können Sie darauf wetten, dass es dazu einen set Befehl geben muss. Die Ausführung von set an sich liefert eine umfangreiche Ausgabe, aber es unterscheidet sich wirklich nicht allzu sehr von dem, was env anzeigt. Schauen Sie sich die erste Zeile der Ausgabe an, die Sie erhalten, wenn Sie nach PATH filtern:

$ set | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
[...]

Was ist der Unterschied zwischen set und env? Für unsere Zwecke ist die Hauptsache, dass set alle Variablen und Funktionen ausgibt. Lassen Sie uns das veranschaulichen. Wir werden eine neue Variable namens mynewvar erstellen und dann deren Existenz bestätigen:

$ mynewvar=goodbye
$ echo $mynewvar
goodbye

Wenn Sie nun env ausführen, während Sie mit grep nach der Zeichenkette mynewvar filtern, wird keine Ausgabe erscheinen. Aber wenn Sie set auf die gleiche Weise ausführen, wird die lokale Variable angezeigt.

$ env | grep mynewvar

$ set | grep mynewvar
mynewvar=goodbye

Sonderzeichen entkommen

Jetzt ist ein guter Zeitpunkt Sie in die Problematik der Sonderzeichen einzuführen. Alphanumerische Zeichen (a-z und 0-9) werden von Bash normalerweise buchstäblich gelesen. Wenn Sie versuchen, eine neue Datei namens myfile zu erstellen, geben Sie einfach touch gefolgt von myfile ein, und die Bash wird wissen, was sie damit machen soll. Aber wenn Sie ein Sonderzeichen in Dateinamen verwenden, erfordert dies zusätzliche Arbeit.

Um dies zu veranschaulichen, geben wir touch gefolgt von my big file ein. Das Problem ist, dass sich zwischen den Wörtern zwei Leerzeichen befinden. Obwohl man ein Leerzeichen technisch gesehen nicht als “Zeichen” bewerten würde, ist es ein “Zeichen”, welches Bash nicht buchstäblich interpretieren wird. Wenn Sie nun den Inhalt Ihres aktuellen Verzeichnisses auflisten, werden Sie statt einer Datei namens my big file, drei Dateien mit den jeweiligen Namen my, big und file vorfinden. Das liegt daran, dass Bash die Leerzeichen als Trenner interpretiert hat. Ganz so als wollten Sie mehrere Dateien erstellen, deren Namen in einer Liste übergeben wurden:

$ touch my big file
$ ls
my big file

Die Leerzeichen werden auf die gleiche Weise interpretiert, wenn Sie die drei Dateien mit einem einzigen Befehl löschen (rm):

$ rm my big file

Lassen Sie es uns nun auf die richtige Art und Weise versuchen. Geben Sie touch und die drei Teile Ihres Dateinamens ein, aber diesmal schließen Sie den Namen in Anführungszeichen ein. Jetzt hat es funktioniert. Wenn Sie den Verzeichnisinhalt auflisten, sehen Sie eine einzelne Datei mit dem richtigen Namen.

$ touch "my big file"
$ ls
'my big file'

Es gibt verschiedene Wege, den gleichen Effekt zu erzielen. Einfache Anführungszeichen zum Beispiel funktionieren genauso gut wie doppelte Anführungszeichen. (Beachten Sie, dass einfache Anführungszeichen den wörtlichen Wert aller Zeichen erhalten, während doppelte Anführungszeichen alle Zeichen ausgenommen für $, `, \ und, in bestimmten Fällen, ! erhalten).

$ rm 'my big file'

Wenn aber jedem Sonderzeichen den Backslash voranstellt, “entkommt” man der Besonderheit des Zeichens und veranlasst Bash, es buchstäblich zu interpretieren.

$ touch my\ big\ file

Geführte Übungen

  1. Verwenden Sie den Befehl export, um ein neues Verzeichnis zu Ihrem Pfad hinzuzufügen (dies wird einen Neustart nicht überdauern).

  2. Verwenden Sie den Befehl unset, um die Variable PATH zu löschen. Versuchen Sie, einen Befehl (wie sudo cat /etc/shadow) mit sudo auszuführen. Was ist passiert? Warum? (Wenn Sie Ihre Shell beenden, kehren Sie in den ursprünglichen Zustand zurück.)

Offene Übungen

  1. Durchsuchen Sie das Internet, um die vollständige Liste der Sonderzeichen zu finden und zu untersuchen.

  2. Versuchen Sie, Befehle mit Zeichenketten auszuführen, welche Sonderzeichen enthalten, und verwenden Sie verschiedene Methoden, um diesen zu entkommen. Gibt es Unterschiede in der Art und Weise, wie sich diese Methoden verhalten?

Zusammenfassung

In dieser Lektion haben Sie gelernt:

  • Wie man Umgebungsvariablen im System identifiziert.

  • Wie man eigene Umgebungsvariablen erstellt und diese in andere Shells exportiert.

  • Wie man Umgebungsvariablen entfernt und wie man sowohl die Befehle env als auch set verwendet.

  • Wie man Sonderzeichen umgeht, damit Bash sie buchstäblich interpretiert.

Die folgenden Befehle wurden in dieser Lektion besprochen:

echo

Ausgabe von Eingabestrings und Variablen.

env

Umgebungsvariablen verstehen und modifizieren.

export

Exportieren von Umgebungsvariablen an Kindshells.

unset

Zurücksetzen von Werten und Attributen von Shellvariablen und Funktionen.

Lösungen zu den geführten Übungen

  1. Verwenden Sie den Befehl export, um ein neues Verzeichnis zu Ihrem Pfad hinzuzufügen (dies wird einen Neustart nicht überdauern).

    Sie können vorübergehend ein neues Verzeichnis (beispielsweise eines namens myfiles, das sich in Ihrem Homeverzeichnis befindet) zu den aktuellen Pfaden hinzufügen, indem Sie export PATH="/home/yourname/myfiles:$PATH" ausführen. Erstellen Sie anschließend ein simples Skript im Verzeichnis myfiles/, machen Sie es ausführbar und versuchen Sie, es von einem anderen Verzeichnis aus zu starten. Die folgenden Beispielbefehle gehen davon aus, dass Sie sich in Ihrem Homeverzeichnis befinden, welches ein Verzeichnis namens myfiles enthält.

    $ touch myfiles/myscript.sh
    $ echo '#!/bin/bash' >> myfiles/myscript.sh
    $ echo 'echo Hello' >> myfiles/myscript.sh
    $ chmod +x myfiles/myscript.sh
    $ myscript.sh
    Hello
  2. Verwenden Sie den Befehl unset, um die Variable PATH zu löschen. Versuchen Sie, einen Befehl (wie sudo cat /etc/shadow) mit sudo auszuführen. Was ist passiert? Warum? (Wenn Sie Ihre Shell beenden, kehren Sie in den ursprünglichen Zustand zurück.)

    Die Eingabe von unset PATH löscht die aktuellen Pfadeinstellungen. Der Versuch, eine Binärdatei ohne ihre absolute Adresse aufzurufen, wird fehlschlagen. Aus diesem Grund wird der Versuch, einen Befehl unter Verwendung von sudo (das selbst ein binäres Programm ist, welches sich in /usr/bin/sudo befindet) auszuführen, fehlschlagen - es sei denn, Sie geben den absoluten Pfad an, wie in: /usr/bin/sudo /bin/cat /etc/shadow. Sie können PATH zurücksetzen, indem Sie export benutzen oder indem Sie einfach die Shell beenden.

Lösungen zu den offenen Übungen

  1. Durchsuchen Sie das Internet, um die vollständige Liste der Sonderzeichen zu finden und zu untersuchen.

    Folgend die komplette Liste: & ; | * ? " ' [ ] ( ) $ < > { } # / \ ! ~.

  2. Versuchen Sie, Befehle mit Zeichenketten auszuführen, welche Sonderzeichen enthalten, und verwenden Sie verschiedene Methoden, um diesen zu entkommen. Gibt es Unterschiede in der Art und Weise, wie sich diese Methoden verhalten?

    Bei der Verwendung des "-Zeichen bleibt die Interpretation der Sonderzeichen Dollarzeichen, Backtick und Backslash erhalten. Das Entkommen unter Verwendung eines '-Zeichens hingegen veranlasst die buchstäbliche Interpretation aller Zeichen.

    $ echo "$mynewvar"
    goodbye
    $ echo '$mynewvar'
    $mynewvar

Linux Professional Insitute Inc. Alle Rechte vorbehalten. Besuchen Sie die LPI Learning Website: https://learning.lpi.org
Dieses Werk steht unter der Lizenz Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International.

Nächste Lektion

103.2 Textströme mit Filtern verarbeiten (103.2 Lektion 1)

Nächste Lektion lesen

Linux Professional Insitute Inc. Alle Rechte vorbehalten. Besuchen Sie die LPI Learning Website: https://learning.lpi.org
Dieses Werk steht unter der Lizenz Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International.

LPI ist eine Non-Profit-Organisation.

© 2023 Linux Professional Institute (LPI) ist eine globale Organisation für Zertifizierungsstandards und zur Karriereplanung für Open-Source-Profis. Mit mehr als 200.000 Zertifikatsinhabern ist es die weltweit erste und größte herstellerneutrale Linux- und Open-Source-Zertifizierungsstelle. LPI verfügt über zertifizierte Fachleute in über 180 Ländern, bietet Prüfungen in mehreren Sprachen an und hat Hunderte von Trainingspartnern.

Unser Ziel ist es, wirtschaftliche und kreative Möglichkeiten für alle zu ermöglichen, indem wir Open-Source-Wissens- und Kompetenzzertifizierungen allgemein zugänglich machen.

  • LinkedIn
  • flogo-RGB-HEX-Blk-58 Facebook
  • Twitter
  • Kontaktieren Sie uns
  • Datenschutz und Cookie-Richtlinien

Haben Sie einen Fehler entdeckt oder möchten Sie helfen, diese Seite zu verbessern? Lassen Sie es uns wissen.

© 1999–2023 The Linux Professional Institute Inc. Alle Rechte vorbehalten.