DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesLinux : les commandes essentielles à connaître02 - Gérer les fichiers et répertoires

Détails

  • 20 minutes
  • Débutant

Objectifs

  • Créer des fichiers et répertoires
  • Copier, déplacer et renommer des éléments
  • Supprimer des fichiers en toute sécurité
  • Lire et rechercher du contenu dans les fichiers
Module Linux : les commandes essentielles à connaître

Exercice 02 : Gérer les Fichiers et Répertoires

🎯 Objectifs

À la fin de cet exercice, vous serez capable de :

  • ✅ Créer des fichiers et des arborescences de répertoires
  • ✅ Copier, déplacer et renommer des fichiers
  • ✅ Supprimer des fichiers et répertoires de manière contrôlée
  • ✅ Lire le contenu des fichiers avec cat, head, tail, less
  • ✅ Rechercher des fichiers avec find et du texte avec grep

Durée estimée : 20 minutes

Difficulté : ⭐⭐☆☆☆ (Débutant+)

Prérequis :

  • Avoir complété l'exercice 01 (navigation)
  • Un terminal Linux fonctionnel

📖 Contexte

La gestion des fichiers est une tâche quotidienne pour un ingénieur DevOps. Que ce soit pour organiser des scripts, déployer des configurations, ou nettoyer des logs, vous devez maîtriser la création, la copie, le déplacement et la suppression de fichiers. Cet exercice vous met en situation réelle.


📋 Énoncé

Vous êtes un développeur qui démarre un nouveau projet web. Vous allez créer la structure du projet, ajouter des fichiers de configuration, organiser le code, puis rechercher des informations dans ces fichiers.

Résultat attendu :

  • Un projet avec une arborescence complète
  • Des fichiers de configuration remplis
  • La capacité de rechercher et lire du contenu efficacement

🧭 Déroulement de l'exercice

Voici les grandes étapes à réaliser dans l'ordre. Chaque étape décrit ce que vous devez accomplir - à vous de trouver la commande. La solution complète est disponible si vous êtes bloqué.

Tâche 1 : Créer une arborescence de répertoires

Créez dans votre home le dossier mon-projet-web avec les sous-dossiers src, config, docs, tests, logs. Créez aussi src/css, src/js, src/images. Faites-le en un minimum de commandes.

Indice : mkdir a une option pour créer des répertoires imbriqués en une seule commande, même si les parents n'existent pas encore. Elle s'appelle -p (pour *parents*).

Vérification : ls -la mon-projet-web/ doit afficher les 5 sous-dossiers. ls mon-projet-web/src/ doit afficher 3 sous-dossiers.


Tâche 2 : Créer des fichiers avec du contenu

Créez un README.md avec un titre et quelques lignes, un fichier HTML dans src/, et un fichier CSS dans src/css/.

Indice : Pour un fichier court, echo "texte" > fichier suffit. Pour plusieurs lignes, utilisez cat > fichier << 'EOF' ... EOF ou un éditeur. >> ajoute à la fin sans écraser.

Vérification : cat README.md doit afficher votre contenu. cat src/index.html doit afficher du HTML valide.


Tâche 3 : Copier des fichiers et des répertoires

Copiez README.md dans docs/. Copiez ensuite le répertoire src/ entier vers un dossier src-backup/.

Indice : cp copie des fichiers. Pour copier un répertoire entier avec tout son contenu, il faut une option supplémentaire.

Question à se poser : Quelle option de cp permet la copie récursive d'un répertoire ?

Vérification : docs/README.md doit exister et le dossier src-backup/ doit contenir les mêmes fichiers que src/.


Tâche 4 : Déplacer et renommer

Déplacez src-backup/ dans tests/. Renommez config/ en configuration/.

Indice : La même commande mv sert à déplacer ET à renommer. La différence : si la destination est un nouveau nom dans le même dossier, c'est un renommage. Si c'est un autre dossier, c'est un déplacement.

Vérification : src-backup/ ne doit plus exister à la racine du projet. tests/src-backup/ doit exister. configuration/ doit exister à la place de config/.


Tâche 5 : Supprimer des fichiers et des répertoires

Supprimez le dossier tests/src-backup/ et son contenu. Supprimez ensuite le fichier docs/README.md.

