Programação para Redes de Computadores (técnico) (diário 2012-1) - Prova 1

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Questão 1

Desenvolva um programa de computador que emita o seguinte relatório para todos os usuários. Considere, para os itens abaixo, seus arquivos pessoais no diretório /home:

  • Nome do usuário.
  • Quantidade de arquivos.
  • Tamanho do espaço em disco ocupado.

Uma possível resposta

#!/bin/bash

cd /home
for usuario in $(find . -mindepth 1 -maxdepth 1 -type d | cut -c 3-)
do
	echo -n "Usuário ${usuario}"
	# Listar arquivos
	echo -n " possui $(find ${usuario} 2> /dev/null| wc -l) arquivo(s)"
	# Espaço em disco ocupado
	echo " e de disco $(du -hc ${usuario} 2> /dev/null | tail -1 | cut -d t -f 1)"
done

Questão 2

Desenvolva um programa que calcula a parcela média de um investimento com juros compostos - até 12 parcelas. Informe:

  • O valor de cada parcela sem juro.
  • O valor de cada parcela acrescida de juro.
  • A parcela média.
  • A quantidade de juro final pago.

Uma possível resposta

#!/bin/bash

# ${1} será o valor do empréstimo
# ${2} será a quantidade de parcelas
# ${3} será o valor do juro em número inteiro (%)

# Primeiro teste: se o programa tem os três valores para calcular
if [ "${3}" = "" ]
then
	echo "Use: ${0} (empréstimo) (parcelas) (juro em %)"
	exit
fi

# Segundo teste: se digitou a quantidade certa de parcelas: 1 a 12.
if [ "${2}" -lt "0" -o "${2}" -gt "12" ]
then
	echo "O número de parcelas (${2}) está fora dos limites: 1 a 12."
	exit
fi

parcelaSemJuro=$(echo "scale=2; ${1} / ${2}" | bc)
echo "Empréstimo de R$ ${1} em ${2} parcelas com juros a ${3}%."
echo ""

# 1o. mês
parcela=${parcelaSemJuro}
somatorio=${parcela}
echo "1o. mês: R$ ${parcela} (sem juros)."

# Outros meses (2 em diante)
for numParcela in $(seq 2 ${2})
do
	parcela=$(echo "scale=2; ${parcela} * (1 + ${3} / 100)" | bc)
	somatorio=$(echo "scale=2; ${somatorio} + ${parcela}" | bc)
	echo "${numParcela}o. mês: R$ ${parcela}."
done

# Escrever a parcela média
echo ""
echo "A parcela média é R$ $(echo "scale=2; ${somatorio} / ${2}" | bc)."

# Escrever o juro pago ao final de todas as prestações
echo "O juro pago é de R$ $(echo "scale=2; ${somatorio} - ${1}" | bc)."
echo ""

Questão 3

Configure automaticamente o domínio DNS, e seu reverso, de acordo com as seguintes informações:

  • Domínio: prc.com.br
  • Servidor DHCP: 192.168.1.2
  • Servidor Web: 192.168.1.1
  • Servidor DNS: 192.168.1.2
  • Servidor SSH: 192.168.1.1

Obs.: cada servidor pode ter, no máximo, 1 registro A e vários apelidos (CNAME).

Uma possível resposta

#!/bin/bash

# Variáveis
dominio="prc.com.br"
reverso="1.168.192.in-addr.arpa"
diretorio="/etc/bind"

# Primeiro arquivo: definição das zonas em /etc/bind/named.conf.local
cat > ${diretorio}/named.conf.local << EOF
zone "${dominio}" {
	type master;
	file "${diretorio}/${dominio}";
};
zone "${reverso}" {
	type master;
	file "${diretorio}/${reverso}";
};
EOF

# Segundo arquivo: zona direta
cat > ${diretorio}/${dominio} << EOF
@ 		IN SOA		dns.${dominio}. administrador.${dominio}. (
	2012051000; serial
	86400; refresh
	3600; retry
	604800; expire
	86400; default ttl
)
@ 		IN	NS 		dns.${dominio}.
dns 	IN	A 		192.168.1.2
dhcp	IN	CNAME	dns.${dominio}.
web		IN	A		192.168.1.1
ssh		IN	CNAME	web.${dominio}.
EOF

# Terceiro arquivo: zona reversa
cat > ${diretorio}/${reverso} << EOF
@ 		IN SOA		dns.${dominio}. administrador.${dominio}. (
	2012051000; serial
	86400; refresh
	3600; retry
	604800; expire
	86400; default ttl
)
@ 		IN	NS 		dns.${dominio}.
2 		IN	PTR		dns.${dominio}.
1		IN	PTR		web.${dominio}.
EOF

Questão 4

Ainda sobre o problema da questão anterior, teste o servidor e mostre os resultados de sucesso e fracasso.

Uma possível resposta

#!/bin/bash

dominio="prc.com.br"
servidor="192.168.1.2"

for teste in "SOA ${dominio}" "NS ${dominio}" "A dns.${dominio}" \
"A web.${dominio}" "PTR 1.1.168.192.in-addr.arpa"
do
	clear
	echo "A rodar: dig @${servidor} ${teste}"
	dig @${servidor} ${teste}
	echo -n "Tecle [ENTER] para avançar..."
	read enter
done