Jak wspomniano w poprzednich odpowiedziach, kolorowanie ma wskazywać, czy pliki są uznawane za pliki wykonywalne, czy nie.
Uprawnienie do „wykonywania” (= bit) w Linuksie i większości innych Uniksów ma jedno znaczenie dla plików, a drugie dla katalogów.
W przypadku katalogów, jeśli masz do niego uprawnienia, możesz zobaczyć jego zawartość. Jeśli tego nie zrobisz, nie możesz cd do katalogu, ani nie możesz wyświetlić w nim plików, nawet jeśli masz zarówno dostęp do odczytu i zapisu do katalogu.
W przypadku zwykłych plików (w przeciwieństwie do plików urządzeń i innych specjalnych typów plików uniksowych) bit wykonania oznacza, że jeśli użyjesz nazwy pliku w wierszu poleceń, O / S (a ściślej: shell) spróbuje „wykonać” lub uruchomić plik jako polecenie. I odwrotnie, jeśli nie masz uprawnień do wykonania pliku, nie możesz go uruchomić z wiersza poleceń.
Tak więc, jeśli na przykład usuniesz uprawnienie x od wszystkich użytkowników w pliku / bin / cat (które jest poleceniem uniksowym), ty sam lub ktokolwiek inny, a dowolny program, który spróbuje użyć polecenia „cat”, zawiedzie.
Są to wtedy polecenia systemu operacyjnego, takie jak „cat” i „grep”, które zwykle mają pliki wykonywalne w / * / bin / directories - / bin, / usr / bin, / sbin, / usr / sbin itp.
I wtedy mogą istnieć nieskompilowane, interpretowane skrypty, które są albo napisane w jakimś języku programowania, takim jak Python lub skrypty powłoki (w zasadzie polecenia, które piszesz jakby z linii poleceń podczas sshing na serwer).
Teraz, gdy ustawisz bit wykonania na pliku skryptu (na przykład plik foobar) i spróbujesz wykonać go za pomocą powłoki: „./foobar”, powłoka próbuje przeanalizować plik i znaleźć odpowiedni program do przekazania skryptu do.
Robi to powłoka, próbując odczytać pierwszy wiersz pliku i znaleźć notację „shebang”, który program ma uruchomić.
Więc jeśli twój foobar był plikiem tekstowym z pierwszym wierszem w ten sposób:
#!/usr/bin/python
Następnie powłoka spróbuje wykonać polecenie: /usr/bin/python foobar
w zasadzie wywołując interpreter Pythona i przekazując mu nazwę pliku foobar jako skrypt Pythona.
Jeśli powłoka nie znajdzie takiej pierwszej linii w twoim pliku, wówczas spróbuje wykonać foobar, tak jakby zawierał polecenia powłoki.
Jeśli plik z bitem wykonywalnym nie zawiera prawidłowych poleceń powłoki, powłoka po prostu narzeka.
Tak by się stało, gdybyś miał pliki TTF z ustawionym bitem exec i próbował uruchomić go z wiersza poleceń:
$./FreeMonoOblique.ttf
-bash: ./FreeMonoOblique.ttf: cannot execute binary file: Exec format error
$
Tak więc w przypadku czcionek jest to prawdopodobnie fajniejsze, jeśli bit exec nie jest ustawiony, ale tak naprawdę niczego nie zmienia.
PS Kilka dodatkowych informacji. Jeśli usuniesz bit wykonania z jakiegoś polecenia lub skryptu, może on zostać przekazany do dowolnego innego programu jako argument. Jeśli ten inny program wie, jak wykonać polecenie, usunięcie bitu exec naprawdę nie miało znaczenia. Na przykład, foobarowy skrypt Python nadal byłby uruchamiany przez interpreter Pythona, gdybyś po prostu zrobił to z linii poleceń:
$python foobar
zamiast
$./foobar
To samo z przykładem poleceń systemowych, takich jak „cat”. Jeśli usuniesz bit exec z „cat”, nadal możesz przekazać go do nowej instancji powłoki w celu wykonania:
$sh -c 'cat myfile'
będzie działać, nawet jeśli usunąłeś bit exec z cat i
$cat myfile
nie.