Feuille de rappel Bash Linux
Quelques paramètres de ligne de commande des outils
Ce n’est pas une liste très complète, juste quelques-unes utiles pour moi
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
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
- Fiche de référence Python
- Fiche de référence Conda
- Synchronisation des signets avec Floccus
- Réinstallation de linux
- Fiche de référence Ollama
- Fiche de référence Docker
- Fiche de référence Kubernetes
- Fiche de référence Markdown
- Encodage - décodage Base64 sur Windows, Linux et Mac
- Décoder et imprimer un token JWT
- Fiche de référence des paramètres de ligne de commande MinIO