W jaki sposób bash sprawia, że ​​plik jest wykonywalny?

0

Wiem to, kiedy uruchamiam polecenie

chmod +x filename

bash sprawi, że mój plik będzie wykonywalny. Co dokładnie dzieje się z architekturą pliku, aby zmienić go na plik wykonywalny? tzn. skąd jądro wie, że ten plik jest wykonywalny?

Po prostu próbuję ćwiczyć mięśnie nerd.

StatGenGeek
źródło

Odpowiedzi:

6

„Architektura” pliku nie zmienia się - od Ciebie zależy, czy ma on prawidłowy format. Oznacza to, że plik musi już być poprawnym plikiem binarnym ELF, skryptem z prawidłowym #!nagłówkiem lub czymś innym, co rozpoznaje twoje jądro (np. A.out lub MZ / PE).

To, chmodco zostało, jest ustawione trochę w uprawnieniach pliku, informujących jądro, że użytkownik może wykonać ten plik. Może działać jak mała bariera bezpieczeństwa, a także zapobiegać pewnym rodzajom wypadków. (Należy pamiętać, że +xtutaj jest to skrót ugo+x; jest to trochę zezwolenie, podobnie jak odczyt / zapis).

Jeśli ustawisz + x na pliku, którego jądro nie rozpoznaje, po prostu zwróci kod błędu z wywołania execsystemowego. (Zauważ, że niektóre powłoki mają specjalnego traktowania tego - jeśli jądro zgłaszane „nierozpoznany format”, powłoka spróbuje zinterpretować plik jako skrypt wewnętrznie , jak to jak shellscripts pracował zanim #!został wymyślony ).

grawitacja
źródło
„Jeśli ustawisz +xplik, którego jądro nie rozpoznaje, po prostu zwróci kod błędu z wywołania execsystemowego” - nie jest oczywiste, kiedy ten błąd zostanie zwrócony. To kiedy próbujesz wykonać, a nie kiedy chmod; dobrze?
Kamil Maciorowski
Cóż, nie może odwoływać się do wykonania polecenia „chmod”, ponieważ dzieje się to na długo przed czymkolwiek związanym z trybem (w rzeczywistości operacja jądra to i tak wywołanie systemowe chmod ). Tak, że pozostawia (próba) wykonanie danego pliku.
grawity
To ma sens, dziękuję. Przepraszam za źle sformułowane pytanie. Nie mogłem wymyślić, jak inaczej opisać to, o co prosiłem. Chciałem wiedzieć, że „ustawić trochę uprawnień pliku”.
StatGenGeek
0

Zawartość pliku w ogóle się nie zmienia. Systemy plików zaprojektowane dla typowego Uniksa będą obsługiwały przechowywanie informacji o każdym pliku. Jest to często nazywane „meta danymi” pliku.

Dlatego nie uzyskasz podobnych wyników w przypadku niektórych systemów plików. Mianowicie FAT nie ma wbudowanej przestrzeni przeznaczonej do przechowywania danych związanych z uprawnieniami Unixa, a Unix zwykle omija to, używając specjalnego parametru podczas montowania takiego woluminu systemu plików. Tak więc zazwyczaj wszystkie pliki na dysku FAT mają takie same uprawnienia, jak określono podczas instalacji. (Spodziewałbym się podobnego zachowania w przypadku innych systemów plików, takich jak ISO9660, chociaż prawdopodobnie jest to zwykle nie do zniesienia). W przypadku woluminów zamontowanych w ten sposób użycie chmod +xnie spowoduje zmiany niczego.

Krótko mówiąc, sposób, w jaki jądro to wie, polega na sprawdzeniu sterownika systemu plików. W typowych systemach plików zaprojektowanych dla systemu uniksowego sterownik obsługuje odczyt lokalizacji, w których przechowywane są uprawnienia w stylu uniksowym.

chmod po prostu zmienia te miejsca na dysku.

TOOGAM
źródło
Naprawdę wcale nie zgadzam się z odpowiedzią grawitacji . Myślę, że odpowiedź grawity skupia się bardziej na tym, jak jądro interpretuje dane pliku po tym, jak system operacyjny ustali, że plik powinien być traktowany jako plik wykonywalny, podczas gdy moja odpowiedź skupia się bardziej na tym, co robi chmod. Odpowiadam więc na „How bash” (pytanie tytułowe)… i „What… wykonywalny”, a jednocześnie pozwalam grawitacji odpowiedzieć na pytanie „How the kernel” ...
TOOGAM