В чем разница между "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.