Utilização

Verificando o Hardware

Comando para ver configuração de hardware no Linux:

less /proc/cpuinfo

Distribuição, Versão e Arquitetura

# Informações sobre o SO
cat /etc/issue
cat /etc/*-release

# Versão do Kernel
uname -a

# Arquitetura
arch

Módulos do Kernel

Verificando módulos do kernel

lsmod

Selecione um módulo no resultado do comando acima e execute o comando abaixo para ver mais detalhes

modinfo <module>

Manuais de Ferramentas

A maioria das ferramentas disponíveis do Linux, possui um manual (man pages), que podem ser acessados pelo comando:

man <command>

As páginas do manual são referenciadas por meio de seções enumeradas, por exemplo, ping(8) significa que determinada informação do comando ping, está na seção 8. Então para acessarmos, vamos utilizar o comando:

man 8 ping

Caso não especifique a seção do manual, o comando man irá exibir o primeiro que achar. Segue abaixo uma lista com o significado das seções:

SEÇÃO

DESCRIÇÃO

1

Comando de Usuário

2

Chamadas de Sistema

3

Documentação geral da biblioteca de programação Unix

4

Interface de dispositivos e informações sobre drivers

5

Descrições de arquivo (arquivos de configuração de sistema)

6

Jogos

7

Formatos de arquivo, convenções e codificações (ASCII, sufixos e assim por diante)

8

Comandos de sistema e servidores

Verificando Espaço em Disco

df -lh
df -h

Verificando Memória

free -hw

Monitorando Processos

htop
atop
top
iotop

Arquivos de Processos

Em /proc/self/fd/<id>, podemos ver o descritor de arquivos de todos os processos. Útil para procurarmos por informações úteis e/ou flags escondidas

Variáveis de Ambientes

Variáveis de Ambiente vs Variáveis de Shell

Antes de mais nada, vamos diferenciar asVariável de Ambiente com asVariável de Shell. A primeira não é específica do shell e todos os processos de sistemas UNIX podem armazenam e utilizar. Já a segunda é uma variável temporária para o shell (esta não aparece na saída do comando env).

# Definindo Variável de Ambiente
export MYVAR1=valor

# Definindo Variável de Shell
MYVAR2=valor

# Transformando a Variável de Shell em Variável de Ambiente
export MYVAR2

# Exibindo o valor de uma Variável
echo $MYVAR

Visualizando

Abaixo os comandos para visualizar as Variáveis de Ambiente já definidas

env
printenv
cat /etc/environment
cat /etc/profile
cat /etc/bashrc
cat ~/.bash_profile
cat ~/.bashrc
cat ~/.bash_logout
set

Logar com Root

Para ficar logado como root, digite um dos seguintes comando:

sudo -s
sudo -su
sudo -

Gerenciando Usuários

# Adicionando um usuário ao sudo
adduser <user> sudo

# Removendo um usuário do sudo
deluser <user> sudo

# Acessando o perfil de outro usuário
su <user>

# Executando comando como se fosse outro usuário
su -c <commad> - <user>

Alterando Senha

echo "<user>:<pass>" | chpasswd

APT

# Instala um software
sudo apt install <nome_pacote>

# Remove um software
sudo apt remove <nome_pacote>

# Remove pacotes antigos que não são mais necessários ao funcionamento correto do SO
sudo apt autoremove

# A função "remove" não destrói nenhum arquivo de configuração e deixa esses itens no HD, para o caso desses arquivos serem utilizados no futuro. Utilize o "purge" para remover esses arquivos
sudo apt purge <nome_pacote>

# Remove os pacotes já instalados (os instaladores), pois os mesmo depois de instalados, não são mais úteis
sudo apt clean

# Deve ser executada depois do "update" e "upgrade", pois este removerá pacotes antigos que foram substituídos por pacotes novos
sudo apt autoclean

# Verifica por atualizações para as várias aplicações e pacotes instalados no Linux. Utilize esse comando antes do "upgrade"
sudo apt update

# Instala todas as versões novas de pacotes de softwares já instalados e atualiza a versão da distribuição do Linux. Utilize esse comando depois do "sudo apt update"
sudo apt upgrade

# Pesquisando por softwares
sudo apt search <nome_programa>

# Atualizando todo o sistema
sudo apt update && sudo apt upgrade && sudo apt dist-upgrade && sudo apt autoremove && sudo apt autoclean

Chaves do APT

Ao receber erro de chave no apt install, como NO_PUBKEY 07DC563D1F41B907, basta pegar os últimos 8 caracteres, nesse caso 1F41B907, e digitar os seguintes comandos:

gpg --keyserver pgpkeys.mit.edu --recv-key 1F41B907  
gpg -a --export 1F41B907 | sudo apt-key add -

OBS.: Caso o primeiro comando acima dê erro, utilize um dos comandos abaixo:

gpg --keyserver pgp.mit.edu --recv-keys 1F41B907
gpg --keyserver pool.sks-keyservers.net --recv-keys 1F41B907

Se o erro ainda persistir, altere a URL pgpkeys.mit.edu por pool.sks-keyservers.net.

Instalações Essenciais

sudo apt-get install build-essential linux-headers-`uname -r` module-assistant
sudo m-a prepare

DPKG

# Instala um pacote deb
sudo dpkg -i <arquivo.deb>

# Remove um pacote deb
sudo dpkg -r <arquivo.deb>

# Faz o "purge" de um pacote deb, semelhante ao "apt-get". Atente-se ao "P" maiúsculo
sudo dpkg -P <arquivo.deb>

# Mostra o status corrente dos softwares instalados ou removidos
sudo dpkg -l <nome_pacote>

# Mostra as informações sobre determinado pacote
sudo dpkg -p <nome_pacote>

OBS.: Depois de utilizar o comando dpkg -i (instalação), execute sudo apt install -f, para que o apt possa verificar o que foi feito e corrigir qualquer problema que tenha aparecido durante a instalação

Desabilitando IPv6 (Debian)

sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1

Arquivos passwd e shadow

passwd

O arquivo /etc/passwd (utilize o comando vipw para editá-lo) armazena informações da conta do usuário separadas por :. No exemplo abaixo temos a seguinte linha

teste:x:1001:1001:,,,:/home/teste:/bin/bashrc

BLOCO

DESCRIÇÃO

teste

Usuário

x

Senha criptograda que fica /etc/shadow. Se o usuário não tiver uma senha, o campo da senha terá um * (asterisco)

1001

Todo usuário deve receber um ID (UID). O UID 0 (zero) é mantido para o usuário root, os UID's de 1 a 99 são mantidos para contas pré-definidas adicionais, os UID's de 100 a 999 é mantido pelo sistema para fins administrativos e o UID 1000 é quase sempre o primeiro usuário que não é do sistema, geralmente um administrador. Se criarmos um novo usuário em nosso sistema, ele receberá o UID 1001

1001

Indica o grupo de cada usuário. Assim como os UID's, os 100 primeiros GIDs geralmente são mantidos para uso do sistema, o GID de 0 refere-se ao grupo raiz e o GID de 1000 geralmente significa os usuários. Geralmente, novos grupos recebem GID's iniciados a partir de 1000

,,,

Este é o Gecos Field. Geralmente, esse é um conjunto de valores separados por vírgula que informa mais detalhes relacionados aos usuários. O formato para o campo GECOS indica as seguintes informações: Nome completo do usuário, número do edifício e da sala ou pessoa de contato, número de telefone do escritório, número de telefone residencial, qualquer outra informação de contato

/home/teste

Indica o caminho do diretório inicial do usuário, onde todos os seus arquivos e programas são armazenados. Se não houver um diretório especificado, então / se tornará o diretório do usuário

/bin/bash

Denota o caminho completo do shell padrão que executa o comando (pelo usuário). Caso queira mudar de shell padrão, utilize o comando chsh

shadow

As senhas do Linux (na maioria das distribuições), podem ser encontrada em /etc/shadow e seguem o seguinte padrão:

  • São dividas em 3 partes, utilizando um cifrão ($) como delimitador

  • A primeira parte (contendo apenas 1 dígito) informa o tipo de criptografia (1 = MD5 | 2 ou 2a = Blowfish | 5 = SHA-256 | 6 = SHA-512)

  • A segunda parte indica o salt, para garantir que senhas iguais tenham hashes diferentes

  • A terceira parte é o hash da senha

Linux utiliza MCF (Modular Crypt Format), um dos formatos mais utilizados em sistemas UNIX. Sistemas como Iphone não usa MCF, o que facilita quebrar a senha

Log de Logins

Mostra os últimos logins

last

Mostra os últimos logins para cada usuário do sistema

lastlog

Rwho

Para enumerar usuários conectados a um host remoto e que esteja executando o daemon rwho (rwhod), digite:

rwho <ip>

Procurando Ferramentas no Próprio SO

# Verifica onde está o executável do comando
which <command>
whereis <command>

# Procura por todas as ferramentas de determinado tipo (ex.: editor)
apropos <type>

GRUB

As vezes podemos nos deperar na situação onde, o GRUD está instalado, porém não reconhece o Windows. Para corrigir isso, primeiro vamos veriricar se o Windows está disponível

sudo os-prober

Caso seja positivo, edite o arquivo /etc/default/grub e junto com as linhas onde não estão comentadas, adicione o conteúdo abaixo:

GRUB_DISABLE_OS_PROBER=false

Agora basta atualizar o grub com o comando abaixo e depois reiniciar o computador.

sudo update-grub

Services

service

# Inicializando um Serviço
sudo service <service> start

# Parando um Serviço
sudo service <service> stop

# Reiniciando um Serviço
sudo service <service> restart

# Verificando status de Serviços
sudo service <service> status
sudo /etc/init.d/<service> status

# Listando todos os serviços e seus respectivos status
sudo service --status-all

systemctl

# Listando serviços
systemctl list-units --type service --all

# Listando arquivos de serviços
systemctl list-unit-files

# Ativando o serviço
systemctl enable <service>

# Ativando o serviço de maneira mais agressiva
systemctl enable --now <service>

# Desativando o serviço
systemctl disable <service>

# Verificando o status
systemctl status <service>
systemctl is-active <service>

# Inicializando o serviço
systemctl start <service>

# Parando o serviço
systemctl stop <service>

# Reiniciando o serviço
systemctl restart <service>

Ao utilizar o enable, pode-se utilizar o caminho completo do file.service, caso não esteja no diretório padrão.

update-rc.d

# Configura determinado serviço para inicializar junto com SO
update-rc.d <service> enable

# Configura determinado serviço para não inicializar junto com SO
update-rc.d <service> disable

Cronjob

# Cria uma nova Cronjob para o usuário atual. Selecione o editor de texto e coloque algo como: */10 * * * * <script.sh>
crontab -e

