เพิ่มไดเรกทอรีไปยัง $ PATH ใน CentOS หรือไม่


84

เราเพิ่งได้เซิร์ฟเวอร์ใหม่ของเราและเรากำลังใช้งาน CentOS กับพวกเขาทั้งหมด หลังจากติดตั้ง Ruby Enterprise Edition เรียบร้อยแล้วตอนนี้ฉันต้องการเพิ่ม/usr/lib/ruby-enterprise/binไดเรกทอรีREE / bin (อยู่ที่) เพื่อให้เป็นล่ามทับทิมเริ่มต้นบนเซิร์ฟเวอร์

ฉันได้ลองทำสิ่งต่อไปนี้แล้วซึ่งเพิ่มมันลงในเซสชั่นเชลล์ปัจจุบันเท่านั้น:

export PATH=/usr/lib/ruby-enterprise/bin:$PATH

สิ่งที่จะเป็นแนวทางที่ถูกต้องอย่างถาวรเพิ่มไดเรกทอรีนี้ถึง $ เส้นทางสำหรับผู้ใช้ทุกคน ขณะนี้ฉันเข้าสู่ระบบในฐานะ root

ขอบคุณล่วงหน้า!

คำตอบ:


116

คุณไม่ควรแก้ไข/etc/profileสิ่งนี้เนื่องจากคุณจะสูญเสียการเปลี่ยนแปลงทุกครั้งที่ CentOS เผยแพร่การอัปเดตสำหรับไฟล์นี้ นี่คือสิ่งที่/etc/profile.dมีไว้สำหรับ:

# echo 'pathmunge /usr/lib/ruby-enterprise/bin' > /etc/profile.d/ree.sh
# chmod +x /etc/profile.d/ree.sh

ลงชื่อเข้าใช้ใหม่และเพลิดเพลินไปกับ PATH ที่อัพเดท (ปลอดภัย) ของคุณ:

# echo $PATH
/usr/lib/ruby-enterprise/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
# which ruby
/usr/lib/ruby-enterprise/bin/ruby

แทนที่จะลงชื่อเข้าใช้คุณสามารถโหลดโปรไฟล์ซ้ำได้:

# . /etc/profile

สิ่งนี้จะอัพเดท$PATHตัวแปร


1
~/.profileเป็นอีกตัวเลือกที่ใช้ได้เช่นกัน
Zypher

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

2
@Mike คำสั่ง pathmunge นี้คืออะไร?
Nickolai Leschov

@NickolaiLeschov ฉันค่อนข้างแน่ใจว่ามันแค่ผนวกเส้นทางไปยัง $ PATH
Mike

@NickolaiLeschov เป็นฟังก์ชั่นที่กำหนดไว้ใน / etc / profile
CrazyPheel

11

หลังจากทำตามคำแนะนำของ fmonk ฉันเช็คเอาท์/etc/bashrcที่ฉันสังเกตเห็นว่า "สิ่งที่สภาพแวดล้อมไปใน / etc / โปรไฟล์" ฉันดูต่อไป/etc/profileฉันเห็นสิ่งนี้:

pathmunge () {
    if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
       if [ "$2" = "after" ] ; then
          PATH=$PATH:$1
       else
          PATH=$1:$PATH
       fi
    fi
}

[...]

# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /sbin
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
fi

เพื่อแก้ปัญหาของฉันฉันเพียงเพิ่มpathmunge /usr/lib/ruby-enterprise/binภายใต้คำสั่ง if นี่เป็นการแก้ไขปัญหาของฉัน


ใครสามารถอธิบายความ"$EUID" = "0"หมายในบริบทนี้ได้บ้าง
อีไล

EUID 0 หมายถึงผู้ใช้นั้นเป็นรูต
bbaja42

6
คุณควรใช้ /etc/profile.d ดูคำตอบของฉันด้านล่าง
Mike

โปรดพิจารณายอมรับคำตอบ @MikeConigliaro ว่าถูกต้อง วิธีของเขาเป็นวิธีที่ถูกต้อง มันได้รับการพัฒนาให้ทำงานอย่างนั้น ลองดูไฟล์ใน/etc/profile.d/โฟลเดอร์แล้วคุณจะสังเกตเห็น ในขณะที่เขากล่าวว่าการอัปเดตระบบสามารถยกเลิกการแก้ปัญหาของคุณ
Caio Cunha

4

