Scheda di riferimento per Linux Bash

Alcuni parametri della riga di comando degli strumenti

Indice

Non è una lista molto completa, ma alcune utili per me

bash e shell anniversario!

Verifica della versione di Linux Ubuntu

Metodo 1

lsb_release -a

produrrebbe qualcosa come

Non sono disponibili moduli LSB.
Distributor ID:	Linuxmint
Description:	Linux Mint 22.1
Release:	22.1
Codename:	xia

Metodo 2

cat /etc/os-release

produrrebbe qualcosa come

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

Archiviazione e decompressione

Compressione

tar -zcvf archive-name.tgz directory-name

Decompressione

tar -zxvf archive-name.tgz

Server remoti

Inserisci l’identità utente sul server remoto

ssh-copy-id user@10.0.0.225

In questo modo sarà possibile accedere senza password la prossima volta come

ssh user@10.0.0.225

Carica il file

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

Scarica una cartella con contenuti annidati in modo ricorsivo

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

Cartelle e file

Verifica l’esistenza

# crea una cartella se non esiste, con tutte le cartelle intermedie
[ -d $repdir ] || mkdir -p $repdir

# o
if [ -d $fname ]; then
  echo "Il file non esiste: $fname"
  return
fi

Crea una cartella per un utente specifico

sudo mkdir dir1
sudo chown specific_user dir1
sudo chown :specific_group dir1

Itera sui file nella cartella

# questo converte tutti i file jpg in una cartella in fits
for f in some-folder/*.jpg
do
  convert "$f" "${f/.jpg/.fits}"
done

Unisci tutti i file in uno

cat ./* > merged.txt

Aggiungi l’esecuzione di 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 -

qui:

  • */15 - esegui ogni 15 minuti
  • control-marker-1 - è l’identificatore di questo comando nella configurazione cron per aggiornarlo successivamente con lo stesso script
  • /bin/bash - comando da eseguire
  • /home/user/stest/stest.sh - parametro bash - il bash eseguirà questo script
  • /home/user/stest - parametro script - accessibile tramite $1
  • /home/user/stest/stest.log - file di log con l’output della console di stest.sh

Verifica

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

Log

Osserva il file log in tempo reale

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

Codice di stato di 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} # esegui logica di avvio/riavvio

Lascia che il comando ssh continui a eseguirsi dopo il logout

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

Assumendo che tu abbia un programma in esecuzione in primo piano, premi

  • ctrl-Z, quindi:

[1]+ Interrotto myprogram

  • disown -h %1
  • bg 1

[1]+ myprogram &

  • logout

Genera JSON

Installa jo

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

produrrà

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

Un po’ più complesso:

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

Formatta JSON

Usa

| jq .

Per formattare il JSON generato sopra:

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

Il JSON formattato sarà:

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

Parsa JSON e restituisce il valore di un campo

Installa jq prima

sudo apt-get install jq

Usa

  | jq -r '.fieldName'

Come parsing dell’output di una chiamata a Ollama:

curl http://localhost:11434/api/generate -d '{
  "model": "llama3",
  "prompt": "Perché il cielo è blu?",
  "stream": false
}'  | jq -r '.response'

Conta le parole in un file

Conteggio delle parole:

wc -w filename.txt

restituirà qualcosa come

261 filename.txt

Se desideri solo un intero, puoi tagliare la prima parola, che è un numero

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

O usa wc come:

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

Verifica quanto spazio occupa una cartella sul disco rigido

du ~/dirname

Ottieni il nome della cartella in cui si trova lo script in esecuzione

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

Misura il tempo di esecuzione dello script

Un’opzione è usare la funzione time

time your_script.sh

Un altro modo è un po’ più complesso:

start=`date +%s`

# codice molto importante
# va qui

end=`date +%s`

runtime=$((end-start))

Confronta due file con VS Code

code -d <file 1> <file 2>

Verifica i pacchetti disponibili nel repository Ubuntu

sudo apt-cache policy <packageName>