Feuille de rappel Bash Linux

Quelques paramètres de ligne de commande des outils

Sommaire

Ce n’est pas une liste très complète, juste quelques-unes utiles pour moi

bash et shell anniversaire !

Vérifier la version de linux ubuntu

Méthode 1

lsb_release -a

produirait quelque chose comme

Aucun module LSB disponible.
Distributor ID:	Linuxmint
Description:	Linux Mint 22.1
Release:	22.1
Codename:	xia

Méthode 2

cat /etc/os-release

produirait quelque chose comme

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

Archivage & déarchivage

Compression

tar -zcvf archive-name.tgz directory-name

Décompression

tar -zxvf archive-name.tgz

Serveurs distants

Envoyer l’identité utilisateur vers le serveur distant

ssh-copy-id user@10.0.0.225

Cela permettra de se connecter sans mot de passe la prochaine fois comme

ssh user@10.0.0.225

Uploader un fichier

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

Télécharger un dossier avec des éléments imbriqués de manière récursive

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

Dossiers et fichiers

Vérifier l’existence

# créer un dossier s'il n'existe pas, avec tous les dossiers intermédiaires
[ -d $repdir ] || mkdir -p $repdir

# ou
if [ -d $fname ]; then
  echo "Le fichier n'existe pas : $fname"
  return
fi

Créer un dossier pour un utilisateur particulier

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

Itérer sur les fichiers dans le dossier

# celui-ci convertit tous les fichiers jpg d'un dossier en fits
for f in some-folder/*.jpg
do
  convert "$f" "${f/.jpg/.fits}"
done

Fusionner tous les fichiers en un seul

cat ./* > merged.txt

Ajouter l’exécution d’une commande au 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 -

ici :

  • */15 - exécuter toutes les 15 minutes
  • control-marker-1 - est l’identifiant de cette commande dans la configuration cron pour la mettre à jour la prochaine fois avec le même script
  • /bin/bash - commande à exécuter
  • /home/user/stest/stest.sh - paramètre bash - le bash exécutera ce script
  • /home/user/stest - paramètre du script - à accéder via $1
  • /home/user/stest/stest.log - fichier de journalisation avec la sortie console de stest.sh

Vérifier

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

Journalisation

Suivre le journal de log en direct

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

Code d’état de curl

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 restarting ${url} # faire la logique de démarrage/redémarrage

Laisser une commande ssh en cours après la déconnexion

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

Supposons que vous avez un programme en cours d’exécution en premier plan, appuyez sur

  • ctrl-Z, puis :

[1]+ Arrêté myprogram

  • disown -h %1
  • bg 1

[1]+ myprogram &

  • déconnexion

Générer du JSON

Installer jo

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

produirait

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

Un peu plus complexe :

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

Formater du JSON

Utiliser

| jq .

Pour formater le JSON généré ci-dessus :

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

Le JSON formaté sera :

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

Parser du JSON et retourner la valeur d’un champ

Installer jq d’abord

sudo apt-get install jq

Utiliser

  | jq -r '.fieldName'

Comme pour parser la sortie d’un appel à Ollama :

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

Compter les mots dans un fichier

Compte de mots :

wc -w filename.txt

retournerait quelque chose comme

261 filename.txt

Si vous souhaitez juste un entier, vous pouvez couper le premier mot, qui est un nombre

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

Ou utiliser wc comme :

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

Vérifier combien d’espace le dossier occupe sur le HDD

du ~/dirname

Obtenir le nom du dossier où se trouve le script en cours d’exécution

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

Mesurer le temps d’exécution du script

Une option est d’utiliser la fonction time

time your_script.sh

Une autre façon est un peu plus compliquée :

start=`date +%s`

# code très important
# va ici

end=`date +%s`

runtime=$((end-start))

Comparer deux fichiers avec VS Code

code -d <file 1> <file 2>

Vérifier les paquets disponibles dans le dépôt ubuntu

sudo apt-cache policy <packageName>

Liens utiles