Comment puis-je prérégler des alias pour tous les utilisateurs?

38

J'ai Ubuntu 14.04.2. Je souhaite que tous les utilisateurs aient automatiquement un ensemble d'alias spécifique. Mes alias sont définis dans mon .bashrc personnel, mais je ne veux pas avoir à les copier manuellement dans les autres utilisateurs. Idéalement, il devrait également les définir automatiquement pour les utilisateurs nouvellement créés.

Brian Sizemore
la source
1
Par "prédéfini", voulez-vous dire que vous voulez que tous les nouveaux utilisateurs soient créés avec certains alias, qu’ils peuvent ensuite facilement reconfigurer? Ou voulez-vous dire que vous voulez créer des alias globaux, tels que tous les utilisateurs les auront tout le temps (et pourront les redéfinir / annuler la définition ... mais ne les verront pas quand ils chercheront dans leurs propres fichiers de configuration, qu'ils pourraient trouver embrouillé)? Ou autre chose? Connexes: Entreprise .bashrc et .bash_profile (malgré son titre étrange, je crois que cette question et celle-ci sont en fait assez similaires).
Eliah Kagan

Réponses:

50

Vous pouvez créer un script /etc/profile.d/pour créer des alias pour tous les utilisateurs:

  1. Créez un fichier appelé 00-aliases.sh(ou tout autre nom de fantaisie) dans /etc/profile.d:

    gksu gedit /etc/profile.d/00-aliases.sh
    
  2. Mettez vous alias dans ce fichier. Exemple:

    alias foo='bar --baz'
    alias baz='foo --bar'
    
  3. Sauvegarder le fichier

  4. Redémarrez les terminaux ouverts pour appliquer les modifications.
  5. Prendre plaisir!

Quelques notes:

  • /etc/profileest un fichier global qui est exécuté avant ~/.profile.
  • /etc/profile.d/ est un dossier qui contient des scripts appelés par /etc/profile
  • Quand /etc/profileest appelé (lorsque vous démarrez / connectez-vous à un shell), il recherche tous les fichiers se terminant .shpar /etc/profile.d/et les exécute avec l'une des commandes suivantes:

    source /etc/profile.d/myfile.sh
    

    . /etc/profile.d/myfile.sh
    
  • Je mets 00-avant le nom du fichier pour le faire exécuter avant le reste des scripts.
  • Vous pouvez également ajouter vos alias dans /etc/profile, mais cela n'est pas recommandé.
Hélio
la source
2
Fonctionne parfaitement! Pouvez-vous me donner une brève explication de l’utilité de /etc/profile.d?
Brian Sizemore
1
@BrianSizemore: J'ai mis à jour ma réponse avec quelques explications. Avez-vous une requête plus?
Hélio
1
Cela l'explique très bien. La clarification m'aide à développer d'autres utilisations également. Merci pour votre aide!
Brian Sizemore
4
La méthode dans cette réponse ne doit pas être utilisée. Les alias dans les .shfichiers de /etc/profile.d/(ou /etc/profile) ne seront définis que pour les shells de connexion et ne fonctionneront pas dans les shells interactifs autres que de connexion. Contrairement aux variables d'environnement, bash ne peut pas exporter d'alias vers des processus enfants, pas même des shells de bash. Cette méthode peut sembler fonctionner correctement si elle est uniquement testée dans des shells de connexion, telle que le shell original obtenu en ouvrant une session dans une console virtuelle ou via SSH, mais elle échoue dans leurs shells enfants et dans les shells lancés par les fenêtres de terminaux à interface graphique.
Eliah Kagan
2
@ Helio Ma réponse à Undertanding .bashrc et .bash_profile donne deux autres méthodes, en fonction de l'objectif recherché, accompagnées d'une explication détaillée. Je ne sais pas si telle ou telle question peut être considérée comme un doublon. J'ai commenté cette question pour obtenir des éclaircissements du PO sur leurs besoins. Cette question a une portée plus étroite que celle-là, donc je suppose que je pourrais poster une réponse courte ici couvrant une partie du contenu de ma longue question. (Pour l'instant, j'espère obtenir une réponse du PO à mon commentaire.)
Eliah Kagan
6

Comme indiqué ici , il est probablement préférable d'ajouter des alias globaux dans /etc/bash.bashrc:

alias foo='bar --baz'
alias baz='foo --bar'

, car les scripts entrant /etc/profile.dpeuvent être ignorés pour certains shells (non connectés). Il m'a fallu des heures pour comprendre pourquoi /etc/profile.dcela ne fonctionnait pas.

Voir par exemple https://askubuntu.com/a/606882/ et comprendre .bashrc et .bash_profile pour connaître la distinction entre les shells.

tinlyx
la source
5

Un alias ne fonctionnera que dans un shell. Si vous voulez quelque chose d'aussi accessible qu'un exécutable, vous pouvez ajouter un petit script de raccourci à /usr/bin, par exemple:

#!/bin/sh
ls -l "$@"

Le "$@"transmet tous les arguments à l'exécutable. Le nom du script sera le nom de l'exécutable.

Source: https://unix.stackexchange.com/a/52509/15954

jtpereyda
la source
Cette réponse semble sans lien. La réponse acceptée répond correctement à la question alors que cela semble fournir une solution de contournement.
Brian Sizemore
3
@BrianSizemore J'avais votre même question mais je suis tombé sur cette solution qui était plus appropriée dans mon cas; J'espère que cela aidera d'autres personnes dans une situation similaire. Pour beaucoup de gens, le pseudonyme ira bien.
jtpereyda
1
@BrianSizemore Cette réponse clarifie une idée fausse commune (que j'ai également eue) et est utile et directement liée.
a20
0

/ etc / bashrc

  • Fonctions et alias à l'échelle du système
  • Les choses sur l'environnement vont dans / etc / profile

Ce n'est pas une bonne idée de changer ce fichier à moins que vous ne sachiez ce que vous faites. Il est bien préférable de créer un script shell custom.sh dans /etc/profile.d/ pour apporter des modifications personnalisées à votre environnement, car cela évitera la nécessité de fusionner dans les futures mises à jour.

CentoS
la source