Linux文件系统及文件属性

时间:2021-02-01 20:39:36

一、Linux文件系统

1、穿件文件系统

Linux中当磁盘格式化创建文件系统时,会创建一定数量的节点索引Inode以及一定数量的块block,其中inode具有存储文件属性以及指向文件实体block的指针的功能,而block则具有存放文件内容的功能,CentOS6.X系统中非启动分区的默认Inode大小为256字节,启动分区的inode默认大小为128字节。Linux读取文件的过程是先通过文件名找到对应的inode,再通过inode访问其指向的block,最后从block中读取文件内容输出到屏幕上。

2、删除文件的原理

Linux删除文件的依据是检查文件的i_link和i_count是否都为0,其中i_count指的是文件的硬链接数,而i_link指的是调用文件的进程数,当源文件和所有硬链接被删除且没有进程调用该文件时,该文件的磁盘空间将会在存储新数据时被占用或在磁盘fsck检查时被系统回收。

二、文件属性

Linux系统中我们使用ls  -lhi命令可以查看到目录下所有文件以及文件对应的属性,每个文件共有十列数据,除了最后一列的文件名外都是文件的属性,因此文件名不存储在inode中而是存储在目录的block中。所有十列数据的具体含义如下:

第一列:Inode编号

1、inode称为索引节点,它的作用时存放文件的属性信息以及作为文件的索引

2、inode是磁盘上的一块存储空间,CentOS非启动分区默认256字节,启动分区默认128字节

3、inode的表现形式是一串数字,不同的文件对应的inode在文件系统中是唯一的

4、inode节点号相同的文件,互为硬链接文件,可以认为是一个文件的不同入口

5、ext3/ext4文件系统下,一般情况一个文件被创建后占用一个inode和至少一个block

6、block的大小一般有1K,2K,4K几种,其中引导分区等为1K,其他普通分区为4K

7、如果一个文件很大,可能占多个block,如果文件很小,至少占用一个并且剩余空间浪费了
8、查看inode以及block的大小和总量 dumpe2fs /dev/sda3|grep -iE 'inode size|block size' dumpe2fs /dev/sda3|grep -iE 'inode count|block count'

9、查看inode总量以及使用量 df -i

10、查看文件inode信息 ls -li stat 文件名

11、格式化时指定inode以及block的大小 mkfs.ext4 -l 256 -b 2048 /dev/sda5

12、Inode编号在系统中是唯一的

与inode关联的block知识总结如下:  

    1、磁盘读取数据是按block为单位读取的
    2、一个文件可能占用多个block,每读取一个block就会消耗一次磁盘I/O
    3、如果要提升磁盘I/O性能,那么就要尽可能一次性读取数据尽量多
    4、一个block只能存放一个文件的内容,无论文件有多小。
    5、block并非越大越好,block太大对于小文件存放就会浪费磁盘空间
    6、大文件(大于16K)一般设置block大一点,小文件(小于1K)一般设置block小一点
    7、如果文件都是小文件而block太大就会浪费磁盘空间
    8、如果文件都是大文件而block太小就会浪费磁盘I/O、
    9、文件较大时,block设置大一些会提升磁盘访问效率
    10、ext3/ext4文件一般设置为4K
    11、block大小在格式化时设置

第二列:文件类型及文件权限

第一位代表的是文件类型

Linux系统不像Windows系统一样以扩展名区别文件类型,Linux文件类型在文件创建时就已经确定了,无法修改。

Linux系统中常用的文件类型有普通文件以“-”表示、目录以“d”表示、符号链接以“l”表示、块设备以"b"表示,除此之外还有字符设备以“c”表示、套接字文件以“s”表示和管道文件以“c”表示

Linux系统中普通文件大致分为文本文件、二进制文件比如系统命令文件、数据格式文件,数据格式文件只能用命令读取比如/var/log/wtmp文件只能用last命令读取

第二到四位代表的是文件属主的权限

    第五到七位代表的是文件属组的权限

    第八到十位代表的是其他用户的权限

文件权限的设置通过chmod命令

      文件的默认权限通过umask命令,目录的默认权限是777-umask的值,文件的默认权限是666-umask的值

文件权限分为普通权限和特殊权限,普通权限有r读取权限数字表示为4、w写入权限数字表示为2、x执行权限数字表示为1,特殊权限有suid、sgid、t

数字方式设置权限,将三个位置各自的权限转为数字然后相加得出一组三位数字或四位数字,如rw-r--r--的数字表示就是42-4--4--,所以设置权限就是chmod  644

字符方式设置权限,字符方式设置权限时用u代表文件属主的权限,g代表文件属组的权限,o代表其他用户的权限,+代表增加权限,-代表取消权限,=代表修改权限,于是rw-r--r--的权限设置就是chmod u=rw,g=r,o=r

目录的普通权限r代表可以浏览目录的内容,没有x权限时会提示不能访问目录下的文件和子目录但仍可以看到文件名和目录名,w代表增加,删除,修改目录下文件名,需要有x权限才能实际操作,x代表可以进入目录

suid显示在文件属主的x权限位上,当没有x权限时显示为S,否则显示为s,该权限只对命令和二进制程序文件有效,让非root用户可以以root身份运行只有root才能使用的命令

被设置suid的命令在运行时,用户具有root对该命令的所有权限

      sgid与suid不同,不仅可以对文件设置,也可以对目录设置,对目录设置时可以让其他用户在该目录下创建的文件和目录具有和该目录相同的组设置

      suid与sgid是一把双刃剑,对系统安全有一定威胁,应该取消不必要的系统默认suid和sgid命令,通过find命令的perm参数可以找出suid和sgid命令

      t权限让其他用户不能删除文件

      特殊权限还有i不可修改权限和a只追加权限,需要通过chattr设置,lsattr查看,i权限让任何人不可以修改文件,a权限让文件只能被动追加不能认为主动追加内容

