Sự khác biệt giữa những gì mà sudo -i và một trong những thứ khác


13

Có một câu hỏi gần đây liên quan đến nhiều sysadins hoạt động như root và sudo bash -lđược tham chiếu.

Tôi đã tìm kiếm cái này trên google và SE, nhưng tôi không hiểu sự khác biệt giữa sudo bash -lsudo -i.

Từ các trang man cho bash và sudo, có vẻ như sự khác biệt có thể là sudo bash -lchạy ~ / .bash_profile, ~ / .bash_login và ~ / .profile và ~ / .bash_logout của người dùng root, nhưng từ việc tự kiểm tra nó chạy .bashrc của người dùng bình thường chứ không phải root. Tôi có thể đã hiểu nhầm người dùng mà biểu thức ~ đang tham chiếu trong các trang man. Làm rõ sự khác biệt và kịch bản sử dụng sẽ được đánh giá cao.

Câu trả lời:


10

Chúng khác nhau ở chỗ nếu shell đăng nhập của người dùng root được chỉ định trong / etc / passwd không phải là bash, thì lệnh thứ hai sẽ giúp bạn bash shell là root trong khi lệnh đầu tiên sẽ sử dụng bất cứ thứ gì mà shell tương tác mà người dùng root có.


Xin chào @ johnshen64, bạn có thể làm rõ các tình huống sử dụng khác nhau không?
Rqomey

2
mọi người thích shell họ đang sử dụng, vì vậy nếu bạn muốn chắc chắn sử dụng bash, thì nên sử dụng hình thức thứ hai. biểu mẫu thứ hai cũng mô phỏng thông tin đăng nhập thực tế (đó là ý nghĩa của -l). tất nhiên, bạn cũng có thể chỉ cần gõ bash khi bạn thấy rằng người dùng (mặc định là root) không có bash như trình bao tương tác trong việc sử dụng sudo -i. nếu không thì sự khác biệt là rất nhỏ như câu trả lời khác cho thấy, cũng có một số khác biệt nhỏ về môi trường. trong hầu hết các trường hợp, sự khác biệt không quan trọng và lần đầu tiên ngắn hơn, vì hầu hết các bản phân phối phổ biến đều sử dụng bash. tôi hiếm khi sử dụng mẫu thứ 2
johnshen64

4

Ngoài ra để thêm vào câu trả lời @ johnshen64, tôi nhận thấy rằng sudo -ilời gọi cập nhật $USERNAMEbiến env đến rootcd ~về nhà người dùng như vậy;

$ sudo -i
[root@workstation001 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 ~]# echo $USERNAME
root
[root@workstation001 userXXX]# echo $PWD
/root

Tuy nhiên, đối với sudo bash -l $USERNAMEkhông bị biến đổi, và thư mục làm việc không được thay đổi. (mặc dù điều này không nhất quán giữa những người dùng khác, hãy xem bình luận ...)

$ sudo bash -l
[root@workstation001 userXXX]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 userXXX]# echo $USERNAME
userXXX
[root@workstation001 userXXX]# echo $PWD
/home/userXXX

Vì vậy, có lẽ bạn không nhận được chính xác cùng một bộ ~/.bashrc, hoặc không theo cùng một thứ tự, v.v.

(hộp của tôi có thể đã bị làm hỏng một chút bởi .bashrctinkerings của tôi , vì vậy YMMV)


Cảm ơn @Tom H: echo $USERNAMEtrả lại root cả hai lần cho tôi (trên máy tính để bàn ubfox của tôi và centos 5.2). NKT là như bạn báo cáo tuy nhiên.
Rqomey
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.