Linux文件介绍

Linux文件介绍

Linux 文件属性

可以通过命令ll+文件名,查看文件的具体属性

例如:ll syz.gz

1736706 -rw-r--r--. 1 root root 28 Oct 27 12:01 syz.gz
     ①            ②      ③  ④   ⑤   ⑥  ⑦  ⑧     ⑨       ⑩
第一列①:iNode索引节点编号#(类似人的身份证,全国唯一);
系统读取文件时首先通过文件名找到inode,然后才能读取到文件内容。
第二列②:文件类型及权限(共11个字符,第一个字符为类型,后9个字符为文件权限)
最后一个字符“.”表示与selinux相关的标识(没太大作用)
第三列③:硬链接(同一个文件的不同入口数)个数(详细参看ln命令的讲解。)
第四列④:文件或目录所属的用户(属主)
linux里面文件和程序的存在必须要有用户和组满足相应的存在需求。
第五列⑤:文件或目录所属的组
第六列⑥:文件或目录的大小
第七、八、九列:文件的目录的修改时间:默认为:月日时分
第十列:实际的文件名或目录名

Linux文件的权限

说明:linux中每个文件或目录都有一组共9个基础权限位,每三位字符被分为一组,他们分别是属主权限位(占三个字符)、用户组权限位(占三个字符)、其他用户权限位(占三个字符)。比如rwxr-xr-x,在linux中正是这9个权限位(更多权限位后面会提到),来控制文件属主、用户组以及其他用户的权限。

权限位说明

linux文件或目录权限位是由9个权限位来控制,每三位为一组,它们分别是文件属主(owner)的读、写、执行,用户组(group)的读、写、执行以及(other)其他用户的读、写、执行。

权限位 说明
r read可读权限 对应数字是:4
w write 可写权限 对应数字是:2
x Execute 可执行权限 对应数字是:1
- 没有任何权限 对应数字是:0

注:后面还会有特殊权限位:t T s S X x +

linux(普通文件)的读、写、执行权限说明

1、可读r:表示具有读取、阅读文件内容的权限。
2、可写w:表示具有新增、修改文件内容的权限。(并不是说可以删除文件)
1)如果没有r,那么vi会提示无法编辑(可强制编辑即“:wq!”),echo 可以重定向或追加);
2)特别提示:删除文件(修改文件名等)的权限受父目录的权限控制,和文件本身权限无关。
3、可执行x:表示具有执行文件的权限。
1):文件本身要能够执行
2):普通用户同时还需要具备r的权限才能。
3):root只要有x的权限就能执行。

(linux目录)的读、写、执行权限说明

1、可读r:表示具有浏览目录下面文件及子目录的权限,即ls dir
1)如果没有x权限,不能进到目录里,即无法cd dir
2)如果没有x权限,ls列表时可以看到所有文件名,但是会提示无权访问目录下文件。
3)如果ls -l列表,所有的属性会带有问好,也会提示无权访问目录下文件。
但是可以看到所有文件名。
2、可写w:表示具有增加、删除或修改目录内文件名(一般指文件名)的权限(需要x权限配合)
3、可执行x:表示具有进入目录的权限,例如 :cd dir
但是没有r无法列表文件及目录,没有w无法新建和删除。

索引节点inode(index node)

硬盘要存储数据(房子住人),首先要分区(隔断),然后格式化,创建文件(装修),最后存数据(住人)。

