Comment utiliser la commande stat sous Linux

La commande Linux stat vous montre beaucoup plus de détails que ls. Jetez un œil derrière le rideau avec cet utilitaire informatif et configurable. Nous allons vous montrer comment l’utiliser.

stat vous emmène dans les coulisses

La commande ls est excellente dans ce qu’elle fait – et elle fait beaucoup – mais avec Linux, il semble qu’il y ait toujours un moyen d’aller plus loin et de voir ce qui se cache sous la surface. Et souvent, il ne s’agit pas simplement de soulever le bord du tapis. Vous pouvez déchirer les lames de plancher, puis creuser un trou. Vous pouvez peler Linux comme un oignon.

ls vous montrera de nombreuses informations sur un fichier, telles que les autorisations qui y sont définies, sa taille et s’il s’agit d’un fichier ou d’un lien symbolique. Pour afficher ces informations, ls les lit à partir d’un structure du système de fichiers appelée inode.

Chaque fichier et répertoire a un inode. L’inode tient métadonnées sur le fichier, comme les blocs de système de fichiers qu’il occupe et les horodatages associés au fichier. L’inode est comme une carte de bibliothèque pour le fichier. Mais ls ne vous montrera que quelques informations. Pour tout voir, nous devons utiliser la commande stat.

Comme ls, la commande stat a beaucoup d’options. Cela en fait un excellent candidat pour l’utilisation d’alias. Une fois que vous avez découvert un ensemble particulier d’options qui font que stat vous donne le résultat souhaité, enveloppez-le dans un alias ou une fonction shell. Cela le rend beaucoup plus pratique à utiliser et vous n’avez pas à vous souvenir d’un ensemble mystérieux d’options de ligne de commande.

Une comparaison rapide

Utilisons ls pour nous donner une longue liste (option -l) avec des tailles de fichiers lisibles par l’homme (option -h):

ls -lh ana.h

ls -lh ana.h dans une fenêtre de terminal

De gauche à droite, les informations fournies par ls sont:

Le tout premier caractère est un trait d’union «-» et cela nous indique que le fichier est un fichier normal et non un socket, un lien symbolique ou un autre type d’objet.
Le propriétaire, le groupe et les autres autorisations sont répertoriés au format octal.
Le nombre de liens physiques pointant vers ce fichier. Dans ce cas, et dans la plupart des cas, il en sera un.
Le propriétaire du fichier est Dave.
Le propriétaire du groupe est Dave.
La taille du fichier est de 802 octets.
Le fichier a été modifié pour la dernière fois le vendredi 13 décembre 2015.
Le nom du fichier est ana.c.

Jetons un coup d’œil avec stat:

stat ana.h

stat ana.h dans une fenêtre de terminal

Les informations que nous obtenons de stat sont:

