Resumo de Atalhos do Bash - Comandos Linux para Ubuntu, Mint e Debian

Alguns parâmetros de linha de comando de ferramentas

Conteúdo da página

Não é uma lista muito abrangente, apenas algumas úteis para mim

Aniversário do bash e shell!

Para mais ferramentas e fluxos de trabalho de desenvolvedor, veja Ferramentas de Desenvolvedor: O Guia Completo de Fluxos de Trabalho de Desenvolvimento Moderno.

Se você precisar de um padrão de prompt interativo em scripts, veja Pausar scripts com Pressione qualquer tecla no Bash, CMD, PowerShell e macOS.

Como Verificar a Versão do Linux Ubuntu

Para mais detalhes sobre como verificar a versão do Ubuntu, consulte Verificar versão do Linux Ubuntu.

Método 1

lsb_release -a

geraria algo como

No LSB modules are available.
Distributor ID:	Linuxmint
Description:	Linux Mint 22.1
Release:	22.1
Codename:	xia

Método 2

cat /etc/os-release

geraria algo como

NAME="Linux Mint"
VERSION="22.1 (Xia)"
ID=linuxmint
ID_LIKE="ubuntu debian"
PRETTY_NAME="Linux Mint 22.1"
VERSION_ID="22.1"
HOME_URL="https://www.linuxmint.com/"
SUPPORT_URL="https://forums.linuxmint.com/"
BUG_REPORT_URL="http://linuxmint-troubleshooting-guide.readthedocs.io/en/latest/"
PRIVACY_POLICY_URL="https://www.linuxmint.com/"
VERSION_CODENAME=xia
UBUNTU_CODENAME=noble

Arquivamento e Descompactação com Tar no Bash

Comprimindo

tar -zcvf nome-do-arquivo.tgz nome-da-pasta

Descomprimindo

tar -zxvf nome-do-arquivo.tgz

Acesso a Servidor Remoto no Bash com SSH e SCP

Enviar identidade de usuário para o servidor remoto

ssh-copy-id user@10.0.0.225

Assim, permitirá login sem senha na próxima vez, como

ssh user@10.0.0.225

Enviar arquivo

scp ~/arquivo.ext user@ip-hosp:/home/user/arquivo.ext

Baixar pasta com conteúdo recursivo

scp -r user@ip-hosp:/home/user/dir ~/dir

Gerenciamento de Pastas e Arquivos no Bash

Verificar existência

# criar uma pasta se não existir, com todas as pastas intermediárias
[ -d $repdir ] || mkdir -p $repdir

# ou
if [ -d $fname ]; then
  echo "Arquivo não existe: $fname"
  return
fi

Criar pasta para um usuário específico

sudo mkdir dir1
sudo chown usuario_especifico dir1
sudo chown :grupo_especifico dir1

Iterar sobre arquivos na pasta

# este converte todos os arquivos jpg em uma pasta para fits
for f in some-folder/*.jpg
do
  convert "$f" "${f/.jpg/.fits}"
done

Mesclar todos os arquivos em um

cat ./* > merged.txt

Adicionando Comandos ao Crontab

(crontab -l 2>/dev/null | \
  grep -v control-marker-1; \
  echo '*/15 * * * * /bin/bash /home/user/stest/stest.sh /home/user/stest >> /home/user/stest/stest.log 2>&1 #control-marker-1') | \
  crontab -

onde:

  • */15 - executar a cada 15 minutos
  • control-marker-1 - é o identificador deste comando na configuração do cron para atualizá-lo na próxima vez com o mesmo script
  • /bin/bash - comando a executar
  • /home/user/stest/stest.sh - parâmetro bash - o bash executará este script
  • /home/user/stest - parâmetro do script - para ser acessado por $1
  • /home/user/stest/stest.log - arquivo de log com a saída de console de stest.sh

Verificar

grep /home/user/stest/stest.sh /var/log/syslog
crontab -e

Monitorando Arquivos de Log no Bash

Acompanhar arquivo de log em tempo real

sudo tail -f /var/log/megalog.log

Obtendo Código de Status HTTP com curl no Bash

response=$(curl --write-out '%{http_code}' --silent --output /dev/null servidor)
  
# ou

url='http://localhost:8080/'
status=$(curl --head --location --connect-timeout 5 --write-out %{http_code} --silent --output /dev/null ${url})

[[ $status == 500 ]] || [[ $status == 000 ]] && echo reiniciando ${url} # fazer lógica de iniciar/reiniciar

Mantendo Comando SSH Rodando Após o Logoff

https://stackoverflow.com/questions/954302/how-to-make-a-program-continue-to-run-after-log-out-from-ssh

Assumindo que você tenha um programa rodando em primeiro plano, pressione

  • ctrl-Z, então:

[1]+ Parado meu_programa

  • disown -h %1
  • bg 1

[1]+ meu_programa &

  • logout

Gerando JSON no Bash com jo

Instalar jo

sudo apt-get install jo
a="123"
b="456"
jo "model=a" "prompt=b" "stream=false"

geraria

{"model":"a", "prompt":"b", "stream":false}

Um pouco mais complexo:

jo -p name=Jane point[]=1 point[]=2 geo[lat]=10 geo[lon]=20
{
   "name": "Jane",
   "point": [
      1,
      2
   ],
   "geo": {
      "lat": 10,
      "lon": 20
   }
}

Formatando JSON no Bash com jq

Usar

| jq .

Para formatar o JSON gerado acima:

a="123"
b="456"
jo "model=$a" "prompt=$b" "stream=false" | jq .

O JSON formatado será:

{
  "model": 123,
  "prompt": 456,
  "stream": false
}

Analisando JSON e Extraindo Valores de Campos no Bash

Instalar jq primeiro

sudo apt-get install jq

Usar

  | jq -r '.nomeDoCampo'

Como analisar a saída de uma chamada ao Ollama:

curl http://localhost:11434/api/generate -d '{
  "model": "llama3",
  "prompt": "Por que o céu é azul?",
  "stream": false
}'  | jq -r '.response'

Contando Palavras em um Arquivo com Bash

Contagem de palavras:

wc -w nome_do_arquivo.txt

retornará algo como

261 nome_do_arquivo.txt

Se você quiser apenas um número inteiro, pode cortar a primeira palavra, que é um número

palavras=`wc -w nome_do_arquivo.txt | cut -f1 -d' '`
echo "$palavras palavras"

Ou usar wc como:

palavras=`wc -w < nome_do_arquivo.txt`
echo "$palavras palavras"

Verificando Uso de Disco de Diretório

du ~/nome_da_pasta

Obtendo o Caminho do Diretório do Script no Bash

SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )

Medindo o Tempo de Execução do Script no Bash

Uma opção é usar a função time

time seu_script.sh

Outra forma é um pouco mais complicada:

inicio=`date +%s`

# código muito importante
# vai aqui

fim=`date +%s`

tempo_exec=$((fim-inicio))

Comparando Dois Arquivos com VS Code

code -d <arquivo 1> <arquivo 2>

Verificando Pacotes Disponíveis no Repositório Ubuntu

sudo apt-cache policy <nomeDoPacote>

Assinar

Receba novos artigos sobre sistemas, infraestrutura e engenharia de IA.