当前位置: 首页 > 科技观察

必看!深入理解linux系统的目录结构就靠本文了

时间:2023-03-19 00:23:36 科技观察

必看!深入理解linux系统的目录结构,就看这篇文章了。本文首先区分了Windows和Linux上文件系统的一些概念,然后介绍了Linux文件系统相关的一些原理,最后更详细地介绍了Linux系统的目录结构。一、Linux和Windows文件系统下面简单介绍一下Windows和Linux启动后的世界观。重点介绍Linux。一、Windows上的文件系统Windows系统中的一切都存储在硬盘上。启动系统后,先是硬盘,然后是硬盘上的分区和每个分区对应的文件系统,就是存储在某个分区的特定文件系统中的文件。-硬盘上的分区-分区上的特定文件系统-特定文件系统中的文件”这样的顺序来访问文件。更具体地说,假设我们的机器上有一个硬盘,并且硬盘是分分区的,那么我们启动系统后,我们会看到C、D、E分区(也就是我们启动系统后看到的“C”盘,“D”盘等),每个分区可以格式化为不同的文件系统(如NTFS格式、FAT32格式等,文件系统的基本功能是存储文件,不同文件系统的区别一般是对存储在其中的文件进行管理。分区格式化成指定格式的文件系统后,可以存放任意文件和目录,这里我们可以大致将文件分为两种:系统文件和用户文件。一般来说,系统文件(比如Windows操作系统本身,部分系统程序,程序运行所需的库文件n,以及一些系统配置文件等)默认存放在C盘,当然安装时也可以指定在其他盘;其他用户文件,包括用户用户可以随意将以后安装的程序和一些数据文件存放在任意分区。这种组织有更多的优点和缺点。优点是:用户存放东西的地方比较自由,系统结构简单,新用户容易上手。有很多缺点。这里只列举几种:(1)由于没有对“系统文件”和“用户文件”的存放位置进行详细规定,数据组织方式比较杂乱,两个文件很容易互相干扰其他(如数据文件。(2)用户体验对系统的效率影响很大。一般来说,我们在使用Windows的时候,合理的使用分区会提高系统的效率。比如根据需要设置合理的系统分区(C分区的大小),尽量少在C盘存放数据文件。为了提高系统的运行速度,用户安装的一般软件尽量不要安装在C盘。定义一些名字奇怪的目录,方便软件维护等(3共享不方便,Windows有经验的用户会组织自己的目录结构,但每个用户组织自己的内容的方式不同,所以很难其他人不知道他的机器上存储了什么内容,给共享带来了麻烦。但是这些在Linux系统中是不一样的。2.Linux上的文件系统在Linux系统中,刚好相反。一切都存储在一个独特的“虚拟文件系统”,这个“虚拟文件系统”是一个以根目录开始的树状结构,启动系统后,先有这个虚拟文件系统,然后是硬盘,然后是某个分区的某个分区硬盘作为这个虚拟文件系统的一部分(用某个子目录来表示这个分区,然后通过硬盘对应的子目录来确定硬盘分区中具体的文件系统)iskpartitioninthisvirtualfilesystem,***文件存储在这个特定的文件系统中,也就是说Linux系统使用的顺序是“虚拟文件系统-硬盘-硬盘特定文件系统上的分区”在特定文件系统中的分区文件上”。访问一个文件。可能对于习惯使用Windows的用户来说,这样的组织点不太合适。这里的“虚拟文件系统”本质上是一个目录树。第一个目录称为根目录。在根目录下,每一级都有子目录或文件,子目录又有子目录和文件。每个子目录都有特定的功能。这个功能是约定俗成的,后面会详细解释...和Windows中划分硬盘的C,D和E分区的概念是不一样的。一开始,Linux中没有硬盘的概念,只有纯粹的“虚拟文件系统”。如果要使用硬盘的某个分区,就把那个分区“挂载”到某个子目录下,这样硬盘中的分区、文件系统、目录等都呈现在那个子目录下。也就是说,在Linux中,我们在使用硬盘中的数据时,实际上是先将硬盘“挂载”到某个子目录,然后再通过该子目录访问硬盘。硬盘原有的数据组织结构体现在子目录中,成为整个“虚拟文件系统”根目录下的一颗子树。可能有人会问,没有这个“虚拟文件系统”,硬盘是不能用的,但是一开始就没有硬盘,那么这个“虚拟文件系统”和对应的组织结构是怎么存储的呢?这道题就像吃鸡还是...这道题看似简单,但是在linux中,很容易跳出这个思维圈。问题的答案并不徘徊在“虚拟文件系统”和“硬盘”之间,而是第一个还是——“内存”,Linux系统启动后,整个“虚拟文件系统”的组织结构自动建立起来每次系统启动时都在内存中,完全不需要硬盘。Linux是这样组织它的目录结构的,当然缺点更多的是优点。缺点是“虚拟文件系统”中各个子目录的作用是事先预定好的。我们需要事先知道那些目录下存放了哪些文件,然后在相应的位置创建自己的内容(当然初学新手,也可以像Windows那样随意创建目录和文件。其实并没有开头的目录很多,主要就那么几个,用不了多久就会明白它们的作用,本文后面会重点介绍这些目录。而它的优点这里就简单说几点:(1了解了这些目录的作用后目录,我们就会对整个Linux操作系统的运行机制有一个大概的了解。(2帮助我们用一个***高效的方式组织自己的数据,分类清晰,不会对系统运行造成任何影响,一开始就规定了各个目录的作用,并没有限制我们的自由,因为我们知道在哪里可以创建自己的子目录,并且可以在子目录中任意创建自己的文件。(3由于统一的目录组织结构,Linux用户在分享数据时很容易猜到自己需要的数据大致存放在哪里,同时也不会影响隐私数据的保密性(Howtostoreyourprivatedata3、Linux文件系统在操作系统中的位置在Linux系统中,主要有两个东西:“虚拟文件系统”中的文件和Linux操作系统内核本身。从逻辑上讲,它可以认为前者属于上层,后者属于下层,前者基于后者,后者依赖于前者。Linux把除自身(Linux操作系统内核)以外的一切都视为在“虚拟文件系统”无论是键盘、鼠标、数据、程序、CPU、内存、网卡……无论是硬件、软件、数据还是内存中的东西,我们都可以在虚拟文件中相应的子目录中访问它们system与o统一操作和操作。实现这些管理的幕后是Linux操作系统内核本身:当启动Linux系统时,计算机首先将操作系统内核加载到内存中,内核本身提供文件管理、设备管理、内存管理、CPU进程调度管理、网络管理等功能,内核运行后,在内存中建立相应的“虚拟文件系统”。最好的是内核使用它提供的功能来管理虚拟文件系统中的硬件和软件。等等各种资源。Linux把操作系统本身的功能(管理计算机硬件和软件资源)交给操作系统内核,使操作系统内核成为一个独立的部分,有自己的源代码;其他一切(软件、硬件、数据)都有自己的源代码按照其特性或自由组织存储在“虚拟文件系统”中,由操作系统内核管理。这样,系统本身和系统管理的资源是分离的,有利于灵活定制和扩展系统或系统管理的资源,也可以按需快速建立只适合自己使用的操作系统(其实Ubuntu、Fedora、RedHat等各种Linux操作系统都是简而言之,与文件系统和内核的不同配置所产生的“流行”操作系统相比,Windows非常混乱和复杂,混合系统,s软件和硬件在一起。另外,我们还要注意一个问题,那就是从我们的角度来看,访问一个文件是用一个路径的。表示文件的路径由“文件所在目录+各级目录分隔符+文件”组成。这一点无论在Windows还是Linux上都是一样的。不同的是Windows下的目录分隔符是“\”,Linux下是“/”,或许这也是两者表达各自立场的一个原因吧?^_^例如:Window系统上的文件:D:\ProgramFiles\PPStream\PPStream.exeLinux系统上的文件:/usr/bin/screen2.Linux上虚拟文件系统的目录组织本质上,我们在启动系统时看到的“根目录”在逻辑上是Linux虚拟文件系统根目录下的一个子目录,除了这个“根目录”我们看不到其他目录。那些目录与操作系统的具体实现有关,被操作系统内核隐藏。“根目录”的各个子目录的作用。Linux文件系统中的每个子目录都有特定的目的和用途。通常,一个正式的文件系统结构是根据FHS标准定义的,它规定了哪些目录应该具有哪些功能。这里先介绍一些日常生活中经常用到的目录,然后给出与FHS相关的内容。1.常用的重要目录这里根据我的经验,给出一些常用的和重要的目录,我们一开始了解一下就够了。随着Linux使用经验的加深,我们会学到越来越多的目录。我们对目录的作用了解得越多,对Linux系统的工作原理就越了解。了解操作系统的工作原理,将有助于我们更加规范地使用和理解系统中各个目录的含义,直到***知道系统中几乎每一个文件.../根目录。包含几乎所有的文件目录。相当于中央系统。最简单的进入方式是:cd/。/boot存放bootloader、kernel等的目录。该目录包含了启动过程中的必要文??件,启动程序的相关文件(如grub、lilo及相应的配置文件,Linux操作系统内核相关文件(如vmlinuz等)一般存放于此。初始启动阶段,通过boot程序将内核加载到内存中,完成内核的启动(此时虚拟文件系统还不存在,虽然加载的内核是从硬盘读取的,还没有通过Linux虚拟文件系统,它是由比较底层的东西实现的,然后内核自己创建一个虚拟文件系统,从其他子目录或者特定的其他子目录加载其他需要开机启动的程序或服务虚拟文件系统(如/sbin和/etc)的动作(部分可以由用户自己准备,修改相应目录下的相应文件。如果我们的机器包含多个操作系统,我们可以通过修改一个来调整启动该目录下的配置文件(如grub.conf系统默认的操作系统,系统启动的选择菜单,启动延时等参数。/sbincomman的存放目录超级用户可以使用的ds。存放大部分与系统管理相关的命令(如启动系统的init程序,这是为超级用户root可执行的命令存放位置,普通用户无权限执行该目录下的命令(但普通用户也可以使用这个目录和/usr/sbin;/usr/X11R6/sbin或/usr/local/sbin等目录是类似的,我们要记住,目录sbin中包含的所有东西都只能被root权限执行,所以就这些,后面会区分,/bin是普通用户可以使用的命令的存放目录,系统需要的那些命令都位于这个目录下,比如ls、cp、mkdir等命令;类似的目录还有/usr/bin、/usr/local/bin等,该目录下的文件都是普通用户可以使用的可执行命令,基本系统需要的最基本的命令都放在这里/lib下程序的共享库目录根目录保守党。该目录包含系统启动和root用户执行命令时必须使用的共享库。做一个不太好但很形象的比喻,类似于Windows上的system32目录。按理说这里存放的文件应该是/bin目录下程序需要的库文件存放的地方,也不排除有一些例外。类似的目录还有/usr/lib、/usr/local/lib等/dev设备文件目录。在Linux中,设备以文件的形式出现,这里的设备可以是硬盘、键盘、鼠标、网卡、终端等设备,通过访问这些文件,就可以访问相应的设备。可以使用mknod命令创建设备文件,详见相应命令;而为了将对这些设备文件的访问转化为设备访问,就需要为相应的设备提供设备驱动模块(一般在编译完设备驱动后,生成的结果是*.ko类型的二进制文件。内核启动后,通过insmod等命令加载了相应的设备驱动后,我们就可以通过设备文件访问设备了,一??般来说,想要Linux系统支持某个Device,只要有一个东西:对应的硬件设备,支持该硬件的驱动模块,以及对应的设备文件。/home普通用户的家目录($HOME目录。在Linux机器上,用户的家目录通常直接或间接地放在这个目录下。它的结构通常由本地机器的管理员决定,一般来说系统的每个用户都有自己的home目录,目录存放在/home下用户名作为名称(例如,quietheart用户,其主目录名称为/home/quietheart。大多数用户文件(用户自己的配置文件、自定义文件、文档、数据等)都保存在这个目录下,除了root用户(见后面的/root目录)。由于这个目录包含通常系统管理员挂载一个为该目录独立的磁盘分区,使该目录的文件系统格式可能与其他目录不同(虽然表面上看,该目录仍属于根目录的一个子树),有利于数据维护。/root用户root的$HOME目录系统管理员(即root用户或超级用户)的家目录比较特殊,不存放在/home中,而是直接放在/根目录下。/etc是全局配置文件存放目录。一般可以通过修改相应的配置文件来配置系统和程序,比如配置那些程序在系统开机时启动,配置某个程序什么时候启动starts显示什么样的样式等等,通常这些配置文件都集中存放在/etc目录下,所以如果要配置什么东西,可以在/etc下找到我们可能需要修改的文件。一些大型套件,例如X11,位于它们自己的子目录中的/etc中。系统配置文件可以放在这里或/usr/etc中。但是,所有的程序总是在/etc目录下寻找需要的配置文件,你也可以将这些文件链接到/usr/etc目录下。另外,还有一个需要注意的普遍现象是,当某个程序运行在某个用户下时,可能会在该用户的主目录下生成一个配置文件(通常这个文件是/etc下开头对应的配置文件的拷贝)该文件存储了“当前用户”对应的配置,使得当前用户可以通过配置这个主目录的配置文件来改变程序的行为,而这种行为只是特定于该用户。原因是:一般说起来,一个程序启动,如果需要读取一些配置文件,会先读取当前用户家目录下的配置文件,如果存在则使用;如果不存在,则读取下的全局配置文件/etc然后启动程序,这个是配置文件,不会自动生成,如果我们手动在自己的home目录下创建一个文件,很多程序会先读取这个home目录下的文件ectory并将其配置作为启动选项(例如,我们可以在vim程序的主目录下创建一个配置文件.vimrc来配置自己的vim程序。/usr目录包含命令库文件和在正常操作中不会修改的文件。这个目录也是系统非常重要的一个目录,其地位类似于Windows上的“ProgramFiles”目录(请原谅这个可能不太合适^_^。在安装程序的时候,默认是安装它在这个文件里面的一个子文件夹中,输入命令后,系统执行/usr/bin下的程序(当然前提是这个目录的路径已经添加到系统的环境变量中,这个目录平时也挂载一个独立的磁盘分区,里面应该保存共享的只读类文件,这样可以在Linux的不同主机上挂载/usr/lib目标库文件,包括动态链接库加上一些平时不调用的可执行文件directly.这个目录在功能上和/lib目录类似,理论上存放这里的文件应该是/bin目录下程序需要的库文件存放的地方,有些例外不是排除在外。/usr/bin一般是用户使用的,不是系统自检所必需的可执行文件目录。该目录相当于根文件系统(/bin)下的对应目录,非引导系统、非修复系统、非本地安装的程序一般都放在该目录下。/usr/sbin为非系统管理员使用的可执行文件存放目录,这里的目录相当于根文件系统下的对应目录(/sbin),存放的是系统管理程序的二进制文件,这些文件不是系统启动或文件所必需的系统挂载/usr目录或系统修复。/usr/share存放共享文件的目录。该目录下的不同子目录存放了同一操作系统在不同框架下工作时,特定应用程序的共享数据(如程序文档信息)。用户通常可以在/usr/doc或/usr/lib或/usr/man目录中找到此类数据。/usr/include用于编译C程序语言的头文件。linux下开发编译应用程序所需要的头文件一般存放在这里,通过头文件使用一些库函数。默认情况下,这个路径被添加到环境变量中,这样在编译开发程序的时候,编译器会自动搜索这个路径,找到你的程序中可能包含的头文件。/usr/local安装本地程序的一般默认路径。我们在下载一个程序源码,编译安装的时候,如果没有指定安装的程序路径,默认会把程序相关的文件安装到该目录对应的目录下。比如安装安装程序的可执行文件(安装的本质复制到/usr/local/bin,将程序(可执行文件需要依赖的库文件)安装在/usr/local/lib目录并安装如果软件是开发库(如Qt、Gtk等),那么对应的头文件可能安装在/usr/local/include等,也就是说存放的内容这个目录一般是后面我们自己安装软件的默认路径,如果选择这个默认路径作为软件安装路径,那么安装的软件的所有文件都限制在这个目录下,里面的子目录对应的子目录根目录。/proc特殊文件目录。该目录为特殊文件系统格式(proc格式,内核支持。它包含所有虚拟文件。它们不存储在磁盘上,不占用磁盘空间(虽然com命令ls-c将显示它们的大小)。当你看它们的时候,你真正看到的是内存中的信息。这些文件帮助我们了解系统的内部信息。例如:├1/关于进程1的信息目录。每个进程都在/proc下,下一个目录以进程号命名。├cpuinfo处理器信息,例如类型、制造商、型号和性能。├devices当前运行的内核配置的设备驱动列表。├dma显示当前使用的DMA通道。├filesystems核心配置的文件系统。├interrupts显示使用的中断,以及每个中断有多少。├ioports当前使用的I/O端口。├kcore系统物理内存映像。它与物理内存大小相同,但实际上并没有占用那么多内存;├kmsg是核心输出的信息。也发送到系统日志。├ksyms内核符号表。├loadavg系统“平均负载”;3个无意义的指标,指出系统当前的工作量。├meminfo内存使用信息,包括物理内存和swap。├modules当前加载了哪些核心模块。├net网络协议状态信息。├self指向查看/proc的程序的进程目录的符号链接。├stat系统的不同状态├uptime系统启动的时间长度。└version核心版本。/opt可选文件目录。这个目录是可选的,可以在这里安装一些自定义的软件包或者第三方工具。比如在FedoraCore5.0中,OpenOffice就安装在这里。一些自己编译的软件包可以安装在这个目录下;通过源码包安装的软件,可以通过设置安装路径为/opt来安装。该目录的作用类似于/usr/local。/mnt临时挂载目录。该目录一般用于存放挂载的存储设备的挂载目录,如磁盘、光驱、网络文件系统等,当我们需要挂载某个磁盘设备时,可以将该磁盘设备挂载到该目录下。这样我们访问这个目录就可以直接访问那个磁盘了。一般来说,最好在/mnt目录下建立几个子目录,挂载的时候挂载到这些子目录下,因为通常我们可能不止挂载一个设备,对吧?/media设备目录挂载的媒体。挂载的媒体设备目录,一般外部设备都挂载在这里,比如cdrom等。比如我们插入一个U盘,我们一般会发现Linux会自动在这个目录下创建一个磁盘目录,然后把U盘挂载到这个磁盘目录下,通过访问这个磁盘来访问U盘。