Comment utiliser la commande stat sous Linux

Contenu

Un terminal Linux sur un bureau de style Ubuntu.

Sous Linux stat La commande vous montre beaucoup plus de détails que ls il le fait. 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

Les ls La commande est excellente dans ce qu'elle fait, et il y a longtemps, mais avec Linux, il semble toujours y avoir un moyen de creuser profondément et de voir ce qu'il y a sous la surface. ET, souvent, il ne s'agit pas seulement de soulever le bord du tapis. Vous pouvez casser les planches et plus tard creuser un trou. Vous pouvez éplucher Linux comme un oignon.

ls vous montrera beaucoup d'informations concernant un fichier, comme quelles autorisations sont définies dessus, sa taille et s'il s'agit d'un fichier ou d'un lien symbolique. Pour afficher ces informations ls lisez-le d'un structure du système de fichiers appelée inode.

Chaque fichier et répertoire a un inode. Inode dé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 il ne vous montrera qu'une partie des informations. Pour tout voir, nous devons utiliser le stat commander.

Pareil que ls , Les stat La commande a de nombreuses options. Cela en fait un excellent candidat pour l'aliasing.. Une fois que vous avez découvert un ensemble particulier d'alternatives qui stat te donner le résultat que tu veux, enveloppez-le dans un alias ou une fonction shell. Cela le rend beaucoup plus pratique à utiliser et vous n'avez pas besoin de vous souvenir d'un ensemble mystérieux d'alternatives de ligne de commande.

EN RELATION: Comment utiliser la commande ls pour répertorier les fichiers et les répertoires sous Linux

Une comparaison rapide

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

ls -lh ana.h

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

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

Jetons un coup d'oeil avec stat :

stat ana.h

