Qu'est-ce que la Commande Time Linux ?
La commande "time" dans les systèmes d'exploitation Linux et de type Unix vous permet de déterminer le temps qu'une commande spécifique prendra pour s'exécuter. Elle est généralement utilisée pour mesurer les performances des scripts ou des commandes. Plus une commande termine rapidement sa tâche, meilleures sont ses performances.
En outre, la commande "time" peut également afficher l'utilisation des ressources système du processus, ce qui en fait un outil utile pour examiner l'efficacité d'une commande spécifique.
Par exemple, si vous souhaitez choisir entre deux tâches planifiées (cron jobs) qui peuvent exécuter la même tâche, vous pouvez déterminer combien de temps chaque tâche planifiée prendra pour terminer les tâches en exécutant la commande "time".
Cependant, avant de commencer à parler de l'utilisation de la commande "time" Linux, gardez à l'esprit qu'elle diffère en fonction de l'interpréteur de commandes que vous utilisez. Il existe trois versions différentes de la commande "time" dans le système Linux :
- Bash - déjà intégré dans l'interpréteur de commandes et peut être exécuté en tapant
time. - Zsh - comme Bash, il est également déjà intégré dans le système, et s'exécute en tapant
time. - GNU Default Linux (GNU) - disponible en tapant le chemin explicite de la commande,
/usr/bin/time.
Pour vérifier quelle version de la commande "time" Linux s'applique à votre système, entrez la commande suivante dans votre interpréteur de commandes :
$ type time
Si vous obtenez la sortie time is a shell keyword, vous utilisez la commande "time" de Bash.
Si vous obtenez la sortie time is a reserved word, vous utilisez la commande "time" de Zsh.
Si vous obtenez la sortie time is /usr/bin/time, vous utilisez la commande "time" de GNU.
Alternativement, vous pouvez simplifier la commande "time" GNU dans Linux en créant un alias pour la commande /usr/bin/time.
Utilisation de la Commande "Time" dans Linux
Dans cette section, vous apprendrez la syntaxe de la commande "time" Linux et comment lire sa sortie.
Familiarisez-vous avec la Syntaxe de la Commande "Time" Linux
L'utilisation de la commande "time" est très simple - tout ce que vous avez à faire est d'ouvrir votre interpréteur de commandes et d'entrer :
$ time
Pour profiter pleinement de la commande "time", vous devez comprendre sa syntaxe :
$ time [arg1] [arg2] ... [argN]
time [options] [arg1] [arg2] ... [argN]
La commande "time" exécute la commande donnée avec les arguments donnés (arg). Une fois que la commande a terminé sa tâche, "time" affiche des informations qui incluent la durée de l'exécution de la commande et les ressources utilisées par celle-ci.
Si la commande du programme se termine avec un statut non nul indiquant une erreur, "time" affichera un message d'avertissement et le statut de sortie.
En entrant le format de chaîne utilisé par la commande, vous pouvez déterminer quelles informations afficher dans la section d'utilisation des ressources système.
Si l'utilisateur ne spécifie pas de format, mais que la variable d'environnement "time" est définie, sa valeur sera utilisée comme format. Sinon, le format par défaut intégré à "time" sera utilisé.
Les options sont des spécificateurs de ressources qui modifient la sortie de "time". Elles doivent apparaître avant la commande. Tout ce qui est entré après la commande sera considéré comme un argument.
Pour afficher toutes les options que vous pouvez utiliser pour "time", entrez la commande suivante dans la ligne de commande :
$ man time
Vous verrez une liste d'options que vous pouvez utiliser pour modifier la sortie de la commande "time" Linux. Cependant, gardez à l'esprit que ces options peuvent varier en fonction du système d'exploitation spécifique et de la version que vous utilisez.

Commençons par un exemple simple. Pour savoir combien de temps il faut pour exécuter la commande ls utilisée pour afficher le contenu d'un répertoire choisi, entrez ce qui suit dans l'interpréteur de commandes :
$ time ls
Vous verrez la sortie de la commande ls et le temps qu'il a fallu pour la terminer.

Maintenant, essayons d'incorporer un argument. Dans cet exemple, nous allons essayer de déterminer combien de temps il faudra pour déplacer un fichier dans un répertoire différent :
$ time mv example.txt example-dir

En conséquence, le fichier example.txt a été déplacé dans example-dir, et vous verrez le temps nécessaire pour terminer le processus.
Comprendre la Sortie
Pour comprendre pleinement les avantages de la commande "time" Linux, vous devez savoir comment lire sa sortie.
Lecture de la Sortie dans le Terminal
La sortie par défaut de la commande "time" intégrée contient les informations suivantes :
- Temps réel (real) - Le temps réel qu'il faut au processus pour s'exécuter du début à la fin. Cela inclut tout le temps pris par d'autres processus et le temps passé à les attendre pour qu'ils se terminent.
- Temps utilisateur (user) - La quantité de temps du CPU passée en mode utilisateur pendant le processus. Les autres processus et le temps bloqué ne sont pas inclus.
- Temps système (sys) - Le temps total du CPU passé en mode kernel pendant le processus. De manière similaire au temps utilisateur, les autres processus et le temps bloqué par d'autres processus ne sont pas comptabilisés.
Voici un exemple. Si nous saisissons la commande ci-dessous dans la ligne de commande, le système téléchargera le programme d'installation du programme de machine virtuelle open-source VirtualBox :
$ time wget https://download.virtualbox.org/virtualb..._amd64.deb

