Befehl vs. Programm?

Befehl vs. Programm?

adduserIch habe den Unterschied zwischen und nachgeschlagen useradd, undeine Erklärungist, dass es useraddsich um einen Befehl handelt, während adduseres sich um ein Perl-Skript handelt. Ich verstehe, was ein Perl-Skript ist, aber was ich nicht genau verstehe, ist, was ein „ commandthen“ ist.

Ich habe immer gedacht, dass Befehle wie ls, ln, cdusw. alles einfache Programme sind, die in einer beliebigen Sprache geschrieben sind und einfach eine Sache tun. Was ist der Unterschied zwischen diesen „einfachen Programmen“ und einem Perl-Skript?

Ich weiß natürlich, dass ein (Perl-)Skript nicht kompiliert, sondern zur Laufzeit interpretiert wird, aber ich nehme an, dass das nicht der einzige Unterschied ist?

Antwort1

Einfach ausgedrückt ist ein Befehl eine Anweisung (oder ein Satz von Anweisungen), die von einem Computer ausgeführt werden soll.

Eigenständige Befehle

Grundlegende Unix-Dienstprogramme wie ls, ln, usw. werden (normalerweise) in C geschrieben und so kompiliert, dass sie als eigenständige ausführbare Dateien verfügbar sind.Programmedie keinen Interpreter zur Ausführung benötigen; sie erfordern normalerweise bestimmteBibliothekDateien, die auf dem System installiert werden sollen, aber das ist die Antwort auf eine andere Frage.

Skripte

Ein Skript ist eine Sammlung von Befehlen und tatsächlich werden Skripte selbst als Befehl betrachtet.

APerl-Skriptist eine Folge von Perl-Anweisungen und erfordert eine perlausführbare Datei (eigenständig und kompiliert)Programmum die Perl-Anweisungen zu interpretieren.

Manchmal werden große und komplexe interpretierende Skripte (in Sprachen wie Perl, Python und Ruby) auch bezeichnet alsinterpretierte Programmewährend der BegriffSkriptist für kürzere und einfachere Skripte reserviert.

AShell-Skriptist eine Folge anderer Befehle (jeder Befehlstyp) und erfordert eine Unix-Shell wie Bash, um das Skript zu interpretieren. Aus der Bash-Manpage:

Bash ist ein sh-kompatibler Befehlsspracheninterpreter, der Befehle ausführt, die von der Standardeingabe oder aus einer Datei gelesen werden.

Integrierte Shell-Elemente

Muscheln haben normalerweiseeingebautBefehle, die weder eigenständige Programme noch Skripte sind. Stattdessen sind sie Teil der Shell selbst und werden direkt von der Shell ausgeführt. cdist ein Beispiel für einen solchen integrierten Befehl.

Manchmal gibt es Befehle, die gleichzeitig als integrierte Shell-Befehle und als eigenständige Befehle existieren, z. B. der echoBefehl.

$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo

echoführt allein die integrierte Shell aus, während der eigenständige Befehl durch Angabe seines vollständigen Pfads ausgeführt werden kann.

Führen Sie die integrierte Version von Echo aus:

$ echo --version
--version

Standalone- echoProgramm ausführen:

$ /usr/bin/echo --version
echo (GNU coreutils) 8.23
Packaged by Cygwin (8.23-4)
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Hinweis: Die oben genannten Einzelheiten beziehen sich auf eine Unix-Umgebung, aber die gleichen Prinzipien gelten auch für eine Windows-Umgebung.

Antwort2

Ein integrierter Befehl ist Teil der Shell. Ein Programm wird von der Shell ausgeführt.

Integrierte Befehle sind in der Shell selbst enthalten. Wenn der Name eines integrierten Befehls als erstes Wort eines einfachen Befehls verwendet wird (sieheEinfache Befehle), führt die Shell den Befehl direkt aus, ohne ein anderes Programm aufzurufen. Integrierte Befehle sind erforderlich, um Funktionen zu implementieren, die mit separaten Dienstprogrammen nicht oder nur umständlich zu erreichen sind.

http://www.gnu.org/software/bash/manual/bashref.html#Shell-Builtin-Commands

Antwort3

Befehlbedeutet lediglich eine Möglichkeit, einer Anwendung oder einem System mitzuteilen, etwas zu tun.

Eine Anwendung akzeptiert normalerweise viele verschiedene Befehle, entweder von der GUI oder von stdin, aber auch andere Methoden sind möglich, z. B. ein UNIX-Socket oder eine benannte Pipe, eine Art Web-API, eine RPC-Verbindung oder ein anderes benutzerdefiniertes Protokoll.

Eine Anwendung, die nur eine Sache macht und dann beendet wird, normalerweise ohne GUI, kann auch als Befehl bezeichnet werden, weil Sie dieser Anwendung eigentlich nur einen sinnvollen „Befehl“ „geben“ können. So lsfunktionieren kleine Programme wie und so und deshalb werden sie Befehle genannt.

Allerdings würden Sie Photoshop nicht als Befehl bezeichnen, aber sicherlich Befehle darin über die GUI erteilen.

Der Begriff kann jedoch für verschiedene Personen unterschiedliche Bedeutungen haben. In Ihrem Beispiel:Befehlwird verwendet, um eine ausführbare Datei zu beschreiben, die direkt ausgeführt wird, im Gegensatz zu einer Datei, die einen Skriptinterpreter benötigt, um zu funktionieren. Die Unterscheidung kann wichtig sein, denn wenn Sie ein Perl-Skript ausführen, /usr/bin/perlist die Binärdatei, die tatsächlich ausgeführt wird (wenn Sie also ein lange laufendes Perl-Skript beenden möchten, müssen Sie in danach suchen ps). Die meisten Shells haben jedoch „integrierte“ Befehle, die Befehle an die Shell selbst sind und nicht dazu führen, dass eine externe ausführbare Datei ausgeführt wird. Beispielsweise cdwird von bashselbst gehandhabt und ruft nicht auf /sbin/cdoder ähnliches.

verwandte Informationen