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