วิธีการตั้งค่าตัวแปรสภาพแวดล้อมอย่างถาวร


227

ตัวแปรของฉันคือ

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

จะบันทึกตัวแปรเหล่านี้อย่างถาวรได้อย่างไร?


2
คำตอบอื่น ๆ ในหน้านี้ยอดเยี่ยม หนึ่งคำแนะนำเล็ก ๆ คือการเพิ่ม/usr/lib/oracle/11.2/client64/libไฟล์ใหม่ภายใต้/etc/ld.so.conf.d/เส้นทาง จากนั้นคุณไม่จำเป็นต้องตั้งค่า LD_LIBRARY_PATH ดูที่นี่ด้วย
Elliott Frisch

1
ระวังเรื่องนี้มีมากขึ้นกว่าตอนแรกจะปรากฏขึ้น ฉันเชิญคุณตรวจสอบคำตอบของฉัน
jasonleonhard

คำตอบ:


252

คุณสามารถเพิ่มลงในไฟล์.profileหรือไฟล์โปรไฟล์เชลล์ล็อกอินของคุณ (อยู่ในโฮมไดเร็กทอรีของคุณ)

หากต้องการเปลี่ยนตัวแปรด้านสิ่งแวดล้อม "อย่างถาวร" คุณจะต้องพิจารณาอย่างน้อยในสถานการณ์เหล่านี้:

  1. เชลล์ล็อกอิน / ไม่ใช่ล็อกอิน
  2. เชลล์แบบโต้ตอบ / ไม่ใช่แบบโต้ตอบ

ทุบตี

  1. ทุบตีเป็นเปลือกเข้าสู่ระบบจะโหลด/etc/profile, ~/.bash_profile, ~/.bash_login, ~/.profileในการสั่งซื้อ
  2. Bash เป็นเชลล์แบบโต้ตอบที่ไม่ได้ลงชื่อเข้าใช้จะโหลดขึ้นมา ~/.bashrc
  3. Bash เป็นเชลล์ที่ไม่ใช่การเข้าสู่ระบบแบบไม่โต้ตอบจะโหลดการกำหนดค่าที่ระบุในตัวแปรสภาพแวดล้อม $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

บอร์น

$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 หรือ 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

หากคุณต้องการทำให้มันถาวรสำหรับผู้ใช้ทั้งหมดคุณสามารถแก้ไขไฟล์ที่เกี่ยวข้องภายใต้/etc/เช่น/etc/profileสำหรับเชลล์เหมือน Bourne /etc/csh.loginสำหรับ (t) csh /etc/zsh/zprofileและ/etc/zsh/zshrcสำหรับ zsh

อีกทางเลือกหนึ่งคือการใช้งาน/etc/environmentซึ่งในระบบ Linux นั้นอ่านด้วยโมดูล PAM pam_envและรองรับการมอบหมายอย่างง่ายเท่านั้นไม่ใช่การขยายสไตล์เชลล์ (ดูคำแนะนำของ Debianในเรื่องนี้)

ไฟล์เหล่านี้น่าจะมีงานที่มอบหมายอยู่แล้วดังนั้นให้ทำตามไวยากรณ์ที่คุณเห็นอยู่ในไฟล์ของคุณ

ตรวจสอบให้แน่ใจว่าได้รีสตาร์ทเชลล์และเชื่อมต่อผู้ใช้ใหม่เพื่อใช้การเปลี่ยนแปลง

หากคุณต้องการเพิ่มตัวแปรสภาพแวดล้อมทั้งระบบตอนนี้จะมี/etc/profile.dโฟลเดอร์ที่มีสคริปต์ sh เพื่อเริ่มต้นตัวแปร
คุณสามารถวางสคริปต์ sh ของคุณกับตัวแปรทั้งหมดที่ส่งออกได้ที่นี่
ระวังแม้ว่าสิ่งนี้ไม่ควรใช้เป็นวิธีมาตรฐานในการเพิ่มตัวแปรให้ env บน Debian


สิ่งนี้.profileใน/etc/แต่ฉันไม่ได้ตั้งค่าตัวแปรในสิ่งนี้ได้.profileโปรดบอกฉัน
user3021349

6
.profileไม่อยู่ในสารบบบ้านของคุณ/etc/
Kiwy

1
[Admin@localhost etc]$ cat ~/.profile cat: /home/Admin/.profile: No such file or directory [Admin@localhost etc]$
user3021349

4
@ user3021349 ฉันไม่ได้ตั้งใจหยาบคาย แต่ถ้าคุณคิดว่าหนึ่งวินาทีคุณสามารถใช้โปรแกรมแก้ไขอื่นที่คุณเชี่ยวชาญ :wqเป็นคำสั่งในการเขียนไฟล์และออกใน vi อย่าลืมพิมพ์escก่อน
กีวี

3
คุณจะต้องพิจารณาตัวแปรสภาพแวดล้อมในcrontabสคริปต์ จะไม่มีการค้นหาตำแหน่งเหล่านี้เมื่อcrontabสคริปต์ทำงาน
yegle

71

จะทำอย่างไรถ้าสำหรับผู้ใช้ทั้งหมด / เปลือกหอยขึ้นอยู่กับ distro คุณสามารถใช้หรือ/etc/environment /etc/profileการสร้างไฟล์ใหม่/etc/profile.dอาจจะดีกว่าถ้ามีอยู่เนื่องจากมีโอกาสน้อยที่จะขัดแย้งกับการอัปเดตที่ทำโดยระบบบรรจุภัณฑ์

