สถานที่ที่ต้องการตั้งค่าPATH
envvar อยู่ที่ไหน
~/.profile
หรือ/etc/environment
?
จะเกิดอะไรขึ้นเมื่อPATH
ทั้งสองสถานที่ตั้งขึ้น ผลลัพธ์ที่ได้คือการต่อกันของค่าทั้งสองที่กำหนดไว้ในสองแห่งนั้นหรือไม่?
สถานที่ที่ต้องการตั้งค่าPATH
envvar อยู่ที่ไหน
~/.profile
หรือ/etc/environment
?
จะเกิดอะไรขึ้นเมื่อPATH
ทั้งสองสถานที่ตั้งขึ้น ผลลัพธ์ที่ได้คือการต่อกันของค่าทั้งสองที่กำหนดไว้ในสองแห่งนั้นหรือไม่?
คำตอบ:
สรุป:
หากคุณต้องการเพิ่มเส้นทาง (เช่น/your/additional/path
) ให้กับPATH
ตัวแปรของคุณสำหรับผู้ใช้ปัจจุบันเท่านั้นและไม่ใช่สำหรับผู้ใช้ทั้งหมดของคอมพิวเตอร์ของคุณโดยปกติคุณจะใส่มันไว้ท้ายสุดของ~/.profile
ตัวอย่างหนึ่งในสองตัวอย่างนี้:
PATH="/your/additional/path:$PATH"
PATH="$PATH:/your/additional/path"
โปรดทราบว่าลำดับความสำคัญของเส้นทางลดลงจากซ้ายไปขวาดังนั้นเส้นทางแรกมีลำดับความสำคัญสูงสุด หากคุณเพิ่มเส้นทางของคุณทางด้านซ้ายของ$PATH
มันจะมีลำดับความสำคัญสูงสุดและ executables ในตำแหน่งนั้นจะแทนที่คนอื่น ๆ ทั้งหมด หากคุณเพิ่มเส้นทางของคุณทางด้านขวาจะมีลำดับความสำคัญต่ำสุดและจะต้องเลือกโปรแกรมที่เรียกใช้จากตำแหน่งอื่น
แต่ถ้าคุณจำเป็นต้องตั้งค่าตัวแปรสภาพแวดล้อมที่ผู้ใช้ทุกคนผมจะยังคงไม่แนะนำให้สัมผัส/etc/environment
แต่การสร้างไฟล์ที่มีชื่อไฟล์ที่ลงท้ายในใน.sh
สคริปต์และสคริปต์ทั้งหมดในเป็นเทียบเท่าระดับโลกของผู้ใช้แต่ละบุคคลและดำเนินการตามสคริปต์เปลือกหอยปกติโดยในช่วงเริ่มต้นของพวกเขา/etc/profile.d/
/etc/profile
/etc/profile.d
~/.profile
รายละเอียดเพิ่มเติม:
/etc/environment
เป็นไฟล์การกำหนดค่าทั่วทั้งระบบซึ่งหมายความว่าผู้ใช้ทุกคนจะใช้ไฟล์นี้ มันเป็นเจ้าของโดยroot
ดังนั้นคุณจะต้องเป็นผู้ใช้ผู้ดูแลระบบและใช้sudo
ในการแก้ไข
~/.profile
เป็นหนึ่งในสคริปต์การเริ่มต้นเชลล์ส่วนบุคคลของผู้ใช้ของคุณ ผู้ใช้ทุกคนมีหนึ่งไฟล์และสามารถแก้ไขไฟล์ได้โดยไม่กระทบกับผู้อื่น
/etc/profile
และ/etc/profile.d/*.sh
เป็นสคริปต์การเริ่มต้นสากลที่เทียบเท่ากับ~/.profile
ผู้ใช้แต่ละคน สคริปต์โกลบอลจะถูกเรียกใช้งานก่อนสคริปต์เฉพาะผู้ใช้ และสคริปต์หลัก/etc/profile
จะเรียกใช้งาน*.sh
สคริปต์ทั้งหมด/etc/profile.d/
ก่อนที่จะออก
/etc/environment
ไฟล์ดังกล่าวมีเพียงบรรทัดนี้เท่านั้น:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
มันตั้งค่าPATH
ตัวแปรสำหรับผู้ใช้ทั้งหมดในระบบให้เป็นค่าเริ่มต้นนี้ซึ่งไม่ควรเปลี่ยนในทางที่สำคัญ อย่างน้อยคุณไม่ควรลบใด ๆ ของเส้นทางที่สำคัญเช่น/bin
, /sbin
, /usr/bin
และ/usr/sbin
จากมัน
ไฟล์นี้อ่านเป็นหนึ่งในไฟล์การกำหนดค่าแรกโดยทุกเชลล์ของผู้ใช้ทุกคน ทราบว่าเป็นไม่เชลล์สคริปต์ มันเป็นเพียงไฟล์การกำหนดค่าที่ได้รับการแยกวิเคราะห์อย่างใดและอาจมีเพียงการกำหนดตัวแปรสภาพแวดล้อม!
~/.profile
ไฟล์สามารถมีหลายสิ่งหลายอย่างโดยค่าเริ่มต้นจะมีในหมู่สิ่งอื่น ๆ ตรวจสอบไม่ว่าจะเป็น~/bin
ไดเรกทอรีที่มีอยู่และเสริมว่าที่มีอยู่ของผู้ใช้PATH
ตัวแปรเช่นนี้ (พี่อูบุนตูเผยแพร่ก่อน 16.04 - รุ่นใหม่เพิ่มโดยไม่มีเงื่อนไข):
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
คุณเห็นว่าคุณค่าเดิมของการPATH
ใช้ซ้ำที่นี่และเส้นทางใหม่จะถูกผนวกเข้ากับจุดเริ่มต้นแทนที่จะเขียนทับทุกอย่าง เมื่อคุณต้องการเพิ่มเส้นทางใหม่ด้วยตนเองคุณควรเก็บ$PATH
ค่าเก่าไว้ที่ใดที่หนึ่งในสตริงใหม่เสมอ
สคริปต์การเริ่มต้นนี้อ่านได้โดยเชลล์ของผู้ใช้ที่เป็นเจ้าของ แต่มีเงื่อนไขอื่น:
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
ดังนั้นหากคุณใช้ Bash เชลล์เริ่มต้นคุณควรตรวจสอบให้แน่ใจว่าคุณไม่มี~/.bash_profile
หรือ~/.bash_login
ถ้าคุณต้องการให้การเปลี่ยนแปลง~/.profile
มีผลกับผู้ใช้ของคุณ
สำหรับความเข้าใจอย่างสมบูรณ์เกี่ยวกับตัวแปรสภาพแวดล้อมดูที่: https://help.ubuntu.com/community/EnvironmentVariables
คำถามที่เกี่ยวข้อง: ความแตกต่างระหว่างไฟล์ bash.bashrc และ / etc / environment
~/.profile
ไม่ได้ตรวจสอบการดำรงอยู่ของ~/bin
มัน แต่มันมีเพียงบรรทัด:PATH="$HOME/bin:$HOME/.local/bin:$PATH"
/etc/skel/.profile
ใน 16.04 มีบรรทัดที่ฉันพูดถึง เห็นได้ชัดว่าคุณสร้างผู้ใช้ของคุณในรุ่นก่อนหน้า
~/.profile
ยังคงเป็นเช่นนี้ แต่คุณก็ถูกต้อง - /etc/skel/.profile
ไม่มีในระบบ 16.04 ที่อัปเกรดแล้วของฉัน (และบัญชีผู้ใช้ที่สร้างขึ้นเมื่อติดตั้ง 16.04 ใน เครื่องอื่นไม่มีในเครื่อง.profile
)
คำตอบนี้ส่วนใหญ่เกี่ยวกับลำดับที่ตัวแปรสภาพแวดล้อมชอบ
PATH
ถูกกำหนดเมื่อระบุไว้ในไฟล์การกำหนดค่าที่แตกต่างกัน ฉันยังครอบคลุมถึงตำแหน่งที่คุณควรตั้งค่าตามปกติ แต่รายการด้านล่างไม่แสดงรายการไฟล์ตามลำดับที่คุณควรพิจารณาใช้ สำหรับข้อมูลทั่วไปเกี่ยวกับการตั้งค่าPATH
และตัวแปรสภาพแวดล้อมอื่น ๆ ใน Ubuntu ฉันขอแนะนำให้อ่านEnvironmentVariablesและคำตอบอื่น ๆ สำหรับคำถามนี้
สถานที่ที่ต้องการตั้งค่าPATH
ขึ้นอยู่กับผู้ใช้ที่คุณต้องการตั้งค่าเวลาและเวลาที่คุณต้องการตั้งค่า ส่วนหนึ่งของการตัดสินใจของคุณคือไม่ว่าคุณต้องการตัวแปรสภาพแวดล้อมที่กำหนดไว้สำหรับผู้ใช้ทั้งหมดหรือตามผู้ใช้ต่อ หากคุณไม่แน่ใจฉันขอแนะนำให้ตั้งค่าสำหรับผู้ใช้เพียงคนเดียว (เช่นบัญชีของคุณ) แทนที่จะใช้ทั้งระบบ
ในฐานะที่เป็นAlexP กล่าวว่าที่PATH
ตัวแปรสภาพแวดล้อมจะมีค่าก็มอบหมายส่วนใหญ่เมื่อเร็ว ๆ นี้ ในทางปฏิบัติเวลาส่วนใหญ่ที่คุณตั้งไว้PATH
คุณรวมค่าเก่าของPATH
ในค่าใหม่เพื่อให้รายการก่อนหน้าจะถูกเก็บไว้
ดังนั้นในทางปฏิบัติเมื่อPATH
ตั้งค่าจากหลายไฟล์มักจะมีรายการที่กำหนดในไฟล์ทั้งหมด แต่เกิดขึ้นเพราะไฟล์ทั้งหมดที่ตั้งค่ายกเว้นไฟล์แรกมักจะอ้างอิงPATH
ตัวแปรตัวเองทำให้ค่าเก่าของมันรวมอยู่ในไฟล์ใหม่
ดังนั้นคุณจะถามถึงลำดับที่PATH
การตั้งค่าในไฟล์ต่างๆมีผล
สถานที่ที่พบวัตถุประสงค์ทั่วไปที่จะตั้งPATH
อยู่ด้านล่างเพื่อที่พวกเขาจะมีผลเมื่อผู้ใช้ล็อกในไม่ได้ในลำดับที่คุณมักจะควรพิจารณาการใช้พวกเขา สถานที่แต่ละแห่งด้านล่างนี้เป็นตัวเลือกที่เหมาะสมสำหรับการตั้งค่าPATH
ในบางสถานการณ์แต่มีเพียงไม่กี่แห่งที่เป็นตัวเลือกที่ดีส่วนใหญ่
~/.profile
ในรายการดังต่อไปนี้คุณจะเห็นชื่อไดเรกทอรีบางอย่างเช่น ในกรณีที่คุณไม่คุ้นเคยกับการขยายตัวของตัวหนอนให้~/
อ้างอิงไปยังไดเรกทอรีบ้านของผู้ใช้ปัจจุบัน ฉันใช้ไวยากรณ์นี้เป็นหลักเพื่อความกะทัดรัด ได้รับการสนับสนุนในเชลล์สคริปต์ แต่ไม่ได้อยู่ในไฟล์กำหนดค่า PAM
/etc/environment
PAMบน Ubuntu ทำให้ตัวแปรสภาพแวดล้อมที่ระบุไว้/etc/environment
ถูกตั้งค่าหากไฟล์นั้นมีอยู่ซึ่งโดยค่าเริ่มต้นแล้ว นั่นเป็นวิธีที่ตัวแปรสภาพแวดล้อมสำหรับผู้ใช้ทั้งหมดได้รับการตั้งค่ามากที่สุด
$ cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
หากคุณต้องตั้งค่าตัวแปรสภาพแวดล้อมสำหรับบัญชีผู้ใช้ทั้งหมดแทนที่จะเป็นเพียงบัญชีผู้ใช้ของคุณการแก้ไขไฟล์นั้นน่าจะเป็นทางเลือกที่ดีที่สุดของคุณ ฉันแนะนำให้สำรองข้อมูลก่อน วิธีหนึ่งในการสำรองไฟล์นี้คือการเรียกใช้:
sudo cp /etc/environment /etc/environment.orig
.orig
นามสกุลไม่จำเป็นต้องเฉพาะ - คุณสามารถรู้สึกดีเกี่ยวกับการตั้งชื่ออะไรแฟ้มสำรองข้อมูลที่ไม่ทำให้เกิดความสับสนหรือมีอยู่แล้วถูกนำมาใช้ (นอกจาก.orig
, .old
, .backup
และ.bak
เป็นเรื่องธรรมดา.)
คุณสามารถแก้ไขไฟล์นี้ในวิธีใด ๆ ที่คุณอาจแก้ไขไฟล์อื่นใดตามที่ผู้ใช้ราก ( sudoedit /etc/enviromnment
, sudo nano -w /etc/environment
, gksudo gedit /etc/environment
ฯลฯ )
/etc/environment
ไม่รองรับการรวมค่าเก่าของตัวแปรโดยอัตโนมัติ แต่โดยทั่วไปจะไม่จำเป็นเนื่องจากส่วนใหญ่คุณจะตั้งค่าตัวแปรสภาพแวดล้อมสำหรับผู้ใช้ทั้งหมดโดยการแก้ไข/etc/environment
คุณจะต้องการให้เป็นค่าเริ่มต้นเมื่อผู้ใช้เข้าสู่ระบบอยู่แล้ว ผู้ใช้สามารถเปลี่ยนได้ตามต้องการ โดยทั่วไปแล้วจะเป็นการดีสำหรับผู้ใช้ที่จะสามารถทำได้
/etc/security/pam_env.conf
PAM อ่านตัวแปรสภาพแวดล้อมสำหรับผู้ใช้ทั้งหมดจากที่/etc/security/pam_env.conf
ระบุด้วยไวยากรณ์เดียวกับที่ใช้ใน~/.pam_environment
ไฟล์ต่อผู้ใช้(ดูด้านล่าง)
เมื่อตัวแปรสภาพแวดล้อมเดียวกันมีการตั้งค่าทั้งใน/etc/environment
และ/etc/security/pam_env.conf
ค่าในการpam_env.conf
ถูกนำมาใช้ - แม้ว่าค่าที่ถูกระบุเป็นมากกว่าDEFAULT
OVERRIDE
อย่างไรก็ตามเมื่อคุณแทนที่บรรทัดenvironment
ด้วยหนึ่งในpam_env.conf
คุณสามารถรวมเนื้อหาของค่าที่ถูกแทนที่ ดูรายละเอียดในส่วนด้านล่าง.pam_environment
(เนื่องจากใช้ไวยากรณ์เดียวกัน)
โดยทั่วไปไม่จำเป็นต้องแก้ไขpam_env.conf
และคุณควรระวังให้ดีหากทำเช่นนั้นเนื่องจากบรรทัดที่มีรูปแบบไม่ถูกต้องจะป้องกันไม่ให้บัญชีผู้ใช้ปกติทั้งหมดเข้าสู่ระบบเลย! ตัวอย่างเช่นค่าเริ่มต้นpam_env.conf
ประกอบด้วยบรรทัด:
#PATH DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11
สิ่งนี้นำเสนอเป็นหนึ่งในหลายตัวอย่าง \
หนึ่งในสิ่งที่มันแสดงให้เห็นถึงวิธีการแบ่งงานในหลายเส้นด้วย สมมติว่าคุณต้องยกเลิกการใส่เครื่องหมายความคิดเห็นในบรรทัดแรก แต่ลืมยกเลิกการแสดงความคิดเห็นบรรทัดที่สอง:
PATH DEFAULT=${HOME}/bin:/usr/local/bin:/bin\
#:/usr/bin:/usr/local/bin/X11:/usr/bin/X11
อย่าทำอย่างนี้!
ฉันเพิ่งทดสอบตัวเองโดยไม่ตั้งใจและมันทำให้ผู้ใช้ไม่สามารถเข้าสู่ระบบได้สำเร็จ เพื่อแก้ไขฉันต้องบูตในโหมดการกู้คืนและเปลี่ยนกลับ (โชคดีที่ฉันทำสิ่งนี้บนเครื่องเสมือนที่ฉันใช้สำหรับการทดสอบเท่านั้นดังนั้นมันจึงไม่ทำให้ฉันมีปัญหา)
.pam_environment
ในโฮมไดเรกทอรีของผู้ใช้อีกวิธีหนึ่งในการตั้งค่าตัวแปรสภาพแวดล้อมสำหรับผู้ใช้คนเดียวคือให้ผู้ใช้นั้นแก้ไข (หรือสร้าง) .pam_environment
ในโฮมไดเร็กตอรี่ของพวกเขา ค่าที่ตั้งไว้ในไฟล์นี้แทนที่ค่าที่ตั้งใน/etc/environment
ไฟล์โกลบอล
.pam_environment
ไม่ได้เป็นส่วนหนึ่งของโครงกระดูกของไฟล์ที่คัดลอกไปยังโฟลเดอร์เริ่มต้นของผู้ใช้เมื่อสร้างบัญชีผู้ใช้ครั้งแรก PATH
แต่ถ้าคุณสร้างไฟล์ที่อยู่ในไดเรกทอรีบ้านของคุณคุณสามารถใช้มันเพื่อตั้งค่าตัวแปรสภาพแวดล้อมเช่น ซึ่งแตกต่างจาก/etc/environment
(แต่ชอบ/etc/security/pam_env.conf
) .pam_environment
ไฟล์สำหรับผู้ใช้แต่ละรายรองรับการขยายค่าเก่าของตัวแปรสภาพแวดล้อมไปยังไฟล์ใหม่ อย่างไรก็ตามไม่ใช่สคริปต์ของเชลล์และคุณต้องใช้ไวยากรณ์พิเศษเพื่อให้ได้สิ่งนี้ซึ่งแตกต่างจากไวยากรณ์ที่คุณจะใช้ในไฟล์เช่น.profile
นี้
ตัวอย่างเช่นหากคุณมีbin2
ไดเรกทอรีในโฮมไดเรกทอรีที่คุณต้องการเพิ่มในตอนท้ายPATH
คุณสามารถทำได้โดยเพิ่มบรรทัดนี้ไปที่.pam_environment
:
PATH DEFAULT=${PATH}:/home/@{PAM_USER}/bin2
ดูย่อยของEnvironmentVariables (จากตัวอย่างข้างต้นจะปรับอย่างใกล้ชิด) และสำหรับรายละเอียดเพิ่มเติม~/.pam_environment
man pam_env
man pam_env.conf
แม้ว่านี่จะได้รับการขนานนามว่าครั้งเดียวเป็นวิธีที่ต้องการสำหรับผู้ใช้อูบุนตูเปลี่ยนแปลงหรือเพิ่มตัวแปรสภาพแวดล้อมและยังคงถือเป็นทางเลือกที่เหมาะสมและเป็นที่ยอมรับ, คุณควรจะระมัดระวังเมื่อมีการแก้ไข .pam_environment
เช่นเดียวกับการแก้ไขทั้งระบบ/etc/security/pam_env.conf
(ดูด้านบน) บรรทัดที่มีรูปแบบไม่ถูกต้องใน.pam_environment
ไฟล์ของผู้ใช้จะป้องกันการเข้าสู่ระบบไม่สำเร็จ (ฉันมีการทดสอบนี้. - เกี่ยวกับวัตถุประสงค์ในครั้งนี้) สำหรับข้อมูลเกี่ยวกับวิธีการแนะนำที่มีวิวัฒนาการมาดูGunnar Hjalmarsson 's ความคิดเห็น ด้านล่างและนี้ubuntu-devel
การอภิปราย
ข้อผิดพลาดดังกล่าวมีความร้ายแรงน้อยกว่าโดยทั่วไปมากกว่าบรรทัดที่มีรูปแบบไม่ถูกต้องpam_env.conf
เนื่องจากมีผลกับผู้ใช้เพียงรายเดียว อย่างไรก็ตามในกรณีของระบบ Ubuntu บนเดสก์ท็อปที่มีบัญชีผู้ใช้เดียวที่อนุญาตให้เข้าสู่ระบบข้อผิดพลาดในขณะที่การแก้ไข.pam_environment
จะไม่ดีเท่ากับการแก้ไขข้อผิดพลาดpam_env.conf
- หากคุณยังไม่ได้เข้าสู่ระบบคุณจะไม่สามารถทำได้ เพื่อแก้ไขโดยไม่ต้องบูตในโหมดการกู้คืน (หรือจาก USB สด ฯลฯ )
(หากคุณมีบัญชีผู้ใช้อื่นคุณสามารถเข้าสู่ระบบในฐานะผู้ใช้รายอื่นและแก้ไขปัญหาแม้ว่าพวกเขาจะไม่ได้เป็นผู้ดูแลระบบและไม่สามารถsudo
รูทพวกเขายังสามารถเรียกใช้และได้รับแจ้งให้ป้อนรหัสผ่านของคุณ อย่างไรก็ตามบัญชีguestไม่สามารถทำได้เนื่องจากถูกห้ามไม่ให้ใช้เพื่อระบุตัวตนของผู้ใช้รายอื่น)su your-account
su
/etc/profile
และไฟล์ภายใน/etc/profile.d/
เชลล์ที่เข้ากันได้กับเป้าหมาย (รวมถึงbash
เชลล์ผู้ใช้เริ่มต้นใน Ubuntu) เรียกใช้คำสั่ง/etc/profile
เมื่อเรียกใช้เป็นเชลล์ล็อกอิน
Ubuntu /etc/profile.d
จบลงด้วย:
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
สิ่งนี้ทำให้คำสั่งในไฟล์ใด ๆ ใน/etc/profile.d/
ไดเร็กทอรีที่มีชื่อลงท้ายด้วย.sh
ให้รันเช่นกัน
ตัวจัดการหน้าจอส่วนใหญ่ทำให้คำสั่งใน/etc/profile
(และทำให้ไฟล์ใน/etc/profile.d
) ถูกเรียกใช้สำหรับการเข้าสู่ระบบแบบกราฟิกด้วย อย่างไรก็ตามไม่ใช่ทั้งหมดทำและนั่นเป็นข้อโต้แย้งที่สำคัญในความโปรดปรานของการใช้สิ่งอำนวยความสะดวกที่จัดทำโดย PAM แทน (ดูด้านบน) - เว้นแต่จะไม่มีการลงชื่อเข้าใช้แบบกราฟิกใด ๆ ในระบบนี้ซึ่งอาจเป็นกรณีตัวอย่างเช่น เซิร์ฟเวอร์ที่ไม่มี GUI ติดตั้ง
เป็นเรื่องปกติที่จะตั้งค่าตัวแปรสภาพแวดล้อมทั้งระบบ/etc/profile
แต่นี่ไม่ใช่ทางเลือกที่ดีที่สุดอีกต่อไป หากคุณไม่สามารถตั้งค่าตัวแปรสภาพแวดล้อม/etc/environment
ได้และคุณต้องตั้งค่าให้กับผู้ใช้ทุกรายดังนั้นการสร้างไฟล์ใหม่อาจดี/etc/profile.d/
กว่าการแก้ไข/etc/profile
ตัวเอง เหตุผลหนึ่งคือเมื่ออัพเกรด Ubuntu แล้วอาจมี/etc/profile
ไฟล์เริ่มต้นใหม่ ทั้งนี้ขึ้นอยู่กับวิธีที่คุณทำการอัปเกรดไฟล์เก่า (ด้วยการเปลี่ยนแปลงของคุณ) จะถูกเก็บไว้ก่อนหน้าไฟล์การกำหนดค่าที่อัปเดตนั้นมิฉะนั้นคุณจะได้รับแจ้งให้จัดการสถานการณ์
เมื่อมีการตั้งค่าตัวแปรสภาพแวดล้อมเดียวกันทั้งใน/etc/profile
และหนึ่งไฟล์ขึ้น/etc/profile.d
ไปซึ่งดำเนินการครั้งสุดท้าย ขึ้นอยู่กับว่าคำสั่งใน/etc/profile
ชุดนั้นปรากฏขึ้นก่อนหรือหลังไฟล์profile.d
ที่มานั้น (โดยรหัสที่ฉันยกมาข้างต้น) คำสั่ง/etc/profile
จะถูกดำเนินการตามลำดับที่ปรากฏ
/etc/profile
เป็นเชลล์สคริปต์และไวยากรณ์ที่เป็นไม่ได้เช่นเดียวกับที่ของแฟ้มการกำหนดค่า PAM ที่กล่าวข้างต้น ไวยากรณ์ของมันเหมือนกับไวยากรณ์สำหรับไฟล์ต่อผู้ใช้~/.profile
(ดูด้านล่าง)
หากคุณต้องการเขียนโค้ดที่ตัดสินใจว่าจะเพิ่มไดเรคทอรีเฉพาะลงในPATH
(และการทำเช่นนั้นสำหรับผู้ใช้ทั้งหมด) คุณจะไม่สามารถใช้/etc/environment
หรือ/etc/security/pam_env.conf
ทำเช่นนั้นได้ นี้อาจจะเป็นสถานการณ์หลักที่มันจะดีกว่าที่จะใช้/etc/profile
หรือ/etc/profile.d/
แทน
.bash_profile
ในโฮมไดเร็กตอรี่ของผู้ใช้หากผู้ใช้มี~/.bash_profile
ทุบตีใช้มันแทน~/.profile
หรือ~/.bash_login
(ดูด้านล่าง) โดยปกติคุณไม่ควรมี.bash_profile
ไดเรกทอรีในบ้านของคุณ
หากคุณทำเช่นนั้นมักจะมีคำสั่งไปยังแหล่งที่มา~/.profile
(เช่น, . "$HOME/.profile"
) มิฉะนั้นเนื้อหาของไฟล์ต่อผู้ใช้.profile
จะไม่ทำงานเลย
.bash_login
ในโฮมไดเร็กตอรี่ของผู้ใช้หากผู้ใช้มี~/.bash_login
ทุบตีใช้มันแทน~/.profile
(ดูด้านล่าง) เว้นแต่จะ~/.bash_profile
มีอยู่ซึ่งในกรณีนี้จะไม่ใช้ของผู้อื่นเว้นแต่จะมีที่มาจาก `~ / .bash_login
เช่นเดียวกับ.bash_profile
คุณไม่ควรมี.bash_login
ไฟล์ในโฮมไดเร็กตอรี่ของคุณ
.profile
ในโฮมไดเร็กตอรี่ของผู้ใช้เมื่อเชลล์สไตล์ Bourne ถูกเรียกใช้เป็นเชลล์ล็อกอินเชลล์จะรันคำสั่งใน/etc/profile
(ซึ่งโดยปกติจะมีคำสั่งที่ทำให้คำสั่งในไฟล์/etc/profile.d/
ที่จะรัน - ดูด้านบน) หลังจากนั้นจะรันคำสั่งใน.profile
ไดเรกทอรีหลักของผู้ใช้ ไฟล์นี้แยกต่างหากสำหรับผู้ใช้ทุกคน (ทุบตีทำงานจริง.bash_profile
หรือ.bash_login
แทนหากมีอยู่ - แต่สำหรับผู้ใช้ในระบบ Ubuntu ไฟล์เหล่านั้นแทบจะไม่ควรทำหรือมีอยู่สำหรับรายละเอียดดูด้านบนและ6.2 Bash Startup Filesในคู่มือ Bash )
~/.profile
จึงเป็นสถานที่หลักสำหรับผู้ใช้ในการวางคำสั่งที่ทำงานเมื่อพวกเขาเข้าสู่ระบบ มันเป็นสถานที่ดั้งเดิมสำหรับคุณในการตั้งค่าของคุณPATH
แต่เนื่องจาก Ubuntu มีโมดูล pam_env และการสนับสนุน~/.pam_environment
คุณควรพิจารณาใช้สิ่งนั้น
เช่นเดียวกับ/etc/profile
ที่ไม่ได้ทั้งหมดผู้จัดการแสดงผลเรียกใช้แฟ้มนี้สำหรับการเข้าสู่ระบบกราฟิกแม้ว่าส่วนใหญ่ทำ นี่คือเหตุผลที่จะต้องการ~/.pam_environment
สำหรับการตั้งค่าตัวแปรสภาพแวดล้อม (มากที่สุดเท่าที่หนึ่งอาจจะชอบ/etc/environment
ที่จะ/etc/profile
)
คุณสามารถขยายตัวแปรสภาพแวดล้อมรวมทั้งPATH
ตัวเองเมื่อคุณตั้งค่าPATH
ใน.pam_environment
(ดูด้านบน) อย่างไรก็ตามหากคุณจำเป็นต้องตั้งค่าPATH
ด้วยวิธีที่ซับซ้อนยิ่งขึ้นคุณอาจต้องใช้.profile
แทน โดยเฉพาะอย่างยิ่งหากคุณต้องการตรวจสอบว่ามีไดเรกทอรีอยู่ทุกครั้งที่ผู้ใช้ลงชื่อเข้าใช้และเพิ่มลงในไดเรกทอรีหากมีอยู่PATH
คุณจะไม่สามารถใช้.pam_environment
ไฟล์ของคุณเพื่อเพิ่มไดเรกทอรีนั้นลงในไดเรกทอรีของคุณPATH
ได้
ตัวอย่างเช่น.profile
ไฟล์ต่อผู้ใช้เริ่มต้นบน Ubuntu ที่ใช้ลงท้ายด้วย:
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
ดูความคิดเห็นของGunnar Hjalmarssonเกี่ยวกับคำตอบของผู้บัญชาการ Byteสำหรับรายละเอียด
วิธีนี้จะตรวจสอบว่าคุณมีbin
ไดเรกทอรีย่อยของโฮมไดเร็กตอรี่ของคุณหรือไม่ PATH
ถ้าเป็นเช่นนั้นจะเพิ่มไดเรกทอรีย่อยที่จุดเริ่มต้นของคุณ
มีวิธีอื่น ๆ ที่ตั้งค่าตัวแปรสภาพแวดล้อมเมื่อผู้ใช้เข้าสู่ระบบที่ขึ้นอยู่กับชนิดของการเข้าสู่ระบบ ตัวอย่างเช่นคุณอาจมีตัวแปรสภาพแวดล้อมที่ได้รับการตั้งค่าเฉพาะสำหรับการเข้าสู่ระบบแบบกราฟิกหรือเพียงแค่สำหรับการเข้าสู่ระบบจากระยะไกลที่ใช้ SSH รายการข้างต้นไม่ครอบคลุมกรณีดังกล่าว
ฉันได้ทิ้งไฟล์ไว้สองสามไฟล์ซึ่งบางครั้งผู้คนกำหนดตัวแปรสภาพแวดล้อมเช่น~/.bashrc
และ/etc/bash.bashrc
เนื่องจากพวกเขาไม่ได้แนะนำสถานที่ที่จะตั้งค่าPATH
และเป็นเรื่องยากที่คุณควรใช้พวกเขาเพื่อจุดประสงค์นี้ ถ้าคุณใช้ไฟล์เหล่านี้เพื่อเพิ่มไดเรกทอรีแล้วพวกเขาจะบางครั้งจะเพิ่มหลายครั้งและมีความสับสนมากเมื่อคุณตรวจสอบPATH
$PATH
(ในกรณีที่รุนแรงอาจทำให้สิ่งต่าง ๆ ช้าลง แต่โดยปกติมันเป็นเพียงเรื่องของการทำให้ทุกสิ่งสะอาดและเข้าใจได้)
ตั้งแต่bash
เป็นเปลือกเข้าสู่ระบบของ Ubuntu เริ่มต้นสำหรับผู้ใช้และผู้ใช้ส่วนใหญ่ใช้หรือข้อมูลบางอย่างที่เปลือก POSIX ได้ผมเคยละเว้นอื่น ๆ เกี่ยวกับวิธีการที่ตัวแปรสภาพแวดล้อมที่มีการตั้งค่าอื่น ๆ tcsh
ในหอยไม่ใช่บอร์นสไตล์เช่น
/etc/environment
/ ~/.pam_environment
เป็นไฟล์แนะนำ หลังจากปรึกษากับนักพัฒนาแล้วฉันเปลี่ยนมันให้เป็นกลางระหว่าง PAM และ/ และฉันก็ยังมีแนวโน้มที่จะมองอย่างนั้น /etc/profile.d/*.sh
~/.profile
/etc/profile.d/*.sh
/ ~/.profile
คือว่าไวยากรณ์นั้นง่ายกว่าและ lightdm / gdm นั้นจะถูกอภัยในกรณีที่เกิดข้อผิดพลาด (ไม่ใช่แม้แต่ข้อผิดพลาดทางไวยากรณ์ที่ทำให้คุณไม่สามารถเข้าสู่ระบบได้ แต่เพียงส่งผลให้ข้อความเตือน)
pam_env.so
คุณหมายถึงpam_env.conf
อะไร
pam_env.conf
JohanBouléใช่ฉันไม่ได้หมายถึง ขอบคุณ! ฉันแก้ไขเพื่อแก้ไข
ไฟล์ / etc / environmentไม่ใช่ไฟล์สคริปต์ที่คุณไม่สามารถใช้ส่งออกได้และไม่รองรับการขยายตัวแปรประเภท $ HOME เพียงแค่ simplevariable = คู่ค่า เพื่อที่จะใช้ไฟล์นั้นคุณจะต้องต่อท้ายพา ธ ของคุณไปยังคำจำกัดความที่มีอยู่นั้นมีความหมายเฉพาะสำหรับการตั้งค่าตัวแปรสภาพแวดล้อมทั้งระบบ หนึ่งรายการต่อบรรทัด ไฟล์นี้จัดเก็บการตั้งค่าตำแหน่งที่ตั้งและพา ธ ทั่วทั้งระบบ
~ / .profile - ไฟล์นี้จะถูกดำเนินการทุกครั้งที่มีการดำเนินการ bash shell โดยปกติจะเป็นไฟล์ที่แนะนำสำหรับตัวแปรสภาพแวดล้อม แต่มีข้อเสียของการถูกเรียกใช้โดยเชลล์การเข้าสู่ระบบเท่านั้นดังนั้นเพื่อให้ได้ผลคุณจะต้อง หากต้องการออกจากระบบและกลับเข้าสู่ระบบ - หรืออย่างน้อยให้เริ่มต้นเชลล์การเข้าสู่ระบบใหม่
สถานที่ที่ต้องการตั้งค่าตัวแปรสภาพแวดล้อมขึ้นอยู่กับหลายสิ่ง:
/etc/environment
เนื่องจากไม่มีอันตรายจากการเข้าถึงที่ไม่ได้รับอนุญาต/etc/environment
เช่นนั้น~/.profile
เกี่ยวข้องกับผู้ใช้แต่ละคนของระบบเนื่องจากมันอยู่ในไดเรกทอรีบ้านของผู้ใช้แต่ละคนระบบจะอ่านก่อนที่จะอ่าน/etc/environment
~/.profile
ไม่มีการต่อข้อมูลที่เกิดขึ้นและเช่นเดียวกับAlex Pกล่าวว่าการมอบหมายครั้งสุดท้ายไปยังเส้นทางมีผลบังคับใช้
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับปัจจัยที่กำหนดวิธีการ~/.profile
และ/etc/environment
เล่นกับสถานที่อื่น ๆ ไปที่นี่และที่นี่เนื่องจากปัจจัยเหล่านี้จะมีผลต่อการใช้สถานที่เหล่านี้