L02 - Fichiers, dossiers, recherche, redirections et éditeurs

Objectif

Créer, copier, déplacer, lire, chercher des fichiers ; enchaîner des commandes avec | et > ; éditer un fichier de config avec nano (et survivre à vim).


1. Manipuler fichiers et dossiers

CommandeEffet
touch notes.txtCréer un fichier vide (ou mettre à jour sa date)
mkdir projetCréer un dossier
mkdir -p a/b/cCréer toute une arborescence
cp source.txt copie.txtCopier un fichier
cp -r dossier/ sauvegarde/Copier un dossier (récursif)
mv ancien.txt nouveau.txtRenommer
mv fichier.txt ~/Documents/Déplacer
rm fichier.txtSupprimer (⚠️ pas de corbeille)
rm -r dossier/Supprimer un dossier et son contenu
rm -i *.logDemander confirmation pour chaque fichier
rmdir dossierSupprimer un dossier vide
ln -s /chemin/cible raccourciCréer un lien symbolique (raccourci)

rm -rf ne demande rien et ne pardonne rien. Vérifie toujours ton chemin avec ls avant.

Jokers (wildcards) : * = n’importe quoi, ? = un caractère, [0-9] = un chiffre. Ex. ls *.log, rm photo-0?.jpg.

2. Lire un fichier

CommandeUsage
cat fichierTout afficher (fichiers courts)
less fichierLire page par page (espace, /mot pour chercher, q pour quitter)
head -n 20 fichier20 premières lignes
tail -n 50 fichier50 dernières lignes
tail -f /var/log/syslogSuivre en direct (journaux) - Ctrl+C pour arrêter
wc -l fichierNombre de lignes
file inconnuQuel type de fichier ?
stat fichierTaille, droits, dates

3. Chercher

grep "Failed password" /var/log/auth.log         # lignes contenant le texte
grep -i "erreur" fichier.log                     # -i : ignorer majuscules/minuscules
grep -rn "Listen" /etc/apache2/                  # -r récursif, -n numéro de ligne
grep -v "^#" /etc/ssh/sshd_config | grep -v "^$" # config sans commentaires ni lignes vides
grep -E "error|warning" app.log                  # expression régulière : l'un OU l'autre
 
find /etc -name "*.conf"                          # par nom
find ~ -type f -size +100M                       # fichiers de plus de 100 Mo
find /var/log -mtime -1                           # modifiés depuis moins d'1 jour
find . -name "*.tmp" -delete                      # trouver ET supprimer (prudence)
 
locate sshd_config                                # très rapide (base mise à jour par "sudo updatedb")

4. Redirections et tubes

flowchart LR
  STDIN["Entrée standard (0)<br/>clavier"] --> CMD["commande"]
  CMD --> STDOUT["Sortie standard (1)<br/>écran"]
  CMD --> STDERR["Erreurs (2)<br/>écran"]
SyntaxeEffetExemple
>Envoyer la sortie dans un fichier (écrase)ls > liste.txt
>>Ajouter à la fin du fichierecho "fin" >> liste.txt
2>Rediriger les erreursfind / -name x 2> /dev/null
&>Sortie et erreurscommande &> tout.log
<Lire l’entrée depuis un fichiermysql base < sauvegarde.sql
| (tube / pipe)La sortie de A devient l’entrée de Bps aux | grep apache
teeAfficher et écrire (utile avec sudo)echo "1" | sudo tee /proc/sys/net/ipv4/ip_forward

sudo echo "x" > /etc/fichier échoue : la redirection est faite par TON shell, pas par sudo. Utilise echo "x" | sudo tee /etc/fichier (ou tee -a pour ajouter).

Exemples de chaînes utiles

# Les 10 IP qui ont le plus tenté de se connecter en SSH sans succès
grep "Failed password" /var/log/auth.log | grep -oE "from [0-9.]+" | sort | uniq -c | sort -rn | head
# Taille des dossiers, du plus gros au plus petit
du -sh ./* | sort -rh | head
# Compter les fichiers .md du vault
find ~/obsidian -name "*.md" | wc -l

Outils de traitement de texte : sort, uniq -c, cut -d: -f1 /etc/passwd, awk '{print $1}', sed 's/ancien/nouveau/g', tr 'a-z' 'A-Z'.

5. Archives et compression

tar -czvf sauvegarde.tar.gz dossier/      # créer (c) une archive gzip (z), verbeux (v), fichier (f)
tar -xzvf sauvegarde.tar.gz               # extraire (x)
tar -xzvf archive.tar.gz -C /opt/         # extraire dans /opt
tar -tzvf archive.tar.gz                  # lister sans extraire
zip -r projet.zip projet/ && unzip projet.zip

6. Éditer un fichier de config

nano (le plus simple - recommandé pour débuter)

sudo nano /etc/hosts
ToucheAction
Ctrl+O puis EntréeEnregistrer
Ctrl+XQuitter
Ctrl+WChercher
Ctrl+K / Ctrl+UCouper / coller une ligne
Alt+NAfficher les numéros de ligne

vim (présent partout, à connaître pour survivre)

ToucheAction
iPasser en mode insertion (on peut taper)
ÉchapRevenir en mode commande
:wEnregistrer
:qQuitter · :wq enregistrer et quitter · :q! quitter sans enregistrer
/motChercher
dd / pCouper une ligne / coller
uAnnuler

Toujours faire une copie avant de modifier un fichier de config : sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Voir aussi