ใน/etc/environmentตัวแปรมักจะถูกตั้งค่าด้วยname=valueเช่น:

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

ใน/etc/profileคุณต้องใช้exportเนื่องจากนี่เป็นสคริปต์เช่น:

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

กันไปสำหรับไฟล์ภายใต้/etc/profile.dนอกจากนี้ยังอาจมีข้อ จำกัด การตั้งชื่อซึ่งจะต้องพบกับไฟล์ที่จะทำงาน บน Debian ไฟล์นั้นจะต้องมีนามสกุล.sh(แม้ว่าจะไม่จำเป็นต้องมีสายบาง ๆ หรือการอนุญาตให้ใช้งานได้เนื่องจากมันมีที่มา) ตรวจสอบเอกสาร distro ของคุณหรือดูที่/etc/profileสคริปต์เพื่อดูวิธีโหลดไฟล์เหล่านี้

โปรดทราบว่าแม้ว่าการตั้งค่าLD_LIBRARY_PATHอย่างถาวรอาจเป็นปัญหารวมถึงการเสี่ยงต่อความปลอดภัย เป็นทางเลือกฉันขอแนะนำให้หาวิธีที่LD_LIBRARY_PATHจะเติมจุดเริ่มต้นของบรรทัดคำสั่งสำหรับแต่ละโปรแกรมที่ต้องการก่อนที่จะทำงาน เช่น:

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

วิธีหนึ่งในการทำเช่นนี้คือใช้สคริปต์ตัวตัดคำเพื่อเรียกใช้โปรแกรม คุณสามารถให้นี้ชื่อเดียวกับโปรแกรมของคุณและวางไว้ใน/usr/local/binหรือที่ใดก็ได้ที่ปรากฏขึ้นก่อนที่PATHสถานที่ตั้งของโปรแกรมของคุณใน นี่คือตัวอย่างสคริปต์ (อย่าลืมchmod +xสคริปต์):

#!/bin/sh
LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib /real/location/of/myprog "$@"

ดังนั้นถ้าฉันเพิ่มคู่ค่าลงในenvironmentไฟล์ของฉันสิ่งใดที่ทำให้โหลดขึ้นมา ตัวอย่างเช่นหลังจากออกจากตัวแก้ไข vi (การเปลี่ยนแปลงที่เขียนสำเร็จ) ฉันคาดว่าจะเขียนecho $MY_NEW_VARIABLEและเห็นมันพิมพ์ออกมา - แก้ไข: ฉันเห็นพวกเขาอยู่ที่นั่นถ้าฉันเปิดใช้เชลล์คำสั่งใหม่
bkwdesign

ไม่แน่ใจว่านี้เป็นปัญหาส่วนบุคคลหรือสิ่งที่ แต่ผมต้องรีบูต OS ของฉันหลังจากการตั้งค่าในเรื่องนี้แม้ว่าฉันเริ่มต้นใหม่ขั้วทุบตีหรือพิมพ์/etc/environment source /etc/environmentดังนั้นหากคุณมีปัญหาเกี่ยวกับตัวแปรสภาพแวดล้อมที่ไม่เป็นอมตะลองรีบูตเครื่อง
Blairg23

@bkwdesign @ Blairg23 /etc/environmentไม่ใช่สคริปต์ดังนั้นจึงไม่สามารถจัดหาได้ มันถูกโหลดในเวลาเข้าสู่ระบบ (และกิจกรรมอื่น ๆ ของระบบ) โดย PAM ดังนั้นคุณสามารถออกจากระบบ / เข้าสู่ระบบหรือเรียกใช้เซสชันการเข้าสู่ระบบใหม่ในเทอร์มินัลโดย$ su <your username here>รับค่าใหม่ในเซสชันที่แยก ค่าจะหายไปเมื่อคุณออกดังนั้นจึงอาจเกิดข้อผิดพลาดน้อยกว่าเพียงแค่ออกจากระบบ / เข้าสู่ระบบอย่างสมบูรณ์
AaronDanielson

2

เมื่อคุณติดตั้ง oracle oracle จะขอให้คุณเรียกใช้สคริปต์ก่อนที่จะคลิกตกลง สคริปต์นั้นทำให้การตั้งค่าจำลองใน.bash_profileไดเรกทอรีบ้านของผู้ใช้ oracle หากต้องการดูไฟล์ls -alจะแสดงไฟล์ที่ซ่อนไว้ทั้งหมด

พิมพ์nano bash_profileเพื่อเปิดไฟล์ ทำการเปลี่ยนแปลงไฟล์เพื่อแสดงชื่อโฮสต์ของคุณและชื่อ sid ที่เหมาะสม ตรวจสอบการตั้งค่าอื่น ๆ ที่ต้องการแก้ไข กด control x เพื่อบันทึกและพิมพ์ y เมื่อถูกถามว่าคุณต้องการบันทึกหรือไม่ กดปุ่มย้อนกลับเพื่อบันทึก รีสตาร์ทคอมพิวเตอร์ เข้าสู่ระบบในฐานะผู้ใช้ oracle เริ่มฐานข้อมูลโดยการพิมพ์

sqlplus / as sysdba

startup  

สิ่งนี้แตกต่างจากคำตอบที่ยอมรับได้อย่างไร
roaima
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.