文件
Linux几乎将所有的资源当做文件来处理。除了常见的可以写入字节流的普通文件,还包括设备文件(在/dev目录下),内存映像文件(在/proc目录下)等等。
现代操作系统依靠特殊的硬件特性来禁止用户进程直接访问底层硬件部分。通常CPU有至少有两种执行模式: 用户程序的非特权模式和内核的特权模式。Linux将他们分别称为用户态(user mode)和内核态(kernel mode)。所以对于大多数文件操作都需要通过系统调用来实现。
Linux文件分类
- 目录(directory)
- 普通文件(regular file)
- 软链接(soft link,也叫symbolic link)
- 面向块的设备文件(block-oriented device file)
- 面向字符的设备文件(character-oriented device file)
- 套接字(socket)
硬链接和软链接
- 创建硬链接的命令如下:
// 创建一个由p1标识的文件的硬链接p2
// 索引节点相同
ln p1 p2
硬链接相当于一个直接指向文件实体的指针。
限制:
- 不能给目录创建硬链接。
- p1和p2所在分区的文件系统必须相同。
- 创建软链接的命令如下:
// 创建一个由p1标识的文件的软链接p2
// p2索引节点指向p1
ln -s p1 p2
软连接相当于一个指向硬链接的指针。软链接不存在硬链接的限制。
当前工作目录
每一个linux进程都有一个当前工作目录,它属于进程执行上下文(excution context)的一部分。当程序对文件进行操作时,如果使用的是相对路径,则会在当前工作目录下查找该文件。
文件的元数据---索引节点
在Linux中,除了设备文件和特殊的文件系统外,文件由字节序列组成,不包含控制字符,比如文件长度,文件结束字符(end-of-file,EOF)等。
文件系统处理文件所需要的信息包含在一个称为索引节点(inode)的结构中,每个文件都有对应一个索引节点(inode),文件系统使用索引节点(inode)来标识文件。
Posix标准规定索引节点(inode)至少包括以下内容:
文件类型
以字节为单位文件大小
文件所属设备标识符
与文件相关的硬链接个数(Linux中,当文件的硬链接个数为0时,文件将被删除)
在文件系统中标识文件的索引节点号
文件所属用户的uid
文件所属组的gid
几个时间戳,索引节点状态改变时间,文件最后访问时间,文件最后修改时间
访问权限和文件模式
访问权限和文件模式
- r:读取权限
- w:写入权限
- x:执行权限
- suid
- sgid
- sticky