在Linux中文件的类型是通过文件权限的首位定义的,可以分为以下几类。
1.普通文件
普通文件包括源程序文件、脚本文件、可执行程序文件及各种数据文件。普通文件的文件类型标识位为"-",使用ls命令可以查看文件的类型,例如:
- #ls -l suple
- -rw-r--r-- 1 root root 540 07-23 08:31 suple
2.目录文件
目录实际上是一种特殊的文件。目录下可以包含文件和子目录。目录文件的类型标识位为"d",如下所示:
- #ls -l tmp
- drwxrwxrwt 21 root root 4096 07-25 22:49 tmp
3.套接字文件
套接字(socket)是用来进行网络通信的常用方法之一。Linux文件系统可以通过套接字文件实现网络通信。套接字的文件类型标识位为"s",例如:
- #ls -l x1
- srwx------ 2 root root 0 07-25 17:49 x1
4.命名管道
文件系统通过命名管道文件可以实现进程间的通信。命名管道的文件类型标识位为"p",例如:
- #ls -l p1
- prwx------ 2 root root 0 07-25 17:59 p1
5.设备文件
Linux系统将设备识别为特殊的文件进行处理。设备文件可以分为两类:字符设备和块设备。字符设备的文件类型标识位为"c",打印机、键盘等都属于字符设备。磁盘、磁带等都属于块设备,块设备的文件类型标识位为"b"。在系统的/dev目录下存放了大量的设备文件,例如字符终端tty1的设备文件为/dev/tty1。使用ls命令可以看到字符设备的首字符为"c",块设备的首字符为"b",如下所示:
- #ls -l /dev/tty1
- crw------- 1 root root 4, 1 07-25 05:44 tty1
- #ls -l /dev/sda1
- brw-r----- 1 root disk 8, 1 07-25 05:41 sda1
6.链接文件
为了使用、管理的方便和节省磁盘空间,Linux 允许一个物理文件有一个以上的逻辑名,即可以为一个文件创建一个链接文件,用来表示该文件的另一个名字。不同的链接文件可为之指定不同的访问权限,从而实现既可共享,又可安全控制的目的。
Linux文件系统中有两类链接文件:一类叫做硬链接,一类叫做符号链接。硬链接的文件类型标识位与被链接的文件相同。不带参数使用ln命令可以建立硬链接文件,例如对sysv文件建立硬链接的命令如下:
- # ls -il sysv
- 390162 -rw-r--r-- 1 root root 0 07-26 00:51 sysv
- # ln sysv syslink
- # ls -il sysv slink
- 390162 -rw-r--r-- 2 root root 0 07-26 00:51 slink
- 390162 -rw-r--r-- 2 root root 0 07-26 00:51 sysv
从本例中可以看出硬链接文件slink与被链接的文件sysv指向同一个i节点(节点编号390162),硬链接与被链接的文件具有相同的文件类型标识位"-",建立硬链接后,文件的链接数由1变为2。
实际上硬链接只是源文件的一个硬复制,它们在目录文件中的入口项指向的是同一个i节点。只有当硬链接的全部链接被删除时才能够释放此i节点。用户对这个文件所做的任何修改,所有的硬链接都可以同步看到。硬链接的文件必须在同一个文件系统中,目录不能建立硬链接。
建立符号连接可以使用带参数"-s"的ln命令,符号链接只是指定到真实文件的访问路径上,与源文件的i节点号不同。如果源文件被删除,符号链接就被损坏了。符号链接的文件类型标识位为"l"。例如为文件ftpuser建立符号链接fuser,命令如下所示:
- # ls -il ftpuser
- 390161 -rw-r--r-- 1 root root 0 07-26 01:17 ftpuser
- # ln -s ftpuser fuser
- # ls -il ftpuser fuser
- 390161 -rw-r--r-- 1 root root 0 07-26 01:17 ftpuser
- 390162 lrwxrwxrwx 1 root root 7 07-26 01:18 fuser -> ftpuser
- # rm ftpuser
- rm:是否删除 一般空文件 "ftpuser"? y
- # ls -il ftpuser fuser
- ls: ftpuser: 没有那个文件或目录
- 390162 lrwxrwxrwx 1 root root 7 07-26 01:18 fuser -> ftpuser
可以看到ftpuser与fuser的i节点号不同(ftpuser为390161,fuser为390162),fuser的文件类型标识位为"l"。源文件ftpuser被删除后,符号链接文件报错。
与硬链接不同,符号链接可以跨文件系统建立,并且可以指定到目录。硬链接与符号链接的区别如图6.3所示。
图6.3 硬链接与符号链接 |