精华内容
下载资源
问答
  • 本文先对Windows和Linux上面文件系统原理、组织概念进行区分,并给出例子、列举两者的优缺点以具体说明,最后较为详细地介绍了Linux系统的目录结构。下面将介绍启动Windows和Linux后,在文件系统的角度上,它们分别...
  • 本文先对 Windows 和 Linux 上面文件系统原理、组织概念进行区分,并给出例子、列举两者的优缺点以具体说明,最后较为详细地介绍了 Linux 系统的目录结构Windows 和 Linux 文件系统 下面将介绍启动 Windows 和 ...

    Linux 和 Windows 的文件系统有些不同,在学习使用 Linux 之前,若能够了解这些不同,会有助于后续学习。

    本文先对 Windows 和 Linux 上面文件系统原理、组织概念进行区分,并给出例子、列举两者的优缺点以具体说明,最后较为详细地介绍了 Linux 系统的目录结构。

    Windows 和 Linux 文件系统

    下面将介绍启动 Windows 和 Linux 后,在文件系统的角度上,它们分别是怎样看待自己世界的。

    访问原理

    在 Windows 系统中, 一切东西都是存放在硬盘上的。启动系统后,先确定硬盘,再确定硬盘上的分区以及每个分区所对应文件系统,最后是存放在某个分区特定的文件系统中的文件。 也就是说,Windows 是通过 “某个硬盘 - 硬盘上的某个分区 - 分区上的特定文件系统 - 特定文件系统中的文件” 这样的顺序来访问到一个文件的。

    但是与 Windows 不同, Linux 系统中的一切都是存放在唯一的 虚拟文件系统中的,这个 虚拟文件系统是树状的结构以一个根目录开始。启动系统后,先有这个 虚拟文件系统,再识别出各个硬盘, 再把某个硬盘的某个分区挂载到这个 虚拟文件系统的某个子树上(即分区用某个子目录来表示),再确定分区对应的子目录文件系统,最后的文件就存放在这个特定的文件系统中。 也就是说, Linux 系统是通过 “虚拟文件系统 - 硬盘 - 硬盘上的分区 - 分区上的特定文件系统 - 特定文件系统中的文件” 这样的顺序来访问一个文件的。

    可能对习惯了使用 Windows 的用户来说, Linux 的方式有些不适应,它的 虚拟文件系统,实质就是一颗目录树,最开始的目录叫做根目录,根目录中又有每一级子目录,或者文件,子目录又有子子目录和文件,其中每个子目录都特定的功能这个功能(这些是约定俗成了的,在后面 常用的重要目录 (See section 1.2.1) 中会详细说明)。

    也许有人会问,没有这个虚拟文件系统就无法使用硬盘,可是最开始没有硬盘,那么这个 虚拟文件系统以及相应的组织结构是怎么存放起来的呢?这个问题,就像先有鸡还是先有蛋这个问题一样看似简单实则……但是,在 Linux 中,很轻易地跳出了这个思维循环,问题的答案并没在 虚拟文件系统 和 硬盘 这两者之间徘徊,而是第三者—— 内存 ,Linux 系统启动起来之后,整个 虚拟文件系统的组织结构,都是随着每次内核系统的启动自动在内存中建立好了的,根本就不需要硬盘。

    另外还要注意,就是在我们用户的角度上,无论在 Windows 还是 Linux 上面,都是使用路径来访问一个文件的。表示文件的路径由 “文件所在的目录 + 各级目录的分隔符 + 文件” 三个部分组成,这个策略在两者之间是一样的,所不同的是,Windows 下面目录分隔符是 \ , Linux 下面是 / ,也许这也是两者之间为了表示其各自立场不同的一个原因吧?^_^

    系统组织

    在 Windows 系统中,我们可以把文件大体分为两种: 系统文件和用户文件 。一般来说系统文件(例如 Windows 操作系统本身,一些系统程序,程序运行所需的库文件,以及一些系统配置文件等)存放的默认位置在 C 盘,当然也可以在安装时候指定在其他盘;其它用户文件,包含用户后来安装的程序以及一些数据文件等,用户可以把它们随意存放在任意的分区。

    在 Linux 系统中,主要有两个概念: 虚拟文件系统中的文件和 Linux 操作系统内核 本身。逻辑上可以认为前者属于上层,后者在下层,前者基于后者,后者依赖前者而存在。 Linux 把除了它本身( Linux 操作系统内核 )以外的一切事物都看作是在 虚拟文件系统中的文件了。无论是键盘,鼠标,数据,程序,CPU,内存,网卡……无论是硬件、软件、数据还是内存中的东西,我们都可以在 虚拟文件系统中的相应子目录对他们进行访问和操作,操作统一。而实现这些管理的幕后就是 Linux 操作系统内核 本身:启动 Linux 系统的时候,首先电脑把 Linux 操作系统内核 加载到内存中,内核本身提供了文件管理,设备管理,内存管理,CPU 进程调度管理,网络管理等功能,等内核运行起来之后,就在内存中建立起相应的 虚拟文件系统,最后就是内核利用它提供的那些功能,通过管理文件的方式,来管理 虚拟文件系统中的硬件软件等各种资源了。

    Linux 把提供操作系统本身功能(管理计算机软硬件资源)的那些部分划给了 Linux 操作系统内核 ,使得 Linux 操作系统内核 成为一个独立的部分,有它自己独立的开源代码;而其它的一切(软件应用,硬件驱动,数据)都根据其特性有自己的开源代码、或者自由地组织并且存放在那个 虚拟文件系统中由 Linux 操作系统内核 来管理。这样,将系统本身和系统所管理的资源分开,并开放源代码,有助于对系统或者系统所管理的资源进行灵活的定制和扩展,还能按需快速建立起只适合自己使用的操作系统,也利于操作系统本身的发展。实际 Ubuntu , Fedora , RedHat 等各种不同的 Linux 操作系统发行版,简单来说就是不同厂商对其文件系统和内核进行了不同的配置而产生的 “大众化” 的操作系统。相比之下,Windows 就显得非常地零乱复杂,将系统、软件、硬件、数据都混在了一起,其不同版本只能由 Microsoft 一家公司发行。

    举例说明

    下面用直观的例子,来说明两者的不同,以加深理解。假设我们的机器上面有一个硬盘,硬盘分为三个区。

    在 Windows 系统中, 我们启动系统之后就会看到 C, D, E, 盘符,它们分别对应硬盘上的三个分区,增加硬盘,或者分区,会导致盘符的增加(注意由于历史原因, A, B 用于表示软驱,硬盘分区盘符从 C 开始按字母递增),这里的每个分区都各自可以被格式化为不同的文件系统(这里的文件系统,包括例如 NTFS 格式, FAT32 格式等),文件系统的基本功能就是为了存放文件的,不同文件系统区别一般在于管理其中存放的文件的功能的强弱,所以分区被格式化成指定格式的文件系统之后,就可以存放任何文件和目录了,我们看到的 C, D, E 内容也就对应了硬盘中相应分区的数据内容。

    但是,与 Windows 中把硬盘分区看成 C, D, E 盘符不同, Linux 中最开始根本就没有硬盘的概念,就只有一个纯粹的 虚拟文件系统。如果想要使用哪个硬盘的某个分区,就把那个分区 “挂载” 到某个子目录之下,这样硬盘中的分区,文件系统,目录等内容就呈现到了那个子目录里面。也就是说,在 Linux 中,我们使用硬盘中的数据,实际是先把硬盘的某个分区 “挂载” 到某个子目录下,然后通过那个子目录来访问的。这个例子中, 通常硬盘会对应 虚拟文件系统中的 /dev/sda (如有多个硬盘,则为 /dev/sda, /dev/sdb, ……, 按字母递增), 其三个分区对应 /dev/sda1, /dev/sda2,/dev/sda3 (多个分区按数字递增,不同硬盘的分区,对应为 /dev/sdb1, /dev/sdb2 等等), 默认硬盘各个分区会被挂载到 虚拟文件系统系统中类似 /mnt/sda1/, /mnt/sda2/, /mnt/sda3/ 的目录(在 Linux 又叫挂载点)中,在 /etc/fstab 文件中,我们可以找到分区文件和挂载点的对应关系描述。这样,硬盘相应的分区就做为整个 虚拟文件系统根目录下的一颗子树,反映到了子目录(挂载点)上,子目录中的内容就对应分区中的数据。

    假设访问上述硬盘第三个分区 dir1 目录中的文件 test.file

    Window 系统上的路径:E:\dir1\test.file
    Linux 系统上的路径:/mnt/sda3/dir1/test.file
    

    再有,假设用户安装和卸载一个程序 firefox :

    • Windows 系统中

      指定或不指定安装路径类似,程序的安装目录会在 C:\Program Files\Firefox 类似的目录中,或指定的安装路径中; 可执行文件一般在程序的安装路径;依赖的内部库、第三方库、和系统库可能在安装路径中,也可能在 C:\Windows\System32, 或 C:\Windows\system 等类似的路径;而程序访问期间的系统和用户配置文件和产生的输入输出文件,可能会在安装路径配置中,或者在 C:\Windows\ 下的某些文件中(比如注册表数据库文件、用户目录等),这就不一定了。而且不同的系统版本,应用程序版本下,这些目录的具体名称和路径可能会有所不同。卸载的时候由于不确定哪些地方安装了什么内容,很容易造成文件删除补全,遗留系统垃圾等现象,造成系统越来越瘫肿。

    • Linux 系统中

      如果不指定安装路径,所有程序的可执行文件在 /usr/bin 中, 全局配置文件在 /etc/firefox 类似的目录, 用户配置文件一般在用户主目录的 .firefox 的路径下 (用户主目录路径名称统一格式为 /home/<username>) ,依赖的内部库和第三方库在 /usr/lib, 系统库在 /lib 下, 数据文件一般就在用户主目录下。 如果指定安装目录,那么所有内部库和可执行程序,全局配置文件,会在 < 安装路径 > 下的 bin, lib, etc 子目录下,其它文件一般和默认情况相同。卸载程序之时,只需在对应目录中,将可执行文件、内部库、配置文件、数据文件删除即可,基本没有不确定是否遗留垃圾文件的问题。这些都是大多数应用程序安装的和访问的默认策略,就像是不成文的业界标准,不排除有个别程序不安装这种策略部署应用,但是 Linux 用户带来 “麻烦“ 的应用,早晚也会被淘汰,不可能会流行在 Linux 系统中,这样,自然的,好的应用都保存在 Linux 系统中并逐渐流行起来,还不会破坏系统结构。

    可见, Linux 文件的存放和组织明显方式更高效,层次更分明。

    优缺点

    基于上述内容,Windows 和 Linux 文件系统的各有优缺点分别如下。

    • Windows 系统优点

      优点主要是用户存放东西的位置比较自由,系统结构简单便于新用户上手。

    • Windows 系统缺点

      缺点较多主要有:

      • 目录组织缺乏标准

        由于对“系统文件”和“用户文件”存放位置缺乏细致的规定,数据组织的方式显得比较凌乱,并且两种文件之间很容易相互干扰(例如数据文件可能存放在系统区域给系统带来垃圾文件等)。

      • 用户的使用经验对系统的使用效率影响很大

        一般来说,我们使用 Windows 时候合理使用分区会提升的系统效率。例如根据需要设置合理的系统分区(假设为 C 分区),尽量少往 C 盘存放数据文件,根据具体情况可以将一些 “重要并且常用的” 程序安装在 C 分区,随时保持系统目录的清洁和大小助于提升系统的运行速度,用户安装的一般软件尽量不要安装在 C 盘,安装软件时候指定的位置最好采用默认标准目录名称(例如 X:\Program Files 目录,这里 X 表示盘符而不要自己定义一些奇怪名字的目录,这样便于软件的维护等等。

      • 共享不便

        Windows 上有经验的用户们会将自己的目录结构组织好,但是每个用户组织自己内容的方式是不一样的,所以他的机器上哪里存放了什么内容,别人很难知道,为共享带来了麻烦。

    • Linux 系统缺点

      最开始 虚拟文件系统中的每个子目录的功能是事先规定好了的,我们需要事先知道那些目录存放哪些文件,然后在相应的位置中创建自己的内容,这也是 Linux 系统入门门槛高的一个原因。当然,最开始的新手,也完全可以无视这一点,可以像 Windows 那样随意地创建目录和文件(尽管不推荐这么做)。

      实际上最开始的目录也不多,主要就那么几个,花不了多长时间就会明白它们的作用的,而明白这些作用之后带来的好处,远不止付出那么多(本文后面 常用的重要目录 (See section 1.2.1) 会着重对此进行介绍)。

    • Linux 系统优点

      这里只说几个优点:

      • 目录结构反映系统运行机理

        当我们了解了这些目录的功能之后,我们对整个 Linux 操作系统的运行机理也会有一个大致的了解。

      • 结构清晰避免逻辑混乱

        这样的目录结构,有助于我们以一种高效的方式组织自己的数据,分类清晰并且不会对系统运行有任何影响,规定了最开始每个目录的功能,并没有限制我们的自由,因为我们知道我们可以在哪里创建自己的子目录并且在子目录中任意创建自己的文件。

      • 组织规范便于共享

        由于目录具有统一的组织结构,所以 Linux 上面的用户在共享数据的时候,能够很容易地猜测出他所需要的数据大致存放在什么位置,同时也不会影响到私有数据的保密性,毕竟具体来说,怎么存放自己的私有数据,那是用户自己决定的。

    Linux 上面的虚拟文件系统目录组织

    实质上,我们启动系统所看到的 “根目录” ,逻辑上是 Linux 虚拟文件系统的根目录中的一个子目录,我们看不到除了这个 “根目录” 以外的其他的目录,那些目录和操作系统的具体实现相关是被操作系统内核隐藏起来了的,所以这里就介绍我们所能看到的文件系统中的 “根目录” 的各个子目录中的作用吧。

    在 Linux 文件系统中的每一个子目录都有特定的目的和用途。一般都是根据 FHS 标准定义一个正式的文件系统结构的,这个标准规定了哪些目录应该哪些作用。这里我们先介绍一些日常经常用到的目录,然后给出 FHS 相关的内容。

    常用的重要目录

    这里,根据本人的使用经验,给出比较常见重要的一些目录,最开始我们对它们有所了解就可以了。随着对 Linux 使用的经验的加深,我们会了解越来越多的目录。对目录的功能知道得越多,我们对 Linux 系统的工 p 作原理就理解的越深刻,理解操作系统的工作原理,更助于我们更为规范地使用和理解系统中每个目录存在的意义,直至最后几乎知道系统中的每个文件……

    • / 根目录

      包含了几乎所的文件目录。相当于中央系统。进入的最简单方法是:cd /。

    • /boot 引导程序,内核等存放的目录

      这个目录,包括了在引导过程中所必需的文件,引导程序的相关文件(例如 grub , lilo 以及相应的配置文件)以及 Linux 操作系统内核相关文件(例如 vmlinuz 等)一般都存放在这里。在最开始的启动阶段,通过引导程序将内核加载到内存,完成内核的启动(这个时候, 虚拟文件系统还不存在,加载的内核虽然是从硬盘读取的,但是没经过 Linux 的 虚拟文件系统,这是比较底层的东西来实现的)。然后内核自己创建好 虚拟文件系统,并且从 虚拟文件系统的其他子目录中(例如 /sbin 和 /etc )加载需要在开机启动的其他程序或者服务或者特定的动作(部分可以由用户自己在相应的目录中修改相应的文件来配制)。如果我们的机器中包含多个操作系统,那么可以通过修改这个目录中的某个配置文件(例如 grub.conf )来调整启动的默认操作系统,系统启动的择菜单,以及启动延迟等参数。

    • /sbin 超级用户可以使用的命令的存放目录

      存放大多涉及系统管理的命令(例如引导系统的 init 程序),是超级权限用户 root 的可执行命令存放地,普通用户无权限执行这个目录下的命令(但是有时普通用户也可能会用到)。这个目录和 /usr/sbin ,/usr/X11R6/sbin 或 /usr/local/sbin 等目录是相似的,我们要记住,凡是目录 sbin 中包含的都是 root 权限才能执行的,这样就行了。后面会具体区分。

    • /bin 普通用户可以使用的命令的存放目录

      系统所需要的那些命令位于此目录,比如 ls 、 cp 、 mkdir 等命令;类似的目录还 /usr/bin , /usr/local/bin 等等。这个目录中的文件都是可执行的、普通用户都可以使用的命令。作为基础系统所需要的最基础的命令就是放在这里。

    • /lib 根目录下的所程序的共享库目录

      此目录下包含系统引导和在根用户执行命令时候所必需用到的共享库。做个不太好但是比较形象的比喻,点类似于 Windows 上面的 system32 目录。按理说,这里存放的文件应该是 /bin 目录下程序所需要的库文件的存放地,也不排除一些例外的情况。类似的目录还 /usr/lib , /usr/local/lib 等等。

    • /dev 设备文件目录

      在 Linux 中设备都是以文件形式出现,这里的设备可以是硬盘,键盘,鼠标,网卡,终端,等设备,通过访问这些文件可以访问到相应的设备。设备文件可以使用 mknod 命令来创建,具体参见相应的命令;而为了将对这些设备文件的访问转化为对设备的访问,需要向相应的设备提供设备驱动模块(一般将设备驱动编译之后,生成的结果是一个 *.ko 类型的二进制文件),在内核启动之后,再通过 insmod 等命令加载相应的设备驱动之后,我们就可以通过设备文件来访问设备了。一般来说,想要 Linux 系统支持某个设备,只需要三个东西:相应的硬件设备,支持硬件的驱动模块,以及相应的设备文件。

    • /home 普通用户的家目录(或 $HOME 目录、主目录)

      在 Linux 机器上,用户主目录通常直接或间接地置在此目录下。其结构通常由本地机的管理员来决定。通常而言,系统的每个用户都有自己的家目录,目录以用户名作为名字存放在 /home 下面(例如 quietheart 用户,其家目录的名字为 /home/quietheart )。该目录中保存了绝大多数的用户文件 (用户自己的配置文件,定制文件,文档,数据等), root 用户除外(参见后面的 /root 目录)。由于这个目录包含了用户实际的数据,通常系统管理员为这个目录单独挂载一个独立的磁盘分区,这样这个目录的文件系统格式就可能和其他目录不一样了(尽管表面上看,这个目录还是属于根目录的一棵子树上),将系统文件和数据文件分开存放,有利于维护。

    • /root 用户 root 的 $HOME 目录

      系统管理员 (就是 root 用户或超级用户) 的主目录比较特殊,不存放在 /home 中,而是直接放在 /root 目录下了。

    • /etc 全局的配置文件存放目录

      系统和程序一般都可以通过修改相应的配置文件,来进行配置。例如,要配置系统开机的时候启动那些程序,配置某个程序启动的时候显示什么样的风格等等。通常这些配置文件都集中存放在 /etc 目录中,所以想要配置什么东西的话,可以在 /etc 下面寻找我们可能需要修改的文件。一些大型套件,如 X11 ,在 /etc 下它们自己的子目录。系统配置文件可以放在这里或在 /usr/etc 。 不过所有程序总是在 /etc 目录下查找所需的配置文件,你也可以将这些文件链接到目录 /usr/etc 。另外,还一个需要注意的常见现象就是,当某个程序在某个用户下运行的时候,可能会在该用户的家目录中生成一个配置文件(一般这个文件最开始就是 /etc 下相应配置文件的拷贝,存放相应于“当前用户”的配置),这样当前用户可以通过配置这个家目录的配置文件,来改变程序的行为,并且这个行为只是该用户特有的。原因就是:一般来说一个程序启动,如果需要读取一些配置文件的话,它会首先读取当前用户家目录的配置文件,如果存在就使用;如果不存在它就到 /etc 下读取全局的配置文件进而启动程序。就是这个配置文件不自动生成,我们手动在自己的家目录中创建一个文件的话,也有许多程序会首先读取到这个家目录的文件并且以它的配置作为启动的选项(例如我们可以在家目录中创建 vim 程序的配置文件 .vimrc ,来配置自己的 vim 程序)。

    • /usr 这个目录中包含了命令库文件和在通常操作中不会修改的文件

      这个目录对于系统来说也是一个非常重要的目录,其地位类似 Windows 上面的 Program Files 目录(请原谅我可能这样做比较不太恰当 ^_^)。安装程序的时候,默认就是安装在此文件内部某个子文件夹内。输入命令后系统默认执行 /usr/bin 下的程序(当然,前提是这个目录的路径已经被添加到了系统的环境变量中)。此目录通常也会挂载一个独立的磁盘分区,它应保存共享只读类文件,这样它可以被运行 Linux 的不同主机挂载。

    • /usr/lib 目标库文件,包括动态连接库加上一些通常不是直接调用的可执行文件的存放位置

      这个目录功能类似 /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 格式),内核支持这种格式。其中包含了全部虚拟文件。它们并不保存在磁盘中,也不占据磁盘空间 (尽管命令 ls -c 会显示它们的大小)。当您查看它们时,您实际上看到的是内存里的信息,这些文件助于我们了解系统内部信息。例如:

      ├1/ 关于进程 1 的信息目录。每个进程在 /proc 下一个名为其进程号的目录。
      ├cpuinfo 处理器信息,如类型、制造商、型号和性能。
      ├devices 当前运行的核心配置的设备驱动的列表。
      ├dma 显示当前使用的 DMA 通道。
      ├filesystems 核心配置的文件系统。
      ├interrupts 显示使用的中断,and how many of each there have been.
      ├ioports 当前使用的 I/O 端口。
      ├kcore 系统物理内存映象。与物理内存大小一样,但实际不占这么多内存;
      ├kmsg 核心输出的消息。也被送到 syslog 。
      ├ksyms 核心符号表。
      ├loadavg 系统”平均负载”;3 个没意义的指示器指出系统当前的工作量。
      ├meminfo 存储器使用信息,包括物理内存和 swap。
      ├modules 当前加载了哪些核心模块。
      ├net 网络协议状态信息。
      ├self 到查看 /proc 的程序的进程目录的符号连接。
      ├stat 系统的不同状态 
      ├uptime 系统启动的时间长度。
      └version 核心版本。
      
    • /opt 可择的文件目录

      这个目录表示的是可择的意思,些自定义软件包或者第方工具,就可以安装在这里。比如在 Fedora Core 5.0 中,OpenOffice 就是安装在这里。些我们自己编译的软件包,就可以安装在这个目录中;通过源码包安装的软件,可以把它们的安装路径设置成 /opt 这样来安装。这个目录的作用一点类似 /usr/local 。

    • /mnt 临时挂载目录

      这个目录一般是用于存放挂载储存设备的挂载目录的,比如磁盘,光驱,网络文件系统等,当我们需要挂载某个磁盘设备的时候,可以把磁盘设备挂载到这个目录上去,这样我们可以直接通过访问这个目录来访问那个磁盘了。一般来说,我们最好在 /mnt 目录下面多建立几个子目录,挂载的时候挂载到这些子目录上面,因为通常我们可能不仅仅是挂载一个设备吧?

    • /media 挂载的媒体设备目录

      挂载的媒体设备目录,一般外部设备挂载到这里,例如 cdrom 等。比如我们插入一个 U 盘,我们一般会发现, Linux 自动在这个目录下建立一个 disk 目录,然后把 U 盘挂载到这个 disk 目录上,通过访问这个 disk 来访问 U 盘。

    • /var 内容经常变化的目录

      此目录下文件的大小可能会改变,如缓冲文件,日志文件,缓存文件,等一般都存放在这里。

    • /tmp 临时文件目录

      该目录存放系统中的一些临时文件,文件可能会被系统自动清空。的系统直接把 tmpfs 类型的文件系统挂载到这个目录上, tmpfs 文件系统由 Linux 内核支持,在这个文件系统中的数据,实际上是内存中的,由于内存的数据断电易失,当系统重新启动的时候我们就会发现这个目录被清空了。

    • /lost+found 恢复文件存放的位置

      当系统崩溃的时候,在系统修复过程中需要恢复的文件,可能就会在这里被找到了,这个目录一般为空。

    以上目录,是最常见的重要目录。其中,有些目录初学者容易混淆,这里简单区分一下:

    1. /bin , /sbin 与 /usr/bin , /usr/sbin
      • /bin 一般存放对于用户和系统来说“必须”的程序(二进制文件)。
      • /sbin 一般存放用于系统管理的“必需”的程序(二进制文件),一般普通用户不会使用,根用户使用。
      • /usr/bin 一般存放的只是对用户和系统来说“不是必需的”程序(二进制文件)。
      • /usr/sbin 一般存放用于系统管理的系统管理的不是必需的程序(二进制文件)。
    2. /lib 与 /usr/lib
      • /lib 和 /usr/lib 的区别类似 /bin, /sbin 与 /usr/bin, /usr/sbin 。
      • /lib 一般存放对于用户和系统来说“必须”的库(二进制文件)。
      • /usr/lib 一般存放的只是对用户和系统来说“不是必需的”库(二进制文件)。

    其他还一些目录例如: /home/user/bin, /home/user/opt, /home/user/etc, /usr/local/etc 等等,其作用都是类似于 /etc, /bin 等目录的,可能只是层次概念不同了,使用 Linux 时间长了,会逐渐体会到其中的含义。

    当然,我们可以无视这些目录,像使用 Windows 那样自由的,不管啥文件,想往哪存就往哪存,还是那句话,使用 Linux 时间长了,会逐渐体会到其中的含义,到时候也许我们想要乱来都不行了呢。^_^

    对文件系统目录的分类标准

    在大多数 Linux 系统上面,我们可以使用一个命令: man hier ,通过这个命令的输出,就知道“根目录”中所子目录的作用了。这个命令含义我不多说了,总之这里的 hier 就是对 Linux 文件系统中各级目录的标准功能,是一个大家都约定俗成了的东西。想要了解每个目录更详细的信息,需要仔细参考 man hier 的输出。下面就是一个比较简短的中文描述的对文件系统目录分类的 FHS 标准,也就是对 man hier 的简单翻译。

    NAME 名称 
    hier - 文件系统描述 
     DESCRIPTION 描述 
    一个典型的 Linux 系统具以下几个目录结构:
    / 根目录,是所目录树开始的地方。
    /bin 此目录下包括了单用户方式及系统启动或修复所用到的所执行程序。
    /boot 包括了引导程序的静态文件。此目录下包括了在引导过程中所必需的文件。系统装载程序及配制文件在 /sbin 和 /etc 目录中找到。
    /dev 对应物理设备的指定文件或驱动程序。参见 mknod(1)。
    /dos 如果 MS-DOS 和 Linux 共存于一台计算机时,这里通常用于存放 DOS 文件系统。
    /etc 用于存放本地机的配置文件。一些大型套件,如 X11,在 /etc 下它们自己的子目录。系统配置文件可以放在这里或在 /usr/etc。 不过所程序总是在 /etc 目录下查找所需的配置文件,你也可以将这些文件链接到目录 /usr/etc.
    /etc/skel 当建立一个新用户账号时,此目录下的文件通常被复制到用户的主目录下。
    /etc/X11X11 window system 所需的配置文件。
    /home 在 Linux 机器上,用户主目录通常直接或间接地置在此目录下。其结构通常由本地机的管理员来决定。
    /lib 此目录下包含系统引导和在根用户执行命令所必需用到的共享库。
    /mnt 挂载临时文件系统的挂载点。
    /proc 这是提供运行过程和核心文件系统 proc 挂载点。这一”伪”文件系统在以下章节中详细叙述 proc(5)。
    /sbin 类似于 /bin 此目录保存了系统引导所需的命令,但这些命令一般使用者不能执行。
    /tmp 此目录用于保存临时文件,临时文件在日常维护或在系统启动时无需通知便可删除 
    /usr 此目录通常用于从一个独立的分区上挂载文件。它应保存共享只读类文件,这样它可以被运行 Linux 的不同主机挂载。
    /usr/X11R6 X-Window 系统 Version 11 release 6.
    /usr/X11R6/bin X-Windows 系统使用的二进制文件;通常是在对更传统的 /usr/bin/X11 中文件的符号连接。
    /usr/X11R6/lib 保存与 X-Windows 系统关数据文件。
    /usr/X11R6/lib/X11 此目录保存与运行 X-Windows 系统关其他文件。通常是对来自 /usr/lib/X11 中文件的符号连接。
    /usr/X11R6/include/X11 此目录保存包括使用 X11 窗口系统进行编译程序所需的文件。通常是对来自 /usr/lib/X11 中文件的符号连接。
    /usr/bin 这是执行程序的主要目录,其中的绝大多数为一般使用者使用,除了那些启动系统或修复系统或不是本地安装的程序一般都放在此目录下。
    /usr/bin/X11
    X11 执行文件放置的地方;在 Linux 系统中,它通常是对 /usr/X11R6/bin. 符号连接表 
    /usr/dict
    此目录保存拼写检查器所使用的词汇表文件。
    /usr/doc
    此目录下应可以找到那些已安装的软件文件。
    /usr/etc
    此目录可用来那些存放整个网共享的配置文件。然而那可执行命令指向总是使用参照使用 /etc 目录下的文件。 /etc 目录下连接文件应指向 /usr/etc. 目录下适当的文件。
    /usr/include
    C 程序语言编译使用的 Include”包括”文件。
    /usr/include/X11
    C 程序语言编译和 X-Windows 系统使用的 Include”包括”文件。它通常中指向 /usr/X11R6/include/X11. 符号连接表。
    /usr/include/asm
    申明汇编函数的 Include”包括”文件,它通常是指向 /usr/src/linux/include/asm 目录的符号连接 
    /usr/include/linux
    包含系统变更的信息通常是指向 /usr/src/linux/include/linux 目录的符号连接表,来获得操作系统特定信息。(注:使用者应在此自行包含那些保证自己开发的程序正常运行所需的 libc 函数库。不管怎样,Linux 核心系统不是设计用来执行直接运行用户程序的,它并不知道用户程序需要使用哪个版本的 libc 库 。如果你随意将 /usr/include/asm 和 /usr/include/linux 指向一个系统核心,系统很可能崩溃。Debian 系统不这么做。它使用 libc*-dev 运行包中提供的核心系统标识,以保证启动所正确的文件。)
     /usr/include/g++
    GNU C++ 编译程序所使用的 Include”包括”文件。
    /usr/lib
    目标库文件,包括动态连接库加上一些通常不是直接调用的可执行文件案。一些复杂的程序可能在此占用整个子目录。
    /usr/lib/X11
    存放 X 系统数据文件及系统配置文件的地方。 Linux 中通常是指向 /usr/X11R6/lib/X11 目录的符号连接表。
    /usr/lib/gcc-lib
    GNU C 编译程序所使用的可执行文件案和”包括”文件。 gcc(1).
    /usr/lib/groff
    GNU groff 文件格式系统所使用的文件。
    /usr/lib/uucp
    uucp(1) 所使用的文件。
    /usr/lib/zoneinfo
    关时区信息文件文件。
    /usr/local
    安装在本地执行程序的地方。
    /usr/local/bin
    在此地放置本地执行程序的二进制文件。
    /usr/local/doc
    放置本地文件。
    /usr/local/etc
    安装在本地程序的配置文件。
    /usr/local/lib
    安装在本地程序的库文件。
    /usr/local/info
    安装在本地程序关信息文件。
    /usr/local/man
    安装在本地程序使用手册。
    /usr/local/sbin
    安装在本地的系统管理程序。
    /usr/local/src
    安装在本地程序的原始码。
    /usr/man
    手册页通常放在此目录,或相关子目录下。
    /usr/man//man[1-9]
    此目录在指定的地方以原始码形式存放手册页。系统在所的手册页中使用自己独特的语言及代码集,可能会省略 substring 子字符串。
    /usr/sbin
    此目录保存系统管理程序的二进制码,这些文件不是系统启动或文件系统挂载 /usr 目录或修复系统所必需的。
    /usr/share
    在此目录下不同的子目录中保存了同一个操作系统在不同构架下工作时特定应用程序的共享数据。使用者可以找到通常放在 /usr/doc 或 /usr/lib 或 /usr/man 目录下的这些数据。
    /usr/src
    系统不同组成部份的源文件包括参考数据报。不要将你自己与项目关的文件放这里,因为在安装软件外,/usr 下的文件属性除通常设为只读。
    /usr/src/linux
    系统核心资源通常拆包安装于此。这是系统中重要的一环,因为 /usr/include/linux 符号连接表指向此目录。你应当使用其他目录来来编译建立新核心。
    /usr/tmp
    此目录不再使用了。它应指向目录 /var/tmp。 这个链接只是出于系统兼容的目的,一般不再使用。
    /var
    此目录下文件的大小可能会改变,如缓冲文件可日志文件。
    /var/adm
    此目录为 /var/log 甩替代,通常是指向 /var/log 的符号连接表。
    /var/backups
    此目录用来存放重要系统文件的后备文件 
    /var/catman/cat[1-9] or /var/cache/man/cat[1-9]
    此目录存储根据手册分类预先格式化的参考手册页。(这些参考手册页是相互独立的)
    /var/lock
    此目录存储锁定文件。依据命名习惯,设备锁定文件是 LCKxxxxx xxxxx 与在文件系统中该设备名相同,使用的格式是 HDU UUCP 锁定文件,例如包含进程标识 PID 的锁定文件是一个 10 字节的 ASCII 格式的数字,后面跟一个换行符。
    /var/log
    各种日志文件。
    /var/preserve
    这是 vi(1) 存放正在编辑中的文件,以便以后可以恢复。
    /var/run
    运行时的变量文件,如存放进程标识和登入使用者信息的文件。 (utmp) 此目录下文件在系统启动时被自动清除。
    /var/spool
    各种程序产生的缓冲或排除等待的文件 
    /var/spool/at
    at(1) 的作业存缓区 
    /var/spool/cron
    cron(1) 的作业存缓区 
    /var/spool/lpd
    打印缓存文件。
    /var/spool/mail
    使用者邮箱。
    /var/spool/smail
    存放 smail(1) 邮件发送程序的缓冲文件。
    /var/spool/news
    新闻子系统的缓冲目录 
    /var/spool/uucp
    uucp(1) 的缓冲文件 
    /var/tmp
    类似 /tmp, 此目录保存未指定持续时间的临时文件。
    
    转自网络:https://www.infoq.cn/article/how-to-read-linux-file-system-and-directory-structure
    
    展开全文
  • Linux文件系统目录结构

    千次阅读 2020-10-07 15:39:54
    文章目录基本介绍Windows文件系统Linux文件系统具体的目录结构Linux目录小结 基本介绍 Windows文件系统 windows系统每个磁盘都有一个根目录结构,相当于森林。 Linux文件系统 linux的文件系统是采用级层式的树状...

    基本介绍

    Windows文件系统

    在这里插入图片描述
    windows系统每个磁盘都有一个根目录结构,相当于森林

    Linux文件系统

    在这里插入图片描述

    在这里插入图片描述

    linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。深刻理解linux树状文件目录是非常重要的。
    记住一句经典的话:在Linux世界里,一切皆文件。

    具体的目录结构

    Linux系统目录树结构

    1. /bin [重点] ( /usr/bin 、 /usr/local/bin )
      是Binary的缩写, 这个目录存放着最经常使用的命令
    2. /sbin (/usr/sbin 、 /usr/local/sbin)
      s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
    3. /home[重点]
      存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般
      该目录名是以用户的账号命名的。
    4. /root [重点]
      该目录为系统管理员,也称作超级权限者的用户主目录。
    5. /lib
      系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
    6. /lost+found
      这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
    7. /etc [重点]
      所有的系统管理所需要的配置文件和子目录 my.conf
    8. /usr [重点]
      这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。
    9. /boot [重点]
      存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
    10. /proc
      这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息。
    11. /srv
      service缩写,该目录存放一些服务启动之后需要提取的数据。
    12. /sys
      这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 s
    13. /tmp
      这个目录是用来存放一些临时文件的。
    14. /dev
      类似于windows的设备管理器,把所有的硬件用文件的形式存储。
    15. /media [重点]
      linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux
      会把识别的设备挂载到这个目录下。
    16. /mnt [重点]
      系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。 d:/myshare
    17. /opt
      这是给主机额外安装软件所摆放的目录。如安装ORACLE数据库就可放到该目录下。默认为空。
    18. /usr/local [重点]
      这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序。
    19. /var[重点]
      这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件。
    20. /selinux [security-enhanced linux] 360
      SELinux是一种安全子系统,它能控制程序只能访问特定文件。

    Linux目录总结

    1. Linux目录有且仅有一个根目录 /。
    2. Linux的各个目录存放的内容是规划好的,不用乱放文件。
    3. Linux以文件的形式管理管理设备,在Linux系统中,一切皆文件。
    展开全文
  • 目录文件系统初步认知学术定义文件系统种类什么是分区简单理解windows和linux文件系统的区别文件系统目录结构/etc目录下可以设置开机启动程序切换为root超级用户虚拟文件系统(Virtual File System)(VFS)是什么?...

    本文为学习笔记,整合课程内容以及部分文章,参考的原文链接如下:

    文件系统目录结构板块:
    参考:原文链接
    作者:DreamDZhu

    虚拟文件系统板块:
    参考:原文链接

    作者:uestc-leon

    师承陈立臣

    文件系统初步认知

    学术定义

    文件系统是操作系统用于明确存储设备的文件和数据结构,即在存储设备上组织文件的方法

    文件系统种类

    文件的格式又有FAT,HFS,…

    常见的:

    vfat:boot (bootloader,kernel)
    ext4:根目录
    tmpfs:内存文件系统

    比如,windows用的是NTFS。
    在这里插入图片描述

    树莓派的有

    df -T
    

    在这里插入图片描述

    什么是分区

    windows对于分区的管理较为“随意”,因为其面向普通PC用户。C,D盘随意存放文件。
    而linux较为严格,按照功能来分区,大多面向开发者。

    嵌入式系统可分为4个区:

    bootloader:启动代码
    para:启动代码向内核传递参数的位置
    kernel:l内核分区
    根分区:文件系统结构

    简单理解windows和linux文件系统的区别

    在windows下会有驱动器盘符(C,D,E等),某个文件确切的存在于某个盘符中。

    在linux下没有盘符的概念,所有的文件都在根目录(/)(cd或者cd ~ 进入)下。可以理解为所有文件都分散到整个磁盘上。

    文件系统目录结构

    参考:原文链接
    作者:DreamDZhu

    要求熟悉且记忆。

    在Linux系统中,目录被组织成一个单根倒置树结构,文件系统从根目录开始,用/来表示。

    在这里插入图片描述

    /根目录,位于Linux文件系统目录结构的顶层,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中。

    /bin : 提供用户使用的基本命令, 存放二进制命令,不允许关联到独立分区,OS启动会用到里面的程序。

    /boot:用于存放引导文件,内核文件,引导加载器.

    /sbin:管理类的基本命令,不能关联到独立分区,OS启动时会用到的程序(重要的命令通常处于bin,不重要的则安装在sbin)。

    /lib:存放系统在启动时依赖的基本共享库文件以及内核模块文件. 系统使用的函数库的目录 也存放了大量的脚本库文件 ,程序在执行过程中,需要调用时会用到

    /lib64:存放64位系统上的辅助共享库文件.

    /etc系统配置文件存放的目录,该目录存放系统的大部分配置文件和子目录,不建议在此目录下存放可执行文件

    /etc目录下可以设置开机启动程序

    为什么KTV的点歌机开机就是点歌界面,而不是linux的启动界面,通过配置更改。

    例如要设置智能家居的程序,当芯片上电后自动运行,而不是还去拿电脑去开始运行。

    • 复制可执行文件的绝对路径,例如
    /home/pi/wiringPi/a.out
    
    • 粘贴到etc目录下的rc.localexit 0之前。

    要加超级用户权限,否则只能进行只读操作

    sudo vi /etc/rc.local
    

    这里可以看到之前的开机自动配置ip地址的操作。
    在这里插入图片描述

    /home:普通用户主目录,当新建账户时,都会分配在此,建议单独分区,并分配额外空间用于存储数据。

    /root: 系统管理员root的宿主目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。

    切换为root超级用户

    在这里插入图片描述
    如果我非要进去呢?(尝尝鲜看看就好),通常是没有权限去更改root密码。树莓派玩玩罢了。

    • 强制创建一个新密码
    sudo passwd root
    

    在这里插入图片描述

    • 获取root超级权限
    su - root
    

    在这里插入图片描述

    ls可以发现/root下啥也看不到

    删库跑路:直接干掉根目录(别尝试哈)

    cd .. //回到上级目录 /
    
    rm / -rf
    

    切换回普通用户

    su - pi
    

    /media:便携式移动设备挂载点目录.

    /mnt:临时文件系统挂载点.

    /dev设备(device)文件目录,存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,存放连接到计算机上的设备(终端、磁盘驱动器、光驱及网卡等)的对应文件 (b 随机访问,c 线性访问)

    /opt:第三方应用程序的安装位置.

    /srv服务启动之后需要访问数据目录,存放系统上运行的服务用到的数据,如www服务需要访问的网页数据存放在/srv/www内。

    /tmp:存储临时文件, 任何人都可以访问,重要数据一定不要放在此目录下。

    /usr应用程序存放目录,/usr/bin 存放保证系统拥有完整功能而提供的应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件,_/usr/local 存放软件升级包,第三方应用程序的安装位置,/usr/share/doc _系统说明文件存放目录。

    /var :放置系统中经常发生变化的文件,如日志文件。/var/log 日志目录及文件./var/tmp:保存系统两次重启之间产生的临时数据.

    /proc: 用于输出内核与进程信息相关的虚拟文件系统,目录中的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间

    /proc目录举例

    • 可以在这个目录下查看cpu的更详细的信息
    cat /proc/cpuinfo
    

    processor是核心,有n个就是n核cpu
    在这里插入图片描述

    • 也可以在这个目录下查看内存的相关信息
    cat /proc/meminfo
    

    在这里插入图片描述

    sys: 用于输出当前系统上硬件设备相关的虚拟文件系统.

    /selinux:存放selinux相关的信息安全策略等信息.

    绝对路径与相对路径

    绝对路径 :以/开始,表示该文件从根目录开始的完整位置路径,必须以根开始

    相对路径 :不以/开始,指该文件相对于该目录的路径或某个目录的路径,不以根开始。可以作为一个简短的形式来指定一个文件名。

    虚拟文件系统(Virtual File System)(VFS)

    参考:原文链接

    作者:uestc-leon

    是什么?

    VFS是对各种文件系统的一个抽象,它为各种文件系统提供了一个通用接口

    有什么作用?

    文件对应的分区可能不一样,有的来自ext4,或者tmps。即为文件系统的类型可能不一样,数据存储的方式不一样,访问方式也就不一样,没办法做到操作统一化,给编程开发带来困难。

    在这里插入图片描述
    而虚拟文件系统的存在正是解决了这个问题:简化上层应用程序员的开发,不管是什么文件类型,磁盘还是设备,通通都是用open,read,write统一操作。

    EG1:cp指令的实现

    用户输入以下指令:

    cp /floppy/TEST /tmp/test
    

    其中/floppy是MS-DOS磁盘的一个安装点,而/tmp是一个标准的第二扩展文件系统(second Extended Filesystom, Ext2)的目录。正如图(a)所示,VFS是用户的应用程序与文件系统实现之间的抽象层。因此,cp程序并不需要知道/floppy/TEST 和 /tmp/test是什么文件系统类型。相反,cp程序直接与VFS交互,这是通过Unix程序设计人员都熟悉的普通系统调用来进行的。cp的执行代码如图(b)所示:
    在这里插入图片描述

    EG2:从系统编程,从上层到底层来看

    如果从分区的角度,串口操作的就是/dev;普通文件如 .config在ext4上;共享内存 tmpfs dev/shm…

    之前所学的Linux系统编程,各种应用层的知识,vfs都提供了帮助。

    在这里插入图片描述

    展开全文
  • Linux 和Windows的文件系统有些不同 , 在学习使用 Linux 之前 , 若能够了解这些不同 , 会有助于后续学习本文先对...Linux 系统的目录结构Windows 和 Linux 文件系统下面将介绍启动Windows和 Linux 后 , 在文件系统的

    Linux 和Windows的文件系统有些不同 , 在学习使用 Linux 之前 , 若能够了解这些不同 , 会有助于后续学习

    本文先对Windows和 Linux 上面文件系统原理、组织概念进行区分 , 并给出例子、列举两者的优缺点以具体说明 , 最后较为详细地介绍了 Linux 系统的目录结构

    Windows 和 Linux 文件系统

    下面将介绍启动Windows和 Linux 后 , 在文件系统的角度上 , 它们分别是怎样看待自己世界的

    访问原理

    在Windows系统中 , 一切东西都是存放在硬盘上的 ;启动系统后 , 先确定硬盘 , 再确定硬盘上的分区以及每个分区所对应文件系统 , 最后是存放在某个分区特定的文件系统中的文件 ; 也就是说 , Windows是通过 “某个硬盘-硬盘上的某个分区-分区上的特定文件系统-特定文件系统中的文件” 这样的顺序来访问到一个文件的 ;

    但是与 Windows 不同 , Linux 系统中的一切都是存放在唯一的 虚拟文件系统 中的 , 这个虚拟文件系统是树状的结构以一个根目录开始 ; 启动系统后 , 先有这个 虚拟文件系统 , 再识别出各个硬盘 , 再把某个硬盘的某个分区挂载到这个 虚拟文件系统的某个子树上(即分区用某个子目录来表示) , 再确定分区对应的子目录文件系统 , 最后的文件就存放在这个特定的文件系统中 ; 也就是说 , Linux 系统是通过 虚拟文件系统 -> 硬盘 -> 硬盘上的分区 -> 分区上的特定文件系统 -> 特定文件系统中的文件 这样的顺序来访问一个文件的 ;

    可能对习惯了使用Windows的用户来说 , Linux 的方式有些不适应 , 它的 虚拟文件系统 , 实质就是一颗目录树 , 最开始的目录叫做根目录 , 根目录中又有每一级子目录 , 或者文件 , 子目录又有子子目录和文件 , 其中每个子目录都特定的功能这个功能(这些是约定俗成了的 , 在后面 常用的重要目录 (See section 1.2.1) 中会详细说明) ;

    也许有人会问 , 没有这个虚拟文件系统就无法使用硬盘 , 可是最开始没有硬盘 , 那么这个 虚拟文件系统以及相应的组织结构是怎么存放起来的呢 ? 这个问题 , 就像先有鸡还是先有蛋这个问题一样看似简单实则… 但是 , 在 Linux 中 , 很轻易地跳出了这个思维循环 , 问题的答案并没在 虚拟文件系统硬盘 这两者之间徘徊 , 而是第三者 内存 , Linux系统启动起来之后 , 整个 虚拟文件系统的组织结构 , 都是随着每次内核系统的启动自动在内存中建立好了的 , 根本就不需要硬盘 ;

    另外还要注意 , 就是在我们用户的角度上 , 无论在 Windows 还是 Linux 上面 , 都是使用路径来访问一个文件的 ; 表示文件的路径由 文件所在的目录 + 各级目录的分隔符 + 文件 三个部分组成 , 这个策略在两者之间是一样的 , 所不同的是 , Windows下面目录分隔符是 \ , Linux 下面是 / , 也许这也是两者之间为了表示其各自立场不同的一个原因吧 ?

    系统组织

    在Windows系统中 , 我们可以把文件大体分为两种 : 系统文件和用户文件 ;一般来说系统文件(例如Windows操作系统本身 , 一些系统程序 , 程序运行所需的库文件 , 以及一些系统配置文件等)存放的默认位置在 C 盘 , 当然也可以在安装时候指定在其他盘;其它用户文件 , 包含用户后来安装的程序以及一些数据文件等 , 用户可以把它们随意存放在任意的分区 ;

    在 Linux 系统中 , 主要有两个概念 : 虚拟文件系统中的文件和 Linux操作系统内核本身 ;逻辑上可以认为前者属于上层 , 后者在下层 , 前者基于后者 , 后者依赖前者而存在 ;

    Linux 把除了它本身(Linux操作系统内核)以外的一切事物都看作是在 虚拟文件系统中的文件了 ;无论是键盘 , 鼠标 , 数据 , 程序 , CPU , 内存 , 网卡……无论是硬件、软件、数据还是内存中的东西 , 我们都可以在 虚拟文件系统中的相应子目录对他们进行访问和操作 , 操作统一 ;而实现这些管理的幕后就是Linux操作系统内核本身 : 启动 Linux 系统的时候 , 首先电脑把Linux操作系统内核加载到内存中 , 内核本身提供了文件管理 , 设备管理 , 内存管理 , CPU进程调度管理 , 网络管理等功能 , 等内核运行起来之后 , 就在内存中建立起相应的 虚拟文件系统 , 最后就是内核利用它提供的那些功能 , 通过管理文件的方式 , 来管理 虚拟文件系统中的硬件软件等各种资源了 ;

    Linux 把提供操作系统本身功能(管理计算机软硬件资源)的那些部分划给了Linux操作系统内核 , 使得Linux操作系统内核成为一个独立的部分 , 有它自己独立的开源代码;而其它的一切(软件应用 , 硬件驱动 , 数据)都根据其特性有自己的开源代码、或者自由地组织并且存放在那个 虚拟文件系统中由Linux操作系统内核来管理 ;这样 , 将系统本身和系统所管理的资源分开 , 并开放源代码 , 有助于对系统或者系统所管理的资源进行灵活的定制和扩展 , 还能按需快速建立起只适合自己使用的操作系统 , 也利于操作系统本身的发展 ;实际 Ubuntu , Fedora , RedHat 等各种不同的 Linux 操作系统发行版 , 简单来说就是不同厂商对其文件系统和内核进行了不同的配置而产生的 “大众化” 的操作系统 ;相比之下 , Windows就显得非常地零乱复杂 , 将系统、软件、硬件、数据都混在了一起 , 其不同版本只能由 Microsoft 一家公司发行 ;

    举例说明

    下面用直观的例子 , 来说明两者的不同 , 以加深理解 ;假设我们的机器上面有一个硬盘 , 硬盘分为三个区 ;

    在Windows系统中 , 我们启动系统之后就会看到 C, D, E, 盘符 , 它们分别对应硬盘上的三个分区 , 增加硬盘 , 或者分区 , 会导致盘符的增加(注意由于历史原因 , A, B 用于表示软驱 , 硬盘分区盘符从 C 开始按字母递增) , 这里的每个分区都各自可以被格式化为不同的文件系统(这里的文件系统 , 包括例如 NTFS 格式 , FAT32 格式等) , 文件系统的基本功能就是为了存放文件的 , 不同文件系统区别一般在于管理其中存放的文件的功能的强弱 , 所以分区被格式化成指定格式的文件系统之后 , 就可以存放任何文件和目录了 , 我们看到的 C, D, E 内容也就对应了硬盘中相应分区的数据内容 ;

    但是 , 与Windows中把硬盘分区看成 C, D, E 盘符不同 , Linux 中最开始根本就没有硬盘的概念 , 就只有一个纯粹的 虚拟文件系统 ;如果想要使用哪个硬盘的某个分区 , 就把那个分区 “挂载” 到某个子目录之下 , 这样硬盘中的分区 , 文件系统 , 目录等内容就呈现到了那个子目录里面 ;也就是说 , 在 Linux 中 , 我们使用硬盘中的数据 , 实际是先把硬盘的某个分区 “挂载” 到某个子目录下 , 然后通过那个子目录来访问的 ;这个例子中 , 通常硬盘会对应 虚拟文件系统中的 /dev/sda (如有多个硬盘 , 则为 /dev/sda, /dev/sdb, …… , 按字母递增), 其三个分区对应 /dev/sda1, /dev/sda2, /dev/sda3 (多个分区按数字递增 , 不同硬盘的分区 , 对应为 /dev/sdb1, /dev/sdb2 等等), 默认硬盘各个分区会被挂载到 虚拟文件系统系统中类似 /mnt/sda1/, /mnt/sda2/, /mnt/sda3/ 的目录(在 Linux 又叫挂载点)中 , 在 /etc/fstab 文件中 , 我们可以找到分区文件和挂载点的对应关系描述 ;这样 , 硬盘相应的分区就做为整个 虚拟文件系统根目录下的一颗子树 , 反映到了子目录(挂载点)上 , 子目录中的内容就对应分区中的数据 ;

    假设访问上述硬盘第三个分区 dir1 目录中的文件 test.file

    Windows系统上的路径 : E:\dir1\test.file
    Linux系统上的路径 : /mnt/sda3/dir1/test.file
    

    再有 , 假设用户安装和卸载一个程序 firefox :

    • Windows系统中

      指定或不指定安装路径类似 , 程序的安装目录会在 C:\Program Files\Firefox 类似的目录中 , 或指定的安装路径中; 可执行文件一般在程序的安装路径;依赖的内部库、第三方库、和系统库可能在安装路径中 , 也可能在 C:\Windows\System32, 或 C:\Windows\system 等类似的路径;而程序访问期间的系统和用户配置文件和产生的输入输出文件 , 可能会在安装路径配置中 , 或者在 C:\Windows\ 下的某些文件中(比如注册表数据库文件、用户目录等) , 这就不一定了 ;而且不同的系统版本 , 应用程序版本下 , 这些目录的具体名称和路径可能会有所不同 ;卸载的时候由于不确定哪些地方安装了什么内容 , 很容易造成文件删除补全 , 遗留系统垃圾等现象 , 造成系统越来越瘫肿 ;

    • Linux 系统中

      如果不指定安装路径 , 所有程序的可执行文件在 /usr/bin 中 , 全局配置文件在 /etc/firefox 类似的目录 , 用户配置文件一般在用户主目录的 .firefox 的路径下(用户主目录路径名称统一格式为 /home/) , 依赖的内部库和第三方库在 /usr/lib, 系统库在 /lib 下 , 数据文件一般就在用户主目录下 ; 如果指定安装目录 , 那么所有内部库和可执行程序 , 全局配置文件 , 会在 <安装路径> 下的 bin, lib, etc 子目录下 , 其它文件一般和默认情况相同 ;卸载程序之时 , 只需在对应目录中 , 将可执行文件、内部库、配置文件、数据文件删除即可 , 基本没有不确定是否遗留垃圾文件的问题 ;这些都是大多数应用程序安装的和访问的默认策略 , 就像是不成文的业界标准 , 不排除有个别程序不安装这种策略部署应用 , 但是 Linux 用户带来 “麻烦” 的应用 , 早晚也会被淘汰 , 不可能会流行在 Linux 系统中 , 这样 , 自然的 , 好的应用都保存在 Linux 系统中并逐渐流行起来 , 还不会破坏系统结构 ;

    可见 , Linux 文件的存放和组织明显方式更高效 , 层次更分明 ;

    优缺点

    基于上述内容 , Windows和 Linux 文件系统的各有优缺点分别如下 :

    • Windows系统优点

      • 优点主要是用户存放东西的位置比较自由 , 系统结构简单便于新用户上手 ;

    • Windows系统缺点

      • 目录组织缺乏标准 , 由于对”系统文件”和”用户文件”存放位置缺乏细致的规定 , 数据组织的方式显得比较凌乱 , 并且两种文件之间很容易相互干扰(例如数据文件可能存放在系统区域给系统带来垃圾文件等) ;
      • 用户的使用经验对系统的使用效率影响很大 , 一般来说 , 我们使用Windows时候合理使用分区会提升的系统效率 ;例如根据需要设置合理的系统分区(假设为 C 分区) , 尽量少往 C 盘存放数据文件 , 根据具体情况可以将一些 “重要并且常用的” 程序安装在 C 分区 , 随时保持系统目录的清洁和大小助于提升系统的运行速度 , 用户安装的一般软件尽量不要安装在 C 盘 , 安装软件时候指定的位置最好采用默认标准目录名称(例如 X:\Program Files 目录 , 这里 X 表示盘符而不要自己定义一些奇怪名字的目录 , 这样便于软件的维护等等 ;
      • 共享不便 , Windows上有经验的用户们会将自己的目录结构组织好 , 但是每个用户组织自己内容的方式是不一样的 , 所以他的机器上哪里存放了什么内容 , 别人很难知道 , 为共享带来了麻烦 ;

    • Linux 系统优点

      • 目录结构反映系统运行机理 , 当我们了解了这些目录的功能之后 , 我们对整个 Linux 操作系统的运行机理也会有一个大致的了解 ;
      • 结构清晰避免逻辑混乱 , 这样的目录结构 , 有助于我们以一种高效的方式组织自己的数据 , 分类清晰并且不会对系统运行有任何影响 , 规定了最开始每个目录的功能 , 并没有限制我们的自由 , 因为我们知道我们可以在哪里创建自己的子目录并且在子目录中任意创建自己的文件 ;
      • 组织规范便于共享 , 由于目录具有统一的组织结构 , 所以 Linux 上面的用户在共享数据的时候 , 能够很容易地猜测出他所需要的数据大致存放在什么位置 , 同时也不会影响到私有数据的保密性 , 毕竟具体来说 , 怎么存放自己的私有数据 , 那是用户自己决定的 ;

    • Linux 系统缺点

      最开始虚拟文件系统中的每个子目录的功能是事先规定好了的 , 我们需要事先知道那些目录存放哪些文件 , 然后在相应的位置中创建自己的内容 , 这也是 Linux 系统入门门槛高的一个原因 ;当然 , 最开始的新手 , 也完全可以无视这一点 , 可以像Windows那样随意地创建目录和文件(尽管不推荐这么做) ;实际上最开始的目录也不多 , 主要就那么几个 , 花不了多长时间就会明白它们的作用的 , 而明白这些作用之后带来的好处 , 远不止付出那么多(本文后面 常用的重要目录 (See section 1.2.1) 会着重对此进行介绍) ;


    Linux 上面的虚拟文件系统目录组织

    实质上 , 我们启动系统所看到的 “根目录” , 逻辑上是 Linux 虚拟文件系统的根目录中的一个子目录 , 我们看不到除了这个 “根目录” 以外的其他的目录 , 那些目录和操作系统的具体实现相关是被操作系统内核隐藏起来了的 , 所以这里就介绍我们所能看到的文件系统中的 “根目录” 的各个子目录中的作用吧 ;

    在 Linux 文件系统中的每一个子目录都有特定的目的和用途 ;一般都是根据 FHS 标准定义一个正式的文件系统结构的 , 这个标准规定了哪些目录应该哪些作用 ;这里我们先介绍一些日常经常用到的目录 , 然后给出 FHS 相关的内容 ;

    常用的重要目录

    这里 , 根据本人的使用经验 , 给出比较常见重要的一些目录 , 最开始我们对它们有所了解就可以了 ;随着对 Linux 使用的经验的加深 , 我们会了解越来越多的目录 ;对目录的功能知道得越多 , 我们对 Linux 系统的工p作原理就理解的越深刻 , 理解操作系统的工作原理 , 更助于我们更为规范地使用和理解系统中每个目录存在的意义 , 直至最后几乎知道系统中的每个文件……

    • / 根目录

      包含了几乎所的文件目录 ;相当于中央系统 ;进入的最简单方法是 : cd /

    • /boot 引导程序 , 内核等存放的目录

      这个目录 , 包括了在引导过程中所必需的文件 , 引导程序的相关文件(例如 grub , lilo 以及相应的配置文件)以及 Linux 操作系统内核相关文件(例如 vmlinuz 等)一般都存放在这里 ;在最开始的启动阶段 , 通过引导程序将内核加载到内存 , 完成内核的启动(这个时候 , 虚拟文件系统还不存在 , 加载的内核虽然是从硬盘读取的 , 但是没经过 Linux 的 虚拟文件系统 , 这是比较底层的东西来实现的) ;然后内核自己创建好 虚拟文件系统 , 并且从 虚拟文件系统的其他子目录中(例如 /sbin 和 /etc)加载需要在开机启动的其他程序或者服务或者特定的动作(部分可以由用户自己在相应的目录中修改相应的文件来配制) ;如果我们的机器中包含多个操作系统 , 那么可以通过修改这个目录中的某个配置文件(例如 grub.conf)来调整启动的默认操作系统 , 系统启动的择菜单 , 以及启动延迟等参数

    • /sbin 超级用户可以使用的命令的存放目录

      存放大多涉及系统管理的命令(例如引导系统的 init 程序) , 是超级权限用户 root 的可执行命令存放地 , 普通用户无权限执行这个目录下的命令(但是有时普通用户也可能会用到) ;这个目录和 /usr/sbin , /usr/X11R6/sbin或/usr/local/sbin 等目录是相似的 , 我们要记住 , 凡是目录 sbin 中包含的都是 root 权限才能执行的 , 这样就行了 ;后面会具体区分 ;

    • /bin 普通用户可以使用的命令的存放目录

      系统所需要的那些命令位于此目录 , 比如 ls 、 cp 、 mkdir 等命令;类似的目录还 /usr/bin , /usr/local/bin 等等 ;这个目录中的文件都是可执行的、普通用户都可以使用的命令 ;作为基础系统所需要的最基础的命令就是放在这里 ;

    • /lib 根目录下的所程序的共享库目录

      此目录下包含系统引导和在根用户执行命令时候所必需用到的共享库 ;做个不太好但是比较形象的比喻 , 点类似于Windows上面的 system32 目录 ;按理说 , 这里存放的文件应该是 /bin 目录下程序所需要的库文件的存放地 , 也不排除一些例外的情况 ;类似的目录还 /usr/lib , /usr/local/lib 等等

    • /dev 设备文件目录

      在 Linux 中设备都是以文件形式出现 , 这里的设备可以是硬盘 , 键盘 , 鼠标 , 网卡 , 终端 , 等设备 , 通过访问这些文件可以访问到相应的设备 ;设备文件可以使用 mknod 命令来创建 , 具体参见相应的命令;而为了将对这些设备文件的访问转化为对设备的访问 , 需要向相应的设备提供设备驱动模块(一般将设备驱动编译之后 , 生成的结果是一个 *.ko 类型的二进制文件) , 在内核启动之后 , 再通过 insmod 等命令加载相应的设备驱动之后 , 我们就可以通过设备文件来访问设备了 ;一般来说 , 想要 Linux 系统支持某个设备 , 只需要三个东西 : 相应的硬件设备 , 支持硬件的驱动模块 , 以及相应的设备文件

    • /home 普通用户的家目录(或 $HOME 目录、主目录)

      在 Linux 机器上 , 用户主目录通常直接或间接地置在此目录下 ;其结构通常由本地机的管理员来决定 ;通常而言 , 系统的每个用户都有自己的家目录 , 目录以用户名作为名字存放在 /home 下面(例如 quietheart 用户 , 其家目录的名字为 /home/quietheart) ;该目录中保存了绝大多数的用户文件(用户自己的配置文件 , 定制文件 , 文档 , 数据等) , root 用户除外(参见后面的 /root 目录) ;由于这个目录包含了用户实际的数据 , 通常系统管理员为这个目录单独挂载一个独立的磁盘分区 , 这样这个目录的文件系统格式就可能和其他目录不一样了(尽管表面上看 , 这个目录还是属于根目录的一棵子树上) , 将系统文件和数据文件分开存放 , 有利于维护

    • /root 用户root的 $HOME 目录

      系统管理员(就是 root 用户或超级用户)的主目录比较特殊 , 不存放在 /home 中 , 而是直接放在 /root 目录下了

    • /etc 全局的配置文件存放目录

      系统和程序一般都可以通过修改相应的配置文件 , 来进行配置 ;例如 , 要配置系统开机的时候启动那些程序 , 配置某个程序启动的时候显示什么样的风格等等 ;通常这些配置文件都集中存放在 /etc 目录中 , 所以想要配置什么东西的话 , 可以在 /etc 下面寻找我们可能需要修改的文件 ;一些大型套件 , 如 X11 , 在 /etc 下它们自己的子目录 ;系统配置文件可以放在这里或在 /usr/etc ; 不过所有程序总是在 /etc 目录下查找所需的配置文件 , 你也可以将这些文件链接到目录 /usr/etc ;另外 , 还一个需要注意的常见现象就是 , 当某个程序在某个用户下运行的时候 , 可能会在该用户的家目录中生成一个配置文件(一般这个文件最开始就是 /etc 下相应配置文件的拷贝 , 存放相应于”当前用户”的配置) , 这样当前用户可以通过配置这个家目录的配置文件 , 来改变程序的行为 , 并且这个行为只是该用户特有的 ;原因就是 : 一般来说一个程序启动 , 如果需要读取一些配置文件的话 , 它会首先读取当前用户家目录的配置文件 , 如果存在就使用;如果不存在它就到 /etc 下读取全局的配置文件进而启动程序 ;就是这个配置文件不自动生成 , 我们手动在自己的家目录中创建一个文件的话 , 也有许多程序会首先读取到这个家目录的文件并且以它的配置作为启动的选项(例如我们可以在家目录中创建 vim 程序的配置文件 .vimrc , 来配置自己的 vim 程序)

    • /usr 这个目录中包含了命令库文件和在通常操作中不会修改的文件

      这个目录对于系统来说也是一个非常重要的目录 , 其地位类似Windows上面的 Program Files 目录(请原谅我可能这样做比较不太恰当^_^) ;安装程序的时候 , 默认就是安装在此文件内部某个子文件夹内 ;输入命令后系统默认执行 /usr/bin 下的程序(当然 , 前提是这个目录的路径已经被添加到了系统的环境变量中) ;此目录通常也会挂载一个独立的磁盘分区 , 它应保存共享只读类文件 , 这样它可以被运行 Linux 的不同主机挂载 ;

    • /usr/lib 目标库文件 , 包括动态连接库加上一些通常不是直接调用的可执行文件的存放位置

      这个目录功能类似 /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 格式) , 内核支持这种格式 ;其中包含了全部虚拟文件 ;它们并不保存在磁盘中 , 也不占据磁盘空间(尽管命令 ls -c 会显示它们的大小) ;当您查看它们时 , 您实际上看到的是内存里的信息 , 这些文件助于我们了解系统内部信息 ;

    • /opt 可择的文件目录

      这个目录表示的是可择的意思 , 些自定义软件包或者第方工具 , 就可以安装在这里 ;比如在 Fedora Core 5.0 中 , OpenOffice 就是安装在这里 ;些我们自己编译的软件包 , 就可以安装在这个目录中;通过源码包安装的软件 , 可以把它们的安装路径设置成 /opt 这样来安装 ;这个目录的作用一点类似 /usr/local ;

    • /mnt 临时挂载目录

      这个目录一般是用于存放挂载储存设备的挂载目录的 , 比如磁盘 , 光驱 , 网络文件系统等 , 当我们需要挂载某个磁盘设备的时候 , 可以把磁盘设备挂载到这个目录上去 , 这样我们可以直接通过访问这个目录来访问那个磁盘了 ;一般来说 , 我们最好在 /mnt 目录下面多建立几个子目录 , 挂载的时候挂载到这些子目录上面 , 因为通常我们可能不仅仅是挂载一个设备吧?

    • /media 挂载的媒体设备目录挂载的媒体设备目录 , 一般外部设备挂载到这里 , 例如 cdrom 等 ;

      比如我们插入一个U盘 , 我们一般会发现 , Linux 自动在这个目录下建立一个 disk 目录 , 然后把U盘挂载到这个 disk 目录上 , 通过访问这个 disk 来访问U盘 ;

    • /var 内容经常变化的目录

      此目录下文件的大小可能会改变 , 如缓冲文件 , 日志文件 , 缓存文件 , 等一般都存放在这里 ;

    • /tmp 临时文件目录

      该目录存放系统中的一些临时文件 , 文件可能会被系统自动清空 ;的系统直接把 tmpfs 类型的文件系统挂载到这个目录上 , tmpfs 文件系统由 Linux 内核支持 , 在这个文件系统中的数据 , 实际上是内存中的 , 由于内存的数据断电易失 , 当系统重新启动的时候我们就会发现这个目录被清空了 ;

    • /lost+found 恢复文件存放的位置

      当系统崩溃的时候 , 在系统修复过程中需要恢复的文件 , 可能就会在这里被找到了 , 这个目录一般为空 ;

    以上目录 , 是最常见的重要目录 ;其中 , 有些目录初学者容易混淆 , 这里简单区分一下

    1. /bin , /sbin 与 /usr/bin , /usr/sbin

      /bin 一般存放对于用户和系统来说”必须”的程序(二进制文件) ;
      /sbin 一般存放用于系统管理的”必需”的程序(二进制文件) , 一般普通用户不会使用 , 根用户使用 ;
      /usr/bin 一般存放的只是对用户和系统来说”不是必需的”程序(二进制文件) ;
      /usr/sbin 一般存放用于系统管理的系统管理的不是必需的程序(二进制文件) ;

    2. /lib 与 /usr/lib

      /lib 和 /usr/lib 的区别类似 /bin, /sbin 与 /usr/bin, /usr/sbin ;
      /lib 一般存放对于用户和系统来说”必须”的库(二进制文件) ;
      /usr/lib 一般存放的只是对用户和系统来说”不是必需的”库(二进制文件) ;

    其他还一些目录例如 : /home/user/bin, /home/user/opt, /home/user/etc, /usr/local/etc 等等 , 其作用都是类似于 /etc, /bin 等目录的 , 可能只是层次概念不同了 , 使用 Linux 时间长了 , 会逐渐体会到其中的含义 ;

    当然 , 我们可以无视这些目录 , 像使用Windows那样自由的 , 不管啥文件 , 想往哪存就往哪存 , 还是那句话 , 使用 Linux 时间长了 , 会逐渐体会到其中的含义 , 到时候也许我们想要乱来都不行了呢 ;^_^

    对文件系统目录的分类标准

    在大多数 Linux 系统上面 , 我们可以使用一个命令 : man hier , 通过这个命令的输出 , 就知道”根目录”中所子目录的作用了 ;这个命令含义我不多说了 , 总之这里的 hier 就是对 Linux 文件系统中各级目录的标准功能 , 是一个大家都约定俗成了的东西 ;想要了解每个目录更详细的信息 , 需要仔细参考 man hier 的输出 ;

    原文链接 : 比起Windows , 怎样解读Linux的文件系统与目录结构 ?

    个人网站: Github , 欢迎点击给星

    展开全文
  • 一、Linux文件系统的目录结构 1、/bin(/usr/bin、/usr/local/bin):该目录存放着最经常使用的命令。 2、/sbin(/usr/sbin、/usr/local/sbin):s即super user,这里存放的是系统管理员使用的系统管理程序。 3、...
  • Linux文件系统以及目录结构...本文先对Windows和Linux上面文件系统的一些概念进行区分,然后介绍一些Linux文件系统相关的原理,最后较为详细地介绍了Linux系统的目录结构。 一、Linux和Windows文件系统
  • windows的目录结构最基础的是以c:d:e:f盘为主,而linux没有磁盘的概念,只有一个根目录,linux文件系统是采用级层式的树桩结构,再次结构嘴上是根目录 在linux世界中,一切皆文件,Linux是使用文件来管理的 总结 ...
  • Linux操作系统的文件目录结构 “/”根目录部分有以下子目录: /usr 目录包含所有命令、程序库、文档和其它文件。这些文件在正常操作中不会被改变。这个目录也包含你Linux发行版本主要...
  • 在Linux系统中,目录被组织成一个:单根倒置树结构文件系统从根目录开始,用/来表示。文件名称区分大小写( 大小写敏感还需要看具体的文件系统格式 ),以.开头为隐藏文件,路径用/来进行分割(windows中使用\来...
  • Windows系统目录结构

    千次阅读 2020-06-24 21:02:31
    Windows系统目录及功能 ├—WINDOWS │ ├—system32(存放Windows的系统文件和硬件驱动程序) │ │ ├—config(用户配置信息和密码信息) │ │ │ └—systemprofile(系统配置信息,用于恢复系统) │ │ ├—...
  • Linux-文件系统以及目录结构简介

    千次阅读 2016-06-29 21:38:35
    本文先对Windows和Linux上面文件系统的一些概念进行区分,然后介绍一些Linux文件系统相关的原理,最后较为详细地介绍了Linux系统的目录结构。一、Linux和Windows文件系统下面分别简单介绍一下启动Windows和Linux之后...
  • 文章目录Linux系统的文件目录结构 Linux系统的文件目录结构 目录结构: 文件名 解释 Bin 全称binary,含义是二进制。该目录中存储的都是一些二进制文件文件都是可以被运行的。 Dev 该目录中主要存放的是...
  • Linux的目录:Linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录 “/”,然后在此目录下在创建其他的目录 /dev 类似于windows的设备管理器,把所有的硬件用文件的形式存储 /media(重点) ...
  • Linux系统的文件目录结构介绍/ 根目录部分有以下子目录:/usr 目录包含所有命令、程序库、文档和其它文件。这些文件在正常操作中不会被改变。这个目录也包含你Linux发行版本主要应用程序,类似于Windows...
  • 目录结构: Bin:全称binary,含义是二进制。该目录中存储都是一些二进制文件文件都是可以被运行。 Dev:该目录中主要存放是外接设备,例如盘、其他光盘等。在其中外接设备是不能直接被使用,需要...
  • 玩转Linux(文件系统目录结构)1.文件系统结构2.Linux下文件类型3.文件名规则4.绝对路径与相对路径 在Linux系统中,目录被组织成一个:单根倒置树结构,文件系统从根目录开始,用/来表示。 文件名称区分大小写...
  • windows系统:tree命令生成树状形目录结构文件 前言: 有时候,我们需要打印出目录下所有的文件名字、文件类型,一个一个去敲就是很难受了,tree命令可以生成树状形文件目录结构文件,这就很方便。 具体使用: 1、...
  • LINUX之文件系统目录结构

    千次阅读 2017-08-02 09:55:25
    文件系统的目录结构也是一样的,就像用windows一样,你得知道整个电脑有几个盘符,每个盘符里面存放着哪些东西,这样工作起来更顺畅。Linux文件系统的目录结构windows的有很大的不同,具体如下: 进入linux根...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,126
精华内容 1,650
关键字:

windows文件系统的目录结构