ถ้าผมตั้งค่าตัวแปรในก็ดูเหมือนว่าจะนำไปใช้กับผู้บริหารในขณะที่/etc/environment
sudo su
ฉันจะทำให้ตัวแปรใช้กับทุกคนได้อย่างไร โดยเฉพาะอย่างยิ่งเมื่อพวกเขาอยู่ใน terminal? การตั้งค่า/etc/enviroment
ไม่เหมาะกับการทุบตีหรือไม่?
ถ้าผมตั้งค่าตัวแปรในก็ดูเหมือนว่าจะนำไปใช้กับผู้บริหารในขณะที่/etc/environment
sudo su
ฉันจะทำให้ตัวแปรใช้กับทุกคนได้อย่างไร โดยเฉพาะอย่างยิ่งเมื่อพวกเขาอยู่ใน terminal? การตั้งค่า/etc/enviroment
ไม่เหมาะกับการทุบตีหรือไม่?
คำตอบ:
การ/etc/environment
อัปเดตจะใช้ได้เฉพาะในเซสชันถัดไปเท่านั้น แต่จะไม่โหลดใหม่โดยอัตโนมัติ
ซึ่งหมายความว่าคุณไม่สามารถเปลี่ยนแปลงได้สำหรับเซสชันที่เริ่มต้นแล้วสำหรับผู้ใช้รายอื่น
หากคุณต้องการ "โหลดซ้ำ" สิ่งที่อยู่ในนั้น/etc/environment
คุณต้องใช้คำสั่งต่อไปนี้:
source /etc/environment
แต่จะใช้งานได้กับเซสชันปัจจุบันของคุณเท่านั้นผู้ใช้รายอื่นจะไม่ได้รับผลกระทบจนกว่าพวกเขาจะเริ่มเซสชันใหม่หรือเรียกใช้คำสั่งด้านบนในเซสชันของตนเอง
ไฟล์กำหนดค่าเหล่านี้ไม่ว่าจะเป็นส่วนกลาง ( /etc/environment
, /etc/profile
) หรือเฉพาะผู้ใช้ ( ~/.profile
, ~/.bashrc
) จะได้รับการดำเนินการในการเข้าสู่ระบบ / ครั้งถัดไปเท่านั้น
ทั่วโลกไฟล์นำไปใช้กับผู้ใช้ทุกคน (ไม่เพียง แต่ root) ... แต่คุณต้องรีสตาร์ทเซสชั่นเข้าสู่ระบบเพื่อดูการเปลี่ยนแปลงสะท้อนให้เห็นในสภาพแวดล้อม สิ่งนี้สามารถเกิดขึ้นได้โดยการโทรsu
ตามที่คุณสังเกต ... หรือโดยออกจากระบบ / รีบูตเครื่องหรือ คุณสามารถทำได้su
กับผู้ใช้ที่ไม่ใช่รูทและคุณจะเห็นว่าพวกเขามีการเปลี่ยนแปลงสภาพแวดล้อมเช่นกัน
เหตุผลที่คุณต้องรีบูตหรือเข้าสู่ระบบอีกครั้งเพื่อรับสภาพแวดล้อมโลกที่รับมาเนื่องจากสภาพแวดล้อมที่สืบทอดมาจากกระบวนการหลักและกระบวนการรูทสำหรับทุกสิ่งที่คุณเรียกใช้คือเชลล์ล็อกอินของคุณ ... ดังนั้นหากเชลล์ล็อกอินไม่มี สภาพแวดล้อม ... จากนั้นกระบวนการต่าง ๆ จะไม่เริ่มต้นภายในเชลล์ล็อกอิน แน่นอนคุณสามารถตั้งค่า / อัปเดตสภาพแวดล้อมสำหรับแต่ละกระบวนการในขณะที่คุณเริ่มต้น แต่คุณจะต้องตั้งค่าสภาพแวดล้อมสำหรับล็อกอินเชลล์และรีสตาร์ทกระบวนการย่อยทั้งหมดเพื่อให้พวกเขาเห็นการเปลี่ยนแปลง
ในฐานะที่เป็นคนอื่นที่กล่าวถึงคุณจะต้องรีบูตหรือออกจากระบบ / เข้าสู่ระบบเพื่อให้การเปลี่ยนแปลง/etc/profile
, /etc/profile.d/*.sh
และ/etc/environment
จะหยิบขึ้นมา
นี่เป็นเพราะในขณะที่ไฟล์เหล่านี้ระบุสภาพแวดล้อมส่วนกลาง ... พวกเขาจะทำงานเพียงครั้งเดียวในการเข้าสู่ระบบและดังนั้นการเข้าสู่ระบบ / เซสชันที่มีอยู่จะไม่สะท้อนการเปลี่ยนแปลงของไฟล์เหล่านั้น การรีบูต "รีเซ็ต" ทุกคนเข้าสู่ระบบบังคับให้พวกเขาเลือกสภาพแวดล้อมใหม่
ในเซสชันการเข้าสู่ระบบของคุณเองคุณสามารถsource /etc/profile
รับการเปลี่ยนแปลงโดยไม่ต้องรีบูตหรือออกจากระบบ / เข้าสู่ระบบ ... แต่จะมีผลเฉพาะเซสชันของคุณเองและกระบวนการใหม่ที่ทำงานภายในเซสชันของคุณ
โปรดทราบว่าไม่มีการแก้ไขตัวแปรใน/etc/environment
(ไม่ใช่สคริปต์) ดังนั้นคุณจึงไม่สามารถทำสิ่งที่ต้องการPATH="$PATH:/my/custom/path"
ได้
โปรดทราบว่า/etc/profile
และ/etc/profile.d/*.sh
จะใช้สำหรับเซสชันการเข้าสู่ระบบเท่านั้นดังนั้นสภาพแวดล้อมที่กำหนดค่าจะไม่สามารถใช้ได้กับบัญชีที่ไม่ใช่ระบบการเข้าสู่ระบบ (เช่นถ้าคุณพยายามตั้งค่าตัวแปรสภาพแวดล้อมสำหรับกระบวนการ daemon ที่ทำงานนอกเปลือกการเข้าสู่ระบบของคุณ)
หมายเหตุว่าbashrc
ไม่เป็นประโยชน์สำหรับการตั้งค่าสภาพแวดล้อมสำหรับเปลือกเข้าสู่ระบบทั้งหมด แต่สำหรับเปลือกหอยทุบตีและกระบวนการย่อย ... เพื่อให้ความจริง "ทั่วโลก" หรือ "ผู้ใช้ทั่วโลก" คุณอาจต้องการที่จะนำการตั้งค่าสภาพแวดล้อมของคุณ/etc/profile
หรือหรือ/etc/profile.d/my-custom-env.sh
~/.profile
เชลล์อื่น ๆ (เช่น zsh) มีไฟล์กำหนดค่าของตัวเองเช่นกันดังนั้นการกำหนดค่าสภาพแวดล้อมที่ไม่เฉพาะเจาะจงของ bash ใน bashrc จะทำให้เกิดปัญหาหรือความสับสนหาก / เมื่อคุณสลับเชลล์ (หรือมีผู้ใช้อื่น ๆ บนระบบ
เป็นปัญหาที่พบบ่อยในการติดตั้งโปรแกรมใหม่และจำเป็นต้องระบุสภาพแวดล้อมบางอย่างเพื่อให้ทำงานได้อย่างถูกต้อง สภาพแวดล้อมทั่วโลกเป็นคำตอบเดียว แต่บ่อยครั้งจะต้องมีการรีบูตซึ่งไม่เหมาะสำหรับเซิร์ฟเวอร์และการจัดสรร / กำหนดค่ากรณีใช้งานโดยอัตโนมัติ คุณควรถามตัวเองว่านี่เป็นตัวแปรที่ผู้ใช้และโปรแกรมทั้งหมดบนระบบต้องการหรือเป็นเพียงสิ่งที่คุณต้องการให้มีให้สำหรับผู้ใช้หรือโปรแกรมเฉพาะ
ดูที่การรวมสภาพแวดล้อมในโปรไฟล์หรือ bashrc ในโฮมไดเร็กตอรี่ของผู้ใช้ (เช่น~/.profile
~/.bashrc
) ขึ้นอยู่กับว่าคุณต้องการสิ่งนี้สำหรับการโต้ตอบเชลล์ล็อกอิน, bash-only, ฯลฯ
โปรดทราบว่าสิ่งนี้ต้องการการรีบูตหรือออกจากระบบ / การเข้าสู่ระบบเพื่อให้การเปลี่ยนแปลงสภาพแวดล้อมสามารถใช้ได้กับกระบวนการทั้งหมดภายในเซสชันการเข้าสู่ระบบของผู้ใช้ ผู้ใช้สามารถsource ~/.profile
... แต่สามารถทำได้ภายในเทอร์มินัลและอัพเดตสภาพแวดล้อมภายในเซสชันเทอร์มินัลและกระบวนการลูก ... ไม่จำเป็นสำหรับสภาพแวดล้อมการเข้าสู่ระบบทั้งหมดของผู้ใช้
หนึ่งคือการจัดเตรียมสภาพแวดล้อมเมื่อรันคำสั่ง:
VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE" /path/to/program --opt1 --op2
หากคุณกำลังใช้ systemd คุณยังสามารถระบุสภาพแวดล้อมในแฟ้มหน่วย / บริการภายใต้[Service]
ด้วยEnvironment=VAR_NAME="VAR VALUE" VAR2_NAME="VAR2_VALUE
ตัวเลือกนี้อาจรู้สึก clunky เพราะคุณต้องระบุสภาพแวดล้อมในแต่ละครั้งที่คุณเรียกใช้โปรแกรม แต่ถ้าสภาพแวดล้อมนั้นจำเป็นสำหรับโปรแกรมนั้นเท่านั้น ... นี่เป็นวิธีที่ดีที่สุดและคุณควรทำความคุ้นเคยกับมันและอย่าทิ้งทุกอย่าง ลงในไฟล์ bashrc หรือโปรไฟล์
หากคุณไม่ได้ใช้ systemd หรือ init เพื่อตั้งค่าสภาพแวดล้อมและรันโปรแกรม ... แน่นอนว่าคุณสามารถปิดการใช้งานโปรแกรมด้วยสคริปต์ทุบตีที่คุณบันทึกคำสั่งแบบเต็มรวมถึงการตั้งค่าสภาพแวดล้อมเพื่อความสะดวก
นอกจากนี้ยังมีคำตอบโดยละเอียดที่นี่ซึ่งฉันขอแนะนำให้คุณอ่าน: /ubuntu//a/247769/824160
สร้างเชลล์สคริปต์ที่กำหนดเองภายใต้
/etc/profile.d/
เพิ่มตัวแปรสภาพแวดล้อมส่วนกลางของคุณภายในสคริปต์ที่คุณสร้างขึ้น, รีบูตเครื่องจากนั้นทุกคนจะสามารถใช้งานได้
การเพิ่มตัวแปรให้/etc/environment
เหมาะกับฉัน
อย่างไรก็ตามฉันต้องรีบูตเครื่องหลังจากเปลี่ยน/etc/environment
เพื่อให้การเปลี่ยนแปลงมีผล เพียงแค่ปิดและเปิดหน้าต่างเทอร์มินัลใหม่ไม่เพียงพอ
source /etc/environment
โหลดซ้ำได้ตลอดเวลา