1.常见的Linux文件系统EXT(ExtendedFileSystem)EXT2:Linux最初设计的是商业级文件系统,遵循BSD的Berkeley文件系统原理设计。提供GB级别的最大文件和TB级别的文件系统。但是,如果在将数据写入磁盘时系统崩溃或断电,则很容易发生灾难性的数据损坏。EXT3:使用32位内部寻址,引入日志事务解决EXT2数据损坏问题。三种级别的日志记录方式有日志(journal)、顺序(ordered)和回写(writeback)。EXT4:采用48位内部寻址,最大可存储单个文件16TB,支持最大1EB的分区容量。EXT->EXT2->EXT3->EXT4XFS(ExtentsFileSystem)是64位日志文件系统,从2001年开始内置于Linux内核,为大文件系统提供高性能和高并发(即大进程立即写入到文件系统)。从RHEL7开始,XFS是RedHatEnterpriseLinux的默认文件系统。ZFS(ZettabyteFileSystem)由SunMicrosystems开发,以zettabyte——相当于1万亿GB——命名,因为它理论上可以解决大型存储系统。Btrfs(B-TreeFilesystem)ChrisMason于2007年在Oracle任职期间发布。Btrfs旨在实现与ZFS大部分相同的目标,提供各种设备管理、每块校验和、异步复制、内联压缩等。SUSEEnterpriseLinux在2015年采用它作为默认文件系统,而RedHat在2017年宣布从RHEL7.4开始不再支持Btrfs。2.Linux系统的层次=======================================================|申请|用户空间=======================================================|SCI(系统调用接口)|K|--------------------------------------------------|电子|VFS(虚拟文件系统)|r|------------------------------------------------------|?|分机3|分机4|XFS|ZFS|Btrfs|...|e|------------------------------------------------------|我|通用块设备层||-----------------------------------------------------|内核空间|设备驱动|=====================================================|物理磁盘|硬件=======================================================清单2-1KernelSpaceDeviceDriver常见的硬盘类型有PATA、SATA、AHCI。通用块设备层为文件系统提供统一抽象的硬盘驱动接口,屏蔽了IO接口的多样性和复杂性。文件系统管理文件的实际系统。常用的如Ext4等。VFS为SCI层提供统一的抽象文件系统接口。SCI为用户程序提供系统调用接口。3、文件存储结构在Linux中,文件=inode+数据块inode:也称为文件索引节点,存放文件的元信息数据块:存放文件内容的区域一些介绍文件存储结构的文章说文件包含目录项,术语索引节点和数据块不准确。目录项不是文件存储结构的一部分,目录项只是数据块的数据。在Linux中,目录也是文件的一种,即目录文件(文件类型为目录)。对于一个目录文件,其数据块中存储的是目录项,即该目录下所有文件的文件名和inode号。通常我们在使用ls-al命令查看目录结构时,返回结果的前两个目录名分别是.和..:[root@localhost/]#ls-altotal16dr-xr-xr-x。17rootroot224Aug700:25.dr-xr-xr-x。17rootroot224Aug700:25..List3-1List3-1,.指向当前目录的inode,..指向上一级目录的inode。inode的元信息通常包括:文件类型(普通文件、目录、符号链接等)分配给文件的字节数、分配给文件的块数、文件的硬链接数inode编号(见5.文件链接、硬链接)文件访问权限(见4.文件权限控制)文件时间戳(atime:访问时间,mtime:修改时间,ctime:inode更改时间)文件数据块地址数组用途state命令查看指定目录或文件的inode信息。以/dev目录文件为例:[root@localhost~]#stat/etcFile:'/etc'Size:8192Blocks:24IOBlock:4096directoryDe??vice:fd00h/64768dInode:67160161Links:79Access:(0755/drwxr-xr-x)Uid:(0/root)Gid:(0/root)Context:system_u:object_r:etc_t:s0Access:2019-09-0523:42:58.818662000+0800Modify:2019-09-0511:29:26.972884600+0800更改:2019-09-0511:29:26.972884600+0800清单3-24。文件权限控制4.1.文件属性使用ls-l?path>命令可以查看指定路径下的文件相关属性信息。以/bin/目录为例:[root@localhostefrey]#ls-l/bin/total68012-rwxr-xr-x。1rootroot415442018年10月31日[-rwxr-xr-x.1rootroot1079042019年1月22日a2p-rwxr-xr-x。1根根527207月30日01:20ab-rwxr-xr-x。1rootroot292002018年10月30日addr2line-rwxr-xr-x。1rootroot29Oct312018aliaslrwxrwxrw.1rootroot6Aug700:22apropos->whatis......[1][2][3][4][5][6][7]清单4-1清单4-1返回的信息分为7列:[1]:文件权限[2]:文件硬链接号[3]:文件所有者(owner)[4]:文件组(group)[5]:文件字节数[6]:文件的mtime(修改时间,文件最后一次修改的时间)[7]:文件名4.2.文件权限分配4.2.1。权限类型Linux文件系统中有3种权限类型:r(Read)文件的r权限表示可以读取文件的内容;目录的r权限表示可以读取目录的内容(子目录和文件名列表)。w(Write)一个文件的w权限,表示可以修改该文件的内容;目录的w权限表示可以创建子目录和文件,可以修改、删除和移动子目录和文件名。x(eXecute)文件的x权限表示文件可以执行;目录的x权限比较特殊,rw权限依赖于x权限。如果一个用户只有某个目录的rw权限而没有x权限,该用户仍然不能访问该目录。我们来验证一下。首先,在登录用户的主目录中创建一个新目录fldr。系统默认所有者权限为rwx。此时将目录fldr的所有者权限改为rw,然后尝试访问fldr:[efrey@localhost~]$mkdirfldr[efrey@localhost~]$ls-ltotal0drwxrwxr-x。2efreyefrey6Sep622:53fldr[efrey@localhost~]$touchfldr/test.txt[efrey@localhost~]$ls-lfldrtotal0-rw-rw-r--。1efreyefrey0Sep622:54test.txt[efrey@localhost~]$sudochmodu=rw,g=rw,o=rfldr[efrey@localhost~]$ls-lfldrls:无法访问fldr/test.txt:Permissiondeniedtotal0-??????????????test.txt清单4-24.2.2。文件权限的含义从表4-1可以看到第[1]列中的文件权限,一共10个字符。以第一行的文件权限-rwxr-xr-x为例,这10个字符的权限含义可以分为1+3+3+3,共4段(-+rwx+r-x+r-x):第1段:左起第一个字符。这1个字符代表文件的类型。文件类型比较常见,-表示普通文件;d表示目录;l表示符号链接(软链接)等。第2段:第2~4个字符。这3个字符代表文件所有者的权限。第二个字符代表r权限,第三个字符代表w权限,第四个字符代表x权限。如果权限位字符为-,则表示没有该权限。第3段:第5至第7个字符。这3个字符代表用户组的权限。权限位的字符含义同上。第4段:第8至第10个字符。这3个字符代表其他用户(非所有者和该用户组的用户)的权限。权限位的字符含义同上。4.2.3.修改文件权限chmod命令:更改文件权限设置,还可以设置SUID、SGID、SBIT等特殊权限。例如给文件test设置权限:属主为rwx,所属用户组为rx,其他用户为rx,则执行命令为chmodu=rwx,g=rx,o=rxtest。上面的命令可以简化为chmod755test。即所有者、用户组、其他用户三组权限分别用一个数值来表示。具体转换规则如下:每组权限有3个权限字符,每个字符对应一个八进制数:-第1位:r=4,-=0-第2位:w=2,-=0-第三位:x=1,-=0最后这3位的值之和就是这组权限的值。例如`-rwxr-xr-x`,对应的权限值为`755`。计算过程如下,三组权限分别为:-rwx=4+2+1=7-r-x=4+0+1=5-r-x=4+0+1=55文件链接有两个Linux链接方式下的文件类型:硬链接和软链接。在硬链接的第3节中,我们提到了文件的存储结构。一个文件由两部分组成:索引节点和数据块。目录中的文件名本质上是一个指向文件inode的硬链接(文件名比inode号更容易记忆和使用),一个文件至少有一个硬链接文件名。使用lnfilenamenewfilename为一个文件创建多个硬链接文件名。我们用一个例子来演示,首先创建一个demo.txt文件,然后用这个文件创建一个硬链接文件hdemo.txt,最后检查这个文件和它的inode号:[root@localhostefrey]#echo'filelinkdemo'>demo.txt[root@localhostefrey]#lndemo.txthdemo.txt[root@localhostefrey]#ls-iltotal8110-rw-r--r--。2rootroot15Sep617:05demo.txt110-rw-r--r--。2rootroot15Sep617:05hdemo.txt从上面的例子可以看出,在当前目录下,demo.txt文件(inodeid=110)和它的硬链接文件名都指向同一个inode号.文件的链接号是2(第3列)。即使原文件被删除,仍然可以通过硬链接文件访问到文件内容。软链接:软链接是指向某个路径的快捷方式,路径可以是目录文件,也可以是普通文件。软链接不会增加文件的链接数。一旦原文件名被删除,软链接文件就找不到文件的inode了。使用ln-sfilenamenewfilename创建一个软链接。[root@localhostefrey]#ln-sdemo.txtsdemo.txt[root@localhostefrey]#ls-iltotal8110-rw-r--r--。2rootroot15Sep617:05demo.txt110-rw-r--r--。2rootroot15Sep617:05hdemo.txt111lrwxrwxrwx。1rootroot8Sep617:19sdemo.txt->demo.txt可以看到,将文件demo.txt添加到软链接后,文件的链接数并没有增加。在ls命令返回结果的第二列,权限信息的第一个字母变成了l(符号链接)。此时如果使用rm-fdemo.txt命令删除demo.txt,然后使用catsdemo.txt命令访问sdemo.txt,会提示Nosuchfileordirectory,因为虽然文件本身仍然存在,快捷方式指向删除了demo.txt文件名。[root@localhostefrey]#echo"Iamnewdemo">demo.txt[root@localhostefrey]#ls-iltotal8112-rw-r--r--.1rootroot1Sep617:25演示。txt110-rw-r--r--。1rootroot15Sep617:05hdemo.txt111lrwxrwxrwx。1rootroot8Sep617:19sdemo.txt->demo.txt[root@localhostefrey]#catsdemo.txt我是新的demo此时使用echo''>demo.txt新建一个文件。此时demo.txt文件的inode号已经改为112,与原来的demo.txt不是同一个文件;并且我们查看sdemo.txt的内容已经是112的demo.txt文件了。之前的系统目录结构