第三列:文件硬链接数

    创建链接的方式  ln  -s  源文件名  链接文件名    -s  创建软链接

    硬链接知识点:

      1、具有相同Inode节点号的多个文件互为硬链接文件
      2、删除硬链接文件或源文件任意之一,文件实体并未被删除
      3、只有删除源文件与所有硬链接文件,文件实体才会被删除
      4、当所有硬链接文件及源文件被删除后,在存放新数据时会占用该文件空间或者磁盘fsck检查时空间被系统回收
      5、硬链接文件就是文件的另一个入口
      6、可以通过创建硬链接来防止重要文件被误删
      7、通过命令ln 源文件名 链接文件名 来创建硬链接
      8、硬链接文件可以用rm命令删除
      9、对于没有进程调用的文件,硬链接数为0,文件就会被删除

软链接知识点:

      1、软连接类似Windows的快捷方式(可以用readlink命令查看其指向)
      2、软连接类似一个文本文件,里面存放的时源文件的路径,指向源文件实体
      3、删除源文件,软连接文件依然存在,但是无法访问指向的源文件路径内容了
      4、失效的时候一般是白字红底闪烁提示
      5、软连接文件可以用命令ln -s 源文件名 链接文件名 来创建
      6、软连接和源文件是不同类型的文件,也是不同的文件,inode号不相同
      7、删除软连接文件可以用rm命令

文件链接结论:

      1、删除软连接文件对源文件和硬链接文件无任何影响
      2、删除硬链接文件对源文件和软连接文件无任何影响
      3、删除源文件对硬链接文件无影响,但是软连接文件会失效
      4、同时删除源文件和硬链接文件会使文件真正被删除
      5、很对硬件设备的快照功能就是利用了硬链接的原理
      6、源文件和硬链接文件具有相同的inode节点号,可以认为是一个文件或一个文件的多个入口
      7、源文件和软连接文件inode节点号不相同,是不同的文件,软连接相当于源文件的快捷方式,含有源文件的位置指向

目录链接结论:

      1、目录不能创建硬链接但是可以创建软连接
      2、目录的软连接是运维中的常用技巧,可以生成一个固定的访问路径又不影响软件升级
      3、目录的硬链接不能跨越文件系统
      4、每个目录都有一个硬链接"."号,以及对应上级目录的硬链接".."
      5、在父目录里创建子目录,父目录的连接数加一,但是在父目录创建文件,父目录的链接数不会增加

  

  第四列:文件属主

  第五列:文件属组

    useradd命令创建用户,会修改passwd,shadow,group,gshadow四个文件

    groupadd命令创建组

    chown命令修改文件属主,也可以修改属组

    chgrp命令修改文件属组

    Linux角色通过UID和GID区分
    在Linux中UID为0的用户即为超级用户
    Linux用户分为超级用户,普通用户和虚拟用户
    超级用户UID为0,GID也为0
    虚拟用户UID为1~499,GID也为1~499
    普通用户UID为500~65535,GID也为500~65535

    

    /etc/passwd文件即用户账号信息文件,必须了解,文件中每行以冒号分隔共有七列
    第一列为账号名称
    第二列为账号密码
    第三列为账号UID
    第四列为账号GID
    第五列为用户说明
    第六列为用户家目录
    第七列为shell解释器

    /etc/shadow文件即用户密码文件,文件中每行以冒号分隔共有九列
    第一列账号名称
    第二列账号密码
    第三列最近更改密码的时间
    第四列禁止修改密码的天数
    第五列用户必须更改密码的天数
    第六列警告更改密码的期限
    第七列不活动时间
    第八列失效时间
    第九列标志

 /etc/group文件即组信息文件,文件中每行以冒号分隔共四列
    第一列组名
    第二列组密码
    第三列GID
    第四列组成员

    /etc/gshadow文件即组密码文件,文件中每行以冒号分隔共四列
    第一列组名
    第二列组密码
    第三列组管理员账号
    第四列组成员

第六列:文件大小

  第七、八、九列:文件修改时间

    stat命令查看文件详细属性

    文件访问时间:文件内容被访问就改变

    文件修改时间:文件内容被修改就改变

    文件改变时间:文件属性改变时就改变

第十列:文件名

  三、相关面试题

  1、软链接和硬链接的区别,答题思路从以下四方面回答:

    1)软硬链接的概念
    2)软硬链接的创建方式
    3)软硬链接对于文件的区别
    4)软硬链接对于目录的区别

  2、一个100M(100000K)的磁盘分区,分别写入1K的文件或写入1M的文件,分别可以写多少个

    假设block为4K的情况下,写入1K的文件分两种情况
    inode足够,那么写入文件数量就是block的数量,浪费3/4的容量
    inode数量小于block数量,那么写入文件数量就是inode的数量,浪费3/4的容量

    写入1M的文件的数量等于总的block数量/(1M/block大小),基本可以写入250个1M的文件

  3、如果向磁盘写入数据提示如下错误:No sapce left on device,通过df -h查看磁盘空间发现没有满,可能是什么原因,发生这种情况的原因是什么

    磁盘空间满了有两种情况,一是inode消耗完了,二是block消耗完了,根据df -h结果可知block没有消耗完,那么可能就是inode消耗完了,产生的原因可能是系统临时邮件目录生成了太多小文件