Ketika saya melakukan sesuatu yang membutuhkan root untuk diketik puluhan kali berturut-turut, saya lebih suka mengalihkan sesi saya ke sesi root. Dalam berbagai tutorial dan petunjuk saya telah digunakan di Internet, saya melihat sudo su
, sudo su -
, sudo -i
dan sudo /bin/bash
digunakan untuk membuka sesi root, tapi aku tidak jelas tentang perbedaan antara ini dan kapan atau apakah yang penting perbedaan.
Bisakah seseorang membersihkan ini untuk saya?
command-line
bash
sudo
su
Paul
sumber
sumber
sudo -s
dansudo su
.Jawaban:
Untuk menjelaskan ini, Anda perlu tahu apa yang dilakukan program:
su
- Perintahsu
ini digunakan untuk beralih ke pengguna lain ( s witch u ser), tetapi Anda juga dapat beralih ke pengguna root dengan menjalankan perintah tanpa parameter.su
meminta Anda untuk mengganti kata sandi pengguna, setelah mengetik kata sandi yang Anda alihkan ke lingkungan pengguna.sudo
-sudo
Dimaksudkan untuk menjalankan satu perintah dengan hak akses root. Tetapi tidak sepertisu
itu meminta Anda untuk kata sandi pengguna saat ini. Pengguna ini harus dalam file sudoers (atau grup yang ada di file sudoers). Secara default, Ubuntu "mengingat" kata sandi Anda selama 15 menit, sehingga Anda tidak perlu mengetik kata sandi setiap kali.bash
- Antarmuka teks untuk berinteraksi dengan komputer. Penting untuk memahami perbedaan antara shell login, non-login, interaktif, dan non-interaktif:Jenis kerang:
Jadi kasusnya adalah:
sudo su
Panggilansudo
dengan perintahsu
. Bash disebut sebagai shell non-login interaktif. Jadi bash hanya mengeksekusi.bashrc
. Anda dapat melihat bahwa setelah beralih ke root, Anda masih berada di direktori yang sama:sudo su -
Kali ini adalah shell login, jadi/etc/profile
,.profile
dan.bashrc
dieksekusi dan Anda akan menemukan diri Anda di direktori home root dengan lingkungan root.sudo -i
Ini hampir sama dengansudo su -
opsi -i (mensimulasikan login awal) menjalankan shell yang ditentukan oleh entri basis data kata sandi pengguna target sebagai shell login. Ini berarti bahwa file sumber daya khusus masuk seperti.profile
,.bashrc
atau.login
akan dibaca dan dieksekusi oleh shell.sudo /bin/bash
Ini berarti Anda meneleponsudo
dengan perintah/bin/bash
./bin/bash
dimulai sebagai shell non-login sehingga semua file dot tidak dieksekusi, tetapi bash sendiri membaca.bashrc
dari pengguna panggilan. Lingkungan Anda tetap sama. Rumah Anda tidak akan menjadi rumah root. Jadi Anda root, tetapi di lingkungan pengguna panggilan.sudo -s
membaca$SHELL
variabel dan mengeksekusi konten. Jika$SHELL
berisi/bin/bash
itu memanggilsudo /bin/bash
(lihat di atas).Memeriksa:
Untuk memeriksa apakah Anda berada di shell login atau tidak (hanya berfungsi dalam bash karena
shopt
merupakan perintah bawaan):sumber
sudo
memungkinkan pengguna yang diizinkan untuk mengeksekusi perintah sebagai superuser atau pengguna lain . Pokoknya, +1 untuk upaya Anda.root
sesi pengguna (vs menggunakansudo
) adalah ketika saya melakukan sesuatu yang membutuhkan penggunaanroot
khusus hak istimewa, seperti ketika menginstal sesuatu yang baru atau melakukan konfigurasi ulang besar . Saya sudah menggunakansudo /bin/bash
, tetapi ternyata metode itu memiliki rap buruk karena beberapa alasan saya tidak mengerti.sudo -i
disarankan. Baca di sini: ubuntuforums.org/showthread.php?t=1817402 dan di sini: unix.stackexchange.com/questions/98531/…Untuk mencari perbedaan, Anda dapat mengubah lingkungan yang dihasilkan di antara doa yang berbeda.
Anda bisa menemukan beberapa perbedaan "kecil" dalam beberapa variabel kritis:
PATH
,LD_LIBRARY_PATH
,LD_PRELOAD
atau perbedaan ~ /. penanganan dotfiles (
~/.config
).Pertimbangkan juga kepemilikan $ HOME berdasarkan logfile (
~/.xsession.errors
, dll ...) atau cookie xauth (~/.Xauthority
) yang dihasilkan oleh perintah.Coba perintah ini:
sumber