Apa perbedaan antara "sudo -i" dan "sudo bash -l"

13

Ada pertanyaan terbaru tentang beberapa sysadmin yang berfungsi sebagai root, dan sudo bash -ldireferensikan.

Saya mencari ini di google dan SE, tapi saya tidak mengerti perbedaan antara sudo bash -ldan sudo -i.

Dari halaman manual untuk bash dan sudo tampaknya perbedaannya adalah sudo bash -lmenjalankan ~ / .bash_profile, ~ / .bash_login, dan ~ / .profile, dan ~ / .bash_logout dari pengguna root, tetapi dari pengujian sendiri sepertinya itu menjalankan .bashrc pengguna normal dan bukan yang root. Saya mungkin salah paham pengguna mana ~ ekspresi yang dirujuk di halaman manual. Klarifikasi perbedaan dan skenario penggunaan akan dihargai.

Rqomey
sumber

Jawaban:

10

Mereka berbeda dalam hal itu jika shell login pengguna root yang ditentukan dalam / etc / passwd bukan bash, maka perintah kedua akan membuat Anda menjadi bash shell sebagai root sedangkan perintah pertama akan menggunakan apa pun shell interaktif yang dimiliki oleh pengguna root.

johnshen64
sumber
Hai @ johnshen64, apakah Anda dapat mengklarifikasi berbagai skenario penggunaan?
Rqomey
2
orang menyukai shell yang mereka gunakan, jadi jika Anda ingin memastikan untuk menggunakan bash, maka bentuk kedua harus digunakan. bentuk kedua juga mensimulasikan login yang sebenarnya (artinya -l artinya). tentu saja, Anda juga bisa cukup mengetikkan bash ketika Anda menemukan bahwa pengguna (default untuk root) tidak memiliki bash sebagai shell interaktif dalam menggunakan sudo -i. jika tidak, perbedaannya sangat kecil. seperti yang ditunjukkan oleh jawaban lain, ada juga beberapa perbedaan lingkungan kecil. dalam kebanyakan kasus perbedaannya tidak masalah dan yang pertama lebih pendek, karena kebanyakan distro menggunakan bash. saya jarang menggunakan formulir ke-2.
johnshen64
4

Juga untuk menambahkan ke @ johnshen64 jawaban saya perhatikan bahwa sudo -idoa memperbarui $USERNAMEvariabel env ke rootdan cd ~ke rumah pengguna seperti itu;

$ 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

Namun untuk sudo bash -l $USERNAMEunmolested, dan direktori kerja tidak berubah. (meskipun ini tidak konsisten di antara pengguna lain, lihat komentar ...)

$ 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

Jadi mungkin Anda tidak mendapatkan set yang sama persis ~/.bashrc, atau tidak dalam urutan yang sama dll.

(kotak saya mungkin telah sedikit kacau oleh .bashrcbermain - main saya , jadi YMMV)

Tom H
sumber
Terima kasih @ Tom H: echo $USERNAMEmengembalikan root dua kali untuk saya (di desktop ubuntu saya dan centos 5.2). PWD adalah seperti yang Anda laporkan.
Rqomey