linux搜索文件过程

1.文件中的数据是放在磁盘的数据区中的,而一个文件名则是通过对应的i节点与这些磁盘块联系起来,这些盘块的号码就存放在i节点的逻辑块数组i_zone[]中。在文件系统的一个目录中,其中所有文件名信息对应的目录项保存在该目录名文件的数据块中,例如,root/下的所有文件名的目录项就保存在root/目录名文件的数据块中,而文件系统根目录下的所有文件名信息则保存在指定i节点(1号节点)的数据块中,文件名的目录项结构如下:

struct dir_entry{

unsigned short indoe;//i节点号

char name[NAME_LEN];//文件名

};

目录项结构大小是16B,那么一个逻辑盘块可以存放1024/16=64个目录项。有关文件的其他信息则保存在该i节点号指定的i节点结构中,每个i节点号的i节点都位于磁盘的固定地方。

在打开一个文件时,文件系统会根据给定的文件名找到其i节点号,从而通过其对应i节点信息找到文件所在的磁盘块位置。例如要查找文件/usr/bin/vi的i节点号,文件系统首先从固定i节点号(1号i节点)的根目录开始寻找,即从该i节点号1的数据块中找到名为usr的目录项,从而得到名为usr的目录项,从而得到文件/usr的i节点号,根据该i节点号文件系统可以顺利取得目录usr/的内容,并从其中找到bin的目录项,同理知道bin的i节点号,这样就知道了/usr/bin目录的位置,读取其i节点号的数据块内容,找到vi对应的目录项,从而得到vi的i节点号。

2.与文件相关的数据结构

内核使用文件结构file、文件表file_table[]和内存中的i节点表inode_table[]来管理对文件的访问操作。

struct file
{
	unsigned short f_mode;
	unsigned short f_flags;
	unsigned short f_count;
	struct m_inode *f_inode;//对应的内存i节点
	off_t f_pos;
};
struct file file_table[NR_FILE];

在进程的task_struct中有个成员:struct file *filp[NR_OPEN]是进程使用的所有打开文件的文件结构指针表。文件描述符fd即该结构的索引值。下面一张图很好将三者关系展现出来:

linux搜索文件过程

时间: 2024-10-14 21:30:45

linux搜索文件过程的相关文章

Linux 搜索文件和文件夹的 4 种简单方法

Linux 管理员一天都不能离开搜索文件,因为这是他们的日常活动.了解一些搜索的东西是不错的,因为这能帮助你在命令行服务器中工作.这些命令记忆起来不复杂,因为它们使用的是标准语法. 可以通过四个 Linux 命令啦执行此操作,每个命令都有自己独特的功能. 方法 1:使用 find 命令在 Linux 中搜索文件和文件夹 find 命令被广泛使用,并且是在 Linux 中搜索文件和文件夹的著名命令.它搜索当前目录中的给定文件,并根据搜索条件递归遍历其子目录. 它允许用户根据大小.名称.所有者.组.

[Linux]搜索文件是否包含指定内容并返回文件名

在Linux系统中,find和grep都是很强大的命令,可以做很多很多事情,今天刚好有人问"如何查找哪些文件包含了特定字符串,并显示这些文件的名称". 第一种方法:使用grep,假设搜索所有的.cpp文件是否包含'open'字符串,如果包含了,则显示该文件,命令如下: grep -rl 'open' . --include=*.cpp 则执行结果如下: ./test/testall/file.cpp ./test/testall/shell_test.cpp ./test/daemon

Linux 搜索文件

1.whereis 只能查找可执行文件,联机帮助文档,源代码文件.在数据库/var/lib/mlocate/mlocate.db查找,因此效率很高.但是数据库mlocate.db不是实时更新的,而是一天更新一次(crontab定时执行updatedb),因此whereis查找会不准确.要想准确,需要执行一把updatedb,但是这又失去了高效性. 2.locate是whereis的加强版,增加一些选项,比如正则表达式. 3.which $PATH配置了可执行文件的目录,有多个目录,which在这

Linux学习笔记四:Linux的文件搜索命令

1.文件搜索命令  which 语法:which [命令名称] 范例:$which ls  列出ls命令所在目录 [[email protected] ~]$ which ls alias ls='ls --color=auto' /bin/ls 另外一个命令:whereis [名称名称],也可以列出命令所在目录. [[email protected] ~]$ whereis ls ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/ma

Atitit.软件gui按钮and面板---os区-----linux windows搜索文件 文件夹

Atitit.软件gui按钮and面板---os区-----搜索文件 1. Find 1 2. 寻找目录 1 3. 2. Locate// everything 1 4. 3. Whereis (windows马这个映射的方法) 2 5. 4. Which// everything+path 2 6. 5. Type/// everything 2 1. Find find / -name '2615806806b47d00dabc4571f1be3315.jpg' /images_all/zo

Linux下搜索文件find、which、whereis、locate

Linux下搜索文件find.which.whereis.locate: - which 寻找“执行文件” - -a 将所有可找到的命令均列出,而不仅仅列出第一个找到的命令名称 - whereis 寻找特定文件   whereis [-bmsu] 文件或目录 - -b : 只找二进制文件 - -m : 只找在帮助文件manual路径下的文件 - -s :  只找源文件 - -u :  没有帮助文件的文件 - locate [filename] -- 例:  locate passwd - fin

Linux下搜索文件

一.Linux下搜索文件的命令 Which 显示Linux某个命令的完整路径.加上type可以检查是内部命令还是外部命令 [[email protected] /]# which cat /bin/cat [[email protected] /]# type cat cat is hashed (/bin/cat) [[email protected] /]# type man man is hashed (/usr/bin/man) [[email protected] /]# type c

Linux基础教程 linux中使用find命令搜索文件常用方法记录

find是linux非常强大的搜索命令,通过man find查看find手册,可以发现find的说明一屏接一屏,估计要看完也得花不少时间.兄弟连Linux培训 小编总结了下,整理出find常用的使用方法. 1.命令格式 find 搜索路径 搜索表达式 搜索路径:这个比较容易理解,就是指定的搜索目录,比如/etc.搜索路径也可以同时指定多个,用空格分开就可以了,如/etc /home. 搜索表达式:find命令关键就是在表达式上,表达式的选项非常多.以下命令测试主要根据表达式的选项来划分. 2.命

Atitit.软件guibuttonand面板---os区-----linux windows搜索文件 目录

Atitit.软件guibuttonand面板---os区-----搜索文件 1. Find 1 2. 寻找文件夹 1 3. 2. Locate// everything 1 4. 3. Whereis (windows马这个映射的方法) 2 5. 4. Which// everything+path 2 6. 5. Type/// everything 2 1. Find find / -name '2615806806b47d00dabc4571f1be3315.jpg' /images_a