Lorsque vous travaillez avec le terminal Linux, vous avez parfois besoin de connaître l'heure d'exécution de certaines commandes, par exemple pour suivre les problèmes. Il existe un utilitaire appelé time
à cet effet. Nous allons vous expliquer comment fonctionne la commande Linux time
et quelle est sa syntaxe. Nous passerons ensuite à la description des options disponibles. Enfin, nous évoquerons quelques scénarios d'utilisation courants.
L'utilitaire exécute une commande définie par l'utilisateur et affiche ensuite des informations sur son temps d'exécution. Sa syntaxe est assez pratique. Vous devez d'abord spécifier les options pour le temps
, puis la commande à exécuter, et enfin les arguments de cette commande :
$ time [options] command_to_execute [arguments]
Considérons la liste des options disponibles :
-o
, --output
- enregistre les données dans le fichier sélectionné au lieu de la sortie standard du terminal. Dans ce cas, les anciennes données du fichier seront écrasées.-a
, --append
- ajoute de nouvelles informations au fichier au lieu d'écraser les anciennes. Cette option n'est utile qu'en combinaison avec -o
.-f
, --format
- sélectionne un format de sortie spécifique. Les détails sur le formatage sont décrits dans la section suivante de cet article.-p
, --profitably
- utilise un format de sortie de données conforme au standard POSIX 1003.2.-v
, --verbose
- fournit des informations détaillées sur l'exécution du programme.-V
, --version
- affiche la version de l'utilitaire de temps
.Cette liste ne contient que les options de base. Vous pouvez obtenir des informations détaillées avec la commande :
$ man time
Par défaut , Time
peut produire des informations sous une forme qui n'est pas agréable à lire,
Il est souhaitable de définir des options de formatage de la sortie, que nous allons voir maintenant. Il y en a trois au total. Prenons l'exemple de la commande apt-get update
.
L'option -v
est utilisée pour afficher des informations détaillées :
$ sudo time -v apt-get update
L'option -p
est nécessaire pour afficher les données dans un format conforme à la norme POSIX 1003.2 :
$ sudo time -p apt-get update
La ligne de données de formatage comprend généralement des spécificateurs de ressources et du texte brut. Le signe %
indique que le caractère qui le suit doit être traité comme un spécificateur de ressources.
Le signe est utilisé pour spécifier le caractère de délimitation. Trois options sont disponibles :
t
- tabulation, n
- nouvelle ligne, n
- barre oblique inverse. Si vous spécifiez un autre caractère après N-
, le terminal affichera un point d'interrogation (?
), ce qui indique une erreur de saisie.
Le reste du texte de la chaîne de format est entièrement copié dans la zone de sortie. Dans ce cas, time
commence toujours à émettre des données à partir d'une nouvelle ligne après les informations relatives à l'exécution de la commande elle-même.
Examinons les spécificateurs de ressources disponibles :
%
- % littéral, c'est-à-dire que pour afficher un signe de pourcentage, vous devez spécifier %% dans la commande.C
- nom de la commande et arguments utilisés.D
- taille moyenne de la zone de données non divisée. Elle est affichée en kilo-octets.E
- heure réelle d'exécution de la commande au format horaire habituel. Elle est affichée sous la forme [Hours :]<imutes:seconds
.N
- nombre d'erreurs majeures ou d'erreurs d'E/S survenues pendant l'exécution du processus.I
- nombre d'accès au système de fichiers.K
- valeur moyenne de la mémoire utilisée pour le code(texte
), les données initialisées(données
) et lapile (pile)
. Elle est affichée en kilo-octets.M
- taille maximale de l'ensemble résident pendant l'exécution du processus, en kilo-octets.O
- nombre de sorties du système de fichiers.P
- pourcentage de charge de l'unité centrale de traitement (CPU).R
- nombre d'erreurs mineures.S
- temps en secondes pendant lequel le CPU a été utilisé par le système au nom du processus en mode superviseur(
modenoyau)
.U
- temps en secondes pendant lequel l'unité centrale a été utilisée par le processus directement en modeutilisateur
.W
- nombre de fois où le processus a été déchargé de la mémoire vive.Z
- taille de la page système. Cette valeur est une constante, mais elle varie d'un système à l'autre.c
- nombre de changements de contexte involontaires pendant l'exécution du processus.e
- temps réel de l'exécution de la commande au format horaire habituel. Elle est affichée en secondes.k
- nombre de signaux qui ont atteint le processus.p
- taille moyenne de la pile non partagée du processus, en kilo-octets.r
- nombre de messages de socket reçus.s
- nombre de messages de socket envoyés.t
- taille moyenne de l'ensemble des résidents du processus, en kilo-octets.w
- nombre de changements de contexte volontaires pendant l'exécution du processusx
- code de retour de la commande.Ce sont tous les spécificateurs de ressources utilisés lors du choix de la mise en forme du temps
. Passons maintenant aux scénarios d'utilisation de la commande.
Examinons trois exemples de base qui sont assez couramment utilisés : sortie vers le terminal, sortie vers un fichier séparé et sortie avec formatage.
Prenons l'exemple de la commande sleep, qui interrompt l'exécution d'un programme pendant une durée déterminée. Cet exemple est très clair, car le temps de pause coïncide avec le temps
d'exécution de la commande :
$ time sleep 3
Le temps est écrit immédiatement sur trois colonnes. Passons en revue chacune d'entre elles :
réel
- le temps total entre le début de l'exécution du processus et sa fin.
user
- le temps pendant lequel le processus s'est déroulé en modeutilisateur
.
sys
- le temps pendant lequel le processus a été impliqué dans le mode superviseur(
modenoyau
).
Le scénario utile suivant consiste à afficher le temps nécessaire au chargement de l'en-tête d'une page web via l'utilitaire curl
. Prenons l'exemple de notre site web :
$ time curl -I https://losst.ru
Il convient de mentionner une situation dans laquelle l'exécution de la commande place la fenêtre du terminal dans un mode différent, comme lorsque vous exécutez l'éditeur nano pour modifier le fichier /home/root-user/script.txt
:
$ time nano /home/root-user/scripts/main_script.txt
Une fois l'éditeur terminé, vous verrez le temps total pendant lequel vous avez travaillé sur le fichier.
Vous savez maintenant comment connaître le temps d'exécution d'une commande Linux.
Les informations sur les résultats de la commande time peuvent être enregistrées dans un fichier séparé à l'aide de l'option-o
. Dans ce cas, elles ne seront pas affichées dans la fenêtre du terminal. Prenons l'exemple de l'extraction du contenu de l'archive ~/data/data.tar.gz
à l'aide de l'utilitaire tar
. Sauvegardons les informations sur le temps d'exécution dans un nouveau fichier ~/data/data_data_time.txt.
Nous ajouterons également l'option-v
à la commande pour obtenir des informations détaillées :
$ sudo time -v -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data
Le fichier aura le contenu suivant.
Si vous utilisez l'option -o
, n'oubliez pas qu'elle remplace les anciennes informations du fichier de sortie par les nouvelles. Cette option s'applique à la création de nouveaux fichiers, mais n'est pas adaptée à la journalisation. Avec l'option -a, l'écrasement du contenu est remplacé par l'ajout de nouvelles informations :
$ sudo time -v -a -o ~/data/data_time.txt tar -xvf ~/data/data.tar.gz -C ~/data
L'option originale de formatage des données ne convient pas dans tous les cas. Prenons par exemple la commande précédemment utilisée pour extraire une archive, mais nous n'enregistrerons pas les données dans un fichier. Lors de l'exécution de la commande, nous nous intéressons aux éléments suivants
spécificateur%C
. spécificateur%P
. spécificateur%e
.Pour une meilleure perception, chaque élément sera affiché sur une ligne distincte à l'aide du séparateur n
. En même temps, ils seront tous signés d'une manière compréhensible.
Voici à quoi ressemble la version finale de la commande :
sudo time -f "Command info:n%CnCPU usage: %PnExecution time: %e sec" tar -xvf ~/data/data.tar.gz -C ~/data
Tout le texte, à l'exception des caractères situés après %,
est entièrement affiché dans le terminal. Il s'agit d'une manière pratique de marquer