Explorer la commande stat de Linux pour récupérer les métadonnées de fichiers

LinuxBeginner
Pratiquer maintenant

Introduction

Dans le système d'exploitation Linux, les fichiers et les répertoires contiennent des métadonnées importantes au-delà de leur simple contenu. Ces métadonnées incluent des informations telles que les permissions des fichiers, la propriété, la taille et divers horodatages. La commande Linux stat offre un moyen puissant de récupérer et d'afficher ces informations détaillées sur les fichiers et les répertoires.

Dans ce lab, vous apprendrez à utiliser la commande stat pour examiner les métadonnées des fichiers, comprendre les différents types d'horodatages et personnaliser le format de sortie pour extraire des informations spécifiques. Ces compétences sont essentielles pour l'administration système, le dépannage des problèmes de permissions de fichiers et la surveillance des modifications de fichiers.

Utilisation de base de la commande Stat

La commande stat dans Linux fournit des informations complètes sur les fichiers et les répertoires. Dans cette étape, nous allons apprendre à utiliser la forme de base de la commande stat et à comprendre sa sortie.

Comprendre la commande Stat

La commande stat révèle des informations de métadonnées qui ne sont généralement pas visibles avec des commandes régulières comme ls. Ces métadonnées incluent :

  • La taille du fichier et l'allocation des blocs
  • Les informations de l'inode
  • Les permissions d'accès
  • La propriété de l'utilisateur et du groupe
  • Divers horodatages
  • Le type de fichier

Création d'un fichier de test

Commençons par créer un simple fichier texte que nous pourrons utiliser tout au long de ce lab :

echo "This is a test file for the stat command." > ~/project/testfile.txt

Exécutez la commande ci-dessus dans votre terminal. Cela créera un fichier nommé testfile.txt dans le répertoire du projet avec une seule ligne de texte.

Utilisation de la commande Stat de base

Maintenant, examinons les métadonnées du fichier que nous venons de créer en utilisant la commande stat :

stat ~/project/testfile.txt

Vous devriez voir une sortie similaire à la suivante :

  File: /home/labex/project/testfile.txt
  Size: 41        	Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d	Inode: 12345678    Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  labex)   Gid: ( 1000/  labex)
Access: 2023-04-28 10:30:00.000000000 +0000
Modify: 2023-04-28 10:30:00.000000000 +0000
Change: 2023-04-28 10:30:00.000000000 +0000
 Birth: -

Comprendre la sortie