Indice : rm supprime des fichiers. Pour supprimer un répertoire non-vide, il faut une option supplémentaire. Attention : il n'y a pas de corbeille - la suppression est définitive !

Question à se poser : Comment éviter de supprimer accidentellement des fichiers importants avec rm ?

Vérification : ls tests/ ne doit plus afficher src-backup/. ls docs/ ne doit plus afficher README.md.


Tâche 6 : Rechercher des fichiers et du texte

Trouvez tous les fichiers .html dans le projet. Cherchez ensuite le mot "charset" dans tous les fichiers du projet.

Indice : find cherche des fichiers par nom, type ou date. grep cherche du texte dans le contenu des fichiers. Ces deux outils sont complémentaires.

Question à se poser : Quelle commande find trouve tous les fichiers .html ? Quelle option de grep cherche récursivement dans tous les sous-dossiers ?

Vérification : find doit lister src/index.html. grep doit trouver la ligne contenant "charset" dans ce fichier.


� Mini-Projet : Organiser un déploiement d'application

Vous devez préparer l'arborescence d'une application prête à être déployée, en gérant les fichiers de manière professionnelle.

Scénario : Vous préparez le dossier de déploiement d'une application web pour la livrer sur un serveur. Tout doit être bien organisé, les fichiers inutiles supprimés, et les bons fichiers au bon endroit.

Ce que vous devez réaliser :

  1. Créez l'arborescence suivante en une ou deux commandes :
