Widziałem to pytanie na tej stronie, co skłoniło mnie do zadania tego pytania. Chcę wiedzieć w Unixie, jaka jest różnica między plikiem wykonywalnym a skryptem powłoki?
źródło
Widziałem to pytanie na tej stronie, co skłoniło mnie do zadania tego pytania. Chcę wiedzieć w Unixie, jaka jest różnica między plikiem wykonywalnym a skryptem powłoki?
Plik wykonywalny odnosi się do dowolnego pliku z ustawionym zestawem bitów, który można wykonać (nawet jeśli występują błędy w rzeczywistym uruchomieniu programu).
Skrypt powłoki to określony typ pliku wykonywalnego, który ma być interpretowany przez powłokę za pomocą #!
dyrektywy w celu określenia interpretera.
Skrypt jest plikiem, który:
Shell skrypt jest skryptem, którego interpreter jest powłoka . W świecie unix „shell” odnosi się do rodziny powłok podobnych do powłoki Bourne'a ; nowoczesne takie muszle (ash, bash, ksh, zsh,…) są zgodne ze standardem powłoki POSIX . Mówiąc bardziej ogólnie, słowo „shell” może obejmować inne interpretatory poleceń, takie jak csh, tcsh, fish,…
Plik wykonywalny to dowolny plik, który można wykonać. Aby można go było skutecznie wykonać, plik musi mieć dwie właściwości:
ls -l
: x
znak musi znajdować się w kolumnie uprawnień.Format pliku musi być taki, który system rozpoznaje jako wykonywalny. Formaty plików wykonywalnych można podzielić na kilka kategorii:
#!
po których następuje ścieżka do pliku. Aby wykonać taki plik, jądro wykonuje program interpretera i przekazuje mu ścieżkę do skryptu jako argument.Pamiętaj, że bycie plikiem wykonywalnym zależy od systemu. Na przykład plik binarny systemu Linux amd64 jest wykonywalny w systemie Linux amd64, ale nie w systemie 32-bitowym. Plik binarny dla Androida nie jest wykonywalny podczas normalnej instalacji Linuksa. Plik wykonywalny systemu Windows jest wykonywalny tylko w systemie Linux, jeśli Wine jest obecny. Skrypt, który zaczyna się od, #!/usr/local/bin/ruby
jest wykonywalny tylko wtedy, gdy znajduje się program /usr/local/bin/ruby
.
Skrypt powłoki zwykle jest wykonywalny. Ale może nie być wykonywalny, jeśli nie masz uprawnień do jego wykonania. Nadal możesz go zinterpretować, przekazując go jawnie tłumaczowi (np. bash /path/to/script
) - „czy to zinterpretowano” to fantazyjny sposób powiedzenia „wykonać”.
Skrypt powłoki:
Skrypt powłoki to seria poleceń, które będą interpretowane przez powłokę (zwykle sh lub powłoka kompatybilna z sh, czasami inna).
Nazwa skryptu może, ale NIE musi, kończyć się na „.sh”, „.bash” lub „.csh” itp. (Dając wskazówkę co do powłoki, którą powinien uruchomić).
Dla jasności założę: że nazwa skryptu to script
, a powłoka, w której powinien zostać uruchomiony, to bash
.
Typowy sposób uruchomienia go w powłoce to: bash /absolute/path/to/the/script
lub bash ./relative/path/to/the/script
. W ten sposób nie trzeba ustawiać bitu wykonywalnego, ponieważ jest on odczytywany tylko przez bash, który następnie wykonuje zawartość.
Można go również ustawić + x (plik wykonywalny), aby umożliwić uruchomienie go bezpośrednio z bieżącej sesji powłoki za pomocą: / absolut / ścieżka / do / skryptu (lub ./relative/path/to/the/script). Uwaga: domyślnie po uruchomieniu w ten sposób jest uruchamiany przez wpisaną powłokę lub przez powłokę posix (zachowanie zależy od systemu operacyjnego), więc może to nie być powłoka, z której ma ona być uruchamiana. Dlatego możesz (i powinieneś) określić jako pierwszy wiersz skryptu: #! / Path / to / good / shell, który wskazuje systemowi, że ten skrypt powinien zostać uruchomiony przez / path / to / good / shell.
plik wykonywalny:
Plik wykonywalny to plik, który ma ustawiony bit „x” dla użytkownika / grup, dla którego ma zostać uruchomiony. Zazwyczaj może to być „binarny” lub skrypt.
Wskazówka: file /some/file
może powiedzieć więcej o zawartości pliku. Spróbuj file /usr/bin/bash
lub file /etc/profile
zobacz kilka przykładów.