“sudo [命令]”和“sudo sh [命令]”之间有什么区别?

“sudo [命令]”和“sudo sh [命令]”之间有什么区别?

我正在尝试在 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

安装程序可以成功启动。

这为什么会有区别呢?

答案1

如果该文件未标记为可执行文件,则需要调用命令 shell 解释器来执行它。

例子:

  • sudo sh foo将打开使用sh须藤特权。

  • sudo bash foo将打开使用bash须藤特权。

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

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

如果将文件标记为可执行文件,则只需调用它./foo,因为它被标记为可执行文件,它将使用定义的命令 shell 解释器读取并执行,而无需定义一个。

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

答案2

Sh 是用于运行命令的 shell,因此使用 sudo 执行 sh 会为您提供 root shell。这意味着该 shell 中的所有命令都以 root 身份执行。我猜想脚本会执行需要 root 身份的其他操作,但是当您仅使用 sudo 而不使用 sudo sh 时,其他操作会以普通用户身份执行,但是使用 sh 时,所有内容都将以 root 身份执行。

答案3

sudo是一个赋予您 root 权限的命令。但是sh是一个解释器。当您使用 时sudo command,您将以 root 权限运行该命令。但是当您使用 时sudo sh command,您将以shroot 权限运行该命令。

相关内容