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>
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
Link Simbólico
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¶m2=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-----
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. O exemplo de configuração abaixo, habilita o scroll do mouse, pesquisas por palavras semelhante ao VI e copiar palavras/texto utilizando o teclado.
set -g mouse on
set -g mode-keys vi
bind-key -T copy-mode-vi y send -X copy-pipe-and-cancel "pbcopy"
Para recarregar o arquivo, execute
tmux source-file ~/.tmux.conf
Caso queira configurar para todo o sistema, utilize o arquivo /etc/tmux.conf
.
Comandos Básicos
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
.
Além disso, podemos aproveitar esse modo para copiar textos, bastando ir até o texto que deseja copiar, pressione ESPAÇO
, use as setas para selection e agora pressione y
para copiar. Lembre-se de ativar o modo de cópia no arquivo ~/.tmux.conf
conforme mostrado acima.
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
Navegando em Páginas Web via Terminal
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
Was this helpful?