Wie finde ich eine Rogue-Alias-Deklaration?

37

Ich versuche herauszufinden, wo ein bestimmtes aliasdeklariert wurde. Ich habe an allen mir bekannten Orten nach Aliasen gesucht:

  • ~ / .bashrc
  • ~ / .bash_profile
  • / etc / bashrc
  • / etc / profile

Mit keinem Glück.

Ich weiß, dass es eine ist, aliasweil ich dann which COMMANDFolgendes bekomme:

alias COMMAND='/path/to/command'
    /path/to/command

Gibt es eine Möglichkeit, herauszufinden, welche Datei aliasnur den aliasNamen kennt ?

utopisch
quelle
3
Eine verwandte Frage zu Umgebungsvariablen anstelle von Aliasen. Grundsätzlich gibt es keine einfache Möglichkeit, da der Alias ​​an einer beliebigen Stelle festgelegt werden könnte. Versuchen Sie, set -xwie oben vorgeschlagen, zu platzieren, und prüfen Sie, ob dies für Sie eine Einschränkung darstellt.
jw013
1
Sie müssten set -xan der Spitze von /etc/bash_profileoder setzen /etc/bashrc. Warum nicht einfach rennen bash -i -xoder bash -l -x?
Mikel

Antworten:

30

Ich würde nach /etc/profile.d/Beleidigungen Ausschau halten alias.

Sie können auch Folgendes tun, um es zu finden:

grep -r '^alias COMMAND' /etc

Dies wird rekursiv grepdurch Dateien gehen, die nach einer Zeile suchen, die mit beginnt alias COMMAND.

Wenn alles andere fehlschlägt, setzen Sie dies am Ende Ihrer ~/.bashrc

unalias COMMAND
utopisch
quelle
26

Es gibt ein paar Dinge, die Sie ausprobieren können:

  1. Verwenden bash -vSie diese Option, um zu sehen, welche Zeilen beim Starten der Shell gelesen werden
  2. Verwenden bash -xSie diese Option, um zu sehen, welche Befehle während des Shell-Starts ausgeführt werden
  3. mit nur einer Startdatei ausführen

bash -v

Mit dieser -v Option wird bashjede Zeile aus jeder gelesenen Skriptdatei so gedruckt, wie sie gelesen wird.

Beginnen Sie mit dem Laufen

bash -i -v >bash-i.out 2>&1

Warten Sie 5-10 Sekunden und drücken Sie dann Ctrl+C.

Auf diese Weise erhalten Sie eine einzelne Datei, die so heißt bash-i.out, als würden alle Startdateien zusammengeführt (oder verkettet).

Verwenden Sie dann lessdie Datei zu öffnen und mit dem Alias suchen /aliasname.

Vergleichen Sie nun, wo dieser Alias ​​in Bezug auf andere Zeilen in der Datei angezeigt wird. Zum Beispiel auf den meisten Systemen, /etc/bash.bashrchat einen Kommentar an der Spitze , die sagt , /etc/bash.bashrcund ~/.bashrceine zu hat.

Wenn es sich über Ihrer befindet ~/.bashrc, ist es wahrscheinlich eine Startdatei, in /etcder der Alias ​​definiert wird, ansonsten befindet es sich in Ihrer ~/.bashrcoder einer Datei, die über sourceoder .(Punktbefehl) eingeschlossen wird.

Wenn der Alias ​​nicht angezeigt wird, versuchen Sie es

bash -l -v >bash-l.out 2>&1

Das bedeutet, dass bash eine Login-Shell ist, die zum Beispiel verschiedene Startdateien liest /etc/profileund ~/.bash_profileanstelle von /etc/bash.bashrcund ~/.bashrc.

bash -x

Wenn bash -vSie keine eindeutige Antwort erhalten, versuchen Sie es mit running. Dabei bash -xwerden die Befehle gedruckt, die von der Shell ausgeführt werden, und nicht die Zeilen, die von der Shell gelesen werden.

Die Methode ist im Grunde die gleiche wie oben, mit Ausnahme der Änderung -vvon -x. (Sie können beide bei Bedarf zusammen verwenden.)

Führen Sie nur eine Startdatei aus

bash -i --rcfile="$HOME/.bashrc"

und sehen, ob Sie den Alias ​​haben.

Versuchen Sie dasselbe mit rcfileset to, /etc/bash.bashrcwenn Ihr System es hat.

Dann versuche es

bash -l --rcfile="$HOME/.bash_profile"

und machen Sie dasselbe mit jeder Bash-Startdatei, die profilein ihrem Namen steht, z . B. change $HOME/.bash_profileto /etc/profile.

Auf welche Weise der Alias ​​angezeigt wird, zeigt an, welche Datei Sie sich ansehen sollten.

Mikel
quelle
2

Vielleicht dein .xinitrc? Sie sollten auch überprüfen, ob Ihre .bashrcoder .bash_profileandere Dateien darin enthalten sind. Ich behalte beispielsweise alle meine Aliase in einer separaten Datei, auf die mit diesem Befehl verwiesen wird:

[ -f ~/.bash_alias ] && source $HOME/.bash_alias

Einige Fragen, die auch helfen könnten: Ist dies für einen regulären oder Root-Benutzer? Welcher Befehl ist das? Welcher Geschmack von Linux?

SigueSigueBen
quelle
0

Ich folge der sehr üblichen Praxis, meine Alias-Definitionen in zu setzen

~/.bash_aliases

und dann das von .bashrc mit aufrufen

[ -f ~/.bash_aliases ] && source $HOME/.bash_aliases
Michael Durrant
quelle
Kann ich vermuten, dass Sie .bash_aliases in Ihrem zweiten Befehl anstelle von .bash_alias bedeuten?
Stagl