Mengatur variabel PATH di / etc / environment vs .profile

58

Di mana tempat yang disukai untuk mengatur PATHenvvar?

~/.profileatau /etc/environment?

Apa yang terjadi ketika PATHdiatur di kedua tempat? Apakah hasil akhirnya merupakan gabungan dari kedua nilai yang ditetapkan di kedua tempat tersebut?

pkaramol
sumber
Tugas terakhir untuk PATH menang, tentu saja. Sebagian besar skrip mengaturnya secara eksplisit di awal skrip.
AlexP
3
Lihat help.ubuntu.com/community/… .
edwinksl

Jawaban:

71

Ringkasan:

  • Jika Anda ingin menambahkan jalur (mis. /your/additional/path) Ke PATHvariabel Anda hanya untuk pengguna saat ini dan tidak untuk semua pengguna komputer Anda, Anda biasanya meletakkannya di akhir ~/.profileseperti di salah satu dari dua contoh:

    PATH="/your/additional/path:$PATH"
    PATH="$PATH:/your/additional/path"
    

    Perhatikan bahwa prioritas jalur menurun dari kiri ke kanan, sehingga jalur pertama memiliki prioritas tertinggi. Jika Anda menambahkan path Anda di sebelah kiri $PATH, itu akan memiliki prioritas tertinggi dan executable di lokasi itu akan menimpa semua yang lain. Jika Anda menambahkan path Anda di sebelah kanan, itu akan memiliki prioritas terendah dan executable dari lokasi lain akan lebih disukai.

  • Namun, jika Anda perlu mengatur bahwa variabel lingkungan untuk semua pengguna, saya akan tetap tidak merekomendasikan menyentuh /etc/environmenttetapi menciptakan sebuah file dengan nama file yang berakhir dengan .shdi /etc/profile.d/. The /etc/profileScript dan semua skrip di /etc/profile.dadalah setara global masing-masing pengguna pribadi ~/.profiledan dieksekusi sebagai script shell biasa oleh semua kerang selama inisialisasi mereka.


