Comando vs programa?

19

Eu estava pesquisando a diferença entre adduser e useradd e uma explicação é que useradd é um comando enquanto adduser é um script perl. Eu entendo o que é um script perl, mas o que eu não entendo é o que é exatamente um command .

Eu sempre achei que comandos como ls , ln , cd etc são todos programas simples escritos em qualquer linguagem que simplesmente faz uma coisa. Qual é a diferença entre esses "programas simples" e um script perl?

Eu sei que um script (perl) não é compilado mas interpretado em tempo de execução, mas eu acho que não é a única diferença?

    
por kramer65 20.05.2015 / 15:10

3 respostas

32

Em termos simples, um comando é uma instrução (ou um conjunto de instruções) a ser executada por um computador.

Comandos independentes

Os utilitários fundamentais do Unix, como ls , ln , etc., são (geralmente) gravados em C e compilados para serem executáveis independentes programs que não exigem que um intérprete seja executado; eles geralmente exigem que certos arquivos biblioteca sejam instalados no sistema, mas isso é uma resposta para outra pergunta.

Scripts

Um script é uma coleção de comandos e, de fato, os próprios scripts são considerados um comando.

Um script Perl é uma sequência de instruções Perl e requer um programa perl executável (independente e compilado) para interpretar as declarações Perl.

Às vezes, scripts interpretativos grandes e complexos (em linguagens como Perl, Python e Ruby) também são referidos como programas interpretados enquanto o termo script é reservado para curtas e scripts mais simples.

Um script de shell é uma sequência de outros comandos (qualquer tipo de comando) e requer um shell Unix, como o Bash, para interpretar o script. Na página do manual do Bash:

Bash is an sh-compatible command language interpreter that executes commands read from the standard input or from a file.

Built-ins da shell

Os shells geralmente têm comandos integrados que não são programas independentes nem scripts. Em vez disso, eles fazem parte do próprio shell e são executados diretamente pelo shell. cd é um exemplo de um comando interno.

Algumas vezes existem comandos que existem como internos do shell e como comandos independentes ao mesmo tempo, por exemplo, o comando echo .

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

echo por conta própria executa o shell integrado enquanto o comando independente pode ser executado fornecendo seu caminho completo.

Execute a versão incorporada do echo:

$ echo --version
--version

Executar o programa echo autônomo:

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

Observação: os detalhes acima se referem a um ambiente Unix, mas os mesmos princípios se aplicam a um ambiente Windows.

    
por 20.05.2015 / 15:45
2

Um comando interno faz parte do shell. Um programa é executado pelo shell.

Builtin commands are contained within the shell itself. When the name of a builtin command is used as the first word of a simple command (see Simple Commands), the shell executes the command directly, without invoking another program. Builtin commands are necessary to implement functionality impossible or inconvenient to obtain with separate utilities.

link

    
por 20.05.2015 / 15:15
1

Comando significa apenas uma maneira de dizer a um aplicativo ou sistema para fazer alguma coisa.

Um aplicativo geralmente aceita muitos comandos diferentes, da GUI, de stdin , mas outros métodos são possíveis, por exemplo, um soquete UNIX ou pipe nomeado, algum tipo de API da Web, uma conexão RPC ou algum outro protocolo personalizado.

Um aplicativo que faz apenas uma coisa e depois sai, normalmente sem uma GUI, também pode ser chamado de comando, porque você pode realmente apenas "dar" a esse aplicativo um "comando" significativo. Isto é como pequenos programas como ls e tal trabalho e por que eles são chamados de comandos.

Mas você não chamaria o Photoshop de um comando, mas certamente emitirá comandos por meio da GUI.

No entanto, o termo pode significar coisas diferentes para pessoas diferentes. No seu exemplo, o comando está sendo usado para descrever um executável que é executado diretamente, versus um arquivo que requer um interpretador de scripts para funcionar. A distinção pode ser importante porque quando você está executando um script Perl, /usr/bin/perl é o binário que está realmente em execução (portanto, se você quiser matar um script Perl de longa execução, é isso que você deve procurar em ps ). No entanto, a maioria dos shells tem comandos "embutidos" que são comandos para o próprio shell e não fazem com que um executável externo seja executado. Por exemplo, cd é tratado pelo próprio bash e não chama /sbin/cd ou similar.

    
por 20.05.2015 / 15:35