Cara mengatur variabel lingkungan secara permanen

227

Variabel saya adalah

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
ORACLE_HOME=/usr/lib/oracle/11.2/client64

Bagaimana cara menyimpan variabel-variabel ini secara permanen?

pengguna3021349
sumber
2
Jawaban lain di halaman ini sangat bagus. Satu rekomendasi kecil adalah menambahkan /usr/lib/oracle/11.2/client64/libfile baru di bawah /etc/ld.so.conf.d/path. Maka Anda tidak perlu mengatur LD_LIBRARY_PATH, lihat juga di sini .
Elliott Frisch
1
Hati-hati, ada lebih banyak cerita ini daripada yang muncul pada awalnya. Saya mengundang Anda untuk memeriksa jawaban saya.
jasonleonhard

Jawaban:

252

Anda dapat menambahkannya ke file .profileatau file profil shell login Anda (terletak di direktori home Anda).

Untuk mengubah variabel lingkungan "secara permanen" Anda harus mempertimbangkan setidaknya situasi ini:

  1. Login / Shell non-login
  2. Shell Interaktif / Non-interaktif

pesta

  1. Bash sebagai shell login akan memuat /etc/profile, ~/.bash_profile, ~/.bash_login, ~/.profiledalam urutan
  2. Bash sebagai shell interaktif non-login akan dimuat ~/.bashrc
  3. Bash sebagai shell non-interaktif non-login akan memuat konfigurasi yang ditentukan dalam variabel lingkungan $BASH_ENV
$EDITOR ~/.profile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

zsh

$EDITOR ~/.zprofile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

ksh

$EDITOR ~/.profile
#add lines at the bottom of the file:  
     export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
     export ORACLE_HOME=/usr/lib/oracle/11.2/client64

maksud

$EDITOR ~/.profile
#add lines at the bottom of the file:  
     LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib     
     ORACLE_HOME=/usr/lib/oracle/11.2/client64
     export LD_LIBRARY_PATH ORACLE_HOME

csh atau tcsh

$EDITOR ~/.login
#add lines at the bottom of the file:  
     setenv LD_LIBRARY_PATH /usr/lib/oracle/11.2/client64/lib
     setenv ORACLE_HOME /usr/lib/oracle/11.2/client64

Jika Anda ingin menjadikannya permanen untuk semua pengguna, Anda dapat mengedit file yang sesuai di bawah /etc/, yaitu /etc/profileuntuk shell mirip Bourne, /etc/csh.loginuntuk (t) csh, dan /etc/zsh/zprofiledan /etc/zsh/zshrcuntuk zsh.

Pilihan lain adalah menggunakan /etc/environment, yang pada sistem Linux dibaca oleh modul PAM pam_envdan hanya mendukung penugasan sederhana, bukan ekspansi shell-style. (Lihat panduan Debian tentang ini.)

File-file ini kemungkinan sudah mengandung beberapa tugas, jadi ikuti sintaksis yang Anda lihat sudah ada dalam file Anda.

Pastikan untuk memulai kembali shell dan masuk kembali ke pengguna, untuk menerapkan perubahan.

Jika Anda perlu menambahkan variabel lingkungan sistem lebar, sekarang ada /etc/profile.dfolder yang berisi skrip sh untuk menginisialisasi variabel.
Anda dapat menempatkan skrip sh Anda dengan semua variabel yang diekspor di sini.
Hati-hati meskipun ini tidak boleh digunakan sebagai cara standar untuk menambahkan variabel ke env di Debian.

Kiwy
sumber
Ini .profiledi /etc/tapi saya tidak bagaimana mengatur variabel dalam .profilejelaskan
user3021349
6
.profileada di direktori home Anda bukan/etc/
Kiwy
1
[Admin@localhost etc]$ cat ~/.profile cat: /home/Admin/.profile: No such file or directory [Admin@localhost etc]$
user3021349
4
@ user3021349 Saya tidak bermaksud kasar tetapi jika Anda berpikir satu detik Anda juga dapat menggunakan editor yang berbeda yang Anda kuasai. :wqadalah perintah untuk menulis file dan keluar di vi jangan lupa untuk mengetik escsebelumnya
Kiwy
3
Anda harus mempertimbangkan variabel lingkungan dalam crontabskrip. Tidak satu pun dari lokasi ini akan terlihat ketika crontabskrip sedang berjalan
yegle
71

