Tudo sobre Tecnologia da Informação

Segredos do Terminal

Como Navegar pelas Pastas

Para navegar em pastas, usamos o comando cd, dessa forma:


cd /usr/local

PS: O terminal do Linux pode ser aberto usando Ctrl Alt T.

Se estiver na pasta desejada, basta digitar o caminho, assim:


cd bin

PS: Não esqueça da primeira barra, caso vá pra outro diretório distante do atual. A barra indica o diretório raiz.

As mesmas dicas valem pra executar programas ou outros arquivos, mas não esqueça da extensão dos mesmos, caso existam, pra rodar executáveis é necessário colocar o ponto. Para abrir o local, é preciso colocar xdg-open no início e em qualquer comando, também pode ser necessário colocar entre aspas, caso tenha espaços no nome, dessa forma:


./"Nome do Executavel"

No Linux, alguns comandos necessitam do uso de administrador, por isso, dependendo da distro (como o Ubuntu), você acessa ele digitando sudo su e colocando a senha, ou podemos usar o sudo apenas num comando específico que o exija (tipo sudo nautilus fotos.jpg). O Debian faz isso usando apenas o su, pois ele não usa sudo em nada. Quando o terminal está em root, ele está com um #, enquanto no modo usuário está com um $.

E também podemos iniciar programas escrevendo o nome dele diretamente (pode ser necessário incluir um ./ antes, tudo junto, sem espaços, para arquivos executáveis, ou o caminho dos mesmos, como por exemplo ./script.sh, exceto quando estão no PATH), inclusive usando com um parâmetro de inicialização, indiciando o que o programa abrirá, por exemplo:


firefox uol.com.br
gedit /home/administrador/Documentos/Contatos.txt

Se quiser renomear um arquivo, use o comando mv seguido pelo nome antigo e o nome que o substituirá, dessa forma:


mv "Fotos do dia.jpg" pictures.jpg

Se quiser deletar um arquivo pernamentemente pelo terminal, use o comando rm, assim:


rm "Fotos do dia.jpg"

Para fazer o mesmo com pastas, usamos rm com o parâmetro -r, ou o -rf que força a exclusão sem perguntar, pra diretórios vazios usamos -d veja um exemplo:


rm -rf "Nova Pasta"

PS: Cuidado com isso.

Também podemos mover arquivos, usando o comando mv, seguido pelo caminho pro qual o arquivo será movido, dessa forma:


mv fotos.jpg /home/administrador/

Para copiar, usamos da mesma forma, com o comando cp, só que o caminho terá que ter o nome informado caso queira copiar com outro nome, dessa forma:


cp fotos.jpg /home/administrador/pictures.jpg

Para mover ou copiar diretórios recursivamente, use o parâmetro -r:


cp -r diretorio /home/administrador/

Tanto o mv quando o cp podem ser usados com o parâmetro -f que suprime o pedido de substituição, caso exista um arquivo de mesmo nome, e da mesma forma o -i perguntar se desejamos substituir ele.

PS: A barra tem que ser a /, senão não vai funcionar. O * pode ser usado como coringa para vários arquivos em todos os casos (por exemplo, *.txt afetaria todos os arquivos de texto).

Para ver os diretórios dentro das pastas, use o comando ls (com o parâmetro -l podemos ver as permissões, que podem ser alteradas pelo comando chmod).

Podemos também usar parâmetros no ls, o parâmetro -d lista só diretórios, e o -a para arquivos ocultos. Um uso dele seria ls -a.

Também podemos listar apenas um tipo de extensão de arquivo, por exemplo:


ls *.so

Ou especificar o caminho que queremos verificar, caso não queira ver o conteúdo do diretório atual:


ls /usr/bin

Para voltar um diretório, use o cd com dois pontos na frente, assim:


cd ..

PS: Com um ponto, ele fica no mesmo diretório.

Você pode voltar a raiz do diretório da mesma forma, colocando uma barra após o cd, assim:


cd /

PS: O lado da barra é sempre o mesmo, e minúsculas são diferenciadas.

Para limpar toda a tela do terminal, basta executar o comando clear.

Comandos para Desligar

Para desligar, usamos o comando sudo shutdown -h now.

Para reiniciar, usamos sudo shutdown -r now ou sudo reboot.

