Linux初学者:从不同角度理解Linux系统
在我初学Linux系统时,虽然已经掌握了一些命令,但总觉得还是很混乱。大家新买的笔记本如果是Windows系统,那么第一件事往往就是分区,目的就是将系统和软件分开。然而Linux却没有类似于Windows分区的概念,取而代之的是挂载点。此外,Windows上安装软件一般即装即用,在linux上又有了软件依赖的概念,这更加让Linux新手摸不着头脑了。Linux的众多发行版也让Linux小白们陷入了选择困难症。虽然Linux发行版众多,但都万变不离其宗。下面从几个不同的角度来描述Linux系统来加深理解。
1.从linux软件包和运行库的依赖关系来看
Linux系统总体来说由四部分组成:kernel,glibc,shell,applications。
Linux最重要的便是kernel与glibc库了。kernel的功能是与硬件进行交互,是Linux系统与硬件交互的纽带。下来就是glibc库,几乎所有的软件都会依赖glibc库。在编译LFS(Linux from scratch)时,glibc库是也最先要编译的组件之一。再向上一层就是软件应用了。这里的Shell就是一个人机交互接口,它可以分为两种:字符终端和GUI。Shell里面的运行的就是各种软件。
2.从文件系统的层次上来看
Linux的思想为:一切皆文件。那么,从linux的文件系统上来看,也许能够更加深刻理解linux系统。如下图所示:
Linux的文件系统管理是通过虚拟文件系统(VFS)来完成的。Linux的文件系统不仅限于储存文件的磁盘,而是包括所有可以通过文件进行访问的内容。例如,磁盘文件访问使用ext4文件系统,目录访问使用rootfs,内核访问使用proc,内存文件使用tmpfs,设备访问使用sysfs等等。Linux将所要访问的目标以适当的文件系统的形式挂载到目录当中,以便进行操作。可以这样理解:假如你需要访问内核中的内容,但是没办法直接访问,所以内核可以通过VFS,将其以proc文件系统形式挂载到proc目录,这样便可以访问内核了。总之,最重要的一点,这里的proc
,rootfs
,ext4
,xfs
这些都是文件系统类型,不要将proc
视为目录。
3.从根文件系统目录结构上来看
Linux的目录是很条理的,在某种程度上说,比Windows的目录更加条理。Linux的根文件系统是linux系统运行的基础。根文件系统(rootfs
)提供了一个内核与磁盘文件相互通信的桥梁。根文件系统确保了所有文件拥有共同的起始路径/
。根文件系统的目录结构基本上按照FHS(Filesystem Hierarchy Standard)标准来设置。在Linux系统根目录下包含以下几个目录:/boot, /bin, /dev, /etc, /home, /lib, /lib64, /media, /mnt, /opt, /proc, /root, /run, /sbin, /srv, /sys, /tmp, /usr, /var
。其中一些目录为链接:
/bin
==>/usr/bin
/sbin
==>/usr/sbin
/lib
==>/usr/lib
/lib64
==>/usr/lib64
每个目录的基本作用:
目录 | 作用 |
---|---|
/boot | 系统启动相关文件,如内核、initramfs,以及grub(bootloader) |
/dev | 设备文件。文件系统类型为udev |
/etc | 软件配置文件目录 |
/lib | 库文件 |
/opt | 可选目录(第三方软件安装目录,比如我会把MATLAB和texlive安装到这里) |
/proc | 原来为空,系统启动后内核会将自己的信息映射到此文件夹中(内容是动态的,包括进程信息,以及内核状态信息等),文件系统类型为proc |
/sys | 原来为空,跟硬件设备相关的属性映射文件,即内核与硬件之间的信息,类型为sysfs |
/bin | 用户命令(链接到/usr/bin) |
/sbin | 管理命令(链接到/usr/sbin) |
/usr | 全局共享目录,系统应用程序都在这里面 |
/run | 进程信息。类型为tmpfs |
4.从系统启动过程来看
Linux系统启动过程如下:
其实很简单,grub引导内核然后加载initramfs,执行systemd初始化程序,然后切换到真实根目录,再次接着systemd初始化,最后完成系统启动。
5.从系统应该包含的功能上看
操作系统需要实现众多的功能才能称之为一个完整的操作系统。Linux系统功能大致分为一下几个方面:
- 设备管理:设备的识别,udev,设备文件的特点,常见设备,虚拟设备
- 磁盘管理:磁盘识别,分区,文件系统,lvm和raid,磁盘管理命令和软件
- 文目管理:文件和目录的创建,文件访问时间,文件查找,压缩归档
- 进程管理:进程查看,后台进程,进程杀死
- 权限管理:文件访问权限,特殊权限位,文件访问控制列表,sudo
- 用户管理:用户和用户组的添加,修改,删除。
- 软件管理:软件安装,查找;软件源的配置;软件编译
- 网络管理:网络状态查看,网卡配置,路由信息
- 人机交互:bash基本语法及配置文件
- 服务管理:systemd,linux常用服务安装及配置。这个内容比较多,比如lamp环境搭建,ftp服务器搭建,samba共享服务,rsyslog日志服务等等。每个展开都是一本书。
6.总结
可以这样说,从来不存在什么“Linux系统”,存在的只是一堆文件和一个内核。然而就是这个内核和这些文件有机的组织在一起才形成了Linux系统。Linux系统管理就是配置和使用一系列软件,实现我们想要的功能,并对其进行维护的过程。Linux核心思想便是一切皆文件。所有的问题从文件入手,即可迎刃而解。