Simplifiez vous la cli
Si vous passez plus de temps dans votre shell que dans les gui, cet article est fait pour vous.
[cyklodev_summary]
L’administration de systèmes (GNULinux en autre), nécessite de taper très souvent les mêmes commandes avec seulement quelques différences comme les arguments.
Cette manière de faire est extrêmement utile, car la ligne de commande est l’ingrédient essentiel au scripting qui lui même amène à l’automatisation. Du coup pour passer moins de temps à effectuer des actions je vous propose de passer en revue 2 points : les alias, et les fonctions.
Une petite mise en garde avant de démarrer: si vous êtes un débutant , je ne pourrai que trop vous conseiller de ne pas utiliser d’alias, ça permet de mémoriser les commandes et leur construction.
Les alias
Existants
Commençons tout de suite par regarder ce que vous avez comme alias sur votre système. Tapez cette commande dans votre terminal
alias
Vous devriez voir apparaitre quelques alias déjà préinstallés (ou pas selon votre OS)
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
Il n’y a pas vraiment de magie, ces alias proviennent du fichier .bashrc présent dans votre répertoire home.
Ils sont chargés au demarrage de votre terminal, ou lors de votre connexion via ssh.
Ajout pour un utilisateur
Vous pouvez rajouter des alias pour un seul utilisateur en les ajoutants dans le fichier .bashrc vu précédemment.
vi ~/.bashrc
alias dfg='df -h'
alias dus='du -ms '
alias h='history'
On voit tout de suite le gain de touches à taper sur les alias ci dessus, et ce n’est qu’un début. Il faut aussi se rendre compte que vous pouvez ajouter des variables à la suite de l’alias.
dus /var/log/*
Si vous souhaitez injecter un fichier contenant les alias pas de soucis on peut directement sourcer un fichier dans le bashrc
vi ~/.bashrc
source monfichieralias
# ou
. monfichieralias
Pour que vous puissiez profiter de vos nouveaux alias il faut quitter le terminal en cours et en lancer un nouveau.
Retraits d’alias
Si vous souhaitez retirer un alias en cours de session vous pouvez utiliser la syntaxe suivante:
unalias dfg
Vous pouvez également supprimer tous les alias en une fois
unalias -a
Mais tant que vous n’avez pas supprimer les appels d’alias (bashrc) , ils réapparaitront à la prochaine session.
Ajouts pour tous les utilisateurs
Si vous voulez faire bénéficier tous vos utilisateurs , rassemblez tous vos alias dans un fichier avec l’extension .sh dans le répertoire suivant :
cp monfichieralias.sh /etc/profile.d/
A la prochaine connexion d’un des utilisateurs du serveur il bénéficiera automatiquement des alias présents dans ce fichier.
Exemples
Voici quelques exemples que je trouve particulièrement utiles.
Système
alias j='jobs -l'
alias sbin='cd /usr/local/sbin'
alias vcron='vi /etc/crontab'
alias swd='watch -n1 df -m'
alias yi='yum install'
alias yp='yum provides'
alias ys='yum search'
alias yu='yum update'
alias yr="yum remove"
Réseau
alias nets='netstat -tnlpv'
alias swn='watch -n1 netstat -tnlpv'
alias pingg='ping -c 1 8.8.8.8'
alias pingf='ping -c 1 free.fr'
alias swn='watch -n1 netstat -tnlpv'
Les fonctions
On pourrai se dire qu’avec les alias on peut tout faire… et bien non ! Il nous manque quelque chose d’essentiel, le traitement des variables qu’on rajoute derrière les alias.
Existantes
Pour lister les fonctions déjà présentes dans la session, il vous suffit de taper
set
Vous devriez voir une longue liste de fonctions préfixées d’un underscore. On va les mettre de cote pour l’instant.
Ajout
L’ajout de fonctions suit les même règles que pour les alias, que ce soit dans le bashrc pour un utilisateur ou globalement dans le /etc/profile.d
Ensuite pas de surprise, une fonction est une fonction !
function hg(){
history | grep $1
}
function fnewest(){
find ${1} -printf '%T+ %p\n' | sort -r | head
}
function foldest(){
find ${1} -printf '%T+ %p\n' | head
}
L’usage d’une fonction est principalement de traiter les arguments qu’on passe à une commande, ou alors de les traiter.
Retrait
Comme pour les alias, on peut très facilement retirer une fonction de son environnement.
unset -f hg
L’autocomplétion
Lors de la commande set pour trouver les fonctions chargées dans l’environnement, on a vu apparaitre plein de fonction préfixées. Il s’agit des toutes les fonctions d’autocomplétion.
Exemple
Pour vous monter comment fonctionne l’autocomplétion, prenons un script n’importe lequel qui s’appelle au hasard switch-nic.sh
Voici un exemple d’autocomplétion pour ce script qui permet de changer le fichier de configuration d’une carte réseau.
Dans le répertoire CFG_PATH, j’ai plusieurs fichiers :
- ifcfg-eth-r1
- ifcfg-eth-r4
- ifcfg-eth-r7
_switchnic_completions()
{
LIST_NIC=$(ls -1 $CFG_PATH/ifcfg-eth0-* | awk -F '-' '{ print $3}')
LIST_ACTION="force none"
if [[ ${COMP_WORDS[1]} == "" ]] || [[ ! ${COMP_WORDS[1]} =~ ^(r1|r4|r7)$ ]]
then
COMPREPLY=($(compgen -W "$LIST_NIC" -- "${COMP_WORDS[1]}" ))
fi
if [[ ${COMP_WORDS[1]} =~ ^(r1|r4|r7)$ ]] && [[ ! ${COMP_WORDS[2]} =~ ^(force|none)$ ]]
then
COMPREPLY=($(compgen -W "$LIST_ACTION" -- "${COMP_WORDS[2]}" ))
fi
}
complete -F _switchnic_completions switch-nic.sh
On commence par la fin, la commande complete permet de dire à quel script cette fonction d’autocomplétion s’attache. On attache donc la fonction _switchnic_completions au script switch-nic.sh .
Dans la fonction on récupère le tableau COMP_WORDS qui contient les caractères tapés après la commande.
${COMP_WORDS[1]} est le 1er argument d’autocomplétion et il s’alimente dynamiquement avec les motifs présents dans le répertoire $CFG_PATH .
${COMP_WORDS[2]} est le 2eme argument autocomplétion, et il prend les valeurs force ou none seulement si le premier argument est r1,r4 ou r7.
Avec les alias et les fonctions permettent d’améliorer grandement votre productivité n’hesitez pas à en user/abuser.