Para programar isso, usamos o número em minutos, por exemplo:


sudo shutdown -r 10

Usamos o parâmetro -c para cancelar qualquer um deles. Para exibir uma mensagem colocamos ela entre aspas. Veja um exemplo:


sudo shutdown -r 10 "Reiniciaremos em 10 Minutos"

Como Procurar Comandos já digitados

Podemos usar o comando history para visualizar um comando já digitado.

Como Encerrar Processos

Abra o terminal e digite top (pode ser também htop, ps ou pstree, mas a exibição é diferente) para exibir os números dos códigos ativos, depois use o comando kill seguido do código PID do processo, por exemplo:


kill -9 352

Podemos usar o xkill no terminal (ou clicar Alt F2), que transformará o cursor do mouse num "X", que deverá ser clicado somente no programa travado. Temos também a opção killall para matar todos os processos de um mesmo tipo.

Podemos também usar killall e o nome do processo a ser excluído (como por exemplo killall firefox).

Usando os Comandos para Verificar Erros

Para procurar e corrigir erros, usamos os comandos nessa ordem:


fdisk -l # (lista as partições)
e2fsck /dev/hdxx -y # (colocar a partição com problema)

Ou use apenas fsck.ext3 /dev/hda1.

PS: Pode ser necessário desmontar a partição usando o comando umount /dev/hdxx e depois montar de novo com mount /dev/hdxx .

Em sistemas 32 bits, podemos forçar o uso de PAE, que permite acessar mais memória, digitando cat /proc/cpuinfo | grep -i pae, sudo apt-get install linux-generic-pae e sudo apt-get install linux-headers-generic-pae.

Escrevendo na Tela

Se quiser escrever frases na tela do terminal, use o comando echo pra isso, dessa forma:


echo "Essa é uma frase com acentuação!"

Ou em um arquivo:


echo "Essa é uma frase com acentuação!">>~/Desktop/teste.txt

Para pular uma linha num conteúdo escrito, podemos usar echo>>~/Desktop/teste.txt.

O echo deve ser usado com aspas.

PS: Usando dois >> ele adicionará uma nova linha no arquivo, caso exista, se usar um só > ele sobrescreverá o arquivo existente.

Usando com Redes e Internet

Para mudar o IP, podemos usar o comando network-manager com os parâmetros stop (que libera o endereço IP) e na sequência o start (que renova o endereço IP), dessa forma:


sudo service network-manager stop 
sudo service network-manager start

Podendo também ser assim, em uma interface específica:


sudo ip link set down eth0
sudo ip link set up eth0

Use o sudo /etc/init.d/nscd restart para modificar e liberar o cachê DNS (pode ser necessário instalar o nscd com apt-get).

Para exibir informações sobre o IP e o endereço MAC, além das interfaces, digite ip addr show.

PS: Antigamente existia o ifconfig no Linux, mas ele foi descontinuado. Os comandos básicos eram esses:


ifconfig enp2s0 down # Desativa uma interface

ifconfig enp2s0 up # Ativa uma interface

ifconfig -a # Mostra informações detalhadas sobre todas as interfaces

Para conferir o ping (latência) e a conectividade das páginas ou IPs, use simplesmente o comando ping seguido do site ou IP (use Ctrl Z para interromper). O traceroute é usado para rastrear a rota de um pacote.

Para descobrir o IP de um site, use o comando host nomedosite.com.br.

Para descobrir o MTU da interface, use sudo ip link show.

Para selecionar o tamanho em bytes dos pacotes enviados pelo ping, usamos o -s seguido do número (por exemplo, ping -s 1500 www.google.com.br). Para selecionar a quantidade de requisições use o parâmetro -c seguido do número, por exemplo -c 6

Podemos também usar parâmetros no traceroute, como para aumentar a quantidade máxima de saltos com o -m, por exemplo traceroute -m 60 www.google.com.br.

PS: Tanto no ping quanto no traceroute, pode ser necessário colocar -4 para forçar IPv4 ou -6 para forçar IPv6.

Ainda nos problemas de rede, podemos digitar o comando netstat -a -n -e para verificar todas as portas abertas e os IP's aos quais elas estão conectadas. Ele foi substituído por ss -all.