Décomposons les éléments clés de cette sortie :

  1. File (Fichier) : Le chemin complet du fichier
  2. Size (Taille) : La taille du fichier en octets
  3. Blocks (Blocs) : Nombre de blocs alloués
  4. IO Block (Bloc d'E/S) : La taille du bloc pour les E/S du système de fichiers
  5. Device (Périphérique) : L'ID du périphérique en hexadécimal/décimal
  6. Inode (Inode) : Le numéro d'inode (un identifiant unique pour le fichier)
  7. Links (Liens) : Nombre de liens physiques
  8. Access (Accès) : Permissions du fichier en format numérique (octal) et symbolique
  9. Uid/Gid : ID de l'utilisateur et ID du groupe du propriétaire du fichier
  10. Access/Modify/Change/Birth : Différents horodatages liés au fichier

Les horodatages sont particulièrement importants :

  • Access (Accès) : Quand le fichier a été lu pour la dernière fois
  • Modify (Modification) : Quand le contenu du fichier a été modifié pour la dernière fois
  • Change (Changement) : Quand les métadonnées du fichier ont été modifiées pour la dernière fois
  • Birth (Création) : Heure de création (non disponible sur tous les systèmes de fichiers)

Vous avez maintenant appris à afficher et à interpréter les métadonnées de base des fichiers en utilisant la commande stat.

Exploration des horodatages et des permissions des fichiers

Dans cette étape, nous allons explorer les horodatages des fichiers plus en détail et apprendre à modifier les permissions des fichiers. Comprendre ces aspects des métadonnées des fichiers est crucial pour la gestion et la sécurité des fichiers.

Comprendre les horodatages des fichiers

Comme nous l'avons vu à l'étape précédente, Linux maintient plusieurs horodatages pour chaque fichier :

  • Access time (atime) (Heure d'accès) : Mis à jour lorsqu'un fichier est lu
  • Modification time (mtime) (Heure de modification) : Mis à jour lorsque le contenu d'un fichier change
  • Change time (ctime) (Heure de changement) : Mis à jour lorsque les métadonnées d'un fichier (permissions, propriété) changent
  • Birth time (btime) (Heure de création) : Enregistre le moment où le fichier a été créé (non disponible sur tous les systèmes de fichiers)

Démontrons comment ces horodatages changent :

  1. Tout d'abord, vérifiez les horodatages actuels de notre fichier de test :
stat ~/project/testfile.txt
  1. Maintenant, modifions le contenu du fichier :
echo "Adding a new line to change the modification time." >> ~/project/testfile.txt
  1. Vérifiez à nouveau les horodatages :
stat ~/project/testfile.txt

Vous devriez remarquer que l'heure de modification (Modify) et l'heure de changement (Change) ont été mises à jour, car nous avons modifié le contenu du fichier.

Travailler avec les permissions des fichiers

Les permissions des fichiers déterminent qui peut lire, écrire ou exécuter un fichier. La commande stat affiche les permissions en format symbolique (-rw-r--r--) et en format numérique (0644).

Explorons comment afficher et modifier les permissions :

  1. Tout d'abord, vérifiez les permissions actuelles de notre fichier de test :
stat -c '%A %a %n' ~/project/testfile.txt

Cette commande utilise l'option -c pour afficher un format personnalisé :

  • %A affiche les permissions en format symbolique
  • %a affiche les permissions en format octal (numérique)
  • %n affiche le nom du fichier

La sortie devrait ressembler à ceci :

-rw-r--r-- 644 /home/labex/project/testfile.txt
  1. Maintenant, modifions les permissions :
chmod 755 ~/project/testfile.txt

Cette commande modifie les permissions en 755, ce qui signifie :

  • Le propriétaire a les permissions de lecture, d'écriture et d'exécution (7 = 4+2+1)
  • Le groupe a les permissions de lecture et d'exécution (5 = 4+1)
  • Les autres ont les permissions de lecture et d'exécution (5 = 4+1)
  1. Vérifiez à nouveau les permissions :
stat -c '%A %a %n' ~/project/testfile.txt

La sortie devrait maintenant afficher :

-rwxr-xr-x 755 /home/labex/project/testfile.txt
  1. Vérifions également comment l'heure de changement a été affectée :
stat ~/project/testfile.txt | grep Change

Vous devriez remarquer que l'horodatage Change a été mis à jour car nous avons modifié les métadonnées du fichier (permissions).

Comprendre les horodatages et les permissions est essentiel pour l'administration système et le dépannage des problèmes d'accès aux fichiers. Avec la commande stat, vous pouvez facilement surveiller ces aspects des métadonnées des fichiers.

Utilisation de formats personnalisés avec la commande Stat

L'une des fonctionnalités les plus puissantes de la commande stat est la possibilité de personnaliser son format de sortie. Ceci est particulièrement utile lorsque vous avez besoin d'informations spécifiques sur les fichiers ou lorsque vous souhaitez utiliser la sortie dans des scripts.

L'option Format

La commande stat fournit l'option -c ou --format pour personnaliser le format de sortie. Cette option vous permet de spécifier une chaîne de format qui détermine quelles informations sont affichées et comment elles sont formatées.

Créons un autre fichier de test pour travailler avec :

echo "This is another test file." > ~/project/second_file.txt

Spécificateurs de format

La commande stat prend en charge divers spécificateurs de format qui commencent par %. Voici quelques-uns des plus couramment utilisés :

  • %n : Nom du fichier
  • %s : Taille du fichier en octets
  • %b : Nombre de blocs alloués
  • %u : ID utilisateur du propriétaire
  • %U : Nom d'utilisateur du propriétaire
  • %g : ID du groupe du propriétaire
  • %G : Nom du groupe du propriétaire
  • %a : Droits d'accès en format octal (numérique)
  • %A : Droits d'accès en format lisible par l'homme
  • %x : Heure du dernier accès
  • %y : Heure de la dernière modification
  • %z : Heure du dernier changement

Essayons quelques exemples :

  1. Afficher le nom et la taille du fichier :
stat -c '%n is %s bytes' ~/project/testfile.txt

La sortie devrait ressembler à :

/home/labex/project/testfile.txt is 85 bytes
  1. Afficher le propriétaire et les permissions :
stat -c 'Owner: %U, Permissions: %A' ~/project/testfile.txt

La sortie devrait ressembler à :

Owner: labex, Permissions: -rwxr-xr-x
  1. Afficher plusieurs informations :
stat -c 'File: %n\nSize: %s bytes\nOwner: %U\nPermissions: %A\nModified: %y' ~/project/testfile.txt

Cette commande affiche le nom du fichier, la taille, le propriétaire, les permissions et l'heure de modification, chacun sur une nouvelle ligne.

  1. Comparer les informations pour plusieurs fichiers :
stat -c '%n: %s bytes, modified %y' ~/project/testfile.txt ~/project/second_file.txt

Cette commande affiche le nom, la taille et l'heure de modification pour les deux fichiers.

Utilisation de Stat dans les scripts

La fonctionnalité de format personnalisé est particulièrement utile dans les scripts shell lorsque vous devez extraire des informations spécifiques. Créons un script simple qui calcule la taille totale de plusieurs fichiers :

echo '#!/bin/bash
total=0
for file in "$@"; do
  size=$(stat -c "%s" "$file")
  echo "File: $file, Size: $size bytes"
  total=$((total + size))
done
echo "Total size: $total bytes"' > ~/project/file_size.sh

chmod +x ~/project/file_size.sh

Maintenant, exécutons le script sur nos fichiers de test :

~/project/file_size.sh ~/project/testfile.txt ~/project/second_file.txt

La sortie devrait afficher la taille de chaque fichier et la taille totale.

En maîtrisant l'option de format personnalisé de la commande stat, vous pouvez extraire et traiter efficacement les métadonnées des fichiers pour répondre à vos besoins spécifiques.

Travailler avec les répertoires et les systèmes de fichiers

Dans cette étape, nous allons explorer comment utiliser la commande stat avec les répertoires et les systèmes de fichiers. Cette connaissance est précieuse pour les tâches d'administration système et la compréhension de l'utilisation du stockage.

Commande Stat avec les répertoires

La commande stat fonctionne avec les répertoires de la même manière qu'avec les fichiers. Créons un répertoire de test et examinons ses métadonnées :

mkdir -p ~/project/test_dir
stat ~/project/test_dir

Vous devriez voir une sortie similaire à ce que nous avons vu pour les fichiers, mais avec "directory" (répertoire) au lieu de "regular file" (fichier régulier) dans le champ du type de fichier.

La principale différence entre les fichiers et les répertoires est que les répertoires ont généralement plus de liens (un pour chaque sous-répertoire immédiat plus deux pour le répertoire lui-même et son parent).

Créons un sous-répertoire et voyons comment cela affecte le nombre de liens :

mkdir -p ~/project/test_dir/sub_dir
stat ~/project/test_dir

Vous devriez remarquer que le nombre de liens a augmenté de 1.

Informations sur le système de fichiers

La commande stat peut également fournir des informations sur les systèmes de fichiers en utilisant l'option -f ou --file-system. Cette option affiche des détails tels que le type de système de fichiers, la taille des blocs et les statistiques d'utilisation.

Examinons le système de fichiers qui contient notre répertoire de projet :

stat -f ~/project

La sortie devrait inclure :

  • Type de système de fichiers
  • Taille des blocs
  • Nombre total de blocs
  • Blocs libres
  • Blocs disponibles (pour les utilisateurs non root)
  • Nombre total d'inodes
  • Inodes libres

Ces informations sont utiles pour surveiller l'utilisation de l'espace disque et planifier la capacité.

Combinaison d'options

Nous pouvons combiner l'option du système de fichiers avec l'option de format personnalisé pour extraire des informations spécifiques :

stat -f -c 'File System: %T\nTotal size: %b blocks\nFree: %f blocks\nAvailable: %a blocks' ~/project

Cette commande affiche le type de système de fichiers, le nombre total de blocs, les blocs libres et les blocs disponibles.

Suivi des liens symboliques

Par défaut, lorsque la commande stat rencontre un lien symbolique, elle affiche des informations sur le lien lui-même, et non sur le fichier vers lequel il pointe. Créons un lien symbolique et voyons cela en action :

echo "Target file content" > ~/project/target_file.txt
ln -s ~/project/target_file.txt ~/project/symlink.txt
stat ~/project/symlink.txt

La sortie devrait montrer que le type de fichier est "symbolic link" (lien symbolique) et que la taille est la longueur du chemin vers le fichier cible.

Pour voir les informations sur le fichier cible au lieu du lien, utilisez l'option -L ou --dereference :

stat -L ~/project/symlink.txt

Maintenant, la sortie devrait afficher des informations sur le fichier cible, y compris sa taille et son type en tant que "regular file" (fichier régulier).

Application pratique : Recherche de grands répertoires

Une application pratique de la commande stat est de trouver de grands répertoires. Créons un script qui calcule la taille des répertoires :

echo '#!/bin/bash
for dir in "$@"; do
  if [ -d "$dir" ]; then
    size=$(du -s "$dir" | cut -f1)
    echo "Directory: $dir, Size: $size KB"
  else
    echo "$dir is not a directory"
  fi
done' > ~/project/dir_size.sh

chmod +x ~/project/dir_size.sh

Maintenant, exécutons le script sur notre répertoire de test :

~/project/dir_size.sh ~/project/test_dir

Ce script utilise la commande du pour calculer la taille des répertoires, complétant les informations de métadonnées fournies par la commande stat.

En comprenant comment utiliser la commande stat avec les répertoires et les systèmes de fichiers, vous pouvez obtenir des informations précieuses sur l'organisation et l'utilisation du stockage de votre système Linux.

Résumé

Dans ce lab, vous avez appris à utiliser la commande stat de Linux pour récupérer et analyser les métadonnées des fichiers. Vous avez exploré :

  • L'utilisation de base de la commande stat pour afficher des informations complètes sur les fichiers
  • Comment comprendre et travailler avec les horodatages et les permissions des fichiers
  • L'utilisation de formats personnalisés pour extraire des informations spécifiques sur les métadonnées
  • Travailler avec les répertoires et les systèmes de fichiers pour obtenir des informations sur l'utilisation du stockage

Ces compétences sont précieuses pour l'administration système, le dépannage des problèmes d'accès aux fichiers, la surveillance des modifications de fichiers et la compréhension de l'organisation du stockage. La commande stat offre une fenêtre sur les métadonnées détaillées que Linux maintient pour chaque fichier et répertoire, vous permettant d'acquérir des connaissances plus approfondies sur votre système de fichiers.

En maîtrisant la commande stat et ses diverses options, vous avez ajouté un outil puissant à votre boîte à outils Linux qui peut vous aider à gérer les fichiers plus efficacement et à diagnostiquer les problèmes plus rapidement.