Wie kann ich Aliase für alle Benutzer voreinstellen?

38

Ich habe Ubuntu 14.04.2. Ich möchte, dass alle Benutzer automatisch einen bestimmten Satz von Aliasen haben. Ich habe meine Aliase in meinem persönlichen .bashrc festgelegt, möchte sie aber nicht manuell in die anderen Benutzer kopieren müssen. Idealerweise sollte dies auch für neu erstellte Benutzer automatisch festgelegt werden.

Brian Sizemore
quelle
1
Mit "voreingestellt" meinen Sie, dass alle neuen Benutzer mit bestimmten Aliasnamen erstellt werden sollen, die sie dann einfach neu konfigurieren können? Oder möchten Sie globale Aliase erstellen, sodass alle Benutzer sie jederzeit haben (und sie neu definieren / deren Definition aufheben können ... aber sie nicht sehen, wenn sie ihre eigenen Konfigurationsdateien durchsuchen, die sie möglicherweise finden verwirrend)? Oder etwas anderes? Related: Undertanding .bashrc und .bash_profile (trotz des seltsamen Titels glaube ich, dass diese und diese Frage eigentlich ziemlich ähnlich sind).
Eliah Kagan

Antworten:

50

Sie können ein Skript in erstellen /etc/profile.d/, um Aliase für alle Benutzer zu erstellen :

  1. Erstellen Sie eine Datei mit dem Namen 00-aliases.sh(oder einem anderen ausgefallenen Namen) in /etc/profile.d:

    gksu gedit /etc/profile.d/00-aliases.sh
    
  2. Fügen Sie Aliase in diese Datei ein. Beispiel:

    alias foo='bar --baz'
    alias baz='foo --bar'
    
  3. Speicher die Datei

  4. Starten Sie alle offenen Terminals neu, um die Änderungen zu übernehmen.
  5. Genießen!

Einige Notizen:

  • /etc/profileist eine globale Datei, die vorher ausgeführt wird ~/.profile.
  • /etc/profile.d/ ist ein Ordner, der Skripte enthält, die von aufgerufen werden /etc/profile
  • Wenn /etc/profileaufgerufen wird (wenn Sie Start / einloggen , um einen Shell), sucht es nach allen Dateien , die auf .shin /etc/profile.d/und führt sie mit einem dieser Befehle ein :

    source /etc/profile.d/myfile.sh
    

    . /etc/profile.d/myfile.sh
    
  • Ich setze 00-vor den Dateinamen, damit er vor den restlichen Skripten ausgeführt wird.
  • Sie können auch Ihre Aliase hinzufügen /etc/profile, dies wird jedoch nicht empfohlen.
Helio
quelle
2
Funktioniert perfekt! Können Sie mir kurz erklären, wozu /etc/profile.d dient?
Brian Sizemore
1
@ BrianSizemore: Ich habe meine Antwort mit ein paar Erklärungen aktualisiert. Haben Sie noch Fragen?
Helio,
1
Das erklärt es sehr gut. Die Klarstellung hilft mir, auch andere Verwendungen zu entwickeln. Danke für all die Hilfe!
Brian Sizemore
4
Die Methode in dieser Antwort sollte nicht verwendet werden. Aliase in .shDateien in /etc/profile.d/(oder /etc/profile) werden nur für Anmeldeshells definiert und funktionieren nicht in interaktiven Shells , die keine Anmeldeshells sind. Im Gegensatz zu Umgebungsvariablen kann bash keine Aliase in untergeordnete Prozesse exportieren, nicht einmal untergeordnete Bash-Shells. Diese Methode scheint ordnungsgemäß zu funktionieren, wenn sie nur in Anmeldeshells getestet wird, z. B. in der ursprünglichen Shell, die durch Anmelden an einer virtuellen Konsole oder über SSH erhalten wurde. Sie schlägt jedoch in ihren untergeordneten Shells und auch in Shells fehl, die von GUI-Terminalfenstern gestartet wurden.
Eliah Kagan
2
@Helio Meine Antwort auf Undertanding .bashrc und .bash_profile enthält je nach Ziel zwei weitere Methoden sowie eine ausführliche Erläuterung. Ich bin mir nicht sicher, ob diese oder jene Frage als Duplikat angesehen werden kann. Ich habe diese Frage kommentiert, um vom OP Klarheit über ihre Bedürfnisse zu erhalten. Diese Frage mehr ist eng scoped , als dass man so ich nehme es in Ordnung sein würde für mich hier eine kurze Antwort zu schreiben dort ein Teil des Materials in meiner langen eine Abdeckung. (Im Moment hoffe ich, eine Antwort des OP auf meinen Kommentar zu erhalten.)
Eliah Kagan,
6

Wie hier ausgeführt , ist es wahrscheinlich besser, globale Aliase hinzuzufügen in /etc/bash.bashrc:

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

, da Skripte in/etc/profile.d bestimmten (nicht angemeldeten) Shells ignoriert werden können . Ich habe Stunden gebraucht, um herauszufinden, warum /etc/profile.des nicht funktioniert hat.

Siehe zB https://askubuntu.com/a/606882/ und Verstehen Bashrc und Bash_profile für die Unterscheidung zwischen den Mänteln.

Tinlyx
quelle
5

Ein Alias ​​funktioniert nur innerhalb einer Shell. Wenn Sie etwas möchten, das so allgemein zugänglich ist wie eine ausführbare Datei, können Sie ein kleines Verknüpfungsskript hinzufügen /usr/bin, z.

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

Der "$@"übergibt alle Argumente an die ausführbare Datei. Der Name des Skripts ist der Name der ausführbaren Datei.

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

jtpereyda
quelle
Diese Antwort scheint nichts miteinander zu tun zu haben. Die akzeptierte Antwort beantwortet die Frage korrekt, während dies eine Problemumgehung zu sein scheint.
Brian Sizemore
3
@BrianSizemore Ich hatte dieselbe Frage, bin aber auf diese Lösung gestoßen, die in meinem Fall angemessener war. hoffentlich hilft es anderen in einer ähnlichen Situation. Für viele Leute ist der Alias ​​in Ordnung.
Jtpereyda
1
@ BrianSizemore Diese Antwort klärt ein häufiges Missverständnis (das ich auch hatte) und ist nützlich und direkt im Zusammenhang.
a20,
0

/ etc / bashrc

  • Systemweite Funktionen und Aliase
  • Umgebungssachen gehen in / etc / profile

Es ist NICHT ratsam, diese Datei zu ändern, es sei denn, Sie wissen, was Sie tun. Es ist viel besser, ein custom.sh-Shell-Skript in /etc/profile.d/ zu erstellen, um benutzerdefinierte Änderungen an Ihrer Umgebung vorzunehmen, da dies das Zusammenführen in zukünftigen Updates unnötig macht.

CentoS
quelle