เป็นสิ่งที่ดีที่สุดในการตั้งค่าตัวแปรสภาพแวดล้อมทั้งระบบบน Linux?


26

ฉันแค่ต้องการตั้งค่าตัวแปรสภาพแวดล้อมทั้งระบบJAVA_HOMEสำหรับผู้ใช้ทั้งหมดรวมถึงผู้ใช้รู

ที่ต้องการ:

  • ผู้ใช้ทั่วไปสามารถเข้าถึงได้
  • สามารถเข้าถึงรูตได้
  • โหลดเสมอไม่เพียง แต่สำหรับ bash (gnome-terminal จะไม่เริ่ม bash โดยค่าเริ่มต้น)
  • ทำงานกับ Ubuntu, Debian และ Red Hat เป็นทางเลือก
  • ดีมากถ้าการเพิ่มสามารถเขียนสคริปต์ได้อย่างง่ายดาย

สำหรับเปลือกหอยโต้ตอบตรวจสอบเรื่องนี้ขอให้อูบุนตูด้ายออก
quickshiftin

คำตอบ:


26

เนื่องจากไม่มีใครเพิ่มคำตอบแบบเต็มนี่คือสิ่งที่ฉันพิจารณาที่ดีที่สุดอย่างน้อยสำหรับ Ubuntu แต่ฉันเปิดให้ปรับคำตอบสำหรับแพลตฟอร์มอื่น * ระวัง

# **create**: /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/default-java

ตัวเลือกอื่น ๆ ที่ได้รับการพิจารณาแล้วแต่ตัดออก:

  • /etc/environment ทำงานได้ แต่ยากต่อการบำรุงรักษาเนื่องจากเครื่องมือหรือผู้อื่นสามารถแก้ไขได้
  • /etc/profile - เหมือนด้านบน

11

บน Debian / Ubuntu ที่จะเป็น/ etc / environment

ฉันไม่ทราบว่า Red Hat เทียบเท่า


1
ฉันเชื่อว่า / etc / สิ่งแวดล้อมเลิกใช้แล้ว
Pat James

@PatJames คุณมีข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้หรือไม่? ฉันลอง / etc / environment ไม่โหลดสำหรับรูทแม้หลังจากรีบูตเครื่อง
โซริน

@SorinSbarnea ข้อมูลบางอย่างอยู่ที่นี่: wiki.debian.org/Localeระบุ / etc / สภาพแวดล้อมไม่ได้ใช้ในการออกรุ่นใหม่อีกต่อไป
Pat James

1
หน้าเท่านั้นที่บอกว่าคุณไม่ควร /etc/environmentแต่สถานที่ที่เกี่ยวข้องกับตัวแปรใน ดูเพิ่มเติมserverfault.com/a/584072/26218
Flow

11

ฉันไม่เข้าใจว่าทำไมคุณตัดออก / etc / โปรไฟล์ นั่นคือตำแหน่งที่ถูกต้อง


9

มีผู้ตอบไม่กี่คนที่บอกว่า/etc/environmentเป็น depricated และ / หรือไม่ได้ใช้ใน Debian อีกต่อไปและนี่เป็นของปลอม

ไฟล์นี้ถูกอ่านโดย PAM - โดยเฉพาะpam_env(8)ผ่านทางค่าเริ่มต้นกับenvfileแฟล็ก manpage ยังระบุค่าเริ่มต้นนี้ภายใต้ส่วนไฟล์

วิกิยกมา (โดยเฉพาะหนึ่งในสถานที่เกิดเหตุ) /etc/profileเพียงรัฐที่ตัวแปรสภาพแวดล้อมของสถานที่เกิดเหตุตามที่มีความหมายในขณะนี้จะอยู่ใน คำแถลงของพวกเขา "(ใน Debian เวอร์ชันเก่าเช่น / etc / environment)" นั้นคลุมเครือและอยู่ในบริบทของตำแหน่งที่ตั้ง

grep ที่รวดเร็วในการ/etc/pam.dแสดง:

root@box:/etc/pam.d# grep pam_env.so *
atd:auth        required        pam_env.so
cron:session       required   pam_env.so
cron:session       required   pam_env.so envfile=/etc/default/locale
login:session       required   pam_env.so readenv=1
login:session       required   pam_env.so readenv=1 envfile=/etc/default/locale
sshd:auth       required     pam_env.so # [1]
sshd:auth       required     pam_env.so envfile=/etc/default/locale
su:session       required   pam_env.so readenv=1
su:session       required   pam_env.so readenv=1 envfile=/etc/default/locale

บรรดาสายการกำหนดค่าเป็นสารเติมแต่งและเป็นครั้งแรกที่จะหายไปมันจึงเริ่มต้นที่envfile/etc/environment

แน่นอนทั้งหมดนี้ขึ้นอยู่กับว่าไบนารีใดที่คุณใช้ ( crond, เชลล์การเข้าสู่ระบบและอื่น ๆ ) ถูกคอมไพล์กับ PAM

ในที่สุดนี้ก็แสดงให้เห็นว่าระบบอื่น ๆ ที่ใช้ PAM (เช่น RedHat) ทำตัวเหมือนที่เห็นได้ใน manpage นั้น ๆ


2

หนึ่งสังเกตด้าน: มีลักษณะที่เป็นโมดูลสิ่งแวดล้อม ฉันใช้สิ่งนี้ทุกครั้งที่ฉันต้องเสนอสภาพแวดล้อม UNIX ที่ซับซ้อนรุ่นที่ขยายได้และกระชับเองให้กับผู้ใช้หลายสิบหรือหลายร้อยคน ส่วนใหญ่จะใช้กับสภาพแวดล้อม HPC แบบหลายผู้ใช้ขนาดใหญ่ เพียงแค่ใช้มันสำหรับตัวแปรเฉพาะอย่างใดอย่างหนึ่งอย่างแน่นอนมันเกินวิศวกรรม แต่มันจะทำงานที่ยอดเยี่ยมเมื่อคุณต้องการมากกว่าสองสามชุดซอฟต์แวร์และสภาพแวดล้อมของพวกเขา


1

/etc/profileควรทำงาน. ผมทดสอบเพียงแค่ตอนนี้เพื่อให้แน่ใจว่าใส่export SOMETEST=1234ไป/etc/profileและหลังการเข้าสู่ระบบอีกครั้งecho $SOMETESTให้ฉัน1234ตามที่คาดไว้ ยังมาจากgnome-terminal



0

คุณไม่สามารถใช้ไฟล์เฉพาะ ~ ในกรณีนี้ ดังนั้น....

/etc/profileจะเป็นสถานที่ที่เหมาะสมสำหรับมันในกรณีนี้ ผู้ใช้ที่เข้าสู่ระบบในปัจจุบันต้องได้รับเซสชันการเข้าสู่ระบบใหม่ แต่นี่ไม่ควรเป็นปัญหาใหญ่

@ wk01: /etc/profileไม่ได้โหลดโดยเชลล์ที่ไม่ใช่โลแกน คุณ.bashrc อาจโหลด ...

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