丹凤千字科普:lost.DIR怎么恢复(详细资料介绍)

Linux文件系统详解及系统调用探讨
来源:Java建设者(ID: javajianshe)
在Linux中,最直观、最可见的部分就是文件系统(file system)。下面我们就来一起深入探讨一下关于Linux中的文件系统、系统调用以及文件系统实现背后的原理和思想。这些思想中有一些来源于MULTICS,现在已经被Windows等其他操作系统采用。Linux的设计理念就是“小的就是好的”(Small is Beautiful)。尽管Linux只使用了最简单的机制和少量的系统调用,但它却提供了强大而优雅的文件系统。
一、Linux文件系统基本概念
Linux最初的文件系统是MINIX1,它仅支持14字节的文件名,最大文件只支持到64MB。在MINIX1之后的文件系统是ext文件系统。相较于MINIX1,ext系统在支持字节大小和文件大小上有很大的提升,但ext的速度仍没有MINIX1快,于是,ext2被开发出来,它能够支持长文件名和大文件,并且具有比MINIX1更好的性能。这使得ext2成为Linux的主要文件系统。Linux会使用VFS(Virtual File System)来支持多种文件系统。在Linux链接时,用户可以动态地将不同的文件系统挂载到VFS上。
在Linux中,文件是一个任意长度的字节序列,可以包含任意信息,如ASCII码、二进制文件和其他类型的文件。为了方便起见,文件可以被在目录中,目录存储成文件的形式,在很大程度上可以作为文件处理。目录可以有子目录,这样形成有层次的文件系统。Linux系统下面的根目录是/,它通常包含了多个子目录。字符/还用于对目录名进行区分。
二、Linux系统根目录下的目录名
以下是Linux系统根目录下的主要目录名及其功能:
1. /bin:包含二进制应用程序,系统的所有用户使用的命令都在这里。
2. /boot:包含引导加载程序的相关文件。
3. /dev:包含设备文件,终端文件,U或连接到系统的任何设备。
4. /etc:配置文件、启动脚本等,包含所有程序所需要的配置文件,也包含了启动/停止单个应用程序的启动和关闭shell脚本。
5. /home:本地主要路径,所有用户用home目录存储个人信息。
6. /lib:系统库文件,包含支持位于/bin和/sbin下的二进制库文件。
7. /lost+found:在根目录下提供一个丢失+查找系统,必须在root用户下才能查看当前目录下的内容。
8. /media:挂载可移动介质。
9. /mnt:挂载文件系统。
10. /opt:提供一个可选的应用程序安装目录。
11. /proc:特殊的动态目录,用于维护系统信息和状态,包括当前运行中进程信息。
12. /root:root用户的主要目录文件夹。
13. /sbin:重要的二进制系统文件。
14. /tmp:系统和用户创建的临时文件,系统重启时,这个目录下的文件都会被删除。
15. /usr:包含绝大多数用户都能访问的应用程序和文件。
16. /var:经常变化的文件,诸如日志文件或数据库等。
三、Linux中的路径和链接
在Linux中,有两种路径:绝对路径(absolute path)和相对路径(relative path)。绝对路径告诉你从根目录下查找文件,但绝对路径的缺点是太长且不太方便。相对路径所在的目录也叫做工作目录(working directory)。如果/usr/local/books是工作目录,那么shell命令cp books books-replica表示的是相对路径,而cp /usr/local/books/books /usr/local/books/books-replica表示的是绝对路径。在Linux中,当出现一个用户使用另一个用户的文件或使用文件树结构中的文件时,就需要使用链接机制。
四、Linux文件系统调用和系统锁
许多系统调用都与文件和文件系统有关。首先让我们看一下对单个文件的系统调用。为了创建一个新的文件,会使用到creat方法(注意没有e)。这个系统调用会接收文件名和保护模式作为参数,并返回一个非负整数——文件描述符(file descriptor),它表示了计算机操作系统中打开的文件。fd = creat("aaa",mode);这条命令会创建一个名为aaa的文件,并根据mode设置文件的保护位。这些位决定了哪个用户可能访问文件以及如何访问。如果需要在已经存在的文件上调用creat系统调用,那么该文件中的内容会被清除并从0开始。通过设置合适的参数,open系统调用也能创建文件。下面是一些主要的系统调用:为了对一个文件进行读写的前提是先需要打开文件,这需要使用creat或者open打开(参数是打开文件的方式——只读、可读写还是只写)。open系统调用会返回文件描述符。打开文件后需要使用close系统调用进行关闭。当程序要求打开一个文件时,内核会进行如下操作:授予访问权限、在全局文件表(global file table)中创建一个条目(entry)、向软件提供条目的位置。最后让我们来谈谈与锁定相关的系统调用fcntl(file control)。在一个应用中会出现两个或者更多的进程
