Я хочу знать, могу ли я использовать различные расширения для исполняемых файлов Linux вместо использования ".sh" или ".o".
3 ответа
Да, вы можете использовать все что угодно.
Расширения не имеют значения в * nix системах. Для двоичных файлов (например, скомпилированной программы на C) программа будет выполняться автоматически. Для исполняемых текстовых плиток важна строка Шебанга вверху:
#!/bin/bash
Это говорит оболочке интерпретировать файл с Bash, например.
Конечно, расширения по-прежнему актуальны для графических сессий.
В отличие от 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
Да, любое расширение или ничего не будет работать, при условии, что это текстовый файл и помечен как исполняемый.
Если вы используете #!
плюс требуемый интерпретатор в качестве первой строки, это переопределит интерпретатор скрипта по умолчанию.