Après le téléchargement, vous verrez trois chiffres - réel (real), utilisateur (user) et système (sys). Comme vous pouvez le voir, ils indiquent le temps écoulé en temps réel, utilisateur et système pendant le téléchargement, en minutes et en secondes.
Écrire la Sortie dans un Fichier
Parfois, vous voudrez peut-être enregistrer les informations que vous avez obtenues en utilisant "time". Heureusement, il existe une option de format qui vous permet d'écrire la sortie de la commande dans un fichier.
Si vous utilisez la commande "time" GNU, l'option -o vous permettra de le faire - elle créera un nouveau fichier de sortie contenant des informations sur l'autre commande.
Par exemple, entrez la commande suivante pour enregistrer les informations de ping du site ellohost.com et les détails concernant son processus dans un nouveau fichier :
$ time -o ellohost-ping-info.log ping ellohost.com
Notez que si vous utilisez l'interpréteur de commandes Bash et que vous souhaitez utiliser -o ou toute autre option, vous devrez invoquer la commande "time" externe en utilisant le chemin explicite /usr/bin/time au lieu de simplement time.
$ /usr/bin/time -o ellohost-ping-info.log ping ellohost.com
Pour vérifier le contenu de ellohost-ping-info.log, utilisez la commande cat :
$ cat ellohost-ping-info.log
Obtenir une Sortie Détaillée dans un Fichier
La sortie par défaut de la commande "time" peut ne pas inclure toutes les informations que vous souhaitez connaître sur un processus particulier. Pour afficher une sortie détaillée, ajoutez l'option -v à la commande "time" dans Linux.
Par exemple, si vous souhaitez connaître le temps de ping (temps de réponse) d'ellohost.com et afficher des informations détaillées sur le processus, entrez la commande suivante :
$ time -v ping ellohost.com
Si vous n'utilisez pas la commande "time" GNU ou si vous rencontrez un flux d'erreur standard, essayez de déclencher la commande "time" externe en entrant le chemin complet /usr/bin/time :
$ /usr/bin/time -v ping ellohost.com
Alternativement, les utilisateurs peuvent personnaliser les types d'informations qu'ils souhaitent voir dans la sortie lorsqu'ils utilisent la commande "time" en utilisant ces options de format de sortie :
% Un pourcentage littéral.
C Nom et arguments de ligne de commande de la commande en cours d'exécution.
D La taille moyenne de la zone de données non partagées du processus, en kilo-octets.
E Le temps réel écoulé (horloge réelle) utilisé par le processus, en (heures:)minutes:secondes.
F Le nombre de défauts de page majeurs, ou nécessitant des E/S, qui se sont produits pendant l'exécution du processus. Il s'agit de défauts pour lesquels la page a migré hors de la mémoire principale.
I Le nombre d'entrées du système de fichiers par le processus.
K La consommation moyenne totale de mémoire du processus en kilo-octets.
M La taille maximale de l'ensemble résident du processus pendant son cycle de vie, en kilo-octets.
O Le nombre de sorties du système de fichiers par le processus.
P Pourcentage du CPU attribué à ce travail. Il s'agit simplement des temps utilisateur et système divisés par le temps d'exécution total. Il affiche également un signe de pourcentage.
R Le nombre de défauts de page mineurs ou récupérables. Il s'agit de pages qui ne sont pas valides, mais qui n'ont pas encore été réclamées par d'autres pages virtuelles. Ainsi, les données de la page sont toujours correctes, mais les tables système doivent être mises à jour.
S Le nombre total de secondes CPU utilisées par le système pour le compte du processus (en mode kernel) en secondes.
U Nombre total de secondes CPU que le processus a utilisées directement (en mode utilisateur) en secondes.
W Le nombre de fois où le processus a été déplacé hors de la mémoire principale.
X La quantité moyenne de texte partagé dans le processus en kilo-octets.
Z La taille de page du système, en octets. En tant que constante par système, elle peut varier entre les systèmes.
c Le nombre de fois où le processus a changé de contexte de manière involontaire (parce que le temps alloué a expiré).
e Temps réel écoulé (horloge réelle) utilisé par le processus, en secondes.
k Le nombre de signaux délivrés au processus.
p Taille moyenne de la pile non partagée du processus, en kilo-octets.
r Le nombre de messages de socket reçus par le processus.
s Le nombre de messages de socket envoyés par le processus.
t Taille moyenne de l'ensemble résident du processus, en kilo-octets.
w Nombre de fois que le programme a changé de contexte volontairement, par exemple, en attendant qu'une opération d'E/S se termine.
x Le code de sortie de la commande.
Par exemple, si vous souhaitez afficher le nombre de messages de socket reçus par la commande, entrez ce qui suit dans l'interpréteur de commandes :
$ /usr/bin/time -f "Messages de Socket Reçus : %r" commande
Alternativement, si vous utilisez l'interpréteur de commandes Bash, vous pouvez préférer le format TIMEFORMAT intégré. TIMEFORMAT utilise une chaîne de format particulière pour permettre aux utilisateurs de spécifier comment les informations de timing doivent être affichées.
Voici une liste des valeurs du paramètre TIMEFORMAT :
%% Un pourcentage littéral %.
%[p][l]R Le temps écoulé en secondes.
%[p][l]U Le nombre de secondes CPU que le processus a passé en mode utilisateur.
%[p][l]S Le nombre de secondes CPU que le processus a passé en mode système.
%P Le pourcentage CPU, calculé comme (%U + %S) / %R.

