ความแตกต่างระหว่างไฟล์ bash.bashrc และ / etc / environment


42

จนถึงวันที่ฉันเคยตั้งค่าตัวแปรสภาพแวดล้อมของฉันในbash.bashrcไฟล์ เมื่อเร็ว ๆ นี้ฉันถูกบอกให้ใช้/etc/environmentไฟล์ ทั้งสองทำงานได้ดี

ดังนั้นความแตกต่างระหว่างพวกเขาคืออะไร?

ฉัน googled นี้และฉันพบว่า "bashrc ใช้สำหรับผู้ใช้และสภาพแวดล้อมระบบโดยเฉพาะ" ระบบมีความหมายที่นี่อย่างไร /etc/bash.bashrcยังใช้การเปลี่ยนแปลงของระบบอย่างกว้างขวางฉันเดา ถูกต้องฉันถ้าฉันผิด ความช่วยเหลือใด ๆ จะได้รับการชื่นชม ..

คำตอบ:


35

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

A="else"
B="something $A"

B แท้จริงจะไม่คาดหวังsomething $Asomething else

ดูคำถามนี้

โดยวิธีการที่คำตอบที่คุณพบผ่าน Google ดูเหมือนจะหมายถึงของผู้ใช้มากกว่าทั้งระบบ~/.bashrc /etc/bash.bashrcนั่นอาจทำให้คุณสับสน


วัตถุประสงค์ของ ~ / .bashrc เมื่อมีสองไฟล์ที่ทำสิ่งเดียวกัน / etc / environment และ /etc/bash.bashrc คืออะไร?
trapaank

6
กระบวนการ /etc/bash.bashrc จะถูกดำเนินการหากผู้ใช้รายใดเปิด bash ~ / .bashrc จะถูกดำเนินการเฉพาะเมื่อเจ้าของโฮมไดเร็กตอรี่ที่มันถูกบันทึกเปิด bash
André Stannek

18

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


ขออภัยฉันเพิ่งสมัครเป็น linux เมื่อไหร่ bash shell จะถูกเปิด? และอีกอย่างหนึ่งเมื่อเปิด bash shell มันจะแทนที่ตัวแปรที่ตั้งไว้ใน / etc / enviornment หรือไม่?
trapaank

ฉันไม่แน่ใจว่าเมื่อใดที่ / etc / environment ทำงานอย่างถูกต้อง แต่ /etc/bash.bashrc จะถูกดำเนินการโดย Ubuntu เมื่อคุณเข้าสู่ระบบเดสก์ท็อปของคุณ นั่นเป็นเหตุผลที่มันทำงานได้ถ้าคุณตั้งค่าตัวแปรที่นั่น ฉันเดาว่า / etc / environment จะถูกดำเนินการเพียงครั้งเดียวในขณะที่บูตก่อนที่คุณจะเข้าสู่เดสก์ท็อปของคุณและการดำเนินการของ /etc/bash.bashrc จะเขียนทับตัวแปร แต่อีกครั้ง: ฉันไม่แน่ใจเกี่ยวกับเรื่องนี้
André Stannek

4
มันเข้าสู่ระบบไม่บูต!
slm

6

และตามที่คุณถามเกี่ยวกับ " system wide ":

ไฟล์การกำหนดค่าที่อยู่ใน/etcไดเรกทอรีจะมีผลกับผู้ใช้ทุกคนในระบบ สำหรับ/etc/bash.bashrcสิ่งนี้จะหมายถึงทุกคนที่ใช้ "Borne Again SHell" หรือที่รู้จักในนาม Bash บนเครื่องนั้น แม้ว่าคุณจะเป็นมนุษย์คนเดียวที่ใช้มัน แต่ก็อาจมี "ผู้ใช้ด้านเทคนิค" ได้รับผลกระทบ (เพียง/etc/passwdตรวจสอบและตรวจสอบความถี่ที่คำว่า "/ bin / bash" ระบุไว้ - หรือการใช้งานgrep bash /etc/passwd | wc -lซึ่งควรให้คุณ หมายเลขนั้นโดยตรง (หมายถึง: "grab" ทุกบรรทัดที่มีสตริง "bash" จากไฟล์ "/ etc / passwd" และส่งผลลัพธ์ ("|") ไปยังคำสั่ง "wc" (นับจำนวนคำ) เพื่อนับบรรทัด ( "-l")

ดังนั้นสำหรับผู้ใช้ของคุณจะปลอดภัยกว่าที่จะแก้ไข~/.bashrcแทน (หมายถึงไฟล์ ".bashrc" - ด้วยจุดนำใช่ในไดเรกทอรีบ้านของคุณเป็นต้น/home/ankur/.bashrc) ซึ่งจะส่งผลกระทบต่อผู้ใช้ของคุณ . ไฟล์ใน/etcควรมีการเปลี่ยนแปลงก็ต่อเมื่อการเปลี่ยนแปลงทั้งระบบมีจุดประสงค์จริงๆ

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


3

นอกเหนือจากระบบกว้างและใช้การอภิปรายขอบเขตกว้างหนึ่งความแตกต่างอย่างมีนัยสำคัญมากที่สุดคือ/etc/environmentคือไม่~/.bashrcสคริปต์อื่นที่ไม่ใช่

คุณไม่สามารถตรวจสอบตัวแปรภายใน/etc/environmentได้การกำหนดค่าตัวแปรซึ่งรับค่าบรรทัดตามตัวอักษร (ตามที่ระบุไว้แล้วโดย roadmr)

อูบุนตูของคุณจะล็อคคุณว่าคุณสกรูขึ้น$PATHภายใน/etc/environmentโดยพยายามที่จะผนวกเส้นทางใหม่

PATH=$PATH:/new_path

หากหน้าเข้าสู่ระบบ Ubuntu Gnome หรือ Unity ของคุณล้มเหลวในการแจ้งให้คุณทราบโดยไม่แจ้งรหัสผ่านผิด และคุณได้แก้ไขเมื่อเร็ว ๆ นี้/etc/environmentมันเป็นไปได้มากที่สุด

การแก้ไขคือการเข้าสู่ระบบคอนโซลเสมือนCTRL+ ALT+ F1ล็อกอินคอนโซลตรวจสอบด้วยตนเอง$PATHและแก้ไข/etc/environmentไฟล์

ตามนี้ , /etc/environmentมีการโหลดโดยสแต็ค PAM ซึ่ง populates เส้นตัวแปรสภาพแวดล้อมโดยสาย


-1

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


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