ฉันสามารถตั้งค่าบางอย่างที่เป็นสากลสำหรับผู้ใช้ทั้งหมดของฉันได้หรือไม่
ฉันสามารถตั้งค่าบางอย่างที่เป็นสากลสำหรับผู้ใช้ทั้งหมดของฉันได้หรือไม่
คำตอบ:
เช่นเดียวกับ/etc/profile
ที่คนอื่น ๆ ได้กล่าวถึงบางระบบลินุกซ์ตอนนี้ใช้ไดเรกทอรี/etc/profile.d/
; .sh
ไฟล์ใด ๆในนั้นจะมีที่มาจาก/etc/profile
. การรักษาสภาพแวดล้อมที่กำหนดเองของคุณไว้ในไฟล์เหล่านี้ดีกว่าการแก้ไขเพียง/etc/profile
เล็กน้อย
หาก LinuxOS ของคุณมีไฟล์นี้:
/etc/environment
คุณสามารถใช้เพื่อตั้งค่าตัวแปรสภาพแวดล้อมอย่างถาวรสำหรับผู้ใช้ทุกคน
ดึงมาจาก: http://www.sysadmit.com/2016/04/linux-variables-de-entorno-permanentes.html
หากบริการล็อกอินทั้งหมดใช้PAMและบริการล็อกอินทั้งหมดมีsession required pam_env.so
อยู่ใน/etc/pam.d/*
ไฟล์คอนฟิกูเรชันตามลำดับเซสชันการล็อกอินทั้งหมดจะมีตัวแปรสภาพแวดล้อมบางอย่างที่กำหนดไว้ในpam_env
ไฟล์คอนฟิกูเรชันของ
บนลินุกซ์ที่ทันสมัยที่สุดนี้คือทั้งหมดที่มีโดยเริ่มต้น - /etc/security/pam_env.conf
เพียงแค่เพิ่มตัวแปรสภาพแวดล้อมของโลกที่คุณต้องการที่จะ
สิ่งนี้ใช้งานได้โดยไม่คำนึงถึงเชลล์ของผู้ใช้และใช้ได้กับการเข้าสู่ระบบแบบกราฟิกด้วย (หากตั้งค่า xdm / kdm / gdm / entrance / …เช่นนี้)
echo foo>/home/me/bar
และรีบูต (และเข้าสู่ระบบอีกครั้ง) ไฟล์นั้นจะไม่ถูกสร้างขึ้น (อาจมีวิธีทดสอบที่ดีกว่านี้ แต่ฉันอยากให้แน่ใจก่อนแสดงความคิดเห็นที่นี่)
น่าแปลกใจที่ Unix และ Linux ไม่มีที่สำหรับตั้งค่าตัวแปรสภาพแวดล้อมส่วนกลาง สิ่งที่ดีที่สุดที่คุณทำได้คือจัดให้เชลล์ใด ๆ มีการเริ่มต้นเฉพาะไซต์
หากคุณใส่เข้าไปสิ่ง/etc/profile
นั้นจะดูแลสิ่งต่าง ๆ สำหรับผู้ใช้เชลล์ที่เข้ากันได้กับ posix ส่วนใหญ่ สิ่งนี้น่าจะ "ดีพอ" สำหรับวัตถุประสงค์ที่ไม่สำคัญ
แต่ใครก็ตามที่มี csh
หรือtcsh
เชลล์จะไม่เห็นและฉันไม่เชื่อว่าcsh
มีไฟล์เริ่มต้นส่วนกลาง
/etc/environment
ดูเหมือนว่าจะตั้งค่าตัวแปรสภาพแวดล้อมสำหรับฉันแม้ในฐานะผู้ใช้รูท ฉันรู้ว่า/etc/environment
อยู่บน amazon linux และ ubuntu ฉันไม่ได้ตรวจสอบว่าใช้ได้กับ csh, tcsh หรือ zsh หรือไม่
ข้อความที่ตัดตอนมาที่น่าสนใจจาก 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
การใช้ 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
ทุกกระบวนการที่ทำงานภายใต้เคอร์เนลลินุกซ์จะได้รับสภาพแวดล้อมที่เป็นเอกลักษณ์ของตัวเองซึ่งสืบทอดมาจากพาเรนต์ ในกรณีนี้พาเรนต์จะเป็นเชลล์เอง (วางไข่เชลล์ย่อย) หรือโปรแกรม 'ล็อกอิน' (บนระบบทั่วไป)
เนื่องจากสภาพแวดล้อมของกระบวนการแต่ละกระบวนการได้รับการปกป้องจึงไม่มีวิธีใดที่จะ 'ฉีด' ตัวแปรสภาพแวดล้อมให้กับทุกกระบวนการที่กำลังทำงานอยู่ดังนั้นแม้ว่าคุณจะแก้ไขเชลล์ .rc / โปรไฟล์เริ่มต้นมันจะไม่มีผลจนกว่าแต่ละกระบวนการจะออกและโหลดซ้ำ การตั้งค่าเริ่มต้น
ดูใน / etc / เพื่อแก้ไขตัวแปรเริ่มต้นเริ่มต้นสำหรับเชลล์ใด ๆ เพียงแค่ตระหนักว่าผู้ใช้สามารถ (และมักจะทำ) เปลี่ยนได้ในการตั้งค่าส่วนบุคคล
Unix ได้รับการออกแบบมาเพื่อให้เชื่อฟังผู้ใช้ภายในขีด จำกัด
หมายเหตุ : Bash ไม่ใช่เปลือกเดียวในระบบของคุณ ให้ความสนใจอย่างรอบคอบว่าลิงก์สัญลักษณ์ / bin / sh ชี้ไปที่อะไร ในหลาย ๆ ระบบอาจเป็นเส้นประซึ่งเป็นค่าเริ่มต้น (โดยค่าเริ่มต้นโดยไม่มีการเรียกใช้พิเศษ) ถูกต้อง ดังนั้นคุณควรดูแลแก้ไขค่าเริ่มต้นทั้งสองหรือสคริปต์ที่ขึ้นต้นด้วย / bin / sh จะไม่สืบทอดค่าเริ่มต้นส่วนกลางของคุณ ในทำนองเดียวกันระวังเพื่อหลีกเลี่ยงไวยากรณ์ที่มีเพียงbashเท่านั้นที่เข้าใจเมื่อแก้ไขทั้งสองอย่างหรือที่เรียกavoiding bashisms
ว่า