inode ,在每个linux存储设备或存储设备的分区(存储设备 是硬盘、软盘。。。)被格式化为ext4(CentOS6.7)文件系统后,一般生成两部分:第一部分生成Inode(很多个)第二部分是Block(很多个);这个Block是用来存储手机数据用的,例如:照片,视频等普通文件数据。而inode就是用来存储这些数据的属性信息,inode的属性信息包括不限于文件大小、属主(用户)、归属的用户组、文件的权限、文件的类型、修改时间、还包含指向文件实体的指针的功能(inode节点--blcok的对应关系)等,但是inode里面唯独不包含文件名。inode除了记录文件属性的信息外,还会为每个文件进行信息索引,索引就有了inode的数值。操作系统根据指令,即可通过inode的值最快的找到相对于的文件实体。因为inode要存放文件的属性信息,所以每个inode本身是有大小的,CentOS5 inode默认大小是128字节;而CentOS6系列inode的默认大小是256字节,inode的大小是在分区被格式化创建文件系统之后定下来的,格式化以后就无法更改inode的大小格式化前可以通过参数指定inode的大小,但是一般企业工作环境没有这个需求。

查看文件系统inode的总量以及剩余量的命令:df -i
查看磁盘的使用量的命令:df -h
磁盘空间是否满了,是由两项参数决定的:
第一个是inode是否满了,第二个block是否满了,任何一项满了,都无法放你最喜欢的文件了
磁盘满的一个特征:(no space left on device )

有关inode的小结

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

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

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

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

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

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

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

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

9):block是用来存储实际数据的,他的大小一般有1k,2k,4k几种,其中引导分区等为1k,其他普

通分区多为4k(C6)

10):如果一个文件很大(高清大片),可能需要占用多个block,如果文件很小(0.01),至少占

用一个block,并且这个blockd的剩余空间浪费了,即无法再存储其他数据了。

11):inode大小的总量查看
dumpe2fs /dev/sda3|grep -i "block count|Inode count"
dumpe2fs /dev/sda3|grep -i "block size|Inode size"
默认block count 一般会大于Inode count 的数量。

12):查看inode的总量和使用量命令:df -i

13):查看文件的inode的命令:
ls -li 或stat /etc/hosts

14):如何生成及指定inode大小:
格式化命令:mkfs.ext4 -b 2048 -l 256 /dev/sbd

stat /etc/hosts :查看文件或文件系统的详细属性

有关Block的知识小结

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

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

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;

(当前的生产环境一般设置为4K,特殊的业务,如视频可以加大block大小)block如果设置太大就会浪费磁盘空间,太小就会限制访问速度,所以设置block大小时,需要折中考虑

文件类型介绍

linux系统不同于window系统,两者的文件类型和文件扩展名也有很大的差异,linux系统中的文件类型,和文件扩展名所代表的意义和Windows系统中的是不同的。

在linux系统中,我们一般通过应用程序或命令创建文件,如file.txt、file.tar.gz,这些文件的扩展名不同且要用不同的程序或命令来打开,但都是常规文件(也被称为普通文件)后面附带的后缀文件扩展名(txt.tar.gz),除了让曾经习惯Windows的用户易读外,大多数对于linux系统来说没什么特别实际意义,在linux系统中也是为了易读,二Windows系统中的扩展名就是实实在在表示文件的类型格式。

例如:Windows图片文件扩展名:jpg.jpeg.png.bmp.gif等
文本文件扩展名:doc.docx.txt.pdf

在linux系统中,可以说一切设备(包括目录、普通文件、设备文件等)皆为文件。文件类型包含有普通文件、目录、字符设备文件、块设备文件、符号链接文件、管道文件等等:

在ls -l 显示文件属性内容后,第一列的一个字符就是用来区分文件类型的:
d(directory) 表示这是一个目录,如上文ext,在ext2fs中,目录是一个特殊的文件。
-(regular file) 表示这是一个普通的文件,如上文的oldboy
l(link) 表示这是一个符号链接文件,实际上它指向另一个文件
b(block) 表示块设备和其他的外围设备,是特殊类型的文件。
以上四个为重点,下面三个不经常用
c(character) 表示字符设备文件(串口设备)
s(socket) 表示Socket文件(网络通信的时候、套接字文件)
p(named pipe) 表示管道文件

上一篇:NSIS文字及字符串函数与头文件介绍


下一篇:How do I place a group of functions or variables in a specific section?