Finden Sie heraus, wo $PATH definiert ist

Finden Sie heraus, wo $PATH definiert ist

Ich habe vor kurzem ein Arch-Linux-System installiert. Wenn ich tippe

echo $PATH

es verweist (unter anderem) auf ein Verzeichnis in meinem, das /home/user/dirich, soweit ich mich erinnern kann, irgendwo eingerichtet habe. Ich habe es auch als Root-Benutzer, also kann es nicht drin sein ~/.bashrcund ist auch nicht drin /root/.bashrc. Ich habe auch drinnen nachgesehen /etc/profile, /etc/bash.bashrckonnte es aber auch dort nicht finden.

Gibt es eine Möglichkeit herauszufinden, wo es eingestellt ist?

Antwort1

Versuchen Sie, in allen Dateien in folgendem Verzeichnis nach dem Verzeichnis zu suchen /etc:

sudo grep -r "/home/user/dir" /etc

Der -rSchalter ermöglicht grepdie Suche /home/user/dirimInhaltaller Dateien im Verzeichnis /etcund seinen Unterverzeichnissen.

Ausgrep(1) - Linux-Manpage:

-DAKTION,--directories=AKTION

Wenn eine Eingabedatei ein Verzeichnis ist, verwenden Sie ACTION, um sie zu verarbeiten. Standardmäßig ist ACTIONlesen, was bedeutet, dass Verzeichnisse genauso gelesen werden, als wären sie normale Dateien. Wenn ACTIONüberspringen, werden Verzeichnisse stillschweigend übersprungen. Wenn ACTIONrekursiv, grep liest alle Dateien in jedem Verzeichnis rekursiv; dies entspricht dem-RMöglichkeit.

Wenn das nicht klappt, können Sie die Suche einfach erweitern aufalleDateien:

sudo grep -r "/home/user/dir" /

Oder Sie könnten nach allen Dateien suchen, die die PATHVariable ändern:

sudo grep -r "PATH=" /

Antwort2

Es ist normalerweise keine gute Idee, Benutzerverzeichnisse als Root im globalen Pfad abzulegen ;) Haben Sie die /etc/environmentDatei überprüft?

Antwort3

@Dennis macht mich auf eine nette Idee aufmerksam! Ich habe in meinem gesucht /etcund es gefunden, aber mit einem anderen Befehl, da sein Befehl nur nach Dateinamen sucht (soweit ich weiß).

Das, was ich erfolgreich verwendet habe, war

find / -type f -exec grep -i /home/user/dir '{}' \; -print

Antwort4

Wenn Sie tief in Ihrem PATH nach etwas suchen, das definiert ist, können Sie diese Alternative ausprobieren mitder Silbersucherfür die schnelle Suche.

Standardmäßig werden Übereinstimmungen mit Zeilennummern ausgegeben. Kombinieren Sie es also mit , egrepum nur die Ausgabe der Dateinamen zu erhalten. Es werden auch Zeilennummern ausgegeben, die Übereinstimmungen enthalten, um cutDateinamen zu isolieren, uniqwenn Sie keine Duplikate möchten. Natürlich können alle Pipe-Befehle weggelassen werden, wenn Sie keine vollständige Ausgabe der Übereinstimmungen wünschen.

ag -s '/home/user/dir' | egrep '^\d+' | cut -d ':' -f 1 | uniq

verwandte Informationen