Fichier: le nom du fichier. Habituellement, c’est le même que le nom que nous avons passé à stat sur la ligne de commande, mais cela peut être différent si nous regardons un lien symbolique.
Taille: la taille du fichier en octets.
Blocs: Le nombre de blocs du système de fichiers requis par le fichier pour être stocké sur le disque dur.
Bloc IO: taille d’un bloc de système de fichiers.
Type de fichier: type d’objet décrit par les métadonnées. Les types les plus courants sont les fichiers et les répertoires, mais ils peuvent également être des liens, des sockets ou des tubes nommés.
Appareil: le numéro de l’appareil hexadécimal et décimal. Il s’agit de l’ID du disque dur sur lequel le fichier est stocké.
Inode: Le numéro d’inode. Autrement dit, le numéro d’identification de cet inode. Ensemble, le numéro d’inode et le numéro de périphérique identifient de manière unique un fichier.
Liens: ce nombre indique le nombre de liens physiques pointant vers ce fichier. Chaque lien physique a son propre inode. Donc, une autre façon de penser à ce chiffre est de savoir combien d’inœuds pointent vers ce fichier. Chaque fois qu’un lien physique est créé ou supprimé, ce nombre sera ajusté à la hausse ou à la baisse. Lorsqu’il atteint zéro, le fichier lui-même a été supprimé et l’inœud est supprimé. Si vous utilisez stat sur un répertoire, ce nombre représente le nombre de fichiers dans le répertoire, y compris le «.» l’entrée pour le répertoire courant et l’entrée «..» pour le répertoire parent.
Accès: Les autorisations de fichier sont affichées dans leurs rwx octal et traditionnel (formats de lecture, d’écriture, d’exécution).
Uid: ID utilisateur et nom de compte du propriétaire.
Gid: ID de groupe et nom de compte du propriétaire.
Accès: horodatage d’accès. Pas aussi simple que cela puisse paraître. Les distributions Linux modernes utilisent un schéma appelé relatime, qui tente de optimiser les écritures disque dur nécessaires à la mise à jour du temps d’accès. En termes simples, l’heure d’accès est mise à jour si elle est antérieure à l’heure modifiée.
Modifier: l’horodatage de la modification. Il s’agit de l’heure à laquelle le contenu du fichier a été modifié pour la dernière fois. (Par chance, le contenu de ce fichier a été modifié pour la dernière fois il y a quatre ans jour pour jour.)
Change: horodatage du changement. Il s’agit de l’heure à laquelle les attributs ou le contenu du fichier ont été modifiés pour la dernière fois. Si vous modifiez un fichier en définissant de nouvelles autorisations de fichier, l’horodatage de modification sera mis à jour (car les attributs de fichier ont changé), mais l’horodatage modifié ne sera pas mis à jour (car le contenu du fichier n’a pas été modifié).
Naissance: réservé pour afficher la date de création originale du fichier, mais ceci n’est pas implémenté sous Linux.

  Comment désactiver l'iPhone X

Comprendre les horodatages

Les horodatages sont sensibles au fuseau horaire. Le -0500 à la fin de chaque ligne indique que ce fichier a été créé sur un ordinateur dans un Temps universel coordonné (UTC) fuseau horaire qui est cinq heures avant le fuseau horaire de l’ordinateur actuel. Donc, cet ordinateur a cinq heures de retard sur l’ordinateur qui a créé ce fichier. En fait, le fichier a été créé sur un ordinateur de fuseau horaire britannique, et nous l’examinons ici sur un ordinateur situé dans le fuseau horaire de l’Est des États-Unis.

Les horodatages de modification et de changement peuvent prêter à confusion car, pour les non-initiés, leurs noms sonnent comme s’ils signifiaient la même chose.

Utilisons chmod pour modifier les autorisations de fichier sur un fichier appelé ana.c. Nous allons le rendre accessible à tous. Cela n’affectera pas le contenu du fichier, mais cela affectera les attributs du fichier.

chmod +w ana.c

Et puis nous utiliserons stat pour regarder les horodatages:

stat ana.c

chnod + w ana.c dans une fenêtre de terminal

L’horodatage de modification a été mis à jour, mais pas celui modifié.

L’horodatage modifié ne sera mis à jour que si le contenu du fichier est modifié. L’horodatage des modifications est mis à jour pour les modifications de contenu et les modifications d’attributs.

Utilisation de Stat avec plusieurs fichiers

Pour avoir un rapport statistique sur plusieurs fichiers à la fois, transmettez les noms de fichiers à stat sur la ligne de commande:

stat ana.h ana.o

stat ana.h ana.o dans une fenêtre de terminal

Pour utiliser stat sur un ensemble de fichiers, utilisez la correspondance de modèles. Le point d’interrogation « ? » représente n’importe quel caractère unique et l’astérisque «*» représente n’importe quelle chaîne de caractères. Nous pouvons dire à stat de signaler tout fichier appelé «ana» avec une seule extension de lettre, avec cette commande:

stat ana.?

stat ana.? dans une fenêtre de terminal

