Đây là loại phức tạp. Trước hết, các chi tiết phụ thuộc vào loại vỏ bạn đang chạy. Tự ăn cắp bản thân :
Khi bạn mở một trình giả lập thiết bị đầu cuối ( gnome-terminal
ví dụ), bạn đang thực thi cái được gọi là shell tương tác, không đăng nhập .
Khi bạn đăng nhập vào máy của mình từ dòng lệnh hoặc chạy một lệnh như su - username
, bạn đang chạy một vỏ đăng nhập tương tác .
Khi bạn đăng nhập bằng đồ họa, bạn đang chạy một cái gì đó hoàn toàn khác. Các chi tiết sẽ phụ thuộc vào hệ thống và môi trường đồ họa của bạn, nhưng nói chung, nó là vỏ đồ họa liên quan đến đăng nhập của bạn. Trong khi nhiều shell đồ họa (bao gồm mặc định Ubuntu) sẽ đọc /etc/profile
và ~/.profile
không phải tất cả chúng đều làm được.
Cuối cùng, khi bạn chạy tập lệnh shell, nó được chạy trong trình bao không tương tác, không đăng nhập .
Các tệp bash sẽ đọc khi khởi chạy tùy thuộc vào loại vỏ mà nó đang chạy. Sau đây là đoạn trích của phần man bash
HÓA ĐƠN của (phần nhấn mạnh của tôi):
Khi bash được gọi dưới dạng shell đăng nhập tương tác hoặc dưới dạng shell không tương tác với tùy chọn --login, trước tiên, nó sẽ đọc và thực thi các lệnh từ tệp / etc / profile , nếu tệp đó tồn tại. Sau khi đọc tệp đó, nó tìm ~ / .bash_profile, ~ / .bash_login và ~ / .profile, theo thứ tự đó , đọc và thực thi các lệnh từ lệnh đầu tiên tồn tại và có thể đọc được. Tùy chọn --noprofile có thể được sử dụng khi trình bao bắt đầu ngăn chặn hành vi này.
Khi một vỏ tương tác đó là không phải là một vỏ đăng nhập được khởi động, bash đọc và thực thi lệnh từ /etc/bash.bashrc và ~ / .bashrc , nếu những tập tin này tồn tại. Điều này có thể bị ức chế bằng cách sử dụng tùy chọn --norc. Tùy chọn tệp --rcfile sẽ buộc bash đọc và thực thi các lệnh từ tệp thay vì /etc/bash.bashrc và ~ / .bashrc.
Đó là những tập tin khởi tạo. Bạn cũng có /etc/environment
nơi bạn có thể đặt các biến môi trường toàn cầu nhưng đó là đọc thay vì có nguồn gốc (các lệnh bên trong nó không được thực thi nhưng các định nghĩa biến được đặt).
Bây giờ, lời chào bạn nhìn thấy là một cái gì đó một lần nữa. Điều đó được thiết lập /etc/motd
và được hiển thị thông qua pam_motd
. Như đã giải thích trong man motd
:
Nội dung của / etc / motd được hiển thị bởi pam_motd (8) sau khi đăng nhập thành công nhưng ngay trước khi nó thực thi shell đăng nhập.
Chữ viết tắt "motd" là viết tắt của "tin nhắn trong ngày" và tập tin này thường được sử dụng theo cách chính xác (nó yêu cầu không gian đĩa ít hơn nhiều so với thư cho tất cả người dùng).
Trên Debian GNU / Linux, nội dung của /run/motd.dynamic cũng được hiển thị. Tập tin này được tạo bởi /etc/init.d/motd khi khởi động.
Để xóa tin nhắn, chỉ cần làm trống /etc/motd
tập tin và đảm bảo rằng không có gì được tạo bởi /etc/init.d/motd
nếu có.
Dù sao, dựa trên đầu ra mà bạn hiển thị, dường như bạn đang đăng nhập thông qua ssh
điều đó có nghĩa là bạn đang chạy một vỏ đăng nhập tương tác , xem bên trên để biết điều đó có nghĩa là gì. Vì vậy, tóm lại, những điều bạn quan tâm có nguồn gốc khi bạn đăng nhập là (và theo thứ tự này):
- Trình nền SSH, thông qua
pam_motd
mô-đun của thư viện PAM, hiển thị nội dung của /etc/motd
. Thông qua pam_env
mô-đun, nó đặt các biến môi trường từ /etc/environment
và ~/.pam_environment
.
- Một vỏ đăng nhập được bắt đầu và các tệp sau được đọc theo thứ tự:
/etc/profile
/etc/bash.bashrc
(các /etc/profile
nguồn Ubuntu mặc định /etc/bash.bashrc
).
~/.bash_profile
. Các tệp khác có thể đã được đọc ở đây ( ~/.profile
và ~/.bash_login
) bị bỏ qua vì ~/.bash_profile
tồn tại.
export SET_IN_ETC_PROFILE=yes
vào/etc/profile
,export SET_IN_HOME_ZSHRC=yes
trong~/.zhshrc
(Tôi là người dùng zsh), v.v ... Sau đó, khởi động lại và một điều tốt đẹpenv|grep SET_IN
sẽ cho bạn biết tất cả câu chuyện. Để xem các biến nào được nhìn thấy bởi các ứng dụng trên máy tính để bàn (những biến bạn khởi chạy từ dấu gạch ngang hoặc WM, mà không cần sử dụng thiết bị đầu cuối), hãy xem Askubfox.com/a3536973/16395