![是否可以为 Linux 可执行文件提供任意扩展名?](https://linux22.com/image/1427691/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E4%B8%BA%20Linux%20%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6%E6%8F%90%E4%BE%9B%E4%BB%BB%E6%84%8F%E6%89%A9%E5%B1%95%E5%90%8D%EF%BC%9F.png)
我想知道是否可以对 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
是的,只要它是一个文本文件并且标记为可执行文件,任何扩展名或无扩展名都可以。
如果使用#!
加上所需的解释器作为第一行,这将覆盖默认的脚本解释器。