Aulas‎ > ‎Sistemas Operacionais‎ > ‎

Nanocurso de Linux

Nanocurso de Linux
Tux.




















Introdução

Vários assuntos para se conversar:
  • História, motivos para conhecer Linux/Unix, onde é aplicado, padrão POSIX, cultura open source, open source não é necessariamente grátis, conceito de distribuição...

  • Distribuições (distros) gerais (desktop e server):

    • Ubuntu

      •  www.ubuntu.com.

      • É a que usaremos neste material!

      • "Aparentada" com Debian (a origem), Mint e outras.

    • Fedora

      • "Aparentada" com RedHat (a origem), CentOS, Oracle Linux e OpenSuse (esta não é parente mas segue o mesmo padrão).

  • Distribuições especializadas:

    • Slax (pendrive), Kali Linux (segurança), OpenWRT (wireless), etc.

  • Principais ambientes gráficos (desktops): Gnome, KDE, Xfce, etc.

    • E suas implicações nas distribuições...

  • LTS (Long Term Support) e ciclo de desenvolvimento.

  • Familiarização com o desktop escolhido.

    • Menu do sistema e barra de tarefas. Aplicações e utilitários que acompanham a distro (monitor do sistema, navegadores, LibreOffice, gerenciador de arquivos, etc.). Como organizar janelas.

 Conheça mais sobre as distribuições Linux em: https://distrowatch.com/



Terminal – Comandos básicos para se familiarizar

Procure terminal no menu, ou use o atalho <ctrl> + <alt> + <t> que funciona na maior parte das distribuições.


Atenção, o Linux é case sensitive!

  • date          cal

    • Verifica data e hora e o calendário.

  • hostname

    • Mostra o nome do host

  • whoami

    • Mostra o usuário atual.

    • Observe as informações que constam no prompt de comando!

  • w

    • Usuários logados.

    • Compare com o comando who. Muitas vezes há diversas formas de se fazer a mesma coisa, ou se obter a mesma informação.

  • pwd

    • diretório atual. Você deve estar no diretório do usuário.

  • cd          cd /          cd ~

    • movimentação entre diretórios

    • ~ atalho pra "home" do usuário

    • / = root, raiz. O diretório /root é o diretório do usuário root.

  • dir

    • Lista os diretórios. Verifique a estrutura com dir /.

    • Cada diretório da estrutura pode ser montado em uma partição ou disco.

    • Cada diretório tem sua função.

      • P.ex. /etc armazena arquivos de configuração, /lib as bibliotecas e /bin aplicações e utilitários.

      •  Pesquise o papel dos demais diretórios!

  • ls          ls -lah          ls -lahS

    • Visualiza os arquivos e diretórios.

    • Mas como saber o que fazem essas opções? Precisamos de ajuda!

Em tempo, o comando exit sai do terminal... Ou faz "logoff" conforme o caso.



Obtendo ajuda no terminal

  • comando --help

    • Observe que os argumentos de comando abreviados são usados com "-" e as opções "verborrágicas" (verbose), mais legíveis, mas mais compridas, são usadas com "--".

  • man comando

    • Abre a página de manual do comando.

    • Observe a parte de baixo da tela. Você verá como sair do manual.

  • man -k termo_de_busca

    • Permite pesquisar no manual.

  • help e info ambém são comandos úteis para se obter ajuda.

    • Note que o comando help menciona o GNU bash (Bourne-Again Shell), ou simplesmente bash, o shell (interpretador de comandos) mais usado no Linux.

    • Siga as dicas apresentadas pelo comando help...


 Ajuda de linhas de comando bash, powershell, bancos de dados, etc.: https://ss64.com/



 Digite um comando e obtenha uma explicação detalhada: https://explainshell.com/



Desligando e (re)inicializando a máquina

  • reboot

    • Reinicializa a máquina.

  • shutdown now

    • Desliga a máquina imediatamente.

    • Veja a ajuda para saber como desligar a máquina depois de algum tempo.


Ah, sim! Para iniciar a máquina aperte o botão de energia, seja físico, seja virtual!8^P



Dicas práticas de terminal

  • <tab> para autocompletar.

    • A tecla <tab> é sua grande amiga e a digitadora mais rápida do mundo!

  • <q> para sair de determinados comandos.

  • <shift> + <pg up/down> para percorrer a tela para cima e para baixo, inclusive quando logado sem a interface gráfica.

  • <ctrl> + <l> para limpar a tela mantendo sua digitação.

    • O comando clear limpa a tela, mas você tem que digitá-lo...

  • <ctrl> + <alt> + <Fn> para alternar entre os terminais.

    • O número do terminal da interface gráfica varia entre as distribuições. 1, 2 ou 7 são os mais comuns.

  • history

    • Histórico de comandos.

    •  Use os comandos de ajuda para descobrir como limpar o histórico!

  • A \ permite quebrar o comando em várias linhas!



