Pular para o conteúdo principal

Questão de Sistemas Operacionais — Linux — VUNESP 2023

Sistemas OperacionaisLinux
Código
vu197515
Banca
VUNESP
Órgão
Pref SBO
Ano
2023
Cargo
Tec ( )
Um usuário navegando pelo terminal de um sistema operacional Linux digitou o seguinte comando:   cat t*   O conteúdo apresentado no terminal como retorno desse comando será o
  1. Aconteúdo do arquivo t*.
  2. Bconteúdo do arquivo t.
  3. Cconteúdo de todos os arquivos cujos nomes começam com a letra t.
  4. Dconteúdo de todos os arquivos cujos nomes terminam com a letra t.
  5. Evalor t*.
Revelar gabarito e comentário

GabaritoC — conteúdo de todos os arquivos cujos nomes começam com a letra t.

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”.

Comandos de terminal no Linux: curingas (wildcards)

Gabarito: letra C. O comando cat t* exibe o conteúdo de todos os arquivos cujos nomes começam com a letra "t", pois o asterisco (*) é um curinga (wildcard) que casa com qualquer sequência de caracteres (inclusive nenhum). O cat é o utilitário padrão para concatenar e exibir arquivos, e quando recebe múltiplos arquivos como argumento, mostra o conteúdo de todos eles em sequência.

O shell do Linux (bash, sh, etc.) interpreta o * antes de executar o comando: ele expande o padrão t* para a lista de arquivos do diretório atual que começam com "t". Por exemplo, se o diretório contém os arquivos texto.txt, tabela.csv e foto.jpg, o comando cat t* é expandido para cat texto.txt tabela.csv, exibindo o conteúdo dos dois primeiros. Se não houver nenhum arquivo que comece com "t", o shell, por padrão, passa o padrão literal t* para o cat, que então tentará abrir um arquivo chamado exatamente t* (geralmente resultando em erro "No such file or directory").

O curinga * é um dos metacaracteres de expansão de caminho (globbing) do shell. Outros comuns são ? (casa exatamente um caractere) e [...] (casa um dos caracteres listados). Esses padrões são expandidos pelo shell, não pelo comando em si — o cat nunca vê o *; ele recebe a lista de nomes já expandida. Essa é a chave para entender por que a alternativa C está correta e as demais não.

A pegadinha aqui é confundir o curinga com um caractere literal do nome do arquivo. O candidato desatento pode achar que t* é o nome de um arquivo específico (alternativa A) ou que o * significa "qualquer coisa antes do t" (alternativa D). Mas no shell, o * é um metacaractere de expansão, não parte do nome. Além disso, o cat não imprime o valor de uma variável (alternativa E) — isso seria feito com echo $t* ou algo similar, e mesmo assim o * seria expandido.

Guarde a regra: o shell expande curingas antes de executar o comando. É esse mecanismo que decide a questão — e é nele que as alternativas se separam.

Alternativa A — ❌ Incorreta

Afirma que o comando exibe o conteúdo de um arquivo chamado t*. Isso só ocorreria se o shell não expandisse o curinga — o que acontece apenas se não houver correspondência e o shell estiver configurado para passar o padrão literal (comportamento padrão do bash). Mas a alternativa generaliza como se t* fosse sempre um nome de arquivo, ignorando a expansão. Na prática, se existirem arquivos começando com "t", o * é expandido e o cat recebe a lista deles; se não existirem, o cat tenta abrir o arquivo literal t* e dá erro. A alternativa está errada porque desconsidera o mecanismo de globbing.

Alternativa B — ❌ Incorreta

Diz que o comando exibe o conteúdo do arquivo t. O padrão t* casa com qualquer nome que comece com "t", incluindo t (pois * pode casar com zero caracteres). Mas não se limita a ele: se houver texto.txt e tabela.csv, todos são incluídos. A alternativa restringe indevidamente o escopo a um único arquivo chamado t, o que só seria verdade se esse fosse o único arquivo começando com "t" no diretório — e mesmo assim, o comando exibiria o conteúdo de todos os que casarem, não apenas de t. Portanto, incorreta.

Alternativa C — ✅ Correta ⟵ GABARITO

Exatamente o que o comando faz: cat t* expande o curinga para todos os arquivos do diretório atual cujos nomes começam com a letra "t" e exibe o conteúdo de cada um, em sequência. O cat é o utilitário de concatenação; quando recebe vários arquivos, imprime o conteúdo de todos. A expansão é feita pelo shell, e o resultado é o conteúdo concatenado de todos os arquivos que casam com o padrão. É a definição clássica de globbing com *.

Alternativa D — ❌ Incorreta

Inverte a posição do curinga: afirma que o comando exibe arquivos cujos nomes terminam com "t". Para isso, o padrão seria *t (asterisco antes do t). Como o * está depois do t, o padrão casa com nomes que começam com "t", não que terminam. A banca explora exatamente essa inversão — o candidato que confunde a posição do curinga erra a questão.

Alternativa E — ❌ Incorreta

Diz que o comando exibe o valor t*. Isso seria o comportamento de um comando como echo t* (que, aliás, também expandiria o curinga e listaria os nomes, não o valor literal). O cat não imprime o nome do argumento; ele imprime o conteúdo dos arquivos. E o * não é tratado como texto literal pelo shell — é expandido. Portanto, a alternativa não corresponde a nenhum comportamento real do comando.

NÃO CAIA NESSA!

A banca troca a posição do curinga (alternativa D) e trata o * como caractere literal (alternativas A e E). O candidato que não domina o globbing do shell cai na armadilha de achar que t* é um nome de arquivo ou que o * significa "qualquer coisa antes". Lembre-se: o shell expande * para todos os nomes que casam com o padrão, e o cat recebe a lista expandida — é isso que decide a questão.

PEGA ESSA DICA!

Para fixar, compare os padrões: t* (começa com t), *t (termina com t), *t* (contém t), t? (começa com t e tem exatamente 2 caracteres). Na prova, leia o padrão da esquerda para a direita e pergunte: "o que o * está substituindo?" — se está depois do t, substitui o final do nome; se está antes, substitui o início.

Gabarito: letra C — o comando cat t* exibe o conteúdo de todos os arquivos cujos nomes começam com a letra "t".

Link permanente: /questoes/vu197515