sudo yum update
sudo yum install poppler-utilspdfunite input1.pdf input2.pdf output.pdfpdfunite input1.pdf input2.pdf input3.pdf output.pdfsudo yum update
sudo yum install poppler-utilspdfunite input1.pdf input2.pdf output.pdfpdfunite input1.pdf input2.pdf input3.pdf output.pdfO comando top é uma ferramenta clássica e bastante poderosa para monitorizar processos, CPU e memória no Linux. Neste artigo, pretendo reunir algumas dicas úteis para o dia a dia. Basicamente, é um gestor de tarefas em linha de comandos, onde conseguimos também visualizar gráficos simples para analisar a utilização da CPU e da memória.
Existem outras alternativas ao top, como o htop, entre outras. A minha recomendação passa por usar o top, pois este está presente em praticamente todas as distribuições Linux, enquanto que o htop pode precisar de ser instalado. Além disso, pode haver sistemas onde a instalação de alternativas não seja possível, pelo que recomendo o uso do top por ser uma solução universal e sempre disponível.
Dicas:
1 - Mostra o uso de cada núcleo individual da CPU.
t - Alterna diferentes modos de visualização das tarefas (texto, barras, ocultar).
m - Alterna entre diferentes modos de exibição da memória.
P - Ordena os processos pelo uso da CPU.
M - Ordena os processos pelo uso da memória.
Ctrl + S - Pausa o fluxo do terminal.
Ctrl + Q - Retoma o fluxo.
Shift + w - Guarda o aspeto do top.
Instalação:
sudo yum install epel-release
sudo yum install ufw
Ativar e Iniciar o serviço:
sudo systemctl enable ufw
sudo systemctl start ufw
Exemplos para atribuição de acessos:
sudo ufw allow from 192.168.1.0/24 to any port 80
sudo ufw allow from 192.168.2.0/24 to any port 443
sudo ufw allow from 10.10.10.0/24 to any port 22
Recarregar as regras:
sudo ufw reload
Visualizar regras ativa:
sudo ufw status Backend settings - Configurações de acesso aos backend, por exemplo, o porto de rede, ssl (se tiver), etc.
Frontend IP configurations - O IP de entrada (inbound) do App Gw. Pode ser público ou não.
1. Configurações básicas
Identidades e Governança do Azure
Azure Active Directory (AD): Configuração e gestão de utilizadores e grupos.
RBAC (Role-Based Access Control): Permissões e atribuições.
Políticas e Iniciativas do Azure: Aplicação de políticas de governação.
Implementação e Gestão de Armazenamento
Tipos de Armazenamento: Blobs, ficheiros, discos geridos e não geridos.
Armazenamento de Dados: Configuração e gestão de contas de armazenamento.
Recuperação de Desastres: Backup e recuperação de dados.
Implementação e Gestão de Recursos de Computação
Máquinas Virtuais (VMs): Criação, configuração e escalabilidade.
Escalabilidade: Conjuntos de escalabilidade de máquinas virtuais e instâncias reservadas.
Soluções de Computação Serverless: Funções do Azure.
Configuração e Gestão de Redes Virtuais
Redes Virtuais (VNets): Configuração de VNets e sub-redes.
Gateways de VPN: Configuração de VPNs e conexões de rede privada.
Balanceamento de Carga: Configuração de balanceadores de carga e rotas de tráfego.
Monitorização e Backup de Recursos do Azure
Monitorização: Configuração de métricas, logs e alertas.
Azure Monitor: Utilização de Insights, Alertas e Log Analytics.
Backup e Recuperação: Configuração de políticas de backup e execução de restaurações.
az group create --location westeurope --name backend_RG
az network vnet create --resource-group backend_RG --name backend_VNET --address-prefix 10.0.0.0/16
az network vnet subnet create --resource-group backend_RG --vnet-name backend_VNET --name backend_SUBNET01 --address-prefix 10.0.1.0/24
Backend01: Criar a interface de rede (NIC), Public IP (PIP) e associar a NIC ao PIP:
az network nic create --resource-group backend_RG --name backend01_NIC01 --vnet-name backend_VNET --subnet backend_SUBNET01
az network public-ip create --resource-group backend_RG --name backend01_PIP01
az network nic ip-config update --resource-group backend_RG --nic-name backend01_NIC01 --name ipconfig1 --public-ip-address backend01_PIP01Backend02: Criar a interface de rede (NIC), Public IP (PIP) e associar a NIC ao PIP:
az network nic create --resource-group backend_RG --name backend02_NIC01 --vnet-name backend_VNET --subnet backend_SUBNET01
az network public-ip create --resource-group backend_RG --name backend02_PIP01
az network nic ip-config update --resource-group backend_RG --nic-name backend02_NIC01 --name ipconfig1 --public-ip-address backend02_PIP01
2. Criar VM backend01:
az vm create \
--resource-group backend_RG \
--name backend01 \
--nics backend01_NIC01 \
--image Canonical:UbuntuServer:18.04-LTS:latest \
--size Standard_DS1_v2 \
--admin-username azureuser \
--generate-ssh-keys
Criar uma NSG, criar uma regra inbound para permitir tráfego 22 (ssh) e associar a NSG à NIC do backend01:
az network nsg create --resource-group backend_RG --name backend_NSG
az network nsg rule create --resource-group backend_RG --nsg-name backend_NSG --name Allow-SSH --priority 1000 --destination-port-ranges 22 --direction Inbound --access Allow --protocol Tcp --description "Allow SSH"
az network nic update --resource-group backend_RG --name backend01_NIC01 --network-security-group backend_NSG
Obter o endereço IP público do backend01, aceder via ssh e instalar o NGINX:
az vm list-ip-addresses --name backend01 --output table
ssh azureuser@IP-Publico
sudo apt-get -y update && sudo apt-get -y install nginx
Adicionar uma descrição ao index.html, para sabermos qual o backend que estamos a aceder quando usarmos o IP do LB:
sudo vim /var/www/html/index.nginx-debian.html
<h1>Welcome to nginx! - backend01</h1>
Abrir o porto 80 para inbound (desta vez via portal):
Portal Azure > backend01 > Networking > Network settings > Rules > + Create port rule:
Nota: Na criação deste VM, usei outra forma propositadamente para dar a conhecer o parâmetro --custom-data que permite que depois da VM criada seja executado um script. Neste caso, instala o nginx, inicia o serviço e altera o index.html.
Mais info: https://learn.microsoft.com/en-us/azure/virtual-machines/custom-data.
Criar o ficheiro cloud-init.txt com o conteúdo mais abaixo. Podem usar o comando vi cloud-init.txt:
#cloud-config
package_upgrade: true
packages:
- nginx
runcmd:
- systemctl start nginx
- sed -i 's/<h1>Welcome to nginx!<\/h1>/<h1>Welcome to nginx! - backend02<\/h1>/' /var/www/html/index.nginx-debian.htmlCriar a vm backend02 usando como parâmetro o script cloud-init.txt:
az vm create \
--resource-group backend_RG \
--name backend02 \
--nics backend02_NIC01 \
--image Canonical:UbuntuServer:18.04-LTS:latest \
--size Standard_DS1_v2 \
--admin-username azureuser \
--ssh-key-values ~/.ssh/id_rsa.pub \
--custom-data cloud-init.txt
Agora não precisamos de criar uma nova NSG, vamos apenas associar a backend_NSG à interface de rede backend02_NIC01:
az network nic update --resource-group backend_RG --name backend02_NIC01 --network-security-group backend_NSG
Abrir o porto 80 para inbound:
az vm open-port \
--port 80 \
--resource-group "backend_RG" \
--name backend02
Verificar se o NGINX funciona:
4. Criar o Load Balancer
Iremos criar um LB básico de L4 (Camada 4), ou seja, o reencaminhamento do tráfego será via sockets (IP:porto).
Como existe mais que uma solução de balanceamento de tráfego no Azure, o mais simples é colocar na barra de pesquisa do portal Azure "Load Balancing - Help me choose". Uma vez, destro deste assistente vamos respondendo a questões até o Azure no sugerir o melhor LB:
Does your application use HTTP/HTTPS? [No]
Is your application public (internet facing)? [Yes]
Is your application deployed in multiple regions? [No]
Se respondermos desta forma termos a sugestão de um Load Balancer com L4. Clicamos em Create.
Criámos um load balancer baseado em encaminhamento de IP:porto, ou seja, tudo o que chega a determinado IP público é encaminhado para um de dois backends (backend01 e backend02). Começámos por criar as componentes de rede, bem como as interfaces de rede a serem usadas nas VMs. Para além de criar as VMs, foi também necessário criar um NSG com uma regra para conseguirmos ligar por SSH para efetuar a instalação de pacotes e algumas alterações.
Neste tutorial, tentei demonstrar como realizar alguns passos através do Azure CLI e outros através do Portal do Azure. Após criar o load balancer, os PIPs dos backends podem ser removidos para melhorar a segurança e evitar a exposição dessas VMs à internet pública.
Um video de como fazer um script em bash utilizando arrays:
https://www.youtube.com/watch?v=K2plzc4vJvw
git init - Initialize a new Git repository.
git clone - Clone a remote repository to your local machine.
git status - Check the current state of your working directory.
git add - Stage changes for the next commit.
git commit - Record staged changes and create a snapshot.
git push - Upload local changes to a remote repository.
git pull - Fetch and merge changes from a remote repository.
git branch - List, create, or delete branches.
git checkout / git switch - Switch between branches or commits.
git merge - Integrate changes from one branch into another.
git diff - View differences between working directory and staging area.
git log - Display a chronological list of commits.
Exemplo de configuração de rede com Netplan:
$ vim /etc/netplan/00-installer-config.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
addresses:
- 10.0.0.1/24
routes:
- to: default
via: 10.0.0.254
nameservers:
search: [meuDomain, outroDomain]
addresses: [10.10.10.10, 10.10.10.11] $ sudo netplan apply
Já
vos aconteceu usarem a instalação mínima e não terem ferramentas como o
VI ou o Ping?! E depois reconfigurar a rede sem estas ferramentas?!
Aqui ficam alguns comandos rápidos para desenrascar:
$ ip a add 192.168.0.10/24 dev eth0
$ echo "nameserver 8.8.8.8" > /etc/resolv.conf
$ ip route add default via 192.160.0.254
Ferramentas a instalar que podem ser necessárias:
$ apt-get install vim
$ apt-get install iputils-ping
# Instalar ifconfig, ...
$ apt-get install net-tools
# Instalar dig, Nslookup, ...
$ apt-get install bind9-utils
$ apt-get install telnet
Trago aqui um caso prático que me deparei esta semana. Aumentar um volume (VG - Volume Group) que contém 2 discos, ou seja, 2 Physical Volumes, onde um deles é uma partição e o outro é o disco inteiro:
vg-01 = /dev/sda2 (49GB) + /dev/sdb (151GB)
Podemos ver obter a informação acima com o comando pvdisplay.
Passos para incrementar o disco:
- Aumentar o disco físico nas propriedades da VM.
- No Linux, aumentar o PV.
- E de seguida aumentar o LV.
- E por fim aumentar o sistema de ficheiros.
$ pvresize /dev/sdb $ lvextend -l +100%FREE /dev/vg-01/lv-01 $ resize2fs /dev/vg-01/lv-01
Comandos para verificar os vários passos:
pvdisplay - Verificar se o PV foi aumentado.
lvdisplay - Verificar se o LV foi aumentado.
fdisk - l - Identificar antes de toda a operação os discos e partições existentes.
df -h - Verificar se o aumento de espaço se refletiu.
$ find /usr/share -name 'ficheiro.txt'
#Igual ao anterior mas com case insensitive:$ find /usr/share -name 'ficheiro.txt'#Encontrar todos os ficheiros que iniciem por f:
$ find /usr/share -name 'f*'#Encontrar todos os ficheiros que Não iniciem por f:
$ find /usr/share -not -name 'f*'
$ find /usr/share -size +10M#Econtrar ficheiro com o tamanho exato de 512k:
$ find /usr/share -size 512k
#Ficheiros modificados no último minuto:
$ find /usr/share -mmin -1
#Ficheiros modificados nas últimmas 24h$ find /usr/share -mtime -0#Ficheiros modificados nas últimmas 24h$ find /usr/share -mtime -0#Econtra pelo nome e pelo tamanho:$ find-name 'ficheiro.txt'-size 10M
#Encontra pelo nome ou pelo tamanho:
$find-name 'ficheiro.txt'-o -size 10M
$ find -perm 664
https://www.baeldung.com/ops/kubernetes-deployment-vs-replicaset
Aqui ficam alguns comando do jornalctl que são uma alternativa à análise de logs tradicional do /var/log.
$ journalctl -e
$ journalctl -p err
$ journalctl -p warning
$ journalctl /usr/bin/sudo
$ journalctl -u sshd.service
$ journalctl -f #Fica ativo para ir mostrando os logs que estão a ser gerados
$ journalctl -S 04:00
$ journalctl -S 04:00 -U 05:00
$ journalctl -S '2022-11-11 13:05:00'
$ journalctl -b 0 #Logs desde o atual booy
$ journalctl -b -1 #Logs do boot anterior. (É preciso instruções adicionais)
$ last #Histórico de logs de quem entrou no sistema
$ lastlog
Este erro surge porque o módulo da floppy disk está instalado e algo a tentar usar, assim podemos remove-lo da seguinte forma:
sudo rmmod floppy
echo "blacklist floppy" | sudo tee /etc/modprobe.d/blacklist-floppy.conf
sudo dpkg-reconfigure initramfs-tools