文件类型和文件名是两个不同的概念。通过一般应用程序创建的文件,比如file.txt、file.tar.gz ,这些虽然要用不同的程序来打开,但放在Linux文件类型中,大多是常规文件(也被称为普通文件)。
一. 文件类型
常见的Linux文件类型有:普通文件、目录文件、字符设备文件、块设备文件、符号链接文件等。
1. 普通文件
我们用ls -lh
来查看某个文件的属性,可以看到有类似-rwxrwxrwx,值得注意的是第一个符号是 - ,这样的文件在Linux中就是普通文件。这些文件一般是用一些相关的应用程序创建,比如图像工具、文档工具、归档工具… …. 或 cp工具等,用rm删除这类文件。依照文件内容,普通文件大致可分为:
纯文本文件(ASCII)
这是Linux系统中最多的一种文件类型,其内容为我们人类可直接读取的数据,例如数字、字母等,几乎所有设定的文件都属于这种文件类型。例如,你可以用cat ~/.bashrc
查看该文件内容。
二进制文件(binary)
Linux系统仅识别二进制文件(binary file),可执行文件(scripts, 文字型批处理文件不算)就是这种格式的文件,cat就是一个binary file。
数据格式文件(data)
在运行的过程中,有些程序会读取某些特定格式的文件,这被称为数据文件 (data file)。举例来说,我们在登录Linux时,系统会将登录的数据记录在 /var/log/wtmp,该文件是一个data file,我们通过last读出来。但是使用cat时,会出现乱码,这是因为它是一种特殊格式的文件。
2. 目录文件
当我们在某个目录下执行ls -l
,可以看到类似drwxr-xr-x的文件,这就是目录,它的第一个字符是d。我们用mkdir 创建目录 ,用cp复制目录,用rm或rmdir删除目录。
3. 字符设备或块设备文件
当进入/dev目录,列出文件:
# ls -al /dev/tty
crw-rw-rw- 1 root tty 5, 0 11-03 15:11 /dev/tty
# ls -la /dev/sda1
brw-r----- 1 root disk 8, 1 11-03 07:11 /dev/sda1
我们看到/dev/tty的属性是 crw-rw-rw- ,注意前面第一个字符是 c ,这表示字符设备文件。比如猫等串口设备。我们看到 /dev/sda1 的属性是 brw-r—– ,注意前面的第一个字符是b,这表示块设备,比如硬盘,光驱等设备。
这个种类的文件,是用mknode来创建,用rm来删除。目前在最新的Linux发行版本中,我们一般不用自己来创建设备文件,因为这些文件是和内核相关联的。
与系统周边及储存相关的一些文件,通常都集中在/dev下,分为两种:
区块(block)设备文件
提供系统随机存取的接口设备,如硬盘、软盘等。你可以随机地在硬盘的不同区块读写,这种装置就是组设备。你可以用`ls -l
查看/dev/sda下的文件,会发现第一个属性为[b]。
字符(character)设备文件:
即一些串行端口的接口设备, 例如键盘、鼠标等。这些设备的特点是一次性读取,不能截断输出。举例来说,你不可能让鼠标跳到另一个画面,而是滑动到另一个地方。你可以用`ls -l
查看/dev/sda下的文件,会发现第一个属性为[c]。
4. 数据接口文件(sockets)
数据接口文件(或者:套接字文件),这类文件通常被用于网络数据的承接。我们可以启动一个程序来监听客户端,通过socket,客户端可以进行数据交换。在/var/run目录下,我们看到这种文件类型,它的第一个属性为 [ s ]
当我们启动MySQL服务时,会产生一个mysql.sock文件。
# ls -lh /var/lib/mysql/mysql.sock
srwxrwxrwx 1 mysql mysql 0 04-19 11:12 /var/lib/mysql/mysql.sock
它的第一个字符是 s。
5. 符号链接文件
当我们查看文件属性时,会看到类似 lrwxrwxrwx的属性,属性的第一个字符是l,这类文件是链接文件。通过ln -s 源文件 新文件
。软链接文件与Windows操作系统中的快捷方式有点相似。
# ls -lh log2012.log
-rw-r--r-- 1 root root 296K 11-13 06:03 log2012.log
# ln -s log2012.log linklog.log
# ls -lh *.log
lrwxrwxrwx 1 root root 11 11-22 06:58 linklog.log -> log2012.log
-rw-r--r-- 1 root root 296K 11-13 06:03 log2012.log
6. 数据输送文件(FIFO,pipe)
FIFO是一种特殊的文件类型,它主要解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out的缩写,第一个属性为[p] 。
二. 文件扩展名
1. 扩展名类型
通常我们会以适当的扩展名来表示该文件是什么种类的。底下有数种常用的扩展名:
*.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系统中却无法执行,可能文件的属性就被改变了。
2. 文件名的长度限制
在Linux底下,使用预设的Ext2/Ext3文件系统时,针对文件名长度限制为:
单一文件或目录的最大容许文件名为 255 个字符
包含完整路径名称及目录 (/) 之完整档名为 4096 个字符
3. 文件名的字符限制
一般而言,你在设定Linux底下的文件名时, 最好避免一些特殊的字符,如下:
* ? > < ; & ! [ ] | \ ' " ` ( ) { }
因为在CMD下,这些符号是有特殊意义的。另外,文件名以小数点“.”开头时,代表这个文件为隐藏文件。由于执行命令时,常常会使用到-option之类的选项, 所以文件最好避免以 - 或 + 开头。