Apa yang dilakukan perintah 'sudo -s', dan bagaimana ini digunakan dalam contoh ini?

8

Saya memiliki keraguan berikut. Dalam tutorial yang terkait dengan instalasi perangkat lunak yang saya ikuti katakan bahwa saya harus menjalankan perintah berikut (saya melakukannya di shell ssh , jadi daftar langkah ini diakhiri dengan exitperintah):

sudo -s
apt-get update
apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen
exit

Keraguan saya adalah:

Apa sebenarnya yang dilakukan -sparameter setelah sudoperintah?

Mencari di web saya menemukan bahwa:

‑S [command] Opsi shells (shell) menjalankan shell yang ditentukan oleh variabel lingkungan SHELL jika diatur atau shell seperti yang ditentukan dalam basis data kata sandi. Jika suatu perintah ditentukan, itu diteruskan ke shell untuk dieksekusi melalui opsi c shell. Jika tidak ada perintah yang ditentukan, shell interaktif dijalankan

Sepertinya saya yang sudo -smenjalankan perintah menggunakan variabel lingkungan shell.

Tetapi ini tidak jelas bagi saya: dalam hal ini apa perintah yang dijalankan dengan variabel lingkungan? (hanya dijalankan sudo -sdan tidak sudo -s [command]).

AndreaNobili
sumber

Jawaban:

7

Jawaban sederhananya adalah memberi Anda shell root. Itulah yang digunakan di sini. Ada yang baik perbandingan teknis antara su, sudo -i, sudo -sdan sudo sumetode pada Unix.SE tapi itu benar-benar tidak relevan di sini. Kode bisa digunakan apa saja dan akan berfungsi.

Bantuan nugget berarti beberapa hal:

  • Sedang mencari perintah di $SHELLvariabel lingkungan. Jika Anda menjalankan echo $SHELLAnda mungkin akan melihat /bin/bash. Itu artinya Anda akan mendapatkan instance root dari Bash. Saya yakin jika Anda berada di zshdalamnya berarti Anda mendapatkan instance root zsh.

  • Jika $SHELLkosong, jatuh kembali ke shell default yang ditentukan /etc/passwduntuk pengguna itu.

  • Jika Anda memberikan perintah (mis. sudo -s whoami), Perintah itu sebenarnya berjalan:sudo /bin/bash -c "whoami"

  • Jika Anda tidak memberikan perintah, itu tidak melewati -cargumen sehingga Anda hanya mendapatkan shell interaktif.

Saya telah menggunakan frasa "root" beberapa kali. Secara default sudo semua menjalankan hal-hal sebagai root tetapi sudo(dan su) dapat menjalankan hal-hal sebagai pengguna lain (jika Anda memiliki izin untuk melakukannya). Saya hanya menyatakan ini untuk para pedants yang akan berteriak yang sudo -s -u $USERtidak memberi mereka shell root seperti yang saya janjikan di -satas.


Dan menurut pendapat saya yang paling sederhana , sungguh konyol menjadi root hanya untuk dua perintah, belum lagi bahwa itu bisa membuat pengguna secara tidak sengaja menjalankan perintah lebih lanjut sebagai root. Jika Anda ingin atau perlu menjalankan sesuatu sebagai root, cukup beri perintah terlebih dahulu dengan sudo:

sudo apt-get update
sudo apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen

Saya akan meragukan tutorial yang menyarankan untuk mendapatkan shell root, kecuali dalam kasus di mana Anda memiliki banyak sekali perintah untuk dijalankan ... Dan bahkan kemudian, ada skrip.

Oli
sumber
Penjelasan sempurna. Sekarang semuanya menjadi lebih jelas. Satu keraguan terakhir. Jika saya menambahkan sudo ke semua perintah sebelumnya, saya akan mendapatkan hasil akhir yang sama? apakah itu benar atau aku kehilangan sesuatu?
AndreaNobili
@Oli Anda 100% benar tentang Zsh, "sudo -s" masuk ke shell "root" sebagai "root" bukan Super User.
RCF
@ AndreaNobili Ya, untuk itulah sudoumumnya; menjalankan perintah sebagai root tanpa harus login secara manual sebagai root.
Oli
FYI saya memposting jawaban di bawah jawaban Anda dan pendapat saya sudo -sberbeda secara drastis karena pengetahuan saya yang terbatas dan terjadi secara kebetulan di seluruh situasi. Masih Anda mungkin ingin membaca jawaban "rendah hati" saya dan mungkin menyegarkan kembali jawaban Anda yang sudah berumur 1/2 dekade.
WinEunuuchs2Unix
0

sudo -sakan menjalankan perintah di direktori saat ini seperti yang dilakukan pengguna biasa. Sebagai contoh:

rick@alien:~/askubuntu$ suspendtime
Nov 12 14:06:27 to Nov 12 17:22:21 lasting 11,754 seconds
Nov 12 22:23:37 to Nov 13 04:24:37 lasting 21,660 seconds
(... SNIP ...)
Dec 02 21:58:49 to Dec 03 04:20:52 lasting 22,923 seconds
Dec 03 05:52:43 to Dec 03 16:37:44 lasting 38,701 seconds

Linux uptime 1,859,356 seconds (21 days, 12 hours, 29 minutes, 16 seconds)
45 Suspends 1,173,341 seconds (13 days, 13 hours, 55 minutes, 41 seconds)
Real uptime 686,015 seconds (7 days, 22 hours, 33 minutes, 35 seconds)

rick@alien:~/askubuntu$ sudo suspendtime
sudo: suspendtime: command not found

rick@alien:~/askubuntu$ sudo -H suspendtime
sudo: suspendtime: command not found

rick@alien:~/askubuntu$ sudo -s suspendtime
Nov 12 14:06:27 to Nov 12 17:22:21 lasting 11,754 seconds
(...SNIP...)
Dec 03 05:52:43 to Dec 03 16:37:44 lasting 38,701 seconds

Linux uptime 1,859,431 seconds (21 days, 12 hours, 30 minutes, 31 seconds)
45 Suspends 1,173,341 seconds (13 days, 13 hours, 55 minutes, 41 seconds)
Real uptime 686,090 seconds (7 days, 22 hours, 34 minutes, 50 seconds)

Tentu saja menggunakan -salih-alih awalan perintah dengan ./mungkin tidak terlalu menghemat waktu.

WinEunuuchs2Unix
sumber