Questão de Sistemas Operacionais — Linux — FGV 2024
- Código
- fg165635
- Banca
- FGV
- Órgão
- ALETO
- Ano
- 2024
- Cargo
- Ana Leg ( )
- AV – V – V.
- BF – V – F.
- CF – F – F.
- DF – F – V.
- EV – V – F.
GabaritoC — F – F – F.
Gabarito: letra C — as três afirmativas são falsas (F – F – F). A primeira erra ao dizer que 1> /dev/null exibe a saída no terminal (na verdade, 1> redireciona a saída padrão, e /dev/null descarta tudo); a segunda erra ao afirmar que > file 1> file2 envia saída e erros para arquivos diferentes (ambos os redirecionamentos apontam para a saída padrão, então o segundo sobrescreve o primeiro); a terceira erra ao dizer que &> file acrescenta ao conteúdo existente (o operador &> sobrescreve o arquivo, e o acréscimo exige >>).
O shell do Linux (bash) trabalha com três fluxos padrão: a entrada padrão (stdin, descritor 0), a saída padrão (stdout, descritor 1) e a saída de erro padrão (stderr, descritor 2). O redirecionamento é o mecanismo que altera o destino desses fluxos, permitindo enviar a saída de um comando para um arquivo, descartá-la ou direcioná-la para outro processo. A sintaxe básica usa os operadores > (sobrescrever), >> (acrescentar) e < (ler de arquivo), sempre precedidos opcionalmente pelo número do descritor. Quando o número é omitido, o shell assume o descritor 1 (saída padrão).
A distinção entre sobrescrever e acrescentar é um dos pontos mais cobrados: > cria ou substitui o conteúdo do arquivo, enquanto >> adiciona ao final, preservando o que já existia. Essa diferença de um único caractere é explorada pelas bancas para induzir ao erro. Além disso, é fundamental entender que a saída de erro (descritor 2) é um canal separado da saída normal (descritor 1): redirecionar 1> não afeta o stderr, e vice-versa. Para redirecionar ambos juntos, o bash oferece o operador &> (que sobrescreve) e &>> (que acrescenta).
Na prática, comando 1> /dev/null envia a saída padrão para o dispositivo nulo, que descarta tudo — nada é exibido no terminal. Já comando > file 1> file2 é um erro conceitual: > e 1> são equivalentes (ambos redirecionam o stdout), então o segundo redirecionamento sobrescreve o primeiro, e o resultado final é que a saída vai para file2, não para file e file2 separadamente. Por fim, comando &> file redireciona stdout e stderr para file, mas sobrescreve o conteúdo existente; para acrescentar, seria necessário &>> file.
A pegadinha central desta questão é a confusão entre os operadores de redirecionamento e o comportamento de cada um. A banca mistura os descritores (1 e 2), os operadores (> vs >>) e o efeito (sobrescrever vs acrescentar) para testar se o candidato domina a sintaxe exata do shell. Guarde a tabela abaixo para não errar:
Operador | Efeito | Descrição |
|---|---|---|
| Sobrescreve | Redireciona stdout para arquivo, substituindo o conteúdo |
| Acrescenta | Redireciona stdout para arquivo, adicionando ao final |
| Sobrescreve | Redireciona stderr para arquivo, substituindo o conteúdo |
| Acrescenta | Redireciona stderr para arquivo, adicionando ao final |
| Sobrescreve | Redireciona stdout e stderr para o mesmo arquivo, substituindo |
| Acrescenta | Redireciona stdout e stderr para o mesmo arquivo, adicionando |
| Sobrescreve | Equivalente a |
A banca adora trocar > por >> e 1> por 2>. Nesta questão, a terceira afirmativa usa &> e diz que "acrescenta" — mas &> sobrescreve. O candidato que confunde os operadores cai direto na alternativa D (F – F – V). Lembre-se: > é sobrescrever, >> é acrescentar, e &> é ambos os fluxos sobrescrevendo.
A sequência V – V – V está errada porque a primeira afirmativa é falsa: 1> /dev/null não exibe a saída no terminal, ela a descarta. O dispositivo /dev/null é um "buraco negro" que recebe e descarta tudo o que é enviado. Portanto, a saída não aparece no terminal — ela é jogada fora. A alternativa A falha já no primeiro item.
A sequência F – V – F está errada porque a segunda afirmativa também é falsa. > file 1> file2 não envia saída e erros para arquivos diferentes: ambos os operadores redirecionam o stdout (descritor 1). O segundo redirecionamento (1> file2) sobrescreve o primeiro (> file), então toda a saída vai para file2, e file fica vazio ou nem é criado. Para enviar erros para um arquivo diferente, seria necessário 2> file2.
A sequência F – F – F é a correta. A primeira afirmativa é falsa porque 1> /dev/null descarta a saída, não a exibe. A segunda é falsa porque > file 1> file2 redireciona ambos para o stdout, sobrescrevendo o primeiro redirecionamento. A terceira é falsa porque &> file sobrescreve o arquivo, não acrescenta — para acrescentar, seria &>> file. Portanto, todas as afirmativas são falsas.
A sequência F – F – V está errada porque a terceira afirmativa é falsa. &> file redireciona stdout e stderr para file, mas sobrescreve o conteúdo existente. O operador para acrescentar ambos os fluxos é &>> file. A alternativa D acerta as duas primeiras (F – F), mas erra na terceira, caindo na pegadinha de confundir &> com &>>.
A sequência V – V – F está errada porque as duas primeiras afirmativas são falsas. A primeira (1> /dev/null exibe no terminal) é falsa, pois descarta. A segunda (> file 1> file2 envia para arquivos diferentes) é falsa, pois ambos redirecionam o stdout. A alternativa E acerta apenas a terceira (F), mas erra nas duas primeiras.
Para resolver questões de redirecionamento, identifique primeiro o descritor (1 = stdout, 2 = stderr) e depois o operador (> = sobrescrever, >> = acrescentar). Se houver dois redirecionamentos para o mesmo descritor, o último vence. E lembre-se: &> é a forma abreviada de 2>&1 (redireciona stderr para onde stdout está apontando), mas sempre sobrescrevendo.
Gabarito: letra C
Link permanente: /questoes/fg165635