Le savoir n'a guère d'intérêt s'il n'est pas partagé.

J'suis sûr qu'après avoir lu cet article, vous gagnerez du temps à l'utilisation de la CLI Cisco! Bon après, on va être honnête, le mieux serait tout de même de passer à une approche plus "NetDevOps" de votre infrastructure plutôt que de modifier à la main la configuration. Je vous aurez prévenu! 😜

Un peu de recherche... 🧐

Lorsque vous voulez afficher une configuration, que ça soit la running-config  ou la startup-config, vous utilisez la commande:

show running-config

La commande show, lorsqu'il y a pas mal de choses à afficher, génère une ligne --more--, vous pouvez filtrer la sortie en utilisant les raccourcis suivants:

--more--
/regexp # Va au premier match de la regexp! 😎
-regexp # Affiche les lignes qui ne contiennent pas la regexp!
+regexp # Afficher les lignes qui contiennent la regexp!

Un petit pipe ? 🤷‍♂️

Le pipe comme pour GNU/Linux devrait être votre meilleur ami! En effet, vous pouvez utiliser la syntaxe suivante:

show COMMAND | {begin|include|exclude} regexp

Pour expliquer tout ça:

  • Le begin : à partir de

La configuration dans notre exemple est donc affichée à partir de la première fois où ça match avec le mot "interface"

SWITCH1#sh run | begin interface
interface FastEthernet0
 no ip address
!
  • L'include : inclut

L'inclusion est ce qui se rapproche le plus d'un grep tout simple, en effet, vous pouvez par exemple lister toutes les lignes commençant par interface.

SWITCH1#sh run | include ^interface
interface FastEthernet0
interface GigabitEthernet1/0/1
interface GigabitEthernet1/0/2
interface GigabitEthernet1/0/3
interface GigabitEthernet1/0/4
interface GigabitEthernet1/0/5
interface GigabitEthernet1/0/6
interface GigabitEthernet1/0/7
interface GigabitEthernet1/0/8
interface GigabitEthernet1/0/9
interface GigabitEthernet1/0/10
interface GigabitEthernet1/0/11
interface GigabitEthernet1/0/12
  • L'exclude : exclut

L'exclusion elle fait donc l'inverse de l'inclusion, par exemple, on peut afficher toutes les lignes qui ne commencent pas par interface.

Cette commande affichera donc tout le reste sauf les lignes interface .... Magique! 😎

D'ailleurs si vous voulez plus d'informations sur les regexp, c'est ici. 😜

  • Le redirect et l'append

La première fonction permet de rediriger le résultat dans un fichier par exemple, la deuxième permet d'écrire à la suite de ce même fichier.

Par exemple:

# Ecriture dans le fichier backup.txt
show run | redirect flash:backup.txt 

# Ecrire à la suite du 'sh run' dans le fichier backup.txt
show ip interface brief | append flash:backup.txt

Quel beau shell! 🤦‍♂️

Les équipements Cisco embarquent le shell TCL hérité de BSD.

Il est donc possible de "scripter" directement dans l'équipement! Par exemple, une simple boucle pour faire un ping sur une liste d'adresses):

SWITCH1#tclsh
SWITCH1(tcl)#foreach address {
+>(tcl)#10.0.0.1
+>(tcl)#10.0.0.2
+>(tcl)#10.0.0.3
+>(tcl)#10.0.0.4
+>(tcl)#} { ping $address}

Type escape sequence to abort.
Sending 5, 100-bytes ICMP Echos to 10.0.0.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms
Type escape sequence to abort.
Sending 5, 100-bytes ICMP Echos to 10.0.0.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms
Type escape sequence to abort.
Sending 5, 100-bytes ICMP Echos to 10.0.0.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms
Type escape sequence to abort.
Sending 5, 100-bytes ICMP Echos to 10.0.0.4, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/4 ms

Plus d'informations ici. Je vous laisse constater à quel point c'est pratique! 😊

Pour quitter le shell: tclquit.

Jouer avec l'historique! 😁

Par défaut, les équipements Cisco n'enregistrent que les 20 dernières commandes tapées lorsque vous utilisez la commande show history. Par contre gardez en tête que chaque mode possède un historique de commandes unique (mode privilégié, mode global).

Pour augmenter l'historique:

SWITCH1#term history size 256

Exécutez des commandes depuis n'importe où! 🙌

Si vous jouez souvent avec la CLI Cisco, vous vous serez rendu vite compte que vous ne pouvez pas exécuter certaines commandes hors contexte. En effet, dans la théorie, vous ne pouvez pas effectuer de show running-config après avoir fait un configure terminal. Je vous arrête tout de suite (d'où l'intérêt de cet article), et bien si c'est possible! Comment ? Tout simplement en utilisant le préfix do.