Untuk melakukannya jika untuk semua pengguna / shell, tergantung pada distro Anda dapat menggunakan /etc/environmentatau /etc/profile. Membuat file baru di /etc/profile.dmungkin lebih disukai jika ada, karena akan lebih kecil kemungkinannya bertentangan dengan pembaruan yang dibuat oleh sistem pengemasan.

Di /etc/environment, variabel biasanya diatur dengan name=value, misalnya:

ORACLE_HOME=/usr/lib/oracle/11.2/client64

Di /etc/profile, Anda harus menggunakan exportkarena ini skrip, misalnya:

export ORACLE_HOME=/usr/lib/oracle/11.2/client64

Hal yang sama berlaku untuk file di bawah /etc/profile.d, mungkin juga ada batasan penamaan yang harus dipenuhi agar file berfungsi. Pada Debian, file tersebut harus memiliki ekstensi .sh(walaupun tidak memerlukan bang line atau izin yang dapat dieksekusi karena bersumber). periksa dokumentasi distro Anda atau lihat /etc/profileskrip untuk melihat bagaimana file-file ini dimuat.

Perhatikan juga bahwa pengaturan LD_LIBRARY_PATHsecara permanen berpotensi bermasalah , termasuk menjadi risiko keamanan. Sebagai alternatif, saya akan menyarankan menemukan beberapa cara untuk menambahkan LD_LIBRARY_PATHawal baris perintah untuk setiap program yang membutuhkannya sebelum berjalan. Misalnya:

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib myprog

Salah satu cara untuk melakukannya adalah dengan menggunakan skrip wrapper untuk menjalankan program. Anda bisa memberikan ini nama yang sama dengan program Anda dan memasukkannya ke /usr/local/binatau di mana saja yang muncul sebelum lokasi program Anda PATH. Berikut ini contoh skrip (jangan lupa chmod +xskrip):

#!/bin/sh
LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib /real/location/of/myprog "$@"
Graeme
sumber
jadi, jika saya telah menambahkan pasangan nilai ke environmentfile saya , apa yang menyebabkan mereka memuat? Misalnya, setelah keluar dari vi editor (perubahan berhasil ditulis), saya berharap untuk menulis echo $MY_NEW_VARIABLEdan melihatnya mencetak - EDIT: Saya melihat mereka ada di sana jika saya meluncurkan shell perintah baru
bkwdesign
Tidak yakin apakah ini masalah pribadi atau apa, tapi saya harus mem-boot ulang OS saya setelah pengaturan ini /etc/environment, bahkan jika saya me- restart terminal bash atau mengetik source /etc/environment. Jadi, jika Anda mengalami masalah ketika variabel lingkungan tidak bertahan, coba reboot.
Blairg23
@ bkwdesign @ Blairg23, /etc/environmentbukan skrip, jadi tidak dapat diperoleh dari sumber. Itu dimuat pada waktu login (dan beberapa peristiwa sistem lainnya) oleh PAM, sehingga Anda dapat logout / login atau menjalankan sesi login baru di terminal dengan $ su <your username here>mengambil nilai-nilai baru dalam sesi yang terisolasi itu. Nilai-nilai akan hilang begitu Anda keluar, jadi mungkin lebih mudah untuk keluar / masuk sepenuhnya.
AaronDanielson
2

ketika Anda menginstal oracle, oracle meminta Anda menjalankan beberapa skrip sebelum mengklik ok. Script itu meletakkan pengaturan dummy di .bash_profiledirektori home pengguna oracle. Untuk melihat file, ls -alakan menampilkan semua file yang tersembunyi.

ketik nano bash_profileuntuk membuka file. Buat perubahan pada file untuk mencerminkan nama host Anda, dan nama samping yang sesuai. periksa pengaturan lain yang perlu modifikasi. tekan control x untuk menyimpan dan ketik y ketika ditanya apakah Anda ingin menyimpan. Tekan tombol kembali untuk menyimpan. Nyalakan ulang komputernya. Masuk sebagai pengguna oracle. mulai database dengan mengetik

sqlplus / as sysdba

startup  
frankfurt
sumber
Apa bedanya dengan jawaban yang diterima ?
roaima