# Cria uma cron para o usuário root
crontab -u root -e

# Lista todas as Cronjobs que estão configuradas para o usuário atual
crontab -l

# Visualiza as cronjobs de determinado usuário
crontab -u <user> -l

OBS.: Para gerenciarmos de forma que podemos escolher o usuário que irá executar o script, basta editar o arquivo /etc/crontab.

No arquivo /etc/crontab também é possível esconder a execução de um script é uma linha que está comentada (inicia com um #), como no exemplo abaixo, onde o script após o \r será executado normalmente.

# Comentário qualquer\r* * * * * echo "Executado com Sucesso!"

Acessando Windows via RDP

rdesktop

rdesktop <ip>

freeRDP

xfreerdp <ip> /workarea
xfreerdp /u:<user> /v:<ip> /workarea
xfreerdp /u:<user> /p:<password> /v:<ip> /workarea

Listando Portas e Seus Serviços

Para ver uma lista completa de portas e serviços que podem rodar em um Linux, digite no terminal:

cat /etc/services

Executando Comandos sem Deixar no Histórico

Coloque um espaço antes dos comandos

 id

O mesmo que atalhos no Windows

ln -s /etc/shadow shadow

Subcomandos

echo 'meu usuario e '`whoami`
echo 'meu diretorio atual e '$(pwd)

Deixando Comandos Universal

A vantagem disso, é que é possível chamar determinado arquivo de qualquer lugar do SO (no terminal)

cp </path/file> /usr/bin/

lsof

# Mostra os arquivos abertos identificado pelo nome de usuário, representado aqui pelo identificador usuário
lsof -u <usuario>
# Mostra os arquivos abertos por um determinado grupo, identificado aqui numericamente pela variável n
lsof -g n
# Mostra os arquivos abertos por um determinado número de processo (PID), representado aqui pela variável n
lsof -p n

Expect

Automatizando a conexão com FTP. Crie um arquivo chamado ftp.sh com o seguinte conteúdo.

#!/usr/bin/expect -f
set verbose_flag 1
spawn ftp <ip>
expect "Name "
send "<user>\r"
expect "Password:"
send "<password>\r"
expect "ftp>"
send "prompt\r"
expect "ftp>"
send "ls\r"
send "bye\r"
expect eof

Criando e Montando um Diretório Próprio

# Cria um pedaço na memória
truncate -s 100MB nameOfFile

# Anexa um arquivo de sistema ao arquivo
mkfs.ext4 ./nameOfFile

# Monta-o em sistemas de arquivos
sudo mount ./nameOfFile /mnt/blablabla

Unidade de Discos Disponíveis

lsblk

Deixando o Pendrive Bootavel

sudo dd bs=4M if=arquivo.iso of=/dev/<partition> conv=fdatasync status=progress

# Ou

dd if:</path/to/file.iso> of=/dev/sdb

OBS.: Utilize dmesg ou lsblk para descobrir a partição do USB

Montando e Desmontando Unidades (HD/USB)

Saber montar e desmontar um diretório pode ser muito útil, como por exemplo, caso queira ter acesso a um Diretório NFS remoto

# Montando um dispositivo USB acessível ("/dev/usb") em `/media/new`:
mkdir /media/new
mount -t ntfs /dev/usb /media/new # O paramêtro "-t" não é obrigatório
# Desmontando um dispositivo USB:
umount /media/new

OBS.: Caso o disco não esteja em /dev/usb, execute sudo fdisk -l e veja se consegue encontrá-lo e então executar o comando acima para montar.

Montando Unidade de Disco de Outro Host

Para isso é preciso que outra máquina esteja compatilhando um ou mais diretórios.

sudo mkdir /mnt/tmp
sudo mount -t cifs -o 'user=<user>,password=<pass>' //<ip>/<diretorio> /mnt/tmp

Lendo Arquivos Deletados do Pen Drive

Para ler conteúdo de arquivos deletados em um USB, primeiro é preciso ver a sua partição:

df -lh

Você então deverá ter uma saída como:

/dev/sdb        6.8M   53K  5.4M   9% /media/usbstick        6.8M   53K  5.4M   9% /media/usbstick

Após isso, execute o comando abaixo para ler conteúdos de arquivos:

strings /dev/sdb
grep -a <string> /dev/sdb

noexec

Execute o comando mount e verifique sa há particões com a flag noexec ativa. Se tiver, significa que nessa montagem (diretório) não pode ser executado nenhum arquivo

Output em Colunas

Dividindo a saída em colunas

echo 1 2 3 4 5 6 7 8 9 10 | xargs -n <quantidade_colunas>

Acessando Site via Terminal

curl

# Retorna o HTML da página
curl <url>

# Acessando páginas com HTTPS
curl <url> -k

# Verificando se o host aceita HTTP 1.0
curl <url> -I --http1.0

# Modo silencioso
curl -s <url>

# Retorna somente o cabeçalho
curl -I <url>
curl <url> -o /dev/null --dump-header -

# Retornando somente o HTTP Code
curl -s -o /dev/null -w "%{http_code}" <url>

# Altera o User Agent, que por padrão é "curl/{version}". Bom alterar caso esteja utilizando o Curl como bot
curl --user-agent "{user_agent}" <url>

# Envia parâmetros via POST
curl --data "param1=teste&param2=teste" <url>

# Acesso via POST (mas com parâmetros vazios)
curl -X POST <url>

# Postando arquivo via POST
curl -X POST -F 'image=@/path/to/pictures/picture.jpg' <url>

# Acessando página que solicita Basic Authentication
curl -u <user>:<pass> <url>

# Acessando página que solicita autenticação digest
curl --digest -u <user>:<pass> <url>

# Utilize quando for fazer ataque de LFI, pois por padrão o curl irá tratar sequencias de caracteres como ../../
curl --path-as-is <url>

# Enviando um arquivo
curl -d @<file.txt> http://site.com/upload
curl --upload-file <file> http://site.com/upload
curl -T <file> -u <user:pass> http://site.com/upload
curl http://site.com/upload -X POST -F 'file1=@file1.txt' -F 'file2=@file2.txt'
curl -s -X PUT -H "Content-Type: text" -d '<Conteúdo do arquivo>' http://site/uploads/<file_name>

# Baixando um arquivo
curl <url> --output <output_file>

# Deletando um arquivo
curl http://site.com/<file> -X DELETE

# Salva somente a resposta do Header em um arquivo
curl <url> --dump-header <output_file>

# Utilizando Proxy (útil para usar com o Burp Suite)
curl <url> -x http://<ip>:<port>

# Salva o Cookie
curl <url> -c <cookiefile> -d "user=admin&pass=admin"
# Envia o Cookie, que pode ser uma string ou um arquivo
curl <url> -b <cookiefile>

# Acessando várias portas
curl <url>:[80-8000]
curl <url>:{80..8000}

Netcat

Ao digitar os comandos no Netcat, atente-se que o backspace e setas não funcionam. Outro ponto importante é, sempre que for utilizar a versão 1.1 do HTTP, passe a flag host no cabeçalho, caso contrário, provavelmente sua requisição será negada. Como um bom pentester, é sempre bom também utilizar a versão 1.0 (este não precisa informar o host) para verificar se é possível encontrar informações sensíveis no cabeçalho de retorno.

nc <site.com.br> 80
# Digite abaixo e dê ENTER.
GET / HTTP/1.1
Host: <site.com.br>

openssl

Acessa de forma semelhante ao Netcat, sendo preciso digitar os detalhes da requisição manualmente, porém com a diferença que este tem suporte a criptografia.

openssl s_client -connect <site.com.br>:443

Wget

# Clonando site
wget -m -p -E -k -K -np -v <site>

# Destina onde irá ser baixado
wget <url> -P /<destino>

# Baixa arquivo e renomea
wget <url> -O <novo_nome>

# Caso esteja utilizando um site com HTTPS 
wget <url> --no-check-certificate

Explicação

PARÂMETRO

DESCRIÇÃO

m (Mirror)

Habilita os opções adequadas ao espelhamento do site

p (Page)

Garante que os arquivos necessários sejam baixados, incluindo imagens e arquivos CSS

E (Ajust Extension)

Todas as páginas são salvas como HTML

k (Convert Links)

Fará todas as páginas serem convertidas para visualização local

K (Keep Backup Converted)

Faz backup do arquivo original, com o sufixo, com o sufixo .orig

DICA: As vezes é preciso ignorar o robots.txt para que o wget consiga trabalhar normalmente, então nesse caso é preciso adicionar um -e robots=off no comando.

Chaves SSH

Existem algumas formas de trabalhar com chaves SSH e veremos aqui alguns desses métodos. Para todos os métodos, vamos utilizar o seguinte cenário:

Host 1 = Host que irá acessar via SSH Host 2 = Host SSH que será acessado

Método 1

O intuito deste cenário, serve para acessar determinado alvo via SSH sem precisar de senha.

# Host 1
ssh-keygen
chmod 600 ~/.ssh/id_rsa

Irá ser criado dois arquivos: ~/.ssh/id_rsa e ~/.ssh/id_rsa.pub . Utilize o parâmetro -f name caso queira definir um nome manualmente.

Agora acesse o Host 2 (da forma que preferir) e adicione o conteúdo de id_rsa.pub (Host 1) em ~/.ssh/authorized_keys. Feito isso, o Host 1 já consegue acessar o Host 2 sem precisar de senha através do comando.

ssh -i ~/.ssh/id_rsa <ip_host_2>

Caso tenha utilizado alguma senha ao usar o comando ssh-keygen, utilize o comando ssh-add id_rsa para validar o acesso pela primeira vez.

Método 2

No Host 2 digite o comando ssh-keygen -t rsa e escolha o lugar onde irá guardar as chaves (por padrão será ~/.ssh/id_rsa), altere-o caso seja de sua preferência. Supondo que tenha deixado os valores padrões, serão criados dois arquivos, sendo eles ~/.ssh/id_rsa e ~/.ssh/id_rsa.pub. Agora transfira o arquivo ~/.ssh/id_rsa.pub do Host 2 para o Host 1 (no mesmo diretório).

Agora acesse o Host 1 e digite o comando ssh-copy-id <user-host2>@<ip-host2> e digite a senha de acesso SSH. Feito isso basta acessar o Host 2 via SSH com o comando ssh <user-host2>@<ip-host2>, que irá conectar sem pedir senha.

Para verificar se a chave gerada está correta, utilize o comando ssh-keygen -y -e -f </home/user/.ssh/id_rsa>, lembrando que a chave deve ter permissão 600 para funcionar corretamente.

As vezes é preciso indicar o caminho da chave privada ao acessar via SSH, exemplo ssh -i </home/user/.ssh/id_rsa> <user>@<ip>.

Em alguns casos, podemos nos deparar com chaves que contém criptografia, que é indicada no início do arquivo, parecido como no exemplo abaixo:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,AEB88C140F69BF2074788DE24AE48D46

DbPrO78k...
...
...
...
GHJE8MkhD3
-----END RSA PRIVATE KEY-----

DICA: Caso não saiba a senha, utilize a seção de Brute Force Offline para verificar como quebrar senha de RSA.

Podemos reverter essa chave inserindo sua senha, utilizando o comando:

openssl rsa -in </home/user/.ssh/id_rsa>

Também podemos gerar chaves públicas a partir da chave primária

openssl rsa -in <private_key.pem> -pubout

Método 3

Gere as chaves no host 2 e o arquivo authorized_keys com os seguintes comandos:

ssh-keygen -f rsa
cp id_rsa.pub authorized_keys

Agora envie o arquivo id_rsa (chave privada) para o Host 1, e então ainda no Host 1, execute o seguintes comandos para realizar o acesso.

chmod 600 id_rsa
ssh -i id_rsa <user>@<ip>

Em alguns casos, temos acesso a um usuário mo qual já possui os arquivo id_rsa e id_rsa.pub. Nesse cenário basta apenas copiar o arquivo id_rsa.pub para authorized_keys.

Erro ao acessar via SSH

É comum as vezes recebermos o erro Unable to negotiate with <ip> port 22: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1, então precisamos modificar um pouco a nosso comando para realizar a conexão, ficando assim:

ssh <user>@<ip> -oKexAlgorithms=+diffie-hellman-group1-sha1
# ou
ssh -o KexAlgorithms=diffie-hellman-group14-sha1 -oHostKeyAlgorithms=+ssh-dss <user>@<ip>

Tipo de Autenticação SSH

É sempre importanta validarmos o tipo de autenticação que pode ser realizado para conectarmos em um servidor SSH. Por exemplo, caso o server só aceite requisições utilizando chave pública, não adianta fazermos um brute force com usuário e senha procurando por credenciais válidas, porque isso não vai ser possível.

Para verificar as possibilidades de acesso, execute o comando abaixo, procure pela linha Authentications that can continue e verifique os seus valores.

ssh -v <ip>

VALOR

DESCRIÇÃO

publickey

Autenticação com arquivo de chave pública

password

Autenticação com usuário e senha. Caso não tenha essa opção disponível, ataques de Brute Force não funcionam

keyboard-interactive

Autenticação utilizando MFA

SSH Não-Interativo

Executando comando via SSH sem deixar o terminal no modo interativo

ssh <user>@<ip> "<command>"

SSH Renderizando GUI na Máquina Client

SSH Server

Vá em /etc/ssh/sshd_config e descomente as seguintes linhas

X11Forwarding yes
X11DisplayOffset 10
X11UseLocalhost yes

Reinicie o serviço de SSH

sudo systemctl restart ssh

SSH Client

Habilite o Forward

echo 'ForwardX11 yes' >> ~/.ssh/config

Acesse via SSH. O encaminhamento de X11 com -Y (opção de confiança) pode resolver alguns problemas que -X (opção segura) não consegue, porém ambos podem ser eficaz:

ssh -Y <user>@<ip>
ssh -X <user>@<ip>

Agora abra serviço que tenha GUI, por exemplo:

firefox &

Screen

A screen joga um processo para segundo plano e pode ser acessada futuramente. O ponto forte é que mesmo se a conexão cair (caso esteja conectado via SSH por exemplo), o processo continua rodando em background. Uma outra maneira de colocar o processo em segundo plano (para não deixar o terminal preso), coloque um & no final do comando.

# Lista todas as Screens
screen -ls

# Cria uma Screen
screen -S <nome_screen>

# Acessa uma Screen
screen -x <id_screen>

# Matar uma Screen
screen -X -S <id_screen> kill

OBS.: Para sair de uma screen sem perder a sessão, aperte CTRL + A + D

tmux

Esse é um concorrente do screen mostrado acima, pois desempenha as mesmas funcionalidades básicas.

No TMUX, uma sessão pode possuir diversas janelas (canto inferior do terminal), e cada janela possuir diversos painéis (semelhante ao Terminator).

Arquivo de Configuração

Utilize (crie caso não tenha) o arquivo ~/.tmux.conf para configurar o tmux do usuário atual. Exemplo de configuração.

# Habilita o scroll do mouse
set -g mouse on

Caso queira configurar para todo o sistema, utilize o arquivo /etc/tmux.conf.

Comandos Básicos

IMPORTANTE: Antes de executar os comandos, certifique-se de presionar CTRL + B e depois de soltar as duas teclas, pressionar próxima tecla ou digitar algum comando seguido de : (dois pontos).

Habilitando o scroll do mouse

CTRL B, :set mouse on

Verificando sessões ativas

tmux ls
tmux lsw

Acessando uma sessão já ativa

tmux a -t <number_or_name>

Iniciando uma sessão com nome personalizado

tmux new -s <name>

Detached na sessão

CTRL + B, D

Criando nova janela

CTRL + B, C

Renomeando uma janela

CTRL + B, ,nn

Alterando para a próxima sessão

CTRL + B, N

Alterando para a sessão anterior

CTRL + B, P

Alterando para uma sessão através do seu número

CTRL + B, <numero>

Dividindo a painel horizontalmente

CTRL + B, "

Dividindo a painel verticalmente

CTRL + B, %

Invertendo posições dos painéis

CTRL + B, <espaço>

Alterando de painel

CTRL + B, <seta>

Exibindo o número dos painéis

CTRL + B, Q

Deixa o painel atual em tela cheia. Execute o comando novamente para voltar ao normal

CTRL + B, Z

Finalizando um painel

CTRL + X

Finalizando uma sessão

CTRL + W

Scroll no navegador como se fosse um editor de texto (caractere por caractere). Pressione q para sair

CTRL + B, [

Ainda nesse modo, é possível realizar buscas em strings no buffer do terminal, pressionando CTRL + S. Após fazer isso, pressione N para avançar ou Shift + N para voltar, semelhante ao VI.

Telnet

Geralmente acessamos o telnet através do comando telnet <ip>, porém nem sempre o telnet está disponível. Nesse caso, podemos utilizar o netcat para realizar o acesso.

nc -t <ip> <port>

Acessando Windows via Remote Desktop

É possível acessar um Windows pelo RDP na porta 3389, a partir de um Linux

apt install rdesktop
rdesktop <ip>

Criando Functions

Criar funcition pode ser útil para startar sistemas em background, conexões SSH, criar alias, etc. No exemplo abaixo, vamos inicializar uma tool e deixar o terminal livre para a utilização. Abra o arquivo com o comando nano ~/.bashrc e depois insira as seguintes linhas no final

function <name_metodo>() {
    </dir/tool> > /dev/null 2>&1 &
}

Para não precisar reiniciar o SO, utilize o comando source ~/.bashrc (disponível somente nesse mesmo terminal). Agora só digitar no terminal: <name_metodo> (sem os parênteses)

Configurando Teclado

dpkg-reconfigure keyboard-configuration
sudo service keyboard-setup restart

Ou se preferir, pode editar manualmente o arquivo /etc/default/keyboard OBS.: Utilize o arquivo /usr/share/doc/keyboard-configuration/xorg.lst para mais detalhes

Criando Diretórios com Vários Subdiretórios

Útil quando iremos criar um diretório e vários subdiretórios dentro desse diretório. Podemos fazer isso com um só comando ao invés de utilizar vários comandos.

mkdir -p <dir>/{<subdir1>,<subdir2>,<subdir2>}

Diretórios com Nomes Camuflados

No Linux é possível criar pastas chamadas .. ou . (atenção ao espaço no final). Isso é muito utilizado por hackers pra enganar os administradores de rede

Executando Comando por Arquivo

# Executa todos os comandos que estão no arquivo informado
source <arquivo>

Verificando Tempo de Execução

Útil para saber quanto tempo determinado comando gasta para executar

time <command>

Timestamp / Data

Configurando Data/Hora manualmente

sudo timedatectl set-timezone America/Sao_Paulo
sudo apt install ntp
sudo timedatectl set-ntp off


sudo date -s "21 OCT 2022 23:09:40"
# Ou
sudo timedatectl set-time 19:56:06
sudo timedatectl set-local-rtc false

Para voltar com o horário normal de forma automática (através do NTP), execute:

sudo timedatectl set-ntp on

Sincronizando com um server NTP

sudo ntpdate <ip_dc>

Convertendo valores

# Timestamp para data
date -d @<timestamp>

# Data para timestamp
date "+%s" -d "DD/MM/YYYY hh:mm:ss"

Instalando Flash Player

Execute o comando abaixo e depois reinicie o nvegador

apt-get install flashplugin-nonfree
update-flashplugin-nonfree --install

Xterm

Quando receber erro no terminal Error opening terminal: xterm-256color, execute o comando abaixo:

export TERM=xterm

Esse erro ocorre porque o terminal precisa trabalhar com mais cores, por exemplo o ht editor, onde o terminal fica azul. Fora isso, você poderá ter recursos como o comando clear, caso esteja em uma shell reversa.

Montando Unidade de Disco com VMDK

Montando arquivos VMDK (HD de VM) como Unidade de Disco:

sudo apt install libguestfs-tools
guestmount -a <arquivo.vmdk> -i --ro /mnt/vmdk

lynx

lynx <site.com.br>
lynx --dump <site.com.br>
lynx --dump "https://google.com/search?&q=site:<site.com>+ext:pdf" | grep 'google.com/url' | cut -d "=" -f2

browsh

browsh --startup-url <http://domain.com>

netcat

nc <i> <port>
# Digite abaixo e pressione ENTER duas vezes
GET / HTTP/1.0

nc <ip> <port>
# Digite abaixo e pressione ENTER duas vezes
GET / HTTP/1.1
host: <ip>

echo -e "GET http://<ip>/ HTTP/1.0 \n\n " | nc -w 5 <ip> <port>

Weechat

Este é um bate papo via terminal

# Instalação
sudo apt install weechat

# Conectando ao Freenode
/server add freenode chat.freenode.net
/set irc.server.freenode.autoconnect on

# Inserindo credenciais
/set irc.server.freenode.nicks "my-nickname"
/set irc.server.freenode.command "/msg nickserv identify ******"

Lendo LOG's

Quando for abrir um arquivo de log como /var/log/wtmp, utilize o comando who ao invés de cat, pois esse arquivo está em binário.

Transformando a VPS em Proxy

Antes de realizar esse procedimento, tome cuidado, pois não está configurado para pedir senha na utilização do proxy

apt update
apt upgrade
apt install squid
apt install wget
apt install screen
apt install dos2unix
cd /etc/squid3/  
echo 'http_port 3128' >> squid.conf
echo 'http_access allow all' >> squid.conf
service squid restart

Placa de Vídeo NVidia (Ubuntu)

Exibindo as placas de vídeos no host

prime-select

Instalando drivers

sudo ubuntu-drivers autoinstall

Visualizando informações da placa de vídeo (versão da placa, cuda, etc) e processos que estão utilizando

nvidia-smi

Vendo tudo o que está executando na placa de vídeo onboarding

sudo apt install intel-gpu-tools
sudo intel_gpu_top 

Vendo a Previsão do Tempo

No final da url, coloque a sua cidade, por exemplo: Sao_Paulo

curl wttr.in/<cidade>

Sites

# Detalha o que cada parte de determinado comando do Linux faz
http://explainshell.com

# Chaves SSH
https://www.digitalocean.com/community/tutorials/como-configurar-chaves-ssh-no-ubuntu-18-04-pt

# Como criar serviços
https://linuxconfig.org/how-to-create-systemd-service-unit-in-linux

# Verifica a velocidade da internet
curl -s https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py | python -

Last updated