Pour exempliser la chose (j'suis pas sûr que ça puisse être dit ainsi):

SWITCH1#configure terminal
SWITCH1(config)#show running-config
                    ^
% Invalid input detected at '^' marker.

SWITCH1(config)#do show running-config
Building configuration...

C'est aussi simple que ça, et ça marche quasiment partout ! 😊 A dieu les exit à tout va!

De l'aide sensible au contexte! 👍

Alors, pour les examens officiels Cisco, obliez tout de suite l'aide, apprenez les commandes et comment les utilisées. Mais sinon, dans la vie de tous les jours, vous pouvez utiliser l'aide sensible au contexte.

Comme l'appeler, rien de bien compliqué: ?. Vous pouvez d'ailleurs commencer à écrire une commande ou un mot et ajouter le ? à la fin pour avoir l'aide.

Par exemple:

SWITCH1(config)#mac ?
	address-table	Configure the MAC address table

Les abréviations de commandes

Alors ça, ÇA, c'est une chose dont je suis très friand! Les abréviations de commandes sont vraiment très pratiques, par contre, tout comme l'aide, c'est malheureusement pas dispo pendant les examens!  🤦‍♂️

Voici quelques exemples:

sh ip int br		show ip interface brief
sh ip rou		show ip route
sh run			show running-config
sh sta			show startup-config
conf t			configure terminal
copy run sta		copy running-config startup-config
ip add			ip address
shut			shutdown
int g0/1		interface GigabitEthernet 0/1

L'auto-complétion 😎

Comme l'aide et les abréviations, durant un examen, c'est niet! 😒

L'auto-complétion dans la CLI c'est pas très compliqué, tu commences à taper une commande et tu fais <TAB> pour la compléter. Tu vas voir, c'est la touche qui risque le plus vite de s'user après !

Prévoir un redémarrage! 🛸

Quelques fois, il est possible que l'on réalise une modification qui nécessite un redémarrage dans le cas où on pourrait potentiellement se couper la main.

Pour éviter ça, on peut définir un redémarrage programmé et ensuite l'annulé si tout va bien.

Pour ce faire, il suffit donc:

SWITCH1#reload in 10
SWITCH1#ma config
SWITCH1#reload cancel

Le reload se fera dans les 10 minutes.

Lorsque vous lancez une demande de programmation de reload, la configuration est sauvegardée, ce qui permet ainsi, si vous avez fait une modification qui a foirée et que vous n'avez pas fait de copy running-config startup-config ou de write memory (même si cette dernière est dépréciée), vous devriez récupérer votre configuration d'avant reload. Wooooow! 💥

PS: On peut afficher les reloads programmés avec la commande: show reload.

Afficher des graphes en CLI

C'est une chose qui n'est pas forcément très connue mais, plutôt que de passer par les graphes de sa supervision (quand on en a une), il est possible d'afficher l'historique d'un processus (avec des graphes ASCII) en CLI:

SWITCH1#show processes cpu history

                                        1111122222
    8777777777766666777777777777777666662222211111999999999977
100
 90
 80
 70
 60
 50
 40
 30
 20                                          *****
 10 **********************************************************
   0....5....1....1....2....2....3....3....4....4....5....5....
             0    5    0    5    0    5    0    5    0    5
               CPU% per second (last 60 seconds)

    21111111111111111111111111111 3111141112211111111316133332
    1343543517343334333334333331397433106156041163365335301770
100
 90
 80
 70                                                    *
 60                                                    *
 50                                                    *
 40                               *    *               *   **
 30                               *    *   *         * * ****
 20 *   *  * *                    *    ** ***   *  *** * *****
 10 ##########################################################
   0....5....1....1....2....2....3....3....4....4....5....5....
             0    5    0    5    0    5    0    5    0    5
               CPU% per minute (last 60 minutes)
              * = maximum CPU%   # = average CPU%

(On est d'ailleurs pas loin du vieux logo Cisco en ASCII, troll).

Des raccourcis clavier

Alors, un peu comme tout bon Linuxien qui se réspecte, je suis un féru de raccourcis clavier. Voici une petite liste de ceux que je préfère:

CTRL+A -> 		Début de ligne
CTRL+E -> 		Fil de ligne
CTRL+P -> 		Commande précédente
CTRL+N -> 		Commande suivante
CTRL+Z -> 		Retour au mode privilégié
CTRL+SHIFT+6 -> 	Interruption forcée
TAB ->   		Compléter une commande
CTRL+R -> 		Réafficher la ligne
CTRL+U -> 		Effacer la ligne
CTRL+W -> 		Effacer un mot
ECHAP+b -> 		Reculer d'un mot
ECHAP+f -> 		Avancer d'un mot

Enfin voilà une petite liste d'astuces très utiles au quotidien, mais comme je le disais, il est tout de même bien plus intéressant et important de passer à une mouvance type "NetDevOps" et gérer son infrastructure réseau par le biais de script (validés) qui permetteront de mieux contrôler l'état de sa configuration ainsi que de ses évolutions. ❤