Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe
allgemeine Kategorie => Allgemeine Diskussionen => Thema von: Andreas am 17. April 2020, 16:39:49

Titel: Etwas "Gehirnfutter" in Corona-Zeiten (I)
Beitrag von: Andreas am 17. April 2020, 16:39:49

Keine Suletuxe-Treffen - alles geht vom "Home-Office" aus. Wir haben dank unseres Diskussionsforums schon von Anbeginn dazu die Möglichkeiten... Also werfe ich euch mal ein paar gut riechende Brocken hin - in der Hoffnung, dass ihr Appetit bekommt...

Wenn man einen Befehl von der Kommandozeile aus aufruft, tippt man einfach seinen Namen ein, vielleicht noch ein paar Parameter zu dem Befehl, und dann drückt man <ENTER>. Woher - zum Kuckuck - weiß unser Linux wo sich das aufgerufene Programm befindet?

Nein, Linux kann nicht hellsehen. Die Antwort ist wieder mal ganz logisch und daher nachvollziehbar und damit MERKBAR (!!)

Wenn man einen Befehl aufgerufen hat ohne einen kompletten Pfad zu ihm hin, dann wird anhand einer Liste von Verzeichnissen gesucht, die sich in einer sogenannten Environment-Variable (zu Deutsch: Umgebungsvariable) befinden. Was ist eine Variable?
Einfach ein "Platzhalter" aus Buchstaben, dem man etwas zuweisen kann. Probiert mal auf der Konsole aus:

Code:
meinevariable="meine Gedankenstütze"

...natürlich wie alles auf der Kommandozeile gefolgt von <ENTER>. Es passiert scheinbar gar nichts. Gebt nun

Code:
echo $meinevariable

ein - und staunt...

Einer Umgebungsvariablen kann man durch Angabe ihres Namens (der keine Leerzeichen und nur ganz bestimmte Sonderzeichen enthalten darf) einen Wert (Zahlen oder Buchstabenketten - wenn mit Leerzeichen, dann in Anführungsstrichen) zuweisen. Auslesen kann man die Variable dann mit einem Dollarzeichen gefolgt von ihrem Namen (dazwischen KEIN Leerzeichen!!)

Das "echo" bedeutet übrigens nur, dass das, was darauf folgt, auf der Konsole wiederholt ("ge-echot") werden soll.

Nun schließt das Konsolenfenster, macht ein neues auf und probiert nochmal, die Variable auszugeben. Geht nicht mehr - sie ist jetzt LEER. Das hat etwas mit ihrem Gültigkeitsbereich zu tun: sie ist nur gültig in der Konsole, auf der sie "erschaffen" wurde. Konsole geschlossen bedeutet Variable tot ::).

Aber es gibt auch Variablen, die schon "vorbelegt" sind. Eine davon hat den Namen PATH. Zeigt sie mal an mit

Code:
echo $PATH

...das ist die Reihenfolge, in der Verzeichnisse nach aufgerufenen Befehlen abgesucht werden!! Wenn man also den mc startet werden die in der Variablen PATH abgelegten Verzeichnisse in der dort aufgerufenen Reihenfolge danach durchsucht und beim ersten Treffer wird das dort befindliche Programm gestartet. Daraus können wir schon mal zwei Dinge schließen (nur durch logisches Denken):
1) es ist theoretisch denkbar, dass ein Programm mit gleichem Namen mehrmals auf dem Rechner existiert - aber in unterschiedlichen Verzeichnissen. Ruft man es nur mit seinem Namen auf, dann wird der erste gefundene Treffer folgend der Pfade in $PATH gestartet. Will man eine andere Variante starten, muss man den kompletten Pfad angeben (also z.B. /usr/games/mc - was natürlich ein reines Gedankenspiel ist, denn da gibt es hoffentlich kein mc)
2) Es gibt garantiert eine Möglichkeit herauszufinden, was gestartet wird wenn ich nur den Namen eingebe.

Um gleich 2) zu beantworten: na klar gibt es die! Probiert mal

Code:
type mc

aus...
Und das könnt ihr mit jedem beliebigen Befehl ausprobieren, den ihr kennt.

Übrigens funktioniert alles das sowohl als User (empfehlenswert) und auch als root. ABER: Da ist wieder was mit dem Gültigkeitsbereich! Variablen gleicher Namen sind bei jedem User (incl. root) individuell - sie können also mehrfach vorkommen. PATH ist für root was anderes als für jeden User. Die Variablen befinden sich im "Userspace" (wobei auch root streng genommen ein "User" ist). Und um die Power von Linux vollständig zu machen: Eine Vraibel gleichen Namens kann selbst bei einem User mehrfach vorkommen - in jedem Prozess (z.B. Kommandozeilenfenster) kann sie vorkommen. So kann man ihr in 40 Fenstern 40 verschiedene Werte zuweisen und jedes Fenster kann nur auf "seine" Version zugreifen.

Unter Linux ist alles erklärbar und damit von jedem nachvollziehbar.

Bis zur nächsten Lesson

bleibt gesund
Andreas


Diskussions- und Newsboard der Linux Interessen Gruppe Suletuxe | Powered by YaBB SE
© 2001-2003, YaBB SE Dev Team. All Rights Reserved.