Para vermos o cachê ARP, usamos arp -a (mas foi substituído por ip neigh show). Para remover um IP dele, usamos ip neigh del 1.1.1.1 dev enp2s0 (substituir o 1.1.1.1 pelo IP desejado).

Podemos usar ip route para ver a rota da nossa rede. E também podemos adicionar e remover rotas especificando o IP com ip route add 192.168.0.0/24 via 172.16.0.1 dev enp2s0 (na ordem rede a ser acessada, máscara da mesma com notação CIDR e gateway por qual vai acessar, adicione ao arquivo /etc/network/interfaces para adicionar de forma permanente) e ip route del 192.168.0.0/24, respectivamente.

Podemos também utilizar o comando nslookup assim, para vermos dados sobre o servidor do site:


nslookup -q=ns www.google.com.br

Administrar Serviços

Para administrar os serviços inicializados ou parados, usamos o service seguido da opção desejada, dessa forma:

PS: Para ver os serviços usados, utilize o comando service --status-all.

Administrando Usuários

Para criar um usuário novo com senha, basta digitar isso:


sudo useradd nomedousuario -p senha

PS: Caso queira criar um usuário sem senha, basta omití-la e também o parâmetro -p.

Caso queira adicionar/alterar a senha de um usuário local, digite isso:


sudo passwd nomedousuario

Para dar privilégios de administrador ao usuário criado:


sudo usermod -aG sudo nomedousuario

PS: Em algumas distros, o segundo sudo pode ter que ser substituído por root.

Para excluir um usuário:


sudo userdel -f nomedousuario

PS: Pode ser necessário especificar a opção -r para remover o diretório padrão do usuário em home.

Para listar os usuários existentes:


cat /etc/passwd

Comandos no Terminal

Agora que vimos alguns comandos do Linux, veja alguns dos comandos mais usados:

Caso algum comando não seja encontrado, digite apt-get install nomedocomando.

Para interromper algum comando sendo executado, dê um Ctrl C. Para ajuda a um comando, digite ele seguido de --help, como por exemplo ls --help.

Como coringa, usamos o *, podendo inclusive usar nas extensões, como *.*. E comandos do terminal são case-sensitive.

A variável $? guarda o status do último comando executado. Se o mesmo foi executado corretamente, ele retornará 0, se o comando der erro ele retornará outro número diferente de zero (por exemplo, comando não encontrado retorna 127). Podemos visualizar o conteúdo dessa variável digitando no terminal echo $?. Esse código também pode ser usado em Shell Script também, como em condicionais e laços de repetição.

PS: Tome cuidado com as fork bombs, que chamam vários processos iguais até travar o sistema. No terminal do Linux, uma fork bomb pode ser assim (quase sempre num arquivo Shell Script):


# Não execute nada desse código:

:(){:|:&};:

Só pra entender, acima é uma função chamada ":" (pode ser qualquer nome) que chama a si mesma em primeiro e segundo plano.

Criação de Arquivos BASH

Para criar arquivos BASH, crie um arquivo de texto no Bloco de Notas e salve com a extensão .sh (ou use o vi no terminal, o touch ou o echo com arquivo no terminal), para criar um arquivo de scripts novo, e coloque os comandos dessa forma:


#!/bin/bash

echo "Criação do BASH em Linux Efetuada com Êxito."

echo

echo -n "Pressione qualquer tecla pra continuar..."

read

No código acima, o #!/bin/bash define o shell especificado para executar ele e o echo sem nada pula uma linha.

Dessa forma, podemos criar arquivos que executem várias funções de uma vez. Todos os comandos do shell funcionam normalmente no BASH, mas alguns caracteres podem não funcionar. Podemos inclusive, usar variáveis e operadores condicionais e de repetição.

Lembrando que para executar um script BASH no Linux, precisamos dar um sudo chmod +x nomedoscript.sh para rodar ele como executável (caso contrário ele é identificado como texto). Podemos digitar também, sem dar permissão, bash nomedoscript.sh, mas não é recomendado, a não ser em casos que é impossível dar as tais permissões.

PS: Podemos usar outros shells do Linux, e a extensão .sh é opcional, já que o Linux identifica pelo mimetype, pela declaração de bash e pela permissão de execução, por isso ele pode ter outra extensão ou mesmo não ter nenhuma, mas pra facilitar a identificação, se usa a extensão .sh.

Variáveis no Shell

