Respostas dos exercícios do livro Shell Linux

Resolução dos exercícios Shell Linux – Do aprendiz ao administrador

QUESTÕES DO CAPÍTULO 1 (INTRODUÇÃO)

1) Cite os cinco shells mais conhecidos.
Resposta

Bash, Dash, Sh, Ksh, Csh

2) Você encontra-se logado em um ambiente gráfico e deseja acessar o primeiro tty do sistema, quais conjunto de teclas devem ser utilizados?
Resposta

<Ctrl+Alt+F1>

3) Quando o terminal de comandos é acessado por qualquer usuário que não seja o root, é apresentado a seguinte linha:
tales@orion ~$
Descreva detalhadamente o que significa cada item.

Resposta

tales é o usuário que está logado; orion é a máquina em que está logado; @ indica que tales está logado em orion; ~ indica que o usuário está dentro do seu diretório pessoal, ou seja, /home/tales; $ indica que é um usuário comum e não o administrador do sistema.

4) Qual a variável de ambiente do sistema operacional GNU/Linux armazena o Shell padrão?
Resposta

$SHELL


QUESTÕES DO CAPÍTULO 2 (ÁRVORE DE DIRETÓRIOS)

1) Quais diretórios do GNU/Linux são considerados especiais?
Resposta

/dev, /proc, /sys

2) Qual variável do sistema que armazena os diretórios onde ficam os arquivos executáveis do sistema?
Resposta

$PATH

3) Qual o diretório que é indicado para instalar programas opcionais?
Resposta

/opt

4) Seu sistema está demorando para carregar, provavelmente pode ser alguma falha durante o boot. Sabemos que o GNU/Linux armazena os arquivos de log em um diretório específico, qual seria ele? Dê o caminho absoluto.
Resposta

/var/log

5) Existem diretórios no GNU/Linux que são indicados para montar unidades temporárias como pendrives e HDs externos, quais são estes diretórios?
Resposta

/mnt /media /run/media e na pasta do usuário utilizando o nome do dispositivo ou a identificação UUID (Universally unique identifier).

6) Mario efetua downloads constantemente. Após reiniciar seu computador, ele percebeu que seus arquivos baixados não estavam mais no diretório que deveria estar. Qual o possível diretório que Mario usa para armazenar seus downloads?
Resposta

/tmp

7) Dos seguintes diretórios: /var, /tmp, /usr, /root e /etc, qual é mais importante em uma rotina de backup?
Resposta

/etc

8) Dentre os diretórios: /etc, /home, /lib, /usr e /root, quais precisam ser parte do diretório principal?
Resposta

/etc e /lib

9) Que variável guarda a lista de diretórios que o shell usa para encontrar arquivos executáveis?
Resposta

$PATH

10) Informe qual diretório é usado para obter informações sobre os processos.
Resposta

/proc


QUESTÕES DO CAPÍTULO 3 (PRINCIPAIS COMANDOS)

1) A seguinte estrutura de diretórios deve ser criada: “/ -> home -> usuario -> cap3 -> principais -> comandos”. Como podemos criar tal estrutura com apenas um comando?
Resposta

mkdir -p /home/usuario/cap3/principais/comandos

2) Execute o comando que transforme o arquivo “Capítulo3.odt” em um arquivo oculto no sistema.
Resposta

mv Capítulo3.odt .Capitulo3.odt

3) Um usuário deseja remover com confirmação cada arquivo do diretório /mnt/lixo. Qual comando ele deve usar?
Resposta

