任何设备在Linux下面都是文件, 不仅如此,连数据沟通的接口也有专属的文件在负责~所以,你会了解到,Linux的文件种类真的很多~ 除了前面提到的一般文件(-)与目录文件(d)之外,还有哪些种类的文件呢?
文件种类:
我们在刚刚提到使用“ls -l”观察到第一栏那十个字符中,第一个字符为文件的类型。 除了常见的一般文件(-)与目录文件(d)之外,还有哪些种类的文件类型呢?
正规文件(regular file ): 就是一般我们在进行存取的类型的文件,在由 ls -al 所显示出来的属性方面,第一个字符为 [ - ],例如 [-rwxrwxrwx ]。另外,依照文件的内容,又大略可以分为:
纯文本文件(ASCII):这是Linux系统中最多的一种文件类型, 称为纯文本文件是因为内容为我们人类可以直接读到的数据,例如数字、字母等等。 几乎只要我们可以用来做为设置的文件都属于这一种文件类型。 举例来说,你可以下达“ cat~/.bashrc ”就可以看到该文件的内容。 (cat 是将一个文件内容读出来的指令)
二进制档(binary):Linux当中的可可执行文件(scripts, 文字体批处理文件不算)就是这种格式,举例说,指令cat就是一个binary file。
数据格式文件(data):有些程序在运行的过程当中会读取某些特定格式的文件,那些特定格式的文件可以被称为数据文件 (data file)。举例来说,我们的Linux在使用者登陆时,都会将登录的数据记录在 /var/log/wtmp那个文件内,该文件是一个data file,他能够通过last这个指令读出来! 但是使用cat时,会读出乱码,因为他是属于一种特殊格式的文件。
目录(directory): 就是目录,第一个属性为 [ d ],例如 [drwxrwxrwx]。
链接文件(link): 就是类似Windows系统下面的捷径。 第一个属性为 [ l ](英文L的小写),例如 [lrwxrwxrwx] ;
设备与设备文件(device): 与系统周边及储存等相关的一些文件, 通常都集中在/dev这个目录之下!通常又分为两种:
区块(block)设备文件 :就是一些储存数据, 以提供系统随机存取的周边设备,举例来说,硬盘与软盘等就是。 你可以随机的在硬盘的不同区块读写,这种设备就是区块设备。你可以自行查一下/dev/sda看看, 会发现第一个属性为[ b ]。
字符(character)设备文件:亦即是一些序列埠的周边设备, 例如键盘、鼠标等等!这些设备的特色就是“一次性读取”的,不能够截断输出。 举例来说,你不可能让鼠标“跳到”另一个画面,而是“连续性滑动”到另一个地方啊!第一个属性为 [ c ]。
数据接口文件(sockets): 既然被称为数据接口文件, 想当然尔,这种类型的文件通常被用在网络上的数据承接了。我们可以启动一个程序来监听用户端的要求, 而用户端就可以通过这个socket来进行数据的沟通了。第一个属性为 [ s ], 最常在/run或/tmp这些个目录中看到这种文件类型了。
数据输送档(FIFO, pipe): FIFO也是一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题。 FIFO是first-in-first-out的缩写。第一个属性为[p] 。
除了设备文件是我们系统中很重要的文件,最好不要随意修改之外,另一个比较有趣的文件就是链接文件。如果你常常将应用程序捉到桌面来的话,你就应该知道在 Windows下面有所谓的“捷径”。同样的,你可以将 linux下的链接文件简单的视为一个文件或目录的捷径。
Linux文件扩展名:
Linux的文件是没有所谓“扩展名”的,一个Linux文件能不能被执行,与他的第一栏的十个属性有关, 与文件名根本一点关系也没有。这个观念跟Windows的情况不相同。在Windows下面, 能被执行的文件扩展名通常是 .com .exe .bat等等,而在Linux下面,只要你的权限当中具有x的话,例如[ -rwxr-xr-x ] 即代表这个文件具有可以被执行的能力。
Tips 具有“可执行的权限”以及“具有可执行的程序码”是两回事!在 Linux 下面,你可以让一个文本文件,例如我们之前写的 text.txt 具有“可执行的权限” (加入 x 权限即可), 但是这个文件明显的无法执行,因为他不具备可执行的程序码!而如果你将上面提到的 cat 这个可以执行的指令,将他的 x 拿掉,那么 cat 将无法被你执行!
不过,可以被执行跟可以执行成功是不一样的。举例来说,在root主文件夹下的 initial-setupks.cfg 是一个纯文本文件,如果经由修改权限成为 -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下面,使用传统的Ext2/Ext3/Ext4文件系统以及近来被 CentOS 7 当作默认文件系统的xfs 而言,针对文件的文件名长度限制为:
单一文件或目录的最大容许文件名为 255Bytes,以一个 ASCII 英文占用一个 Bytes 来说,则大约可达 255 个字符长度。若是以每个中文字占用 2Bytes 来说, 最大文件名就是大约在 128 个中文字。
Linux文件名称的限制:
由于Linux在命令行下的一些指令操作关系,一般来说,你在设置Linux下面的文件名称时,最好可以避免一些特殊字符比较好!例如下面这些:
? > < ; & ! [ ] | \ ' " ` ( ) { }
因为这些符号在命令行下,是有特殊意义的!另外,文件名称的开头为小数点“.”时, 代表这个文件为“隐藏文件”,而且避免文件文件名的开头以-或+来命名。