Obtendo informações sobre o sistema

  • uname          uname -a

    • Informações do kernel.

  • lsb_release -a           cat /etc/*release

    • Informações da distribuição.

    • O que é /etc/...?

    •  Pesquise sobre os curingas "*" e "?".

  • cat /proc/cpuinfo           lscpu

    • Informações da CPU.

    • As configurações nos sistemas Linux (e Unix) ficam em arquivos texto. Até os periféricos são acessados como se fossem arquivos...

  • lshw

    • Lista as configurações gerais.

  • lslogins           lslogins -u

    • Lista os usuários do sistema.

  • last -x              w

    • Últimos logins, reinicializações e desligamentos.

  • uptime

    • Informa há quanto tempo o sistema está ligado.

  • upower -d

    • Exibe as informações sobre bateria/energia.

  • df -h             lsblk             fdisk -l

    • Exibe informações sobre a memória secundária (dispositivos, partições e sistemas de arquivos).

    • Provavelmente houve um erro de "permissão negada" em um desses comandos. Como resolver?


O usuário administrador, o superusuário, o root.


Usuário privilegiado. Em servidores normalmente é requerido, mas em ambientes desktop é mais seguro não ter uma conta com senha atribuída. Mas é preciso um mecanismo para executar comando como administrador. Super User DO...

  • sudo            sudo -i

    •   Leia as vantagens e desvantagens do sudo com: man sudo_root

  • Se o sistema estiver com o usuário root configurado com senha, pode-se logar como root usando o comando su.



Gerência de pacotes



Pacotes são a forma de manipular (instalar, remover, atualizar) software/apps no Linux.

No Ubuntu e demais derivados do Debian (Mint, etc.) o comando chave é o apt.

  • apt

    • Opções: install, remove, purge, update, upgrade, autoremove, autoclean, full-upgrade.

    • Teste com uma aplicação dos repositórios!

    • Teste com um download (Google Chrome, por exemplo)!

    • Faça uma atualização do sistema. Somente quando você quiser, mas faça com frequência!

      • apt update, apt upgrade

Os comandos dpkg e apt-get podem ser úteis em algumas situações.

No Fedora, RedHat, CentOS e derivados deve-se usar o comando yum (similar ao apt) e, eventualmente, o comando rpm.

Há novos formatos de distribuição de software através de containers de aplicação, que se consistem basicamente em encapsular uma aplicação com todas as suas dependências, de forma que ela possa ser instalada em qualquer distribuição e conviver com aplicações em um mesmo sistema mesmo que tenham dependências conflitantes, já que ficam isoladas umas das outras. Eles também possuem a vantagem de serem "multidistribuição", eliminando a necessidade dos desenvolvedores criarem uma infinidade de pacotes para distribuir seu software. Há principalmente três dessas soluções hoje: Snapcraft, Flatpak e AppImage.

 Saiba mais sobre esses formatos em:
https://snapcraft.io - https://flatpak.org - https://appimage.org



Manipulação de arquivos e diretórios

De volta ao diretório home (~)... Lembre dos comandos cd, dir e pwd...

  • mkdir

    • Cria diretório.

  • rmdir          rm -r

    • Remove diretório.

  • less          cat          more           head         tail         tac

    • Mostram o conteúdo de arquivos.

    •  Pesquise e compare as diferenças...

  •  Veja o que faz o comando tail -f. Para que isso é útil?

  • file

    • Mostra informações sobre o arquivo (formato).

Os arquivos de configuração ficam em /etc. Aproveite que você já conhece os comandos para visualizá-los!

  • touch

    • Cria arquivo (vazio).

  • cp

    • Copia arquivos

  • scp

    • Faz cópias seguras e através da rede.

O comando wget permite fazer o download de arquivos, mas mais poderoso ainda é o comando curl.que além de downloads e uploads pode ser usado para interagir com APIs e é extremamente flexível.

  • mv

    • Move arquivos.

    • Mover um arquivo dentro do mesmo diretório é renomeá-lo.

  • rm          rm -r

    • Remove arquivos e diretórios.

    •  Você executaria o comando abaixo?

      • sudo rm -rf /

      • Preste atenção no ícone, melhor pesquisar a resposta antes de testar!



Criando meu primeiro script e conhecendo as permissões de arquivos

Editando o conteúdo dos arquivos:

  • vi

    • O editor de texto mais poderoso (e chato!) do mundo.

    • <shift> + <:> ou <ctrl> + <c>

      • :w grava

      • :q sai (q! força a saída)

  • nano

    • Um editor mais humano!:p E auto-explicativo, basta olhar o rodapé...



Crie um arquivo e digite alguns comandos. Salve-o. Cheque as permissões do arquivo com ls -l.



As permissões de arquivo seguem o padrão -rwxrwxrwx para arquivo e drwxrwxrwx para diretório. Ou seja, o d no início caracteriza um diretório. Cada sequência rwx corresponde a usuário proprietário (user/owner), grupo (group) e "mundo", ou todos os outros (all/world). Onde r é read, w é write e x é execute. Usa-se muito a notação decimal equivalente ao binário correspondente de cada grupo conforme os parâmetros ligados. Assim 777 é rwxrwxrwx e 644 é rw-r--r--.



Agora é preciso tornar o arquivo executável:

  • chmod +x meuprimeiroscript



Cheque com ls -l. E finalmente pode-se executar o script:

  • ./meuprimeiroscript



A rigor o arquivo do script deve começar com #!/bin/bash, para indicar que trata-se de um script a ser interpretado usando o bash, e não outra shell, ou perl, ou python, etc. Por curiosidade o #! é lido "shebang"!:s



# sozinho em um arquivo de script ou configuração define um comentário.



Digite help e veja o que mais é possível usar em um script (case, test, etc.).



Gerência de Processos

  • ps         ps -au         ps -al           ps -aux

    • Verifique os parâmetros conhecidos! O 'x' inclui os processos da GUI.

  • top        htop

    • No top, pressione h ou ? para ver as opções. Htop é mais fácil de usar.

  • kill (Sinais!)

    • envia um sinal para o processo.

    • se não definir o sinal, é enviado por padrão o sinal 15 (SIGTERM) que termina o processo. Use kill #PID.

      • xkill é útil para matar aplicações gráficas no desktop.

        • Use o atalho <Alt> + <F2> para rodar um comando na GUI.

      • Confira a lista de sinais com kill -l.

      • E as respectivas explicações com man signal.

        • Talvez você tenha que usar man 7 signal.

        • xman na GUI também é útil.

      • Veja também as ajudas de killall e killall5.

  • strace

    • Rastreia System Calls e Sinais

    • Tente strace ps, strace ls, etc.

  • processo& (Background!)

    • O & após o nome do processo (comando) executa-o em background e mantém o terminal liberado.

    • P.ex. nano& ou firefox&

      • Verifique o número do processo (PID) e use kill PID para terminar o processo.

  • <Ctrl> + <z> para o processo, isto é, envia-o para background em estado de espera.

  • <Ctrl> + <c> termina (finaliza) o processo.

  • bg

    • Lista o último processo em background

  • fg

    • Traz processos para foreground.

  • jobs -l

    • Compare com ps -au. Abra outro terminal para verificar.

      • Lembre do conceito de batch!

    • Você pode usar os números entre [] com fg (fg 1, fg 2, etc.).

  • renice         nice

    • Permite ajustar indiretamente a prioridade dos processos definindo seu nível de gentileza.

  • Cada processo possui seu próprio pseudodiretório em /proc. É uma forma de acessar os blocos de controle de processo (PCBs). Verifique o número do PID do processo e acesse /proc/#PID para verificar seu conteúdo.



Redirecionando e conectando processos - pipe

O pipe "|" conecta o canal de saída (stdout) de um processo à entrada (stdin) de outro.

  • ls -l | more

  • du -h | more

    • du mostra o uso do disco.

    • du -hd1 traz um resultado mais claro.


É possível também redirecionar os canais de saída (>) e entrada (<) de um processo. Repare também no >>.

  • sudo lshw -html

    • Sim, este comando sai do padrão com apenas "-" ao invés de "--"

  • sudo lshw -- html > hardware.html

    • Abra no navegador

  • Execute a sequência a seguir:

    • ls -l > lista

    • cat lista

    • sort -r < lista

    • sort -r < lista > listainv

    • cat listainv

    • cat lista

    • sort -r < lista >>lista

    • cat lista

O && permite encadear comandos na sequência, desde que nenhum deles dê erro. Às vezes chamado de "script de uma linha".

  • echo Meu usuário é && whoami && echo na máquina && hostname

    • echo "ecoa" o texto no terminal. Tente a linha acima usando echo -n. As aspas 'simples' ou "duplas" podem ser úteis em algumas situações.

|| encadeia comandos, mas só realiza o seguinte se o primeiro apresentar erro.



E já que dobramos caracteres...



!! repete o último comando digitado.


Gerência de Memória

  • free        free -ht

    • checa a quantidade de memória livre

  •  Verifique o comando pmap



Mais manipulação de arquivos e buscas

  • grep

    • Busca dentro de um arquivo (que pode ser todos os arquivos do sistema, ou diretório) por um texto específico.

    • A flag -a faz com que procure dentro de arquivos binários também.

    • A flag -i ignora o "case" (maiúsculas/minúsculas).

      • grep "linux" /home/*

      • grep -a "linux" /home/*

    • grep é extremamente útil quando usado após um pipe

      • man grep | grep example

  • find

    • Busca apenas nos nomes de arquivos usar o comando find.

    • Também pode ser usado para filtrar tamanho, tipo, data, etc.

      • find /home -iname arquivobuscado

        • -iname ignora "case" no nome do arquivo

  • locate

    • locate deveria ser substituído pelo find, mas ainda funciona...

      • locate nomedoarquivo

  • whereis

    • whereis localiza um programa (ou comando).

  • type

    • Localiza um comando. Usar -a:

      • type -a grep

  • awk

    • Em adição ao grep, o comando awk pode substituir texto dentro dos arquivos.

  • wc

    • apresenta a quantidade de linhas, palavras e bytes de um arquivo texto, ou diretório.



Rede

O principal comando para rede é justamente o comando ip:

  • ip addr                      exibe os endereços (e dispositivos)

  • ip link                      lista as interfaces

  • ip link set $device down     desativa o dispositivo especificado

  • ip link set $device up       ativa o dispositivo especificado

    • use tab para completar e mostra a lista dos dispositivos

  • ip route mostra a tabela de roteamento

  • networkctl, networkctl status, networkctl status $device

    • exibe informações sobre os dispositivos, especialmente em servidores.

Para testes e diagnósticos são muito úteis os comandos ping, traceroute, route, nmap e mtr.


Obs.: Os comando ifconfig, ifup e ifdown não estão disponíveis nas distribuições mais recentes.


Arquivo de configuração de rede: /etc/network/interfaces.


É bem provável que suas placas sejam referidas como enpXsY e wlpXsY, sendo en — Ethernet, wl — wlan e ww — wwan; o p corresponde ao barramento e o s ao slot.


Modelo do arquivo para DHCP:


#Loop local (127.0.0.1)

auto lo

iface lo inet loopback

# DHCP

auto eth0

iface eth0 inet dhcp


Modelo do arquivo para IP fixo:


#Loop local (127.0.0.1)

auto lo

iface lo inet loopback

#IP estático

auto eth0

iface eth0 inet static

      address 192.168.0.100

      network 192.168.0.0

      netmask 255.255.255.0

      gateway 192.168.0.1

      broadcast 192.168.0.255



DNS:

#Para configurar o DNS acrescente:

dns-nameservers 8.8.8.8 8.8.4.4



Verifique também os arquivos /etc/hosts e /etc/resolv.conf.


Curiosidades

Obtenha a previsão do tempo no terminal com: curl wttr.in.


Faça contas com o comando bc.


É possível navegar na Internet em modo texto com o lynx.


E até tocar mp3 ou um CD de áudio no terminal.


Instale e teste os comandos sl, fortune e cowsay (e xcowsay).


O comando youtube-dl permite fazer o download de vídeos do youtube.


O comando script pode ser usado para gravar uma sessão do terminal que pode ser executada novamente com scriptreplay.

 Há várias formas de acrescentar um toque de Linux ao seu Windows: http://prof.valiante.info/disciplinas/sistemas-operacionais/links-teis#TOC-Linux-e-um-pouco-de-Unix-BSD-etc.-



Outros – Ou sobre o que não falamos...

  • Acesso SSH... Mas você praticou isso no laboratório!

    •  Investigue o que faz SSH -X

  • Gerenciamento de usuários.

    •  Os comandos adduser, passwd, usermod e groupadd resolverão seus problemas! E os arquivos /etc/passwd, /etc/shadow farão parte disso.

  • Montagem manual de partições com mount.

  • Configuração de servidores para ambiente de produção.

    • Você não ficou achando que um simples sudo apt install nginx relamente deixaria seu servidor web pronto para um ambiente de produção, ficou?

  • Monitoramento e execução de tarefas periódicas com watch, at, cron e crontab.

  • Arquivamento e compactação de arquivos com tar e os diversos "zips".


Ċ
Filippo Valiante Filho,
23 de mar de 2019 01:27