Dapatkan variabel lingkungan dari pengguna lain [tertutup]

23

Apakah ada cara saya bisa melihat variabel lingkungan pengguna lain? Saya ingin melakukan itu sebagai root, jadi izin tidak akan menjadi masalah saya kira.

Untuk pengguna itu sendiri, saya menggunakan echo $PATHatau set | grep PATH(atau setketika saya tidak ingat nama variabelnya). Apa yang akan menjadi instruksi serupa untuk pengguna lain?

Untuk apa nilainya, saya di Ubuntu Server 13.04.


sumber
4
Pengguna tidak memiliki variabel lingkungan, begitu juga proses. Ini umum untuk proses yang dijalankan oleh satu pengguna untuk tidak semua memiliki lingkungan yang sama. Masalah apa yang sedang ingin kamu selesaikan?
Gilles 'SO- berhenti menjadi jahat'
@Gilles misalnya, saya ingin tahu folder MAIL apa yang dimiliki pengguna. Saya bisa masuk sebagai pengguna itu, lalu lakukan echo $MAIL, tapi saya pikir mungkin ada jalan pintas.
3
Itu masih tidak mendefinisikan pertanyaan dengan berguna (dan misalnya jawaban yang Anda terima mungkin atau mungkin tidak berfungsi tergantung pada banyak faktor). Apakah Anda mencari lokasi kotak surat default? Apakah Anda mencari lokasi di mana pengguna benar-benar menerima surat lokalnya (yang mungkin berbeda, dan mungkin tidak ada, jika pengguna memiliki .forward)? Pengguna sering menetapkan beberapa variabel dalam .profilefile konfigurasi mereka atau lainnya, dan tidak ada cara untuk menghitungnya secara andal. Sekali lagi, masalah apa yang Anda coba selesaikan?
Gilles 'SANGAT berhenti menjadi jahat'

Jawaban:

20

Pilihan lain adalah menggunakan env. Jalankan ini sebagai root:

sudo -Hiu $user env | grep $var

Sebagai contoh

sudo -Hiu terdon env | grep HOME
HOME=/home/terdon
terdon
sumber
1
Ketika saya masuk sebagai root dan menjalankan perintah ini untuk nama pengguna standar saya, saya mengerti HOME=/root. Itu direktori home dari root, tapi itu bukan direktori home standar saya. Jika Anda ingin mengetahui lingkungan yang akan diperoleh pengguna tertentu saat dia masuk, Anda harus menjalankan skrip startup dari shell login pengguna khusus ini (dan ingat bahwa shell loginnya mungkin berbeda dari shell login Anda).
Uwe
@ Gunakan sistem apa? Ini bekerja dengan baik untuk saya. Apakah maksud Anda login sebagai rootdari manajer login? Ini berfungsi dengan baik jika saya drop ke tty dan masuk sebagai root.
terdon
Saya menggunakan mesin Debian. Saya login sebagai uwe, buka xterm, jalankan env | grep HOMEdan dapatkan HOME=/home/uwe; Saya mengeksekusi sudan kemudian sekali lagi env | grep HOMEdan dapatkan HOME=/root, kemudian saya berlari sudo -u uwe env | grep HOMEdan masih mendapatkan HOME=/root.
Uwe
@ kamu aneh. Saya juga menggunakan mesin Debian (LMDE), saya melakukan proses yang sama persis seperti yang Anda gambarkan (bahkan digunakan xtermsebagai pengganti terminal saya yang biasa) dan mendapatkan hasil yang diharapkan.
terdon
Menurut manual, sudosetel variabel HOME hanya jika -Hopsi ada atau jika entri yang sesuai /etc/sudoersdiatur. Tampaknya file sudoers kami berbeda. Bagaimanapun, itu mungkin ide yang bagus untuk digunakan di -Hsini, dan mungkin juga -i.
Uwe
2

Untuk satu pengguna, Anda dapat melakukan ini:

su - <username> -c '. ~/.profile; echo $PATH'

Daftar $ PATH dari semua pengguna:

for user in $(cat /etc/passwd | awk -F: '{print $1}'); do
  su - $user -c '. ~/.profile; printf "%s\n" "$PATH"'
done

@Camil Staps

. ~/.profileDemikianlah tipuan yang saya pelajari dari orang favorit saya, Peteris Krumins. Dia menjelaskan triknya di sini . Mungkin nanti versi bash dibuat dengan opsi NON_INTERACTIVE_LOGIN_SHELLS.

cuonglm
sumber
Terima kasih! Untuk $PATHitu juga berfungsi tanpa . ~/.profile; bagian - untuk apa ini?
@CamilStaps Apa yang Anda maksud dengan "berhasil"? Ya, Anda mendapatkan nilai $PATHbahkan tanpa sumber ~/.profile, tapi hampir pasti bukan yang Anda inginkan (= nilai yang akan dilihat pengguna ini saat dia masuk). Bahkan sumber ~/.profiletidak sepenuhnya dapat diandalkan, karena pengguna mungkin menggunakan shell yang file startupnya berbeda ~/.profile.
Uwe
@ Kami, saya mendapat hasil yang sama tanpa, tapi saya rasa itu hanya kebetulan saja.
Anda menganggap pengguna tidak menggunakan csh.
glenn jackman
@CamilStaps Pertanyaan pertama adalah apakah pengguna tertentu memodifikasi PATH-nya ~/.profilesama sekali. Tetapi bagaimanapun, perilaku sudodapat dikonfigurasi cukup banyak /etc/sudoers(lihat diskusi saya dengan terdon), jadi ketika sistem kami berperilaku berbeda, itu mungkin disebabkan oleh perbedaan dalam file konfigurasi.
Uwe
0

dari root Anda dapat su -ke pengguna dan kemudian grep variabel lingkungan yang ingin Anda lihat:

su - <username> -c 'echo $PATH'

Raza
sumber
untuk beberapa alasan ini tidak berfungsi untuk saya, bahkan jika perintah dijalankan sebagai pengguna yang berbeda. Saya akhirnya menggunakan "env", jadi sth seperti runuser -l <username> -c "env | grep <var>" | cut -d '=' -f 2berfungsi dengan baik untuk saya. Jika Anda tidak root, perlu awalan dengan perintah sudo.
Andrei-Niculae Petre