Pular para o conteúdo principal

Questão de Sistemas Operacionais — Scripts em Unix e Linux — CESPE / CEBRASPE 2024

Sistemas OperacionaisScripts em Unix e Linux
Código
ce404126
Banca
CESPE / CEBRASPE
Órgão
CNJ
Ano
2024
Cargo
TJ
#!/bin/bash log_file=“/var/log/apache2/access.log” output_file=“extracted_ips_and_urls.txt” if [[ -f “$ log_file” ]]; then     while IFS= read -r line       do            ip=$ (echo “$ line” | awk '{print $ 1}')          url=$ (echo “$ line” | awk '{print $ 7}')          echo “$ ip - $ url” >> “$ output_file”        done < “$ log_file” else       echo “O arquivo log não existe.” fi   Com base no shell script precedente, julgue o item seguinte.   No código apresentado, o comando sed extrai dados das colunas do arquivo atribuído à variável log_file.
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoE — Errado

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Scripts em Unix/Linux: extração de campos com awk

Gabarito: letra E (ERRADO). O script apresentado utiliza o comando awk para extrair os campos das linhas do arquivo de log, e não o comando sed. A afirmação de que "o comando sed extrai dados das colunas" é incorreta, pois o sed não é utilizado em nenhum ponto do código.

O script em questão é um exemplo clássico de processamento de arquivos de log no Linux, muito comum em questões de concursos da área de TI. Ele lê um arquivo de log do Apache (/var/log/apache2/access.log), linha por linha, e para cada linha extrai o primeiro campo (que corresponde ao endereço IP do cliente) e o sétimo campo (que corresponde à URL requisitada), gravando essas informações em um arquivo de saída. A ferramenta utilizada para essa extração é o awk, um comando poderoso para processamento de texto e manipulação de campos.

O awk é um interpretador de linguagem de programação orientado a linhas, que divide cada linha em campos (por padrão, separados por espaços em branco) e permite operações sobre esses campos. No script, awk '{print $1}' imprime o primeiro campo (IP) e awk '{print $7}' imprime o sétimo campo (URL). Já o sed (stream editor) é um editor de fluxo, utilizado principalmente para substituições, exclusões e inserções de texto, mas não para extração de campos por posição. A confusão entre awk e sed é uma pegadinha clássica, pois ambos são filtros de texto, mas com finalidades distintas.

Para entender melhor, vejamos um exemplo prático. Suponha que uma linha do arquivo de log seja:

192.168.1.100 - - [10/Oct/2024:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 2326

O comando awk '{print $1}' retornaria 192.168.1.100 (o IP), e awk '{print $7}' retornaria /index.html (a URL). O sed, por outro lado, poderia ser usado para substituir uma string, como sed 's/GET/POST/', mas não para extrair campos por posição.

A banca explora exatamente essa distinção: o candidato que conhece superficialmente os comandos pode confundir awk com sed, pois ambos são ferramentas de processamento de texto. No entanto, a função de extrair campos de uma linha é exclusiva do awk (e também do cut), enquanto o sed é mais adequado para edição de texto em fluxo.

Portanto, a afirmação está incorreta, pois o comando utilizado para extrair os dados das colunas é o awk, e não o sed. Essa é a pegadinha central da questão.

Alternativa E — ❌ Incorreta ⟵ GABARITO

A alternativa afirma que "o comando sed extrai dados das colunas do arquivo atribuído à variável log_file". Isso está errado, pois o script não utiliza o comando sed em nenhum momento. A extração dos campos é feita pelo comando awk, como se vê nas linhas:

ip=$(echo "$line" | awk '{print $1}')
url=$(echo "$line" | awk '{print $7}')

O awk é o comando responsável por dividir a linha em campos e imprimir os campos desejados ($1 para o IP e $7 para a URL). O sed, por sua vez, é um editor de fluxo que opera sobre linhas de texto, mas não é usado aqui. Portanto, a alternativa está incorreta, e o gabarito é a letra E.

NÃO CAIA NESSA!

A banca troca o comando awk pelo sed, dois filtros de texto que o candidato pode confundir. Lembre-se: awk é especialista em dividir linhas em campos e extrair colunas ($1, $2, ...), enquanto sed é um editor de fluxo para substituições e transformações. Se a questão pedir "extrair campos", o comando é awk (ou cut); se pedir "substituir texto", é sed.

Gabarito: letra E

Link permanente: /questoes/ce404126