L'administration système via Shell implique souvent la résolution de problèmes spécifiques. Ce document présente des solusions pour des scénarios fréquents, avec des exemples de commandes adoptés.
1. Exploitation avancée de la commande find
Pour renommer massivement des fichiers avec une extension donnée, on peut combiner find et sh -c afin de gérer les transformations de noms :
find . -name "*.log" -exec sh -c 'mv "$1" "${1%.log}.archive"' _ {} \;
Dans cet exemple, le séparateur '_' remplace le '/' traditionnel, et l'extension .log est convertie en .archive pour illustrer la flexibilité.
2. Contournement des restrictions de permissions avec sh -c
Lorsque sudo échoue avec des redirections, deux approches permettent d'étendre les privilèges à la commande complète :
Méthode 1 : Exécution via sh -c
sudo /bin/sh -c 'printf "Contenu" >> /chemin/fichier.txt'
Méthode 2 : Utilisation de tee pour les redirections
printf "Contenu" | sudo tee -a /chemin/fichier.txt
L'option -a de tee équivaut à la redirection >>, tandis que son absence agit comme >
3. Filtrage de journaux par période et termes spécifiques
Pour extraire des entrées de journaux correspondant à des critères temporels et textuels :
# Étape 1 : Extraction par mots-clés avec egrep
egrep -R "erreur|échec" system.log* > extraction_tmp.log
# Étape 2 : Délimitation temporelle avec sed
sed -n '/2023-07-15 08:30:00/,/2023-07-15 09:15:00/p' extraction_tmp.log > resultats_finaux.log
Les bornes temporelles doivent correspondre à des entrées existantes dans le fichier source pour un débit précis.
4. Gestion des fichiers avec noms corrompus
Pour supprimer des fichiers dont les noms contiennent des caractères invalides, on recourt aux inodes :
# Identification de l'inode
ls -li
# Suppression via l'inode
find . -inum 76543 -delete
Cette méthode contourne les problèmes liés à l'encodage des noms de fichiers.
5. Ajustement du scaling via kubectl
Pour modifier le nombre de réplicas d'un déploiement Kubernetes, un script automatisé peut être utilisé :
#!/bin/bash
KUBECONFIG_FILE="cluster-config.yml"
TARGET_DEPLOY="web-service"
DESIRED_COUNT=5
kubectl --kubeconfig=$KUBECONFIG_FILE patch deployment $TARGET_DEPLOY -p '{"spec":{"replicas":'$DESIRED_COUNT'}}'
Les variables ont été renommées pour refléter leur rôle dans un contexte opérationnel.
6. Configuration des alias de sécurité pour les opérations de suppression
La différence de comportement entre utilisateurs ordinaires et root lors de l'utilisation de rm provient des alias définis. Pour uniformiser la sécurité :
sudo su -
echo "alias rm='rm -i'" >> /etc/bashrc
echo "alias cp='cp -i'" >> /etc/bashrc
echo "alias mv='mv -i'" >> /etc/bashrc
source /etc/bashrc
Cette configuration globale garantit des confirmations interactives pour tous les utilisateurs.