Utilisation de stat pour générer des rapports sur les systèmes de fichiers

stat peut rendre compte de l’état des systèmes de fichiers, ainsi que de l’état des fichiers. L’option -f (système de fichiers) indique à stat de signaler le système de fichiers sur lequel réside le fichier. Notez que nous pouvons également passer un répertoire tel que «/» à stat au lieu d’un nom de fichier.

stat -f ana.c

stat -f ana.c dans une fenêtre de terminal

La statistique d’information nous donne est:

  Comment installer SSH sur Linux et commandes utiles

Fichier: le nom du fichier.
ID: l’ID du système de fichiers en notation hexadécimale.
Namelen: La longueur maximale autorisée pour les noms de fichiers.
Type: le type de système de fichiers.
Taille de bloc: La quantité de données pour demander des demandes de lecture pour des taux de transfert de données optimaux.
Taille de bloc fondamentale: la taille de chaque bloc du système de fichiers.

Blocs:

Total: le nombre total de tous les blocs du système de fichiers.
Free: Le nombre de blocs libres dans le système de fichiers.
Disponible: le nombre de blocs gratuits disponibles pour les utilisateurs réguliers (non root).

Inodes:

Total: le nombre total d’inodes dans le système de fichiers.
Free: Le nombre d’inodes libres dans le système de fichiers.

Déréférencement des liens symboliques

Si vous utilisez stat sur un fichier qui est en fait un lien symbolique, il signalera le lien. Si vous souhaitez que stat rapporte le fichier vers lequel pointe le lien, utilisez l’option -L (déréférencement). Le fichier code.c est un lien symbolique vers ana.c. Regardons cela sans l’option -L:

stat code.c

stat code.c dans une fenêtre de terminal

Le nom de fichier montre code.c pointant vers (->) ana.c. La taille du fichier n’est que de 11 octets. Il n’y a aucun bloc dédié au stockage de ce lien. Le type de fichier est répertorié sous forme de lien symbolique.

De toute évidence, nous ne regardons pas le fichier réel ici. Faisons cela à nouveau et ajoutons l’option -L:

stat -L code.c

stat -L code.c dans une fenêtre de terminal

Ceci montre maintenant les détails du fichier pour le fichier pointé par le lien symbolique. Mais notez que le nom de fichier est toujours donné comme code.c. Il s’agit du nom du lien, pas du fichier cible. Cela se produit parce que c’est le nom que nous avons passé à stat sur la ligne de commande.

Le rapport succinct

L’option -t (laconique) oblige stat à fournir un résumé condensé:

stat -t ana.c

stat -t ana.c dans une fenêtre de terminal

Il n’y a aucun indice donné. Pour en comprendre le sens – jusqu’à ce que vous ayez mémorisé la séquence de champs – vous devez faire référence croisée entre cette sortie et une sortie statistique complète.

Formats de sortie personnalisés

Une meilleure façon d’obtenir un ensemble différent de données à partir de stat est d’utiliser un format personnalisé. Il existe une longue liste de jetons appelés séquences de format. Chacun de ces éléments représente un élément de données. Sélectionnez ceux que vous souhaitez inclure dans la sortie et créez une chaîne de format. Lorsque nous appelons stat et lui passons la chaîne de format, la sortie n’inclura que les éléments de données que nous avons demandés.

Il existe différents ensembles de séquences de format pour les fichiers et les systèmes de fichiers. La liste des fichiers est:

