Jika saya menjalankan perintah.
sudo some-command && some-other-command
Apakah perintah kedua dijalankan dengan sudo
previlege juga?
TL; DR: TIDAK
Perintah pertama adalah
sudo some-command
Perintah kedua adalah
some-other-command
Perintah sudo
mengambil perintah berikut dan mengeksekusinya dengan hak istimewa yang ditinggikan. The &&
, bagaimanapun, bukan milik perintah dan ditafsirkan oleh shell, sebelum mengeksekusi perintah pertama. Ini memberitahu bash untuk terlebih dahulu menjalankan perintah pertama, dan pada keberhasilan yang kedua.
Jadi sudo
tidak tahu tentang && some-other command
. Ketika proses yang ditinggikan berakhir, bash mengambil nilai baliknya, dan kemudian menjalankan perintah lainnya, yang lagi-lagi tidak mengetahui yang pertama.
Ini dapat ditunjukkan dengan mudah:
$ sudo whoami && whoami
root
username
Untuk mencapai yang Anda inginkan, Anda bisa memulai bash yang ditinggikan, dan biarkan menjalankan kedua perintah:
$ sudo bash -c 'whoami && whoami'
root
root
Jadi sekarang, kedua perintah dieksekusi sebagai root, karena seluruh proses yang dijelaskan di atas dieksekusi dalam proses yang ditinggikan, yaitu sesi bash dimulai dengan perintah ini, yang segera keluar setelah selesai. Namun, keduanya whoami
tidak tahu keberadaan satu sama lain.
Ini tidak sesuai dengan tujuan apa pun tetapi untuk demonstrasi ini, cara yang lebih mudah adalah dengan melakukannya
sudo some-command && sudo some-other-command
whoami
contoh.Tidak. Beberapa contoh yang melakukan ini adalah:
atau jika Anda menginginkan perintah sarang, Anda bahkan dapat melakukannya:
sumber
$ sudo -s -- whoami && whoami
memberiroot
username
sudo -s -- "whoami && whoami"
sepertinya memberi perintah tidak ditemukan, kurang lebih sama dengan perintah"whoami && whoami"
. Bagaimana cara menggunakan konstruksi ini dengan &&? Saya melihat bahwasudo -s cd ..
tidak ada kesalahan yang bertentangansudo cd ..
.sudo bash <<"EOF"
:! Terima kasih! :-)Tidak, Anda harus menulis sudo dua kali, atau melakukan sesuatu seperti
sumber
&&
berarti bahwa sisi (kedua) perintah yang tepat hanya akan berjalan hanya jika jangan sampai memihak (pertama) perintah berhasil yaitu kode keluar$?
adalah0
.Kedua perintah berbeda satu sama lain dan akan berjalan di lingkungan mereka sendiri sehingga perintah kedua tidak akan berjalan memiliki
sudo
hak istimewa.Ini akan membuat Anda jelas:
sumber
TIDAK, dan yang berikut ini sangat umum secara makro.
Hampir setiap orang seharusnya melakukan ini setidaknya sekali
Jadi itu adalah pertanyaan wawancara "mickey mouse" yang bagus.
Ini sangat mudah diuji sehingga pertanyaannya dapat diduga latihan stat padding.
sumber
Di baris perintah, ketika Anda melihat
maksud tipikalnya adalah menjalankan perintah yang mengikuti && hanya jika perintah pertama berhasil.
Apakah perintah lain berjalan sebagai sudo juga?
sama sekali tidak, ini sama seperti menulis dua perintah berturut-turut, ini && tidak memberikan hak istimewa tambahan untuk perintah. Itu hanya pemisah .
Untuk membuktikannya, mari kita ambil contoh.
Saya membuat dua file fileA dan fileB. Sekarang saya akan menjalankan perintah
Saya mengubah pemilik pengguna dan grup dari file-file ini menjadi tes nama pengguna dan grup. Sekarang perintah pertama harus dijalankan sementara bagaimana dengan yang lain?
Outputnya adalah:
Jadi perintah tidak berjalan karena dibutuhkan
sudo
dan meskipun kita dapat menyimpulkan bahwa && bukan pengganti yang keduasudo
sumber