前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux文件属性详解

Linux文件属性详解

作者头像
张琳兮
发布2018-09-10 11:43:00
3.1K0
发布2018-09-10 11:43:00
举报
文章被收录于专栏:首富手记首富手记首富手记

文件属性(ls -lhi查看到的信息)

Linux文件属性详解
Linux文件属性详解

1.1 第一列:inode号

1.1.1 什么是inode

文件存储在硬盘上,硬盘的最小存储单位叫做"扇区"(sector)。每个"扇区"的大小为512字节(byte), ,操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太慢。他是一次性读取多个扇区,即一次性读取一个"Block块"。一个Block有8个连续的扇区(sector)组成。 数据都存在Block块里面,但是我们怎么知道一个数据存放在哪些Block块里面呢?这个时候就必须需要一个索引,引导我们去找到哪些存放在BLOCK块里面的额数据。这存放索引的地方我们称为索引节点(Inode),索引节点里面包括了:文件的类型,属主,属组,权限,和时间戳一些信息,但是不包括文件名, 1.1.2 inode包含的内容

Linux文件属性详解
Linux文件属性详解
1:文件的类型
2:文件的权限,属主、属组、其他人的权限(r:读;w:写;o:其他人)
3:文件的硬连接数
4:属主
5:属组
6:文件的大小,对于目录而言:只是目录本身的大小,而不是里面内容的大小
7:默认是文件的修改时间
[root@oldboy_50 ~]# stat /
  File: `/'                 #除了这个其他的都存放在inode里面
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 803h/2051d  Inode: 2           Links: 29
Access: (0555/dr-xr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-12-13 08:11:33.331896121 -0500
Modify: 2018-07-27 00:10:10.415506122 -0400
Change: 2018-07-27 00:10:10.415506122 -0400

1.1.3 inode的大小

想一下,既然他要存放内容,所以他肯定也是需要占用磁盘空间大小的。所硬盘分区在创建文件系统(格式化)的时候自动把硬盘分区分成两个区域:

    1)Block块,数据区:存放实际的数据
    2)Inode块,索引区:存放inode所包含的信息(文件属性信息)
inode节点的大小和总数,是创建文件系统的时候就给定的,后期没办法更改,一般是128字节(byte)或者256字节(byte)。

1.1.4 如何查看inode的数量和大小:

1.1.4.1 查看数量
    df -i   
    [root@oldboy_50 ~]# dumpe2fs   /dev/sda3 | grep -i "inode count"
dumpe2fs 1.41.12 (17-May-2010)
Inode count:              1250928
1.1.4.2 查看inode的大小:
[root@oldboy_50 ~]# dumpe2fs /dev/sda3 | grep -i "inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size:           256

如果inode被占用完全,那么对这个文件里面写入数据的时候会提示磁盘已满,no space left on device

1.1.5 inode号码

每个inode都有一个号码,操作系统用inode号码来识别不同的文件。Linux不考文件名来区分文件,就像Linux不靠用户名来区分用户。文件名只是inode号码便于识别的绰号。 打开或编辑文件的过程:

Linux文件属性详解
Linux文件属性详解

1.1.6 目录文件

Linux下面一切皆文件,所以列出目录下的内容也相当于列出目录文件里面的内容,进入目录,就相当于进入目录文件里面。 目录文件的结构非常简单,就是一系列目录项(dirent)的列表,每个目录项都有两部分组成: 1)所包含的文件名 2)所包含的文件名和inode(索引节点号)的对应关系 修改目录下面的文件名,实际上就是在修改目录文件本身的block块里面的对应信息。所以能不能改目录下面的文件的名称是根据目录的权限来的。而是不根据文件本省的的权限来的。

1.1.7 inode总结

磁盘被分区格式化为ext4文件系统后会生成一定数量的inode和block
1)inode被称为索引点,存放文件的属性信息及作为文件的索引(类似于C语言指针)
2)ext3/ext4文件系统的block存放的是文件的实际内容
3)inode是磁盘上的一块存储空间,CentOS5是128字节,CentOS6是256字节
4)inode的表现形式是一串数字,不同文件对应inode不相同
5)inode号相同的互为硬链接
6)ext3和ext4文件系统下,一个文件至少占用一个inode和block
7)ext3和ext4文件系统下,一个文件只能占用一个inode
改变inode大小,mkfs.ext4 –b 2048 –i 256#-b指定block大小,-i指定inode大小

1.1.8 block总结

1)用来实际存放数据的地方,如果是目录,里面存放下级文件的文件名称
2)磁盘读取数据是按照block为单位读取的
3)一个文件至少占用一个block,未用完的浪费,可以占用多个block
4)要提升磁盘I/O性能,那就要一次性读取数据尽量的多
5)block并非越大越好。block太大会对小文件存放浪费太多磁盘空间,太小对于大文件来说,会更大的消耗I/O。一般默认为4K(4096字节)

1.2 文件类型

-:代表普通文件 d:代表目录 l:代表软连接(ln –s 源文件 链接文件) b:块设备和其他外围设备,是特殊类型的文件 普通文件“—”又分为:(用file来查看) 1) 纯文本文件(ascll):文件内容可以直接督导数据 2) 二进制文件(binary):Linux中的命令程序就是这种格式 3) 数据格式文件(data):有些程序在运行的过程中会读取某些特定格式的文件,那些特定格式的文件被称为数据文件。 虽然Linux不按照后缀名区分文件,但是我们还是最好写上,以方便管理。 一般这样设置后缀名:

*.txt    文本文件
*.tar    打包文件
*.tar.bz  bzip2格式压缩打包文件(j)
*.tar.gz  gzip格式压缩打包文件(z)
*.py    表示python语言文件
*.sh    shell编程脚本
*.pl    表示perl文件
*.html,*.php,*.htm,*.php,*.jsp,*.do   网页语言文件
*.conf  配置文件
*.rpm  rpm安装包

1.3 权限:

1.3.1 普通权限

1.3.1.1 对文件的权限:
读:r(read):可读权限,表示具有读取,和阅读文件的内容
写:w(write):写权限,表示具有增加,删除,修改文件内容的权限(是对于文件内容来操作的)
    1)如果没有r权限,用vim编辑的时候会提示无法编辑,但是可以使用cat,或echo重定向追加
执行:x(execute):文件可以被系统执行
    2)如果没有r权限,就是由执行权限,它也会提示权限不足,(想一下,你连里面的内容都不知道是啥,怎么去执行他呢。)
    3)删除文件,或修改文件名是跟他的父目录有关的,因为文件名是存放在上级目录的block块里面的。
1.3.1.2 对目录的权限
读:r:表示是否具有浏览目录下面及子目录的权限(ls或者tree)
写:w:具有增加、删除和修改目录下的文件名或目录名的权限,但需要x权限的配合(如果没有x权限,更改完成之后却不能执行(保存)那修改还有什么意义呢?)
x:表示具有进入的权限,没有r权限能进去,没有w选线不能修改和创建和删除。
    1)如果没有x权限,就不能进去到目录里面
    2)如果有r权限,没有x权限,ls是可以看到目录下面的内容的,但是不能cd进入到这个目录内。ls -l查看这个目录里面内容的属性的时候全都是???
[zsf@oldboy_50 ~]$ ll -d /tmp/123
drwxr-xrw- 2 root root 4096 Jul 27 03:05 /tmp/123
[zsf@oldboy_50 ~]$ ls -l /tmp/123/
ls: cannot access /tmp/123/1.txt: Permission denied
total 0
-????????? ? ? ? ?            ? 1.txt
1.3.1.3 文件或目录的权限有umask决定的
临时设置umask值:umask 0022
目录默认的总权限为0777,然后实际权限为0777-umask==实际权限
文件默认的总权限为0666,然后实际权限为0666-umask(当碰到奇数的时候在奇数位加上1)==实际权限
![](http://i2.51cto.com/images/blog/201807/29/5606be2fbd2b1a311c07df86922399e4.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)

1.3.3 特殊权限

1.3.3.1 SUID
set uid数字代号“4”在一个程序或命令上添加SetUid以后(u+s),这样属主就有了s权限,意味着任何用户在执行此程序时,都是使用属主的身份来执行的,passwd这个命令是最具有代表的。
1)当这个文件或目录本身就有x权限的时候,加上s权限,在x权限位就是s
    2)当这个文件或目录本身没有x权限的时候,加上s权限,在x权限位就是S
[root@oldboy_50 ~]# which passwd 
/usr/bin/passwd
[root@oldboy_50 ~]# ll -d /usr/bin/passwd 
-rwsr-xr-x. 1 root root 30768 Nov 23  2015 /usr/bin/passwd
[root@oldboy_50 ~]# ll -d /etc/shadow
---------- 1 root root 945 Jul 26 23:44 /etc/shadow  普通用户并不对这个文件有修改权限,但是他能更改密码,他更改密码的时候是以root用户的身份进行的,所以他才能修改密码
1.3.3.2 GUID
set gid数字代号“2”,在一个程序或命令上添加set gid以后(g+s),这样属组就有了s权限,意味着任何用户在执行此程序时,使用的是文件的属组。给目录设置set Gid权限,任何用户在该目录下创建的文件,文件的属组都和目录的属组一致。
1)当这个文件或目录本身就有x权限的时候,加上s权限,在x权限位就是s
    2)当这个文件或目录本身没有x权限的时候,加上s权限,在x权限位就是S
1.3.3.3 t权限

sticky数字代表1,附加在other的权限上,当设置此权限之后,每个人的文件或目录只能有用户自己本身来删除。

1.3.4 文件的访问控制列表

1.3.4.1 setfacl指令来

设置文件的访问控制列表,我们如果想一个文件对哪一个用户有什么特殊权限,我们就可以使用这个命令来实现。相当于路由的acl,优先级高于其他人权限的那个优先级

1.3.4.2 -m 新增一个acl列表

setfacl -m u:user_name:perms file_name 给文件设置一个关于单个用户的权限列表 setfacl -m d:u:user_name:perms file_name 给目录设置一个关于单个用户的权限列表 setfacl -m g:group_name:perms file_name 给文件设置一个关于用户组的权限列表 setfacl -m d:g:group_name:perms file_name 给目录设置一个关于用户组的权限列表

1.3.5 粘滞位权限(待补充)

1.4 链接

1.4.1 硬链接

一般情况下,文件名和inode号码是“一一对应”的关系,在同一个分区内不可能同时出现两个inode号相同的文件,但是Linux系统中存在一个inode 号对应多个文件名。这些文件互为硬链接。虽然他们的文件名不一样,但他们实际上操作的还是一个文件。 ln 源文件 链接后的文件 ln test.txt test.txt_ln [root@oldboy_50 tmp]# ll -i total 0 130937 -rw-r--r-- 2 root root 0 Jul 27 05:34 test.txt 130937 -rw-r--r-- 2 root root 0 Jul 27 05:34 test.txt_ln

1.4.1.1 总结
1)  inode号相同的,可以认为互为硬链接
2)  硬链接的创建不能跨越文件系统(跨越分区),目录不能创建硬链接
3)  删除源文件或链接文件,文件实例未被改变,只有删除所有的硬链接文件和源文件,文件的实体才会被改变。
4)  当所有的硬链接和源文件被删除,没有进程调用后,在存放新的数据会占用这个文件的空间或者磁盘fsck检查的时候,删除的数据才会被回收,
5)  可以通过文件设置硬链接文件,来防止重要文件被误删除
6)  每在目录下创建一个子目录,他的上级目录的硬连接数加1 
7)  目录硬链接的个数减去2代表他下面有多少个目录(减去他本身的1,和“.”)

1.4.2 软链接

1.4.2.1 作用

当一个软件的编译路径变了,我们还希望使用以前的路径,这时候就需要用到软连接,软连接相当于一个传送门,删除软连接对源文件没影响,但删除源文件,软连接就失效了。

1.4.2.2 总结
1)  软链接类似于windows的快捷方式(可以用readlink查看指向)
2)  软连接类似于一个文本文件,里面存放的是源文件的路径,指向源文件实体
3)  删除源文件,软链接失效,一般显示白字红底闪烁提示
4)  软链接具备不同的inode号
5)  软链接和源文件属于不同类型的文件
1.4.3 软连接和硬链接的图解
Linux文件属性详解
Linux文件属性详解
Linux文件属性详解
Linux文件属性详解

1.5 属主,属组,和修改时间

属主:这个文件的属于那一个人
属组,这个文件属于哪一个用户组
可通过chown修改”chown 属主:属组” 文件名
最后修改时间:
[root@zsf tmp]# stat 1| grep ^Modify   #可查看
Modify: 2018-04-08 09:55:03.976989445 -0400
可以通过touch -m来修改
[root@zsf tmp]# touch -m 1 -d "2011-11-11"
[root@zsf tmp]# stat 1| grep ^Modify      
Modify: 2011-11-11 00:00:00.000000000 -0500

1.6 系统创建文件提示:no space left on device磁盘空间不足

Linux系统中提示这个可能三种原因:
1)block块被占满
2)inode块被占满
3)文件全部都删除了,还是提示空间不足,因为这些文件在被进程占用

1.6.1 block被占满:

1.6.1.1 模拟环境:
#虚拟出来一个100M的磁盘。
[root@oldboy_50 ~]# dd if=/dev/zero of=/tmp/test_block bs=100M count=1
1+0 records in
1+0 records out
104857600 bytes (105 MB) copied, 8.69812 s, 12.1 MB/s
[root@oldboy_50 ~]# du -h /tmp/test_block 
100M    /tmp/test_block
#给这个分区创建文件系统
[root@oldboy_50 ~]# mkfs.ext4 /tmp/test_block   
mke2fs 1.41.12 (17-May-2010)
/tmp/test_block is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks: 
    8193, 24577, 40961, 57345, 73729

Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
#指定挂载分区格式,挂载这个虚拟磁盘
[root@oldboy_50 ~]# mount -o loop  /tmp/test_block /mnt/
[root@oldboy_50 ~]# df -Th 
Filesystem      Type   Size  Used Avail Use% Mounted on
/dev/sda3       ext4    19G  2.0G   16G  12% /
tmpfs           tmpfs  2.5G     0  2.5G   0% /dev/shm
/dev/sda1       ext4   190M   66M  115M  37% /boot
/dev/test       ext4    93M  2.1M   86M   3% /app/logs
/tmp/test_block ext4    93M  1.6M   87M   2% /mnt
[root@oldboy_50 ~]# cd /mnt
#生成一个大文件,来充满这个100M的磁盘
[root@oldboy_50 mnt]# seq 100000000 >>1.txt
[root@oldboy_50 mnt]# df -Th 
Filesystem      Type   Size  Used Avail Use% Mounted on
/dev/sda3       ext4    19G  2.0G   16G  12% /
tmpfs           tmpfs  2.5G     0  2.5G   0% /dev/shm
/dev/sda1       ext4   190M   66M  115M  37% /boot
/dev/test       ext4    93M  2.1M   86M   3% /app/logs
/tmp/test_block ext4    93M   91M     0 100% /mnt

[root@oldboy_50 mnt]# seq 1000 >>1.txt
seq: write error: No space left on device
错误已经出现
1.6.1.2 解决办法:
通过du -sh指令查找出大文件,然后删除它。
[root@oldboy_50 mnt]# du -sh /*
#找到了一个比较大目录“/mnt”,在统计查看这个目录下的大目录,按照这样逐级查找,找到这个大文件,并分析是什么内容,能不能删除,能删除直接删除即可
[root@oldboy_50 mnt]# du -sh /mnt/*
90M /mnt/1.txt
[root@oldboy_50 mnt]# df -Th 
Filesystem      Type   Size  Used Avail Use% Mounted on
/dev/sda3       ext4    19G  2.0G   16G  12% /
tmpfs           tmpfs  2.5G     0  2.5G   0% /dev/shm
/dev/sda1       ext4   190M   66M  115M  37% /boot
/dev/test       ext4    93M  2.1M   86M   3% /app/logs
/tmp/test_block ext4    93M  1.6M   87M   2% /mnt
磁盘占用率下降,得以解决这个问题

1.6.2 inode被占满

inode被沾满的原因,小文件过多,一个文件就要占用一个inode,inode的数量是有限的,所以小文件过多,很少消耗block,所以inode就被占满了。
1.6.2.1 模拟环境
[root@oldboy_50 mnt]# touch file_inode{1..100000}.txt
touch: cannot touch `file_inode27266.txt': No space left on device
touch: cannot touch `file_inode27267.txt': No space left on device
1.6.2.2 解决办法:
小文件多,说明他的所在的目录大小肯定大,因为文件名是存放在上级目录的block里面的,小文件多,就说明文件名多,文件名多,就说明占用上级目录的block多。解决思路就是用find查找目录大小大大的文件。
[root@oldboy_50 /]# find / -type d -size +1M
/mnt
[root@oldboy_50 /]# ls /mnt/ |xargs rm -rf

1.6.3 被进程占用,找到调用这个文件的进程,删除然后重启一下服务就行。

1.7 Linux下删除文件的原理

Linux文件属性详解
Linux文件属性详解

1.8 Linux删除文件的详解

Linux文件属性详解
Linux文件属性详解
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-07-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文件属性(ls -lhi查看到的信息)
    • 1.1 第一列:inode号
      • 1.1.1 什么是inode
      • 1.1.3 inode的大小
      • 1.1.4 如何查看inode的数量和大小:
      • 1.1.5 inode号码
      • 1.1.6 目录文件
      • 1.1.7 inode总结
      • 1.1.8 block总结
    • 1.2 文件类型
      • 1.3 权限:
        • 1.3.1 普通权限
        • 1.3.3 特殊权限
        • 1.3.4 文件的访问控制列表
        • 1.3.5 粘滞位权限(待补充)
      • 1.4 链接
        • 1.4.1 硬链接
        • 1.4.2 软链接
      • 1.6 系统创建文件提示:no space left on device磁盘空间不足
        • 1.6.1 block被占满:
        • 1.6.2 inode被占满
        • 1.6.3 被进程占用,找到调用这个文件的进程,删除然后重启一下服务就行。
      • 1.7 Linux下删除文件的原理
        • 1.8 Linux删除文件的详解
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档