Hoja de referencia de Linux Bash
Algunas herramientas parámetros de línea de comandos
No es una lista muy completa, solo algunas que me resultan útiles
Comprobar la versión de Linux Ubuntu
Método 1
lsb_release -a
producirá 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
producirá 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
Archivar y desarchivar
Compresión
tar -zcvf archive-name.tgz directory-name
Descompresión
tar -zxvf archive-name.tgz
Servidores remotos
Enviar la identidad del usuario al servidor remoto
ssh-copy-id user@10.0.0.225
Así permitirá iniciar sesión sin contraseña la próxima vez como
ssh user@10.0.0.225
Subir un archivo
scp ~/file.ext user@host-ip:/home/user/file.ext
Descargar una carpeta con contenido anidado de forma recursiva
scp -r user@host-ip:/home/user/dir ~/dir
Carpetas y archivos
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 una carpeta para un usuario específico
sudo mkdir dir1
sudo chown specific_user dir1
sudo chown :specific_group dir1
Iterar sobre los archivos en la carpeta
# este convierte todos los archivos jpg de 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 la ejecución de un comando al 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 bash - el bash ejecutará este script
- /home/user/stest - parámetro del script - para accederlo mediante $1
- /home/user/stest/stest.log - archivo de registro con la salida de consola de stest.sh
Comprobar
grep /home/user/stest/stest.sh /var/log/syslog
crontab -e
Registros
Ver el archivo de registro en vivo
sudo tail -f /var/log/megalog.log
Código de estado de curl
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} # hacer lógica de inicio/reinicio
Dejar que un comando ssh siga ejecutándose después de desconectarse
Suponiendo que tienes un programa en primer plano, presiona
- ctrl-Z, luego:
[1]+ Detenido myprogram
- disown -h %1
- bg 1
[1]+ myprogram &
- logout
Generar JSON
Instalar jo
sudo apt-get install jo
a="123"
b="456"
jo "model=a" "prompt=b" "stream=false"
producirá
{"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
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 devolver el valor de un campo
Instalar jq primero
sudo apt-get install jq
Usar
| jq -r '.fieldName'
Como 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
Conteo de palabras:
wc -w filename.txt
devolverá algo como
261 filename.txt
Si quieres solo un número entero, puedes cortar la primera palabra, que es un número
words=`wc -w filename.txt | cut -f1 -d' '`
echo "$words palabras"
O usar wc así:
words=`wc -w < filename.txt`
echo "$words palabras"
Comprobar cuánto espacio ocupa un directorio en el HDD
du ~/dirname
Obtener el nombre de la carpeta donde se encuentra el script que se está ejecutando
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
Medir el tiempo de ejecución del script
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 <file 1> <file 2>
Comprobar paquetes disponibles en el repositorio de Ubuntu
sudo apt-cache policy <packageName>
Enlaces útiles
- Python Cheatsheet
- Conda Cheatsheet
- Sincronización de marcadores con Floccus
- Reinstalar Linux
- Ollama Cheatsheet
- Docker Cheatsheet
- Kubernetes Cheatsheet
- Markdown Cheatsheet
- Codificación y decodificación Base64 en Windows, Linux y Mac
- Decodificar y mostrar token JWT
- MinIO Parámetros de línea de comandos Cheatsheet