Linux文件系统由三部分组成:文件名,inode,block(真正存数据)

inode:文件数据都存储在块中,那么很显然,我们必须找到一个地方存储文件的元信息,比如文件的创建者,文件的创建日期,文件的大小等等。这种存储文件元信息的区域叫做inode,中文译名为 索引节点


inode的内容:

inode包含文件的元信息,具体来说有以下内容:

      * 文件的字节数

  * 文件拥有者的User ID

  * 文件的Group ID

  * 文件的读、写、执行权限

  * 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

  * 链接数,即有多少文件名指向这个inode

  * 文件数据block的位置


例如:使用stat命令查看文件inode信息


[wang@localhost ~]$ stat /etc/passwd
  File: `/etc/passwd'
  Size: 1667            Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 925374      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-12-20 20:47:17.929700869 -0500
Modify: 2016-12-20 20:47:11.339701023 -0500
Change: 2016-12-20 20:47:11.340701019 -0500
[wang@localhost ~]$ ll /etc/passwd
-rw-r--r--. 1 root root 1667 Dec 20 20:47 /etc/passwd


inode的大小:

inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。


例如:

查看每个硬盘分区的inode总数和已经使用的数量,可以使用df命令

[wang@localhost ~]$ df -i
Filesystem                    Inodes IUsed   IFree IUse% Mounted on
/dev/mapper/VolGroup-lv_root 1152816 99078 1053738    9% /
tmpfs                         125551     7  125544    1% /dev/shm
/dev/sda1                     128016    38  127978    1% /boot
/dev/sr0                           0     0       0     - /media/CDROM


每个文件最少有一个inode号,操作系统用inode号码来识别不同的文件。


[wang@localhost ~]$ ls -i /etc/passwd
925374 /etc/passwd

[wang@localhost ~]$ ls -i /boot/grub/grub.conf
65031 /boot/grub/grub.conf


查看目录下:

[wang@localhost ~]$ ls -i /boot/
   14 config-2.6.32-431.el6.x86_64            11 lost+found
65027 efi                                     15 symvers-2.6.32-431.el6.x86_64.gz
65025 grub                                    13 System.map-2.6.32-431.el6.x86_64
   17 initramfs-2.6.32-431.el6.x86_64.img     16 vmlinuz-2.6.32-431.el6.x86_64



[wang@localhost ~]$ ll -i /etc/passwd
925374 -rw-r--r--. 1 root root 1667 Dec 20 20:47 /etc/passwd
[wang@localhost ~]$ ls -i /etc/passwd
925374 /etc/passwd


查看目录的inode号:

[wang@localhost ~]$ ls -di /etc/
915715 /etc/


拓展:Linux中的ctime,mtime,atime的区别

ctime:改变时间

mtime:修改时间

改变和修改之间的区别在于改文件的属性还是更改他的内容。chmod a-w myfile,那么这是一个改变

echo foo>>myfile   那么这是一个修改

改变是文件的索引节点发生了改变,修改是文本本身的内容发生了变化

atime:访问时间

访问时间是文件最后一次被读取的时间,因此阅读一个文件会更新它的访问时间,但是他的改变时间和修改时间并没有改变


ls -lc filename       列出文件的ctime

ls -lu filename      列出文件的atime

ls -l filename        列出文件的mtime


ln命令可以创建硬链接:

ln 源文件  目标文件


文件名  --  inode  --  block 

例如:

[wang@localhost ~]$ touch a.txt
[wang@localhost ~]$ ll a.txt
-rw-rw-r--. 1 wang wang 82 Dec 21 04:54 a.txt
[wang@localhost ~]$ ln a.txt a2.txt
[wang@localhost ~]$ ll a.txt
-rw-rw-r--. 2 wang wang 82 Dec 21 04:54 a.txt
[wang@localhost ~]$ ll a2.txt

-rw-rw-r--. 2 wang wang 82 Dec 21 04:54 a2.txt


[wang@localhost ~]$ ls -i a.txt a2.txt
142721 a2.txt  142721 a.txt

测试:

[wang@localhost ~]$ rm -rf a.txt
[wang@localhost ~]$ cat a2.txt
sssssssssssssssssssssssssss
aaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbbbbbbbbbbb
[wang@localhost ~]$ ll a2.txt
-rw-rw-r--. 1 wang wang 82 Dec 21 04:54 a2.txt


总结:硬链接特点,创建时,不能跨分区,不能给文件夹


软件链接:相当于window中的快捷方式

ln -s    源文件或目录  软件链名字


[wang@localhost ~]$ ln -s a2.txt as.txt  
[wang@localhost ~]$ ls
a2.txt  b.txt  Desktop    Downloads   Music  Pictures  Public     text.sh
as.txt  c.txt  Documents  hello.java  mydir  pub       Templates  Videos
[wang@localhost ~]$ ll as.txt
lrwxrwxrwx. 1 wang wang 6 Dec 21 08:28 as.txt -> a2.txt


例如:

[root@localhost wang]# ll /etc/grub.conf
lrwxrwxrwx. 1 root root 22 Nov 21 17:41 /etc/grub.conf -> ../boot/grub/grub.conf


例如:

[root@localhost wang]# ln -s /boot/grub/grub.conf aa.txt

[root@localhost wang]# ln -s /boot/grub ccc


软链接数是不会变的。

[root@localhost wang]# ll /boot/grub/grub.conf
-rw-------. 1 root root 819 Nov 21 17:41 /boot/grub/grub.conf



查看目录的链接数:

[root@localhost wang]# ls test/
test2
[root@localhost wang]# ll -a test/
total 12
drwxr-xr-x.  3 root root 4096 Dec 21 09:05 .
drwx------. 32 wang wang 4096 Dec 21 09:04 ..
drwxr-xr-x.  2 root root 4096 Dec 21 09:05 test2
[root@localhost wang]# cd test/
[root@localhost test]# ls -id .
142707 .
[root@localhost test]#
[root@localhost test]#
[root@localhost test]# ls -id test2/..
142707 test2/..


实例:

web服务器中小文件很多,导致硬盘有空间,单无法创建文件

inode数被用光了


[root@localhost test]# df -i
Filesystem                    Inodes IUsed   IFree IUse% Mounted on
/dev/mapper/VolGroup-lv_root 1152816 99083 1053733    9% /
tmpfs                         125551     7  125544    1% /dev/shm
/dev/sda1                     128016    39  127977    1% /boot
/dev/sr0                           0     0       0     - /media/CDROM


block设置大:效率高,利用率低

block设置小:效率低,利用率高

一般系统默认就行



ext4文件系统和ext3文件系统的强的方面:

  1. ext4和ext3兼容

  2. 更大的文件系统和更大的文件

  3. 无限数量的子目录

  4. 无日志 模式