rm -i /mnt/lixo/*

4) O comando locate pesquisa por arquivos baseando em um banco de dados próprio. Qual comando é responsável por atualizar este banco de dados?
Resposta

sudo updatedb

ou apenas

updatedb

executado como root

5) O comando para exibir os processos apenas do usuário bruno é:
Resposta

ps -u bruno

6) Tales deseja encontrar um arquivo chamado exercícios.txt. Porém ele não lembra se o nome do arquivo contém alguma letra maiúscula. É sabido que este arquivo está salvo em /home. Utilizando o comando find, como Tales poderia encontrar seu arquivo independente de letras maiúsculas ou minúsculas?
Resposta

find /home -iname exercicios.txt

7) Qual o comando utilizado para desmontar um pendrive montado em /media/pendrive?
Resposta

umount /media/pendrive

8) Qual arquivo no sistema operacional GNU/Linux apresenta todas as variações de Shell presentes no mesmo? Dê o caminho absoluto.
Resposta

/etc/shells

9) O comando mount -a monta todos os dispositivos de armazenamento situados em qual arquivo? Dê o caminho absoluto.
Resposta

/etc/fstab

10) Alexandre Martins é uma administrador de sistema GNU/Linux e está passando pela seguinte situação: Toda vez que ele executa o comando rm, o mesmo solicita a confirmação para a exclusão do arquivo. O que está acontecendo com o sistema de Alexandre?
Resposta

Foi criado um alias rm para rm -i

11) O administrador precisa cancelar um shutdown programado para as 23:00. Qual comando deverá ser executado?
Resposta

shutdown -c

12) É correto afirmar que o comando pwd retorna o diretório atual e o comando tty retorna o console atual em que se está logado?
Resposta

Sim

13) Qual comando irá exibir as últimas linhas de um arquivo /var/log/cups/access_log?
Resposta

tail /var/log/cups/access_log

14) Qual comando copia arquivos com a extensão .txt de /dir1 para /dir2, preservando as informações atuais do arquivo, como datas?
Resposta

cp -p /dir1/*.txt /dir2

15) Deseja-se efetuar uma busca em todo o sistema por todos arquivos que contenha em seu nome a palavra config, salvando o seu resultado no arquivo $HOME/configuracoes. Todo o resultado não desejado da pesquisa deverá ser descartado, exibindo apenas o que foi pedido.
Resposta

find / -iname "*config*" 2>/dev/null > $HOME/configuracoes

16) Um arquivo chamado bigbashview.tar.gz foi baixado para o diretório /tmp. Qual o comando utilizado para descompactar o arquivo para dentro do diretório ~/scripts, independente em qual lugar do sistema você esteja?
Resposta

tar -xvzf /tmp/bigbashview.tar.gz -C ~/scripts/


QUESTÕES DO CAPÍTULO 4 (ATRIBUTOS INTRODUTÓRIOS AO SHELL)

1) Ao executar o comando kill -9 2234, qual sinal é passado para o processo 2234?
Resposta

SIGTERM

2) Sabendo que o comando pgrep é responsável por mostrar o PID de um determinado processo, qual será a saída exibida pelo comando pgrep init?
Resposta

1

3) Ao executar um comando precedido pelo comando sudo, uma senha é solicitada ao usuário. A quem pertence tal senha?
Resposta

Do usuário corrente (executante do comando)

4) Qual o UID do usuário root?
Resposta

0

5) Qual a função do comando pstree?
Resposta

Exibe a árvore de processos em execução.

6) Qual o comando usado para saber os usuários das tty/pts e o que foi aberto por eles?
Resposta

ps -aux | grep "tty|pts"

7) Um processo com PID 2891 está no seu sistema sem funcionar. O superusuário digita o seguinte comando: kill 2891. Porém, nada muda. O que pode ser feito para finalizar o programa?
Resposta

kill -9 2891

8) Qual o sinal enviado ao processo quando executado kill 6891?
Resposta

15

9) O SIGKILL é equivalente a qual identificação?
Resposta

9

10) Analisando a saída do comando ls -l abaixo, qual dos arquivos possui mais dados?

-rw-r--r-- 1 talesam users 0 Set 10 23:15 codificar-arquivo.sh
-rw-r--r-- 1 talesam users 0 Set 10 23:16 cumprimento-ao-root.sh
-rw-r--r-- 1 talesam users 0 Set 10 23:16 enviar-email.sh

Resposta

Todos possuem o mesmo tamanho e são arquivos vazios.

11) Lendo o manual de instalação de um produto específico, há uma restrição para permissionar o diretório cache para 777. Qual o potencial problema desse pemissionamento?
Resposta

Ao setar a permissão total (777), qualquer usuário logado no sistema poderá modificar o diretório especificado. Esse tipo de permissionamento deve ser usado com cuidado pois pode afetar a segurança em questão.

12) Visualize a saída do comando ls -l abaixo e diga quais dos arquivos são executáveis.

-rw-r--r-- 1 talesam users 1461 Set 2 01:49 codificar-arquivo.sh
-rwxr-xr-x 1 talesam users 1146 Set 8 02:07 cumprimento-ao-root.sh
-rwxr-xr-x 1 talesam users 1613 Set 10 01:51 enviar-email.sh

Resposta

O arquivo cumprimento-ao-root.sh e enviar-email.sh são executáveis, pois possui a permissão execute (x).

13) Para impedir que haja problemas, você precisa retirar somente a permissão de gravação do arquivo abaixo. Qual comando e sintaxe deverá ser utilizado?

-rw-r--r-- 1 talesam users 0 Set 11 00:31 dados.php

Resposta

chmod u-w dados.php

14) Adicione o grupo restritos e altere o grupo do diretório /mnt/dados para restritos e o dono para dados, recursivamente.
Resposta

groupadd restritos
chown -R dados:restritos /mnt/dados/

15) Deseja-se criar um usuário para liberar acesso a um novo aluno. Como deverá ser criado o usuário chamado alunoshell34?
Resposta

adduser alunoshell34

16) Como alterar a senha do usuário convidado?
Resposta

passwd convidado

17) Converta a permissão -r–r–r– para o formato octal.
Resposta

444

18) Converta a permissão -rwx—r-x para a o formato octal.
Resposta

705

19) Qual o formato octal para retirar todas as permissões de um arquivo ou diretório? Qual seria o comando para realizar tal procedimento?
Resposta

Formato: 000
Comando:

chmod 000 arquivo

20) Qual será a permissão do arquivo codificar-arquivo.sh após a execução do comando chmod o=x codificar-arquivo.sh?
Resposta

-rw-r—-x ou 641

21) Crie um arquivo chamado lista-de-arquivos.txt com a saída do comando ls -l ~
Resposta

ls -l ~ >> lista-de-arquivos.txt


QUESTÕES DO CAPÍTULO 5 (APLICATIVOS PARA O DIA A DIA)

1) Bruno utilizou o comando wget para baixar o arquivo http://biglinux.c3sl.ufpr.br/iso/BIGLINUX-4.2.iso, porém quando estava 93% completado, sua conexão foi interrompida. Qual o comando completo deve se utilizar para retornar o download de onde parou, sem que seja preciso baixar o arquivo novamente?
Resposta

wget -c http://biglinux.c3sl.ufpr.br/iso/BIGLINUX-4.2.iso

2) Deseja-se baixar um arquivo grande pela rede, porém a velocidade de download deve ser limitada a 100 kbps para que não prejudique a conexão de outros utilizadores que estiveram na mesma rede. Suponha que o arquivo a ser baixado seja o http://biglinux.c3sl.ufpr.br/iso/BIGLINUX-4.2.iso. Qual comando deverá
ser utilizado?

Resposta

wget --limit-rate=100k http://biglinux.c3sl.ufpr.br/iso/BIGLINUX-4.2.iso

3) Existe um arquivo de áudio chamado gravação-29-12-2015.mp3 e precisa ser reproduzido, porém a interface gráfica encontra-se inativa. Como reproduzir esse arquivo direto do terminal de comandos?
Resposta

mpg123 gravacao-29-12-2015.mp3

4) Ao editar um arquivo de texto sobre software livre, deseja-se que o mesmo seja aberto e o cursor posicionado na primeira palavra chamada “liberdade”. Suponha que o arquivo chame Liberdades do Software Livre, como deverá ser procedida a edição?
Resposta

vi “Liberdades do Software Livre” +/liberdade

5) Como é feita a checagem de integridade de um arquivo utilizando o md5?
Resposta

md5sum arquivo

6) Adriano tenta acessar seu servidor Linux utilizando o seguinte comando:

ssh [email protected]

Porém percebe que a conexão não é realizada, apresentando a seguinte mensagem na tela:

ssh: connect to host deskfacil.com port 22: Connection timed out

Então ele percebe que a porta correta para a conexão é a 2020 e não a 22, que é definida por padrão. Qual o comando completo para que ele consiga se conectar em seu servidor?
Resposta

ssh -p 2020 [email protected]

7) Bruno pretende enviar o arquivo kaiana.iso para o servidor kaiana.com.br via ssh. Supondo que o arquivo kaiana.iso esteja no diretório local ~/Distro/kaiana.iso e deseja-se copiar para o servidor em /home/kaiana/downloads/, através da porta 2222. Qual o comando utilizado para realizar tal cópia?
Resposta

scp -P 2222 ~/Distro/kaiana.iso [email protected]:/home/kaiana/downloads/


QUESTÕES DO CAPÍTULO 6 (MONITORANDO O SISTEMA)

1) Dentre os comandos: ls, df, ps, top e du, quais exibem os processos no Linux?
Resposta

ps e top

2) Qual o comando que informa o uso dos sistemas de arquivos montados?
Resposta

df

3) O sistema está com o processamento muito elevado e a máquina está esquentando cada vez mais, você decide verificar o que está acontecendo executando o comando ‘top’, então percebe que exite um processo que está comprometendo o sistema, qual o procedimento para matar o processo diretamente da execução do comando ‘top’?
Resposta

Tecle <k>, digite o PID do processo e <Enter>, escolha o sinal que será emitido, nesse caso o 9 e para matá-lo.

4) Qual a maneira mais simples de verificar a quantidade de memórias livres e utilizadas no sistema em Mega Bytes?
Resposta

free -m

5) Acessando um diretório, verifica-se que existem diversos arquivos e diretórios. Como descobrir o espaço total, em formato humano (Kilo byte, Mega byte e Giga byte), ocupado no diretório corrente?
Resposta

du -sh

6) Existe uma interface de rede, wlan0, que encontra-se desconfigurada. Levando em conta que o ip deverá ser o 192.168.1.12 e a mascara de rede 255.255.255.0, qual o comando utilizado para realizar a configuração da rede?
Resposta

ifconfig wlan0 192.168.1.12 netmask 255.255.255.0


QUESTÕES DO CAPÍTULO 7 (MANIPULAÇÃO DE PACOTES)

1) Qual comando é usado para atualizar a lista de repositórios em uma distribuição Debian e uma distribuição Fedora?
Resposta

Distribuição Debian: apt-get update, Distribuição Fedora: yum makecache

2) Qual comando é usado para instalar o pacote vim em uma distribuição Debian?
Resposta

apt-get install vim

3) Qual o comando é usado para atualizar todo o sistema em uma distribuição Debian, removendo pacotes obsoletos?
Resposta

apt-get dist-upgrade

4) Deseja-se instalar o aplicativo gimp, mas antes é interessante realizar uma pesquisa pelo aplicativo. Tendo em mente que a pesquisa pelo pacote será feita em uma distribuição Debian qual comando deverá ser utilizado?
Resposta

apt-cache search gimp

5) A utilização do aplicativo apache não é mais necessária no sistema. Qual comando utilizado para removê-lo?
Resposta

apt-get remove apache

6) Qual o comando utilizado para remover todas as dependências não utilizadas em uma distribuição Debian?
Resposta

apt-get autoremove

7) Você acabou de fazer uma grande atualização do sistema e está com pouco espaço em seu sistema raiz que está em uma partição separada e possui um espaço limitado. Como você poderia liberar algum espaço, caso utilize uma distribuição Debian?
Resposta

apt-get clean

8) Em uma distribuição Debian deseja-se instalar o aplicativo skype.deb que foi baixado da internet. Qual o procedimento para instalá-lo?
Resposta

dpkg -i skype.deb

9) Um sistema Debian estava sendo atualizado, instalando e configurando os pacotes baixados, quando a energia acaba e a atualização é interrompida bruscamente. Alguns pacotes quando estavam sendo configurados acabaram sendo corrompidos durante a instalação. Quais comandos devem ser usados para concertar o problema e finalizar a atualização?
Resposta

dpkg --configure -a ; apt-get -f install

10) Através do comando ‘rpm’, qual o comando para exibir a lista de pacotes instalados?
Resposta

rpm -qa

11) Deseja-se instalar um pacote ‘rpm’ que foi baixado manualmente, porém esse pacote possui dependências. Qual o comando utilizado para instalar esse pacote e suas dependências de forma automática?
Resposta

yum install pacote

12) Através do comando ‘rpm’, qual o comando para exibir informações sobre um pacote instalado?
Resposta

rpm -qi

13) Qual o comando utilizado para manter todo o sistema RedHat atualizado?
Resposta

yum update

14) Mario deseja instalar o Java livre no seu sistema RedHat, porém não sabe o nome corretamente. Como ele poderá pesquisar pelo pacote para que assim possa instalá-lo?
Resposta

yum search java


QUESTÕES DO CAPÍTULO 8 (MANIPULAR TEXTOS DE FORMA NÃO INTERATIVA)

1) Crie um comando, usando um ou mais comandos a seguir: cut, tac ou cat, que informe somente o nome de todas as contas do arquivo /etc/passwd com seus respectivos UID e GID.
Resposta

tac /etc/passwd | cut -d: -f1,3,4 ou cat /etc/passwd | cut -d: -f1,3,4 ou cut -d: -f1,3,4 /etc/passwd

2) Crie um comando para converter todos os caracteres de um arquivo /etc/passwd para maiúsculo.
Resposta

cat /etc/passwd | tr 'a-z' 'A-Z'

3) Qual comando mostra a linha completa dos usuários talesam e bigbruno do arquivo /etc/passwd?
Resposta

egrep "^talesam|^bigbruno" /etc/passwd ou tac /etc/passwd | egrep "^talesam|^bigbruno"

4) Usando o comando grep ou sed, crie um comando para exibir apenas os comentários do arquivo ~/.bashrc.
Resposta

sed '/^#/ !d' ~/.bashrc ou grep ^# ~/.bashrc

5) Defina a sintaxe para direcionar a saída padrão de CMD1 para entrada padrão de CMD2.
Resposta

CMD1 | CMD2

6) Qual o caminho completo do arquivo que contém a lista de usuário do sistema?
Resposta

/etc/passwd

7) Mario está trabalhando em um diretório contendo somente um arquivo, chamado ARQ1. O que será exibido após executar os seguintes comandos?.

$ MINHAVAR=ls
$ echo $MINHAVAR “$MINHAVAR” ‘$MINHAVAR’ `$MINHAVAR`

Resposta

ls ls $MINHAVAR ARQ1

8) Qual expressão regular combina com Linux e linux, mas não com linux.com e não com TurboLinux?
Resposta

^[Ll]inux$

9) Como eu posso verificar o sucesso ou não de um comando executado?
Resposta

Através do valor presente na variável $?

10) Descreve uma maneira de como identificar o caractere ‘*’ dentro de um arquivo.
Resposta

Sugestões de resposta: grep \* arquivo ou grep “*” arquivo ou grep ‘*’ arquivo

11) Este exercício consiste em fazer o download de uma página da web, classifica e filtrar os resultados para subdomínios e servidores, por fim salvar o resultado em um arquivo texto. Dica: utilize os comandos wget, cat, cut, grep e sort. Exemplo da saída do arquivo subdominios.txt:

$ cat subdominios.txt
nome1.kde.org
nome2.kde.org
nome3.kde.org

a) Baixe a página principal do kde.org.
b) Filtre todos os resultados que contenha kde.org.
c) Supondo que os subdomínios possuem “http://” na frente do domínio, filtre novamente para reduzir a saída do conteúdo.
d) A maioria das linhas terá //, use outro filtro para remover as barras.
e) Remova todas as linhas duplicadas.
f) Remova todos os caracteres que não fazem parte do domínio principal.
Exemplo: nome1.kde.org”>KDE. Nesse caso deveria ficar apenas nome1.kde.org.
g) Salve o conteúdo filtrado em um arquivo texto chamado subdominios.txt.
h) Filtre a saída do arquivo texto para que seja exibida apenas os subsomínios e mais nenhum caractere solto.
i) Salve o resultado final no arquivo subdominios.txt sobrescrevendo o conteúdo atual.
Resposta


a) Baixar a homepage usando wget:

$ wget kde.org

b) Agora precisamos tentar filtrar os resultados de subdomínios de kde.org. Para fazer isso, pode procurar as linhas com kde.org do texto correspondente:

$ cat index.html | grep "kde.org"

c) O resultado será muito grande para ser utilizado. Se queremos continuar a filtrar o resultado, podemos supor que a maioria dos domínios têm uma “http: //” na frente deles, e nós podemos tentar cortar as linhas com base em um delimitador de dois pontos, obtendo assim o segundo campo

$ cat index.html | grep "kde.org" | cut -d ":" -f 2

d) Agora, a maioria das linhas vai começar com // para que possamos cortar com base em um “/”, pegue o terceiro campo:

$ cat index.html | grep "kde.org" | cut -d ":" -f 2 | cut -d "/" -f 3

e) Remover linhas duplicadas com comando sort:

$ cat index.html | grep "kde.org" | cut -d ":" -f 2 | cut -d "/" -f 3 | sort -u

f) Caso precise remover caracteres à direita de uma linha com um nome de domínio, como neste exemplo: ev.kde.org”>KDE e.V.< Então você pode ter um problema, porque o caráter de fuga começa com uma aspa. Neste caso você precisará usar uma barra invertida para escapar das aspas para funcionar como uma cadeia em vez de um ponto de demarcação. Veja abaixo:

$ cat index.html | grep "kde.org" | cut -d ":" -f 2 | cut -d "/" -f 3 | sort -u | cut -d "\"" -f 1

g) Salvar os resultados em texto:

$ cat index.html | grep "kde.org" | cut -d ":" -f 2 | cut -d "/" -f 3 | sort -u | cut -d "\"" -f 1 > subdominios.txt

h) Exibir a saída do arquivo texto para que seja mostrado apenas os subdomínios:

$ cat subdominios.txt | sort -u | grep "kde.org"

i) Grava a saída no arquivo texto, sobrescrevendo o conteúdo original:

$ cat subdominios.txt | sort -u | grep "kde.org" > subdominios.txt


QUESTÕES DO CAPÍTULO 9 (SHELL SCRIPT)

1) Na confecção de um novo script bash, qual deve ser o valor de sua primeira linha?
Resposta

#!/bin/bash

2) Como executar um script em bash que não possui permissão de execução?
Resposta

bash nome-do-script.sh

3) Como criar um comentário em Shell Script e quais os meios de fazer?
Resposta

Para criar um comentário, basta colocar a tralha (#) antes do texto, ou seja:
# Isso é um comentário.
O comentário para iniciar em uma linha nova ou na frente do comando, por exemplo:

echo “Isso será exibido na tela” # Isso não será exibido na tela.

4) Existe um script chamado nome-da-musica.sh o qual precisa ser passado três
parâmetros: gênero, artista e nome da música. Levando em conta que os parâmetros
a serem executados são: Rock, Roxette e Listen to Your Heart. Pede-se:
a) Com o script deverá ser executado com os parâmetros?
b) Após o script ser executado e como resultado obter a seguinte saída:
Gênero: Rock
Artista: Roxette
Nome da música: Listen to Your Heart

Resposta

a)

bash nome-da-musica.sh Rock Roxette “Listen to Your Heart”

ou

./nome-da-musica.sh Rock Roxette “Listen to Your Heart”

No ultimo parâmetro o nome está entre aspas pois existe espaço no nome.

b)

#!/bin/bash

echo "Gênero: $1"
echo "Artista: $2"
echo "Nome da música: $3"


QUESTÕES DO CAPÍTULO 10 (COMANDOS CONDICIONAIS)

1) Veja a seguir o script em bash e diga o que será feito:

for i in `ls *.JPG`; do
	 mv -v $i ${i/.JPG/.jpg}
done

Resposta

Renomeia todos os arquivos com extensão .JPG para .jpg no diretório local.

2) Considere o seguinte script, gravado em um arquivo e com a permissão de
execução:

#!/bin/bash
for $i in j; do
	 echo $i
done

Qual a saída produzida no terminal por esse script?
Resposta

Não há saída pois existe um erro no script de identificador inválido no primeiro “$i”. O Correto seria:

#!/bin/bash
for i in j; do
	 echo $i
done

3) Observe o seguinte script testando.sh:

#!/bin/bash
if [ -d “$1” ]; then
	 echo “0”
else
	 echo “1”
fi
$ bash testando.sh /sbin

Qual será o resultado exibido para o usuário?
Resposta

0

4) Crie um script em shell que mostre a linha de um arquivo contendo a palavra “incerteza”. O arquivo deverá ser passado como parâmetro, ou seja, a execução será algo como: bash script.sh arquivo. Caso nenhum arquivo seja passado como parâmetro, deverá obter a saída: “Erro, arquivo faltando”. Obs.: Use o arquivo medo.txt como parâmetro.
Resposta

#!/bin/bash

# Verifica se o arquivo existe com o parâmetro $1 que recebe o arquivo.
if [ -z $1 ]; then
	echo "Erro, arquivo faltando"
else
	# Caso o arquivo existe, é realizado um filtro com o grep e procura da palavra "inceteza". Se a palavra existir, é exibida a linha em que ela esteja.
	cat $1 | grep -i "incerta"
fi

5) Faça um script em shell para verificar se hoje é dia 30, caso afirmativo mostrar: “Finalmente, dia de pagamento”, senão exibir: “Preciso economizar nas contas”.
Resposta

#!/bin/bash

#Podemos utilizar o comando date diretamente dentro da checagem if, mas em alguns scripts podem ficar com uma apresentacao melhor transformando comandos em variaveis, como no caso que irá transformar o resultado do comando date para dia em uma variavel chamada $DIA
DIA=$(date +%d)
#Confere se hoje é dia 30
if [ $DIA = 30 ]; then
        #Caso seja dia 30 exibe a mensagem a seguir
	echo "Finalmente, dia de pagamento."
else
        #Caso NÃO seja dia 30 exibe a mensagem a seguir
	echo "Preciso economizar nas contas"
fi

6) Faça um script em bash para cumprimento ao root. Caso o usuário seja o root,
deverá:
a) Cumprimentá-lo com um “Olá, root”.
b) Informar as horas com minuto e segundos, assim como o dia, mês e ano.
c) Exibir a memória RAM livre no momento.
d) Exibir a memória RAM em uso no momento.
e) Caso o usuário não seja o root, exibir uma mensagem dizendo que ele não é.
f) o root e dizendo para ele executar o script novamente como root ou com o comando sudo.

Resposta

#!/bin/bash

#Confere com o comando whoami se o usuario que está executando o script tem poderes de root
if [ $(whoami) = 'root' ]; then
        #Exibe a mensagem para o usuario informando o nome do usuario através da variavel $USER
	echo "Olá, $USER."
        #Informa a hora, minuto e segundo usando o comando date e depois informa também o dia, mes e ano novamente com o comando date
	echo "Agora são: $(date +"%T") do dia $(date +"%d/%m/%Y")."
        #Com o comando free -m recebemos informacoes sobre a memória, então com o awk filtramos a parte referente apenas a memoria livre 
	echo "Memória livre no momento: $(free -m | awk '/buffers\/cache/ {print $4}')M."
        #Com o comando free -m recebemos informacoes sobre a memoria, então com o awk filtramos a parte referente apenas a memória em uso
	echo "Memória em em uso no momento: $(free -m | awk '/buffers\/cache/ {print $3}')M."
else
        #Caso o usuario não tenha poderes de root é exibida a mensagem informando que nao possui poderes
	echo "Você não é o usuário root, tente executar novamente esse script com o usuário root ou utilizando o comando sudo."
fi

7) Existe um arquivo tar chamado poemas.tar contendo três arquivos txt dentro. Em cada arquivo txt existe um poema. Crie um script que possa varrer os três arquivos txt e formar um novo poema utilizando apenas as frases: “incerta”, “ódio”, e “ilude”, em sequência. Cada palavra corresponde a uma frase, que deverá aparecer uma em baixo da outra, em um arquivo txt chamado poema_final.txt que deverá ser compactado gerando o arquivo poema_final.txt.gz.
Resposta

#!/bin/bash

ARQUIVOS=$(tar -tf poemas.tar)
tar -xf poemas.tar
for i in $ARQUIVOS; do
	grep -h -e incerta -e ódio -e ilude medo.txt minhas-lutas.txt ser-quem-sou.txt > poema_final.txt
done
gzip -9 poema_final.txt

8) Faça um script em Shell para trocar a codificação de um arquivo texto. Por exemplo: de iso-8859-1 para UTF-8. O arquivo deverá funcionar da seguinte maneira:
a) Testar se o arquivo é binário, caso positivo o script é encerrado, senão codifica o arquivo.
b) Testar se a conversão foi bem sucedida.
c) Criar uma condição perguntando se deseja remover o arquivo antigo, ou seja, com a codificação original.
d) Testar se a remoção do arquivo foi bem sucedida.

Informações adicionais
Para descobrir a codificação do arquivo:

file -i arquivo

Para descobrir todos os tipos de codificações disponíveis:

iconv -l

Para converter de um formato para outro:

iconv -f códigoOrigem -t códigoDestino arquivoAtual > novoArquivo

Resposta

#/bin/bash
# Configuração padrão
COD="UTF-8"
# ---------------------------------------------------------------- #
extensao="$(echo "$1" | rev | cut -d. -f1 | rev)"
nome="$(echo "$1" | rev | cut -d. -f2- | rev)" 
nomeAntigo="$(echo ${nome}-ANTIGO.${extensao})"
novoNome="$(echo ${nome}.${extensao})"
codOrigem=`file -i "$1" | awk -F "=" '{print $2}'`

# Convertendo arquivo...
clear
echo ""

# Testa se o arquivo é binário, se for sai do script, senão codifica.
if [ "$codOrigem" = "binary" ]; then
	echo "Erro na conversão do arquivo."
	echo "Esse arquivo é do tipo binário."
	echo "A codificação só é válida para arquivos do tipo texto."
	exit 0
else
	echo "Convertendo o arquivo ($1) para $COD"
	sleep 1
	mv -f "$1" "${nomeAntigo}"
	iconv -f $codOrigem -t $COD "${nomeAntigo}" > $novoNome
fi

# Testa se a saída foi bem sucedida.
if [ "$?" = "0" ]; then
	echo "Conversão bem sucedida!"

	# Testa a remoção do arquivo antigo
	echo "Deseja remover o arquivo ANTIGO? [S/N]" ; read resp
	if [ "$resp" = "s" ] || [ "$resp" = "S" ]; then
	    echo "Removendo o arquivo antigo (${nomeAntigo})"
	    sleep 1
		rm "${nomeAntigo}"


	    # Testa se a saída foi bem sucedida.
	    if [ "$?" = "0" ]; then
		echo "Arquivo removido com sucesso!"
		exit 1
	    else
		echo "Erro ao remover arquivo."
		exit 0
	    fi
	else
	    echo "Conversão concluída e arquivo não removido!"
	    exit 1
	fi

else
	echo "Erro na conversão do arquivo."
	exit 0
fi

9) Crie um script em shell para realizar um becape. O arquivo de becape gerado deverá conter o seguinte formato: becape-data_de_criação.tar.bz2. Junto a esse arquivo deverá ser gerado um arquivo de log chamado logBKP aonde deverá conter as seguintes informações:

Execução do Becape - dd/mm/aaaa
Horário de início - hh:mm:ss

Arquivos compactados:
Caminho completo do arquivo1
Caminho completo do arquivo2
Caminho completo do arquivo3...

Diretório de becape: /mnt/becape/

Horário da Finalização do becape - 20:26:08

O diretório aonde ficará armazenado o becape deverá ser o “$HOME/becape/”, assim como o arquivo de log. O diretório a ser compactado é de sua escolha. Deverá ter uma condição (0 ou 1) para informar se deseja (1) ou não (0) gerar o log. O becape deverá ser feito de forma recursiva, preservando as permissões dos arquivos.
Resposta

#!/bin/bash

# Formato da data que será acoplada ao nome do arquivo.
DATA=$(date +%d_%m_%y)

# Diretório onde ficará o becape
DIR="$HOME/becape/"

# Cria o diretório de becape caso o mesmo não exista
mkdir -p "$DIR" 2>/dev/null

# Diretório dos arquivos que serão copiados
BKP=("$HOME/scripts/")

# Nome do arquivo de log e diretório a ser gravado
ARQ_LOG="$DIR/logBKP"

# Criar Log? (padrão = 1)
# 1 = sim, 0 = não
LOG="1"

# Configurações gerais
# Nome do arquivo compactado
ARQ="becape-$DATA.tar.bz2"

#Confere se é para gerar histórico do becape
if [ $LOG -eq 1 ]; then
    #Insere linhas no histórico de becape com informações sobre data de início
	echo "Execução do becape - $(date +%d/%m/%Y)" >> "$ARQ_LOG"
	echo "Horário de início - $(date +%k:%M:%S)" >> "$ARQ_LOG"
	echo >> "$ARQ_LOG"
	echo "Arquivos compactados:" >> "$ARQ_LOG"

		#Compacta os arquivos e insere no histórico de becape os arquivos copiados
        tar -cvpjf "$DIR$ARQ" "$BKP" >> "$ARQ_LOG"

        #Inclui informações finais no histórico de becape
	echo >> "$ARQ_LOG"
	echo "Diretório de becape: ${DIR}" >> "$ARQ_LOG";
	echo >> "$ARQ_LOG";
	echo "Horário da Finalização do becape - $(date +%k:%M:%S)" >> "$ARQ_LOG"
	echo "============================================" >> "$ARQ_LOG"
	echo >> "$ARQ_LOG"
else
        #Caso o histórico do becape não seja ativado apenas compacta os arquivos e salva no local determinado. 
        tar -cvpjf "$DIR$ARQ" "$BKP"
fi

10) Utilizando como base o arquivo /etc/passwd do seu sistema, desenvolva um script em shell capaz de verificar quantos usuário “humanos” há em seu sistema. Obs, normalmente nos sistemas GNU/Linux usuário humanos utilizam o UID (terceira coluna do arquivo) a partir de 1000 e a cada usuário adicionado é somado um número.
Resposta

#!/bin/bash

#Com o comando cut especificamos o delimitador como dois pontos, selecionamos para trabalhar com a terceira ocorrência e utilizamos essa regra em todas as linhas do arquivo /etc/passwd, o resultado será repassado para o grep, aonde serão filtradas as linhas que possuam qualquer número entre 1000 e 1999, então o resultado do grep é repassado para o comando wc, que conta o número de linhas que recebeu da saída do grep. Dessa forma temos o número de usuários humanos cadastrados no sistema.

numero_usuarios="$(cut -d: -f3 /etc/passwd | grep 1[0-9][0-9][0-9] | wc -l)"

echo "O número de usuários é $numero_usuarios"

11) Qual é o comando que fecha a estrutura de repetição for e while?
Resposta

done

12) Qual comando fecha uma estrutura case?
Resposta

esac


QUESTÕES DO CAPÍTULO 11 (INTERAÇÃO COM SHELLSCRIPT)

1) Utilize o comando read para perguntar o nome do usuário, exibi-lo na tela e, por fim, salvar no arquivo “/tmp/usuario”.
Resposta

#!/bin/bash

echo "Qual seu nome?"
read nomeusuario;
echo "$nomeusuario" > /tmp/usuario
echo "O nome do usuário é: $nomeusuario"

2) Utilizando o kdialog, crie um diálogo de sim/não perguntando se o usuário deseja apagar a pasta de cache do navegador Firefox, nesse mesmo diálogo informe também quanto de espaço em disco esse diretório está utilizando. O endereço do diretório é: “$HOME/.cache/mozilla/firefox”.
Resposta

#!/bin/bash

kdialog --title $"Apagar cache do Firefox" --yesno $"Deseja apagar o diretório de cache do navegador Firefox?
Espaço utilizado: $(du -hs "$HOME/.cache/mozilla/firefox")"
if [ "$?" -ne 1 ]; then
	rm -Rf "$HOME/.cache/mozilla/firefox"
fi

3) Utilizando o dialog, exiba na tela a data e hora atual.
Resposta

#!/bin/bash

dialog --msgbox "Agora são $(date +%H:%M\ do\ dia\ %d/%m/%Y.)" 0 0

4) Em quais situações é mais vantajoso utilizar o dialog?
Resposta

O dialog é o único que funciona diretamente no terminal, ou seja, não necessita de um servidor gráfico, por exemplo, o Xorg. Dessa forma é útil principalmente para criar interfaces em servidores que se tem acesso apenas por ssh.

5) Em quais situações é mais vantajoso utilizar o kdialog?
Resposta

Quando o ambiente gráfico utilizado for o KDE, sendo o kdialog melhor integrado a ambientes feitos utilizando a biblioteca gráfica QT, aonde se destaca o desktop KDE.

6) Em quais situações é mais vantajoso utilizar o zenity?
Resposta

O zenity se integra bem em todos os ambientes feitos utilizando a biblioteca GTK, aonde destaca-se os desktops Gnome, XFCE e Unity. Por possuir uma quantidade maior de recursos do que o kdialog, em algumas ocasiões é mais vantajoso utilizá-lo também em ambientes que utilizam a biblioteca QT.

7) Crie um temporizador utilizando zenity, aonde deve ser apresentada uma escala com até 600 segundos. Ao final do período estipulado exiba uma mensagem ao usuário informando quanto tempo passou.
Resposta

#!/bin/bash

temporizador=$(zenity \
	 --title="Temporizador" \
	 --scale \
	 --text="Quantos segundos devo aguardar?" \
	 --value="60" \
	 --min-value="1" \
	 --max-value="600")

sleep $temporizador

zenity \
	 --title="O tempo passou" \
	 --info --no-markup \
	 --text="Já se pasaram $temporizador segundos."

8) Utilize o kdialog para criar uma interface que exiba um diálogo para abrir um arquivo de imagem, depois um diálogo para salvar um arquivo de imagem, logo após, um diálogo de menu com as opções de resolução: 640×480, 1280×720 e 1920×1080. Crie com esses diálogos um script de redimensionamento de imagem.
Resposta

#!/bin/bash

img_origem="$(kdialog --title "Redimensionar imagem" --getopenfilename "$HOME" "*.jpg *.png *.gif *.tiff *.bmp")" 

img_destino="$(kdialog --title "Redimensionar imagem" --getsavefilename "$HOME" "*.jpg *.png *.gif *.tiff *.bmp")"

resolucao=$(kdialog --title "Redimensionar imagem" --menu "Escolha uma resolução:" 640x480 "640x480" 1280x720 "1280x720" 1920x1080 "1920x1080")

convert "$img_origem" -resize $resolucao "$img_destino"

kdialog --title "Redimensionar imagem" --msgbox "Conversão concluída!"


QUESTÕES DO CAPÍTULO 12 (EXECUTANDO SHELLSCRIPT AUTOMATICAMENTE NO BOOT)

1) Qual a principal função de um sistema init?
Resposta

É um sistema responsável por iniciar os programas no sistema operacional, assim como suas checagens e monitoramentos.

2) Cite 3 tipos de inits.
Resposta

SysVinit, Upstart, Systemd

3) Qual o procedimento utilizado para ativar o serviço samba no Upstart?
Resposta

update-rc.d samba enable

4) Qual o procedimento para parar e iniciar o servidor samba no Upstart?
Resposta

Parar o serviço samba:

service samba stop

Iniciar o serviço samba:

service samba start

5) O Desktop Manager Gnome acabou de ser instalado, jundo com o GDM (Gnome Display Manager), o qual deseja-se que inicie o serviço junto com o boot. Qual o procedimento utilizado para habilitar o serviço gdm no boot para o init Systemd?
Resposta

systemctl enable gdm

6) O Gnome acaba de ser atualizado, porém você encontra-se logado no Gnome, e para que as mudanças surjam efeito é preciso reiniciar o servidor X, o que pode ser feito reiniciando o serviço do gdm. Como proceder para reiniciar o gdm?
Resposta

systemctl restart gdm


QUESTÕES DO CAPÍTULO 15 (MAIS ALGUNS CONCEITOS)

1) Defina o que é um sistema multitarefas e um sistema multiusuário. Dê exemplo de cada um deles.
Resposta

Sistema multitarefas é um sistema capaz de realizar várias tarefas ao mesmo tempo, ou seja, navegar na internet, escutar música e editar textos. Sistema multiusuário é um sistema que permite que mais de um usuário utilize o sistema ao mesmo tempo. Lembrando que todo sistema multiusuário é multitarefas, mas nem todo sistema multitarefas é multiusuário.
Exemplo de sistema multitarefas: Windows, Gnu/Linux, MacOS. Exemplo de sistemas multiusuários: Gnu/Linux, FreeBSD.

2) Defina o que é a GPL e para que ela serve?
Resposta

É uma das possibilidades de licenciamento de software, no caso a Licença Pública Geral, denominação dada a uma das licenças de software livre mais utilizadas no mundo. Ela assegura que um software licenciado sob as suas regras mantenha as quatro liberdades principais do software livre.

3) Quantas são as liberdades ou regras criadas para proteger o software livre e quais são?
Resposta

São quatro liberdades. Liberdade 0: Executar o programa para qualquer propósito; Liberdade 1: Estudar como o programa funciona e adaptá-lo as suas necessidades; Liberdade 2: Redistribuir cópias; Liberdade 3: Aperfeiçoar o programa e liberar o aperfeiçoamento. Acesso ao código fonte é um pré-requisito para as liberdades 1, e 3.

4) O que é o projeto GNU?
Resposta

É um projeto destinado à criação de aplicativos livres, aplicativos esses essenciais para compor um sistema operacional completo.

5) Defina software livre.
Resposta

É qualquer programa de computador que pode ser usado, copiado, estudado, modificado e redistribuído sem nenhuma restrição.

6) O que é Linux e o que é GNU/Linux?
Resposta

Linux é o nome do kernel criado por Linus Torvald. GNU/Linux é o nome do Sistema operacional composto pelo kernel Linux e as ferramentas GNU.

7) É correto chamar o GNU/Linux de apenas Linux?
Resposta

De acordo com Richard Stallman, criador do projeto GNU, não. Muitos chamam o sistema operacional apenas Linux e não GNU/Linux por comodidade, o que seria como um apelido, mas para os quem não conhecem, pode ser confuso separar o Linux kernel do Linux sistema operacional.

8) O que é interoperabilidade?
Resposta

É a possibilidade de programas diferentes se comunicarem. Por exemplo, um arquivo é criado e salvo em um programa de edição de textos, esse arquivo deverá ser aberto e editável em um outro programa de edição de textos.

9) O que são softwares legados?
Resposta

São programas obsoletos, porém que ainda são importantes. Empresas grandes e antigas geralmente possuem sistemas legados, como é o caso de bancos.