Czy można podać jakieś rozszerzenie pliku wykonywalnego linux?

2

Chcę wiedzieć, czy mogę używać różnych rozszerzeń plików wykonywalnych systemu Linux zamiast używać rozszerzenia „.sh” lub „.o”.

Gowthaman15
źródło

Odpowiedzi:

4

Tak, możesz użyć wszystkiego, co chcesz.

Rozszerzenia nie mają znaczenia w systemach * nix. W przypadku plików binarnych (takich jak skompilowany program w języku C) program sam się uruchomi. W przypadku wykonywalnych kafelków tekstowych liczy się linia shebang u góry:

#!/bin/bash

To mówi powłoce, aby na przykład zinterpretowała plik za pomocą Bash.

Oczywiście rozszerzenia są nadal istotne dla sesji graficznych.

slhck
źródło
Przepraszam, że powielam twoją odpowiedź: Twoja dotarła tak jak ja opublikowałem moją.
AFH
Nie ma to również znaczenia dla skompilowanych programów. Jest to po prostu część nazwy pliku. Przykład: <pre> ropucha: / home / hennes> który bash / usr / local / bin / bash toad: / home / hennes> cp which bash. ropucha: / home / hennes> ls -l ./bash -rwx ------ 1 użytkowników hennes 745832 21 października 14:07 ./bash ropucha: / home / hennes> mv bash bash.some_extension ropucha: / home / hennes> ./ bash.some </pre> Szczęśliwie uruchamia plik bash mimo zmiany nazwy
Hennes
@Hennes Racja, dlatego powiedziałem „O ile nie jest to plik binarny ...” (wstaw: „w którym to przypadku jest to całkowicie nieistotne”) „liczy się linia shebang” .
slhck
Przeczytałem to jako „chyba że jest to plik binarny, w którym przypadku rozszerzenia mają znaczenie”). Odmienna interpretacja tego samego zdania, prawdopodobnie spowodowana przez obcego czytelnika (aka mnie).
Hennes
1

W przeciwieństwie do Windows, Linux (i inne systemy uniksopodobne) używa Magic Numbers do rozróżniania różnych typów plików, w związku z czym nie dba o rozszerzenie pliku.

Magiczna liczba (czasami złożyć podpis ) to wzór, który jest porównywany z bazą danych w celu wypracowania typ pliku.

Możesz użyć filepolecenia, aby określić typ pliku:

$ file /usr/bin/bash
/usr/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x2af417cdc1684a2ab609fcab847dfee8cc643713, stripped

lub:

$ file /etc/init.d/network
/etc/init.d/network: Bourne-Again shell script, ASCII text executable

Jeśli zmienisz nazwę pliku i zmienisz jego rozszerzenie, nie wyłapie go:

$ cp /etc/init.d/network ~/network.jpg
$ file ~/network.jpg
/home/gareth/network.jpg: Bourne-Again shell script, ASCII text executable
$ mv ~/network.jpg ~/network.exe
$ file ~/network.exe
/home/gareth/network.exe: Bourne-Again shell script, ASCII text executable
garethTheRed
źródło
0

Tak, każde rozszerzenie lub żadne nie będzie działać, pod warunkiem, że jest to plik tekstowy i oznaczony jako plik wykonywalny.

Jeśli użyjesz #!plus wymaganego interpretera jako pierwszego wiersza, zastąpi to domyślny interpreter skryptów.

AFH
źródło
To nie musi być plik tekstowy. Może być również binarny. W takim przypadku będzie to oczywiście samo-wykonujące się.
slhck
Zupełnie słusznie: błędnie odczytałem pytanie, mówiąc o skryptach, które ostatnio mnie zajmują. Pliki binarne mają swój „magiczny numer” identyfikujący typ pliku. Rozszerzenia dotyczą głównie plików udostępnianych innym systemom operacyjnym, choć niektóre są domyślnie generowane (np .o.).
AFH