Para utilizar variáveis no shell, apenas usamos o nome dela com a atribuição (tem que estar com o = tudo junto, tipo num=3). As variáveis são usadas com um cifrão antes delas (tipo $num), exceto na atribuição. Podemos também atribuir um caminho de pasta à elas, programas ou sites à elas. Veja um exemplo:


pasta=$HOME/Imagens

xdg-open $pasta

exit

PS: Variáveis em shell diferenciam maiúsculas de minúsculas.

Se quiser pedir dados do usuário em variáveis, use o comando read para ele ser inserido na variável. Para não pular de linha, coloque o parâmetro -n no echo. Veja um exemplo:


echo -n "Digite seu nome: "

read nome

echo -n "Digite sua idade: "

read idade

ano=$[2018 - $idade]

echo "Olá $nome, você nasceu em $ano."

exit

Podemos também usar o read diretamente, por exemplo:


read -p "Digite seu nome: " nome

read -p "Digite sua idade: " idade

PS: Você pode usar $USER como um coringa que mostrará o nome do usuário logado no momento.

Essas são as variáveis do sistema (usadas também com $):

Variável Conteúdo Exibido
HOME /home/UsuarioAtual
USER "UsuarioAtual"
LOGNAME "UsuarioAtual"
PWD Diretório Atual
LANG Idioma Atual
SHELL /bin/bash (ou o Shell Atual)
TERM Tipo de Terminal Usado
PATH Diretórios definidos no Path
MAIL E-mail Definido
OSTYPE Tipo de Sistema Usado

Operações Aritméticas

Como visto no exemplo anterior, é possível fazer operações aritméticas no BASH, normalmente com +, -, * e /, o % funciona normalmente como cálculo de módulo.

Veja um exemplo de uso para operações aritméticas:


read -p "Digite o primeiro número: " num1

read -p "Digite o segundo número: " num2

clear

soma=$[$num1 + $num2]

subs=$[$num1 - $num2]

mult=$[$num1 * $num2]

divi=$[$num1 / $num2]

rest=$[$num1 % $num2]

echo "A soma entre $num1 e $num2 é igual à $soma."

echo "A subtração entre $num1 e $num2 é igual à $subs."

echo "A multiplicação entre $num1 e $num2 é igual à $mult."

echo "A divisão entre $num1 e $num2 é igual à $divi com resto de $rest."

echo

read

Também podemos fazer operações aritméticas sem variáveis, apenas digitando echo seguida da operação, como echo $[10 + 5], ele retornará o resultado da conta.

PS: Em alguns shells, a operação deve ser feita com dois parênteses, como por exemplo echo $((10 + 5)).

Condicionais IF, ELSE e ELIF e CASE

Podemos também usar condicionais no shell, usando o if, o else e o elif. Dessa forma:


read -p "Digite um Número: " num

if [ $num -lt 10 ]; then
    echo "É menor que 10."
elif [ $num -gt 10 ]; then
    echo "É maior que 10."
else
    echo "É igual à 10."
fi

PS: Note que precisa ter um espaço entre as variáveis e os valores, dentro dos colchetes. Em arquivos sh pode ser necessário haver tabulação. Caso um condicional if tenha mais de uma opção pra mesma condição, coloque cada uma em colchetes separados, e o operador && ou || entre os colchetes sem espaços.

Veja outro exemplo de shell para criar pastas:


cd $HOME/Desktop

if [ -d teste ]; then
    echo "Essa Pasta já Existe."
else
    mkdir teste && echo "A Pasta foi Criada."
fi

PS: O && é para executarmos mais de um comando na mesma linha. Temos também o elif, que funciona como o else if. Para verificar se um arquivo existe, use o parâmetro -f, o parâmetro -d é para verificar se um diretório existe.

Veja algumas opções que podemos usar com números, só lembrando que eq e ne é necessário usar com letras e palavras também:

-eq Igual
-ne Diferente
-lt Menor que
-le Menor que ou igual
-gt Maior que
-ge Maior que ou igual

Veja um exemplo para calcular médias:


read -p "Digite a primeira nota: " n1

read -p "Digite a segunda nota: " n2

# Não esqueça da ordem de precedência:
med=$[($n1 + $n2) / 2]

if [ $med -lt 4 ]; then
    sit="Reprovado"
