В чем разница между "sudo [команда]" и "sudo sh [команда]?

Я пытаюсь установить VMware Workstation в свою Ubuntu 12.04.2 LTS. Если я выполню следующую команду:

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

он заканчивается сразу, а установка никогда не начинается.

Если я выполню эту команду:

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

Установщик может быть успешно запущен.

Почему это имеет значение?

3 ответа

Решение

Если файл не помечен как исполняемый, вам необходимо вызвать интерпретатор командной оболочки для его выполнения.

Примеры:

  • sudo sh foo откроет фу с sh используя привилегии sudo.

  • sudo bash foo откроет фу с bash используя привилегии sudo.

  • sh foo откроет фу с sh используя привилегии вашего пользователя.

  • bash 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,

Sh - это оболочка для запуска команд, поэтому выполнение sh с помощью sudo дает вам корневую оболочку. Это означает, что все команды в этой оболочке выполняются от имени пользователя root. Я предполагаю, что скрипт выполняет что-то еще, что требует root, однако, когда вы используете только sudo, а не sudo sh, что-то еще выполняется как обычный пользователь, однако с sh все будет выполнено как root.

sudoэто команда, которая дает вам привилегии root. Но является переводчиком. Когда вы используете sudo command, вы запускаете команду с привилегиями root. Но когда вы используете sudo sh command, вы управляете shкоманду от имени root.

Другие вопросы по тегам