Möglichkeit zur Ermittlung, wo bestimmte globale Parameter konfiguriert sind

Möglichkeit zur Ermittlung, wo bestimmte globale Parameter konfiguriert sind

Mögliches Duplikat:
So ermitteln Sie, woher eine Umgebungsvariable stammt

Ich frage mich, ob es eine Möglichkeit gibt, den Speicherort der Datei zu ermitteln, in der eine bestimmte Konfiguration vorhanden ist. Ich weiß beispielsweise, dass ich einen globalen Parameter habe TMOUTund ihn ändern möchte, aber ich weiß nicht, WO er konfiguriert ist. Ich bin mir bewusstDasFrage, die hier bereits gestellt wurde. Ich würde jedoch gerne wissen, ob es eine andere Möglichkeit gibt, außer die Reihenfolge des Auftretens der Variablen gemäß dem envBefehl zu untersuchen.

Antwort1

Die Ausführung dieses Befehls dauert lange (da er jede Datei im System prüft), aber er sollte die Datei finden:

find / -type f -print0 | xargs -0 grep -w 'TMOUT=' /dev/null

Ein alternativer Ansatz besteht darin, herauszufinden, unter welchen Umständen es gesetzt wird, beispielsweise indem Sie prüfen, ob es gesetzt wird, wenn die Shell keine Login-Shell ist ( env -i bash) und ob es gesetzt ist ( env -i bash --login). Sie können Dateien in manuell prüfen $HOME, beispielsweise .profile, .env, .bashrcoder .bash_profile. Es gibt auch einige Dateien, in /etc/denen Umgebungsvariablen angegeben sind; es könnte in jeder dieser Dateien gesetzt werden.

Wenn Ihre Login-Shell ist ksh, werden Sie feststellen, dass dies $TMOUTvon der KSH-Shell selbst festgelegt wird.


Bearbeiten:um einige der weniger offensichtlichen Funktionen der obigen Befehlszeile zu erklären:

Die Redewendung find ... -print0 | xargs -0 ...ist recht gebräuchlich. Der Sinn der Verwendung -print0von anstelle der Standardeinstellung -printbesteht darin, dass die Dateinamen im Fall von mit einem ASCII-NUL beendet werden -print0. Dies bedeutet, dass Dateinamen, die eine tatsächliche neue Zeile enthalten, korrekt dargestellt werden. Die Übergabe der -0Option an xargsmacht einfach xargsdieselbe Konvention verständlich.

Es ist auch eine Erklärung wert , wie man routinemäßig /dev/nullals erstes Argument an übergibt grep. Da Sie nur das Dateiende erhalten, wenn Sie von lesen /dev/null, wird es nie mit einem nicht leeren String übereinstimmen grep. Daher wird es keine Treffer für diese Datei geben. Wir geben es nur in der grep-Befehlszeile an, um den Fall richtig zu behandeln, dass beim letzten Ausführen von xargsgrep nur noch eine Datei zu durchsuchen ist. Wenn grep nur ein Dateiargument hat, listet es die Treffer auf, ohne die Befehlszeile anzugeben. So:

~/tmp/t$ echo hello > a
~/tmp/t$ echo hi > b
~/tmp/t$ grep '^h.*' a
hello
~/tmp/t$ grep '^h.*' a b
a:hello
b:hi

Antwort2

Dies ist zwar keine genaue Antwort auf Ihre Frage, beantwortet aber möglicherweise einen Teil davon.

StackOverflow: Linux: Wo werden Umgebungsvariablen gespeichert?

BEARBEITEN:

Beim Debuggen meiner Shell-Skripte füge ich normalerweise -x hinzu. #!/bin/bash -x Sie können es auch von der Shell aus ausführen alsbash -x

# su - test

    test$ bash -x
     unset a r
    + . /etc/bash_completion.d/yast2-completion.sh
       **(file sourced)**
    ++ YAST=/sbin/yast
    ++ YAST_MODLIST=()
       **(variables set from file)**
       #....
    ++ /usr/bin/dircolors -b /etc/DIR_COLORS
    + eval 'LS_COLORS='\''no=00
       #....

verwandte Informationen