Có gì khác biệt giữa những gì su su có và không có gạch nối?


87

Tôi khá mới sang Linux Terminal và tôi không hoàn toàn chắc chắn về sự khác biệt giữa suvới một dấu gạch ngang và sukhông có dấu nối là, ví dụ: su - usernamevs su username.

Tôi đã xem tài liệu nhưng trong đó, điều này không được đề cập. Ai đó có thể vui lòng giúp tôi ra?


một "vỏ đăng nhập" thường có nghĩa là vỏ tương tác. Đây là so với một shell chỉ thực thi một tập lệnh và thoát.
Shahbaz

6
Nó ở ngay trong cùng một trang mà bạn liên kết đến : " -, -l, --login: biến vỏ thành vỏ đăng nhập "
ArjunShankar

1
bạn thậm chí không phải google nó, chỉ cần gõ su --help.
Nghệ thuật Shayderov

1
Đáng chú ý: Điều này đặc biệt hữu ích khi sử dụng root mà không sử dụng hypen để bắt đầu một vỏ đăng nhập mới, bạn $PATHsẽ không được cập nhật và do đó bạn sẽ không thể gọi trực tiếp các nhị phân chỉ root /sbin/usr/sbin
Garrett

Câu trả lời:


85

Sự khác biệt giữa "-" và "không gạch nối" là cái sau giữ môi trường hiện tại của bạn (các biến, v.v.); trước đây tạo ra một môi trường mới (với các cài đặt của người dùng thực tế, không phải của riêng bạn).

https://wiki.archlinux.org/index.php/Su

Dấu gạch nối có hai tác dụng:

1) chuyển từ thư mục hiện tại sang thư mục chính của người dùng mới (ví dụ: sang / root trong trường hợp người dùng root) bằng cách đăng nhập với tư cách người dùng đó

2) thay đổi các biến môi trường thành các biến của người dùng mới như được quy định bởi ~ / .bashrc của họ. Đó là, nếu đối số đầu tiên với su là dấu gạch nối, thư mục và môi trường hiện tại sẽ được thay đổi thành những gì sẽ xảy ra nếu người dùng mới thực sự đăng nhập vào một phiên mới (thay vì chỉ tiếp quản một phiên hiện có).


trang web này -> admon.org/difference-b between-login-shell-and-non-login-shell nói rằng khi được sử dụng mà không có dấu gạch nối, các tập tin / etc / profile và ~ / .bash_profile sẽ không được thực thi. Hai tập tin này có ý nghĩa gì đối với môi trường người dùng?
dùng574183

2
Hai thứ đó là các tệp đặt môi trường người dùng :) Không thực thi chúng có nghĩa là giữ môi trường ban đầu của bạn. Thực thi chúng (bằng cách sử dụng "-") có nghĩa là làm cho môi trường của bạn giống với người dùng mà bạn đang "kiện". Sử dụng dấu gạch nối thường là những gì bạn muốn - Tôi sử dụng "-" theo thói quen bất cứ khi nào tôi "su".
paulsm4

thứ tự thực hiện có thực sự quan trọng? Tôi hỏi điều này bởi vì trên trang web đó họ đã đề cập rằng hai tệp / etc / bashrc ~ / .bashrc được thực thi theo thứ tự ngược lại khi trong vỏ không đăng nhập. Ai đó làm ơn giúp tôi với
user574183 28/07/12

1
@ user574183 tất nhiên, ví dụ: nếu người này đặt thứ gì đó nhưng người kia không đặt thứ gì đó hoặc đặt thành thứ khác
fikr4n

3

su -bắt đầu một vỏ đăng nhập cho root. Đối với sự khác biệt với một vỏ bình thường, xem trang web này ví dụ.


2
Điều đó đúng, nhưng đó không phải là câu hỏi :)
paulsm4

Điều đó là không chính xác, bạn có thể chạy su với dấu gạch ngang và để nó khởi động trình bao cho một người dùng khác. Thực hiện như sau và xem đầu rasudo su - "testuser" -c "whoami"
David Hergert

@DavidHergert Yep, và không có tên người dùng, nó sẽ mở một vỏ cho root.
Lars Kotthoff

@LarsKotthoff - ok, xin lỗi, cách nó được phát âm như thể dấu gạch ngang là thứ làm cho nó trở thành một vỏ gốc, chứ không phải là việc người dùng mặc định root. Ngay cả cư dân địa phương SA của tôi cũng nhầm lẫn về điều này. :)
David Hergert
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.