it-swarm-tr.com

Bir ortam değişkeninin nereden geldiğini nasıl belirleyebilirim?

Bir süre önce kurduğum bir Linux örneğim var. Çalıştırdığımda ve root olarak giriş yaptığımda, kurduğum bazı ortam değişkenleri var, ancak nereden geldiğini hatırlayamıyorum veya bulamıyorum.

  • Kontrol ettim ~/.bash_profile, /etc/.bash_rc ve tüm başlangıç ​​komut dosyaları.
  • find ve grep'yi boşuna çalıştırdım.

Açık bir yere bakmayı unutmam gerektiğini hissediyorum. Bunu anlamak için bir hile var mı?

177
Joel

Değişkenleri görüntülemek için env komutunu kullanırsanız, kabaca oluşturuldukları sırayla görünmelidirler. Bunu, sistem tarafından önyüklemenin çok erken saatlerinde veya daha sonraki bir .profile veya başka bir yapılandırma dosyasıyla ayarlanmış olup olmadıklarına yönelik bir kılavuz olarak kullanabilirsiniz. Deneyimlerime göre, set ve export komutları değişkenlerini alfabetik sıraya göre sıralayacak, böylece liste o kadar kullanışlı olmayacaktır.

63
Ben Combee

zsh giriş Shell'iniz ise:

zsh -xl

bash ile:

PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7>&2

Bu bir oturum açma Kabuğunu simüle eder ve şu anda yorumlanmakta olan dosyanın adıyla birlikte yapılan her şeyi (stderr'ın zsh ile yönlendirildiği alanlar hariç) gösterir.

Tek yapmanız gereken, bu çıktıdaki ortam değişkeninizin adını aramaktır. (Shell oturumu çıktısının tamamını depolamanıza yardımcı olması için script komutunu kullanabilirsiniz veya bash yaklaşımı için 7> file.log onun yerine 7>&2xtrace çıktısını file.log yerine terminal).

Değişkeniniz orada değilse, büyük olasılıkla Shell başlangıçta onu devralmıştır, bu nedenle daha önce PAM yapılandırmasında olduğu gibi ~/.ssh/environment veya X11 oturumu başlatmanızda okunan şeyler (~/.xinitrc, ~/.xsession) veya oturum açma yöneticinizi başlatan hizmet tanımına, hatta bazı önyükleme komut dosyalarında önceden ayarlanmış. Sonra bir find /etc -type f -exec grep -F THE_VAR {} + yardımcı olabilir.

158

İlk olarak bazı yerler:

Sistem çapında

  • /etc/environment: özellikle ortam değişkenleri içindir
  • /etc/env.d/*: birden çok dosyaya bölünmüş ortam değişkenleri
  • /etc/profile: her türlü başlatma komut dosyası
  • /etc/profile.d/*: başlatma komut dosyaları
  • /etc/bashrc, /etc/bash.bashrc: işlevler ve takma adlar içindir

Kullanıcıya özel

  • ~/.bash_profile: giriş (bash-) mermileri için başlatma
  • ~/.bashrc: tüm etkileşimli (bash) mermiler için başlatma
  • ~/.profile: tüm mermiler için kullanılır
  • ~/.cshrc, ~/.zshrc, ~/.tcshrc: bash olmayan mermiler için benzer
65
beetstra

@Cian doğru. find ve grep kullanmak dışında, nereden geldiğini keşfetmek için yapabileceğiniz çok şey yok. Gerçekten bir ortam değişkeni olduğunu bilerek, aramanızı/etc/ve home dizininize odaklamaya çalışırdım. VARIABLE ifadesini, aradığınız uygun değişkenle değiştirin:

$ grep -r VARIABLE /etc/*

$ grep -r VARIABLE ~/.*

34
Aaron Toponce

set -x veya .profile içine .bash_profile koyarsanız, sonraki Shell komutlarının tümü standart hataya kaydedilir ve bunlardan birinin bu değişkenleri ayarlayıp ayarlamayacağını görebilirsiniz. İzlemek için set -x/etc/profile üstüne konabilir. Çıktı çok ayrıntılı olabilir, bu nedenle exec 2>/tmp/profile.log gibi bir dosyaya yönlendirmek isteyebilirsiniz.

Sisteminiz PAM kullanıyorsa, pam_env veya /etc/pam.conf içinde /etc/pam.d/* yükleme isteklerini arayın. Bu modül ortam değişkenlerini belirtilen dosyalardan veya dosya belirtilmemişse sistem varsayılanından yükler (Debian ve Ubuntu'da /etc/environment ve /etc/security/pam_env.conf). Linux'ta ortam değişkeni tanımlarına sahip başka bir dosya /etc/login.defs'dir (ENV_ ile başlayan satırları arayın).

Başlangıç ​​komut dosyalarınızda . (Nokta) veya source kullanarak onlar kaynağı olan dosyalar olup olmadığını kontrol edin. Bu dosyalar /etc Ve $HOME Dışında başka dizinlerde de olabilir.

zsh kullanıcıları için, (başlangıç ​​sırasında) erişilen dosyaları izlemek yararlı olabilir, çok fazla değildir ve bir şeyin nerede tanımlandığını bulmak için tek tek bunlara bakabilir.

zsh -o SOURCE_TRACE
4
Erik Zivkovic

ortam değişkenleri/etc/profile dosyasında saklanır, bu yüzden daha fazla/etc/profile yapın ve istediğiniz env değişkenlerini kontrol edin ve/etc/profile yoksa, ana dizininizdeki .profile dosyası için

0
Sarvesh Pawar