"เชลล์ล็อกอินแบบโต้ตอบเริ่มต้นหลังจากการล็อกอินสำเร็จโดยใช้ / bin / เข้าสู่ระบบโดยอ่านไฟล์ / etc / passwd โดยปกติการเรียกใช้เชลล์นี้จะอ่าน / etc / profile และเทียบเท่าส่วนตัว ~ / .bash_profile

โดยปกติเชลล์ที่ไม่ใช่การล็อกอินจะเริ่มทำงานที่บรรทัดรับคำสั่งโดยใช้โปรแกรมเชลล์ (เช่น [prompt] $ / bin / bash) หรือโดยคำสั่ง / bin / su เชลล์ที่ไม่ใช่การล็อกอินแบบโต้ตอบเริ่มต้นด้วยโปรแกรมเทอร์มินัลเช่น xterm หรือ konsole จากภายในสภาพแวดล้อมแบบกราฟิก โดยปกติแล้วการเรียกใช้เชลล์ประเภทนี้จะคัดลอกสภาพแวดล้อมพาเรนต์แล้วอ่านไฟล์ ~ / .bashrc ของผู้ใช้เพื่อดูคำแนะนำในการตั้งค่าเริ่มต้นเพิ่มเติม " http://www.linuxfromscratch.org/blfs/view/6.3/postlfs/profile.html

ดังนั้นฉันจะไม่ใส่ตัวแปรสภาพแวดล้อมใน bashrc เพราะมันไม่เพียง แต่ต่อต้านการประชุมทั่วไป แต่คุณจะพลาด varialbles bashrc ของคุณเมื่อเรียกใช้เทอร์มินัลจากสภาพแวดล้อมเดสก์ทอปแบบกราฟิก

ใน Redhat ใน/etc/profileฉันพบความคิดเห็นนี้:

"นามแฝงทั้งระบบและฟังก์ชั่นควรอยู่ใน / etc / bashrc ตัวแปรสภาพแวดล้อมส่วนบุคคลและโปรแกรมเริ่มต้นควรเข้าสู่ ~ / .bash_profile นามแฝงและฟังก์ชั่นส่วนบุคคลควรเข้าสู่ ~ / .bashrc"

ดังนั้นหากคุณต้องการตั้งค่าตัวแปรสภาพแวดล้อมบนพื้นฐานของผู้ใช้ให้ทำในไฟล์. bash_profile ของผู้ใช้

มุ่งหน้าไปที่.bash_profileฉันอ่าน:

"ตัวแปรสภาพแวดล้อมส่วนบุคคลและโปรแกรมเริ่มต้น

ชื่อแทนส่วนบุคคลและฟังก์ชั่นควรไปใน ~ / .bashrc ตัวแปรสภาวะแวดล้อมทั้งระบบและโปรแกรมเริ่มต้นอยู่ใน / etc / profile นามแฝงทั้งระบบและฟังก์ชั่นอยู่ใน / etc / bashrc "

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

กรณีพิเศษ: SSH
เมื่อ ssh เริ่มต้นด้วย commandline เชลล์ล็อกอินแบบโต้ตอบจะเริ่มต้นขึ้น แต่ในกรณี/etc/profileนี้ไม่ได้อ่าน เมื่อฉันกำหนดตัวแปรสภาพแวดล้อมใน.bash_profileไฟล์ของผู้ใช้แต่ละคนมันทำงานร่วมกับ ssh


2

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

แก้ไข. bash_profile

nano ~/.bash_profile

จากนั้นบางส่วนในไฟล์จะเพิ่ม / แก้ไขพา ธ ของคุณโดย:

 PATH=$PATH:$HOME/bin:/your/path
 export PATH

จากนั้นโหลดโปรไฟล์ของคุณใหม่

source ~/.bash_profile

หรือออกจากระบบและเข้าสู่ระบบอีกครั้ง

หากคุณตรวจสอบ PATH ควรรวมเส้นทางที่เพิ่มใหม่ของคุณ

echo $PATH

1

คุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมในไฟล์. rc สำหรับ bash shells (ฉันเชื่อว่าส่วนใหญ่และค่าเริ่มต้นใน CentOS) ผู้ใช้แต่ละคนมีไฟล์ชื่อ. bashrc ในโฮมไดเร็กตอรี่ของเขา.

เพิ่มคำสั่ง PATH = / usr / lib / ruby-enterprise / bin: $ PATH ไปยังไฟล์นี้เพื่อตั้งค่าสำหรับผู้ใช้คนใดคนหนึ่งโดยเฉพาะ

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

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