转自:https://blog.csdn.net/Xiongchao99/article/details/74910794
1、Unix/Linux系统的目录结构
答:Unix/Linux系统的目录是带链接树形目录结构,带链接树形目录结构又称非循环图目录结构,它是指访问一文件(或目录)可以有多条路径。一般常说UNIX的文件系统是树形结构,其实是指带链接的树形结构,而不是纯树形目录结构。2、Linux下对文件的操作
答:Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions)。系统调用实际上就是指最底层的一个调用,在linux程序设计里面就是底层调用的意思,面向的是硬件。而库函数调用则面向的是应用开发的,相当于应用程序的api。
3、在FAT文件系统中,基本的文件分配单位是什么?
答:FAT文件系统基本的文件分配单位是簇;
簇 :系统文件分配的基本单位,一般为2的n次方个扇区(由文件系统决定);
扇区: 硬盘不是一次读写一个字节,而是一次读写一个扇区(512个字节),扇区就是硬盘读取单元块 ;
簇的大小选择,例如U盘的FAT32模式下,分配单元——簇的大小选择:
簇是分配给U盘的最小单元,大了不适合存储小文件,比如你分配了16K的,你只存一个1K的TXT的话,这个16K就被占用了,所以又点浪费空间。但是如果你存的是5M左右的歌曲,那么存的文件就比较快,而且整体性好点。
4、文件索引结构
答:为了提高文件的检索效率,可以采用索引方法组织文件。采用索引这种结构,逻辑上连续的文件可以存放在若干不连续的物理块中,但对于每个文件,在存储介质中除存储文件本身外,还要求系统另外建立一张索引表,索引表记录了文件信息所在的逻辑块号和与之对应的物理块号。索引表也以文件的形式存储在存储介质中,索引表的物理地址则由文件说明信息项给出。
在很多情况下,有的文件很大,文件索引表也就较大。如果索引表的大小超过了一个物理块,可以采用间接索引(多重索引),也就是在索引表所指的物理块中存放的不是文件地址映射信息本身,而是装有这些信息的物理块地址。
索引结构既适用于顺序存取,也适用于随机存取,并且访问速度快,文件长度可以动态变化。索引结构的缺点是由于使用了索引表而增加了存储空间的开销。
5、文件逻辑结构
答:文件分为两大类:有结构文件(即记录式文件),无结构文件(即流式文件)。
大量的数据结构和数据库采用有结构文件;大量的源程序,可执行程序,库函数等采用无结构文件,其长度以字节为单位,对流式文件的访问是利用读
写指针来指出下一个要访问的字符。
有结构的文件分为:定长和不定长两类;
定长又分为:定长记录,变长记录;
变长记录文件根据文件组织方式的不同又分为:顺序文件,索引文件,索引顺序文件。
6、数据项、记录和文件在文件系统中的关系
答:文件系统按层次有个底到高为:数据项—>记录—>文件,后者是由前者的集合组成;
7、顺序文件
答:顺序文件有两种结构:串结构和顺序结构;
串结构:按存入时间顺序决定;
顺序结构:按关键字如文件名的字母顺序决定。
8、Linux系统的i节点介绍
答:i节点也叫索引节点,是对文件进行控制和管理的一种数据结构,每一个文件都有自己的i节点,每个i节点都有一个唯一的i节点号。i节点结构如下:
struct dinode
{
ushort di_mode; /*文件类型+用户权限*/
short di_nlink; /*文件链接数*/
ushort di_uid; /*属主用户id*/
ushort di_gid; /*属主用户组id*/
off_t di_size; /*文件大小*/
char di_addr[40]; /*文件数据区起点地址*/
time_t di_atime; /*最后访问时间*/
time_t di_mtime; /*最后修改时间*/
time_t di_ctime; /*创建时间*/
};
从上面这个结构可以看出以下一些信息:
1、i节点保存了文件的属性和类型、存放文件内容的物理块地址、最近一次的存取时间、最近一次的修改时间、创建此文件的时间。
2、i节点中没有记录文件名字;
linux下,i节点其实就是可以这么认为,把i节点看作是一个指向磁盘上该文件存储区的地址。只不过这个地址我们一般是没办法直接使用的,而是
通过文件名来间接使用的。事实上,i节点不仅包含了文件数据存储区的地址,还包含了很多信息,比如数据大小,等等文件信息。但是i节点是不保存
文件名的。文件名是保存在一个目录项中。每一个目录项中都包含了文件名和i节点。
我们可以通过一个图来看看目录项,i节点,文件数据四者之间的关系:
下面是关于i节点、硬链接、软链接的总结:
1)i节点
1、inode是一个数值,通过ls -i 命令可以查看某文件的inode值;
2、本质上inode是一个索引号,也可以理解为一个指针,指向唯一的一个文件,准确的是说是指向一个文件的存储区,该存储区是属于该文件的一部分,不一定是全部;
3、因此,有两个或多个inode指向同一个文件的情况。即inode和文件不是一一对应的关系,是n对1的关系(n>=1);
4、当文件拷贝时,理所当然的会创建新的inode,而且也复制了数据区。尽管两个文件完全一样。即:复制文件时,产生两个完全独立的文件。
2)硬链接:为原文件创建一个新的文件名,但本质中只增加了一个目录项,并使用与原来相等的inode,指向原文件的区域。数据
区为两个名字共享。
使用限制:源文件和链接文件必须在同一个文件系统内,且目录文件不能创建硬链接。
命令:ln a b // 给a创建链接文件b
可以使用ls -i查看两个inode是完全一样的。
同时注意连接计数count。count的意义对于文件来说是硬链接的个数,对于目录,一般(count-2)为目录包含的子文件个数。
注意:两者的权限也是完全一样的。对其中一个进行读写操作,另外一个也会更新。但删除其中一个,只会删除目录项,不会删除
存储区数据。另外一个文件的使用和操作完全不受影响。除非count-1结果0,才将数据区删除。
作用:节省空间,两个文件能同步更新,防止重要文件被“误删”。
注意:软驱 光驱等都是独立的文件系统。不同文件系统的inode没有任何联系。系统通过设备号和inode号确定一个文件。
inode是文件系统内的一个概念。但Linux可以支持多种不同的文件系统。其实Linux提供了一个虚拟文件系统VFS,是实际系统上层
的一个接口软件。因此inode是只存在于内存的数据结构中。只有linux量身定制的ext2文件系统是具有实际意义的inode和目录项结
构。
3)软链接:也叫符号链接。本质是创建一个新的文件,保存源文件的路径名。因此inode和源文件的inode是不一样的。使用没有文
件系统的限制,也没有文件和目录的限制。
命令:ln -s a b
注意:产生的文件权限和源文件是不一样的。由于软链接使用比较灵活,可能断链,也可以自循环,往往需要多次查找增加文件操
作的步骤而降低效率。尽量少用,并避免出现循环。
注意:删除文件时,如果源文件被删除,即便只是硬链接被删除,存储区没有被删,本文件也会失效。因为它是对文件名而言的。