Comando vs programma?


19

Stavo guardando la differenza tra addusere useradd, e una spiegazione è che useraddè un comando, mentre adduserè uno script Perl. Capisco quello che uno script perl è, ma quello che non capisco è quello che un commandpoi è esattamente.

Ho sempre pensato che comandi come ls, ln, cdecc sono tutti i programmi semplici scritti in qualsiasi lingua che si limitano a fare una cosa. Qual è la differenza tra questi "programmi semplici" e uno script Perl?

Io, naturalmente, so che un (perl) script non viene compilato, ma interpretato in fase di esecuzione, ma credo che non è l'unica differenza?


1
non concentrarsi troppo sul compilato vs interpretato in questo caso. si potrebbe avere un guscio interpretata (anche perché si vuole uno è discutibile). concentrarsi invece sul fatto che il codice per un'azione comandi è una parte statica del codice sorgente del fusto, mentre uno script è esterno, non dovrebbe essere considerarsi implicito, o comportarsi esattamente lo stesso su due sistemi leggermente diversi, e può non necessariamente anche avere tutte le sue dipendenze incontrato. script sono più flessibili, e per questo motivo, meno affidabile e in generale, mentre un comando funzionerà ovunque la shell.
Frank Thomas

In parole semplici: il comando è tutto ciò che può essere eseguito mentre il programma è un file binario che può essere eseguito.
Pithikos

Risposte:


32

In termini semplici, un comando è un'istruzione (o un insieme di istruzioni) da eseguire da un computer.

comandi stand-alone

Utility fondamentali di Unix come ls, ln, ecc, sono (di solito), scritto in C e compilati per essere eseguibili stand-alone programmi che non richiedono un interprete da eseguire; che di solito richiedono determinati biblioteca file da installare sul sistema, ma questo è una risposta per un'altra domanda.

Script

Uno script è una raccolta di comandi e di fatto, script stessi sono considerati un comando.

Uno script Perl è una sequenza di istruzioni Perl e richiede un perlfile eseguibile (stand-alone e compilato) il programma di interpretare le dichiarazioni Perl.

A volte grandi e complessi script interpretative (in linguaggi come Perl, Python e Ruby) sono anche denominati come programmi interpretati mentre il termine sceneggiatura è riservato per gli script più brevi e più semplici.

Uno script di shell è una sequenza di altri comandi (qualsiasi tipo di comando) e richiede una shell Unix come Bash per interpretare lo script. Dalla pagina man bash:

Bash è un interprete del linguaggio di comando compatibile sh che esegue i comandi letti dall'input standard o da un file.

Shell built-in

Conchiglie di solito hanno built-in comandi che non sono né programmi né script stand-alone. Invece, essi sono parte del serbatoio stesso e gestito direttamente dalla shell. cdè un esempio di un tale comando incorporato.

Alcune volte ci sono comandi che esistono contemporaneamente come shell built-in e come comandi autonomi, ad esempio il echocomando.

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

echo esegue da solo la shell integrata mentre il comando autonomo può essere eseguito fornendo il suo percorso completo.

Esegui la versione integrata di echo:

$ echo --version
--version

Esegui echoprogramma autonomo :

$ /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.

Nota: Le specifiche sopra riportate si riferiscono ad un ambiente Unix, ma gli stessi principi si applicano a un ambiente Windows.


L'eco a cui ti riferisci in Windows è solo se installi Cygwin. Non troverete eco * in finestre come quello è puramente un comando CMD shell (eco in PowerShell è alias di scrittura-oggetto).
Jim B

@JimB Questo è vero. Ho modificato l'ultima linea di chiarire quello che volevo dire. Casualmente, ho appena iniziato a imparare PowerShell questa settimana (per fortuna, non ho avuto di lavorare con .bati file in molti, molti anni).
Anthony G - giustizia per Monica,

2

Un costruita nel comando fa parte del guscio. Un programma viene eseguito dalla shell.

Comandi incorporati sono contenute all'interno del serbatoio stesso. Quando il nome di un comando incorporato viene utilizzato come prima parola di un semplice comando (vedi Comandi semplici ), la shell esegue il comando direttamente, senza invocare un altro programma. Comandi incorporati sono necessari per implementare la funzionalità impossibile o scomodo da ottenere con utility separate.

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


Ma useraddnon è un guscio di built-in. Il sito web ha appena detto "comando", non "built-in comando". Come è questa spiegazione relative a questa domanda?
Barmar

1

Comando significa solo un modo per dire un'applicazione o un sistema per fare qualcosa.

Un'applicazione in genere accetta molti comandi diversi, sia dalla GUI, sia da stdin, ma sono possibili altri metodi, ad esempio un socket UNIX o named pipe, una sorta di API Web, una connessione RPC o qualche altro protocollo personalizzato.

Un'applicazione che fa solo una cosa, quindi esce, in genere senza una GUI, può anche essere chiamata un comando, perché in realtà puoi solo "dare a" questa applicazione un comando "significativo". Questo è come i piccoli programmi come lse tale lavoro e perché essi sono chiamati comandi.

Ma non sarebbe chiamata Photoshop un comando, ma si sarebbe certamente inviare comandi al suo interno tramite l'interfaccia grafica.

Tuttavia, il termine può significare cose diverse per persone diverse. Nel tuo esempio, il comando viene utilizzato per descrivere un eseguibile che viene eseguito direttamente, rispetto a un file che richiede un interprete di script per il lavoro. La distinzione può essere importante perché quando si esegue uno script Perl, /usr/bin/perlè il binario che è effettivamente in esecuzione (quindi se si vuole uccidere uno script Perl lunga corsa, questo è quello che si deve cercare in ps). Tuttavia, la maggior parte delle conchiglie hanno "built-in" comandi che sono comandi al serbatoio stesso e non causano un eseguibile esterno da eseguire. Ad esempio, cdè gestita da bashsé e non chiama /sbin/cdo simili.


Prospettiva interessante. A livello di astrazione da cui stai osservando questo, sono tentato di chiamarlo un '"invocazione" o un "gesto" o addirittura di andare con la terminologia androide un "intento". Detto questo non so se mi piace l'idea di fare compilato vs interpretato un criterio. Powershell per esempio è ibrido-interpretato (, Net), ma come un guscio, ha comandi all'interno sua base di codice. ma poi si fanno un punto di buono compilato (codice macchina) esterno eseguibili essendo differant da script, ma anche comandi. come detto, prospettiva interessante.
Frank Thomas
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.