'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

安装程序可以成功启动。

为什么这会有所作为?



Answers:


13

如果该文件未标记为可执行文件,则需要调用命令解释程序以执行该文件。

例子:

  • sudo sh foo将打开FOOsh使用sudo的特权。

  • sudo bash foo将打开FOObash使用sudo的特权。

  • sh foo将打开FOOsh使用用户的权限。

  • bash foo将打开FOObash使用用户的权限。

如果将文件标记为可执行文件,则只需要使用进行调用,./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是用于运行命令的外壳程序,因此使用sudo执行sh将为您提供根外壳程序。这意味着该shell中的所有命令均以root用户身份执行。我的猜测是脚本执行需要root的其他内容,但是当您仅使用sudo而不是sudo sh时,其他内容将以普通用户身份执行,但是使用sh时,所有内容都将以root身份执行。


感谢您的回答。我的声誉不到15,所以我不能投票给你答案。但是,,,谢谢!
Landy 2013年

1
公认的答案有更多细节,但是我认为这确实是人们应该意识到的关键点。
Christopher Hunter
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.