Linux文件种类与扩展名
在Linux环境下,任何设备都是文件(这是个很重要的概念)。比如,数据通信的接口就有有专属的文件在负责。通常计算机上会有各种种类的设备,还有操作系统产生的各种文件,所以linux下的文件种类特别多。下面笔者对它们进行介绍。
查看文件类型
首先学习一下如何查看文件的类型,在文件所在的目录下输入如下命令:
ls -al
笔者在自己电脑上的输出如下:
ls -al
执行后会输出文件的基本属性。
其中第一列的第一个字符代表这个文件的类型,表示该文件是“目录文件,普通文件或链接文件等”。
d
代表是目录文件-
代表是普通文件I
代表是链接文件b
代表设备文件中可供存储的接口设备c
代表设备文件中的串行端口设备,例如键盘,鼠标
文件种类
普通文件(regular file )
普通文件(regular file) 就是一般我们在进行存取的类型的文件,另外,依照文件的内容,又大略可以分为:
-
纯文本文件(ASCII):这是Linux系统中最多的一种文件类型, 称为纯文本文件是因为内容为我们人类可以直接读到的数据,例如数字、字母等等。 几乎只要我们可以用来做为设定的文件都属于这一种文件类型。 举例来说,你可以下达『 cat ~/.bashrc 』就可以看到该文件的内容。 (cat 是将一个文件内容读出来的指令)
-
二进制文件(binary): 操作系统其实仅认识且可以执行二进制文件(binary file)吧?没错~ 你的Linux当中的可执行文件(scripts, 文字型批处理文件不算)就是这种格式的啦~ 举例来说,刚刚下达的指令cat就是一个binary file。
-
数据格式文件(data): 有些程序在运作的过程当中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件 (data file)。举例来说,我们的Linux在使用者登入时,都会将登录的数据记录在 /var/log/wtmp那个文件内,该文件是一个data file,他能够透过last这个指令读出来! 但是使用cat时,会读出乱码~因为它是属于一种特殊格式的文件。
目录(directory)
- 就是文件所在的目录~第一列属性第一个字符为
d
,例如 上面ls -al
执行后显示的文件的基本属性drwxr-xr-x
链接文件(link)
- 就是类似Windows系统底下的快捷方式啦! 第一个属性第一个字符为
l
(英文L的小写),例如lrwxr-xr-x
。
设备与设备文件(device)
与系统周边及储存等相关的一些文件, 通常都集中在/dev这个目录之下!通常又分为两种:
-
块设备文件(block):就是一些储存数据, 以提供系统随机存取的接口设备,举例来说,硬盘与软盘等就是啦! 你可以随机的在硬盘的不同区块读写,这种装置就是成组设备啰!你可以自行查一下/dev/sda看看, 会发现第一个属性为[ b ]喔!
-
字符设备文件(character):亦即是一些串行端口的接口设备, 例如键盘、鼠标等等!这些设备的特色就是『一次性读取』的,不能够截断输出。 举例来说,你不可能让鼠标『跳到』另一个画面,而是『滑动』到另一个地方啊!第一个属性为 [ c ]。
数据接口文件(sockets):
- 既然被称为数据接口文件, 想当然尔,这种类型的文件通常被用在网络上的数据承接了。我们可以启动一个程序来监听客户端的要求, 而客户端就可以透过这个socket来进行数据的沟通了。第一个属性为 [ s ], 最常在/var/run这个目录中看到这种文件类型了。
数据输送文件(FIFO, pipe):
- FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。 FIFO是first-in-first-out的缩写。第一个属性为[p] 。
- 除了设备文件是我们系统中很重要的文件,最好不要随意修改之外(通常他也不会让你修改的啦!), 另一个比较有趣的文件就是连结档。如果你常常将应用程序捉到桌面来的话,你就应该知道在 Windows底下有所谓的『快捷方式』。同样的,你可以将 linux下的连结档简单的视为一个文件或目录的快捷方式。 至于socket与FIFO文件比较难理解,因为这两个咚咚与程序(process)比较有关系, 这个等到未来你了解process之后,再回来查阅吧!此外, 你也可以透过man fifo及man socket来查阅系统上的说明!
Linux文件扩展名:
基本上,Linux的文件是没有所谓的『扩展名』的,我们刚刚就谈过,一个Linux文件能不能被执行,与他的第一栏的十个属性有关, 与档名根本一点关系也没有。这个观念跟Windows的情况不相同喔!在Windows底下, 能被执行的文件扩展名通常是 .com .exe .bat等等,而在Linux底下,只要你的权限当中具有x的话,例如[ -rwx-r-xr-x ] 即代表这个文件可以被执行喔!
不过,可以被执行跟可以执行成功是不一样的~举例来说,在root家目录下的install.log 是一个纯文本档,如果经由修改权限成为 -rwxrwxrwx 后,这个文件能够真的执行成功吗? 当然不行~因为他的内容根本就没有可以执行的数据。所以说,这个x代表这个文件具有可执行的能力, 但是能不能执行成功,当然就得要看该文件的内容啰~
虽然如此,不过我们仍然希望可以藉由扩展名来了解该文件是什么东西,所以, 通常我们还是会以适当的扩展名来表示该文件是什么种类的。底下有数种常用的扩展名:
-
*.sh
: 脚本或批处理文件 (scripts),因为批处理文件为使用shell写成的,所以扩展名就编成 .sh ; -
*Z, *.tar, *.tar.gz, *.zip, *.tgz
: 经过打包的压缩文件。这是因为压缩软件分别为 gunzip, tar 等等的,由于不同的压缩软件,而取其相关的扩展名啰! -
*.html, *.php
:网页相关文件,分别代表 HTML 语法与 PHP 语法的网页文件啰! .html 的文件可使用网页浏览器来直接开启,至于 .php 的文件, 则可以透过 client 端的浏览器来 server 端浏览,以得到运算后的网页结果呢!
基本上,Linux系统上的文件名真的只是让你了解该文件可能的用途而已, 真正的执行与否仍然需要权限的规范才行!例如虽然有一个文件为可执行文件, 如常见的/bin/ls这个显示文件属性的指令,不过,如果这个文件的权限被修改成无法执行时, 那么ls就变成不能执行啰!
上述的这种问题最常发生在文件传送的过程中。例如你在网络上下载一个可执行文件,但是偏偏在你的 Linux系统中就是无法执行!呵呵!那么就是可能文件的属性被改变了!不要怀疑,从网络上传送到你的 Linux系统中,文件的属性与权限确实是会被改变的喔!
Linux文件长度限制:
在Linux底下,使用预设的Ext2/Ext3文件系统时,针对文件的档名长度限制为:
单一文件或目录的最大容许文件名为 255 个字符;
包含完整路径名称及目录 (/)放入完整文件为 4096 个字符。
是相当长的文件名喔!通常我们希望Linux的文件名可以一看就知道该文件在干嘛的, 所以档名通常是很长很长!而用惯了Windows的人可能会受不了,因为Linux文件名通常真的都很长。
Linux文件名的限制:
因为Linux通常是在命令行界面下操作的,所以由于一些指令操作的关系,会和一些特殊字符产生冲突。因此,你在设定Linux底下的文件名时, 最好可以避免一些特殊字符比较好!
例如底下这些:
*? > < ; & ! [ ] | \ ' " ` ( ) { }
因为这些符号在文字接口下,是有特殊意义的!另外,文件名的开头为小数点.
时, 代表这个文件为隐藏文件喔!同时,由于指令下达当中,常常会使用到 -option 之类的选项, 所以你最好也避免将文件档名的开头以 - 或 + 来命名啊。
参考资料
【1】鸟哥的Linux私房菜