J'ai une instance Linux que j'ai configurée il y a quelque temps. Lorsque je le lance et root
que je me connecte, il y a des variables d’environnement que j’ai configurées, mais je ne me souviens pas ou ne trouve pas d’où elles viennent.
- J'ai vérifié
~/.bash_profile
,/etc/.bash_rc
et tous les scripts de démarrage. - J'ai couru
find
etgrep
en vain.
J'ai l'impression que je dois oublier de regarder dans un endroit évident. Y a-t-il un truc pour comprendre cela?
/etc/environment
est un autre./etc/env.d/*
fichiers. Mais fairegrep -R "YOUR_VARIABLE" /etc/
est probablement le meilleur moyen de le savoir.Réponses:
Si vous utilisez la
env
commande pour afficher les variables, celles-ci doivent apparaître approximativement dans leur ordre de création. Vous pouvez vous en servir pour savoir s'ils ont été définis par le système très tôt au démarrage, ou par un fichier .profile ou un autre fichier de configuration ultérieur. D'après mon expérience, les commandesset
etexport
vont trier leurs variables par ordre alphabétique, ce qui rend la liste moins utile.la source
Si
zsh
est votre shell de connexion:Avec
bash
:Cela simule un shell de connexion et montre tout ce qui est fait (sauf dans les zones où stderr est redirigé avec
zsh
) avec le nom du fichier en cours d’interprétation.Il suffit donc de rechercher le nom de la variable d’environnement dans cette sortie. (vous pouvez utiliser la
script
commande pour vous aider à stocker l'intégralité de la sortie de la session shell ou, pour l'bash
approche, utiliser à la7> file.log
place de7>&2
pour stocker laxtrace
sortie aufile.log
lieu de sur le terminal).Si votre variable n'y est pas, le shell en a probablement hérité au démarrage. Elle a donc été définie auparavant, comme dans la configuration de PAM, dans les
~/.ssh/environment
éléments lus lors du démarrage de votre session X11 (~/.xinitrc
,~/.xsession
) ou lors de la définition du service qui a démarré votre connexion. gestionnaire ou même plus tôt dans certains script de démarrage. Alors unfind /etc -type f -exec grep -F THE_VAR {} +
peut aider.la source
zsh -xl 2>&1
, c'est-à-dire que vous fusionnez les sorties stderr et stdout, vous pouvez grep comme d'habitude.fish
coque?zsh -xl 2>&1
, d'une manière ou d'une autre je ne peux pas grep normalement. Apparemment, la sortie ne contient pas de nouvelles lignes appropriées.PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7>/tmp/$(uuidgen)
, puis grep, sur ce fichier aléatoire également.Quelques endroits à regarder en premier:
À l'échelle du système
/etc/environment
: spécialement conçu pour les variables d'environnement/etc/env.d/*
: variables d'environnement, divisées en plusieurs fichiers/etc/profile
: tous types de scripts d'initialisation/etc/profile.d/*
: scripts d'initialisation/etc/bashrc
,/etc/bash.bashrc
: destiné aux fonctions et aliasSpécifique à l'utilisateur
~/.bash_profile
: initialisation pour les shell de connexion (bash)~/.bashrc
: initialisation pour tous les shells interactifs (bash)~/.profile
: utilisé pour tous les coquillages~/.cshrc
,~/.zshrc
,~/.tcshrc
: Similaire pour les coquilles non bashla source
@Cian est correct. À part utiliser
find
etgrep
, vous ne pouvez pas faire grand chose pour découvrir d’où il vient. Sachant qu’il s’agit bien d’une variable d’environnement, j’essayerais de centrer votre recherche dans / etc / et votre répertoire personnel. RemplacezVARIABLE
par la variable appropriée que vous recherchez:$ grep -r VARIABLE /etc/*
$ grep -r VARIABLE ~/.*
la source
Si vous entrez
set -x
votre.profile
ou.bash_profile
, toutes les commandes shell suivantes seront consignées en erreur standard et vous pourrez voir si l’une d’elles définit ces variables. Vous pouvez aussi mettreset -x
en haut/etc/profile
pour le tracer. La sortie peut être très détaillée, vous pouvez donc le rediriger vers un fichier avec quelque chose commeexec 2>/tmp/profile.log
.Si votre système utilise PAM, recherchez
pam_env
les demandes de charge dans/etc/pam.conf
ou/etc/pam.d/*
. Ce module charge les variables d’environnement à partir des fichiers spécifiés ou d’une valeur par défaut du système si aucun fichier n’est spécifié (/etc/environment
et/etc/security/pam_env.conf
sur Debian et Ubuntu). Un autre fichier avec les définitions de variable d’environnement sous Linux est/etc/login.defs
(recherchez les lignes commençant parENV_
).la source
Recherchez dans vos scripts de démarrage les fichiers qu’ils utilisent comme source
.
(point) ousource
. Ces fichiers pourraient se trouver dans d’autres répertoires à part/etc
et$HOME
.la source
Pour les
zsh
utilisateurs, il peut être utile de suivre les fichiers consultés (au démarrage), ils ne sont pas trop nombreux et on peut les parcourir un par un pour trouver où quelque chose a été défini.la source
Les variables d'environnement sont stockées dans le fichier / etc / profile, alors faites plus de / etc / profile et vérifiez les variables env que vous voulez et si / etc / profile n'est pas présent, lokk pour le fichier .profile dans votre répertoire personnel
la source
/etc/profile
, vous pouvez les définir dans tout le système, par exemplebash
lorsqu'elles sont utilisées comme shell de connexion. Ils sont stockés par le processus shell après avoir lu les définitions à partir de fichiers et / ou de lignes de commande.Par exemple, si vous voulez trouver la variable HISTFILE et sa valeur ou si vous voulez savoir quelles variables sont définies pour l'historique, tapez ceci dans le shell:
la source
echo "$HISTFILE"
:?set
ne vous dit pas quel fichier a défini la variable.