Administração de Linux
medium

Administração de Linux Question #019e3987

Question Statement
Administração de Linux
#tee
#echo
#cat
#pipe
Medium

Ao receber a seguinte linha de comando.

echo "foo bar" | tee bar | cat

Qual das seguintes saídas é criada?

A

cat

B

foo bar

Correct
C

tee bar

D

bar

E

foo

Official Explanation / Community Explanations

Resumo

O comando echo "foo bar" | tee bar | cat demonstra o uso de pipes e do comando tee no Linux. O comando tee lê da entrada padrão e escreve tanto na saída padrão quanto em um ou mais arquivos. Aqui, tee bar escreve a entrada no arquivo bar e também a passa para stdout, que é então canalizado para cat. cat simplesmente exibe sua entrada no stdout. A saída final exibida no terminal é "foo bar". A questão testa o entendimento de como tee duplica a saída e como os pipes conectam comandos.

Como funciona

O shell cria um pipeline de três processos: echo, tee e cat. O pipe (|) conecta o stdout de um comando ao stdin do próximo. echo "foo bar" escreve "foo bar
" em seu stdout. Isso é canalizado para tee bar. tee abre o arquivo bar para escrita, lê do stdin, escreve os dados no arquivo e também escreve os mesmos dados em seu stdout. Esse stdout é canalizado para cat. cat lê do stdin e escreve em seu stdout (o terminal). O kernel gerencia o fluxo de dados através de buffers de pipe, e tee usa a chamada de sistema write() tanto para o arquivo quanto para o pipe.

Por que a resposta correta está certa

A resposta correta é B. foo bar. O pipeline produz exatamente essa saída. echo gera "foo bar", tee passa adiante e cat exibe inalterado. O arquivo bar é criado com o mesmo conteúdo, mas a pergunta é sobre a saída criada pela linha de comando, ou seja, o que aparece no terminal.

Por que as outras opções estão incorretas

  • A. cat: É o nome do comando, não a saída. O comando cat não produz a string "cat" como saída.
  • C. tee bar: É o comando e argumento, não a saída. tee não exibe seu próprio nome.
  • D. bar: É o nome do arquivo passado como argumento para tee. A saída é o conteúdo "foo bar", não o nome do arquivo.
  • E. foo: Apenas parte da entrada. A string completa "foo bar" é exibida, não apenas "foo".