![“sudo [命令]”和“sudo sh [命令]”之间有什么区别?](https://linux22.com/image/1098807/%E2%80%9Csudo%20%5B%E5%91%BD%E4%BB%A4%5D%E2%80%9D%E5%92%8C%E2%80%9Csudo%20sh%20%5B%E5%91%BD%E4%BB%A4%5D%E2%80%9D%E4%B9%8B%E9%97%B4%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB%EF%BC%9F.png)
我正在尝试在 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
,您将以sh
root 权限运行该命令。