Saya memiliki turunan Linux yang saya atur beberapa waktu lalu. Ketika saya menjalankannya dan masuk karena root
ada beberapa variabel lingkungan yang saya atur tetapi saya tidak dapat mengingat atau menemukan dari mana mereka berasal.
- Aku sudah memeriksa
~/.bash_profile
,/etc/.bash_rc
dan semua skrip startup. - Saya sudah menjalankan
find
dangrep
tidak berhasil.
Saya merasa seperti saya harus lupa untuk melihat di suatu tempat yang jelas. Apakah ada trik untuk mencari tahu ini?
/etc/environment
satu lagi./etc/env.d/*
file. Tetapi melakukangrep -R "YOUR_VARIABLE" /etc/
mungkin adalah cara terbaik untuk mengetahuinya.Jawaban:
Jika Anda menggunakan
env
perintah untuk menampilkan variabel, mereka akan muncul secara kasar dalam urutan di mana mereka dibuat. Anda dapat menggunakan ini sebagai panduan untuk menentukan apakah mereka ditetapkan oleh sistem pada awal boot, atau oleh .profile atau file konfigurasi lainnya. Dalam pengalaman saya, perintahset
danexport
akan mengurutkan variabel-variabel mereka berdasarkan urutan abjad, sehingga cantuman tidak berguna.sumber
Jika
zsh
shell login Anda:Dengan
bash
:Itu akan mensimulasikan shell login dan menunjukkan semua yang dilakukan (kecuali di daerah di mana stderr diarahkan dengan
zsh
) bersama dengan nama file yang saat ini sedang ditafsirkan.Jadi yang perlu Anda lakukan adalah mencari nama variabel lingkungan Anda di output itu. (Anda dapat menggunakan
script
perintah untuk membantu Anda menyimpan seluruh output sesi shell, atau untukbash
pendekatan tersebut, gunakan7> file.log
alih-alih7>&2
untuk menyimpanxtrace
outputfile.log
bukan pada terminal).Jika variabel Anda tidak ada di sana, maka mungkin shell mewarisi itu pada startup, jadi itu ditetapkan sebelumnya seperti dalam konfigurasi PAM, dalam
~/.ssh/environment
, atau hal-hal yang dibaca pada startup sesi X11 Anda (~/.xinitrc
,~/.xsession
) atau ditetapkan pada definisi layanan yang memulai login Anda manajer atau bahkan lebih awal dalam beberapa skrip boot. Makafind /etc -type f -exec grep -F THE_VAR {} +
mungkin membantu.sumber
zsh -xl 2>&1
, yaitu menggabungkan stderr dan ouputs stdout, Anda dapat grep seperti biasa.fish
shell?zsh -xl 2>&1
, entah bagaimana saya tidak bisa grep secara normal. Rupanya output tidak mengandung baris baru yang tepat atau sesuatu.PS4='+$BASH_SOURCE> ' BASH_XTRACEFD=7 bash -xl 7>/tmp/$(uuidgen)
, lalu melihat file acak itu juga.Beberapa tempat yang harus dilihat terlebih dahulu:
Sistem luas
/etc/environment
: khusus dimaksudkan untuk variabel lingkungan/etc/env.d/*
: variabel lingkungan, pisah dalam banyak file/etc/profile
: semua jenis skrip inisialisasi/etc/profile.d/*
: skrip inisialisasi/etc/bashrc
,/etc/bash.bashrc
: dimaksudkan untuk fungsi dan aliasKhusus pengguna
~/.bash_profile
: inisialisasi untuk shell login (bash-)~/.bashrc
: inisialisasi untuk semua shell (bash-) interaktif~/.profile
: digunakan untuk semua kerang~/.cshrc
,~/.zshrc
,~/.tcshrc
: Serupa untuk kerang non-pestasumber
@Cian benar. Selain menggunakan
find
dangrep
, tidak banyak yang dapat Anda lakukan untuk menemukan dari mana asalnya. Mengetahui bahwa itu memang variabel lingkungan, saya akan mencoba memfokuskan pencarian Anda di / etc / dan direktori home Anda. GantiVARIABLE
dengan variabel yang sesuai yang Anda cari:$ grep -r VARIABLE /etc/*
$ grep -r VARIABLE ~/.*
sumber
Jika Anda menempatkan
set -x
di Anda.profile
atau.bash_profile
, semua perintah shell selanjutnya akan login ke standard error dan Anda dapat melihat apakah salah satu dari mereka menetapkan variabel-variabel ini. Anda dapat menempatkanset -x
di bagian atas/etc/profile
untuk melacaknya juga. Outputnya bisa sangat bertele-tele, jadi Anda mungkin ingin mengarahkan ulang ke file dengan sesuatu sepertiexec 2>/tmp/profile.log
.Jika sistem Anda menggunakan PAM, cari
pam_env
permintaan pemuatan di/etc/pam.conf
atau/etc/pam.d/*
. Modul ini memuat variabel lingkungan dari file yang ditentukan, atau dari default sistem jika tidak ada file yang ditentukan (/etc/environment
dan/etc/security/pam_env.conf
pada Debian dan Ubuntu). File lain dengan definisi variabel lingkungan di Linux adalah/etc/login.defs
(cari baris yang dimulai denganENV_
).sumber
Periksa skrip startup Anda untuk file yang mereka sumber menggunakan
.
(dot) atausource
. File-file itu bisa berada di direktori lain selain/etc
dan$HOME
.sumber
Untuk
zsh
pengguna, melacak file yang diakses (saat startup) dapat bermanfaat, mereka tidak terlalu banyak dan satu dapat melihat melalui mereka satu per satu untuk menemukan di mana sesuatu didefinisikan.sumber
variabel lingkungan disimpan di / etc / file profil jadi lakukan lebih banyak / etc / profile dan cukup periksa variabel env yang Anda inginkan dan jika / etc / profile tidak ada maka lokk untuk file .profile di direktori home Anda
sumber
/etc/profile
, Anda dapat mendefinisikannya di seluruh sistem untuk mis.bash
Ketika digunakan sebagai shell login. Mereka disimpan oleh proses shell setelah membaca dalam definisi dari file dan / atau commandline.Misalnya, jika Anda ingin menemukan variabel HISTFILE dan nilainya atau ingin tahu variabel mana yang didefinisikan tentang riwayat maka Anda akan mengetikkan ini di shell:
sumber
echo "$HISTFILE"
:?set
tidak memberi tahu Anda file mana yang mendefinisikan variabel.