五、文件属性

 

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里面

 

posted @ 2017-12-17 18:18  pyrene  阅读(348)  评论(0编辑  收藏  举报