现在的位置: 首页 > 综合 > 正文

Linux期末复习知识点小结(五)——文件系统

2019年08月12日 ⁄ 综合 ⁄ 共 3391字 ⁄ 字号 评论关闭

UNIX文件系统是UNIX成功的关键。其特点主要表现为以下几点:

1、目录结构采用树形层次结构

2、可安装拆卸的文件系统

3、文件是无结构的字符流式文件

4、把外部设备和文件目录作为文件处理

 

文件描述符

每个进程可以同时打开多个文件,每个进程用一个小的非负整数来表示其打开的每个文件,这个整数就是文件描述符(fd, file descriptor).

    任何时候对文件的输入/输出都是通过文件描述符来标示文件的。文件描述符类似于标准库中的文件指针或MS-DOS中的文件句柄。

因为大多数的输入/输出都是通过键盘和显示器来实现的,为了方便起见,当shell运行一个程序的时候,它将自动打开三个文件,对应的文件描述符分别为0、1、2,依次表示标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。

 

System Calls for File I/O

1、creat

创建一个空文件,格式:fd=creat(name,Pmode), 例如:fd= creat(“/usr/abc”,0777)

2、open

打开一个已存在的文件,格式:fd = open(name, rwmode [, pmode]);

rwmode为文件被打开的模式。该函数正常调用返回的fd大于等于3

3、close

关闭一个被打开的文件,格式:status = close(fd);

4、read/write

对文件的读写,格式:

n=read(fd,buffer, size);

n=write(fd,buffer,size);

buffer是指向读/写缓冲区的指针,n是一次读/写操作的返回字节数

拷贝命令的实现:



5、lseek  文件的随机存取

改变文件指针所指的位置,格式:newpos=lseek(fd,offset, origin);

创建空洞文件




两个数组数据之间有30个空字节,他们被0填充

 这6个系统调用(creat,open,read,write,lseek,close)通常称为unbuffered I/O(相对于标准I/O库stdio.h中提供的函数).

 

系统调用stat

 

头文件<sys/stat.h>中包含了描述stat的返回值的结构

struct stat {     /* 由stat返回的i结点信息 */

 dev_t st_dev;   /* i结点设备 */

 ino_t st_ino;   /* i结点编号 */

 short st_mode;  /* 模式位,包含文件类型和访问权限 */

 short st_nlink; /* 文件的总链接数 */

 short st_uid;   /* 所有者的用户id */

 short st_gid;   /* 所有者的组id */

 dev_t st_rdev;  /* 用于特殊文件 */

 off_t st_size;  /* 用字符数表示的文件长度 */

 time_t st_atime; /* 上一次访问的时间 */

 time_t st_mtime; /* 上一次修改的时间 */

 time_t st_ctime; /* 上一次改变i结点的时间 */

};

st_mode项包含了描述文件的一系列标志,这些在<sys/stat.h>中定义。文件类型的有关部分为:

#define S_IFMT 0160000  /*  文件的类型  */

#define S_IFDIR 0040000  /*  目录  */

#define S_IFCHR 0020000  /*  特殊字符  */

#define S_IFBLK 0060000  /*  特殊块  */

#define S_IFREG 0100000  /*  普通  */

 

Unix文件类型:

→常规文件(-) :文本文件和二进制文件

→目录文件(d) :将文件的名称和它的索引节点号结合在一起的一张表(记住:目录也是文件)

→设备文件(c or b) :每种I/O设备对应一个设备文件

→管道文件(p) :主要用于在进程间传递数据 ,又称先进先出(FIFO)文件

→链接文件(L) :又称符号链接文件,它提供了共享文件的一种方法

 

 

UNIX文件系统 —— 一个分区创建一个文件系统


查看文件的索引节点号→


目录

目录(directory)是一种特殊的文件。目录的功能是实现文件名到文件地址的映射。目录中的一项称为目录项(dentry, directory entry)。所以,文件名和地址这两项在目录中是必不可少的。而文件的其他属性是否放到目录中,不同的操作系统有不同的做法。

      下图是一个MS-DOS的目录项,它总共32个字节。



