Jika saya menjalankan perintah.
sudo some-command && some-other-command
Apakah perintah kedua dijalankan dengan sudo
previlege juga?
Jika saya menjalankan perintah.
sudo some-command && some-other-command
Apakah perintah kedua dijalankan dengan sudo
previlege juga?
Jawaban:
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
Tidak. Beberapa contoh yang melakukan ini adalah:
sudo some-command && sudo some-other-command
sudo sh -c "some-command && some-other-command"
atau jika Anda menginginkan perintah sarang, Anda bahkan dapat melakukannya:
sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
some-command2
some-other-command2
EOF2
EOF
$ 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 bahwa sudo -s cd ..
tidak ada kesalahan yang bertentangan sudo cd ..
.
sudo bash <<"EOF"
:! Terima kasih! :-)
Tidak, Anda harus menulis sudo dua kali, atau melakukan sesuatu seperti
sudo bash -c 'foo && bar'
&&
berarti bahwa sisi (kedua) perintah yang tepat hanya akan berjalan hanya jika jangan sampai memihak (pertama) perintah berhasil yaitu kode keluar $?
adalah 0
.
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:
$ sudo whoami && whoami
root
foobar
TIDAK, dan yang berikut ini sangat umum secara makro.
sudo reboot && exit
Hampir setiap orang seharusnya melakukan ini setidaknya sekali
sudo apt-get update && sudo apt-get upgrade
Jadi itu adalah pertanyaan wawancara "mickey mouse" yang bagus.
Ini sangat mudah diuji sehingga pertanyaannya dapat diduga latihan stat padding.
Di baris perintah, ketika Anda melihat
$ command one && command two
maksud tipikalnya adalah menjalankan perintah yang mengikuti && hanya jika perintah pertama berhasil.
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.
touch fileA fileB
Saya membuat dua file fileA dan fileB. Sekarang saya akan menjalankan perintah
sudo chown test:test fileA && chown test:test fileB
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:
chown: changing ownership of `fileB': Operation not permitted
Jadi perintah tidak berjalan karena dibutuhkan sudo
dan meskipun kita dapat menyimpulkan bahwa && bukan pengganti yang keduasudo
whoami
contoh.