最初のコマンドで&&とsudoを使用する場合、2番目のコマンドもsudoとして実行されますか?


64

コマンドを実行した場合。

sudo some-command && some-other-command

2番目のコマンドsudoもprevilege で実行されていますか?

回答:


110

TL; DR:いいえ


最初のコマンドは

sudo some-command

2番目のコマンドは

some-other-command

このコマンドsudoは次のコマンドを受け取り、昇格された特権で実行します。&&しかし、コマンドに属していないと、最初のコマンドを実行する前に、シェルによって解釈されます。最初に最初のコマンドを実行し、成功すると2番目のコマンドを実行するようにbashに指示します。

だから、sudoについて知りません&& some-other command。昇格されたプロセスが終了すると、bashは戻り値を取得してから、他のコマンドを実行しますが、このコマンドも最初のコマンドを認識しません。

これは簡単に実証できます。

$ sudo whoami && whoami
root
username

必要なものに到達するには、昇格したbashを開始し、両方のコマンドを実行させます。

$ sudo bash -c 'whoami && whoami'
root
root

したがって、上記のプロセス全体が昇格プロセスで実行されるため、両方のコマンドがルートとして実行されます。つまり、このコマンドで開始されたbashセッションは終了後すぐに終了します。それでも、両方whoamiはお互いの存在を知りません。

これはどんな目的にも適合しませんが、このデモンストレーションでは、より簡単な方法は単に

sudo some-command && sudo some-other-command

29
whoami例では+1 。
カールH


このデモは本当にクールです!次回、他の人にsudoを教えようとするときに考えてみてください!
フラグメンテーションは

20

いいえ。これを行う例は次のとおりです。

sudo some-command && sudo some-other-command 
sudo sh -c "some-command && some-other-command"

または、コマンドをネストしたい場合は、次のこともできます。

sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
    some-command2
    some-other-command2
EOF2
EOF
  • 2番目は別のシェルを使用します。
  • 2番目のバージョンで 'または "を使用する場合、コマンドまたはコマンドのパラメーター(つまり、\'または\")でエスケープする必要があるため、非常に迅速に複雑になります。

3番目の方法が機能しない:$ sudo -s -- whoami && whoami与えるroot username
-BartekChom

@BartekChom申し訳ありませんがその引用符を逃した
-Rinzwind

sudo -s -- "whoami && whoami"commandが見つかりませんでしたが、commandとほぼ同じ"whoami && whoami"です。この構成を&&で使用する方法は?とは sudo -s cd ..対照的に、エラーは発生しませんsudo cd ..
BartekChom

今日は何か新しいことを学びました:sudo bash <<"EOF"!ありがとう!:
ファビー


2

&&は、右側(2番目)のコマンドは、最小(最初)のコマンドが成功した場合にのみ実行されることを意味します。つまり、終了コード$?0です。

2つのコマンドは互いに異なり、独自の環境で実行されるため、2番目のコマンドはsudo特権を持って実行されません。

これにより明確になります。

$ sudo whoami && whoami 
root
foobar

1

いいえ、かつては非常に一般的にマクロ化されていました。

sudo reboot && exit

ほぼ全員がこれを少なくとも1回は実行する必要がありました

sudo apt-get update && sudo apt-get upgrade

したがって、これは素晴らしい「ミッキーマウス」インタビューの質問です。

これは非常に簡単にテストされるので、質問はstat paddingエクササイズの疑いがあるかもしれません。


0

コマンドラインで、

$ command one && command two

典型的な目的は、最初のコマンドが成功した場合にのみ、&&に続くコマンドを実行することです。

他のコマンドもsudoとして実行されますか?

絶対にいいえ、これは2つの連続したコマンドを記述するのと同じです。この&&はコマンドに追加の特権を与えません。それは単なるセパレータです。

それを証明するために、例を挙げましょう。

touch fileA fileB 

2つのファイルfileAとfileBを作成しました。今、私はコマンドを実行します

sudo chown test:test fileA && chown test:test fileB

これらのファイルのユーザーとグループの所有者をユーザーとグループ名のテストに変更しています。さて、最初のコマンドは実行する必要がありますが、他のコマンドはどうですか?

出力は次のとおりです。

chown: changing ownership of `fileB': Operation not permitted

したがって、コマンドは必要なため実行sudoされませんでしたが、&&は2番目のコマンドの代わりではないと結論付けることができますsudo

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.