Administração de Linux Question #019e3987
Ao receber a seguinte linha de comando.
echo "foo bar" | tee bar | cat
Qual das seguintes saídas é criada?
cat
foo bar
tee bar
bar
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
catnão produz a string "cat" como saída. - C. tee bar: É o comando e argumento, não a saída.
teenã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".