Apa perbedaan antara “su” dengan dan tanpa tanda hubung?

87

Aku cukup baru untuk terminal Linux dan saya tidak yakin apa perbedaan antara sudengan tanda hubung dan sutanpa tanda hubung, misalnya: su - usernamevs. su username.

Saya melihat ke dokumentasi tetapi di sana, ini tidak disebutkan. Bisakah seseorang tolong bantu saya?

pengguna574183
sumber
"shell login" sering berarti shell interaktif. Ini vs. shell yang hanya mengeksekusi skrip dan keluar.
Shahbaz
6
Itu ada di sana, di halaman yang sama yang Anda tautkan ke : " -, -l, --login: buat shell menjadi shell login "
ArjunShankar
1
Anda bahkan tidak perlu google, cukup ketik su --help.
Seni Shayderov
1
Yang perlu diperhatikan: Ini sangat berguna ketika su-ing untuk melakukan root karena tanpa menggunakan tanda hubung untuk memulai shell login baru, Anda $PATHtidak akan diperbarui dan dengan demikian Anda tidak akan dapat secara langsung memanggil binari hanya root di /sbindan/usr/sbin
Garrett

Jawaban:

85

Perbedaan antara "-" dan "tidak ada tanda hubung" adalah bahwa yang terakhir menjaga lingkungan Anda yang ada (variabel, dll); yang pertama menciptakan lingkungan baru (dengan pengaturan pengguna yang sebenarnya, bukan milik Anda).

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

Tanda hubung memiliki dua efek:

1) beralih dari direktori saat ini ke direktori home dari pengguna baru (misalnya, ke / root dalam kasus pengguna root) dengan masuk sebagai pengguna itu

2) mengubah variabel lingkungan ke variabel pengguna baru seperti yang ditentukan oleh ~ / .bashrc mereka. Yaitu, jika argumen pertama ke su adalah tanda hubung, direktori dan lingkungan saat ini akan diubah menjadi apa yang diharapkan jika pengguna baru benar-benar masuk ke sesi baru (bukan hanya mengambil alih sesi yang ada).

paulsm4
sumber
situs ini -> admon.org/difference-between-login-shell-and-non-login-shell mengatakan bahwa ketika digunakan tanpa tanda hubung file / etc / profile dan ~ / .bash_profile tidak dieksekusi. Apa arti penting kedua file ini terhadap lingkungan pengguna?
user574183
2
Kedua hal itu adalah file yang mengatur lingkungan pengguna :) Tidak menjalankannya berarti menjaga lingkungan asli Anda. Menjalankan mereka (dengan menggunakan "-") berarti membuat lingkungan Anda sama dengan pengguna yang Anda "tuntut". Menggunakan tanda hubung biasanya yang Anda inginkan - saya menggunakan "-" biasanya setiap kali saya "su".
paulsm4
apakah urutan eksekusi benar-benar penting? Saya bertanya ini karena di situs itu mereka telah menyebutkan bahwa dua file / etc / bashrc ~ / .bashrc dieksekusi dalam urutan terbalik ketika dalam shell non login. Seseorang tolong bantu saya
user574183
1
@ user574183 tentu saja, mis. jika yang satu mengatur sesuatu tetapi yang lain menghapus sesuatu atau mengatur yang lain
fikr4n
3

su -memulai shell login untuk root. Untuk perbedaan pada shell normal, lihat situs ini misalnya.

Lars Kotthoff
sumber
2
Itu benar, tapi itu bukan pertanyaannya :)
paulsm4
Itu tidak benar, Anda dapat menjalankan su dengan tanda hubung dan membuatnya memulai shell untuk pengguna yang berbeda. Jalankan yang berikut dan lihat hasilnyasudo su - "testuser" -c "whoami"
David Hergert
@ David Hergert Ya, dan tanpa nama pengguna itu membuka shell untuk root.
Lars Kotthoff
@ LarsKotthoff - ok, maaf, cara itu diucapkan itu terdengar seolah-olah dash adalah yang membuatnya menjadi root shell, bukan fakta bahwa meninggalkan pengguna default untuk melakukan root. Bahkan SA lokal saya membuat saya bingung. :)
David Hergert