Như bạn đã nêu trong câu hỏi của bạn, sự khác biệt chính là môi trường.
sudo su - so với sudo -i
Trong trường hợp sudo su -nó là một vỏ đăng nhập, vì vậy /etc/profile, .profilevà .bashrcđược thực thi và bạn sẽ thấy mình trong thư mục gốc của root với môi trường của root.
sudo -ilà gần giống như sudo su -Người -i(mô phỏng đăng nhập ban đầu) tùy chọn chạy vỏ được xác định bởi sự xâm nhập cơ sở dữ liệu mật khẩu của người dùng mục tiêu như một vỏ đăng nhập. Điều này có nghĩa là các tệp tài nguyên dành riêng cho đăng nhập như .profile, .bashrchoặc .loginsẽ được đọc và thực thi bởi trình bao.
sudo su so với sudo -s
sudo sugọi sudobằng lệnh su. Bash được gọi là vỏ không đăng nhập tương tác. Vì vậy, bashchỉ thực hiện .bashrc. Bạn có thể thấy rằng sau khi chuyển sang root, bạn vẫn ở trong cùng một thư mục:
user@host:~$ sudo su
root@host:/home/user#
sudo -sđọc $SHELLbiến và thực hiện nội dung. Nếu $SHELLchứa /bin/bashnó gọi sudo /bin/bash, có nghĩa /bin/bashlà được bắt đầu như là vỏ không đăng nhập, vì vậy tất cả các tệp chấm không được thực thi, nhưng bashchính nó đọc. bashrccủa người dùng gọi. Môi trường của bạn vẫn như cũ. Nhà của bạn sẽ không phải là nhà của root. Vì vậy, bạn đã root, nhưng trong môi trường của người dùng gọi.
Phần kết luận
Các -ilá cờ đã được thêm vào sudotrong năm 2004 , để cung cấp một chức năng tương tự như sudo su -, vì vậy sudo su -là khuôn mẫu để sudo -ivà có nghĩa là để làm việc như nó. Tôi nghĩ việc bạn sử dụng thực sự không quan trọng, trừ khi môi trường không quan trọng.
Thêm vào
Một điểm cơ bản phải được đề cập ở đây là sudođược thiết kế để chỉ chạy một lệnh duy nhất với các đặc quyền cao hơn và sau đó thả các đặc quyền đó về các lệnh gốc. Nó không bao giờ có nghĩa là thực sự chuyển đổi người dùng và để lại một vỏ gốc. Theo thời gian, sudođã được mở rộng với các cơ chế như vậy, bởi vì mọi người đã khó chịu về lý do tại sao phải sử dụng sudotrước mỗi lệnh.
Vì vậy, ý nghĩa của sudođã bị lạm dụng. sudolà để khuyến khích người dùng giảm thiểu việc sử dụng các đặc quyền gốc.
Những gì chúng ta có bây giờ, sudongày càng trở nên phổ biến. Nó được tích hợp trong gần như mọi bản phân phối linux nổi tiếng. Công cụ ban đầu để chuyển sang tài khoản người dùng khác là su. Đối với một trường học cũ * nix kỳ cựu như vậy sudocó vẻ như không cần thiết. Nó thêm vào sự phức tạp và hành xử nhiều khả năng đối với các cơ chế mà chúng ta biết từ gia đình os của microsofts, và do đó trái ngược với triết lý đơn giản của các hệ thống * nix.
Tôi không thực sự là một cựu chiến binh, nhưng theo tôi, sudoluôn là một cái gai bên cạnh tôi, từ lúc được giới thiệu và tôi luôn làm việc xung quanh việc sử dụng sudo, nếu có thể. Tôi miễn cưỡng nhất để sử dụng sudo. Trên tất cả các hệ thống của tôi, tài khoản root được kích hoạt. Nhưng mọi thứ thay đổi, có thể thời gian sẽ đến, khi nào susẽ bị phản đối và sudothay thế suhoàn toàn.
Do đó, tôi nghĩ rằng, sẽ tốt nhất khi sử dụng sudocác cơ chế bên trong ( -s, -i) thay vì dựa vào một công cụ cũ như su.
ubuntungăn người dùng tiêu chuẩnsu -. Họ đã tạo ra vấn đề và bây giờ có những cuộc thảo luận bất tận về cách giải quyết nó.