Les informations que nous recevons de stat il est:

  • Record: Le nom du fichier. En général, est le même que le nom que nous lui donnons. 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 dont le fichier doit être stocké sur le disque dur.
  • Bloc IO: La taille d'un bloc de système de fichiers.
  • Type de fichier: Le 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 aussi être des liens, sockets ou tuyaux nommés.
  • Dispositif: Le numéro de l'appareil dans hexadécimal et décimal. Il s'agit de l'ID du disque dur sur lequel le fichier est stocké.
  • Inodo: Numéro d'inode. En d'autres termes, 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 combien de liens physiques pointent vers ce fichier. Chaque lien physique a son propre inode. Ensuite, une autre façon de penser à ce chiffre est de savoir combien d'inodes pointent vers ce fichier. Chaque fois qu'un lien physique est créé ou supprimé, ce nombre sera ajusté vers le haut ou vers le bas. Quand il atteint zéro, le fichier lui-même a été supprimé et l'inode est supprimé. Si tu utilises stat dans un répertoire, ce nombre représente le nombre de fichiers dans le répertoire, incluant le “.” l’entrée du répertoire actif et l’entrée “..” pour le répertoire de base.
  • Accès: Les autorisations de fichiers sont affichées dans leur octal et traditionnel. rwx (lire, Écrire, formats d'exécution).
  • UID: Identifiant utilisateur et nom du compte du propriétaire.
  • Guider: ID de groupe et nom de compte du propriétaire.
  • Accès: L'horodatage d'accès. Ce n'est pas aussi facile qu'il n'y paraît. Les distributions Linux modernes utilisent un schéma appelé relatime, ce que tu essaies optimiser les écritures requises sur le disque dur pour mettre à jour le temps d'accès. Brièvement, l'heure d'accès est mise à jour si elle est antérieure à l'heure modifiée.
  • Modifier: L'horodatage de la modification. C'est le moment où le fichier teneur ont été modifiés 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).
  • Changement: L'horodatage du changement. C'est le moment où le fichier les attributs O teneur ont été modifiés pour la dernière fois. Si vous modifiez un fichier en définissant de nouvelles autorisations de fichier, l'horodatage du changement sera mis à jour (parce que le fichier les attributs Ils ont changé), mais l'horodatage modifié ne sera pas mis à jour (parce que le fichier teneur ils n'ont pas changé).
  • Naissance: Réservé pour afficher la date de création originale du fichier, mais ce n'est pas implémenté sous Linux.

Comprendre les horodatages

Les horodatages sont sensibles au fuseau horaire. Les -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 a cinq heures d'avance sur le fuseau horaire de l'ordinateur actuel. Ensuite, cet ordinateur a cinq heures de retard sur l'ordinateur qui a créé ce fichier. En réalité, Le fichier a été créé sur un ordinateur de fuseau horaire britannique et nous le visualisons ici sur un ordinateur dans le fuseau horaire standard de l'Est des États-Unis. UU.

Modifier et changer les horodatages peut prêter à confusion car, pour les non-initiés, Leurs noms sonnent comme ils signifient la même chose.

Utilisons chmod pour modifier les autorisations de fichier sur un fichier nommé ana.c. Faisons en sorte que tout le monde l'écrive. Cela n'affectera pas le contenu du fichier, mais cela affectera les attributs du fichier.

chmod +w ana.c

Et plus tard nous utiliserons stat pour voir les horodatages:

stat ana.c

L'horodatage du changement a été mis à jour, mais le non modifié.

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

Utilisation de statistiques avec de nombreux fichiers

Avoir un rapport statistique sur plusieurs fichiers en même temps, passer les noms de fichiers à stat sur la ligne de commande:

stat ana.h ana.o

Utilisation stat dans un ensemble de fichiers, utiliser la correspondance de modèle. Le point d'interrogation “?” représente tout caractère individuel et l’astérisque “*” représente n’importe quelle chaîne de caractères. Nous pouvons dire stat pour signaler tout fichier appelé “Anna” avec une extension d’une seule lettre, avec cette commande:

stat ana.?

Utilisation de statistiques 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 l'état des fichiers. Les -f (Système de fichiers) option dit stat pour signaler le système de fichiers où réside le fichier. Veuillez noter que nous pouvons également passer un répertoire comme “/” une stat au lieu d'un nom de fichier.

stat -f ana.c

L'information stat nous donne est:

  • Record: Le nom du fichier.
  • identifiant: L'ID du système de fichiers en notation hexadécimale.
  • Nomlen: La longueur maximale autorisée pour les noms de fichiers.
  • Écrit: Le type de système de fichiers.
  • Taille de bloc: La quantité de données à demander aux requêtes de lecture pour des vitesses de transfert de données optimales.
  • Taille de bloc fondamentale: La taille de chaque bloc dans le système de fichiers.

Blocs:

  • Le total: Le nombre total de tous les blocs dans le système de fichiers.
  • Gratuite: Le nombre de blocs libres dans le système de fichiers.
  • Disponible: Le nombre de blocs gratuits disponibles pour les utilisateurs réguliers (pas de racine).

Inodes:

  • Le total: Le nombre total d'inodes dans le système de fichiers.
  • Gratuite: Le nombre d'inodes libres dans le système de fichiers.

Déréférencer les liens symboliques

Si tu utilises stat dans un fichier qui est en fait un lien symbolique, informera sur le lien. Oui tu le veux stat pour informer sur le fichier vers lequel pointe le lien, Utilisez le -L (déréférencement) option. L'archive code.c est un lien symbolique vers ana.c . Voyons ça sans lui -L option:

code statistique.c

Le nom du fichier indique code.c visant à ( -> ) ana.c. La taille du fichier est seulement 11 octets. Il n'y a pas de blocs dédiés au stockage de ce lien. Le type de fichier est affiché sous forme de lien symbolique.

Clairement, nous ne voyons pas le fichier réel ici. Faisons cela à nouveau et ajoutons le -L option:

stat -L code.c

Cela 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. C'est le nom du lien, pas le fichier de destination. Cela se produit parce que c'est le nom que nous passons à stat sur la ligne de commande.

Le rapport concis

Les -t (concis) l'option provoque stat fournir un résumé condensé:

stat -t ana.c

Aucun indice n'est donné. Pour donner du sens à, jusqu'à ce que vous ayez mémorisé la séquence de champs, vous devez croiser cette sortie à un stat production.

Formats de sortie personnalisés

Une meilleure façon d'obtenir un ensemble de données différent de stat est d'utiliser un format personnalisé. Il existe une longue liste de jetons appelés séquences de format. Chacun d'eux 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. Quand on appelle stat et lui passer la chaîne de format, la sortie n'inclura que les éléments de données que nous demandons.

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

  • %une: Droits d'accès en octal.
  • %UNE: Droits d'accès sous une forme lisible par l'homme (rwx).
  • %B: Le nombre de blocs alloués.
  • %B: La taille en octets de chaque bloc.
  • %ré: Le numéro de l'appareil en décimal.
  • %ré: Le numéro de l'appareil en hexadécimal.
  • %F: Mode brut en hexadécimal.
  • %F Le type de fichier.
  • %gramme: L'identifiant du groupe du propriétaire.
  • %GRAMME: Le nom du groupe du propriétaire.
  • % h: Le nombre de liens physiques.
  • %je: Numéro d'inode.
  • %métro: Point de montage.
  • %Nord: Le nom du fichier.
  • %NORD: Le nom du fichier entre guillemets, avec le nom du fichier sans référence s'il s'agit d'un lien symbolique.
  • % O: La suggestion de taille de transfert de E / S optimale.
  • %s: Taille globale, et octets.
  • % t: Le type de périphérique principal en hexadécimal, pour les fichiers spéciaux de périphériques de caractères / blocs.
  • % T: Le type de périphérique mineur en hexadécimal, pour les fichiers spéciaux de périphériques de caractères / blocs.
  • % vous: ID utilisateur du propriétaire.
  • % U: Le nom d'utilisateur du propriétaire.
  • % w: L'heure de naissance du fichier, lisible par l'homme ou un tiret "-" si inconnu.
  • % W: L'heure de naissance du fichier, secondes à partir du moment; 0 si inconnu.
  • %X: L'heure du dernier accès, lisible par l'homme.
  • %X: L'heure du dernier accès, secondes à partir du moment.
  • % et: L'heure de la dernière modification des données, lisible par l'homme.
  • % ET: L'heure de la dernière modification des données, secondes à partir du moment.
  • % Avec: L'heure du dernier changement d'état, lisible par l'homme.
  • % AVEC: L'heure du dernier changement d'état, secondes à partir du moment.

La “époque” est le L'ère Unix, qui a eu lieu le 1 de janvier de 1970 à 00:00:00 + 0000 (UTC).

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

  • %une: Le nombre de blocs gratuits disponibles pour les utilisateurs réguliers (pas de racine).
  • %B: Le nombre total de blocs de données dans le système de fichiers.
  • %C: Le nombre total d'inodes dans le système de fichiers.
  • %ré: Le nombre d'inodes libres dans le système de fichiers.
  • %F: Le nombre de blocs libres dans le système de fichiers.
  • %je: L'ID du système de fichiers en hexadécimal.
  • % je: La longueur maximale des noms de fichiers.
  • %Nord: Le nom du fichier.
  • %s: Taille de 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 dans un format lisible par l'homme.

Il existe deux options qui acceptent les chaînes de séquences de format. Ceux-ci sont --format et --printf. La différence entre eux est --printf interpréter séquences d'échappement de style C comme nouvelle ligne n et onglet 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 à utiliser sont %n pour le nom de fichier, %s pour la taille du fichier et %F pour le type de fichier. Nous allons ajouter le n séquence d'échappement à la fin de la chaîne pour s'assurer que chaque fichier est traité sur une nouvelle ligne. Notre chaîne de format ressemble à ceci:

"Le fichier %n fait %s octets, et est un %Fn"

Nous allons transmettre cela à stat en utilisant le --printf option. Demandons stat faire rapport sur un dossier nommé code.c et un ensemble de fichiers correspondants ana.?. C'est la commande complète. Notez le signe égal “=” Parmi --printf et la chaîne de format:

stat --printf="Le fichier %n fait %s octets, et est un %Fn" code.c ana/ana.?

Le rapport de chaque fichier apparaît sur une nouvelle ligne, que demandons-nous. Le nom du fichier, la taille 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 norme stat production.

Contrôle du grain jusqu'à

Comme tu peux le voir, il y a beaucoup de possibilités d'extraire les éléments de données particuliers qui vous intéressent. Vous pouvez probablement aussi voir pourquoi nous suggérons d'utiliser des alias pour les enchantements plus longs et plus complexes..

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.