Eu estava procurando 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 não entendo é o que command
é exatamente então.
Eu sempre pensei que comandos como ls
, ln
, cd
etc, são todos os programas simples escritos em qualquer língua que simplesmente fazer uma coisa. Qual é a diferença entre esses "programas simples" e um script perl?
Claro que sei que um script (perl) não é compilado, mas interpretado em tempo de execução, mas acho que essa não é a única diferença?
linux
command-line
bash
perl
kramer65
fonte
fonte
Respostas:
Em termos simples, um comando é uma instrução (ou um conjunto de instruções) a ser executada por um computador.
Comandos Independentes
Unix utilitários fundamentais, tais como
ls
,ln
, etc, são (em geral) escrita em C e compilado para ser executável autónomo programas que não requerem um intérprete para ser executado; eles geralmente exigem que certos arquivos de 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 declarações do Perl e requer um
perl
executável (stand-alone e compilado) programa para interpretar as declarações de Perl.Às vezes, scripts interpretativos grandes e complexos (em linguagens como Perl, Python e Ruby) também são chamados de programas interpretados, enquanto o termo script é reservado para scripts mais curtos e simples.
Um script de shell é uma sequência de outros comandos (qualquer tipo de comando) e requer um shell do Unix, como o Bash, para interpretar o script. Na página do manual do Bash:
Shell interno
Conchas geralmente têm built-in comandos que não são nem programas nem roteiros Stand Alone-. Em vez disso, eles fazem parte do próprio shell e são executados diretamente pelo shell.
cd
é um exemplo desse comando interno.Algumas vezes existem comandos que existem como shell embutidos e como comandos independentes ao mesmo tempo, por exemplo, o
echo
comando.echo
por si só executa o shell embutido enquanto o comando independente pode ser executado, fornecendo seu caminho completo.Execute a versão interna do eco:
Execute o
echo
programa independente :Nota: As especificações acima se referem a um ambiente Unix, mas os mesmos princípios se aplicam a um ambiente Windows.
fonte
.bat
arquivos há muitos e muitos anos).Um comando embutido faz parte do shell. Um programa é executado pelo shell.
http://www.gnu.org/software/bash/manual/bashref.html#Shell-Builtin-Commands
fonte
useradd
não é um shell embutido. O site acabou de dizer "comando", não "comando interno". Como essa explicação é relevante para esta pergunta?Comando significa apenas uma maneira de dizer a um aplicativo ou sistema para fazer alguma coisa.
Um aplicativo normalmente 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 sai, normalmente sem uma GUI, também pode ser chamado de comando, porque você realmente pode apenas "fornecer" a este aplicativo um "comando" significativo. É assim que pequenos programas como
ls
esse funcionam e por que são chamados de comandos.Mas você não chamaria o Photoshop de comando, mas certamente emitiria comandos nele através 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, em comparação com um arquivo que requer que um interpretador de script funcione. A distinção pode ser importante porque, quando você está executando um script Perl,
/usr/bin/perl
é o binário que está em execução (por isso, se você deseja matar um script Perl de execução longa, é isso que você precisa procurarps
). No entanto, a maioria dos shells possui comandos "internos" 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 porbash
si só e não chama/sbin/cd
ou similar.fonte