Recueil de Commandes Systèmes et Scripts Shell Efficaces

L'administration informatique quotidienne exige fréquemment l'exécution rapide de séquences complexes. Cette compilation vise à centraliser des techniques éprouvées pour diagnostiquer, manipuler et sécuriser les environnements serveur sous Unix et Linux.

Gestion Avancée des Fichiers

Sauvegarde Sélective

Au lieu de compter uniquement sur xargs, il est possible d'utiliser une boucle de lecture pour mieux gérer les noms de fichiers contenant des espaces lors de la copie de sauvegarde.

find /var/lib/service/data -type f -name "*.cfg" | while IFS= read -r fichier; do
    cp "$fichier" "${fichier}.backup"
done

Édition de Fichiers en Masse

Pour supprimer la dernière ligne de plusieurs fichiers trouvés :

find /home/user/projects -name "script.sh" | xargs -I {} sed -i "$ d" {}

Pour injecter le contenu d'un script externe dans chaque fichier cible :

find . -name "config.json" -exec sh -c 'cat /scripts/init.txt >> "$1"' _ {} \;

Compression avec Exclusions

L'utilisation des options longues améliore la lisibilité tout en excluant certains schémas de fichiers.

tar --create --gzip --verbose --exclude='archive_old*' -f archives/data_final.tar.gz ./data_folder

Traitement de Texte avec Sed et Awk

Inversion et Insertion de Lignes

L'outil sed permet d'insérer du texte avant ou après une correspondance spécifique sans modifier le fichier manuellement.

# Insérer une ligne après la correspondance
sed '/pattern_de_recherche/a LigneAjoutee' fichier_source.txt

# Insérer une ligne avant la correspondance
sed '/pattern_de_recherche/i LignePrecedente' fichier_source.txt

Commentaire Actif et Passif

Voici comment transformer visuellement un bloc de configuration dans un fichier de log ou de config.

# Activer le commentaire devant les lignes initiant par "config"
sed 's/^config/#config/' parameters.txt

# Décommenter les lignes débutant par "#active"
sed 's/^#\(active\)/\1/' parameters.txt

Analyse Statistique avec Awk

Pour sommer une colonne numérique spécifique d'un fichier de données :

awk '{total += $3} END {print "Somme totale:", total}' donnees.csv

Exemple d'exécution parallèle : exécuter une pause pendant le traitement de chaque entrée.

awk '{print $2}; sleep 0.5' liste_taches.txt

Réseau et Surveillance

Vérification de Connectivité

Utilisation de nc (Netcat) pour tester rapidement la réceptivité d'une machine distante sur un port spécifique.

# Mode TCP Verbose
nc -zv 192.168.1.50 22

# Mode UDP Test
nc -vu 192.168.1.50 53

Analyse des Connexions Actives

Ces agrégations permettent d'identifier les pics de charge ou les abus potentiels sur les interfaces réseaux.

# Compter l'état des connexions TCP
netstat -an | grep ESTABLISHED | wc -l

# Top des adresses IP connectées au port web
netstat -anp | grep ":80 " | awk '{print $5}' | cut -d':' -f1 | sort | uniq -c | sort -rn | head -20

Monitoring HTTP et Latence

Un script utilisant curl peut extraire les métriques de performance détaillées d'une URL cible.

curl -o /dev/null -s -w "Status: %{http_code}, Temps Total: %{time_total}s\n" https://exemple.com/sante

Pour une surveillance continue de la latence ICMP :

#!/bin/bash
GOAL_IP="10.0.0.5"
LOG_FILE="/var/log/monitoring.log"
while true; do
    echo "$(date '+%F %T') - $(ping -c 1 -W 1 $GOAL_IP | grep rtt | awk '{print $5} ms')" >> $LOG_FILE
    sleep 5
done

Traçabilité DNS et Adresse IP

Récupération rapide de l'adressse IP locale via les services publics ou les outils CLI standards.

curl ifconfig.me/ip

Conteneurisation et Virtualisation

Gestion Dynamique Docker

Lister les processus internes des conteneurs en cours d'exécution.

docker ps -q | xargs -n1 docker top

Lancer un conteneur éphémère avec un point d'entrée personnalisé pour éviter l'exécution automatique du CMD par défaut.

docker run --rm --entrypoint "/bin/bash" my_image:tag -c "whoami"

Accès aux Logs Système

Sur les distributions modernes gérées par systemd, l'accès aux journaux de service se fait ainsi :

journalctl --follow --unit nom_du_service

Sécurité et Réseaux Avancés

Gestion du Pare-feu Iptables

Configuration basique pour rediriger le trafic local vers un port distant tout en autorisant les sessions établies.

# Autoriser l'état lié
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Redirection DNAT (Port Forwarding)
iptables -t nat -A PREROUTING -i eth0 --dport 8080 -j DNAT --to-destination 192.168.0.100:80

# Masquerade pour le NAT de sortie
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Nettoyer les règles existantes
iptables --flush
iptables -t nat --flush

Analyse de Paquets

Utilisation de tcpdump pour filtrer le trafic entrant et sortant selon des critères précis.

# Capturer le trafic HTTP brut sur l'interface principale
tcpdump -i eth0 port 80 -nn -A

# Filtrer deux hôtes spécifiques
tcpdump host 192.168.1.5 and host 192.168.1.10

Outils de Synchronisation et Versionnement

Rsync avec Exceptions

Synchroniser un répertoire tout en ignorant systématiquement les fichiers temporaires ou de configuration sensibles.

rsync -avz --progress --exclude '*.log' --exclude 'cache/*' /source/local user@serveur:/destination/remote

Si le SSH utilise un port non-standard :

rsync -avz -e "ssh -p 2222" /opt/data root@10.10.0.5:/backup/

Métadonnées Git

Extraire le hachage court et la date du dernier commit pour l'intégration continue (CI).

COMMIT_TAG=$(git rev-parse --short HEAD)
BUILD_DATE=$(git log -1 --date=short --pretty=format:%ad)

Suppression de Namespace Kubernetes Bloqué

Forcez la suppression d'un namespace qui reste bloqué dans l'état Terminating.

kubectl patch ns mon_namespace_en_cours -p '{"spec":{"finalizers":null}}'

Étiquettes: Linux shell-script Docker nginx systemd

Publié le 25 octobre à 21h54