五、文件属性
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里面