web-dev-qa-db-ja.com

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

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

Sudo some-command && some-other-command

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

63
user974407

TL; DR:NO


最初のコマンドは

Sudo some-command

2番目のコマンドは

some-other-command

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

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

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

$ Sudo whoami && whoami
root
username

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

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

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

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

Sudo some-command && Sudo some-other-command
109
s3lph

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

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番目のバージョンで 'または "を使用する場合、コマンドまたはコマンドのパラメーター(つまり、\'または\")でエスケープする必要があるため、非常に迅速に複雑になります。
19
Rinzwind

いいえ、Sudoを2回記述するか、または

Sudo bash -c 'foo && bar'
4
davidbaumann

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

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

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

$ Sudo whoami && whoami 
root
foobar
2
heemayl

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

Sudo reboot && exit

ほぼすべての人が少なくともこれを行うべきだったonce

Sudo apt-get update && Sudo apt-get upgrade

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

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

1
mckenzm

コマンドラインで、

$ 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の代わりではないと結論付けることができます

0
Maythux