Beruflich Dokumente
Kultur Dokumente
a porta de entrada no
mundo da tecnologia
Idealizador: PABLO MIGUEL CRESTANI LÓPEZ
SISTEMA LINUX
O sistema operacional Linux foi desenvolvido na junção de dois projetos GNU + Kernel Linux.
Cada um com a sua devida importância para o estabelecimento de criação de um sistema robusto
que fosse distribuído e desenvolvido de forma descentralizada graças a milhares de programadores
ao redor do mundo.
Neste guia PORT:80 organizei da forma que achei mais coesa e inteligível para os novos usuários
que querem aprender esse sistema operacional através da linha de comando. Aos novos entusiastas
do Linux fiquem atentos principalmente ao Menu Principal.
Utilizem os comandos quantas vezes forem necessário para perder o medo do terminal e verão que
traz rapidez e novidades a cada comando.
https://www.fsf.org/
https://www.kernel.org/
https://www.linuxfoundation.org/
https://www.debian.org/
https://www.redhat.com/
https://www.archlinux.org/
https://www.gentoo.org/
http://www.slackware.com/
https://pt.opensuse.org/
https://www.distrowatch.com/
LINHA DE COMANDOS
Ao adentrar a distribuição entre no terminal e comece a teclar os comandos descritos abaixo e veja
se tais informações realmente aparecem na tela do terminal. Não decore comandos! Exercite dia
após dia que com o tempo terá uma segurança e certeza dos caminhos que tens que seguir pra lidar
com todas as informações presentes no sistema.
Informações de Hardware
Hardware detectado pelo kernel
# dmesg # Hardware detectado e mensagens de boot
# dmidecode # Exibir DMI/SMBIOS: hw info da BIOS
# cat /proc/cpuinfo # Modelo do CPU
# cat /proc/meminfo # Memória do Hardware
# grep MemTotal /proc/meminfo # Exibir a memória física
# watch -n1 'cat /proc/interrupts' # Observar interrupções alteráveis continuadamente
# free -m # Memória utilizada e livre (-m para MB)
# cat /proc/devices # Dispositivos configurados
# lspci # Exibir dispositivos PCI
# lsusb # Exibir dispositivos USB
# lsmod # Exibir modulos do Kernel
Uma vez inicializado, o kernel inicia o init o qual então inicia rc o qual inicia todos os scripts
pertencentes a um runlevel.
O The runlevel atual pode ser alterado com o init. Por exemplo, para ir do 3 para o 5:
# init 5 # Entra o runlevel 5
0 Shutdown and halt(encerrar e desligar)
1 Modo Single-User (também S: Não inicia as daemons, ou seja, serviços)
2 Multi-user sem rede
3 Multi-user com rede
5 Multi-user com X
6 Reboot
PROCESSOS
Listar e PIDs
Cada processo possui número único, o chamado PID. Uma lista de todos os processos em execução
é exibido com o ps.
# ps -auxefw # Lista extensiva de todos os processos em execução
Contudo o uso mais típico é com um pipe ou com pgrep
# ps axww | grep cron
586 ?? Is 0:01.48 /usr/sbin/cron -s
# ps aux | grep 'ss[h]' # Encontre todos os PIDs ssh sem o PID do grep
# pgrep -l sshd # Encontre os PIDs dos processos por (parte do) nome
# echo $$ # O PID do seu shell
# fuser -va 22/tcp # Lista de processos utilizando a porta 22
# pmap PID # Mapa de memória do processo
# fuser -va /home # Listar processos acessando a partição /home
# strace df # Traçar chamadas e sinais do sistema
# truss df # Traça chamadas através das bibliotecas compartilhadas
Utilize nohup para iniciar um processo na qual tem que continuar executando quando o shell for
fechado (imune a hangups).
# nohup ping -i 60 > ping.log &
Top
O programa top exibe informações de processos em execução. Veja também o programa htop uma
versão mais poderosa do top. Enquanto o top estiver rodando pressione a tecla h para ter visão
global de ajuda (help). Teclas úteis são:
● u [user name] para exibir somente os processos pertinentes ao usuário. Utilize + ou em
barco para ver todos os usuários
● k [pid] Matar os processos com o pid.
● 1 para exibir todas as estatísticas dos processadores (somente em Linux)
● R Alterna o tipo de normal/reversa.
Sinais/Kill
Termina ou envia um sinal com kill ou killall.
# ping -i 60 8.8.8.8 > ping.log &
[1] 4712
# kill -s TERM 4712 # O mesmo que kill -15 4712 (PID)
# killall -1 httpd # Kill HUP nos processos por nome exato
# pkill -9 http # Kill TERM nos processos por (parte do) nome
# pkill -TERM -u www # Kill TERM nos processos possuídos por www
# fuser -k -TERM -m /home # Mata todos os processos acessando /home
Permissões
Altere permissão e proprietário com o chmod e chown . O umask padrão pode ser alterado para
todos os usuários em /etc/profile para Linux. O umask padrão é normalmente 022. O umask é
subtraído a partir do 777, assim o umask 022 resulta em uma permissão de 755.
1 --x execute # Mode 764 = exec/read/write | read/write | read
2 -w- write # For: |-- Owner --| |- Group-| |Oth|
4 r-- read
ugo=a u=user, g=group, o=others, a=everyone
# chmod -R o-r /home/* # Remove recursivamente outros legíveis para todos os users
# chmod u+s /path/to/prog # Configura o SUID bit no executável (Saiba o que fazer!)
# find / -perm -u+s -print # Encontra todos os programas com o SUID bit
# chown user:group /path/to/file # Altera o usuário e proprietário do grupo de um arquivo
# chgrp group /path/to/file # Altera o proprietário de um grupo de um arquivo
# chmod 640 `find ./ -type f -print` # Altera as permissões para 640 para todos os arquivos
Informações de disco
# hdparm -I /dev/sda # Informação a respeito do disco IDE/ATA (Linux)
# fdisk /dev/sda # Exibe e manipula a tabela de partição
BOOT
Uso de disco
# du -sh * # Tamanhos de diretórios como listado
# du -csh # Tamanho total do diretório atual
# du -ks * | sort -n -r # Classifica tudo por tamanho em kilobytes
Entrada em /etc/fstab:
/dev/cdrom /media/cdrom subfs noauto,fs=cdfss,ro,procuid,nosuid,nodev,exec 0 0
Debugging
Linux
# ip link show # Exibe todas as interfaces
# ip link set eth0 up # Ativa o dispositivo como “ifconfig eth0 up".
# ip link set eth0 down # Desativa o dispositivo como "ifconfig eth0 down".
# ip addr show # Exibe todos os endereços de IP “ifconfig”
# ip neigh show # Similar ao arp -a
Outros OSes
# arp -a # Verifica a entrada ARP do roteador (ou host)
# ping host # Realiza requisição ICMP
# traceroute host # Imprime o caminho do roteador para o destino
# netstat -s # Estatisticas do System para cada protocolo de rede
Comandos adicionais que não são sempre instalados por padrão, mas fáceis de encontrar:
# arping 192.168.16.254 # Ping na camada Ethernet
# tcptraceroute -f 5 host # Utiliza o TCP para traçar rotas pelos firewalls
Roteamento
Portas em uso
Escutar portas abertas:
# netstat -an | grep LISTEN
# lsof -i # Lista todas as conexões com a internet
# netstat -anp --udp --tcp | grep LISTEN # Lista conexões conforme os protocolos informados
# netstat -tup # Lista conexões ativas do sistema
# netstat -tupl # Lista portas que estão sendo escutadas no SO
DNS
Em Unix as entradas de DNS são válidas para todas as interfaces e são armazenadas em
/etc/resolv.conf. O domínio para a qual o host pertence também está armazenado nesse arquivo.
Uma configuração mínima é:
nameserver 8.8.8.8
nameserver 8.8.4.4
Consulta de direcionamento
Dig é seu amigo nos teste de configurações de DNS. Por exemplo o servidor de DNS público
213.133.105.2 ns.second-ns.de pode ser utilizado para teste. Veja de qual servidor o cliente recebe
a resposta (resposta simplificada).
# dig sleepyowl.net
sleepyowl.net. 600 IN A 78.31.70.238
;; SERVER: 192.168.51.254#53(192.168.51.254)
Reverter consultas
Encontre um nome pertencente á um endereço de IP (in-addr.arpa.). Isso pode ser feito com dig ,
host e nslookup :
# dig -x 8.8.8.8
# host 8.8.8.8
# nslookup 8.8.8.8
/etc/hosts
Hosts únicos pode ser configurados no arquivo /etc/hosts ao invés de rodar named localmente para
resolver as consultas de hostname. o formato é simples, por exemplo:
Nesse arquivo pode ser realizado a configuração simples para bloqueio de qualquer site impróprio
que esteja lhe interferindo com propagandas ou mesmo minerando o seu equipamento.
# vi /etc/hosts
0.0.0.0 www.sitebloqueado.com
0.0.0.0 www.google.com
Ou seja bloqueia qualquer tentativa de chamada para conexão externa que não for do seu agrado.
Análise de tráfego
Transferência de arquivo
Cópia um diretório grande através de uma conexão tcp bruta. A transferência é bem rápida (sem
sobrecarga de protocolo) e você não precisa bagunçar com NFS ou SMB ou FTP ou outros,
simplesmente torne o arquivo disponível no servidor, e ser obtido a partir do cliente. Aqui
192.168.1.1 é o endereço de Ip do servidor.
server# tar -cf - -C VIDEO_TS . | nc -l -p 4444 # Serve o arquivo tar na porta 4444
client# nc 192.168.1.1 4444 | tar xpf - -C VIDEO_TS # Puxa o arquivo na porta 4444
server# cat largefile | nc -l 5678 # Serve um único arquivo
client# nc 192.168.1.1 5678 > largefile # Puxa um único arquivo
server# dd if=/dev/da0 | nc -l 4444 # Imagem da partição do servidor
client# nc 192.168.1.1 4444 | dd of=/dev/da0 # Puxa partição para clonagem
client# nc 192.168.1.1 4444 | dd of=da0.img # Puxa partição para o arquivo
Tem ferramentas até mais apuradas como por exemplo o Magic Wormhole
https://github.com/warner/magic-wormhole que realiza transferência de arquivos grandes de forma
rápida e simples gerando uma chave imediata para a transferência do arquivo. Há também
tranferência segura com o SCP protocolo que permite copiar arquivos entre servidor SSH e
máquina local.
ARQUIVOS CRIPTOGRAFADOS
OpenSSL
Um único arquivo
Criptografar e descriptografar:
# openssl aes-128-cbc -salt -in arquivo -out arquivo.aes
# openssl aes-128-cbc -d -salt -in arquivo.aes -out arquivo
As chaves privadas e públicas são o centro da criptografia assimétrica. O que é importante lembrar:
● Sua chave pública é usada por outros para criptografar arquivos que somente você como o
receptor pode descriptografar (não somente aquele que criptografou o arquivo que pode
descriptografá-lo). A chave pública tem que ser distribuída.
● Sua chave privada é criptografada com a sua passphrase e é utilizada para descriptografar
arquivos que foram criptografadas com a your chave pública. A chave privada deve ser
guardada segura . Se a chave ou passphrase for perdida, todos os arquivos criptografados e
chaves públicas também serão.
● Os arquivos chaves são chamados keyrings (chaveiros) já que eles podem conter mais que
uma chave.
Primeiro gere o par de chaves. As padrões são boas, no entanto você terá que inserir ao menos seu
nome completo e e-mail e opcionalmente um comentário. O comentário é útil para criar mais do
que uma chave com o mesmo e-mail. Você deve também utilizar uma "passphrase", não uma senha
simples.
# gpg --gen-key # Isso pode levar um tempo
COMANDOS UTEIS
Less
O comando less exibe um documento de texto no console. Ele é presente em muitas instalações.
# less arquivo.txt
# less arquivo
VI (VIM)
Vi está presente em QUALQUER instalação Linux/Unix e é logo útil saber alguns comandos
básicos. Há dois modos: modo comando e modo inserção. O modo de comandos é acessado com
[ESC], o modo de inserção com o i. Use : help se estiver perdido.
Os editores nano e pico estão geralmente disponíveis também e são mais fáceis de usar.
Sair (Quit)
:w newfilename Salva o arquivo com o nome de newfilename
:wq or :x Salva e sai
:q! Sai sem salvar
Buscar e Mover
/string Busca por string para frente
?string Volta por string para tras
n Busca pela próxima instância de string
N Busca por instancia de string anterior
{ Move um paragrafo para trás
} Move um paragrafo para frente
1G Move para a primeira linha do arquivo
nG Move para o n th de linha do arquivo
G Move para a ultima ultima linha do arquivo
:%s/OLD/NEW/g Busca e substitui toda a ocorrência
Editores de Texto
Hoje em dia cada distribuição possui uma série de diferenças e uma delas é o Editor de Texto que
varia de distribuição para distribuição além de outras alternativas que se baixa com facilidade.
inclue somente um (ou dois) diretórios a partir de uma árvore, mas mantém a estrutura relativa. Por
exemplo, arquivar /usr/local/etc e /usr/local/www e o primeiro diretório no arquivo deve ser local/.
# tar -C /usr -czf local.tgz local/etc local/www
# tar -C /usr -xzf local.tgz # Para desempacotar o diretório local dentro de /usr
# cd /usr; tar -xzf local.tgz # Para desempacotar o diretório local dentro de /usr
Extração de Arquivos
# tar -tzf home.tgz # Olha dentro do arquivo sem extrair (lista)
# tar -xf home.tar # Extrai o arquivo aqui (x para extrair)
# tar -xzf home.tgz # O mesmo que da compressão zip
# tar -xjf home.tbz home/user/file.txt # Restaura um único arquivo
# tar -xOf home.tbz home/user/file.txt # Imprime o arquivo na saída (stdout) (sem extração)
Zip/Unzip
Arquivos zip podem ser fáceis de compartilhar com o Windows.
# zip -r file.zip /home/user/ # Zipa o diretório para dentro do arquivo file
# unzip file.zip # Descompacta o arquivo zip
# unzip -l file.zip # Lista arquivos dentro do arquivo
# unzip -c file.zip file.txt # Imprime um arquivo na saída (sem extração)
# unzip file.zip file.txt # Extrai somente um arquivo
DD
O programa dd (disk dump ou destroy disk) é utilizado para copiar partições e discos e para outros
truques de cópias. Uso típico:
Opções importantes:
notrunc #Não trunca a saída do arquivo, todos os zeros serão escritos como zeros.
noerror #Continua depois da leitura de erros (ex. bad blocks)
sync #Enche todo bloco de entrada com Nulls para ibs-size
O tamanho de byte padrão é de 512 (um bloco).
Find
Algumas opções importantes:
-size n # n é +-n (Kilo,Mega, Giga, Tera e Penta)
-cmin n # Status de arq. q foi alterado nos ultimos min
# find . -type f ! -perm -444 # Encontra arquivos não legíveis por todos
# find . -type d ! -perm -111 # Encontra diretórios não acessíveis por todos
# find /home/user/ -cmin 10 -print # Arquivos alterados nos últimos 10 min.
# find . -type f -name "*.txt" ! -name README.txt -print # Exclui arquivos README.txt
# find /var/ -size +10M -exec ls -lh {} \; # Encontra arquivos grandes > 10 MB
# find /var/ -size +10M -ls # Encontra arquivos grandes > 10 MB
Miscelâneas
# which comando # Exibe nome completo do caminho do comando
# time comando # Veja quanto tempo p comando leva para ser executado
# time cat # Usa o time como o as cronômetro. Ctrl-c para parar
# cal -3 # Exibe um calendário de três meses
# date 10022155 # Define data e hora
# whatis grep # Exibe uma informação curta no comando
# whereis java # Busca caminho (path) e diretórios padrões para a palavra
# pwd # Imprime diretório de trabalho atual
# mkdir /home/user/novo # Gera diretório com o nome “novo”
# rmdir /home/user/novo # Remove o diretório vazio
# rm -rf /home/user/novo # Remove o diretório e o seu conteúdo (f= força)
# mv /dir1 /dir2 # Renomeia um diretório
# mv arq1 arq2 # Renomeia um arquivo
# history | tail -50 # Exibe us últimos 50 comandos utilizados
# cd - # CD - vai para o diretório anterior
# cd ~ # CD ~ vai para o diretório padrão
Verificar hashs de arquivo com o openssl. Essa é uma boa alternativa para os comandos md5sum
ou sha1sum que não vem sempre instalados por padrão.
# openssl md5 arquivo # Gera um checksum md5 do arquivo
# openssl sha1 arquivo # Gera um checksum sha1 do arquivo
# openssl rmd160 arquivo # Gera um checksum RIPEMD-160 do arquivo
INSTALAR SOFTWARE
Adicionar/remover software
# rpm -i pacote.rpm # Instala o pacotes (RedHat,CentOS, SuSE)
# rpm -e pacote # Remove pacote
SuSE zypper
# zypper refresh # Atualiza o repositório
# zypper install vim # Instala o pacote vim
# zypper remove vim # Remove o pacote vim
# zypper search vim # Busca por pacotes com vim
# zypper update vim # Busca por pacotes com vim
# zypper info vim # Exibe informações sobre o pacote
Debian
# apt-get update # Primeiro, atualize as listas de pacotes
# apt-cache search vim # Busca por vim
# apt-cache show vim # Informação do pacote vim
# apt-get install vim # Instala pacotes vim
# apt-get remove vim # Remove pacotes vim
# dpkg -i pacote.deb # Instala o pacote.deb
# dpkg -remove pacote.deb # Remove somente o pacote.deb
# dpkg --purge remove pacote.deb # Remove o pacote.deb e dependências
# dpkg -S file # Encontra a qual pacote um arquivo pertence
SHELLS
Muitas distribuições Linux utilizam o shell bash enquanto os BSDs utilizam o tcsh, o bourne shell é
utilizado somente para scripts. Filtros são muito úteis e pode ser canalizados:
grep #Parametro de combinação
sed #Busca e substitui strings ou caracteres
cut #Imprime colunas específicas a partir de um marcador
sort #Ordena alfabeticamente ou numericamente
uniq #Remove linhas duplicadas de um arquivo
Bash
Redireciona e canaliza para o bash e para o sh:
# cmd 1> file # Redireciona a saída padrão (stdout) para o arquivo.
# cmd 2> file # Redireciona o erro padrão (stderr) para o arquivo.
# cmd 1>> file # Redireciona e anexa saída padrão para o arquivo.
# cmd &> file # Redireciona ambas (stdout e stderr) para o arquivo.
# cmd >file 2>&1 # Redireciona erro padrão para saída padrão e depois para o arquivo.
# cmd1 | cmd2 # canaliza saída padrão para cmd2
# cmd1 2>&1 | cmd2 # canaliza stdout e stderr para o cmd2
SCRIPTING
O shell Bourne (/bin/sh) está presente em todas as instalações Unix e scripts escritos nessa
linguagem são (bastante) portáveis; man sh é uma boa referência.
AWK
Awk é útil para field stripping, como cortar de um jeito mais poderoso.
awk '{ print $2, $1 }' file # Imprime e inverte as primeiras duas colunas
awk '{printf("%5d : %s\n", NR,$0)}' file # Adiciona números alinhados a esquerda
awk '{print FNR "\t" $0}' files # Adiciona números alinhados a direita
awk NF test.txt # Remove linhas em branco (o mesmo que grep '.')
awk 'length > 80' # Imprime linha maior que 80 caracteres
SED
Uma dicas sobre esta ferramenta que trabalha com arquivos.
Expressões regulares
Algumas expressões regulares básicas úteis para o sed também.
Documentação
Linux Documentation en.tldp.org
https://www.facebook.com/groups/214305975779293/
Essa documentação foi baseada na "Unix Toolbox revisão 14.4" que está licenciada sob a Creative
Commons Licence [Attribution - Share Alike].