elif [ $med -gt 6 ]; then
    sit="Aprovado"
else
    sit="Em Recuperação"
fi

clear

echo "A média das notas é $med. $sit!"

Temos também o case, usado dessa forma:


read -p "Digite sua opção: " opc

case $opc in
    1)
        echo "Opção 1!";;
    2)
        echo "Opção 2!";;
    3)
        echo "Opção 3!";;
    *)
        echo "Opção Inválida!";;
esac

PS: O asterisco seria como o "default" em outras linguagens.

Laço de Repetição FOR e WHILE

Para criar uma estrutura de repetição em shell, usamos o for, dessa forma:


for r in $(seq 1 1 44); do
    echo "Volta o cão arrependido, com suas orelhas tão fartas, com seu osso roído, e com o rabo entre as patas..."
done

read

O in passará os números de incremento, com eles entre o cifrão e os parênteses, representando na ordem, o início, incremento e fim do mesmo O do especifica os comandos a serem executados.

Para fazer o incremento também aparecer no echo, usamos a variável de incremento, dessa forma:


for r in $(seq 1 1 44); do
    echo "$r - Volta o cão arrependido, com suas orelhas tão fartas, com seu osso roído, e com o rabo entre as patas..."
done

read

PS: O laço pode ser feito assim, mais parecido com o laço em linguagem C e semelhantes:


for((i = 0; i < 10; i++)); do # Usamos os mesmos operadores lógicos do C e semelhantes
    echo $i
done

Veja outro exemplo com um programa que exibe a tabuada de um número:


#!/bin/bash

# Função

tabuada() {
    read -p "Digite um número para ver sua tabuada: " num

    echo

    echo "Tabuada de $num:"

    echo

    echo "-----------------"

    for t in $(seq 1 1 10); do
        res=$[$num * $t]

        echo "$num x $t = $res"
    done

    echo "-----------------"

    read -p "Deseja digitar outros números? [S/N] " opc

    if [ $opc = s ]||[ $opc = S ]; then
        clear

        tabuada # Recursividade
    fi
}

# Chamada da função

tabuada

O while podemos utilizar assim:


cont=0

while [ $cont -le 10 ]; do
    echo $cont

    cont=$[$cont + 1]
done

Com break e continue:


cont=0

while true; do
    cont=$[$cont + 1]

    if [ $[$cont % 2] -eq 0 ]; then
        continue
    elif [ $cont -gt 50 ]; then
        break
    fi

    echo $cont
done

Array

Para criar um array num BASH podemos fazer assim:


vetor=(1 2 3 4)

# O asterisco exibe todos os elementos do array

echo ${vetor[*]}

Podemos também colocar as posições diretamente:


vogais=()

vogais[0]="A"
vogais[1]="E"
vogais[2]="I"
vogais[3]="O"
vogais[4]="U"

for i in ${vogais[*]}; do
    echo -n "${i} "
done

echo

Funções em BASH

Podemos criar funções em BASH, veja um exemplo simples de criação de uma função:


mensagem() {
    echo "Introdução à Funções em BASH"
}

mensagem

# Também pode ser assim, com a palavra function e sem parênteses:
# function nomedafuncao {
#     
# }

PS: Note que para exibir, não usamos os parênteses, pode se criar funções sem a palavra function, mas ela terá que ter parênteses após o nome indicando que é uma função, sem nada dentro.

Para passarmos parâmetros, não os colocamos dentro dos parênteses, eles são jogados nas variáveis $1, $2, $3, etc. Por exemplo:


multi() {
    echo "A multiplicação é $[$1 * $2]"
}

multi 10 5

Exemplo com parâmetro e retorno:


soma() {
    return $[$1 + $2]
}
 
soma 10 5 # Guardará automaticamente na variável $?

echo "A soma é $?"

Só que a forma acima só retorna valores inteiros entre 0 e 255, para simular o retorno com outros tipos de dados e números fora dessa faixa, fazemos assim:


soma() {
    echo $[$1 + $2]
}

res=`soma 1000 500`

echo "A soma é $res"

Clique Aqui e veja o código de um arquivo BASH no qual ele adicionará dados de agenda à um arquivo TXT.

Vários outros comandos úteis podem ser vistos aqui: https://www.devmedia.com.br/comandos-importantes-linux/23893