Guia de Comandos 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

bash and shell anniversary!

Para mais ferramentas de desenvolvimento e fluxos de trabalho, consulte Ferramentas de Desenvolvimento: O Guia Completo para Fluxos de Trabalho de Desenvolvimento Moderno.

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

produziria 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

produziria 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 no Bash com Tar

Compactando

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

Descompactando

tar -zxvf nome-do-arquivo.tgz

Acesso Remoto ao Servidor no Bash com SSH e SCP

Enviar identidade do 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 ~/file.ext user@ip-do-host:/home/user/file.ext

Baixar pasta com conteúdo aninhado recursivamente

scp -r user@ip-do-host:/home/user/dir ~/dir

Gerenciamento de Pastas e Arquivos no Bash

Verificar existência

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

# ou
if [ -d $fname ]; then
  echo "O 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 comando converte todos os arquivos jpg em alguma pasta para fits
for f in some-folder/*.jpg
do
  convert "$f" "${f/.jpg/.fits}"
done

Mesclar todos os arquivos em um só

cat ./* > merged.txt

Adicionar 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 -

aqui:

  • */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 do bash - o bash executará este script
  • /home/user/stest - parâmetro do script - a ser acessado por $1
  • /home/user/stest/stest.log - arquivo de log com a saída do console do stest.sh

Verificar

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

Monitorar Arquivos de Log no Bash

Monitorar arquivo de log em tempo real

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

Obter Código de Status HTTP com curl no Bash

response=$(curl --write-out '%{http_code}' --silent --output /dev/null servername)
  
# 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

Manter Comando SSH Rodando Após o Logout

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, depois:

[1]+ Stopped myprogram

  • disown -h %1
  • bg 1

[1]+ myprogram &

  • logout

Gerar JSON no Bash com jo

Instalar jo

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

produziria

{"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
}

Analisar JSON e Extrair Valores de Campos no Bash

Instalar jq primeiro

sudo apt-get install jq

Usar

  | jq -r '.fieldName'

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

curl http://localhost:11434/api/generate -d '{
  "model": "llama3",
  "prompt": "Why is the sky blue?",
  "stream": false
}'  | jq -r '.response'

Contar Palavras em um Arquivo com Bash

Contagem de palavras:

wc -w filename.txt

retornará algo como

261 filename.txt

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

words=`wc -w filename.txt | cut -f1 -d' '`
echo "$words words"

Ou usar wc como:

words=`wc -w < filename.txt`
echo "$words words"```
## Verificar Uso de Disco de Diretório

```bash
du ~/dirname

Obter o Caminho do Diretório do Script no Bash

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

Medir Tempo de Execução do Script no Bash

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

time your_script.sh

Outra maneira é um pouco mais complicada:

start=`date +%s`

# código muito importante
# vai aqui

end=`date +%s`

runtime=$((end-start))

Comparar Dois Arquivos com VS Code

code -d <arquivo 1> <arquivo 2>

Verificar Pacotes Disponíveis no Repositório Ubuntu

sudo apt-cache policy <nomeDoPacote>