Lebih detail:

  • /etc/environmentadalah file konfigurasi seluruh sistem, yang berarti digunakan oleh semua pengguna. Itu dimiliki oleh root, jadi Anda harus menjadi pengguna admin dan menggunakannya sudountuk memodifikasinya.

  • ~/.profileadalah salah satu skrip inisialisasi shell pribadi pengguna Anda sendiri. Setiap pengguna memiliki satu dan dapat mengedit file mereka tanpa mempengaruhi orang lain.

  • /etc/profiledan /etc/profile.d/*.shskrip inisialisasi global yang setara dengan ~/.profileuntuk setiap pengguna. Namun skrip global dieksekusi sebelum skrip khusus pengguna; dan utama /etc/profilemengeksekusi semua *.shskrip /etc/profile.d/tepat sebelum keluar.


  • The /etc/environmentFile biasanya hanya berisi baris ini:

    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
    

    Ini mengatur PATHvariabel untuk semua pengguna di sistem ke nilai default ini, yang tidak boleh diubah secara besar-besaran. Setidaknya Anda tidak harus menghapus salah satu jalur penting seperti /bin, /sbin, /usr/bindan /usr/sbindari itu.

    File ini dibaca sebagai salah satu file konfigurasi pertama oleh setiap shell dari setiap pengguna. Perhatikan bahwa ini bukan skrip shell . Ini hanya file konfigurasi yang akan diuraikan entah bagaimana dan itu mungkin hanya berisi tugas variabel lingkungan!

  • The ~/.profileFile dapat berisi banyak hal, secara default berisi antara hal-hal lain cek apakah ~/bindirektori ada dan menambahkan bahwa yang ada pengguna PATHvariabel, seperti ini (pada yang lebih tua rilis Ubuntu sebelum 16.04 - yang menambahkan hal itu tanpa syarat - dan pada 18,04 , yang juga menambahkan "~ / .local / bin"):

    # set PATH so it includes user's private bin if it exists
    if [ -d "$HOME/bin" ] ; then
        PATH="$HOME/bin:$PATH"
    fi
    

    Anda melihat bahwa nilai lama PATHakan digunakan kembali di sini dan jalur baru hanya ditambahkan ke permulaan alih-alih menimpa segalanya. Saat Anda secara manual ingin menambahkan jalur baru, Anda juga harus selalu menyimpan nilai lama $PATHdi suatu tempat di string baru.

    Skrip inisialisasi ini hanya dapat dibaca oleh cangkang pengguna yang dimiliki, tetapi ada syarat lain:

    # ~/.profile: executed by the command interpreter for login shells.
    # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
    # exists.
    

    Jadi jika Anda menggunakan Bash shell default, Anda harus memastikan bahwa Anda tidak memiliki ~/.bash_profileatau ~/.bash_loginjika Anda ingin perubahan ~/.profileberpengaruh pada pengguna Anda.


Untuk pemahaman penuh tentang Variabel Lingkungan, lihat: https://help.ubuntu.com/community/EnvironmentVariables


Pertanyaan terkait: perbedaan antara file bash.bashrc dan / etc / environment

Komandan Byte
sumber
2
Saat ~/.profileini tidak memeriksa keberadaan ~/bin, tetapi hanya memiliki garis:PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Gunnar Hjalmarsson
1
@GunnarHjalmarsson Tentukan "saat ini", tolong? Saya menjalankan 16,04 dan itulah yang terlihat di sana.
Byte Commander
2
/etc/skel/.profiledi 16.04 memiliki garis yang saya sebutkan. Anda tampaknya menciptakan pengguna Anda di rilis sebelumnya.
Gunnar Hjalmarsson
1
@GunnarHjalmarsson Terima kasih atas informasinya - sampai sekitar lima menit yang lalu , saya pikir defaultnya ~/.profilemasih memiliki ini juga, tetapi Anda benar - /etc/skel/.profiletidak memilikinya pada sistem 16.04 yang saya tingkatkan (dan akun pengguna dibuat saat menginstal 16.04 pada mesin lain tidak memilikinya di mereka .profile).
Eliah Kagan
2
"... dieksekusi sebagai skrip shell biasa oleh semua shell selama inisialisasi mereka." Saya pikir ini menyesatkan. Mungkin menyarankan (kepada sebagian orang) bahwa hanya membuka shell terminal non-login dari desktop GUI akan mengeksekusi / etc / profile, yang mana tidak akan terjadi. askubuntu.com/questions/155865/…
Hawkeye Parker
22

Jawaban ini terutama tentang urutan di mana variabel lingkungan seperti PATHditugaskan ketika ditentukan dalam file konfigurasi yang berbeda. Saya juga membahas di mana Anda biasanya mengaturnya, tetapi daftar di bawah ini tidak mencantumkan file dalam urutan yang harus Anda pertimbangkan untuk menggunakannya. Untuk informasi umum tentang pengaturan PATHdan variabel lingkungan lainnya di Ubuntu, saya juga merekomendasikan membaca EnvironmentVariables dan jawaban lain untuk pertanyaan ini.

Tempat yang dipilih untuk diatur PATHtergantung pada pengguna yang Anda ingin atur dan kapan serta bagaimana Anda ingin mengaturnya. Bagian dari keputusan Anda adalah apakah Anda ingin set variabel lingkungan untuk semua pengguna atau berdasarkan per-pengguna. Jika Anda tidak yakin, maka saya sarankan mengaturnya hanya untuk satu pengguna (misalnya, akun Anda) daripada seluruh sistem.

Seperti yang dikatakan AlexP , PATHvariabel lingkungan akan memiliki nilai yang ditugaskan paling baru . Dalam prakteknya, sebagian besar waktu Anda mengatur PATH, Anda termasuk tua nilai PATHnilai baru, sehingga entri sebelumnya tetap dipertahankan.

Dengan demikian, dalam praktiknya, ketika PATHdiatur dari banyak file, biasanya berisi entri yang diberikan di semua file. Tapi itu hanya terjadi karena semua file yang mengaturnya, kecuali yang pertama, biasanya mereferensikan PATHvariabel itu sendiri, menyebabkan nilai lamanya dimasukkan yang baru.

Oleh karena itu, Anda berlaku meminta urutan PATHpengaturan dalam berbagai file berlaku.

Tempat umum dan tujuan umum untuk ditetapkan PATHtercantum di bawah ini dalam urutan di mana mereka berlaku saat pengguna masuk, bukan dalam urutan yang biasanya Anda pertimbangkan untuk menggunakannya . Masing-masing tempat yang tercantum di bawah ini adalah pilihan yang wajar untuk pengaturan PATH dalam beberapa situasi , tetapi hanya beberapa yang merupakan pilihan yang baik sebagian besar waktu.

Dalam daftar di bawah ini, Anda akan melihat beberapa nama direktori seperti ~/.profile. Jika Anda tidak terbiasa dengan ekspansi tilde , lihat ~/direktori home pengguna saat ini. Saya terutama menggunakan sintaks ini untuk kekompakan. Ini didukung dalam skrip shell, tetapi tidak dalam file konfigurasi PAM.

1. Untuk semua pengguna: /etc/environment

PAM di Ubuntu menyebabkan variabel lingkungan yang tercantum di dalam /etc/environmentdiatur, jika file itu ada, yang secara default memang ada. Begitulah cara menetapkan variabel lingkungan untuk semua pengguna.

$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

Jika Anda harus mengatur variabel lingkungan untuk semua akun pengguna, bukan hanya akun pengguna Anda, maka memodifikasi file itu kemungkinan merupakan pilihan terbaik Anda. Saya sarankan mencadangkannya terlebih dahulu. Salah satu cara untuk membuat cadangan file ini adalah dengan menjalankan:

sudo cp /etc/environment /etc/environment.orig

The .origekstensi tidak secara khusus diperlukan - Anda bisa merasa baik tentang penamaan apapun file cadangan yang tidak membingungkan atau sudah digunakan. (Selain .orig, .old, .backupdan .bakyang umum.)

Anda dapat mengedit file ini di salah satu cara yang mungkin Anda mengedit file lain sebagai user root ( sudoedit /etc/enviromnment, sudo nano -w /etc/environment, gksudo gedit /etc/environment, dll)

/etc/environmenttidak mendukung termasuk nilai lama suatu variabel secara otomatis. Tapi ini biasanya tidak perlu, karena sebagian besar waktu Anda akan menetapkan variabel lingkungan untuk semua pengguna dengan mengedit /etc/environment, Anda ingin itu menjadi nilai awal ketika pengguna login. Pengguna kemudian dapat mengubahnya sesuka mereka. Biasanya itu baik bagi pengguna untuk dapat melakukan ini.

2. Untuk semua pengguna: /etc/security/pam_env.conf

PAM membaca variabel lingkungan untuk semua pengguna dari /etc/security/pam_env.conf, ditentukan dengan sintaksis yang sama seperti yang digunakan dalam ~/.pam_environmentfile per-pengguna (lihat di bawah).

Ketika variabel lingkungan yang sama diatur dalam keduanya /etc/environmentdan /etc/security/pam_env.conf, nilai dalam pam_env.confdigunakan - bahkan jika nilai tersebut ditentukan sebagai DEFAULTbukan OVERRIDE.

Namun, ketika Anda menggantikan satu baris environmentdengan satu pam_env.conf, Anda dapat memasukkan konten dari nilai yang digantikan. Lihat bagian di bawah ini .pam_environmentuntuk detail (karena menggunakan sintaks yang sama).

Biasanya tidak perlu diedit pam_env.confdan Anda harus sangat berhati-hati jika melakukannya , karena baris yang salah biasanya akan mencegah semua akun pengguna normal masuk sama sekali! Misalnya, default pam_env.confberisi baris:

#PATH           DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11

Ini disajikan sebagai salah satu dari beberapa contoh. Salah satu hal yang diilustrasikan adalah bagaimana membagi tugas di beberapa baris \. Misalkan Anda membatalkan komentar hanya pada baris pertama, tetapi lupa untuk menghapus komentar pada baris kedua:

PATH           DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11

Jangan lakukan ini!

Saya baru saja mengujinya sendiri secara tidak sengaja, dan itu mencegah pengguna untuk berhasil masuk. Untuk memperbaikinya, saya harus boot dalam mode pemulihan dan mengubahnya kembali. (Untungnya saya melakukan ini pada mesin virtual yang saya gunakan hanya untuk menguji hal-hal, jadi itu tidak menyebabkan masalah bagi saya.)

3. Untuk satu pengguna: .pam_environmentdi direktori home pengguna

Salah satu cara untuk mengatur variabel lingkungan untuk satu pengguna adalah agar pengguna itu mengedit (atau membuat) .pam_environmentdi direktori home mereka. Nilai yang ditetapkan dalam file ini menggantikan yang ditetapkan dalam /etc/environmentfile global .

.pam_environmentbukan bagian dari kerangka file yang disalin ke folder rumah pengguna saat akun pengguna awalnya dibuat. Namun, jika Anda membuat file itu di direktori home Anda, Anda dapat menggunakannya untuk mengatur variabel environment like PATH. Tidak seperti /etc/environment(tapi seperti /etc/security/pam_env.conf), file per pengguna .pam_environmentmendukung perluasan nilai lama dari variabel lingkungan ke yang baru. Mereka bukan skrip shell, dan Anda harus menggunakan sintaks khusus untuk mencapai ini, yang agak berbeda dari sintaks yang akan Anda gunakan dalam file seperti .profile.

Misalnya, jika Anda memiliki bin2direktori di direktori home yang ingin Anda tambahkan di akhir PATH, Anda bisa melakukannya dengan menambahkan baris ini ke .pam_environment:

PATH DEFAULT=${PATH}:/home/@{PAM_USER}/bin2

Lihat yang ~/.pam_environmentayat dari EnvironmentVariables (dari mana contoh di atas erat disesuaikan), man pam_envdan man pam_env.confuntuk informasi lebih lanjut.

Meskipun ini pernah disebut-sebut sebagai cara yang disukai bagi pengguna Ubuntu untuk mengubah atau menambahkan variabel lingkungan dan masih dianggap sebagai pilihan yang masuk akal dan dapat diterima, Anda harus berhati-hati saat mengedit.pam_environment . Seperti pengeditan ke seluruh sistem /etc/security/pam_env.conf(lihat di atas), baris yang salah dalam .pam_environmentfile pengguna akan mencegah login berhasil. (Saya telah menguji ini - dengan sengaja kali ini.) Untuk informasi tentang bagaimana rekomendasi telah berkembang , lihat komentar Gunnar Hjalmarsson di bawah ini dan diskusi ini . ubuntu-devel

Kesalahan seperti itu jauh lebih tidak serius, secara umum , daripada garis salah bentuk pam_env.conf, karena hanya mempengaruhi satu pengguna. Namun, dalam kasus sistem Ubuntu desktop dengan hanya satu akun pengguna yang memungkinkan login, kesalahan seperti itu saat mengedit .pam_environmentakan sama buruknya dengan mengedit kesalahan pam_env.conf- jika Anda belum login, Anda tidak akan dapat untuk memperbaikinya tanpa mem-boot dalam mode pemulihan (atau dari USB langsung, dll.).

(Jika Anda memiliki akun pengguna lain, maka Anda dapat masuk sebagai pengguna lain dan memperbaiki masalahnya. Meskipun mereka bukan administrator dan tidak dapat sudomelakukan rooting, mereka masih dapat berjalan dan diminta memasukkan kata sandi (bukan mereka) Anda . The tamu akun, bagaimanapun, tidak bisa melakukan ini, seperti yang dilarang menggunakan untuk mengambil identitas pengguna lain.)su your-accountsu

4. Untuk semua pengguna: /etc/profiledan file di dalamnya/etc/profile.d/

bashShell yang kompatibel dengan Bourne (termasuk , shell pengguna default di Ubuntu) menjalankan perintah /etc/profileketika dipanggil sebagai shell login.

Ubuntu /etc/profile.dberakhir dengan:

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

Ini menyebabkan perintah dalam file apa pun di /etc/profile.d/direktori yang namanya berakhir .shjuga dijalankan.

Kebanyakan manajer tampilan menyebabkan perintah di /etc/profile(dan dengan demikian file dalam /etc/profile.d) dijalankan untuk login grafis juga. Namun, tidak semua melakukannya, dan itu adalah argumen yang signifikan dalam mendukung penggunaan fasilitas yang disediakan oleh PAM (lihat di atas) - kecuali tidak akan pernah ada login grafis ke sistem ini, yang mungkin terjadi, misalnya, jika itu server tanpa GUI yang diinstal.

Sudah menjadi kebiasaan untuk mengatur variabel lingkungan sistemwide /etc/profile, tetapi ini sering bukan pilihan terbaik lagi. Jika Anda tidak dapat mengatur variabel lingkungan /etc/environment, dan Anda harus mengaturnya untuk semua pengguna, maka mungkin lebih baik untuk membuat file baru /etc/profile.d/daripada mengedit /etc/profilesendiri. Salah satu alasannya adalah ketika Ubuntu ditingkatkan, mungkin ada /etc/profilefile default baru . Bergantung pada bagaimana Anda melakukan upgrade, file lama (dengan perubahan Anda) akan disimpan, meninggalkan file konfigurasi yang diperbarui, atau Anda akan diminta untuk menangani situasi.

Ketika variabel lingkungan yang sama diatur di kedua /etc/profiledan satu atau lebih file di /etc/profile.d, yang dilakukan terakhir? Ini tergantung pada apakah perintah-perintah di /etc/profileset itu muncul sebelum atau setelah file-file di profile.d-sumber (dengan kode yang saya kutip di atas). Perintah di /etc/profiledieksekusi dalam urutan yang muncul.

/etc/profileadalah skrip shell, dan sintaksinya tidak sama dengan yang ada pada file konfigurasi PAM yang dibahas di atas . Sintaksnya sama dengan sintaksis untuk file per pengguna ~/.profile(lihat di bawah).

Jika Anda perlu menulis kode yang memutuskan apakah akan menambahkan direktori tertentu atau tidak PATH(dan melakukannya untuk semua pengguna), Anda tidak akan dapat menggunakan /etc/environmentatau /etc/security/pam_env.confmelakukannya. Ini mungkin adalah situasi utama di mana lebih baik menggunakan /etc/profileatau /etc/profile.d/sebagai gantinya.

5. Untuk satu pengguna: .bash_profiledi direktori home pengguna

Jika seorang pengguna memiliki ~/.bash_profile, bash menggunakannya sebagai ganti ~/.profileatau ~/.bash_login(lihat di bawah). Anda biasanya tidak harus memiliki .bash_profiledi direktori home Anda.

Jika Anda melakukannya, biasanya harus berisi perintah ke sumber ~/.profile(misalnya, . "$HOME/.profile"). Jika tidak, konten file per pengguna .profiletidak berjalan sama sekali.

6. Untuk satu pengguna: .bash_logindi direktori home pengguna

Jika seorang pengguna memiliki ~/.bash_login, bash menggunakannya sebagai ganti ~/.profile(lihat di bawah), kecuali ~/.bash_profileada, dalam hal ini tidak ada yang lain akan digunakan kecuali bersumber dari `~ / .bash_login.

Seperti halnya .bash_profile, Anda biasanya tidak harus memiliki .bash_loginfile di direktori home Anda.

7. Untuk satu pengguna: .profiledi direktori home pengguna.

Ketika shell Bourne-style dijalankan sebagai shell login, itu menjalankan perintah di /etc/profile(yang biasanya mencakup perintah yang menyebabkan perintah dalam file /etc/profile.d/dijalankan - lihat di atas). Setelah itu, ia menjalankan perintah di .profiledalam direktori home pengguna. File ini terpisah untuk setiap pengguna. (Bash benar-benar berjalan .bash_profileatau .bash_loginsebaliknya jika ada - tetapi, untuk pengguna pada sistem Ubuntu, file-file itu jarang ada atau memang ada. Untuk detailnya, lihat di atas dan 6.2 Bash Startup Files di manual Bash .)

~/.profiledengan demikian adalah tempat utama bagi pengguna untuk menempatkan perintah yang berjalan saat mereka masuk. Ini adalah tempat tradisional bagi Anda untuk mengatur PATH, tetapi karena Ubuntu memiliki modul dan dukungan pam_env ~/.pam_environment, Anda harus mempertimbangkan untuk menggunakannya.

Seperti halnya /etc/profile, tidak semua manajer tampilan menjalankan file ini untuk login grafis, meskipun sebagian besar melakukannya. Ini adalah alasan untuk lebih memilih ~/.pam_environmentuntuk menetapkan variabel lingkungan (sebanyak satu mungkin lebih memilih /etc/environmentuntuk /etc/profile).

Anda dapat memperluas variabel lingkungan, termasuk PATHdirinya sendiri, ketika Anda mengatur PATHdi .pam_environment(lihat di atas). Namun, jika Anda perlu mengatur PATHdengan cara yang lebih canggih, Anda mungkin harus menggunakannya .profile. Khususnya, jika Anda ingin memeriksa apakah direktori ada setiap kali pengguna masuk dan hanya menambahkannya PATHjika ada, maka Anda tidak akan dapat menggunakan .pam_environmentfile Anda untuk menambahkan direktori itu ke direktori Anda PATH.

Misalnya, file per pengguna default .profiledi Ubuntu digunakan untuk mengakhiri dengan:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Lihat Gunnar Hjalmarsson 's komentar pada jawaban Byte Komandan untuk rincian.

Ini memeriksa apakah Anda memiliki binsubdirektori dari direktori home Anda. Jika demikian, ia menambahkan subdirektori itu ke awal blog Anda PATH.

Daftar itu menghilangkan beberapa kemungkinan.

Ada cara lain variabel lingkungan ditetapkan saat pengguna masuk yang lebih bergantung pada jenis login. Misalnya, Anda kadang-kadang mungkin memiliki variabel lingkungan yang ditetapkan hanya untuk login grafis atau hanya untuk login jarak jauh berbasis SSH. Daftar di atas tidak mencakup kasus-kasus seperti itu.

Saya telah meninggalkan beberapa file di mana orang kadang-kadang mendefinisikan variabel lingkungan, seperti ~/.bashrcdan /etc/bash.bashrc, karena mereka biasanya tidak direkomendasikan untuk diatur PATHdan jarang Anda benar-benar menggunakannya untuk tujuan ini. Jika Anda menggunakan file-file ini untuk menambahkan direktori PATH, maka mereka kadang-kadang akan ditambahkan berkali-kali dan sangat membingungkan ketika Anda memeriksa $PATH. (Dalam kasus ekstrim ini dapat memperlambat segalanya, tetapi biasanya ini hanya masalah menjaga semuanya bersih dan mudah dimengerti.)

Karena bashshell login default Ubuntu untuk pengguna, dan sebagian besar pengguna menggunakannya atau shell yang kompatibel dengan POSIX lainnya, saya telah menghilangkan informasi tentang bagaimana variabel lingkungan diatur di shell lain, non-Bourne-style seperti tcsh.

Eliah Kagan
sumber
1
[komentar # 1 dari 2] Terima kasih atas uraian luas ini! (Saya melakukan sedikit pengeditan.) Namun, saya ragu mengenai cara yang disarankan. Beberapa tahun yang lalu EnvironmentVariables disebutkan /etc/environment/ ~/.pam_environmentsebagai yang file direkomendasikan. Setelah berkonsultasi dengan pengembang saya mengubahnya menjadi netral antara PAM dan /etc/profile.d/*.sh/ ~/.profile, dan saya masih cenderung melihatnya seperti itu.
Gunnar Hjalmarsson
1
[komentar # 2 dari 2] Anda menyebutkan beberapa argumen yang mendukung PAM. Argumen penting yang mendukung /etc/profile.d/*.sh/ ~/.profileadalah bahwa sintaksinya lebih sederhana dan lightdm / gdm bersifat memaafkan jika terjadi kesalahan (bahkan kesalahan sintaksis mencegah Anda untuk login, tetapi hanya menghasilkan pesan peringatan).
Gunnar Hjalmarsson
Ketika Anda berkata pam_env.so, apakah maksud Anda pam_env.conf?
Johan Boulé
@ JohanBoulé Ya, maksud saya pam_env.conf. Terima kasih! Saya telah mengeditnya untuk memperbaikinya.
Eliah Kagan
3

/ etc / file environment bukan file skrip yang tidak dapat Anda gunakan ekspor di sana dan itu tidak mendukung ekspansi variabel dari tipe $ HOME, hanya simplevariable = pasangan nilai. Jadi untuk menggunakan file itu, Anda perlu menambahkan path Anda ke definisi yang ada, secara khusus dimaksudkan untuk pengaturan variabel lingkungan sistem-lebar. satu per baris. Secara khusus, file ini menyimpan pengaturan lokal dan path seluruh sistem.

~ / .profile - File ini dieksekusi setiap kali bash shell dieksekusi, biasanya yang direkomendasikan untuk variabel lingkungan, namun memiliki kelemahan hanya dipanggil oleh shell login, jadi untuk membuatnya berlaku Anda perlu untuk keluar dan kembali - atau setidaknya, mulai shell login baru.

eGhoul
sumber
1

Tempat yang disukai untuk menetapkan variabel lingkungan tergantung pada beberapa hal:

  1. Apakah Anda satu-satunya yang menggunakan komputer:
    • Dalam hal ini, tempat terbaik untuk mengaturnya adalah /etc/environmentkarena tidak ada bahaya akses tanpa otorisasi.
  2. Jika sistem digunakan oleh banyak orang
    • Jika variabel harus diakses oleh semua maka lokasi akan /etc/environment, tetapi
    • jika masing-masing pengguna harus memilih akses ke mereka maka masing-masing harus mengatur hak mereka pada~/.profile masing-masing pengguna sistem karena itu terletak di direktori home masing-masing pengguna.

Sistem akan membaca /etc/environmentsebelum membaca ~/.profile. Tidak ada penggabungan terjadi dan seperti Alex P mengatakan tugas terakhir untuk path menang.

Untuk melihat lebih detail faktor-faktor yang menentukan bagaimana ~/.profiledan /etc/environmentbermain - main dengan lokasi lain, buka di sini dan di sini , karena faktor-faktor ini akan memengaruhi cara Anda menggunakan lokasi ini.

George Udosen
sumber