Jeśli uruchomię polecenie.
sudo some-command && some-other-command
Czy drugie polecenie jest również uruchamiane z sudo
previlege?
TL; DR: NIE
Pierwsze polecenie to
sudo some-command
Drugie polecenie to
some-other-command
Polecenie sudo
przyjmuje następujące polecenie i wykonuje je z podwyższonymi uprawnieniami. &&
Jednak nie należą do polecenia i jest interpretowany przez powłokę, przed wykonaniem pierwszego polecenia. Mówi bashowi, aby najpierw wykonał pierwsze polecenie, a po sukcesie drugie.
Więc sudo
nie wie o && some-other command
. Po zakończeniu podwyższonego procesu bash pobiera wartość zwracaną, a następnie wykonuje inne polecenie, które ponownie nie wie o pierwszym.
Można to łatwo wykazać:
$ sudo whoami && whoami
root
username
Aby osiągnąć to, co chcesz, możesz uruchomić podwyższone bash i pozwolić mu na wykonanie obu poleceń:
$ sudo bash -c 'whoami && whoami'
root
root
Tak więc teraz oba polecenia są wykonywane jako root, ponieważ cały proces opisany powyżej jest wykonywany w podwyższonym procesie, tj. Sesja bash rozpoczęła się od tego polecenia, które natychmiast kończy się po zakończeniu. Mimo to obaj whoami
nie znają się nawzajem.
Nie odpowiada to żadnemu celowi, ale dla tej demonstracji łatwiej jest po prostu to zrobić
sudo some-command && sudo some-other-command
whoami
przykład.Nie. Oto niektóre przykłady:
lub jeśli chcesz polecenia zagnieżdżenia, możesz nawet:
źródło
$ sudo -s -- whoami && whoami
dajeroot
username
sudo -s -- "whoami && whoami"
wydaje się, że polecenie nie zostało znalezione, mniej więcej tak samo jak polecenie"whoami && whoami"
. Jak korzystać z tej konstrukcji razem z &&? Widzę, żesudo -s cd ..
nie daje to żadnego błędu w przeciwieństwie dosudo cd ..
.sudo bash <<"EOF"
! Dzięki! :-)Nie, musisz napisać sudo dwa razy lub zrobić coś takiego
źródło
&&
oznacza, że prawostronne (drugie) polecenie będzie działało tylko wtedy, gdy ostatnie (pierwsze) polecenie jest skuteczne, tj. kod zakończenia$?
to0
.Oba polecenia różnią się od siebie i będą działać we własnym środowisku, więc drugie polecenie nie będzie działać z
sudo
uprawnieniami.Pozwoli ci to wyjaśnić:
źródło
NIE, a następujące elementy były kiedyś bardzo często makro.
Prawie każdy powinien to zrobić przynajmniej raz
Jest to więc świetne pytanie do wywiadu z „myszką miki”.
Jest to tak łatwo przetestowane, że można podejrzewać pytanie o wypełnianie statystyk.
źródło
W wierszu polecenia, gdy zobaczysz
typowym celem jest wykonanie polecenia następującego po && tylko wtedy, gdy pierwsze polecenie zakończy się powodzeniem.
Czy to drugie polecenie działa również jako sudo?
absolutnie nie, to tak jak pisanie dwóch kolejnych poleceń, to && nie daje żadnego dodatkowego uprawnienia do polecenia. To tylko separator .
Aby to udowodnić, weźmy przykład.
Utworzyłem dwa pliki: plik A i plik B. Teraz uruchomię polecenie
Zmieniam użytkownika i właściciela grupy tych plików na test nazwy użytkownika i grupy. Teraz pierwsze polecenie powinno zostać uruchomione, a co z drugim?
Dane wyjściowe to:
Komenda nie została uruchomiona, ponieważ jest potrzebna
sudo
i chociaż możemy stwierdzić, że && nie zastępuje drugiejsudo
źródło