是否可以为 Linux 可执行文件提供任意扩展名?

是否可以为 Linux 可执行文件提供任意扩展名?

我想知道是否可以对 Linux 可执行文件使用不同的扩展名,而不是使用“.sh”或“.o”扩展名。

答案1

是的,您可以使用任何您喜欢的。

在 *nix 系统上,扩展名无关紧要。对于二进制文件(如已编译的 C 程序),程序将自动执行。对于可执行文本文件,重要的是顶部的 shebang 行:

#!/bin/bash

例如,这会告诉 shell 使用 Bash 来解释该文件。

当然,扩展对于图形会话仍然相关。

答案2

与 Windows 不同,Linux(和其他类 Unix 操作系统)使用神奇数字区分不同的文件类型,因此不关心文件扩展名。

神奇数字(有时文件签名) 是一种与数据库进行比较以确定文件类型的模式。

您可以使用以下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

答案3

是的,只要它是一个文本文件并且标记为可执行文件,任何扩展名或无扩展名都可以。

如果使用#!加上所需的解释器作为第一行,这将覆盖默认的脚本解释器。

相关内容