% a: les droits d’accès en octal.
% A: Les droits d’accès sous forme lisible par l’homme (rwx).
% b: le nombre de blocs alloués.
% B: la taille en octets de chaque bloc.
% d: numéro de périphérique en décimal.
% D: le numéro de périphérique en hexadécimal.
% f: Le mode brut en hexadécimal.
% F Le type de fichier.
% g: l’ID de groupe du propriétaire.
% G: le nom du groupe du propriétaire.
% h: le nombre de liens physiques.
% i: le numéro d’inode.
% m: le point de montage.
% n: le nom du fichier.
% N: le nom de fichier cité, avec un nom de fichier déréférencé s’il s’agit d’un lien symbolique.
% o: indice de taille de transfert d’E / S optimal.
% s: taille totale, en octets.
% t: le type de périphérique principal en hexadécimal, pour les fichiers spéciaux de périphérique caractère / bloc.
% T: Le type de périphérique mineur en hexadécimal, pour les fichiers spéciaux de périphérique caractère / bloc.
% u: l’ID utilisateur du propriétaire.
% U: le nom d’utilisateur du propriétaire.
% w: heure de naissance du fichier, lisible par l’homme, ou tiret «-» si inconnu.
% W: heure de naissance du fichier, secondes depuis l’époque; 0 si inconnu.
% x: heure du dernier accès, lisible par l’homme.
% X: l’heure du dernier accès, en secondes depuis l’époque.
% y: heure de la dernière modification des données, lisible par l’homme.
% Y: l’heure de la dernière modification des données, en secondes depuis l’époque.
% z: heure du dernier changement d’état, lisible par l’homme.
% Z: l’heure du dernier changement d’état, en secondes depuis l’époque.

  Comment bloquer les e-mails d'expéditeurs spécifiques dans Microsoft Outlook

L ‘«époque» est le Époque Unix, qui a eu lieu le 1970-01-01 00:00:00 +0000 (UTC).

Pour les systèmes de fichiers, les séquences de format sont:

% a: le nombre de blocs gratuits disponibles pour les utilisateurs réguliers (non root).
% b: le nombre total de blocs de données dans le système de fichiers.
% c: Le total des inœuds dans le système de fichiers.
% d: le nombre d’i-noeuds libres dans le système de fichiers.
% f: le nombre de blocs libres dans le système de fichiers.
% i: l’ID du système de fichiers en hexadécimal.
% l: la longueur maximale des noms de fichiers.
% n: le nom du fichier.
% s: la taille du bloc (la taille d’écriture optimale).
% S: la taille des blocs du système de fichiers (pour le nombre de blocs).
% t: le type de système de fichiers en hexadécimal.
% T: type de système de fichiers sous une forme lisible par l’homme.

Il existe deux options qui acceptent les chaînes de séquences de format. Ce sont –format et –printf. La différence entre eux est –printf interprète Séquences d’échappement de style C comme newline n et tab t, et il n’ajoute pas automatiquement un caractère de nouvelle ligne à sa sortie.

Créons une chaîne de format et passons-la à stat. Les séquences de format utilisées sont% n pour le nom de fichier,% s pour la taille du fichier et% F pour le type de fichier. Nous allons ajouter la séquence d’échappement n à la fin de la chaîne pour nous assurer que chaque fichier est traité sur une nouvelle ligne. Notre chaîne de format ressemble à ceci:

"File %n is %s bytes, and is a %Fn"

Nous allons passer cela à stat en utilisant l’option –printf. Nous allons demander à stat de signaler un fichier appelé code.c et un ensemble de fichiers qui correspondent à ana.?. Ceci est la commande complète. Notez le signe égal «=» entre –printf et la chaîne de format:

stat --printf="File %n is %s bytes, and is a %Fn" code.c ana/ana.?

stat --printf =

Le rapport de chaque fichier est répertorié sur une nouvelle ligne, ce que nous avons demandé. Le nom de fichier, la taille du fichier et le type de fichier nous sont fournis.

Les formats personnalisés vous donnent accès à encore plus d’éléments de données que ceux inclus dans la sortie statistique standard.

Contrôle des grains fins

Comme vous pouvez le voir, il existe une très grande possibilité d’extraire les éléments de données particuliers qui vous intéressent. Vous pouvez probablement aussi voir pourquoi nous vous recommandons d’utiliser des alias pour les incantations plus longues et plus complexes.