Linux文件属性信息概述
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。每个文件自诞生之初就带有自己的身份信息,我们把它叫做文件属性。本章我们将详细逐一介绍。
1 | [root@hostlocal ~]# echo zzxe.eu.org > 1.txt |
一、inode(文件节点号)
inode到底是什么?做什么用的呢?要理解inode是什么,我们首先得了解硬盘,文件数据是储存在硬盘上的,物理上的原理我们这里就不做讨论了。硬盘的最小存储单位叫做扇区。每个扇区存储512字节,而连续的8个扇区组成了一个块(block),大小为4kb。文件数据都存储在块中,为了能够方便找到存储数据的位置我们还必须找到一个地方存储文件的属性,这种存储文具属性信息的区域叫做inode(索引节点)。inode记录档案(文件或目录)的属性、及该档案放置在哪一个Block之内的信息。
linux系统内部不使用文件名,而使用inode号码来识别文件,对于系统来说,文件名只是inode号码便于识别的别称,表面上,用户通过文件名,打开文件。实际上是系统找到这个文件名对应的inode号码;然后通过inode号码获取inode信息最后,根据inode信息,找到文件数据所在的块,读出数据。
block 是我们在格式化硬盘的时候规定出来的一个值,这个 block 是由 2 的 n 次方个sector(扇区,大小为512byte) 所集结而成的,假设 block 规划为 4KBytes,则由于一个 inode 与一个block 最多均只纪录一个档案,所以如果一个档案有 0.1 K bytes 。但是,由于你的 block为 4K bytes 。你就会有 3.9 Kbytes 的空间“浪费掉”!所以,当你在格式化硬盘的时候,请千万注意到您的系统的使用范围。
1、 当 block 越小 ( 最小为 0.5K ) 、inodes 越多,可利用空间越多,但是大档案写入效率较差:适合档案数量多但是档案容量小的系统,例如 BBS 或者新闻群组 news 这方面的服务之系统;
2、 当 block 越大 ( 最大可到 16 * 0.5K 以上 ) 、 inodes 数越少,大档案写入效率较佳,但浪费的空间较多:适合档案容量大的系统。
系统无法写入
inode也会消耗硬盘空间,每一个文件都有一个inode,因此有可能发生inode已经用完,但是硬盘还未存慢的情况。这时,就无法在硬盘上创建新文件,虽然这种情况发生的概率远远小于磁盘空间被占满导致的不能创建新文件。所以当我们电脑出现无法写入的时候,我们要检查两个方面,磁盘和inode号。
可能使用到的命令:stat [file]
查看某个文件的各种信息,包括inode信息;df
查看每个硬盘分区的inode总数和已经使用的数量;ls -i
查看文件名对应的inode号码,当操作对象是一个目录时,列出目录下所有文件的文件名和inode号。
二、Linux文件类型
当我们查看目录时,发现shell窗口显示出了详细的文件信息,但是文件或目录名字的颜色各有不同,这些颜色都代表什么意义呢?
知识补充
白色文字:指一般性的文件,例如文本文件、配置文件和源码文件等。蓝色文字:指目录 。青色文字:指链接文件,主要为使用ln命令建立的文件。绿色文字:指可执行的文件,可执行的程序。红色文字:指压缩文件或包文件。红色闪烁的文字:指链接的文件有问题。黄色文字:指设备文件。灰色文字:指其他文件。
Windows系统下,操作系统识别文件类型一般是通过文件名后缀来判断。==虽然Linux系统并不会通过后缀来识别文件,但是文件后缀也要规范、需要根据文件本身的功能属性来添加。==Linux系统下一共分为 7种文件类型:【-】普通文件、【d】目录文件、【c】字符设备文件和【b】块文件、【l】符号链接文件、【s】套接字文件、【p】管道文件。
普通文件:像文本文件、二进制文件,我们编写的源代码文件这些都是普通的文件。
目录文件:目录文件就是文件夹,在linux下面文件夹也是一种文件(特殊的文件)。可以使用vim打开显示。在Linux系统下,会有一些专门的系统调用用于读写文件夹。
字符设备和块设备文件:Linux 系统下,一切皆文件,也包括各种硬件设备。设备文件(字符设备文件、块设备文件)对应的是硬件设备,在Linux 系统中,硬件设备会对应到一个设备文件,应用程序通过对设备文件的读写来操控、使用硬件设备。虽然有设备文件,但是设备文件并不对应磁盘上的一个文件,也就是说设备文件并不存在于磁盘中,而是由文件系统虚拟出来的。一般是由内存来维护,当系统关机时,设备文件都会消失。字符设备文件一般存放在 Linux系统/dev/目录下,所以/dev也称为虚拟文件系统 devfs。字符设备表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置);块设备文件表示为装置文件里面的可供储存的接口设备(可随机存取装置);
符号链接文件:符号链接文件(link)类似于 Windows系统中的快捷方式文件,是一种特殊文件,它的内容指向的是另一个文件路径,当对符号链接文件进行操作时,系统根据情况会对这个操作转移到它指向的文件上去,而不是对它本身进行操作。符号链接分为两种。软连接和硬链接。下面会做详细介绍。
套接字文件:套接字(Socket)是一种用于在计算机之间进行通信的软件组件或接口。它提供了一种标准化的方式,使得应用程序能够通过网络连接进行相互之间的通信。
管道文件:管道文件(pipe)主要用于进程间通信。
三、文件权限
Linux中不同的用户处于不同的地位,拥有不同的权限,表达文件权限的字符共九位,三个为一组,用来表示不同身份用户的权限。
文件权限修改命令:chmod
,修改权限的方法有两种字母法和数字法。
字母法的使用方法如下:chmod u/g/o/a +/- r/w/x [file]
数字法修改权限就是把“rwx” 这些权限用数字来代替 chmod 777 [file]
四、硬链接和软链接
硬链接:
一般情况下,文件名和inode号码是一一对应关系,每个inode号码对应一个文件名,但是Linux系统允许多个文件名指向同一个inode号码,这就意味着,可以用不同的文件名访问同样的内容;对文件内容进行修改,会影响到所有文件名;但是删除一个文件名,不影响另一个文件名访问,相当于源文件的副本,这种情况叫做硬链接。
运行ln [源文件] [链接文件]
这条命令以后,源文件与目标文件的inode号码相同,都指向同一个inode,inode信息中有一项叫做链接数,记录指向该inode的文件总数,这时会加1,反过来,删除一个文件名,会减一,当链接数变为0时,表明没有文件指向这个inode号码,系统就会回收这个inode号码与文件数据块区。
软链接:
文件A与文件B的号码虽然不一样,但是文件A的内容是文件B的路径,A就是B的软链接文件。读取文件A时,系统会自动访问导向文件B的文件名,然后再根据B的inode去访问存储再块中的数据。而这意味着,文件A依赖于文件B而存在,若删除了文件B,打开文件A就会报错。这就是软连接与硬链接最大的不同:文件A指向文件B的文件名,而不是inode号码,文件B的inode链接数不会发生变化。软连接两个文件都具有属于自己的inode与文件块区。
经典案例
一个公司服务器20G的磁盘空间已经占满,里面主要从放的是一些关键的日志文件,文件路径是/var/log/nginx.access.log,需求是日志路径不变,解决磁盘空间不够用的问题。
解决方法:第一步创建一个新目录,例如/data mkdir /data
;第二部把一个新的磁盘挂载至/data mount /dev/sdb /data
;第三步,把原日志文件移动至新磁盘mv /var/log/nginx/access.log /data
;第四步,把原来的路径作为新磁盘的软链接,ln -s /data/access.log /var/log/nginx/access.log
五、文件属主和属组
属主就是这个文件的拥有者,属组就是这个文件拥有者所在的组,对于文件来说,它都有一个特定的所有者,也就是对该文件具有所有权的用户。同时,在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。文件所有者以外的用户又可以分为文件所有者的同组用户和其他用户。
六、Linux时间类型
1.mtime(modify time) 修改时间,文件/目录的修改时间,文件内容修改。
2.ctime(change time) 改变时间,文件/目录的属性的变化,修改时间,大小,硬链接数,权限,所有者,所属组,类型。
3.atime(access time) 访问时间,文件/或目录的访问时间,查看文件之后,内容没变化之前再次访问的话,访问时间不变化