欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【Linux】浅谈Linux文件系统的目录结构及开机启动过程

程序员文章站 2022-05-09 23:42:44
...

       笔者认为,学习Linux系统首先需要了解其文件的目录结构及开机启动过程,这将为进一步学习和使用Linux系统提供坚实的基础,包括Linux文件管理、Shell编程、Linux终端操作等等。

Linux文件系统目录结构

【Linux】浅谈Linux文件系统的目录结构及开机启动过程
【Linux】浅谈Linux文件系统的目录结构及开机启动过程

上述第一张图表示了Linux文件系统目录的树形结构,第二张图为笔者的Ubuntu 18.04 LTS的目录一览。具体到某些目录可能因为不同的Linux发行版而不同,但大部分是一致的。

  • /bin
    Binary缩写,存放着最经常使用的二进制命令,比如ls, cat, mkdir等等
  • /boot
    Linux内核文件,包括一些连接文件和镜像文件
  • /dev
    Device的缩写,存放着Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的
  • /etc
    存放所有的系统管理需要用到的配置文件及相关子目录
  • /home
    用户主目录,每个用户都有一个自己的目录,通常用用户的账号名来命名,是用户主目录的基点。比如/home/bebdong,可以用~bebdong来表示
  • /lib
    存放着系统基本的动态连接共享库,作用类似于Windows下的DLL文件。几乎所有的应用程序都需要用到这些共享库
  • /media
    Linux自动识别的一些设备,当识别后将会把识别的设备挂在到这个目录下。如U盘、光驱等等
  • /mnt
    提供给用户用于临时挂载其他的文件系统。比如讲光驱挂载到/mnt/上,进入该目录就可以查看光驱里的内容了
  • /opt
    用于存放额外安装软件的目录
  • /proc
    是一个虚拟目录,是系统内存的映射,这个目录下的内容不在硬盘上而在内存里,通过访问这个目录可以获取系统信息,也可以直接修改里面的某些文件。比如下面这条命令就可以使得别人无法ping本机:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
  • /root
    顾名思义,此目录为系统管理员目录,也称之为超级权限(root权限)用户的主目录
  • /sbin
    s表示super user,这里存放着root用户使用的系统管理程序
  • /srv
    存放着一些服务启动之后需要提取的数据
  • /sys
    这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
  • /tmp
    顾名思义,用于存放一些临时文件
  • /var
    用于存放不断扩充着的东西,比如需要经常被修改的目录,包括各种日志文件
  • /lost+found
    一般情况下是空的,系统非法关机之后,这里讲存放一些文件(windows下的.chk文件)
  • /usr
    存放着用户的应用程序和文件,类似于Windows中的Program Files目录,是极其重要的目录
  • /usr/bin
    系统用户使用的应用程序
  • /usr/sbin
    超级用户使用的比较高级的管理程序和系统守护程序
  • /usr/src
    内核源代码的默认存放目录

Linux开机启动过程

Linux系统启动过程大致可以分为五个阶段:

  • 内核的引导
  • 运行init
  • 系统初始化
  • 建立终端
  • 用户登录

内核引导

当按下计算机电源按键,首先是BIOS的开机自检,由固化到主板上的开机自检程序完成,按照BIOS中设置的启动盘来启动。接着操作系统将接管硬件,并载入/boot目录下的内核文件。

运行init

init可以看做是所有进程的祖先,它将启动系统中的任何其他进程。init首先读取配置文件/etc/inittab

运行级别

Linux为了应对不同场合对开机启动程序的不同需要,定义了“运行级别(runlevel)”。换句话说,启动时根据不同的运行级别,确定要运行哪些程序。这些开机需要启动的程序就叫做“守护进程(daemon)”,可以理解为windows下的“服务(service)”。
Linux的7个运行级别:

  • 0:系统停机状态,默认运行级别不能为0,否则无法正常启动
  • 1:单用户工作状态,root权限,用于系统维护,禁止远程登录
  • 2:多用户状态,无网络文件系统,即Network File System,NFS,不允许网络中的计算机通过TCP/IP共享网络资源
  • 3:完全的多用户状态,有NFS,登录后进入控制台命令行模式
  • 4:系统未使用,保留
  • 5:X11控制台,登录后进入图形化界面(GUI)模式
  • 6:系统正常关闭并重启,默认运行级别不能为6,否则无法正常启动

系统初始化

系统初始化将主要完成:**交换分区、检查磁盘、加载硬件模块以及其他一些需要优先执行的任务。
init配置文件中:

si::sysinit:/etc/rc.d/rc.sysinit

表示调用执行了该目录下的rc.sysinit这个shell脚本,主要完成上述初始化任务,是每一个运行级别下都需要首先运行的重要脚本。

建立终端

当执行完rc之后,返回到init,这时系统环境已经设置完毕,各种守护进程也已启动。
接着init将打开6个终端,便于用户登录。同时将显示一个图形化的登录界面,也就是我们登录时看到的界面,将引导我们输入用户名和密码。输入的内容将作为参数传给login程序来验证用户身份。
在inittab中定义的6个终端:

2345:respawn:/sbin/mingetty tty1
2345:respawn:/sbin/mingetty tty2
2345:respawn:/sbin/mingetty tty3
2345:respawn:/sbin/mingetty tty4
2345:respawn:/sbin/mingetty tty5
2345:respawn:/sbin/mingetty tty6

“2345”表示2、3、4、5四种运行级别,在这四种运行级别中都以respawn的方式运行mingetty程序,用户打开终端,设置模式。

用户登录

一般来说,用户拥有三种登录方式:

  • 命令行登录
  • ssh登录
  • 图形界面登录

显然,对于运行级别为5的用户来说,他们就是通过一个图形化登录界面进入系统。登录成功后可以直接进入KDE、GNOME等桌面环境。
Linux用于验证登录信息的程序是login,它会接受mingetty传来的用户名作为用户名参数,然后将对用户名进行分析:如果不是root用户,且存在/etc/nologin文件,那么login将返回nologin文件内容并退出。这样做的目的是为了防止在系统维护时的非root用户登录。只有/etc/securetty中登记了的终端才允许root用户登录,如果不存在这个文件,那么root用户可以在任何终端上登录。/etc/securetty文件的作用就是对用户作出附加访问限制。

登录窗口的切换方式

Linux提供了6个命令窗口终端让我们登录,默认的为第一登录窗口,即tty1。按下Ctrl+Alt+F1~F6来切换不同的登录窗口。
如果安装了图形界面,系统默认进入图形化登录界面,这时同样可以按下Ctrl+Alt+F1~F6来进入其中一个命令窗口。如果要再次返回图形化界面只需要按下Ctrl+Alt+F7。

启动过程图示

【Linux】浅谈Linux文件系统的目录结构及开机启动过程

参考文章

[1] 菜鸟教程. Linux系统启动过程[EB/OL]. http://www.runoob.com/linux/linux-system-boot.html
[2] 菜鸟教程. Linux系统目录结构[EB/OL]. http://www.runoob.com/linux/linux-system-contents.html