จะตั้งค่าตัวแปรสภาพแวดล้อมสำหรับทุกคนภายใต้ระบบ linux ของฉันได้อย่างไร


133

ฉันสามารถตั้งค่าบางอย่างที่เป็นสากลสำหรับผู้ใช้ทั้งหมดของฉันได้หรือไม่


2
ส่งออกหรือเปล่า ต่อท้ายและเป็นสากล?
TIMEX

ฉันคิดว่ามันเป็นเพียงการต่อท้ายในเซสชั่นปัจจุบันเมื่อคุณเปิดเซสชันใหม่ในเทอร์มินัลมันจะหายไป
Haryono Sariputra

คำตอบ:


104

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


4
จะเป็นอย่างไรหากผู้ใช้บางรายใช้เชลล์อื่นเช่น zsh
Matthieu Napoli

70
นี่ไม่ใช่ทั่วโลก ... มันถูก จำกัด ไว้ที่เปลือก .. แย่เกินไปมันเป็นคำตอบที่ได้รับการยอมรับมากที่สุด
mmm

1
zsh จะซอร์สไฟล์. sh ใน /etc/profile.d/ คุณสามารถดูได้จาก / etc / zshrc @Matthieu Napoli
Bily

4
ไม่ได้ใช้สคริปต์สำหรับผู้ใช้ ROOT
วาล


38

ชาย 8 pam_env

ชาย 5 pam_env.conf

