Was führst du da aus? Linux-Programme, Skripte, Builtins, Funktionen und Aliase

Indeks
  1. Die unterschiedlichen Arten von Linux-Befehlen
  • 1 Ausführen eines ausführbaren Programms
  • 2 Ausführen eines Shell-Skripts
  • 3 Ausführen eines Shell Builtin
  • 4 Aufrufen einer Shell-Funktion
  • 5 Verwendung eines Alias
  • Erfahren Sie, was beim Ausführen von Linux-Befehlen passiert, und lernen Sie die verschiedenen Arten, wie ausführbare Programme, Shell-Skripte, Built-ins, Funktionen und Aliase.

    Was passiert, wenn Sie einen Linux-Befehl ausführen? Dieser einfache Akt kann auf den ersten Blick unkompliziert erscheinen, aber je nachdem, ob Sie ein ausführbares Programm, ein Shell-Skript, einen Shell-Befehl, eine benutzerdefinierte Funktion oder ein Alias ausführen, können tatsächlich viele verschiedene Dinge geschehen.

    Die unterschiedlichen Arten von Linux-Befehlen

    Ein Programm (binär oder ausführbar) ist eine Datei auf der Festplatte in einem anerkannten Format. Häufige Formate sind ELF unter Linux und Mach-O auf Mac. Das Format ist eine niedrigstufige, maschinenfreundliche Form, die die Shell an den Kernel weitergeben kann, um sie auszuführen.

    Ein Shell-Skript ist eine viel höherstufige Form eines Programms, das in menschenlesbarem Text geschrieben ist. Ein Shell-Skript kann andere Befehle ausführen und in einer interpretierten Sprache wie Perl oder Python geschrieben sein.

    Ein Builtin-Befehl ist intern in der Shell, sodass er immer verfügbar ist und im Allgemeinen auf niedrigem Niveau läuft, um Operationen auszuführen, die die Shell selbst direkt betreffen.

    Eine Shell-Funktion ist wie ein Mini-Shell-Skript, das eine Gruppe von Befehlen unter einem Namen zusammenfasst. Shell-Funktionen werden in der Regel geladen, sodass sie immer unter ihrem Namen verfügbar sind.

    Ein Alias ist ein alternativer Name für einen der oben genannten Befehle. Sie können einen kurzen Alias für einen längeren Befehl erstellen, um Zeit und Aufwand bei der Ausführung häufiger Aufgaben zu sparen.

    Die Reihenfolge, in der eine Shell wie Bash nach diesen Arten von Befehlen sucht, ist wichtig. Einfach ausgedrückt, versucht Bash die Befehle in dieser Reihenfolge: Alias, Funktion, Built-in, Programm/Skript.

    1 Ausführen eines ausführbaren Programms

    Die bekannteste Art von Befehl ist eine ausführbare Programmdatei. Viele der häufigsten Programme sind Teil des POSIX-Standards, was bedeutet, dass sie auf den meisten Unix- oder Unix-ähnlichen Systemen, einschließlich Linux und macOS, verfügbar sein sollten. Beispiele für solche Befehle sind cat, diff und vi.

    Andere Kommandozeilenprogramme – wie Apache, Neofetch oder tree – müssen möglicherweise installiert werden, da sie normalerweise nicht standardmäßig in einer Distribution enthalten sind. Aber genau wie POSIX-Befehlsprogramme werden sie über eine einzelne Programmdatei irgendwo auf Ihrer Festplatte ausgeführt.

    Es gibt zwei gängige Möglichkeiten, ein Programm auszuführen. Zuerst können Sie einen Pfad zu einer Programmdatei eingeben, wie ./myprog oder /usr/bin/awk. Wenn der erste Teil Ihres Befehls Schrägstriche enthält, versucht die Shell, eine Datei im entsprechenden Pfad zu finden. Zum Beispiel können Sie ein Programm unter /bin/cat wie folgt ausführen:

    /bin/cat myfile

    Die Shell überprüft dann, ob es ein ausführbares Programm unter /bin/cat gibt, und führt es aus, wenn es existiert.

    Unter Linux haben ausführbare Programme normalerweise keine Dateierweiterung, sodass ein Befehl wie „grep“ in einer Datei mit dem Namen grep enthalten ist. Dies ist nur eine Konvention, da es praktisch ist, ausführbare Dateien allein durch ihren Dateinamen erkennbar zu machen. Wenn Sie jedoch wirklich wollen, können Sie Ihrer ausführbaren Datei jeden beliebigen Namen geben, wie „myprog.exe“ oder „myprog.RUNME.“

    Der zweite Fall tritt auf, wenn Sie einen Programmnamen ohne Pfad eingeben; zum Beispiel:

    cat myfile

    Mit einem ordnungsgemäß eingerichteten System sollte dies die gleiche Wirkung haben wie zuvor, da die Shell das gleiche Programm cat findet. Sie tut dies, indem sie eine spezielle Umgebungsvariable namens PATH überprüft, die etwa so aussieht:

    Dies ist eine durch Doppelpunkte getrennte Liste von Pfaden, die die Shell durchsuchen wird, um ein Programm zu finden. Die Reihenfolge ist wichtig, da Sie möglicherweise zwei Dateien mit demselben Namen an verschiedenen Orten haben. Wenn Sie zum Beispiel eine Datei /usr/bin/grep und eine Datei /bin/grep haben, bewirkt der oben angegebene PATH, dass die Shell die Version aus /usr/bin ausführt. Dieses System ermöglicht es Ihnen, einen systemweiten Befehl durch einen benutzerdefinierten Befehl zu überschreiben, der spezifischer auf Ihre Bedürfnisse zugeschnitten ist, was sehr nützlich sein kann.

    2 Ausführen eines Shell-Skripts

    Ein Shell-Skript wird etwas anders ausgeführt als ein ausführbares Programm, und es ist eine sehr andere Art von Datei. Ein einfaches Shell-Skript sieht folgendermaßen aus:

    #!/bin/sh
    echo Einfach ein einfaches, sinnloses Shell-Skript

    Die erste Zeile wird als „Shebang“ oder „Hash-Bang“-Zeile bezeichnet, benannt nach der Kombination der Zeichen # und !. Dies ist eine spezielle Anweisung, die der Shell mitteilt, welchen Interpreter sie für den Rest des Skripts verwenden soll. In diesem Fall ist es die Shell selbst.

    /bin/sh.

    Der Rest des Skripts ist ein Textprogramm, das der Interpreter versteht. In diesem Fall kann die Shell Befehle wie echo ausführen, als ob Sie sie direkt in die Befehlszeile eingegeben hätten.

    Andernfalls ist ein Shell-Skript ähnlich wie ein ausführbares Programm, und Ihre Shell sucht es über die PATH-Variable auf die gleiche Weise. Sowohl für Programme als auch für Shell-Skripte ist es wichtig zu beachten, dass die Berechtigungen auf der entsprechenden Datei beeinflussen, wie Sie sie ausführen. Mit gesetztem Ausführungsrecht können Sie das Programm starten, indem Sie seinen Namen oder Pfad eingeben. Wenn das Ausführungsrecht jedoch nicht gesetzt ist, erhalten Sie eine Fehlermeldung:

    Sie können eine solche Datei jederzeit ausführen, indem Sie ihren Namen als Argument an einen geeigneten Interpreter übergeben. Zum Beispiel können Sie ein Shell-Skript so ausführen:

    sh myscript.sh

    Sie können sogar ein ausführbares Programm so ausführen, aber Sie müssen vorher einige Nachforschungen anstellen. Der Befehl file gibt Informationen über den Typ einer Datei, einschließlich ihres Interpreters:

    In diesem Fall können Sie die pwd-Binärdatei mit dem Programm /lib/ld-linux-aarch64.so.1 ausführen:

    3 Ausführen eines Shell Builtin

    Einige Befehle sind so grundlegend für die Natur der Shell, dass sie auf etwas andere Weise operieren müssen. Diese werden als Builtins bezeichnet, da sie effektiv Teil der Shell selbst sind.

    Builtins sind in der Regel niedrigstufig und Befehle, die Sie häufig verwenden: cd, echo und kill sind gängige Beispiele. Im Gegensatz zu Programmen und Shell-Skripten entsprechen diese Befehle keiner bestimmten Datei, da sie Teil der Shell selbst sind und in die ausführbare Datei der Shell kompiliert wurden.

    Einige Systeme können Wrapper-Skripte beinhalten, die Builtins ausführen. Zum Beispiel gibt es auf meinem macOS-System ein /usr/bin/cd-Skript, das den builtin-Befehl verwendet, um das entsprechende Builtin auszuführen. Dies dient der POSIX-Kompatibilität, und Sie können die Skriptversion getrost ignorieren.

    Builtins können schwer zu lernen sein, da sie entweder keinen Handbucheintrag haben (z. B. auf Ubuntu Linux) oder alle eine große, gemeinsame Handbuchseite haben (macOS). Das tldr-Programm ist eine großartige Möglichkeit, mehr über Builtins zu erfahren.

    -L (um symbolische Links zu folgen) und -P (um symbolische Links zu vermeiden). Das bedeutet, dass leider Optionen wie -h oder --help nicht unterstützt werden.

    4 Aufrufen einer Shell-Funktion

    Ein Befehl kann auch ein Aufruf zu einer Funktion sein. Zu jedem Zeitpunkt während einer Sitzung können Sie eine Funktion mit dieser Syntax (in bash) laden oder definieren:

    function_name() {
     befehle
    }

    Alternativ können Sie eine Syntax verwenden, die das Schlüsselwort „function“ vor dem Funktionsnamen einfügt und die Klammern danach weglässt:

    function function_name {
     befehle
    }

    Sie können dann eine Funktion aufrufen, indem Sie ihren Namen gefolgt von etwaigen Argumenten eingeben. Zum Beispiel habe ich die folgende Hilfsfunktion in einer Datei definiert:

    mkd () {
     mkdir -p "$@"
     cd "$@" || exit
    }

    Ich lade diese Datei dann aus dem Steuerungsskript meiner Shell (~/.zshrc), und ich kann diesen Befehl ausführen, um ein neues Verzeichnis zu erstellen und sofort zu wechseln:

    mkd new_dir

    Sie können eine solche Funktion jederzeit in der Befehlszeile aufrufen. Sie können sie auch aus Skripten aufrufen, aber denken Sie daran, dass sie geladen werden muss (verwenden Sie das eingebaute source oder dessen Äquivalent ., um dies zu tun).

    5 Verwendung eines Alias

    Ein Alias ist eine praktische Möglichkeit, die Sie vor dem Tippen langer Befehlsnamen oder gängiger Optionen schützt. Zum Beispiel habe ich auf meinem System einen Alias, um sicherzustellen, dass Dateilisten farbig angezeigt werden, mit Typanhängen:

    ls='ls -GF'

    Wenn ich jetzt nur „ls“ eingebe, wird in seinem Platz der Befehl „ls -GF“ ausgeführt.

    Sie können jederzeit einen Alias erstellen, indem Sie den eingebaute Befehl alias verwenden, z. B.

    alias ls="ls -GF"

    Beachten Sie, dass Anführungszeichen erforderlich sind, wenn Sie alias ausführen, wenn die Ersatzzeichenfolge Leerzeichen enthält. Sie können alle Aliase anzeigen, indem Sie alias ausführen, und Sie können einen Alias löschen mit.

    Der unalias-Befehl. Wenn Sie möchten, dass die Aliase in allen Sitzungen gelten, sollten Sie sie in eine Startdatei wie ~/.zshrc oder ~/.bashrc hinzufügen.

    Bist du neugierig auf weitere Artikel wie Was führst du da aus? Linux-Programme, Skripte, Builtins, Funktionen und Aliase? Entdecke spannende Inhalte in der Kategorie Linux.

    Schreibe einen Kommentar

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

    Go up