Bases de Linux et de la ligne de commande

$ cat ips.txt
10.0.0.5
10.0.0.9
10.0.0.9
10.0.0.5
10.0.0.2
10.0.0.5
$ sort ips.txt | uniq -c | sort -nr | head -n 1

Les choix sont donnés sans les espaces en début de ligne. Dans la session ci-dessus, quelle ligne affiche le dernier enchaînement de commandes ?

  1. A1 10.0.0.2
  2. B2 10.0.0.9
  3. C3 10.0.0.5
Afficher la réponse et l'explication

Réponse : C. 3 10.0.0.5

sort trie les lignes de sorte que les lignes identiques soient adjacentes, et uniq -c fusionne les lignes identiques adjacentes en ajoutant leur nombre, ce qui donne les trois lignes 3 10.0.0.5, 2 10.0.0.9 et 1 10.0.0.2. sort -nr trie selon le nombre en tête, par ordre décroissant, et head -n 1 prend la première ligne : la sortie est donc 3 10.0.0.5. uniq ne fusionne que les lignes identiques « adjacentes » : il est donc indispensable de trier d'abord. Enchaîner ainsi des commandes avec des pipes est une méthode classique pour compter, dans un journal, les adresses IP qui accèdent le plus souvent ou les erreurs les plus fréquentes.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases de Linux et de la ligne de commande

  1. On veut afficher en continu à l'écran les lignes ajoutées par la suite au fichier journal du serveur /var/log/app.log, au fur et à mesure de leur ajout. Quelle commande convient ?
  2. Quelle est la sortie de la commande ci-dessus, qui extrait des colonnes d'une ligne dont les champs sont séparés par des virgules ?
  3. Quelle est la sortie de la commande sed ci-dessus, qui remplace des caractères ?
  4. Dans la session ci-dessus, qu'affiche le dernier awk ?
  5. Quelle description des fichiers trouvés en exécutant « find /data -name "*.log" -mtime +7 -size +100M » avec le find de GNU est correcte ?