• 五、文件属性


    linux文件和目录的属性及权限

    文件属性:在linux中一切都是文件

    [root@pyrene ~]# ls -lih

    total 68K

    394246 -rw-------. 1 root root 1.3K Nov 27 10:14 anaconda-ks.cfg

    403213 drwxr-xr-x. 2 root root 4.0K Nov 29 18:01 data

    400372 -rw-r--r--. 1 root root  292 Nov 29 19:03 ett.txt

    393218 -rw-r--r--. 1 root root  29K Nov 27 10:14 install.log

    393219 -rw-r--r--. 1 root root 6.9K Nov 27 10:12 install.log.syslog

    394178 drwxr-xr-x  6 root root 4.0K Dec  5 22:24 oldboy

    394184 -rw-r--r--. 1 root root   31 Nov 30 11:30 oldboy.txt

    393221 -rw-r--r--. 1 root root   18 Nov 29 18:26 test.txt

    第一列:是文件索引节点号(身份证号),系统读取文件时首先通过文件名找到inode然后才能读取到文件内容

    第二列:文件的类型以及权限,如果算点是11个字符,第一个字符是文件类型,后9个字符是权限,点是selinux相关的标识

    第三列:硬链接的数量

    第四列:拥有者,文件或目录所属的用户(属主)

    第五列:文件及目录属于的组

    第六列:文件或目录的大小

    第七列:

    第八列:

    第九列:这三列是文件的修改时间,分别是月日时分,

    第十列:文件名,严格来说不算文件的属性

    2、索引节点inode

    硬盘要存储数据,首先要分区,然后格式化创造文件系统,最后存数据

    inode,中文意思是索引节点,在每个linux存储设备或者存储设备的分区(存储设备可以是应哦按,软哦按等)被格式化ext4文件系统后,一般有两部分,第一部分是inode很多个第二部分是block

    block是用来存储实际数据用的,如照片,视频等普通文件数据

    而inode就是用来存储这些数据属性信息的也就是ls –l的结果,inode包含的属性信息包括文件大小、数组、属主、归属的用户组、读写权限、文件类型、修改时间,还包含指向文件实体的指针的功能呢个,但是inode唯独不包含文件名

    inode除了记录文件属性的信息外,还会为每个文件进行信息索引,所以就有了inode

    的数值,操作系统根据指令,即可通过inode的值最快的找到相对应的文件实体,文件inode,block的关系如下图

    一个文件只能有一个inode,然后一个inode里面有很多的block

    打个比方,存储设备或者分区就相当于一本书Block就相当与书中每一页的内容,而inode就相当与这本书前面的目录,一本书有很多内容,一个知识点可以有多页,如果想查找到某部分或知识点的内容,我们一般先查看书的目录,通过目录就能更快的找到我们想要看的知识点的内容,虽然不太恰当,但是还是比较形象的

    显示inode

    方法1

    [root@pyrene ~]# ls -li oldboy

    总用量 16

    394189 drwxr-xr-x 3 root root 4096 12月  5 22:23 ext

    394221 -rw-r--r-- 1 root root    0 12月  5 22:24 golang

    394223 -rw-r--r-- 1 root root    0 12月  5 22:24 html

    394205 -rw-r--r-- 1 root root    0 12月  5 22:24 json

    394203 drwxr-xr-x 2 root root 4096 12月  5 22:24 pyrene

    394219 -rw-r--r-- 1 root root    0 12月  5 22:24 python

    394199 drwxr-xr-x 2 root root 4096 12月  5 22:23 test

    394201 drwxr-xr-x 2 root root 4096 12月  5 22:23 xiaodong

    方法2

    [root@pyrene ~]# stat oldboy

      File: "oldboy"

      Size: 4096          Blocks: 8          IO Block: 4096   目录

    Device: 803h/2051d    Inode: 394178      Links: 6

    Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)

    Access: 2017-12-12 11:38:06.028315604 +0800

    Modify: 2017-12-05 22:24:44.526409821 +0800

    Change: 2017-12-05 22:24:44.526409821 +0800

             因为inode要存放文件的属性信息,所以每个inode本身是有大小的centos5 系列的inode的默认大小是128字节,而centos6的inode的默认大小是256字节,inode的大小在文件系统被格式化之后就无法改变了,格式化前可以指定inode大小,但是一般工作环境没这个需求

             不同centos版本的inode大小不同

    查看剩余的inode

    [root@pyrene ~]# df -i

    Filesystem      Inodes IUsed   IFree IUse% Mounted on

    /dev/sda3      1236992 86772 1150220    8% /

    tmpfs           125514     1  125513    1% /dev/shm

    /dev/sda1       102400    44  102356    1% /boot

    问题:

    磁盘满了,可能有两种情况 (no space on device left)

             1、inode满了

             2、block满了

    小结:

    1)磁盘被分区并格式化为ext4文件系统后会生成一定数量的inode和block

    2)inode被称为索引节点,他的作用是存放文件的属性信息以及作为文件的索引(指向文件实体)

    3)ext3/ext4文件系统的block存放的是文件的实际内容

    4)inode是磁盘上的一块存储空间centos6非启动分区inode默认大小256字节,centos5是128字节

    5)inode的表现形式是一串数字,不同的文件对应inode(遗传数字)在文件系统里是唯一的

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

    7)ext3/ext4文件系统下,一个文件被创建后至少要占用一个inode和一个block

    8)ext3/ext4文件系统下,正常情况一个文件占用且只能占用一个inode(人和身份证)

    9)block是用来存储实际数据的,每个block的大小一般有1k,2k,4k集中,其中引导分区等为1k,其他普通分区多为4k(centos6)

    10)如果一个文件很大(高清的大片4G),可能占多个block,如果文件很小(0.01k)至少占用一个block,并且这个block的剩余空间就浪费了,即无法在存储其他数据了

    11)inode大小和总量怎么查看

    [root@pyrene ~]# dumpe2fs /dev/sda3|grep -iE "block count|inode count"

    dumpe2fs 1.41.12 (17-May-2010)

    Inode count:              1236992

    Block count:              4943616

    Reserved block count:     247180

    [root@pyrene ~]# dumpe2fs /dev/sda3|grep -iE "block size|inode size"

    dumpe2fs 1.41.12 (17-May-2010)

    Block size:               4096

    Inode size:                  256

    12)查看inode的总量和使用量

             命令df –i

    13)查看文件的inode

             ls –li或者stat /etc/hosts(指定文件)

    14)如何生成及指定inode大小

    格式化命令:mkfs.ext4 –b 2048-I 256 /dev/sdb

    这里有个面试题:

    df –h 查看磁盘空间没满,但是插入数据的时候,发现插入不进去,怎么回事?

    解答:inode满了

    有关block的知识小结

    1)磁盘读取数据是按照block为单位读取的

    2)一个文件可能占用多个block,但是每读取一个block就会消耗一次磁盘io

    3)如果要提升磁盘IO性能没那么就要尽可能一次读取数据尽量的多

    4)一个block只能存放一个文件的内容,无论内容有多小,如block默认是4k大小,那么存放一个1k的文件,剩余3k就不能存放别的文件,只能浪费了

    5)block并非越大越好,block太大对于存放小文件就会浪费磁盘空间,如,1000k的文件,block大小为4k占用250个block,如果block默认为1k,则需要1000个block,访问效率谁更高?消耗IO分别为250次和1000次

    6)根据业务需求,确定默认的block大小,大文件(大于16k)一般设置block大一些,小文件(低于1k)一般设置block小一点

    7)block太大例如4k,文件都是0.1k,大量浪费磁盘空间,但是访问性能高

    8)block太小,例如1k,文件都是1000k,消耗大量磁盘io

    9)block大小设置也是格式化分区时候确定的,命令mkfs.ext4 –b 2048 –I 256 /dev/sdb

    10)企业文件都会比较大(一般会大于4k),block设置大一些会提升磁盘访问效率

    11)ext3/ext4文件系统(centos5/6)一般设置为4k

    总的小结

    1)磁盘分区格式化文件系统后,会分为inode和block两部分内容

    2)inode存放文件的属性以及指向文件实体的指针,文件名不再inode里面一般上级目录的block

    3)访问文件,通过文件名—》inode---》blocks

    4)inode一般情况大小默认256b,block大小1,2,4k,注意引导分区等特殊分区除外

    5)通过df –i查看inode的数量级使用情况,dumpe2fs /dev/sda3查看inode及block的大小及数量

    6)一个文件至少要占用一个inode及block,多个文件可以占用用一个inode(硬链接)相同文件

    7)一个block只能被一个文件使用,如果文件很小,block很大,剩余空间浪费,无法继续被其他文件使用

    8)block不是越大越好,要根据uewu的文件大小进行选择,一般centos6默认是4k

    文件类型介绍

    在linnx系统中,可以说一切皆是文件,文件类型有普通目录,文件,链接文件等

    在ls –l显示文件属性内容后,第一列的第一个字符就是用来区分文件类型的

    d    表示这是一个目录,如上文ext,在ext2fs中,目录是一个特殊的文件

    -     表示这是一个普通的文件,

    l     表示这是一个符号链接文件,实际上它指向另一个文件

    b     表示块设备和其他外围设备,是特殊类型的文件

    c     表示字符设备文件

    s     表示socket文件

    p     表示管道文件

    f     普通文件

    普通文件有三种:

    1)纯文本文件,我们可以直接读取的文件

    2)二进制文件,linux中的命令程序就属于这种格式

    3)数据格式文件,有些程序在运行的过程中读取某些特定格式的文件,这些特定格式文件可以称之为数据文件

    文件属性文件权限基础知识

    权限一共有12位权限位,上面是9位

    r:read,读的权限 对应是 4

    w:write  写   对应的是2

    x:执行   对应的是1

    -:没有权限,对应数字是0

    上面9位分为三位一组,  前三个是对应用户权限,中间的三位对应的是 用户组。最后三位是其他用户权限位

    [root@pyrene ~]# ls -lih

    总用量 68K

    394246 -rw-------. 1 root root 1.3K 11月 27 10:14 anaconda-ks.cfg

    403213 drwxr-xr-x. 2 root root 4.0K 11月 29 18:01 data

    400372 -rw-r--r--. 1 root root  292 11月 29 19:03 ett.txt

    393218 -rw-r--r--. 1 root root  29K 11月 27 10:14 install.log

    393219 -rw-r--r--. 1 root root 6.9K 11月 27 10:12 install.log.syslog

    394178 drwxr-xr-x  6 root root 4.0K 12月  5 22:24 oldboy

    394184 -rw-r--r--. 1 root root   31 11月 30 11:30 oldboy.txt

    393221 -rw-r--r--. 1 root root   18 11月 29 18:26 test.txt

    上面这个-rw-r--r--. 在selinux关闭的时候就没有了

    linux软硬链接

    概念:

    linux链接有两种:一种为硬链接,另一种为软连接或符号链接。我们在前面讲结果ln这个命令就是创建连接文件

    硬链接:ln 源文件 目标文件

    软连接:ln –s源文件 目标文件(目标文件不能事先存在)

    硬链接是通过索引节点(inode)来进行连接,在linux(ext2,ext3,ext4)文件系统中,保存在磁盘分区中的文件不管是什么类型都会给他分配一个编号,这个编号被称为索引节点编号,简称inode,即在系统中文件的编号

             在linux文件系统中,多个文件名指向同一个索引节点是正常的,这就是硬链接,相当于文件的另一个入口

    作用:允许一个文件拥有多个有效路径

    在linux系统中,删除静态文件(没有进程调用)(目录也是文件)的条件是与之相关的所有硬链接全部删除

    硬链接知识小结:

    1)具体相同inode节点号的多个文件是互为硬链接文件

    2)删除硬链接文件或者删除源文件任意之一,文件实体并未被删除

    3)只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除

    4)当所有的硬链接文件及源文件被删除后,再放到新的数据会占用这个文件空间

    5)硬链接文件就是文件的另一个入口(相当于超市的前们,后门一样)

    6)可以通过给文件设置硬链接文件,来防止重要文件被误删

    7)通过执行命令“ln 源文件  硬链接文件”,即可完成创建硬链接

    8)硬链接文件是普通文件,因此可以用rm命令删除

    9)对于静态文件(没有进程正在调用的文件)来讲,当对应硬链接数位0,文件就会被删除,查看方法(ls –l结果第三列就是)

    软连接的创建:

    ln –s 源文件 软连接文件

    软连接知识小结:

    1)软连接类似于windows的快捷方式

    2)软连接类似一个文本文件,里面存放的是源文件的路径,指向源文件实体

    3)删除源文件,软连接依然存在,但是无法访问指向的源文件路径内容

    4)软件街的创建

    5)软件街和源文件是不同类型的文件,也是不同的文件 inode号不相同

    6)删除软连接文件可以用rm命令

    有关目录小结:

    1)对于目录,不可以创建硬链接,但是可以创建软连接

    2)对于目录的软连接是声场产经韵味中常用的技巧

    3)目录的硬链接不能跨文件系统

    4)每个目录下面都有一个硬链接“.”和对应上级目录的硬链接“..”

    5)在父目录里面创建一个子目录,父目录的连接数增加1(子目录中有..来指向父目录)但是在父目录里创建文件,父目录的链接数不会增加,请问下面你的目录链接数为什么是3

    [root@pyrene ~]# mkdir pyrene

    [root@pyrene ~]# cd pyrene/

    [root@pyrene pyrene]# mkdir pyrenedir

    [root@pyrene pyrene]# ls -a pyrenedir/.. ../pyrene -dil

    402980 drwxr-xr-x 3 root root 4096 12月 16 00:11 ../pyrene

    402980 drwxr-xr-x 3 root root 4096 12月 16 00:11 pyrenedir/..

    原因是pyrenedir 和.以及pyrenedir的..

    题目:

    linux下通过mkdir命令创建一个新目录/oldboy/ett,它的硬链接数是多少,为什么?

    2,原因是有当前目录.和上级目录..

    如果/oldboy/ett下面再创建一个目录test,请问/oldboy/ett的硬链接数是多少,为什么?

    [root@pyrene oldboy]# ls -ld ../oldboy/ett

    drwxr-xr-x 2 root root 4096 12月 16 00:19 ../oldboy/ett

    [root@pyrene oldboy]# mkdir ../oldboy/ett/test

    [root@pyrene oldboy]# ls -ld ../oldboy/ett/

    drwxr-xr-x 3 root root 4096 12月 16 00:19 ../oldboy/ett/

    3,原因是test这个目录有..这个ett的硬链接

    151

    用户和组 /etc/passwd

    linux是一个多用户,多任务的操作系统

    linux系统中是分角色的,用户的角色是通过UID和GID识别的,特别是UID,在linux系统运维工作中,一UID是唯一标识一个系统用户的账号(详单于我们的身份证),用户的UID就相当与我们的身份证一样,用户名就相当与我们的名字

    UID:用户id,相当与身份证

    GID:组id  ,相当与家庭或者学校id

    用户分类:

    超级用户: 默认是root,UID和GID均为0

    在企业中没有特殊需求,尽量都用普通用户

    普通用户:具有系统管理员root的权限的运维。只能操作自己家目录的权限。为普通用户授权  (sudo)

    虚拟用户:linux中所有文件都要对应用户和组。

    0 是超级用户

    1-499 是虚拟用户(傀儡)

    500-65535 是普通用户(可以提权)

    152

    用户和组的配置文件

    和用户相关的

    /etc/passwd   用户的配置文件

    /etc/shadow   用户的密码文件

    用户组相关的

    /etc/group    用户组的配置文件

    /etc/gshadpw   用户组密码的配置文件

    通过useradd 就会动上面的四个文件

    账号名称不能重复

    账号密码,由于安全问题转移到shadow里面了

    GID范围 0-65535

    UID  范围0-65535

    用户说明 这个字段是对这个账号的描述说明

    用户家目录 用户登录后首先进入目录一般为/home/用户名 这样的目录

    设立了解释器  当时间

    前用户登录后所使用的shell

    时间

    [root@pyrene ~]# ls -lhi /oldboy/

    总用量 12K

    786553 -rw-r--r--. 1 root root    0 11月 30 11:54 a

    786593 -rw-r--r--. 1 root root    0 11月 30 11:54 b

    786603 -rw-r--r--. 1 root root    0 11月 30 11:54 c

    786734 -rw-r--r--  1 root root  120 12月 11 00:41 nginx.conf

    786447 drwxr-xr-x. 2 root root 4.0K 11月 30 12:04 test

    786619 -rw-r--r--. 1 root root    7 11月 30 12:04 test.sh

    7 8 9是显示修改时间

    [root@pyrene ~]# ls -l --time-style=long-iso /oldboy/  规范时间

    总用量 12

    -rw-r--r--. 1 root root    0 2017-11-30 11:54 a

    -rw-r--r--. 1 root root    0 2017-11-30 11:54 b

    -rw-r--r--. 1 root root    0 2017-11-30 11:54 c

    -rw-r--r--  1 root root  120 2017-12-11 00:41 nginx.conf

    drwxr-xr-x. 2 root root 4096 2017-11-30 12:04 test

    -rw-r--r--. 1 root root    7 2017-11-30 12:04 test.sh

    Modify   -mtime 修改时间

    Change    ctime 改变时间

    Access      atime 访问时间

    [root@pyrene ~]# stat oldboy    查看文件等时间状态

      File: "oldboy"

      Size: 4096               Blocks: 8          IO Block: 4096   目录

    Device: 803h/2051d         Inode: 394178      Links: 7

    Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)

    Access: 2017-12-17 16:29:25.429280855 +0800

    Modify: 2017-12-16 00:19:01.461016830 +0800

    Change: 2017-12-16 00:19:01.461016830 +0800

    第10列文件名,不再文件inode里面,而是上级目录的block里面

  • 相关阅读:
    poj 2253
    POJ 3273
    python基本运算符
    python基本数据类型以及常量变量
    pycharm的快捷键
    计算机基础
    day100 scrapy请求传参 中间件 去重规则 分布式爬虫
    day99 爬虫 scrapy介绍 结构介绍
    day98 爬虫 selenium
    day97 爬虫bs4
  • 原文地址:https://www.cnblogs.com/pyrene/p/8052800.html
Copyright © 2020-2023  润新知