Linux - gunakan "su -" tetapi simpan direktori saat ini
14
Ketika saya lakukan su -untuk mendapatkan root, direktori saya saat ini diatur ke rumah root. Apakah ada pula untuk menyimpan direktori saat ini saya berada, seperti sudo -s. Atau apakah jawabannya menggunakan sudo?
Harap dicatat bahwa saya tidak ingin terdengar kasar, tetapi mengapa masalah ini tidak diselesaikan melalui "man su"?
Myrrdyn
1
@Rory tolong baca komentar
Myrrdyn
Saya suka menggunakan sudo su -c "zsh", dalam kasus saya, membuat saya tetap di dir saat ini dan memuat zsh sebagai shell dengan pengguna root. ctrl+dsetelah dan Anda kembali ke pengguna saat ini. Untuk direktori, bekerja langsung pada centos untuk saya, tetapi mungkin menambahkan `&& cd $ (pwd)` perintah yang lewat di dalam bisa melakukan trik.
GabLeRoux
@Myrrdyn Documentations sangat bagus ketika Anda tahu apa yang Anda cari. Ketika Anda tidak, meminta beberapa saran ahli lebih cepat, dan lebih didaktik.
Romain Vincent
Jawaban:
18
Selalu lebih baik menggunakan sudo, jika mungkin, karena Anda tidak perlu tahu (atau memberi seseorang) kata sandi root. Atur kata sandi root untuk sesuatu yang panjang dan mengerikan dan kemudian menguncinya di brankas.
Jika Anda ingin menolak akses seseorang nanti, Anda cukup menghapus aksesnya ke sudo, daripada harus mengajari orang lain kata sandi root baru.
Namun - Anda tidak perlu menggunakan parameter '-' jika tidak mau. Anda akan mendapatkan shell sebagai root, itu tidak akan menjadi shell login (jadi itu tidak akan menjalankan .profile root.)
Dalam kasus saya, saya perlu alias untuk melakukan sesuatu seperti asuser git reset --hard. Tetapi su - <user> -m -c "git reset --hard"dan sudo -u <user> git reset --hardakan menyelamatkan lingkungan saya dan git akan mencoba membaca konfigurasi git pengguna saat ini. Jadi saya hanya ingin menyatakan bahwa kadang-kadang solusi user205705 menggunakan su - <user> -c "cd pwd; bash" lebih baik.
ReFruity
16
Saya setuju bahwa sudo hampir selalu merupakan jawaban yang lebih baik tetapi untuk menjawab bagian lain dari pertanyaan ...
Tanda '-' di 'su -' menunjukkan bahwa Anda ingin meniru login pengguna super, daripada hanya menjalankan hak istimewa pengguna super.
Jika Anda menggunakan 'su' daripada 'su -', Anda akan tetap di direktori yang sama; namun Anda juga akan berjalan di lingkungan yang sama sehingga mungkin perlu memodifikasi jalur Anda untuk mengakses beberapa perintah admin.
Saya tidak dapat melihat bagaimana ini berbeda dari hanya "su" pada itu sendiri, selain mungkin tidak mengatur ulang lingkungan PATH, yang merupakan masalah keamanan yang mungkin terjadi.
David Pashley
@ Davidvidpashley misalnya, mengeksekusi .bashrcdari pengguna luar, bukan yang root.
phil294
4
Jika Anda benar-benar ingin menggunakan su, ada cara untuk tetap berada di direktori yang sama.
su - <user> -c "cd `pwd`; bash"
Apa yang terjadi di sini:
su - <user> = masuk sebagai
-c yang berarti "jalankan perintah di shell baru
-c "cd `pwd`" perintah yang kita berikan adalah untuk beralih ke direcotory saat ini ( pwd) - tetapi karena kita menggunakan backticks, pwdperintah dievaluasi sebelum kita menjalankan superintah sehingga kita benar-benar beralih ke direktori kita berada di SEKARANG sebagai pengguna lama. Satu-satunya masalah di sini adalah bahwa shell baru keluar setelah menjalankan perintah, jadi kami menambahkan:
-c "cd `pwd`; bash" yang berarti "jalankan bash(shell baru) setelah menjalankan cdperintah dan bash shell tidak keluar sampai kita keluar.
Ini sebenarnya satu-satunya jawaban untuk pertanyaan itu. Kerja bagus!
Cacahuete Frito
Sebenarnya, su - [user] -c "cd $(pwd); bash"mungkin sedikit lebih baik (ubah backticks ke $()).
Cacahuete Frito
3
Gunakan sudo :). Serius, kamu tidak perlu su. 'sudo' lebih baik karena Anda hanya menggunakannya untuk perintah istimewa dan dapat membantu menghindari kesalahan. Anda juga mendapatkan akuntabilitas.
Jika Anda menggunakan "su" maka shell interaktif. Ini sama dengan "sudo -s". "su -" membuat shell login, yang akan menimpa lingkungan. "sudo -i" adalah setara dengan sudo. Jika Anda mencoba untuk mendapatkan shell interaktif, Anda harus selalu menggunakan formulir sudo -i (atau su -), atau mungkin berakhir dengan izin file aneh di direktori home pengguna.
Anda harus memodifikasi sumber su untuk menyelesaikan pekerjaan ini. ada panggilan chdir dalam prosedur inisialisasi variabel envoironment. berkomentar negara-negara termasuk panggilan itu. dan sekarang, Anda dapat melakukan "su -" tetapi menyimpan direktori saat ini.
sudo su -c "zsh"
, dalam kasus saya, membuat saya tetap di dir saat ini dan memuat zsh sebagai shell dengan pengguna root.ctrl+d
setelah dan Anda kembali ke pengguna saat ini. Untuk direktori, bekerja langsung pada centos untuk saya, tetapi mungkin menambahkan `&& cd $ (pwd)` perintah yang lewat di dalam bisa melakukan trik.Jawaban:
Selalu lebih baik menggunakan sudo, jika mungkin, karena Anda tidak perlu tahu (atau memberi seseorang) kata sandi root. Atur kata sandi root untuk sesuatu yang panjang dan mengerikan dan kemudian menguncinya di brankas.
Jika Anda ingin menolak akses seseorang nanti, Anda cukup menghapus aksesnya ke sudo, daripada harus mengajari orang lain kata sandi root baru.
Namun - Anda tidak perlu menggunakan parameter '-' jika tidak mau. Anda akan mendapatkan shell sebagai root, itu tidak akan menjadi shell login (jadi itu tidak akan menjalankan .profile root.)
sumber
asuser git reset --hard
. Tetapisu - <user> -m -c "git reset --hard"
dansudo -u <user> git reset --hard
akan menyelamatkan lingkungan saya dan git akan mencoba membaca konfigurasi git pengguna saat ini. Jadi saya hanya ingin menyatakan bahwa kadang-kadang solusi user205705 menggunakan su - <user> -c "cdpwd
; bash" lebih baik.Saya setuju bahwa sudo hampir selalu merupakan jawaban yang lebih baik tetapi untuk menjawab bagian lain dari pertanyaan ...
Tanda '-' di 'su -' menunjukkan bahwa Anda ingin meniru login pengguna super, daripada hanya menjalankan hak istimewa pengguna super.
Jika Anda menggunakan 'su' daripada 'su -', Anda akan tetap di direktori yang sama; namun Anda juga akan berjalan di lingkungan yang sama sehingga mungkin perlu memodifikasi jalur Anda untuk mengakses beberapa perintah admin.
sumber
Jika Anda menggunakan
su
tanpa-
, itu akan membuat Anda tetap di direktori Anda saat ini.-
,-l
atau--login
beri tahu su untuk:Atau cukup gunakan sudo, punya banyak keunggulan lain. Atau kunci ssh.
sumber
Anda harus menggunakan sudo.
Itu akan membuat Anda tetap di folder saat Anda mengubah ke root.
Manfaat menggunakan sudo
sumber
.bashrc
dari pengguna luar, bukan yang root.Jika Anda benar-benar ingin menggunakan
su
, ada cara untuk tetap berada di direktori yang sama.Apa yang terjadi di sini:
su - <user>
= masuk sebagai-c
yang berarti "jalankan perintah di shell baru-c "cd `pwd`"
perintah yang kita berikan adalah untuk beralih ke direcotory saat ini (pwd
) - tetapi karena kita menggunakan backticks,pwd
perintah dievaluasi sebelum kita menjalankansu
perintah sehingga kita benar-benar beralih ke direktori kita berada di SEKARANG sebagai pengguna lama. Satu-satunya masalah di sini adalah bahwa shell baru keluar setelah menjalankan perintah, jadi kami menambahkan:-c "cd `pwd`; bash"
yang berarti "jalankanbash
(shell baru) setelah menjalankancd
perintah dan bash shell tidak keluar sampai kita keluar.sumber
su - [user] -c "cd $(pwd); bash"
mungkin sedikit lebih baik (ubah backticks ke$()
).Gunakan sudo :). Serius, kamu tidak perlu su. 'sudo' lebih baik karena Anda hanya menggunakannya untuk perintah istimewa dan dapat membantu menghindari kesalahan. Anda juga mendapatkan akuntabilitas.
sumber
Jika Anda menggunakan "su" maka shell interaktif. Ini sama dengan "sudo -s". "su -" membuat shell login, yang akan menimpa lingkungan. "sudo -i" adalah setara dengan sudo. Jika Anda mencoba untuk mendapatkan shell interaktif, Anda harus selalu menggunakan formulir sudo -i (atau su -), atau mungkin berakhir dengan izin file aneh di direktori home pengguna.
sumber
Anda harus memodifikasi sumber su untuk menyelesaikan pekerjaan ini. ada panggilan chdir dalam prosedur inisialisasi variabel envoironment. berkomentar negara-negara termasuk panggilan itu. dan sekarang, Anda dapat melakukan "su -" tetapi menyimpan direktori saat ini.
sumber