Bir komut çalıştırırsam.
sudo some-command && some-other-command
İkinci komut da sudo
previlege ile çalıştırılıyor mu?
Bir komut çalıştırırsam.
sudo some-command && some-other-command
İkinci komut da sudo
previlege ile çalıştırılıyor mu?
Yanıtlar:
TL; DR: NO
İlk komut
sudo some-command
İkinci komut
some-other-command
Komut sudo
aşağıdaki komutu alır ve yükseltilmiş ayrıcalıklarla çalıştırır. &&
Ancak, bir komuta ait olmayan ve ilk komut çalıştırmadan önce, kabuk tarafından yorumlanır. Bash'a önce ilk komutu yerine getirmeyi ve başarıda ikinciyi söyler.
Yani bu sudo
konuda bilmiyor && some-other command
. Yükseltilmiş işlem sona erdiğinde, bash dönüş değerini alır ve ardından birinciyi bilmeyen diğer komutu yerine getirir.
Bu kolayca gösterilebilir:
$ sudo whoami && whoami
root
username
İstediklerinize ulaşmak için, yükseltilmiş bir bash başlatabilir ve her iki komutu yerine getirmesine izin verebilirsiniz:
$ sudo bash -c 'whoami && whoami'
root
root
Şimdi, her iki komut da yukarıda tanımlanmış olan tüm işlem yükseltilmiş bir işlemde yürütüldüğü için root olarak yürütülür, yani bash oturumu bitince hemen ardından çıkan bu komutla başlar. Yine de, ikisi de whoami
birbirlerinin varlığını bilmiyor.
Bu herhangi bir amaç için uygun değil, ancak bu gösteri için, kolay yolu basitçe yapmaktır
sudo some-command && sudo some-other-command
Hayır. Bunu yapan bazı örnekler:
sudo some-command && sudo some-other-command
sudo sh -c "some-command && some-other-command"
ya da yuva komutları istiyorsanız, şunları bile yapabilirsiniz:
sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
some-command2
some-other-command2
EOF2
EOF
$ sudo -s -- whoami && whoami
verirroot
username
sudo -s -- "whoami && whoami"
komutun bulunamadığı, az ya da çok komutla aynı komutu verdiği görülüyor "whoami && whoami"
. Bu inşaat && ile nasıl kullanılır? Bunun sudo -s cd ..
aksine hata yapmadığını görüyorum sudo cd ..
.
sudo bash <<"EOF"
! Teşekkürler! :-)
Hayır, ya iki kez sudo yazmalısınız ya da böyle bir şey yapmalısınız.
sudo bash -c 'foo && bar'
&&
diye baskı olan sağ taraflı (ikinci) komutu yalnızca çalışacağı anlamına gelir (ilk) komutu başarılı yani çıkış kodudur $?
olduğunu 0
.
İki komut birbirinden farklıdır ve kendi ortamlarında çalışacaktır, böylece ikinci komut sudo
ayrıcalıklara sahip olmayacaktır .
Bu sizi açıklığa kavuşturur:
$ sudo whoami && whoami
root
foobar
HAYIR ve aşağıdakiler bir zamanlar çok yaygın olarak makrodur.
sudo reboot && exit
Hemen hemen herkes bunu en az bir kere yapmalıydı.
sudo apt-get update && sudo apt-get upgrade
Bu yüzden harika bir "mickey mouse" röportaj sorusu.
Bu o kadar kolay bir şekilde test edilir ki, sorunun bir stat padding egzersizinden şüphelenilebileceği düşünülür.
Komut satırında, gördüğünüzde
$ command one && command two
tipik amaç, yalnızca ilk komut başarılı olduğunda && izleyen komutu yerine getirmektir.
kesinlikle hayır, bu sadece iki ardışık komut yazmak gibi, bu da bir komuta hiçbir ayrıcalık vermez. Bu sadece bir ayırıcı .
Bunu kanıtlamak için bir örnek verelim.
touch fileA fileB
İki dosya fileA ve fileB oluşturdum. Şimdi komutu çalıştıracağım
sudo chown test:test fileA && chown test:test fileB
Bu dosyaların kullanıcı ve grup sahibini kullanıcı ve grup adı testine çeviriyorum. Şimdi ilk komut ne olur peki ya diğeri?
Çıktı:
chown: changing ownership of `fileB': Operation not permitted
Bu yüzden komut ihtiyaç duyduğu sudo
için çalışmadı ve ikinci bir ikame olmadığına karar verelim.sudo
whoami
Örnek için +1 .