Linux系统是当今世界使用多的一种UNIX 类操作系统,以性和灵活性著称,Linux人才也是市场紧缺人才。很多参加Linux基础培训的人在初学习时都会被其庞大的知识点吓倒,而千锋老师的看法是,只要你有条理的去学习,理清知识点,你就能学好Linux。今天就来给大家分享一下Linux内核中文件描述符的相关知识。
文件描述符是什么?
在Linux系统操作中,文件可分为:普通文件、目录文件、链接文件和设备文件。文件描述符(file descriptor)是内核为了管理已被打开的文件所创建的索引,用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。需要注意的是文件描述符是非负整数,基于文件描述符的I/O操作兼容POSIX标准,在Linux系统中大量的系统调用都是依赖于文件描述符。
Linux文件描述符如何理解?
Linux系统将所有设备都当作文件来处理,而Linux用文件描述符来标识每个文件对象,主要有“0”、“1”、“2”。
文件描述符0理解为我和计算机交互时的输入,而这个输入默认是指向键盘的;
文件描述符1理解为我和计算机交互时的输出,而这个输出默认是指向显示器的;
文件描述符2理解为我和计算机交互时,计算机出现错误时的输出,而这个输出默认是和文件描述符1指向一个位置。
文件描述符与打开文件之间有什么关系?
每一个文件描述符会与一个打开文件相对应,同时,不同的文件描述符也会指向同一个文件。相同的文件可以被不同的进程打开也可以在同一个进程中被多次打开。在这种情况下相同文件描述符有可能指向同一个文件,也有可能指向不同的文件。我们可以通过进程级的文件描述符表、系统级的打开文件描述符表以及文件系统的i-node表来进行具体情况具体分析。
两个不同的文件描述符,若指向同一个打开文件句柄,将共享同一文件偏移量。因此,如果通过其中一个文件描述符来修改文件偏移量(由调用read()、write()或lseek()所致),那么从另一个描述符中也会观察到变化,无论这两个文件描述符是否属于不同进程,还是同一个进程,情况都是如此。
在很多Linux基础培训课程中,会涉及很多命令,那么文件描述符中相关的命令有哪些?
lsof:是一个列出当前系统打开文件的工具,在终端下输入lsof即可显示系统打开的文件;
tree:读取标准输入的数据,并将其内容输出成文件;
command:调用指定的指令并执行,命令执行时不查询shell函数,command命令只能够执行shell内部的命令;
PID:在内核中,每个线程都有自己的PID。
user:useradd用于Linux中创建的新的系统用户,可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码,而可用userdel删除帐号。
当然Linux培训基础知识很多,在此千锋老师就不一一列举了。基础知识是一个人在一个行业大展拳脚的基石,而实战经验是他能够脱颖而出的关键。如果你想成为理论与实战兼具的高端人才,建议你参加千锋郑州Linux培训班。红帽认证架构师领衔主讲,采用企业级设备讲解及搭建,涉及技能无缝衔接一线主流企业需求,让你轻松掌握企业核心技术,具备升职加薪的硬性技能。