1、文件或目录属性 Linux 文件或目录的属性主要包括:文件或目录的节点、种类、权限模式、链接数量、所归属的用户和用户组、最近访问或修改的时间等内容。具体情况如下: 命令: ls -lih 输出:[root@localhost test]# ls -lih 总计 16K 2095113 drwxr-xr-x 6 root root 4.0K 10-27 01:58 scf 2095109 drwxrwxr-x 2 root root 4.0K 11-13 06:08 test3 2095131 drwxrwxr-x 2 root root 4.0K 11-13 05:50 test4 2095112 -rw-r--r-- 1 root root 2.0K 11-13 06:03 log2012.log 2095120 lrwxrwxrwx 1 root root 11 11-22 06:58 linklog.log -> log2012.log
说明: 第一列:inode索引节点编号,系统读取文件时首先通过文件名找到inode,然后才能读取到文件的内容。 第二列:文件种类和权限; 文件类型:d表示目录,-表示文件 文件权限:文件权限是rw-r--r-- ,表示文件属主可读、可写、不可执行;文件所归属的用户组不可写,可读,不可执行;其它用户不可写,可读,不可执行; 第三列: 硬链接个数;硬链接个数: log2012.log这个文件没有硬链接;因为数值是1,就是他本身 第四列: 文件属主:也就是这个文件归哪于哪个用户 ,它归于root,也就是第一个root; 第五列:文件属组:也就是说,对于这个文件,它归属于哪个用户组,在这里是root用户组; 第六列:文件或目录的大小; 第七列和第八列:最后访问或修改时间; 第九列:文件名或目录名
2、inode:索引节点
inode 索引节点index node。每个存储设备或存储设备的分区(存储设备是硬盘、软盘、U盘等等)被格式化为文件系统后,有两部份,一部份是inode(很多个),另一部份是Block(很多个),Block是用来存储数据用的。inode是用来存储这些数 据的信息包括文件大小、属主、归属的用户组、读写权限,还包含指向文件实体的指针,但是inode不包括文件名,文件名严格来说不算属性。
inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令, 能通过inode值最快的找到相对应的文件,访问文件通过 文件名--->inode--->block. 多个文件占用同一个inode互为链接文件。 inode对应磁盘上的一块分区空间,每个inode是有大小的,centos 5系列默认inode大小128字节,centos 6系列默认inode大小256字节,
3、block:数据块 磁盘读取数据是按照block读取的; 一个文件可能占用多个block,但是每读取一个block,就消耗一个磁盘I/O,为提高磁盘I/O性能,可将block适当设置大一点,使一次性读取的数据尽量多一点。 一个block只能存放一个文件的内容,即使有剩余也不能再装其他文件的内容,剩余的就浪费了。 block不是越大越好,太大存放小文件(一般小文件小于1K,大文件一般大于16K)容易浪费磁盘空间,太小不利于提高磁盘I/O性能。
block一般大小为1K,2K,4K,引导分区为1K,普通分区为4K(centos 6系列) 磁盘空间取决于inode和block两项,任何一项满了,磁盘就满了。 ext3/ext4文件系统下,一个文件被创建至少占用一个inode和一个block,在同一块磁盘上不同文件的inode 是不同的,位于不同磁盘的文件的inode可能相同,如位于内存中的/proc 的inode为1,位于磁盘上的/sys 的inode也为1.
4、查看命令
查看文件系统inode总量及剩余量用 df -i
查看磁盘使用量用 df -h
查看inode和block的大小和数量用 dumpe2fs [文件]
文件删除恢复ext3grep
5、企业环境中操作文件,应当先备份再操作,做到能够还原,不能还原的,应当先在测试环境中测试再操作。 企业生产环境一般block设置为4K(centos 5和6系列),centos 7系列例外。 企业环境中inode是够用的,block 消耗的快。企业场景中小文件太多的话会导致inode不够用。
6、文件类型,find -type 查看文件类型, Linux中只有以下7中文件类型,没有其他的.... 在Linux中,一切皆为文件。包括普通文件,目录,字符设备文件,块设备文件,符号链接文件,管道文件等等。 1.普通文件(-):通过file [文件]查看文件类型 2.目录(d) 3.字符设备文件(c) 4.块设备文件(b) 5.套接口文件(s)[如我们开启MySQL服务后,在/var/lib/mysql/下生成的mysql.sock文件,关闭MySQL服务后,这个文件就消失了] 6.管道(p):主要用来解决多个程序同时访问同一个文件产生的错误。 7.符号链接文件(l):文件的快捷方式
7、普通文件(-):通过file [文件]查看文件类型 纯文本文件(ASCII),内容可以直接读到,如配置文件,可用cat直接读到。 二进制文件(binary),Linux中的命令程序属于这种文件, 数据格式文件(data),如Linux用户登录的数据记录在/var/log/wtmp就属于数据格式文件,只能用last命令读取。 目录文件:通过ls -F 区分文件和目录,后面带/的为目录。 dengtest.txt java/ test tomcat/ 字符设备文件:字符设备文件表示串行端口的接口设备,如modem。用"c" 表示。crw-rw-rw- 1 root tty 5, 0 Apr 6 19:35 /dev/tty 块设备文件:存储有数据供系统访问的接口设备,如硬盘光驱。用"b" 表示。brw-rw-rw- 1 root tty 5, 0 Apr 6 19:35 /dev/sda 一般用mknod来创建字符或块设备文件,用rm 删除。 套接口文件:一般用于网络连接
8、文件扩展名: .tar,.zip表示压缩文件, .sh表示shell文件, .py表示python语言文件, .pl表示perl语言文件, .html .php .jsp .do 表示网页文件 .conf表示配置文件 .rpm表示rpm安装包文件
9、文件链接(软硬链接要画图)
9.1在Linux中,链接文件分为硬链接 (hard link)和软链接(符号链接symbolic link or soft link), 9.2在不带参数时,执行ln [源文件] [链接文件] 默认创建硬链接,执行ln -s 创建软链接,软链接文件类型为l. readlink [软连接文件] :查看软连接文件的源文件 9.3硬链接通过inode链接文件。 9.4在Linux中,多个文件名指向同一个索引节点时,这样的文件互为硬链接文件。 9.5硬链接相当于另一个文件入口,一个文件有一个以上硬链接可以防止文件误删。只删除硬链接文件和源文件其中之一,文件并未被删除,只有删除所有的硬链接文件和源文件,文件实体才会被删除,所占用的磁盘空间被系统回收。 9.6对于静态文件(进程未调用),硬链接数为0时,表示文件被删除。 9.7软链接相当于快捷方式,软链接文件实质是一个文本文件,里面存放源文件的存放路径。删除源文件,软链接依然存在,但无法访问源文件内容,显示红底白字闪烁失效状态。 9.8软链接和源文件是不同类型的文件,也是不同的文件,inode也不相同。 9.9删除硬链接文件对源文件和软链接文件没有影响,删除源文件,对硬链接文件没有影响,对软链接会显示失效。 9.10很多硬件设备的快照功能就是利用了硬链接的原理
10.目录链接 10.1对于目录不可以创建硬链接,但可以创建软链接。 10.2硬链接不能跨越文件系统。软链接可以跨文件系统。 10.3每个目录下面都有一个硬链接“.”,和对应上级目录的硬链接“..”。 10.4在父目录里创建一个子目录,父目录的链接数加1(子目录会有..指向父目录),在父目录里创建一个文件,父目录的链接数不变。
11、文件删除原理(画图)
Linux是通过link的数量控制文件删除的,只有当文件不存在任何链接时,该文件才会被删除,一般每个文件有两个link计数器: i_count 和 i_nlink。
i_count: 引用计数器,文件被进程引用,i_count数增加 ,可以认为是当前文件使用者的数量;
i_nlink: 硬链接数目(可以理解为磁盘的引用计数器),创建硬链接对应的 i_nlink 就会增加
对于rm命令来说,实际就是减少磁盘的引用计数 i_nlink 。如果当文件被另外一个进程调用时,用户执行rm命令删除文件,再去cat文件内容时就会找不到文件,但是调用该删除文件的那个进程却仍然可以对文件进行正常的操作。这就是因为 i_nlink 为 0 ,但 i_count 并不为 0 。只有当 i_nlink 和 i_count 均为 0 时,文件才会被删除(这里的删除是指将文件名到 inode 的链接删除了,但文件在磁盘上的block数据块并未被删除)。