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

13

Я пытаюсь установить 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

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

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

Лэнди
источник
относящиеся: askubuntu.com/questions/141928/…
Таккат
связанный , а также: askubuntu.com/questions/70534/...
Nanne

Ответы:

13

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

Примеры:

  • sudo sh fooоткроет foo с shиспользованием привилегий sudo .

  • sudo bash fooоткроет foo с bashиспользованием привилегий sudo .

  • 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 дает вам корневую оболочку. Это означает, что все команды в этой оболочке выполняются от имени пользователя root. Я предполагаю, что скрипт выполняет что-то еще, что требует root, однако, когда вы используете только sudo, а не sudo sh, что-то еще выполняется как обычный пользователь, однако с sh все будет выполняться как root.

w4etwetewtwet
источник
Спасибо за Ваш ответ. Моя репутация меньше 15, поэтому я не могу проголосовать за ваш ответ. Но ,, Спасибо ТЫ!
Лэнди
1
В принятом ответе есть некоторые подробности, но я думаю, что это действительно ключевой момент, о котором люди должны знать.
Кристофер Хантер