deploy-app/
├── app/
│   ├── static/
│   ├── templates/
│   └── config/
├── scripts/
├── backups/
└── logs/
  1. Créez dans app/config/ un fichier settings.env contenant 3 lignes de configuration (format CLE=valeur)
  2. Créez dans app/templates/ un fichier index.html avec une structure HTML minimale
  3. Créez dans scripts/ un fichier start.sh avec la ligne #!/bin/bash en première ligne
  4. Copiez settings.env dans backups/ en le renommant settings.env.bak
  5. Déplacez app/static/ pour le renommer en app/assets/
  6. Cherchez tous les fichiers .html dans le projet (avec find)
  7. Cherchez le mot bash dans tous les fichiers du projet (avec grep -r)
  8. Supprimez le dossier logs/ (vide pour l'instant)

Checkpoints de validation :

  • find deploy-app -type f liste exactement 4 fichiers (settings.env, index.html, start.sh, settings.env.bak)
  • cat deploy-app/backups/settings.env.bak affiche les 3 lignes de configuration
  • ls deploy-app/app/ affiche assets/, config/, templates/ (pas static/)
  • find deploy-app -name "*.html" retourne deploy-app/app/templates/index.html
  • grep -r "bash" deploy-app/ trouve le fichier start.sh
  • ls deploy-app/ ne liste plus logs/

�📚 Étapes Détaillées

Étape 1 : Créer la Structure du Projet

Objectif : Créer une arborescence complète en une seule commande

Instructions :

  1. Créez l'arborescence du projet :
bash
cd ~
mkdir -p mon-projet-web/{src,config,docs,tests,logs}
  1. Vérifiez la structure créée :
bash
ls -la mon-projet-web/

Résultat attendu :

total 28
drwxr-xr-x 7 alice alice 4096 Apr 10 10:00 .
drwxr-xr-x 5 alice alice 4096 Apr 10 10:00 ..
drwxr-xr-x 2 alice alice 4096 Apr 10 10:00 config
drwxr-xr-x 2 alice alice 4096 Apr 10 10:00 docs
drwxr-xr-x 2 alice alice 4096 Apr 10 10:00 logs
drwxr-xr-x 2 alice alice 4096 Apr 10 10:00 src
drwxr-xr-x 2 alice alice 4096 Apr 10 10:00 tests
  1. Créez des sous-dossiers dans src/ :
bash
mkdir -p mon-projet-web/src/{css,js,images}
  1. Entrez dans le projet :
bash
cd mon-projet-web

Troubleshooting :

  • Problème : mkdir: cannot create directory → Vérifiez que vous avez les droits d'écriture dans le dossier courant avec ls -la

Étape 2 : Créer des Fichiers

Objectif : Créer des fichiers avec du contenu

Instructions :

  1. Créez un fichier README.md :
bash
echo "# Mon Projet Web" > README.md
echo "" >> README.md
echo "Un projet de démonstration pour apprendre Linux." >> README.md
echo "" >> README.md
echo "## Installation" >> README.md
echo "Cloner ce repository et ouvrir index.html" >> README.md
  1. Créez un fichier HTML :
bash
cat > src/index.html << 'EOF'
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <title>Mon Projet Web</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
    <h1>Bienvenue sur Mon Projet Web</h1>
    <p>Ce projet est une démonstration.</p>
    <script src="js/app.js"></script>
</body>
</html>
EOF
  1. Créez un fichier CSS :
bash
cat > src/css/style.css << 'EOF'
/* Style principal */
body {
    font-family: Arial, sans-serif;
    margin: 0;
    padding: 20px;
    background-color: #f5f5f5;
}

h1 {
    color: #333;
}

p {
    color: #666;
    line-height: 1.6;
}
EOF
  1. Créez un fichier JavaScript :
bash
cat > src/js/app.js << 'EOF'
// Application principale
console.log("Application chargée");

function init() {
    console.log("Initialisation...");
    // TODO: ajouter la logique métier
}

document.addEventListener("DOMContentLoaded", init);
EOF
  1. Créez un fichier de configuration :
bash
cat > config/app.conf << 'EOF'
# Configuration de l'application
APP_NAME=MonProjetWeb
APP_PORT=8080
APP_ENV=development
APP_DEBUG=true
LOG_LEVEL=info
LOG_FILE=/var/log/mon-projet.log
DB_HOST=localhost
DB_PORT=5432
DB_NAME=monprojet
EOF
  1. Créez un fichier .gitignore :
bash
cat > .gitignore << 'EOF'
node_modules/
*.log
.env
dist/
.DS_Store
EOF
  1. Vérifiez tous les fichiers créés :
bash
find . -type f | sort

Résultat attendu :

./.gitignore
./README.md
./config/app.conf
./src/css/style.css
./src/index.html
./src/js/app.js

Étape 3 : Copier des Fichiers et Répertoires

Objectif : Maîtriser la copie de fichiers et dossiers

Instructions :

  1. Copiez le README dans le dossier docs/ :
bash
cp README.md docs/
  1. Vérifiez :
bash
ls docs/

Résultat attendu : README.md

  1. Copiez le fichier de config avec un nom différent (backup) :
bash
cp config/app.conf config/app.conf.backup
  1. Copiez tout le dossier src/ en src-backup/ :
bash
cp -r src/ src-backup/
  1. Vérifiez que la copie est identique :
bash
ls -la src/
ls -la src-backup/

Les deux dossiers doivent avoir le même contenu.

Troubleshooting :

  • Problème : cp: omitting directory 'src' → Vous avez oublié l'option -r (récursif) pour copier un dossier

Étape 4 : Déplacer et Renommer

Objectif : Utiliser mv pour déplacer et renommer

Instructions :

  1. Renommez le backup de configuration :
bash
mv config/app.conf.backup config/app.conf.old
  1. Vérifiez :
bash
ls config/

Résultat attendu :

app.conf  app.conf.old
  1. Créez un fichier temporaire et déplacez-le :
bash
touch brouillon.txt
ls brouillon.txt
mv brouillon.txt docs/notes.txt
ls docs/

Résultat attendu dans docs/ :

README.md  notes.txt

Le fichier a été déplacé et renommé en une seule commande.

  1. Déplacez le dossier backup dans docs/ :
bash
mv src-backup/ docs/archive-src/
  1. Vérifiez :
bash
ls -la docs/

Étape 5 : Lire le Contenu des Fichiers

Objectif : Utiliser les différentes commandes de lecture

Instructions :

  1. Afficher tout le contenu de README.md :
bash
cat README.md
  1. Afficher avec les numéros de ligne :
bash
cat -n src/index.html
  1. Créez un fichier de log simulé pour tester head et tail :
bash
for i in $(seq 1 50); do
    echo "$(date '+%Y-%m-%d %H:%M:%S') - Ligne $i - Événement de test" >> logs/app.log
done
  1. Afficher les 5 premières lignes :
bash
head -n 5 logs/app.log
  1. Afficher les 3 dernières lignes :
bash
tail -n 3 logs/app.log
  1. Compter les lignes du fichier :
bash
wc -l logs/app.log

Résultat attendu : 50 logs/app.log

  1. Tester less pour naviguer (appuyez sur q pour quitter) :
bash
less logs/app.log

Dans less :

  • Flèches haut/bas : Naviguer ligne par ligne
  • Espace : Page suivante
  • b : Page précédente
  • /mot : Rechercher "mot"
  • q : Quitter

Étape 6 : Rechercher des Fichiers avec find

Objectif : Localiser des fichiers selon différents critères

Instructions :

  1. Trouver tous les fichiers .html dans le projet :
bash
find . -name "*.html"

Résultat attendu :

./src/index.html
  1. Trouver tous les fichiers .js et .css :
bash
find . -name "*.js" -o -name "*.css"
  1. Trouver tous les dossiers :
bash
find . -type d
  1. Trouver les fichiers modifiés dans les 10 dernières minutes :
bash
find . -mmin -10
  1. Trouver les fichiers de plus de 1 Ko :
bash
find . -size +1k -type f

Étape 7 : Rechercher dans le Contenu avec grep

Objectif : Chercher du texte à l'intérieur des fichiers

Instructions :

  1. Chercher "TODO" dans tous les fichiers :
bash
grep -r "TODO" .

Résultat attendu :

./src/js/app.js:    // TODO: ajouter la logique métier
  1. Chercher "port" dans les fichiers de configuration (insensible à la casse) :
bash
grep -ri "port" config/
  1. Chercher "Événement" dans le log et compter les occurrences :
bash
grep -c "Événement" logs/app.log

Résultat attendu : 50

  1. Chercher dans le log et afficher le numéro de ligne :
bash
grep -n "Ligne 42" logs/app.log

Étape 8 : Supprimer avec Précaution

Objectif : Supprimer des fichiers de manière contrôlée

Instructions :

  1. Supprimez le fichier de config backup :
bash
rm config/app.conf.old
ls config/

Résultat attendu : Seul app.conf reste.

  1. Supprimez l'archive dans docs :
bash
rm -r docs/archive-src/
ls docs/
  1. Supprimez le fichier de log :
bash
rm logs/app.log

Bonne pratique : Avant un rm -r, faites toujours un ls du dossier cible pour vérifier son contenu.


Étape 9 : Nettoyage Final

Revenez dans votre home et supprimez le projet de test :

bash
cd ~
rm -r mon-projet-web
ls mon-projet-web

Résultat attendu :

ls: cannot access 'mon-projet-web': No such file or directory

✅ Vérification Finale

Vérifiez que vous savez répondre à ces questions :

  1. Comment créer une arborescence de dossiers en une seule commande ? → mkdir -p a/b/c
  2. Comment écrire du contenu dans un fichier sans éditeur ? → echo "texte" > fichier ou cat > fichier << 'EOF'
  3. Comment copier un dossier entier ? → cp -r source/ destination/
  4. Comment chercher un mot dans tous les fichiers d'un dossier ? → grep -r "mot" dossier/
  5. Quelle est la différence entre > et >> ? → > écrase le fichier, >> ajoute à la fin

📖 Pour Aller Plus Loin

  • Essayez locate (plus rapide que find si installé) : sudo apt install mlocate && sudo updatedb && locate "*.conf"
  • Explorez xargs pour combiner find et des commandes : find . -name "*.log" | xargs wc -l
  • Testez rsync pour des copies avancées : rsync -av source/ destination/
Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Créer une arborescence de répertoires
  • Tâche 2 : Créer des fichiers avec du contenu
  • Tâche 3 : Copier des fichiers et des répertoires
  • Tâche 4 : Déplacer et renommer
  • Tâche 5 : Supprimer des fichiers et des répertoires
  • Tâche 6 : Rechercher des fichiers et du texte
  • � Mini-Projet : Organiser un déploiement d'application
  • �📚 Étapes Détaillées
  • Étape 1 : Créer la Structure du Projet
  • Étape 2 : Créer des Fichiers
  • Étape 3 : Copier des Fichiers et Répertoires
  • Étape 4 : Déplacer et Renommer
  • Étape 5 : Lire le Contenu des Fichiers
  • Étape 6 : Rechercher des Fichiers avec find
  • Étape 7 : Rechercher dans le Contenu avec grep
  • Étape 8 : Supprimer avec Précaution
  • Étape 9 : Nettoyage Final
  • ✅ Vérification Finale
  • 📖 Pour Aller Plus Loin