UNIX中采用的目录结构非常简单,如图,每个目录项占16个字节,其中只包含文件名及其索引节点号。有关文件类型、长度、时间、所有者和磁盘地址等信息都放到索引节点(inode, index node)中,inode的引入为文件共享提供了便利。


Unix采用inode的好处?

优点1:加快检索文件的速度

Unix的目录项只包含文件名和对应的inode编号,这样大大减少了系统各级目录的规模。  

优点2. 采用inode为文件共享提供了便利,可以让多个逻辑文件名共享同一个物理文件。

 

硬链接和软链接——实现文件共享

链接命令:ln(link)

硬链接(hardlink):让一个文件对应一个或多个文件名,或者说把我们使用的文件名和文件系统使用的节点号链接起来,这些文件名可以在同一目录或不同目录

软链接(也叫符号链接,symbolic link):是一种特殊的文件,这种文件包含了另一个文件的任意一个路径名。这个路径名指向位于任意一个文件系统的任意文件,甚至可以指向一个不存在的文件

硬链接 ln  sourcefile linkfile

不同文件名对应了同一个物理文件,它们的索引节点相同,删除任何一个逻辑文件名(链接),只是将索引节点中的文件链接数减一,直到减为零,才会删除物理文件。


link

   用于建立文件之间的硬链接,格式: status=link(name1,name2)

unlink

    删除一个链接文件status=unlink(name)

Link与unlink的组合实现MV




硬链接的缺点:

1.不能跨文件系统建立硬链接;

2.不能对目录建立硬链接。

 

软链接(又称符号链接)ln–s sourcefile linkfile

为了克服硬链接的上述缺点,产生了软链接。软链接相当于windows下的快捷方式

可以跨文件系统建立符号链接,也可以对目录创建符号链接,甚至可以对一个不存在的文件创建符号链接。软链接文件类型为l, 一般用于目录。



FAT技术

Microsoft在其早期的操作系统中采用的是FAT(File Allocation Table,文件分配表)文件系统.

 

 

内存打开文件结构

当用户需要查询、读写文件信息时,文件系统必须涉及文件目录结构、文件磁盘 i节点、文件地址索引表这样一些数据结构。

当打开一个文件时,系统进程将该文件在磁盘上面的有关目录信息、磁盘i节点及相应的文件地址索引表拷贝到内存中。


打开文件机构:文件系统中管理这一方面工作的机构称为打开文件管理机构。

当一个进程执行以下代码:

fd1=open(“/etc/passwd”,O_RDONLY);

fd2=open(“loca”,O_RDONLY);

fd3=open(“/etc/passwd”,O_WRONLY);

   

磁盘驱动器 →

 


访问权限

※每个进程有四个ID:

真实uid和真实gid表明我们真正是谁。有效uid和有效gid用来判定文件访问权限。一般情况下真实uid等于有效uid,真实gid等于有效gid

※每个文件有两个ID:属主ID和组ID,分别表示为st_uid和st_gid.一个进程能否访问一个文件,就是判断进程的有效id是否等于文件的id

 

文件的访问权限除了日常提到的九位,其实还有三位,分别是suid、sgid和sticky位。


1)suid位:saved set-uid

如何设置文件的suid位:chmod u+s file  或 chmod 4*** file


2)sgid位:saved set-gid,通常只对目录设置sgid

设置方法:chmod g+s dir 或 chmod 2*** dir


3)sticky位:也叫粘滞位,通常只对目录设置sticky位

用户想删除或重命名一个被设置了sticky位的目录中的文件,该用户不仅要对该目录有写权限,而且必须是一下三者之一:拥有该文件、拥有该目录、超级管理员。

设置sticky位:chmod +t dir 或 chmod 1*** dir

 

 

抱歉!评论已关闭.