背景:第一次听说Linux的文件后缀名跟文件类型无关时,有些惊讶,于是查阅了Linux的文件到底是什么,以及基于此的玩法。
首先,Linux在大的文件分类上,有7种,可见:Linux: Linux的文件类型及查看文件类型的方法 - 夜行过客 - 博客园
其中我们碰到最多的应该是,普通文件("-")和文件夹("d")。文件夹好理解,那么,问题是,普通文件是什么意思?
继续细分,普通文件大致能分3类:纯文本文件,二进制文件,数据文件。
什么叫纯文本文件?
简单地说,就是里面全是文本……当你
cat filename
时,显示在屏幕上的是正常文字,你可以理解为,就是windows下的txt文件
但二进制文件就不一样了,你cat出来就全是乱码,二进制文件是拿来执行的
./filename
且还需要执行权限(没有就chomd +x一下)
那既然如此,我们平常听到的“脚本”又是怎么回事呢?那些xx.sh xx.py是什么文件呢?
答案是,它们就是纯文本文件……
可纯文本文件不是记录文字的吗?为什么可执行?
因为你并不能像二进制文件一样,直接执行它们,你需要解释器(有时不需要是调用了系统默认解释器),如
python xx.py
bash xx.sh
zsh xx.txt
source xx.sh
解释器将这些纯文本翻译成计算机能懂的再执行,所以说,你如下玩,也没关系
python haha.sh
python xx.fuck
python what
python you.txt
bash haha.py
只要该文件内部的语法,是解释器能读懂的,有没有后缀,后缀是什么,不重要。(这种文件也叫脚本可执行文件,实际上就是能找到解释器的纯文本)
但有一个细节是,source并不是解释器,而是逐条执行该文本文件的内容的意思,执行时,还是调用默认解释器来做,一般是bash。source filename 跟 bash filename的区别在于source直接在本shell内执行,而bash是开一个子shell,在子shell内玩。
所以说,基于以上,我们就明白了:平常操纵的普通文件,大多要么就二进制直接可执行,要么就是一个纯文本,你要找解释器来执行或者把它变成二进制。
所以,我们就可以,自己写一堆指令到一个fuck.txt或者啥的纯文本里,source/bash一下,直接执行。
我就是这么写了ubuntu的环境配置脚本,装新的虚拟机/新机时,一键配环境,效率大大提升,后面没问题的话开源到github上。