| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
| alias [Le 31/08/2022, 23:32] – Passage de http à https sur les liens externes (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892) moths-art | alias [Le 12/02/2026, 14:46] (Version actuelle) – typo / détails krodelabestiole |
|---|
| {{tag>console terminal}} | {{tag>console terminal}} |
| ---- | |
| |
| ====== Créer un alias ====== | ====== Alias bash ====== |
| |
| Les //[[wpfr>alias]]// sont des substitutions abrégées de [[:commande_shell|commandes]] répétitives et/ou longues à taper dans la [[:console]]. | Les **alias [[:bash]]** sont des substitutions de [[:commande_shell|commandes]]. On les utilise en particulier pour simplifier l'usage de commandes répétitives et/ou longues à entrer dans la [[:console]]. |
| |
| Il est possible de définir vos alias dans deux [[:fichier_caché|fichiers cachés]] qui se trouvent dans votre //Dossier Personnel//: | Il est possible de définir des **alias** dans le [[:fichier caché]] ''.bash_aliases'', qui se trouve dans le [[:arborescence#répertoire personnel]]. Si ce dernier n'existe pas, on peut [[:tutoriel:comment_modifier_un_fichier|le créer]] : |
| * dans le fichier **.bashrc** juste après la ligne "//some more ls aliases//" | touch ~/.bash_aliases |
| * dans un fichier **.bash_aliases**. Si ce dernier n'existe pas, [[:tutoriel:comment_modifier_un_fichier|créez-le]]. | |
| |
| Il est également possible de créer un alias provisoire tel qu'expliqué [[#ajouter un alias provisoirement|ici]] | Il est également possible de créer un **alias provisoire** tel qu'expliqué [[#ajouter un alias provisoirement|ici]]. |
| |
| <note important>Pour éviter de modifier trop souvent le fichier sensible qu'est **.bashrc**, il est conseillé d'utiliser le fichier **.bash_aliases**. Pour que celui-ci soit pris en compte, [[:tutoriel:comment_modifier_un_fichier|modifiez le fichier]] **~/.bashrc** **après** l'avoir [[:tutoriel:comment_sauver_et_restaurer_un_fichier|sauvegardé]] pour décommenter((enlever les dièses (#) en début de ligne)), si ce n'est déjà le cas, les lignes suivantes: | <note> |
| <file - ~/.bashrc> | Le fichier ''.bash_aliases'' est pris en compte grâce au code suivant dans le fichier ''~/.bashrc'' (celui-ci étant automatiquement interprété à chaque ouverture d'un onglet du [[:terminal]]) : |
| | <code> |
| if [ -f ~/.bash_aliases ]; then | if [ -f ~/.bash_aliases ]; then |
| . ~/.bash_aliases | . ~/.bash_aliases |
| fi | fi |
| </file> | </code> |
| </note> | </note> |
| |
| ===== Forme d'un alias ===== | ===== Forme d'un alias ===== |
| |
| Qu'il soit dans le fichier **~/.bashrc** ou **~/.bash_aliases**, un alias aura toujours la forme suivante | Un **alias** est déclaré dans le fichier ''~/.bash_aliases'' avec une ligne du type : |
| <file - ~/.bash_aliases> | <file - ~/.bash_aliases> |
| alias nom_de_votre_alias='commande de votre alias' | alias nom_de_votre_alias='commande de votre alias' |
| </file> | </file> |
| <note important>Il ne peut y avoir d'espace entre le nom de l'alias, le signe "=" et le reste</note> | où ''nom_de_votre_alias'' est la commande raccourcie que vous passerez manuellement dans le [[:terminal]], et ''commande de votre alias'' est la [[:commande_shell|ligne de commande]], avec les éventuelles options et paramètres que le système devra comprendre (conserver les guillemets simples ''%%'%%''). |
| Lorsque vous saisirez **nom_de_votre_alias** dans un [[:terminal]], ce sera réellement la **commande de votre alias** qui sera exécutée. | |
| |
| Il est également possible d'utiliser des guillemets doubles comme ceci : | <note important>Il ne doit pas y avoir d'espace entre le nom de l'alias, le signe ''='' et la commande.</note> |
| |
| | Ainsi lorsque vous saisirez ''nom_de_votre_alias'' dans un [[:terminal]], ce sera réellement la ''commande de votre alias'' qui sera exécutée. |
| | |
| | Il est également possible d'utiliser des guillemets doubles ''"'' comme ceci : |
| <file> | <file> |
| alias nom_de_votre_alias="commande de votre alias" | alias nom_de_votre_alias="commande de votre alias" |
| </file> | </file> |
| Attention dans ce cas, si votre commande elle-même contient des guillemets, il est possible que ces derniers ne soient alors pas interprétés comme il faut. | Ceci peut être utile si votre commande contient des guillemets simples. Mais à l'inverse attention dans ce cas à ce que votre commande elle-même ne contienne pas des guillemets doubles, sans quoi il faudra les échapper (en les précédant de ''\''). |
| | |
| | <note> |
| | Avec [[:bash]] les variables entre guillemets doubles ''"'' sont interprétées, ce qui n'est pas le cas avec des guillemets simples ''%%'%%''. |
| | </note> |
| |
| ===== Utilisation ===== | ===== Utilisation ===== |
| <note>Pour que vos alias soient pris en compte après ajout dans les fichiers **.bashrc** ou **.bash_aliases**, il vous faudra relancer votre [[:terminal]] ou saisir la commande <code>source ~/.bashrc</code> | |
| Attention cependant à ce que "source" n'appelle pas une fonction similaire à celle décrite dans [[#les fonctions|cette partie]].\\ | |
| Vous pouvez aussi avoir l'erreur: //source : commande introuvable//((https://askubuntu.com/questions/20953/sudo-source-command-not-found)), relancer le terminal reste alors le plus simple </note> | |
| |
| Vous trouverez de nombreux alias en parcourant le net, et mettrez en place ou adapterez ceux qui vous correspondent au mieux, mais pour l' exemple, si vous ajoutez ceci dans le fichier **~/.bash_aliases** | <note important> |
| | Pour que vos **alias** soient pris en compte après ajout dans le fichier ''.bash_aliases'', on peut soit relancer le [[:terminal]], soit saisir la commande : |
| | <code>source ~/.bashrc</code> |
| | </note> |
| | |
| | Vous trouverez de nombreux [[#exemples]] d'**alias** en parcourant le [[:Web]] (ainsi que sur la page //[[:Commandes pratiques]]//), et mettrez en place ou adapterez ceux qui vous correspondent au mieux, mais pour l'exemple, si vous ajoutez ceci dans le fichier ''~/.bash_aliases'' : |
| <file - ~/.bash_aliases> | <file - ~/.bash_aliases> |
| alias agu='sudo apt-get update' | alias update='sudo apt update && sudo apt upgrade && sudo snap refresh && sudo flatpak update' |
| </file> | </file> |
| il vous suffira alors de taper dans un [[:terminal]] | il vous suffira alors de taper dans un [[:terminal]] : |
| <code>agu</code>pour mettre à jour la liste de vos [[:dépôts]] de [[:paquet|paquets]] avec l'outil [[:apt-get]]. | <code>update</code> |
| | pour [[:gestionnaire_de_mises_a_jour|mettre à jour]] votre système et les applications [[:deb]] installées avec [[:APT]], puis les applications [[:snap]] et les applications [[:Flatpak]]. |
| Vous pouvez également cumuler deux alias et en utiliser un troisième. Par exemple, toujours avec l'outil [[:apt-get]] | |
| <file>alias agu='sudo apt-get update' | |
| alias agg='sudo apt-get upgrade' | |
| alias agd='sudo apt-get dist-upgrade' | |
| alias miseàjour='agu && agg && agd'</file> | |
| Vous saisirez alors (dans un terminal) : | |
| <code>miseàjour</code> ce qui [[:tutoriel:comment_modifier_sources_maj#recharger_la_liste_des_paquets|rechargera la liste des paquets]] avant d'en faire la [[:apt-get#mise_a_jour_de_paquets|mise à jour]]. | |
| |
| <note tip>La déclaration de « variables aliases » est totalement libre et laissée à la discrétion de l’utilisateur, néanmoins, il peut être utile de qualifier les aliases selon un procédé mnémotechnique syncopé : \\ | <note> |
| <file>alias update='sudo apt-get update' | Il est cependant préférable d'éviter d'inclure la commande ''[[:sudo]]'' dans la déclaration de l'**alias** si vous êtes débutant ou pour vous astreindre à demander manuellement l'[[:elevation_privileges|élévation des privilèges]] en gardant à l'esprit la portée des commandes. |
| alias upgrade='sudo apt-get upgrade' | |
| alias distup='sudo apt-get dist-upgrade' | |
| alias sysup='update && upgrade && distup'</file> | |
| |
| il est préférable d'éviter d'inclure la commande sudo dans la déclaration de l'alias si vous êtes débutant ou pour vous astreindre à déclarer des privilèges élevés en gardant à l'esprit la portée des commandes. \\ | Si besoin, la commande : |
| La commande : | |
| <code>sudo !!</code> | <code>sudo !!</code> |
| vous donnera ponctuellement et rapidement les privilèges requis pour la commande précédemment entrée et ayant généré un message d'erreur de privilèges d'exécution. | donne ponctuellement et rapidement les privilèges requis pour la commande précédemment entrée. |
| |
| Hormis ce champs d'application, le principe peut être utilisé afin de transcrire les commandes Windows en commandes Linux Bash</note> | Voir aussi le chapitre //[[#alias avec sudo]]// ci-dessous. |
| | </note> |
| |
| La déclaration de variables alias ne fige pas nécessairement la routine prédéfinie. Vous pouvez passer une commande déclarée dans une variable — comme mentionné précédemment — en lui ajoutant un paramètre lors de l'exécution ponctuelle à la suite de l'alias. \\ Par exemple : | La déclaration d'**alias** ne fige pas nécessairement la commande prédéfinie : on peut passer une commande déclarée par un alias -- comme mentionné précédemment -- et ajouter à celui-ci des paramètre qui seront simplement ajouter à la suite de la commande originale pour son interprétation.\\ |
| <file>alias ins='sudo apt install'</file> | Par exemple avec : |
| Saisir alors (dans un terminal) : | <file>alias sai='sudo apt install'</file> |
| <code>ins nom_programme</code> | Saisir : |
| | <code>sai nom_programme</code> |
| installera le programme souhaité. | installera le programme souhaité. |
| |
| <note important>Depuis Ubuntu 18.04 Bionic Beaver, il n'est plus possible de passer une commande dans le [[terminal|Le terminal GNU/Linux]] accordant les privilèges sudo ou su à un programme possédant une interface graphique ! \\ En effet le paquet gksudo n'est plus présent dans les dépôt de Cannonical. Afin de contourner le problème, vous pouvez déclarer une variable alias paramétrable. | <note tip>Il est à noter que l'[[:console#auto-completion]] avec la touche ''Tab ↹'' fonctionne également avec les **alias**.</note> |
| La commande gksudo se présentait sous la forme suivante : | |
| <code>gksudo gedit /etc/default/apport</code> | |
| Question : comment choisir son éditeur de fichiers favori de façon ponctuelle en complément du nouveau format de commandes utilisé. En effet un alias du type : | |
| <file> alias gksudo=gedit admin://</file> | |
| figerait l'utilisation de gedit ; par contre, l'alias suivant : | |
| <file>alias gksudo=admin://</file> ou bien | |
| <file>alias admin=admin://</file> permettent d'entrer la commande : | |
| <code>gedit admin/etc/default/apport</code> | |
| ou bien : | |
| <code>nano gksudo/etc/default/apport</code></note> | |
| | |
| |
| <note tip>Il est à noter que l'[[wpfr>complètement|autocomplétion]] fonctionne également avec les alias.</note> | ===== Exemples ===== |
| |
| | Chacun·e organise les **alias** à sa manière et il ne serait pas forcément utile de proposer des listes d'alias complètes en exemple, qui pourrait entrer en conflit les unes avec les autres, ou avec des commandes existantes. |
| | |
| | C'est pourquoi pour des exemples de commandes à utiliser comme valeurs d'**alias**, mieux vaut consulter la page //[[:Commandes pratiques]]//. |
| |
| ===== Aller plus loin ===== | ===== Aller plus loin ===== |
| |
| ==== Lister les alias ==== | ==== Lister les alias ==== |
| Il suffit de saisir la commande seule:<code>alias</code> | |
| | Il suffit de saisir la commande ''[[man>alias]]'' seule :<code>alias</code> |
| | |
| | ==== alias avec sudo ==== |
| | |
| | Par défaut les **alias** ne sont pas accessibles en utilisant ''[[:sudo]]'', un exemple courant est de lister un répertoire système : |
| | <code bash>sudo ll |
| | # va retourner |
| | sudo: ll : commande introuvable |
| | </code> |
| | Pour que ce soit possible, ajouter dans les **alias** :((source : [[https://askubuntu.com/a/22043/385361]])) |
| | <file - ~/.bash_aliases> |
| | sudo='sudo ' |
| | </file> |
| |
| ==== Appeler un script ==== | ==== Appeler un script ==== |
| |
| Si vous avez un [[:script]] [[:bash]] mais que vous ne l' avez pas défini dans le [[:variables_d_environnement#variables_liees_aux_emplacements_de_fichiers|$PATH]], il est possible de l' appeler par alias. Par exemple | Si vous avez un [[:script]] [[:bash]] mais qu'il ne se trouve pas dans un [[:chemins|chemin]] correspondant au ''[[:variables_d_environnement#variables_liees_aux_emplacements_de_fichiers|$PATH]]'', il est possible de l'appeler via un **alias**. Par exemple |
| <file>alias monscript='sh -c /home/$USER/Documents/scripts/test/essai.sh'</file> | <file>alias monscript='bash -c ~/Documents/scripts/test/monscript.sh'</file> |
| |
| ==== Ajouter un alias provisoirement ==== | ==== Ajouter un alias provisoirement ==== |
| Pour ajouter un alias uniquement pour la session du [[:terminal]] en cours, il s'agira de saisir la commande alias sous la même [[#Forme d'un alias|forme]] que celle à écrire dans le fichier **.bashrc** ou **.bash_aliases**.\\ | |
| Par exemple, si vous voulez utiliser provisoirement un alias pour supprimer les copies de paquets installés avec l'outil [[:apt-get#suppression_de_paquets_d_installation|apt-get]], vous pouvez saisir: | Pour ajouter un **alias** uniquement pour la [[:session utilisateur|session]] du [[:terminal]] en cours, il s'agira de saisir la commande ''[[man>alias]]'' sous la même [[#Forme d'un alias|forme]] que celle à écrire dans le fichier ''.bash_aliases''. |
| <code>alias agc='sudo apt-get clean'</code> | |
| Jusqu'à la fermeture du [[:terminal]], la commande <code>agc</code>exécutera en fait un ''sudo apt-get clean''. | Par exemple, si vous voulez utiliser provisoirement un **alias** pour supprimer les copies de [[:paquet|paquets]] installés avec l'outil [[:APT]], vous pouvez saisir: |
| | <code>alias sac='sudo apt clean'</code> |
| | Jusqu'à la fermeture du [[:terminal]], la commande <code>sac</code>exécutera en fait un ''sudo [[:apt-cli|apt]] clean''. |
| |
| ==== Retirer un alias provisoirement ==== | ==== Retirer un alias provisoirement ==== |
| Pour retirer, et non [[#échapper un alias]], de la session du [[:terminal]] en cours, il s'agira de saisir | |
| | Pour retirer, et non [[#échapper un alias]], de la session du [[:terminal]] en cours, saisir |
| <code>unalias mon_alias</code> | <code>unalias mon_alias</code> |
| Pour reprendre l'[[#Ajouter un alias provisoirement|exemple précédent]] saisissez | Pour reprendre l'[[#Ajouter un alias provisoirement|exemple précédent]] saisir |
| <code>unalias agc</code> | <code>unalias sac</code> |
| |
| ==== En cas d'homonymie avec les commandes système ==== | ==== En cas d'homonymie avec les commandes système ==== |
| Les noms de commandes donnés dans les alias sont exécutés par priorité, en cas d'homonymie, aux commandes système. | |
| Pour exécuter la commande système, et non celle définie par un alias, une protection peut être employée avec la commande env. | En cas d'homonymie entre un **alias** et une commande système, c'est l'**alias** qui est appelé. |
| <code>alias commande_systeme='commande_systeme -option parametre'</code> | |
| <code>user@host:$ env commande_systeme</code> | Pour exécuter la commande système, et non l'alias, une protection peut être employée avec la commande ''[[man>env.1|env]]''. |
| Ainsi, commande_systeme sera employée sans option ni paramètre. | |
| | Avec : |
| | <file>alias commande_systeme='commande_systeme -option parametre'</file> |
| | on peut utiliser la commande : |
| | <code>env commande_systeme</code> |
| | Ainsi, ''commande_systeme'' sera employée sans option ni paramètre. |
| |
| ==== Échapper un alias ==== | ==== Échapper un alias ==== |
| |
| Lorsque l'on a créé une longue [[#lister les alias|liste]] d'alias, il peut être utile de lancer une commande sans que celui-ci n'intervienne.\\ | Il peut être utile de lancer une commande sans que l'alias ne soit pris en compte. |
| Exemple, vous avez créé cet alias : | |
| | Exemple, vous avez créé cet **alias** : |
| <code> | <code> |
| alias ping='ping -c 4' | alias ping='ping -c 4' |
| </code> | </code> |
| Et vous souhaitez lancer la commande ping sans les options définies dans l'alias, pour cela il suffit de mettre le caractère d'échappement //antislash// (**\**) devant la commande à lancer, comme ceci : | Et vous souhaitez lancer la commande ''[[man>ping]]'' sans les options définies par l'**alias**.\\ |
| | Pour cela il suffit de précéder la commande par le caractère d'échappement //antislash// ''\'', comme ceci : |
| <code> | <code> |
| \ping | \ping |
| ==== Les fonctions ==== | ==== Les fonctions ==== |
| |
| Les alias ne pouvant pas prendre d'argument, il est nécessaire de définir une fonction qui vous le permettra. Il sera alors possible d'indiquer des arguments qui seront passés en fin de la commande mémorisée dans le fichier.\\ | Les alias ne peuvent pas prendre d'argument (en tout cas pas ailleurs qu'en dernière position). |
| | |
| | Les **[[https://www.gnu.org/software/bash/manual/html_node/Shell-Functions.html|fonctions bash]]** le permettent. Grâce à une fonction il est possible d'indiquer des arguments qui seront passés en fin de la commande / appel de la fonction.\\ |
| Par exemple | Par exemple |
| <file> | <file> |
| history | grep -vE -e "[0-9]{1,4} hy |history" | grep -iE -e $1 | less | history | grep -vE -e "[0-9]{1,4} hy |history" | grep -iE -e $1 | less |
| }</file> | }</file> |
| Cette fonction permet de chercher dans l'historique des commandes bash chaque exécution contenant le mot en argument, argument mémorisé dans les variables //$1à $9//.\\ | Cette fonction permet de chercher dans l'historique des commandes bash chaque exécution contenant le mot en argument, argument mémorisé dans les variables ''$1'' à ''$9''. |
| Exemple pour chercher toutes les connexions par ssh : | |
| | Exemple pour chercher toutes les connexions par [[:SSH]] : |
| <code>hy ssh</code> | <code>hy ssh</code> |
| |
| Cependant, __il n'est pas recommandé d'ajouter des fonctions dans le fichier **.bashrc**__, d'une part parce qu'il sera plus lourd à charger, et d'autre part, parce que plus il y aura de modification, plus il y a aura de risque d'erreur et donc qu'il ne se charge plus. | <note important> |
| | Cependant, il n'est pas recommandé d'ajouter des fonctions dans le fichier ''.bashrc'', d'une part parce qu'il sera plus lourd à charger, et d'autre part, parce que plus il y aura de modifications, plus il y a aura de risque d'erreur et donc qu'il ne se charge plus. |
| | </note> |
| |
| Une solution permettant de joindre vos alias et vos fonctions est d'écrire une librairie, et de faire pointer la variable d'environnement $FPATH sur l'emplacement de votre librairie.FIXME Comment? \\ | Une solution permettant de joindre vos **alias** et vos fonctions est d'écrire une librairie de fontions, et de faire pointer la variable d'environnement ''[[:variables_d_environnement#variables_liees_aux_emplacements_de_fichiers|$PATH]]'' sur l'emplacement de votre librairie. |
| FIXME même problème de temps de chargement ou pas avec bash_aliases ? | |
| |
| ===== Problème connu ===== | ===== Problème connu ===== |
| Il se peut que vos alias ne tolèrent pas l’auto-complétion dans le cas de l'utilisation d'apt. Pour remédier à cela [[:tutoriel:comment_modifier_un_fichier|ajouter]] ce contenu au fichier **.bashrc**, en considérant que votre alias est ''apt-in'' pour ''sudo apt install'' (adapter ensuite à vos besoin) : | |
| | Il se peut que vos **alias** ne supportent pas l'[[:console#auto-complétion]] dans le cas de l'utilisation de la commande ''[[:apt-cli|apt]]''. Pour remédier à cela [[:tutoriel:comment_modifier_un_fichier|ajouter]] ce contenu au fichier ''.bashrc'', en considérant que votre **alias** est ''aptin'' pour ''sudo apt install'' (adapter ensuite à vos besoin) : |
| <file> | <file> |
| _apt_install_complete() { | _apt_install_complete() { |
| mapfile -t COMPREPLY < <(apt-cache --no-generate pkgnames "$2"); | mapfile -t COMPREPLY < <(apt-cache --no-generate pkgnames "$2"); |
| } | } |
| complete -F _apt_install_complete apt-in</file> | complete -F _apt_install_complete aptin</file> |
| | |
| | <note tip>Il existe également une application **[[https://github.com/cykerway/complete-alias|complete-alias]]** qui fournit cette fonctionnalité.</note> |
| |
| Il existe également une application nommée complete_alias que vous pourrez trouver sous forme de sources à compiler à l'adresse : [[https://github.com/cykerway/complete-alias|complete alias sur le GitHub]]. | |
| ===== Voir aussi ===== | ===== Voir aussi ===== |
| | |
| * [[https://forum.ubuntu-fr.org/viewtopic.php?id=20437|Sujet du forum]] qui traite du sujet. | * [[https://forum.ubuntu-fr.org/viewtopic.php?id=20437|Sujet du forum]] qui traite du sujet. |
| * [[http://www.it-connect.fr/creer-des-alias-de-commandes-sous-linux%ef%bb%bf/|Créer des Alias de commandes sous Linux]] sur IT-Connect | * [[http://www.it-connect.fr/creer-des-alias-de-commandes-sous-linux%ef%bb%bf/|Créer des Alias de commandes sous Linux]] sur IT-Connect |
| |
| ---- | ---- |
| //Contributeurs : [[utilisateurs:odric88]] [[:utilisateurs:teke]] [[:utilisateurs:Psykocrash]] [[:utilisateurs: BeAvEr]] [[:utilisateurs: mydjey]]// | //[[:Contributeurs]] : [[:utilisateurs:odric88]], [[:utilisateurs:teke]], [[:utilisateurs:Psykocrash]], [[:utilisateurs: BeAvEr]], [[:utilisateurs: mydjey]], [[:utilisateurs: krodelabestiole]].// |