linux中,文件查找不是通过文件名称来查找的。实际上是通过i节点来实现文件的查找定位的。我们可以形象的将i节点看做是一个指针fip。当文件存储到磁盘上去的时候,文件肯定会存放到一个磁盘位置上,可以这样想象,既然文件数据是存放在磁盘上的,如果我们知道这个文件数据的地址,当我们想要读写文件的时候,我们是不是直接使用这个地址去找到文件就可以了呢?
是的,linux下,i节点其实就是可以这么认为,把i节点看作是一个指向磁盘上该文件存储区的地址。只不过这个地址我们一般是没办法直接使用的,而是通过文件名来间接使用的。事实上,i节点不仅包含了文件数据存储区的地址,还包含了很多信息,比如数据大小,等等文件信息。但是i节点是不保存文件名的。文件名是保存在一个目录项中。每一个目录项中都包含了文件名和i节点。
# 查看inode
[root@nfs nginx-1.22.0]# ls -i
4462528 auto 134337974 contrib 67338876 man 202031542 --with-http_dav_module 202031543 --with-http_stub_status_module
201773394 CHANGES 4462529 html 68635687 objs 202031546 --with-http_flv_module 202031545 --with-http_sub_module
201773393 CHANGES.ru 202030885 libmcrypt-2.5.8.tar.gz 201773392 README 202031550 --with-http_gzip_static_module 202031548 --with-pcre
67338875 conf 201773391 LICENSE 201604954 src 202031547 --with-http_mp4_module
201773390 configure 202031551 Makefile 202031544 --with-http_addition_module 202031549 --with-http_ssl_module
# 删除指定的inode节点
[root@nfs nginx-1.22.0]# find -inum 202031544 -delete
# 批量删除inode
[root@nfs nginx-1.22.0]# ll -i | grep with | awk '{print $1}'
202031542
202031546
202031550
202031547
202031549
202031543
202031545
202031548
[root@nfs nginx-1.22.0]# for i in `ll -i | grep with | awk '{print $1}'` ; do find -inum $i -delete ; done