学习之前必须要知道:
文件属性的查看:ll -i
[root@oldboy tmp]# ll -ih 1313578 drwxrwx-w- 2 root root 4.0K 2018-07-20 00:32 oldboy1
文件里面包含了以下几个方面:
文件的inode索引节点,文件的类型,文件的硬链接,文件的属主、属组,文件的大小,文件的时间 ,文件名,文件内容
文件属性包含了以下几个方面:
文件属性包括了inode索引节点,文件类型,文件硬链接数,文件属主、属组,文件大小,时间,inode里面的指针。注意:文件名和文件里面的额内容不是文件的属性
分别解释一下:
inode(index node索引节点),它是文件或目录在磁盘里的唯一标识。linux读取文件首先要读取到这个索引节点(相当于书的目录)
第一个字符,代表文件类型(-普通文件,d目录)
第2-10个字符如rw-r–r–是文件的权限(r,w,x,-),r是read,w是write,x是execute,-是没有 [第11个字符’.’,SELINUX相关]
文件的硬链接数。文件的硬链接数是文件的又一个入口
文件对应的属主或者用户
文件对应的属组或用户组
文件的大小
文件被修改的时间(文件的时间戳:atime/mtime/ctime)
下面详细讲解
一、inode (index node)索引节点和block知识点讲解:
1、inode索引节点和block是什么时候生成的?
硬盘要分区,然后格式化,创建文件系统。【所以inode索引节点和block是在文件系统被格式化的时候生成的,在磁盘格式化时候我们还可以修改】
inode,index node索引节点。在每个linux存储设备或存储设备的分区(存储设备可以是硬盘、软盘、U盘…)被格式化为ext4文件系统后,一般有两部分:
第一部分是inode(很多个)
centos5的inode默认大小为128字节 第二部分是block
centos6、7的inode默认大小为256字节
第二部分是block(很多个)
centos6的block的默认大小为1k、2k、4k、2的n次方倍
block是用来存储实际数据用的,例如:照片、视频等普通文件数据。
而inode就是用来存储这些数据属性信息的(也就是ls -l 的结果),inode包含的属性信息包括文件大小、属主、归属的用户组、权限、文件类型 、修改时间,还包含指向文件实体的指针的功能(inode节点–block的对应关系)等,但是,inode唯独不包含文件名。
当用ls查看某个目录或文件时,如果加上-i参数,就可以看到inode节点了。
[root@oldboy tmp]# ll -ih 1313578 drwxrwx-w- 2 root root 4.0K 2018-07-20 00:32 oldboy1
inode的值是1313578。
2、inode与block
inode除了记录文件属性的信息外,还会为每个文件进行信息索引,所以就有了inode的数值,操作系统根据指令,即可通过inode的值最快的找到相对应的文件实体。文件,inode、block之间的关系如下:
(以书为例:inode就相当于书的目录,block是相当于书的内容)
3、inode细讲:
因为inode要存放文件的属性信息,所以inode是有大小的,
CentOS5 inode的默认大小为128字节,
CentOS6 inode的默认大小是256字节,[启动分区(/boot)默认大小是128字节]
inode的大小在文件系统被格式化之后就无法更改了,格式化时可以指定inode大小
inode大小的修改:mkfs.ext4 -i 2048 -N 8192 /dev/sdb3
知识点总结:
磁盘分区格式化ext4文件系统后会生成一定数量的inode与block。
inode是索引节点,作用是存放文件的属性信息以及作为文件的索引(指向文件的实体)。
ext3/etx4文件系统的block存放的是文件的实际内容。
inode是一块存储空间,CentOS6非启动分区inode默认大小256字节(启动分区inode默认大小为128字节),CentOS5是128字节。
inode是一串数字,不同的文件对应的inode在文件系统中是唯一的。
inode相同的文件,互为硬链接文件(文件又一个入口)。
一个文件被创建后至少要占用一个inode和一个block。
block的大小一般有1K,2K,4K几种。其中引导分区等为1K,其他普通分区为4K(CentOS6)。
如果一个文件很大,可能占多个block,如果文件很小,至少占一个,并且剩余空间不能被其他的文件使用
inode总的数量(个数)和单个大小查看:dumpe2fs /dev/sda3 | grep -iE "inode size|inode count"
[root@oldboy tmp]# dumpe2fs /dev/sda3 | grep -iE "inode size|inode count" dumpe2fs 1.41.12 (17-May-2010) Inode count: 3170304 inode count也就代表能建多少个文件 Inode size: 256 每个inode的大小
inode的总量和使用量查看:df -i
[root@oldboy tmp]# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda3 3170304 86982 3083322 3% / tmpfs 125514 1 125513 1% /dev/shm /dev/sda1 51200 39 51161 1% /boot /dev/sr0 0 0 0 - /media/cdrom
4、block细讲:
知识点总结:
磁盘读取数据是按block为单位读取的。
一个文件可能占用多个block。每读取一个block就会消耗一次磁盘I/O。
如果要提升磁盘IO性能,那么就要尽可能一次性读取数据尽量的多。
一个block只能存放一个文件的内容,无论内容有多小。如果block 4K,那么存放1K的文件,剩余3K就浪费了。
block并非越大越好。block太大对于小文件存放就会浪费磁盘空间,例如:1000K的文件,block为4K,占用250个block,block为1K,占1000个block。
大文件(大于16K)一般设置block大一点,小文件(小于1K)一般设置block小一点。
block太大例如4K,文件都是0.1K的,大量浪费磁盘空间。
block太小例如1K,文件都是1000K,消耗磁盘IO。
block的设置也是格式化分区时候:
mkfs.ext4 -b 4096 /dev/sdb。
文件较大时,block设置大一些会提升磁盘仿效效率。
ext3/ext4文件一般设置为4K。
二、文件类型
在linux系统中,可以说一切皆文件。文件类型包含有普通文件、目录、字符设备文件、块设备文件、符号链接文件等等。
ype c
File is of type c:
b:block (buffered)special块设备文件
c:character(unbuffered)special字符设备文件
d:directory目录
f :regular file普通文件
l :symbolic link符号链接文件
s:socket 套接口文件
文件的七大类型分别是:
- 普通文件 【文件文件、二进制文件、数据(压缩包)文件】 d 目录文件 l 符号链接文件[block] b 块设备文件 c 字符设备文件[character] p 管道文件 s 套接字文件
1、b:block
块设备文件第一个属性为“b”
[root@oldboy mnt]# find /dev -type b|xargs ls -l brw-rw---- 1 root disk 7, 0 Jul 9 22:40 /dev/loop0
2、c:character
字符设备就是串行端口的接口设备,如猫等串口设备。
字符设备文件第一个属性为“c”
[root@oldboy mnt]# find /dev -type c|xargs ls -l crw-rw---- 1 root video 10, 175 Jul 9 22:40 /dev/agpgart
3、s:socket 套接字文件
当我们启动MySQL服务时,会产生一个mysql.sock文件。这个文件的第一个属性是“s”
[root@oldboy mnt]# find / -type s|xargs ls -l srw-rw-rw- 1 root root 0 Jul 9 22:40 /dev/log srwxrwxrwx 1 oldboy oldboy 0 Jul 9 21:40 /tmp/.esd-500/socket srw-rw-rw- 1 root root 0 Jul 9 22:40 /var/run/abrt/abrt.socket srw-rw-rw- 1 root root 0 Jul 9 22:40 /var/run/acpid.socket
4、f :regular file
普通文件第一个属性为“-”。普通文件又分为3种
纯文本文件(ascll):文本内容可以直接读到数据,例如:字母、数字等。可以用cat命令读出文件。
二进制文件(binary):linux当中可执行文件(命令)就是属于这种格式。例如cat这个执行文件就一个二进制文件。
数据格式文件(data):有些程序在运行的过程中会读取某些特定格式的文件,那卸特定格式的文件可以被称为数据文件。例如:linux在用户登录时,都会将登录的数据记录在/var/log/wtmp那个文件内,该文件是一个数据文件。
通过last命令读出来。cat命令会读出乱码。因为他属于一种特殊格式的文件(压缩包也是数据格式文件)。
通过命令判断普通文件的文件类型: file + 文件
[root@oldboy mnt]# file /etc/host host.conf hosts hosts.allow hosts.bak hosts.deny [root@oldboy mnt]# file /etc/hosts /etc/hosts: ASCII text [root@oldboy mnt]# file /bin/cp /bin/cp: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped [root@oldboy mnt]# file /var/log/wtmp /var/log/wtmp: data
5、Linux系统中文件的扩展名
windows里通过扩展名来区分文件类型的。linux里文件扩展名和文件类型没有关系。但为了容易区分和兼容用户使用windows的习惯,我们还是会用扩展名来表示文件类型。举例如下:
源码.tar、.tar.gz、.tgz、.zip、.tar.bz表示压缩文件,创建命令一般为tar,gzip,zip等。
·sh表示shell脚本文件,通过shell语言开发的程序。
.pl表示perl语言文件,通过perl语言开发的程序。
.py表示python语言文件,通过python语言开发的程序。
.html、.htm、.php、.jsp、.do表示网页语言的文件。
.conf表示系统服务的配置文件。
rpm表示rpm安装包文件。
三、Linux文件权限管理
1、文件权限概述
linux中的文件或目录的权限和用户及用户组关联很大。
linux中每个文件或目录都有一组共9个基础权限位,每三位字符被分为一组,他们分别是属主位(占三个字符)、用户组权限位(占三个字符)、其它用户权限位(占三个字符)。比如rwxr-xr-x,linux中正是这9个权限(更多权限位后面会提到)位来控制文件属主、用户组以及其它用户的权限