Hoja de Referencia de Bash - Comandos de Linux para Ubuntu, Mint y Debian

Algunos parámetros de línea de comandos de herramientas

Índice

No es una lista muy completa, solo algunas útiles para mí

bash and shell anniversary!

Para más herramientas de desarrollo y flujos de trabajo, consulte Herramientas para desarrolladores: La guía completa de flujos de trabajo modernos.

Si necesita un patrón de prompt interactivo en scripts, consulte Pausar scripts con Presiona cualquier tecla en Bash CMD PowerShell y macOS.

Cómo verificar la versión de Linux Ubuntu

Para más detalles sobre cómo verificar la versión de Ubuntu, consulte Verificar versión de Linux Ubuntu.

Método 1

lsb_release -a

generaría 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

generaría 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

Archivado y desarchivado con Tar en Bash

Compresión

tar -zcvf nombre-archivo.tgz nombre-directorio

Descompresión

tar -zxvf nombre-archivo.tgz

Acceso a servidor remoto con SSH y SCP en Bash

Enviar identidad de usuario al servidor remoto

ssh-copy-id user@10.0.0.225

De este modo, permitirá iniciar sesión sin contraseña la próxima vez como

ssh user@10.0.0.225

Subir archivo

scp ~/archivo.ext user@host-ip:/home/user/archivo.ext

Descargar carpeta con contenido anidado de forma recursiva

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

Gestión de carpetas y archivos en Bash

Comprobar existencia

# crear una carpeta si no existe, con todas las carpetas intermedias
[ -d $repdir ] || mkdir -p $repdir

# o
if [ -d $fname ]; then
  echo "El archivo no existe: $fname"
  return
fi

Crear carpeta para un usuario en particular

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

Iterar sobre archivos en la carpeta

# este convierte todos los archivos jpg en una carpeta a fits
for f in some-folder/*.jpg
do
  convert "$f" "${f/.jpg/.fits}"
done

Unir todos los archivos en uno

cat ./* > merged.txt

Añadir comandos a 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 -

aquí:

  • */15 - ejecutar cada 15 minutos
  • control-marker-1 - es el identificador de este comando en la configuración de cron para actualizarlo la próxima vez con el mismo script
  • /bin/bash - comando a ejecutar
  • /home/user/stest/stest.sh - parámetro de bash - bash ejecutará este script
  • /home/user/stest - parámetro del script - a ser accedido por $1
  • /home/user/stest/stest.log - archivo de registro con la salida de consola de stest.sh

Verificar

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

Observar archivos de registro en Bash

Observar archivo de registro en vivo

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

Obtener código de estado HTTP con curl en Bash

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

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 restarting ${url} # lógica de inicio/reinicio

Mantener el comando SSH ejecutándose después del cierre de sesión

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

Asumiendo que tiene un programa ejecutándose en primer plano, presione

  • ctrl-Z, luego:

[1]+ Stopped myprogram

  • disown -h %1
  • bg 1

[1]+ myprogram &

  • logout

Generar JSON en Bash con jo

Instalar jo

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

generaría

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

Un poco más complejo:

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

Formatear JSON en Bash con jq

Usar

| jq .

Para formatear el json generado anteriormente:

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

El json formateado será:

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

Analizar JSON y extraer valores de campos en Bash

Instalar jq primero

sudo apt-get install jq

Usar

  | jq -r '.fieldName'

Como al analizar la salida de una llamada a Ollama:

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

Contar palabras en un archivo con Bash

Recuento de palabras:

wc -w filename.txt

devolverá algo como

261 filename.txt

Si solo quiere un entero, puede cortar la primera palabra, que es un número

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

O usar wc como:

words=`wc -w < filename.txt`
echo "$words words"

Verificar el uso de disco del directorio

du ~/dirname

Obtener la ruta del directorio del script en Bash

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

Medir el tiempo de ejecución del script en Bash

Una opción es usar la función time

time your_script.sh

Otra forma es un poco más complicada:

start=`date +%s`

# código muy importante
# va aquí

end=`date +%s`

runtime=$((end-start))

Comparar dos archivos con VS Code

code -d <archivo 1> <archivo 2>

Verificar paquetes disponibles en el repositorio de Ubuntu

sudo apt-cache policy <packageName>

Enlaces útiles

Suscribirse

Recibe nuevas publicaciones sobre sistemas, infraestructura e ingeniería de IA.