【Linux】浅谈Linux文件系统的目录结构及开机启动过程
笔者认为,学习Linux系统首先需要了解其文件的目录结构及开机启动过程,这将为进一步学习和使用Linux系统提供坚实的基础,包括Linux文件管理、Shell编程、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。
启动过程图示
参考文章
[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