📌 FICHE BILAN & MÉMO⚓︎
Chaînes de Caractères : L'Essentiel à Retenir⚓︎
🎯 Synthèse de la Séance⚓︎
| Élément | Détail |
|---|---|
| Thème | Manipulation de chaînes de caractères (strings) |
| Application | Parsing de fichiers de logs |
| Compétences | Extraction, transformation, analyse de texte |
| Durée | 4 heures |
| Livrable | Script d'analyse de logs + rapport |
✅ Objectifs Atteints⚓︎
À l'issue de cette séance, vous devez être capable de :
- ✅ Définir une chaîne de caractères et ses propriétés
- ✅ Concaténer, mesurer, indexer des chaînes
- ✅ Extraire des sous-chaînes avec le slicing
- ✅ Utiliser les méthodes essentielles (split, strip, replace, upper, lower)
- ✅ Parser une ligne de log pour en extraire l'IP, l'URL, le code HTTP
- ✅ Automatiser l'analyse de logs avec un script Python
- ✅ Générer un rapport professionnel exploitable par le management
🔑 Les 8 Méthodes Clés à Maîtriser⚓︎
| Méthode | Action | Syntaxe | Exemple |
|---|---|---|---|
.upper() |
MAJUSCULES | s.upper() |
"admin".upper() → "ADMIN" |
.lower() |
minuscules | s.lower() |
"ADMIN".lower() → "admin" |
.strip() |
Supprimer espaces | s.strip() |
" test ".strip() → "test" |
.replace(a, b) |
Remplacer | s.replace(a, b) |
"hello".replace("l", "L") → "heLLo" |
.split(sep) |
Découper | s.split(sep) |
"a,b,c".split(",") → ['a', 'b', 'c'] |
.count(x) |
Compter | s.count(x) |
"aaa".count("a") → 3 |
len(s) |
Longueur | len(s) |
len("Python") → 6 |
s[i] |
Indexation | s[i] |
"Python"[0] → 'P' |
🧮 Slicing : La Syntaxe à Retenir⚓︎
chaine[début:fin:pas]
| Syntaxe | Signification | Exemple avec "Python" |
|---|---|---|
s[:3] |
3 premiers caractères | "Pyt" |
s[3:] |
Du 4e à la fin | "hon" |
s[-3:] |
3 derniers caractères | "hon" |
s[::2] |
1 caractère sur 2 | "Pto" |
s[::-1] |
Inverser | "nohtyP" |
[ILLUSTRATION : Schéma mémoire d'indexation]
Légende : Représentation visuelle de la chaîne "Python" avec index positifs (0-5) et négatifs (-6 à -1)
📊 Structure d'un Log Apache/Nginx⚓︎
Format Standard⚓︎
IP - - [Date] "Méthode URL Protocole" Code Taille
Exemple Annoté⚓︎
192.168.1.10 - - [20/Feb/2026:10:15:32 +0100] "GET /index.html HTTP/1.1" 200 2345
↑ ↑ ↑ ↑ ↑ ↑
IP Date Méthode URL Code Taille
Extraction avec .split()⚓︎
ligne = '192.168.1.10 - - [20/Feb/2026:10:15:32 +0100] "GET /index.html HTTP/1.1" 200 2345'
parties = ligne.split()
ip = parties[0] # 192.168.1.10
methode = parties[5] # "GET
url = parties[6] # /index.html
code_http = parties[8] # 200
taille = parties[9] # 2345
🚨 Codes HTTP à Connaître⚓︎
| Code | Nom | Signification | Action IT |
|---|---|---|---|
| 200 | OK | Requête réussie | ✅ Tout va bien |
| 301 | Moved Permanently | Redirection permanente | ℹ️ Page déplacée |
| 403 | Forbidden | Accès refusé | 🔒 Vérifier permissions |
| 404 | Not Found | Page inexistante | 🔍 Vérifier liens/typos |
| 500 | Internal Server Error | Erreur serveur | ⚠️ Vérifier logs applicatifs |
| 503 | Service Unavailable | Serveur surchargé | 🔥 Vérifier ressources (CPU, RAM) |
🛠️ Template de Script d'Analyse de Logs⚓︎
# ═══════════════════════════════════════════════════════════
# ANALYSE DE LOGS — TEMPLATE RÉUTILISABLE
# ═══════════════════════════════════════════════════════════
# Initialisation des compteurs
total = 0
compteurs = {"200": 0, "404": 0, "500": 0}
compteur_ip = {}
# Lecture du fichier
with open("access.log", "r") as fichier:
for ligne in fichier:
total += 1
parties = ligne.strip().split()
# Extraction
ip = parties[0]
code = parties[8]
# Comptage par code
if code in compteurs:
compteurs[code] += 1
# Comptage par IP
compteur_ip[ip] = compteur_ip.get(ip, 0) + 1
# Affichage des résultats
print(f"Total : {total}")
print(f"Requêtes 200 : {compteurs['200']}")
print(f"Erreurs 404 : {compteurs['404']}")
print(f"IP max : {max(compteur_ip, key=compteur_ip.get)}")
💡 Conseil : Enregistrez ce template comme analyse_logs_template.py pour le réutiliser dans vos futurs projets.
🎓 Pourquoi C'est Important en Administration Système ?⚓︎
Les Logs, C'est la Boîte Noire du Système⚓︎
En tant que technicien SISR, vous passerez 30-40% de votre temps à analyser des logs pour :
| Situation | Exemple Concret |
|---|---|
| Détection d'intrusion | Une IP fait 1000 requêtes en 5 minutes → Force brute |
| Diagnostic de panne | Le site est lent → Les logs montrent 500 erreurs 500 |
| Optimisation | Quelles pages sont les plus consultées ? → Prioriser le cache |
| Reporting | Le patron veut savoir combien de visiteurs uniques ce mois |
| Conformité RGPD | Prouver qu'aucune donnée sensible n'a été exposée |
Sans maîtrise des chaînes → vous ne pouvez pas automatiser → vous perdez des heures à lire manuellement.
🔄 Lien avec les Autres Séances⚓︎
| Séance | Lien avec S2 |
|---|---|
| S1 | Variables et types → Les chaînes sont un type de données |
| S3 | Listes et boucles → Itérer sur les lignes d'un fichier |
| S5 | Fonctions → Encapsuler le parsing dans une fonction |
| S8 | Regex (expressions régulières) → Parsing avancé |
| BLOC 3 - S5 | Analyse de logs de sécurité (firewall, IDS/IPS) |
📚 Ressources pour Aller Plus Loin⚓︎
Documentation Officielle⚓︎
- Python String Methods : docs.python.org/3/library/stdtypes.html#string-methods
- Format Apache Logs : httpd.apache.org/docs/current/logs.html
Tutoriels Recommandés⚓︎
- OpenClassrooms : "Apprenez à programmer en Python" (Chapitre 7 : Chaînes)
- Real Python : "Python String Formatting Best Practices"
- FreeCodeCamp : "How to Parse Log Files in Python"
Outils Professionnels (à découvrir plus tard)⚓︎
| Outil | Usage | Pourquoi c'est puissant |
|---|---|---|
| Splunk | Agrégation et analyse de logs | Interface graphique, alertes automatiques |
| ELK Stack | Elasticsearch + Logstash + Kibana | Open source, ultra-scalable |
| Graylog | Centralisation de logs | Gratuit, adapté PME |
| fail2ban | Blocage automatique d'IPs suspectes | Détecte les tentatives de brute force |
💡 En tant que technicien SISR, vous devrez maîtriser AU MOINS un de ces outils.
💪 Exercices d'Entraînement⚓︎
Exercice 1 : Extraire un Domaine d'une URL⚓︎
Objectif : Extraire le nom de domaine d'une URL complète.
url = "https://www.monsite.fr/produits/laptop?id=123"
# Étapes :
# 1. Supprimer le protocole (https://)
# 2. Extraire jusqu'au premier /
# 3. Afficher le domaine
# À vous de jouer !
Solution :
url = "https://www.monsite.fr/produits/laptop?id=123"
sans_protocole = url.replace("https://", "").replace("http://", "")
domaine = sans_protocole.split("/")[0]
print(domaine) # www.monsite.fr
Exercice 2 : Valider un Mot de Passe⚓︎
Objectif : Vérifier qu'un mot de passe respecte les règles : - Au moins 12 caractères - Contient au moins 1 majuscule - Contient au moins 1 chiffre
def valider_mot_de_passe(mdp):
# À compléter
pass
# Tests
print(valider_mot_de_passe("Pass123456789")) # True
print(valider_mot_de_passe("pass123456789")) # False (pas de majuscule)
print(valider_mot_de_passe("Password")) # False (pas de chiffre)
Solution :
def valider_mot_de_passe(mdp):
if len(mdp) < 12:
return False
if not any(c.isupper() for c in mdp):
return False
if not any(c.isdigit() for c in mdp):
return False
return True
Exercice 3 : Anonymiser une Adresse IP⚓︎
Objectif : Remplacer le dernier octet d'une IP par XXX pour anonymisation.
ip = "192.168.1.42"
# Résultat attendu : "192.168.1.XXX"
Solution :
ip = "192.168.1.42"
parties = ip.split(".")
parties[3] = "XXX"
ip_anonyme = ".".join(parties)
print(ip_anonyme) # 192.168.1.XXX
🧠 Auto-Évaluation⚓︎
Cochez les compétences que vous maîtrisez maintenant :
| Je sais... | Maîtrisé ? |
|---|---|
| Créer une chaîne de caractères en Python | ☐ |
Concaténer deux chaînes avec + |
☐ |
Obtenir la longueur d'une chaîne avec len() |
☐ |
| Accéder au 3e caractère d'une chaîne (index 2) | ☐ |
Extraire les 5 premiers caractères avec [:5] |
☐ |
Inverser une chaîne avec [::-1] |
☐ |
Convertir en majuscules avec .upper() |
☐ |
Supprimer les espaces avec .strip() |
☐ |
Remplacer un mot par un autre avec .replace() |
☐ |
Découper une chaîne avec .split() |
☐ |
| Parser une ligne de log pour extraire l'IP et le code HTTP | ☐ |
| Compter les occurrences d'un code HTTP dans un log | ☐ |
| Générer un rapport formaté avec des bordures | ☐ |
Si vous avez coché < 10 cases, revoir la fiche de cours et refaire le TP.
📅 Prochaine Séance : S3⚓︎
Thème : Listes et Boucles⚓︎
Ce que vous allez apprendre :
- Créer et manipuler des listes
- Parcourir une liste avec for
- Ajouter/supprimer des éléments
- Trier et filtrer des listes
Application : Créer un script qui lit un fichier de logs complet, stocke les IPs dans une liste, et génère un rapport des 10 IPs les plus actives.
Prérequis S3 : Maîtrise des chaînes de caractères (S2) ✅
💬 Citations à Retenir⚓︎
"80% de l'administration système, c'est manipuler du texte. Les 20% restants, c'est comprendre ce qu'il faut manipuler."
— Proverbe du technicien SISR"Un log non analysé, c'est comme une boîte noire qu'on n'ouvre jamais. Vous savez qu'il y a des infos dedans, mais elles ne servent à rien."
— Administrateur système, après une panne non détectée"Si vous savez parser un log, vous savez parser n'importe quel fichier texte. C'est la compétence de base de tout automatiseur."
— DevOps engineer
🎯 Mot de la Fin⚓︎
Félicitations ! Vous venez de maîtriser une compétence fondamentale en administration système.
La manipulation de chaînes de caractères, c'est : - 🔧 La base de l'automatisation - 📊 Le cœur de l'analyse de logs - 🚀 La clé pour devenir efficace
Un script de 20 lignes peut vous faire gagner 10 heures par semaine.
C'est ça, être un bon technicien SISR : automatiser pour créer de la valeur.
✉️ Contact et Support⚓︎
Questions sur cette séance ?
- 📧 Email enseignant : [email@exemple.fr]
- 💬 Discord : Salon
#maths-info - 📚 Plateforme : Espace de cours BTS SIO
Ressources additionnelles : - [Lien vers le dépôt GitHub du cours] - [Lien vers les exercices complémentaires]