Questão de Programação — Linguagens de programação — FGV 2024
Programação›Linguagens de programação
Código
fg086257
Banca
FGV
Órgão
INPE
Ano
2024
Nível
Superior
Cargo
Tecnologista Pleno I - Desenvolvimento e Análise de Produtos de Previsão Numérica de Tempo e Dados Ambientais
Considerando o Shell script descrito acima, e que não existe nenhum problema de conexão entre a máquina em que ele está sendo executado (máquina local) e a lobo.fauna.br, analise os itens a seguir:I. O Shell script irá transferir para a máquina lobo.fauna.br todos os arquivos que estão no home do usuário que possuem a extensão “.ctl”.II. O arquivo transferido para a máquina lobo.fauna.br, por exemplo no dia 5, irá sobrescrever ao que foi transferido no dia 5 do mês anterior.III. Os arquivos que estão em pastas distintas na máquina local também ficarão em pastas distintas ao extrair um arquivo “.tgz” que foi transferido para a lobo.fauna.br.Está correto o que se afirma em:
AII, apenas.
BIII, apenas.
CI e II, apenas.
DII e III, apenas.
EI, II e III.
Revelar gabarito e comentário▾
GabaritoD — II e III, apenas.
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”.
Shell Script: backup com tar, gzip e scp
Gabarito: letra D. O script compacta os arquivos .ctl do home do usuário em um arquivo .tgz nomeado com o dia do mês, transfere via scp para a máquina remota e, ao extrair, os arquivos são restaurados em suas pastas originais. O item II está correto porque o arquivo do dia 5 sobrescreve o do dia 5 do mês anterior (mesmo nome), e o item III está correto porque o tar preserva a estrutura de diretórios. O item I está incorreto porque o script não transfere os arquivos .ctl individualmente, mas sim um arquivo compactado contendo todos eles.
O script em questão utiliza comandos típicos de shell script em sistemas Unix/Linux para realizar um backup. Vamos entender cada parte:
tar -czf backup_$(date +%d).tgz *.ctl: Este comando cria um arquivo compactado (.tgz) contendo todos os arquivos com extensão .ctl do diretório atual (home do usuário). O nome do arquivo inclui o dia do mês (por exemplo, backup_05.tgz). A opção -c cria um novo arquivo, -z compacta com gzip, e -f especifica o nome do arquivo.
scp backup_$(date +%d).tgz lobo.fauna.br:~: Este comando copia o arquivo compactado para o diretório home do usuário na máquina remota lobo.fauna.br, utilizando o protocolo scp (secure copy).
ssh lobo.fauna.br 'tar -xzf backup_$(date +%d).tgz': Este comando executa remotamente a extração do arquivo compactado na máquina remota. A opção -x extrai os arquivos, -z descompacta com gzip, e -f especifica o nome do arquivo.
O comando tar é uma ferramenta de arquivamento que, por padrão, preserva a estrutura de diretórios dos arquivos que estão sendo compactados. Isso significa que, ao extrair o arquivo .tgz, os arquivos são restaurados em suas pastas originais, mantendo a hierarquia de diretórios. Essa é a base para o item III estar correto.
O item II está correto porque o nome do arquivo gerado inclui apenas o dia do mês (por exemplo, backup_05.tgz). Se o script for executado no dia 5 de dois meses diferentes, o arquivo gerado terá o mesmo nome (backup_05.tgz). Ao transferir via scp para a máquina remota, o arquivo mais recente sobrescreverá o anterior, pois ambos têm o mesmo nome no mesmo diretório.
O item I está incorreto porque o script não transfere os arquivos .ctl individualmente. Em vez disso, ele cria um arquivo compactado contendo todos os arquivos .ctl e transfere apenas esse arquivo compactado. Portanto, a afirmação de que "irá transferir para a máquina lobo.fauna.br todos os arquivos que estão no home do usuário que possuem a extensão '.ctl'" é imprecisa, pois o que é transferido é o arquivo .tgz, não os arquivos .ctl em si.
NÃO CAIA NESSA!
A banca tenta confundir o candidato ao afirmar que o script transfere os arquivos .ctl individualmente. Na verdade, o script compacta todos os arquivos .ctl em um único arquivo .tgz e transfere apenas esse arquivo compactado. O candidato que não conhece o comportamento do tar pode cair nessa armadilha.
PEGA ESSA DICA!
Para resolver questões de shell script, é essencial conhecer o comportamento dos comandos tar, scp e ssh. O tar preserva a estrutura de diretórios, o scp copia arquivos de forma segura e o ssh executa comandos remotamente. Lembre-se de que o tar com a opção -c cria um arquivo, -z compacta com gzip, -x extrai e -f especifica o nome do arquivo.
A afirmação diz que o script transferirá para a máquina remota todos os arquivos .ctl do home do usuário. Isso é incorreto porque o script não transfere os arquivos .ctl individualmente. Ele primeiro compacta todos os arquivos .ctl em um único arquivo .tgz e depois transfere apenas esse arquivo compactado via scp. Portanto, o que é transferido é o arquivo compactado, não os arquivos .ctl em si.
Item II — ✅ Correto
A afirmação diz que o arquivo transferido no dia 5 irá sobrescrever o que foi transferido no dia 5 do mês anterior. Isso é correto porque o nome do arquivo gerado inclui apenas o dia do mês (por exemplo, backup_05.tgz). Se o script for executado no dia 5 de dois meses diferentes, o arquivo gerado terá o mesmo nome. Ao transferir via scp para o mesmo diretório na máquina remota, o arquivo mais recente sobrescreverá o anterior, pois ambos têm o mesmo nome.
Item III — ✅ Correto
A afirmação diz que os arquivos que estão em pastas distintas na máquina local também ficarão em pastas distintas ao extrair um arquivo .tgz que foi transferido para a máquina remota. Isso é correto porque o comando tar preserva a estrutura de diretórios dos arquivos que estão sendo compactados. Ao extrair o arquivo .tgz, os arquivos são restaurados em suas pastas originais, mantendo a hierarquia de diretórios.