Próbuję zainstalować VMware Workstation w moim Ubuntu 12.04.2 LTS. Jeśli wykonam następujące polecenie:
sudo ./VMware-Workstation-9.0.1-894247.x86_64.bundle
kończy się natychmiast i instalacja nigdy się nie rozpoczyna.
Jeśli wykonam to polecenie:
sudo sh ./VMware-Workstation-9.0.1-894247.x86_64.bundle
Instalator można uruchomić pomyślnie.
Dlaczego to robi różnicę?
Odpowiedzi:
Jeśli plik nie jest oznaczony jako wykonywalny, musisz wywołać interpreter powłoki poleceń, aby go wykonać.
Przykłady:
sudo sh foo
otworzy foo zsh
użyciem uprawnień sudo .sudo bash foo
otworzy foo zbash
użyciem uprawnień sudo .sh foo
otworzy foo zsh
wykorzystaniem uprawnień użytkownika.bash foo
otworzy foo zbash
wykorzystaniem uprawnień użytkownika.Jeśli zaznaczysz plik jako wykonywalny, wystarczy go wywołać,
./foo
a ponieważ jest on oznaczony jako taki, zostanie odczytany za pomocą zdefiniowanego interpretera powłoki poleceń i wykonany bez potrzeby jego definiowania.ls -F
wyświetli listę plików i oznaczy pliki wykonywalne za pomocą * .Aby włączyć bit wykonania dla pliku (i uczynić go wykonalnym jako takim), użyj polecenia
chmod +x foo
.W twoim przypadku, aby plik, którego używasz, byłby wykonywalny, użyłbyś wtedy polecenia
chmod +x VMware-Workstation-9.0.1-894247.x86_64.bundle
i wtedy będziesz mógł uruchomić go z dowolnym z nich
sudo sh ./VMware-Workstation-9.0.1-894247.x86_64.bundle
lub po prostu piszącsudo ./VMware-Workstation-9.0.1-894247.x86_64.bundle
.źródło
Sh to powłoka do uruchamiania poleceń, więc wykonywanie sh za pomocą sudo daje powłokę root. Oznacza to, że wszystkie polecenia w tej powłoce są wykonywane jako root. Domyślam się, że skrypt wykonuje coś innego, co wymaga rootowania, jednak gdy używasz tylko sudo, a nie sudo sh, coś innego zostanie wykonane jako zwykły użytkownik, jednak w sh wszystko zostanie wykonane jako root.
źródło