树莓派开始,玩转Linux27:鸟瞰文件树

树莓派开始,玩转Linux27:鸟瞰文件树

在本章自下而上地介绍了外部存储器的底层细节。本章将自上而下,鸟瞰完整的Linux文件树。直接从属于根目录/的文件和目录都是系统必备的关键内容。我们来看它们的功能。

1./boot和树莓派启动:

/boot下挂载了FAT32格式的启动分区,里面的文件用于树莓派的开机启动。计算机启动是一个神秘而有趣的过程,先来看计算机常见的启动方式。

当我们打开一台普通计算机的电源时,计算机一般会自动从主板的BIOS上读取其中所存储的程序。BIOS知道直接连接在主板上的硬件。它从默认存储设备中读取最开始512字节的数据,即所谓的MBR(Master Boot Record)。
用户也可以通过BIOS配置,从其他数据存储设备中找到MBR。通过MBR,计算机知道要从该存储设备的哪个分区来找引导加载程序。引导加载程序储存有操作系统的相关信息,比如操作系统名称、内核所在位置等。随后引导加载程序加载内核,操作系统开始工作。

树莓派的开机方式有别于普通计算机。树莓派是一块集成电路板,没有主板,也没有BIOS。树莓派电路板上携带着启动程序。板载启动程序会挂载FAT32的启动分区,并运行其中的引导程序bootcode.bin。它负责下一阶段的启动工作,会从SD卡上找到GPU固件start.elf,将固件写入GPU。GPU在start.elf的指挥下,会读取系统配置文件config.txt和内核配置文件cmdline.txt,并启动内核文件kernel.img。当内核加载成功时,处理器开始工作,系统启动正式开始。

普通计算机的启动流程有更多可选项。而树莓派通过板载程序来固化启动流程,让启动更可控。但无论是哪种开机流程,我们看到操作系统是通过小程序加载大程序,并相继唤醒硬件的过程。内核加载成功之后,操作系统正式开始工作。Linux系统还会进行一系列的准备工作,来让操作系统更好用。

内核会首先预留运行所需的内存空间,然后通过驱动程序检测计算机硬件。这样,操作系统就可以知道自己有哪些硬件可用。随后,内核会启动init进程。到此,内核完成了启动阶段的工作。进程init会运行一系列初始脚本,这些脚本用于准备操作系统。

· 设置计算机名称、时区等。
· 检测存储器。
· 挂载存储器。
· 清空临时文件。
· 设置网络。
· 启动其他后台进程。
这些初始脚本运行完毕,操作系统就准备好了,只是,还没有人可
以登录。进程init会给出登录对话框,或是图形化的登录界面。登录之
后,就是Shell或图形化的用户界面了。

2.应用程序相关:

在Linux系统中,应用程序都编译成二进制的可执行文件,位于名为bin的目录下。"bin"就是二进制"binary"的简写,根目录下就有/bin。这里保存着Linux系统运行必须的应用程序。

在这里插入图片描述
在这里插入图片描述
根目录在/sbin下保存了系统启动、修复和恢复所必需的应用程序。/usr下有一个/usr/bin目录,也存放了可执行文件。
/usr/bin保存了次要一些的应用程序。在大多数Linux发行版本中,/usr/bin中包含的应用程序比/bin中多得多。Raspbian中apt-get安装的程序,大多也会出现在这里。

虽然/usr/bin程序对于Linux程序的运行不是那么关键,但很可能是常用的应用程序,比如文本编辑程序、编译器、数据库等。我们已经接触过很多/usr/bin中的程序,比如:
在这里插入图片描述
同理,/usr/sbin保存的也是次要的系统维护程序,比如任务规划程序cron。最后,/usr/local/bin和/usr/local/sbin也是保存应用程序的地方。这里通常保存了用户自己编写或手动编译安装的应用程序。

虽然计算机可以直接理解二进制可执行文件,但是二进制可执行文件往往还要依赖其他的文件才能正常运行。这些文件包含了分布于/lib、/usr/lib、/usr/local/lib中的库。这些编译好的库让程序可以复用已经成熟的代码,从而实现更加强大的功能。此外,/usr/include和/usr/local/include中有头文件。当程序跨文件执行库里的函数时,也需要引用包含了该函数声明的头文件。

3./etc与配置:

