sự khác biệt giữa tập tin bash.bashrc và / etc / môi trường


42

Đến ngày tôi đã sử dụng để đặt các biến môi trường của mình trong bash.bashrctệp. Gần đây tôi được bảo sử dụng /etc/environmenttập tin. Vâng, cả hai hoạt động tốt.

Vậy, sự khác biệt giữa chúng là gì?

Tôi đã hiểu điều này và tôi thấy "bashrc được sử dụng cho người dùng và môi trường cụ thể, toàn hệ thống". Hệ thống rộng ở đây có nghĩa là gì? /etc/bash.bashrcTôi cũng đang áp dụng thay đổi hệ thống rộng. Đúng nếu tôi đã sai lầm. Bất kỳ loại trợ giúp sẽ được đánh giá cao ..

Câu trả lời:


35

Một điểm khác biệt là /etc/environmentchỉ chứa các định nghĩa biến và dường như không trải qua bất kỳ loại mở rộng / nội suy biến nào. Vì vậy, bạn không thể tham chiếu các biến trong định nghĩa. Ví dụ, điều này sẽ không hoạt động:

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

B theo nghĩa đen sẽ là something $A, không như mong đợi something else.

Xem câu hỏi này .

Nhân tiện, câu trả lời bạn tìm thấy thông qua Google dường như đề cập đến người dùng ~/.bashrc, thay vì toàn hệ thống /etc/bash.bashrc. Điều đó có thể gây ra sự nhầm lẫn của bạn.


Mục đích của ~ / .bashrc là gì khi có hai tệp thực hiện cùng một thứ / etc / môi trường và /etc/bash.bashrc?
trapaank

6
/Etc/bash.bashrc được thực thi nếu bất kỳ người dùng nào mở bash. ~ / .Bashrc chỉ được thực thi nếu chủ sở hữu của thư mục chính nơi lưu nó mở một bash.
André Stannek

18

Các /etc/environmenttập tin thiết lập hệ thống biến rộng cho mỗi người dùng khi khởi động. Các lệnh trong /etc/bash.bashrcđược thực thi nếu bashshell được mở bởi bất kỳ người dùng nào. Vì vậy, các biến sẽ không được đặt trừ khi bashshell được mở ít nhất một lần.


Xin lỗi tôi là người mới sử dụng linux. Vỏ bash sẽ được mở? và một điều nữa khi bash shell được mở, nó có ghi đè biến được đặt trong / etc / enviornment hay không?
trapaank

Tôi không chắc chắn khi môi trường / etc / được thực thi chính xác nhưng /etc/bash.bashrc được Ubuntu thực thi khi bạn vào môi trường máy tính để bàn của mình. Đó là lý do tại sao nó hoạt động nếu bạn đặt các biến ở đó. Tôi đoán là môi trường / etc / được thực thi một lần trong khi khởi động trước khi bạn vào máy tính để bàn của bạn và việc thực thi /etc/bash.bashrc ghi đè lên các biến. Nhưng một lần nữa: tôi không chắc về điều này.
André Stannek

4
Đó là khi đăng nhập, không khởi động!
slm

6

Và như bạn đang hỏi về " hệ thống rộng ":

Các tệp cấu hình nằm trong /etcthư mục áp dụng cho tất cả người dùng trên hệ thống. Đối với /etc/bash.bashrcđiều này có nghĩa là tất cả và mọi thứ sử dụng "Borne Again SHell" hay còn gọi là Bash trên máy đó. Ngay cả khi bạn là người duy nhất sử dụng nó, vẫn có thể có "người dùng kỹ thuật" bị ảnh hưởng (chỉ cần xem qua /etc/passwdvà kiểm tra tần suất "/ bin / bash" được nêu ở đó - hoặc sử dụng grep bash /etc/passwd | wc -l, sẽ cung cấp cho bạn số đó trực tiếp (có nghĩa là: "lấy" tất cả các dòng chứa chuỗi "bash" từ tệp "/ etc / passwd" và gửi kết quả ("|") đến lệnh "wc" (đếm từ) để đếm các dòng ("-L").

Vì vậy, đối với người dùng của bạn, việc sửa đổi sẽ an toàn hơn nhiều ~/.bashrc(nghĩa là tệp ".bashrc" - với dấu chấm hàng đầu, vâng - trong thư mục chính của bạn, vd /home/ankur/.bashrc), sau đó chỉ ảnh hưởng đến người dùng của bạn và để mọi thứ khác một mình . Các tập tin /etcchỉ nên được thay đổi nếu những thay đổi trên toàn hệ thống thực sự được dự định.

Bên cạnh đó: Cả hai cấu hình sẽ được sử dụng nếu chúng tồn tại. Đầu tiên, tệp toàn hệ thống (ở đây /etc/bash.bashrc:) được đọc và "có nguồn gốc" (cài đặt được áp dụng cho phiên hiện tại), sau đó người dùng /home/username/.bashrcđược xử lý như nhau và do đó có thể thêm hoặc thậm chí thay đổi / ghi đè cài đặt từ toàn cầu /etc/bash.bashrctập tin.


3

Ngoài hệ thống rộng và sử dụng thảo luận phạm vi rộng, một sự khác biệt đáng kể nhất là /etc/environmentkhông một kịch bản khác hơn ~/.bashrc.

Bạn không thể thay đổi biến số bên trong /etc/environment, phép gán biến của nó lấy giá trị dòng theo nghĩa đen (như đã được đề cập bởi roadmr).

Ubuntu của bạn sẽ khóa bạn nếu bạn làm hỏng $PATHbên trong /etc/environmentbằng cách nối thêm đường dẫn mới

PATH=$PATH:/new_path

Nếu trang đăng nhập Ubuntu Gnome hoặc Unity của bạn không thành công khi cho phép bạn vào mà không phàn nàn mật khẩu sai. Và bạn đã sửa đổi gần đây /etc/environment, rất có thể là trường hợp.

Cách khắc phục là đăng nhập bảng điều khiển ảo CTRL+ ALT+ F1bảng điều khiển đăng nhập, kiểm tra thủ công $PATHvà sửa /etc/environmenttệp.

Theo đó , /etc/environmentđược tải bởi ngăn xếp PAM, nơi cư trú theo từng biến môi trường.


-1

Sự khác biệt giữa hai là /etc/enivironmenttệp sẽ hoạt động cho tất cả người dùng trong khi tệp bash.bashrc sẽ chỉ hoạt động đặc biệt cho người dùng đó. Và nếu bạn làm bất cứ điều gì sai trong /etc/environmenttệp thì hậu quả có thể nghiêm trọng trong khi bạn có thể dễ dàng hoàn tác các thay đổi trong tệp bash.bashrc bằng cách sao chép nội dung của tệp / etc / môi trường. Nhưng ưu tiên đầu tiên là cung cấp cho bash.bashrctệp và sau đó đến / etc / tệp môi trường. Không phải là nếu bạn thực hiện thay đổi trong bash.bashrctệp thì thiết bị đầu cuối sẽ ưu tiên đầu tiên cho tệp người dùng cục bộ (nghĩa là bash.bashrc) và sau đó đến tệp chính (tức là /etc/environment).


Tôi nghĩ rằng bạn đang nhầm lẫn các tập tin ~ / .bashrc và /etc/bash.bashrc. Đầu tiên là cục bộ cho người dùng mở shell, thứ hai là toàn cầu cho tất cả người dùng mở shell.
Dennis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.