Ich habe eine Linux-Instanz, die ich vor einiger Zeit eingerichtet habe. Wenn ich es starte und mich anmelde, root
gibt es einige Umgebungsvariablen, die ich eingerichtet habe, aber ich kann mich nicht erinnern oder herausfinden, woher sie stammen.
- Ich habe überprüft
~/.bash_profile
,/etc/.bash_rc
und alle Startskripts. - Ich bin gelaufen
find
undgrep
ohne Erfolg.
Ich habe das Gefühl, dass ich vergessen muss, irgendwo auf der Hand zu liegen. Gibt es einen Trick, um das herauszufinden?
/etc/environment
ist ein anderer./etc/env.d/*
Dateien. Aber diesgrep -R "YOUR_VARIABLE" /etc/
ist wahrscheinlich der beste Weg, es herauszufinden.Antworten:
Wenn Sie den
env
Befehl verwenden, um die Variablen anzuzeigen, sollten sie ungefähr in der Reihenfolge angezeigt werden, in der sie erstellt wurden. Sie können dies als Anhaltspunkt dafür verwenden, ob sie sehr früh beim Start vom System oder von einem späteren Profil oder einer anderen Konfigurationsdatei festgelegt wurden. Nach meiner Erfahrung, dieset
undexport
werden Befehle ihre Variablen nach alphabetischer Reihenfolge sortieren, so dass Angebot nicht so nützlich ist.quelle
Wenn
zsh
ist Ihre Login-Shell:Mit
bash
:Das simuliert eine Login-Shell und zeigt alles, was gemacht wird (außer in Bereichen, in denen stderr umgeleitet wird
zsh
), zusammen mit dem Namen der Datei, die gerade interpretiert wird.Sie müssen also in dieser Ausgabe nur nach dem Namen Ihrer Umgebungsvariablen suchen. (Sie können den
script
Befehl verwenden, um die gesamte Ausgabe der Shell-Sitzung zu speichern , oder für denbash
Ansatz verwenden , um die Ausgabe nicht auf dem Terminal ,7> file.log
sondern auf7>&2
zu speichern .)xtrace
file.log
Wenn Ihre Variable nicht vorhanden ist, hat sie die Shell wahrscheinlich beim Start geerbt. Sie wurde also zuvor wie in der PAM-Konfiguration festgelegt
~/.ssh/environment
oder beim Start der X11-Sitzung (~/.xinitrc
,~/.xsession
) oder bei der Service-Definition festgelegt, die Ihre Anmeldung gestartet hat Manager oder sogar früher in einem Boot-Skript. Dannfind /etc -type f -exec grep -F THE_VAR {} +
kann ein helfen.quelle
zsh -xl 2>&1
, dh die stderr und stdout ouputs zusammenführen, können Sie wie gewohnt grep.fish
Shell zu tun ?zsh -xl 2>&1
, kann ich irgendwie nicht normal greifen. Anscheinend enthält die Ausgabe keine richtigen Zeilenumbrüche oder ähnliches.PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7>/tmp/$(uuidgen)
diese zufällige Datei verwenden und dann auch darauf zugreifen.Einige Orte, um zuerst zu schauen:
Systemweit
/etc/environment
: speziell für Umgebungsvariablen gedacht/etc/env.d/*
: Umgebungsvariablen, aufgeteilt in mehrere Dateien/etc/profile
: Alle Arten von Initialisierungsskripten/etc/profile.d/*
: Initialisierungsskripte/etc/bashrc
,/etc/bash.bashrc
: bestimmt für Funktionen und AliaseBenutzerspezifisch
~/.bash_profile
: Initialisierung für Login (Bash-) Shells~/.bashrc
: Initialisierung für alle interaktiven (Bash-) Shells~/.profile
: für alle Muscheln verwendet~/.cshrc
,~/.zshrc
,~/.tcshrc
: Ähnliches gilt für Nicht-Bash - Shellsquelle
@Cian ist richtig. Abgesehen von der Verwendung von
find
undgrep
gibt es nicht viel, was Sie tun können, um herauszufinden, woher es kommt. Da ich weiß, dass es sich tatsächlich um eine Umgebungsvariable handelt, würde ich versuchen, Ihre Suche in / etc / und Ihrem Home-Verzeichnis zu fokussieren. Ersetzen SieVARIABLE
durch die entsprechende Variable, nach der Sie suchen:$ grep -r VARIABLE /etc/*
$ grep -r VARIABLE ~/.*
quelle
Wenn Sie
set -x
Ihr.profile
oder.bash_profile
eingeben, werden alle nachfolgenden Shell-Befehle als Standardfehler protokolliert und Sie können sehen, ob einer von ihnen diese Variablen festlegt. Sie können es auchset -x
an die Spitze setzen/etc/profile
, um es zu verfolgen. Die Ausgabe kann sehr ausführlich sein, so dass Sie sie möglicherweise in eine Datei mit so etwas wie umleiten möchtenexec 2>/tmp/profile.log
.Wenn Ihr System PAM verwendet, suchen Sie
pam_env
in/etc/pam.conf
oder nach Ladeanforderungen/etc/pam.d/*
. Dieses Modul lädt Umgebungsvariablen aus den angegebenen Dateien oder aus einem Systemstandard, wenn keine Datei angegeben ist (/etc/environment
und/etc/security/pam_env.conf
unter Debian und Ubuntu). Eine andere Datei mit Umgebungsvariablendefinitionen unter Linux ist/etc/login.defs
(suchen Sie nach Zeilen, die mit beginnenENV_
).quelle
Überprüfen Sie Ihre Startskripte auf Dateien, die sie mit
.
(Punkt) oder (Punkt) erzeugensource
. Diese Dateien können sich neben/etc
und in anderen Verzeichnissen befinden$HOME
.quelle
Für
zsh
Benutzer kann das Verfolgen der Dateien, auf die zugegriffen wird (während des Startvorgangs), nützlich sein. Sie sind nicht zu zahlreich und können einzeln durchsucht werden, um herauszufinden, wo etwas definiert wurde.quelle
Umgebungsvariablen werden in der Datei / etc / profile gespeichert, führen Sie also mehr / etc / profile aus, und überprüfen Sie, ob die gewünschten Umgebungsvariablen vorhanden sind. Wenn / etc / profile nicht vorhanden ist, suchen Sie in Ihrem Ausgangsverzeichnis nach der Datei .profile
quelle
/etc/profile
, sondern können dort systemweit definiert werden, z. B.bash
wenn sie als Login-Shell verwendet werden. Sie werden vom Shell-Prozess gespeichert, nachdem Definitionen aus Dateien und / oder der Befehlszeile eingelesen wurden.Wenn Sie beispielsweise die Variable HISTFILE und ihren Wert suchen oder wissen möchten, welche Variablen für den Verlauf definiert sind, geben Sie Folgendes in die Shell ein:
quelle
echo "$HISTFILE"
:?set
verrät dir nicht, welche Datei die Variable definiert hat.