/etc中有很多配置文件。这些配置文件可以影响系统和应用程序的行为。我们在之前已经见过很多/etc下的配置文件,借助这些已经见过的文件来说明/etc下文件的类型。
/etc保存着关键的操作系统配置文件,这些配置文件可以改变操作系统级别的行为,如表所示。

在这里插入图片描述
操作系统启动时的init进程及init调用的脚本也在/etc下。这些脚本在启动阶段执行,并最终决定呈现给我们的操作系统。路径与功能如表所示。

在这里插入图片描述
我们在Linux用户中看到,/etc保存着用户和用户组的相关信息。增加或删除用户的操作,实际上就是修改这些文件,如表所示。

在这里插入图片描述
上面提到的配置文件都是操作系统级别的。/etc不仅有操作系统级别的配置文件,还包括了应用程序的配置文件。这些配置文件是全局的,对所有用户都有效,如表所示。

在这里插入图片描述
应用程序也可以有自己的初始化脚本,如表所示。
在这里插入图片描述
4.系统信息与设备:

内核直接管理的硬件信息可以在/proc下查询。/proc其实是一个虚拟文件系统,直接对应了内存上的内核空间。通过/proc,内核给用户提供了一个查询内核信息的简易窗口。
/proc/cpuinfo中保存着CPU信息,/proc/meminfo中保存着内存使用信息。
因为内核直接管理的设备对于计算机运行至关重要,所以/proc下的文件大多是只读的,不允许用户直接进行写入操作。内核还保存着进程的信息。这些原本在内核空间的信息也以文件的形式呈现在/proc目录下。

/dev目录中保存着设备文件。每个设备文件对应着一个设备,比如存储器和UART接口。通过这些设备文件,设备还可以是没有硬件实物的虚拟设备,比如终端。我们可以以文件操作的形式直接和设备进行交流,通过读写/dev/ttyAMA0来与UART接口通信。

Linux的设备有主编号(Major Number)和副编号(Minor Number)。主编号说明了设备的类型,在/dev中对应为一个名字,比如"ttyAMA"。副编号就是后面跟的"0",即该类型下编号为0的设备。通过man命令来找出某种设备的主编号,比如:
在这里插入图片描述
Linux下的/mnt用于挂载额外的文件系统,比如网络硬盘、光驱和额外的硬盘。对于/mnt下的存储设备,通常要手动挂载或者在挂载文件里增加对应条目。/media用于挂载可插拔设备,如U盘和数码相机。这些设备插入电脑USB接口,Linux就会自动挂载在/media下。近年来,随着可插拔设备的快速发展,/media的使用频率超过了/mnt。

5.其它目录:

节介绍/home、/var和/tmp目录。这三个目录下的内容都和用户或应用程序的使用情况有关,目录占据的空间可能随着时间快速变化。

Linux是多用户系统,每个用户会有一个用户目录,位于不同的路径下。/root是root的用户目录。该目录文件的拥有者和拥有组都是root。其他用户的用户目录都位于/home下。用户pi的用户目录位于/home/pi,这个目录文件的拥有者和拥有组都是pi。因为用户数据可能快速增长,所以/home往往挂载有额外的存储器,拥有独立的存储空间。

/var用于保存系统中会动态增长的数据,比如/var/log下的系统日志和应用程序日志。此外,每个应用程序也会产生动态增长的数据。就拿邮件程序来说,其可执行文件是一个大小不变的静态文件,但电子邮件的相关文字和图片会随着用户使用快速增长。因此,电子邮件常常归档保存在/var下。缓存数据占据的空间经常浮动变化,因此也保存在/var下。由于/var的动态变化性,它经常挂载有独立的存储器。

应用程序运行的过程中可能会有一些临时数据需要保存到文件系统中,比如数学运算的中间结果。如果应用程序不想持久保存这些文件,就会把这些文件放在/tmp文件下。因为应用程序可能依赖这些临时文件,所以随意修改/tmp下的文件可能造成应用程序的崩溃。幸好,/tmp下的文件会自动清空,因此/tmp下的文件基本不需要维护。不同版本的Linux系统会选择不同的时间来清空临时文件。Raspbian会在开机后清空/tmp文件夹。由于临时文件的增长很难预知,因此/tmp也经常位于额外的存储器中,以免临时文件和系统文件竞争空间。

我们上面看到了Linux的文件树的结构,这个文件树继承自UNIX。在几十年的发展中,虽然有缓慢演进,但是结构上并没有太大的变化。了解这个历久弥新的文件树,对于我们使用整个UNIX家族的操作系统大有裨益。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值