2

Я хочу знать, могу ли я использовать различные расширения для исполняемых файлов Linux вместо использования ".sh" или ".o".

3 ответа3

4

Да, вы можете использовать все что угодно.

Расширения не имеют значения в * nix системах. Для двоичных файлов (например, скомпилированной программы на C) программа будет выполняться автоматически. Для исполняемых текстовых плиток важна строка Шебанга вверху:

#!/bin/bash

Это говорит оболочке интерпретировать файл с Bash, например.

Конечно, расширения по-прежнему актуальны для графических сессий.

1

В отличие от Windows, Linux (и другие Unix-подобные ОС) используют Magic Numbers для различения файлов разных типов и, следовательно, не заботятся о расширении файла.

Магическое число (иногда подпись файла) - это шаблон, который сравнивается с базой данных для определения типа файла.

Вы можете использовать команду file чтобы определить тип файла:

$ 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

или же:

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

Если вы переименуете файл и измените его расширение, он не уловит его:

$ 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
0

Да, любое расширение или ничего не будет работать, при условии, что это текстовый файл и помечен как исполняемый.

Если вы используете #! плюс требуемый интерпретатор в качестве первой строки, это переопределит интерпретатор скрипта по умолчанию.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .