Comment créer un alias pour Bash, Cmd ou PowerShell ?
Un petit quicky ?
Le 09 mai 2019 à 08h30
5 min
Logiciel
Logiciel
Les alias sont de petits raccourcis en ligne de commandes qui permettent de se faciliter la vie. Un outil méconnu, pourtant largement disponible tant sous Linux que sous Windows.
Lorsque l'on utilise un système d'exploitation, on a parfois affaire à la ligne de commandes pour y exécuter des tâches de manière plus ou moins régulières. Lorsqu'il s'agit de lister les fichiers d'un répertoire, c'est en général assez simple avec des commandes comme dir
ou ls
. Puis il y a des cas plus compliqués.
Lorsqu'il faut enchaîner de longues commandes et paramètres par exemple, ou lorsque l'on ne veut pas avoir à retenir une syntaxe un peu trop verbeuse. On en a vu un exemple récemment avec la substitution d'utilisateur sous Windows bien plus complexe que sous Linux, avec deux commandes qui se présentent de la sorte :
sudo commande
runas /noprofile /user:Utilisateur_Administrateur commande
Dans ces différentes situations, un outil assez simple peut vous aider : l'alias. Voici comment en créer.
Bash Linux, un simple fichier à éditer
Commençons par des systèmes où l'on utilise souvent un terminal : les distributions GNU/Linux et leur Bash. Cet interpréteur est loin d'être le seul disponible, mais c'est le plus courant, c'est pour cela que nous l'utilisons comme exemple. La documentation des alias est disponible par ici.
Par défaut, plusieurs sont créés, vous pouvez en voir la liste avec la commande suivante :
alias
Vous verrez ainsi la forme sous laquelle ils sont déclarés :
alias nom_de_lalias='commande'
Si vous tapez cette ligne dans un terminal, l'alias va être créé et sera valable jusqu'à la fin de la session. On peut faire le test cette commande permettant de mettre à jour le système et de faire le ménage :
alias fup='sudo apt update && sudo apt full upgrade -y && sudo apt autoremove'
fup
Pour rendre cet alias permanent, vous pouvez l'enregistrer dans le fichier de configuration de bash ou celui dédié aux alias (qui n'existe pas par défaut), ils sont cachés à la racine du répertoire utilisateur :
nano .bashrc
nano .bash_aliases
Notez que des alias peuvent s'appeler entre eux (attention à l'ordre de déclaration). En reprenant l'exemple ci-dessus :
alias up='sudo apt update'
alias ug='sudo apt upgrade -y'
alias ar='sudo apt autoremove'
alias fup='up && ug && ar'
Les alias peuvent également être utilisés conjointement à des paramètres de la ligne de commandes :
alias sap='sudo apt -y'
sap update
sap full-upgrade
Les macros de l'invite de commandes Windows
Sous Windows, le terminal classique ou invites de commandes (cmd) dispose aussi d'une syntaxe simple et assez ancienne pour gérer des alias (appelés macros) passant par doskey.
doskey ls=dir
Pour lister les macros existantes ou leur historique d'usage des commandes de l'invite :
doskey /m
doskey /h
Par défaut, aucune macro n'est présente. On rappellera au passage quelques raccourcis pratiques :
- F7 : affiche l'historique de l'invite
- F8 : effectue une recherche dans l'historique
- F9 : lance un élément de l'historique à travers son numéro
- ALT+F7 : efface l'historique de l'invite
- ALT+F10 : efface les macros
Doskey a néanmoins deux défauts principaux. Le premier c'est qu'il faut lui dire les arguments auxquels il doit s'attendre. Si l'on tape par exemple la commande suivante :
ls c:\
On aura le résultat d'un simple dir
et non dir c:\
, l'argument étant ignoré. Il faut donc modifier la déclaration :
doskey ls=dir $*
Vous pouvez aussi utiliser jusqu'à neuf arguments ($1
à $9
) et différentes commandes de suite ($T
comme séparateur). L'autre problème, c'est que ces macros sont non persistantes. C'est-à-dire qu'elles sont effacées dès que la fenêtre est fermée. Vous pouvez néanmoins en charger plusieurs d'un coup via un fichier :
doskey /macrofile=fichier.txt
La seule solution est donc de passer par le lancement de cette commande au démarrage du système. Vous trouverez un exemple de la méthode à suivre, via un ajout dans la base de registre, dans ce dépôt GitHub.
PowerShell : comme pour Bash
Avec PowerShell, les choses sont forcément plus simples. Voir la liste des alias ou en ajouter un se résume à :
Get-Alias
Set-Alias nom commande
Par défaut de nombreux alias sont configurés, ls
renvoie par exemple à Get-ChildItem
. Plusieurs paramètres sont disponibles permettant de définir un alias comme en lecture uniquement, privé, lui ajouter une description, etc.
Les paramètres en ligne de commandes sont passés directement à l'alias, le système est ainsi assez proche de Bash plus que de Doskey. Là encore, les alias sont non persistants par défaut avec un simple fichier texte à éditer.
Set-Alias np notepad
$Profile
np $Profile
Les trois lignes ci-dessus permettent de créer un alias qui ouvrira un fichier dans le Bloc-notes de Windows, d'afficher le chemin du fichier contenant le profil utilisateur et de l'ouvrir (ou le créer puisqu'il n'existe pas par défaut).
On peut alors lui ajouter des lignes d'alias. Notez enfin que les expressions complexes peuvent vous donner du fil à retordre, devant passer par une fonction. Ainsi, pour lancer la mise à jour des applications Chocolatey avec les droits administrateur depuis une session en étant dépourvu on ne peut pas simplement utiliser :
Set-Alias chup Start-Process powershell.exe -Verb RunAs 'choco upgrade all'
Il faut donc plutôt opter pour ces deux lignes :
Set-Alias chup UpgradeChoco
function UpgradeChoco {Start-Process powershell.exe -Verb RunAs 'choco upgrade all'}
Comment créer un alias pour Bash, Cmd ou PowerShell ?
-
Bash Linux, un simple fichier à éditer
-
Les macros de l'invite de commandes Windows
-
PowerShell : comme pour Bash
Commentaires (62)
Vous devez être abonné pour pouvoir commenter.
Déjà abonné ? Se connecter
Abonnez-vousLe 09/05/2019 à 09h10
Par contre sur un shell comme Bash, il vaut mieux utiliser une fonction plutôt qu’un alias. Un alias permet de remplacer le premier mot d’une commande (voire plus s’il y a un espace à la fin de l’alias). Alors qu’une fonction lance exactement les commandes dans la fonction (les arguments en plus ont du sens seulement si on les utilise explicitement).
up() {
}
Le 09/05/2019 à 09h27
Les alias (et les commandes du coup) sont des outils pour des “blagues” à faire aux collègues qui oublient de fermer leur sessions, le tout en modifiant le .bashrc pour que ça soit bien persistant. Passons le classique mais bien dégueulasse “ alias ls=‘rm -rf’ ” là où on peut bien saboter à coup d’ouverture de site web “alias cd=‘firefox ’ ” ou pour lancer des fork bomb plus ou moins violente (en shell “:(){ :|:& };:” qui se résume à créer une fonction “:” qui consiste à s’appeler 2 fois en parallèles et de lancer la dite fonction ainsi crées : plantage assuré de l’ordinateur, impossible de le récupéré autre qu’en rebootant)
Le 09/05/2019 à 09h33
Assez étonnant. Et on remarque au passage la logique du batch:
doskey ls=dir \(*
J'ai cru à une erreur de la rédaction, à une confusion avec bash, mais non :
doskey /?
Les codes spéciaux suivants s’utilisent pour définir les macros Doskey :
\)T Séparateur de commande. Autorise plusieurs commandes dans une macro.
\(1-\)9 Paramètres de batch. Comme %1-%9 dans les programmes de commandes.
$* Équivaut à tout ce qui suit le nom de macro sur la ligne de commande
Le 09/05/2019 à 09h38
C’est justement logique d’avoir une syntaxe différente de l’habituel %.
Parce que justement, le % serait interprété au moment de l’exécution de la commande doskey, donc il faudrait l’échapper, et il y aurait des risques de confusion ou d’oubli de l’échappement… Une syntaxe clairement différente limite le risque.
Le 09/05/2019 à 09h38
Le 09/05/2019 à 09h45
t’es un peu maléfique, non ? " />
(après, une session laissée accessible mérite une sanction, on est d’accord " />)
Le 09/05/2019 à 09h57
Le 09/05/2019 à 09h58
Le 09/05/2019 à 10h01
C’est les versions “pire”. Mais tu peux être très gentil en mélangeant les commandes, le classique étant de remplacer cd par ls et ls par cd. On doit aussi pouvoir aliaser plein de commande à rien (strictement elle ne fait rien).
Je n’ai pas la commande, mais il doit y avoir même moyen de binder “SIGINT” (ctrl+c) à la touche entrée ce qui rend tout de suite plus difficile le lancement de commande (mais on n’est plus dans l’alias).
Le 09/05/2019 à 10h01
déjà c’est plus constructif " />
Le 09/05/2019 à 10h07
J’ai aussi vu un soft qui s’appelle en ligne de commande : “sl” ça fait une animation ascii art à la con pour les gens qui se mélangent les doigts en faisant leur ls…
Le 09/05/2019 à 10h10
un train, oui " />
perso j’avais rajouté un alias sur sl qui pointait vers ls " />
Le 09/05/2019 à 10h31
Ah sl, qu’est-ce que j’en ai vu passer des trains…
J’adore son man d’ailleurs.
SEE ALSO
ls(1)
BUGS
It sometimes lists directory contents.
Le 09/05/2019 à 10h36
Toujours regarder les alias après s’être connecté pour éviter les mauvaises blagues comme mentionné par tazvld ;-).
Pour ignorer un alias, il suffit de le préfixer par . Exemple :
alias rm=‘rm -i’
\rm monfichier
Dans cet exemple la commande ne demandera plus confirmation pour supprimer le fichier (option -i).
Le 09/05/2019 à 11h33
J’ai prévenu que je ne jouais pas à ça et que si par hasard mon pc n’est pas verrouillé (chose rare) j’appelerai la sécurité pour tentative d’intrusion. Du coup ils jouent entre eux. :-p
Le 09/05/2019 à 11h37
Le 09/05/2019 à 11h37
Les alias du Bash ne peuvent être exportés contrairement aux fonctions. En pratique, ce sont des sous fonctions. Je n’ai jamais compris pourquoi dans Bash il n’y avait pas une option pour juste dire que les alias sont des alias de fonction. Bref que ce sont juste des fonctions…
Le 09/05/2019 à 11h40
Le 09/05/2019 à 11h46
Le 09/05/2019 à 11h46
Le 09/05/2019 à 12h01
Moi j’bosse avec des adultes… Donc parfois j’laisse ma session ouverte quand j’vais aux toilettes… et ça n’fait rien. Faut dire aussi qu’ils savent même pas comment lancer une invite de commande, mes collègues…
Le 09/05/2019 à 12h06
Ah, c’est tout ou rien avec vous.
Rien ne vaut un bon vieux
“capture d’écran,
mise en fond d’écran,
et déplacement des icones avec masquage de la barre des tâches”
Ca fait rigoler les complices, et ça n’a aucune conséquence.
Le 09/05/2019 à 12h09
J’ai bossé en hotline donc j’ai pris l’habitude de verrouiller mon pc pour pas me faire “croissanter”…
Ceci dit, c’est extrêmement pénible d’avoir des collègues qui rôdent comme des vautours quand tu es en train de bosser/préparer une réunion/aider un collègue à 2 mètres de ton PC
Je ne penses pas que ça apporte une bonne ambiance et je me demande dans quelle mesure ça pourrait entrer dans la définition du harcèlement
Le 09/05/2019 à 12h27
Les alias sont bien pratiques pour utiliser des conteneurs docker, comme par exemple pour les binaires qui sont peu répandus ou qui embarquent beaucoup de dépendances. Exemple avec ffmpeg qui n’est pas dispo par défaut sur centos:
alias ffmpeg=‘docker run -v $(pwd):/temp jrottenberg/ffmpeg ‘
Le 09/05/2019 à 13h43
Après 10ans j’ai à peine découvert l’an dernier que cela s’appelle le chocoblast et qu’il y a même des règles officielles:http://www.chocoblast.fr/
[/HS]
Le 09/05/2019 à 13h48
@shlagevuk : change de distrib ;-)
Le 09/05/2019 à 13h56
Juste une question, sous windows on ne peut plus faire des fichiers .bat ?
Le 09/05/2019 à 14h02
Si.
Le 09/05/2019 à 14h04
Du coup quelle est la différence entre une macro doskey et un fichier .bat ?
Le 09/05/2019 à 14h19
j’ai toujours fonctionné avec les batchs. Du coup j’ai profité de l’article pour chercher la différence, et il semble que l’intérêt principal (n’est pas tant au niveau des alias) mais au fait qu’il y a une fonctionnalité “history” qui permet de retrouver des commandes précédentes.
Le 09/05/2019 à 14h19
Le 09/05/2019 à 14h23
Dans ce cas avec des règles établies et sachant que le chocoblasteur peut devenir le chocoblasté si pris la main dans le sac, pourquoi pas…
Le 09/05/2019 à 14h40
Le 09/05/2019 à 14h44
Le 09/05/2019 à 14h46
Un batch est un script que tu peux lancer, éventuellement à placer dans ton PATH pour un accès constant. Un alias est juste un raccourci pour une commande, le plus souvent assez courte. Tu peux très bien faire un script nommé “ls” qui va te lancer un “cd” avec les arguments passés, mais c’est un peu overkill vu le besoin, l’alias/macro est donc plus indiqué dans ce cas.
Le 09/05/2019 à 15h11
J’avais vu passer une tentative de nouvelle approche pour éviter le croissantage, qui peut être mal vécu: Twitter
Le 09/05/2019 à 16h26
Le 09/05/2019 à 17h13
En fait, quand un nom de commande est “quoted” (qui contient \ ‘ “), ça ne va pas chercher les mot-clés réservés ou les alias. Donc un backslash fonctionne mais on ne comprend pas pourquoi :P
Le 09/05/2019 à 17h17
Le 09/05/2019 à 17h37
Quid de la commande SET ?
Le 09/05/2019 à 17h44
Le 09/05/2019 à 19h20
Le 09/05/2019 à 19h32
Le 10/05/2019 à 04h13
Le 10/05/2019 à 07h01
Le 10/05/2019 à 07h06
OK Merci,
J’avais bugué, je ne me rappelais plus de Doskey (qui ne servait pas vraiment pour les macros à mon époque mais juste l’historique de commande).
Je ne sais pas pourquoi je l’ai vu comme un utilitaire externe à l’OS.
Le 10/05/2019 à 07h26
Le 10/05/2019 à 07h35
Le 10/05/2019 à 07h46
Le 10/05/2019 à 08h00
La “bonne ambiance” elle est juste dans ta tête, il est temps de le comprendre ;-)
Je viens au boulot, et ça va te paraître fou, c’est pour produire du travail (dingue non ?). Si il faut sensibiliser quelqu’un à la sécurité, il y a des façons de le faire, chocoblaster n’en est pas une.
Il y a un temps pour tout, travailler et s’amuser, je fais l’un ou l’un, pas les deux :-)
Enfin, pour le chocoblastage, le lien qui m’a été transmis peut rendre le truc amusant, mais faut être honnête, c’est quand même vite lassant.
Désolé pour le hors sujet
Le 10/05/2019 à 08h21
Le 10/05/2019 à 08h44
Le 10/05/2019 à 10h00
Un utilisateur qui prendrait 100% des processes serait un utilisateur du système Unix administré par le plus grand des tocards.
Ta simple assertion disant qu’il n’existe qu’une possibilité qui serait un reboot indique que tu devrais rester sous Windows.
man 5 limits.conf
man procfs
Le 10/05/2019 à 11h55
Le 10/05/2019 à 12h07
Le 10/05/2019 à 12h11
Bonjour, je m’appelle Patch, et j’adore prendre les gens de haut sans avoir pris 3 secondes pour comprendre ce qu’ils racontent, et surtout sans argumenter ma position.
Le 10/05/2019 à 12h20
La mauvaise sécurisation d’un système ne peut absolument pas servir d’excuse à celui qui commet une intrusion.
A partir du moment où la manipulation est faite par quelqu’un qui sait qu’il n’est pas habilité à faire la manip, c’est illégal, il y a de la jurisprudence sur le sujet (Bluetooth notamment, alors même qu’il y avait débat sur le fait qu’il était conscient de n’avoir rien à y faire).
A cela s’ajoute l’usurpation d’identité (envoi d’un mal signé par un autre), sujet que je ne connais pas juridiquement, mais a priori je dirais que c’est interdit aussi.
On peut juger excessive la réaction de Z-os, mais la loi est sans aucune ambiguïté de son côté.
Le 10/05/2019 à 12h26
Que ce soit un blâme, une retenue sur salaire ou un licenciement… ou un mail envoyés aux collègues on est dans la sanction.
On sensibilises mal à coup de sanction.
Je suis tout à fait d’accord pour dire que la sécurité est le dernier des soucis de l’ensemble des utilisateurs et administrateurs informatique (et c’est très grave dans le second cas, ça devrait s’apparenter à une faute professionnelle). Avec les sanctions, on va “apprendre” en mode pavlovien à un collègue à bien verrouiller sa session quand il s’absente mais combien de SPOF va t’il continuer à créer ?
L’ensemble de ses mots de passes dans un fichier txt ? Dans le gestionnaire de mot de passe de son navigateur ? What else ?
Par exemple, l’utilisation de mot de passe faible, jamais renouvelé, (faille dans le SI on est d’accord) on ne peux pas le voir donc pas le sanctionner donc pas lui apprendre dans un mode pavlovien, donc on continues d’avoir un collègue qui mets en danger le SI et c’est pas avec des mails et des fournée de croissant qu’on va s’en prémunir. Au mieux on fait augmenter son cholestérol…
Le 10/05/2019 à 12h47
Le 10/05/2019 à 22h41
Une photo d’escarre en fond d’écran pour ceux qui oublient de verrouiller leur ordinateur. Amusant et didactique :)
(Je suis le plus marrant des collègues que vous ayez jamais rêvé d’avoir)
Le 11/05/2019 à 07h13
Le 11/05/2019 à 20h59