「sudo [command]」と「sudo sh [command]」の違いは何ですか?


13

Ubuntu 12.04.2 LTSにVMware Workstationをインストールしようとしています。次のコマンドを実行すると:

sudo ./VMware-Workstation-9.0.1-894247.x86_64.bundle

すぐに終了し、インストールは開始されません。

このコマンドを実行すると:

sudo sh ./VMware-Workstation-9.0.1-894247.x86_64.bundle

インストーラーは正常に起動できます。

なぜこれが違いを生むのですか?



回答:


13

ファイルが実行可能としてマークされていない場合は、コマンドシェルインタープリターを呼び出して実行する必要があります。

例:

  • sudo sh foosudo特権を使用してfooを開きます。sh

  • sudo bash foosudo特権を使用してfooを開きます。bash

  • sh fooユーザーの権限を使用してfooを開きshます。

  • bash fooユーザーの権限を使用してfooを開きbashます。

ファイルを実行可能ファイルとしてマークする場合は、ファイルを呼び出すだけでよく./foo、そのようにマークされているため、定義済みのコマンドシェルインタープリターで読み取られ、定義する必要なく実行されます。

ls -Fファイルをリストし、実行可能ファイルに*のマークを付けます。

ファイルの実行ビットを有効にする(および実行可能にする)には、コマンドを使用しchmod +x fooます。

実行可能ファイルを使用する場合は、コマンドを使用します

chmod +x VMware-Workstation-9.0.1-894247.x86_64.bundle

そして、あなたはどちらかでそれを実行することができます

sudo sh ./VMware-Workstation-9.0.1-894247.x86_64.bundleまたは単に入力しますsudo ./VMware-Workstation-9.0.1-894247.x86_64.bundle


12

Shはコマンドを実行するためのシェルであるため、shをsudoで実行するとルートシェルになります。これは、そのシェル内のすべてのコマンドがルートとして実行されることを意味します。私の推測では、スクリプトはルートを必要とする他の何かを実行しますが、sudo shではなくsudoのみを使用すると、他の何かが通常のユーザーとして実行されますが、shではすべてがルートとして実行されます。


ご回答有難うございます。私の評判は15未満なので、あなたの答えに投票することはできません。しかし、、、ありがとう!
ランディ

1
受け入れられた答えにはもう少し詳細がありますが、これは本当に重要なポイントだと思います。
クリストファーハンター
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.