หากบริการล็อกอินทั้งหมดใช้PAMและบริการล็อกอินทั้งหมดมีsession required pam_env.soอยู่ใน/etc/pam.d/*ไฟล์คอนฟิกูเรชันตามลำดับเซสชันการล็อกอินทั้งหมดจะมีตัวแปรสภาพแวดล้อมบางอย่างที่กำหนดไว้ในpam_envไฟล์คอนฟิกูเรชันของ

บนลินุกซ์ที่ทันสมัยที่สุดนี้คือทั้งหมดที่มีโดยเริ่มต้น - /etc/security/pam_env.confเพียงแค่เพิ่มตัวแปรสภาพแวดล้อมของโลกที่คุณต้องการที่จะ

สิ่งนี้ใช้งานได้โดยไม่คำนึงถึงเชลล์ของผู้ใช้และใช้ได้กับการเข้าสู่ระบบแบบกราฟิกด้วย (หากตั้งค่า xdm / kdm / gdm / entrance / …เช่นนี้)


1
+1 คุณต้องรีบูตหลังจากเพิ่มตัวแปรใน pam_env.conf ทำให้ทันทีเมื่อบิน $ echo $ variablename ไม่แสดง

9
คุณไม่จำเป็นต้องรีบูตคุณต้องเข้าสู่ระบบใหม่ (ไม่มีการรีบูตเซิร์ฟเวอร์ที่สำคัญสำหรับฉัน)
Lyndon White

สิ่งนี้ดูเหมือนจะใช้ไม่ได้กับ Distro ของฉัน Mint 17.2 ไฟล์ที่ติดตั้งไว้ล่วงหน้าจะถูกแสดงความคิดเห็นทั้งหมดและถ้าฉันเพิ่มบางอย่างเช่นecho foo>/home/me/barและรีบูต (และเข้าสู่ระบบอีกครั้ง) ไฟล์นั้นจะไม่ถูกสร้างขึ้น (อาจมีวิธีทดสอบที่ดีกว่านี้ แต่ฉันอยากให้แน่ใจก่อนแสดงความคิดเห็นที่นี่)
Michael Scheper

16

น่าแปลกใจที่ Unix และ Linux ไม่มีที่สำหรับตั้งค่าตัวแปรสภาพแวดล้อมส่วนกลาง สิ่งที่ดีที่สุดที่คุณทำได้คือจัดให้เชลล์ใด ๆ มีการเริ่มต้นเฉพาะไซต์

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

แต่ใครก็ตามที่มี cshหรือtcshเชลล์จะไม่เห็นและฉันไม่เชื่อว่าcshมีไฟล์เริ่มต้นส่วนกลาง


8
/etc/environmentดูเหมือนว่าจะตั้งค่าตัวแปรสภาพแวดล้อมสำหรับฉันแม้ในฐานะผู้ใช้รูท ฉันรู้ว่า/etc/environmentอยู่บน amazon linux และ ubuntu ฉันไม่ได้ตรวจสอบว่าใช้ได้กับ csh, tcsh หรือ zsh หรือไม่
Jordan Stewart

มันไม่เฉพาะเจาะจงกับเชลล์ที่คุณใช้ แต่เป็นระดับโลกอย่างแท้จริง
Xerus

9

ข้อความที่ตัดตอนมาที่น่าสนใจจาก bash manpage:

เมื่อเรียกใช้ bash เป็นเชลล์ล็อกอินแบบโต้ตอบหรือเป็นเชลล์แบบไม่โต้ตอบด้วย--loginอ็อพชันนั้นก่อนอื่นจะอ่านและเรียกใช้คำสั่งจากไฟล์/etc/profileหากมีไฟล์นั้นอยู่ หลังจากที่ได้อ่านแฟ้มที่จะมองหา~/.bash_profile, ~/.bash_loginและ~/.profileในลำดับที่และอ่านและรันคำสั่งจากคนแรกที่มีอยู่และสามารถอ่านได้ --noprofileตัวเลือกที่อาจจะนำมาใช้เมื่อเปลือกจะเริ่มต้นในการยับยั้งการทำงานนี้
...
เมื่อเชลล์แบบโต้ตอบที่ไม่ใช่เชลล์ล็อกอินเริ่มทำงาน bash จะอ่านและเรียกใช้คำสั่งจาก /etc/bash.bashrcและ~/.bashrcหากมีไฟล์เหล่านี้ สิ่งนี้อาจถูกยับยั้งโดยใช้--norcตัวเลือก --rcfileตัวเลือกที่ไฟล์จะบังคับทุบตีอ่านและรันคำสั่งจากไฟล์แทนและ/etc/bash.bashrc ~/.bashrc

ลองดู/etc/profileหรือ/etc/bash.bashrcไฟล์เหล่านี้เป็นตำแหน่งที่เหมาะสมสำหรับการตั้งค่าส่วนกลาง ใส่สิ่งนี้ลงไปเพื่อตั้งค่าตัวแปรสภาพแวดล้อม:

export MY_VAR=xxx

โปรดทราบว่าในระบบ Unix แบบคลาสสิกทั้ง Bourne shell และ Korn shell ยังอ่าน / etc / profile ซึ่งน่าจะเป็นตำแหน่งที่ใช้กันอย่างแพร่หลายสำหรับการตั้งค่าสภาพแวดล้อมของระบบ C เชลล์บางเวอร์ชันมีลักษณะใน /etc/csh.cshrc และ /etc/csh.login รวมถึงตำแหน่งต่อผู้ใช้ อื่น ๆ ไม่ได้ใช้ไฟล์การตั้งค่าสภาพแวดล้อมระบบใด ๆ
Jonathan Leffler

ยอดเยี่ยมสิ่งที่ฉันกำลังมองหาจนถึงการตั้งค่า env สำหรับผู้ใช้เชลล์ที่ไม่ได้ล็อกอิน
David Mann

ขออภัยดูเหมือนว่าฉันจะลดคะแนนโดยไม่ได้ตั้งใจเมื่อลูกศรมองไม่เห็นไประยะหนึ่งแล้ว ... คุณช่วยแก้ไขได้ไหม (พิมพ์คำว่า "สิ่งแวดล้อม" ในบรรทัดที่สองถึงบรรทัดสุดท้าย) เพื่อให้ฉันสามารถลบการลดคะแนนได้หรือไม่
Benjamin W.

4

การใช้ PAM นั้นยอดเยี่ยม

# modify the display PAM
$ cat /etc/security/pam_env.conf 
# BEFORE: $ export DISPLAY=:0.0 && python /var/tmp/myproject/click.py &
# AFTER : $ python $abc/click.py &
DISPLAY  DEFAULT=${REMOTEHOST}:0.0 OVERRIDE=${DISPLAY}
abc   DEFAULT=/var/tmp/myproject

2

ทุกกระบวนการที่ทำงานภายใต้เคอร์เนลลินุกซ์จะได้รับสภาพแวดล้อมที่เป็นเอกลักษณ์ของตัวเองซึ่งสืบทอดมาจากพาเรนต์ ในกรณีนี้พาเรนต์จะเป็นเชลล์เอง (วางไข่เชลล์ย่อย) หรือโปรแกรม 'ล็อกอิน' (บนระบบทั่วไป)

เนื่องจากสภาพแวดล้อมของกระบวนการแต่ละกระบวนการได้รับการปกป้องจึงไม่มีวิธีใดที่จะ 'ฉีด' ตัวแปรสภาพแวดล้อมให้กับทุกกระบวนการที่กำลังทำงานอยู่ดังนั้นแม้ว่าคุณจะแก้ไขเชลล์ .rc / โปรไฟล์เริ่มต้นมันจะไม่มีผลจนกว่าแต่ละกระบวนการจะออกและโหลดซ้ำ การตั้งค่าเริ่มต้น

ดูใน / etc / เพื่อแก้ไขตัวแปรเริ่มต้นเริ่มต้นสำหรับเชลล์ใด ๆ เพียงแค่ตระหนักว่าผู้ใช้สามารถ (และมักจะทำ) เปลี่ยนได้ในการตั้งค่าส่วนบุคคล

Unix ได้รับการออกแบบมาเพื่อให้เชื่อฟังผู้ใช้ภายในขีด จำกัด

หมายเหตุ : Bash ไม่ใช่เปลือกเดียวในระบบของคุณ ให้ความสนใจอย่างรอบคอบว่าลิงก์สัญลักษณ์ / bin / sh ชี้ไปที่อะไร ในหลาย ๆ ระบบอาจเป็นเส้นประซึ่งเป็นค่าเริ่มต้น (โดยค่าเริ่มต้นโดยไม่มีการเรียกใช้พิเศษ) ถูกต้อง ดังนั้นคุณควรดูแลแก้ไขค่าเริ่มต้นทั้งสองหรือสคริปต์ที่ขึ้นต้นด้วย / bin / sh จะไม่สืบทอดค่าเริ่มต้นส่วนกลางของคุณ ในทำนองเดียวกันระวังเพื่อหลีกเลี่ยงไวยากรณ์ที่มีเพียงbashเท่านั้นที่เข้าใจเมื่อแก้ไขทั้งสองอย่างหรือที่เรียกavoiding bashismsว่า

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