在我初学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目录,这样便可以访问内核了。总之,最重要的一点,这里的procrootfsext4xfs这些都是文件系统类型,不要将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核心思想便是一切皆文件。所有的问题从文件入手,即可迎刃而解。

Linux初学者:从不同角度理解Linux系统的更多相关文章

  1. Linux内存管理(深入理解Linux内核)

    Linux的内存管理,实际上是借助80x86的硬件分段和分页电路,将逻辑地址转化为物理地址的. 物理内存中,有一部分是一直(Permanently)映射给内核使用的,这部分主要用于保存内核的代码,以及 ...

  2. 献给初学者:谈谈如何学习Linux操作系统

    本文出自 “技术成就梦想” 博客,请务必保留此出处http://ixdba.blog.51cto.com/2895551/569329. 为了能把这篇不错的文章分享给大家.所以请允许我暂时用原创的形式 ...

  3. 针对于linux初学者的学习(摘自网络端)

    一. 选择适合自己的Linux发行版谈到linux的发行版本,太多了,可能谁也不能给出一个准确的数字,但是有一点是可以肯定的,linux正在变得越来越流行, 面对这么多的Linux 发行版,打算从其他 ...

  4. linux初学者-磁盘拉伸缩减篇

    linux初学者-磁盘拉伸缩减篇 在系统的使用过程中,往往会出现这样的问题,由于刚开始无法估计需要的磁盘空间,导致后期磁盘空间不够,使得数据没地方存储,又或者后期磁盘空间过大,造成资源的浪费.这种在使 ...

  5. 从需求的角度去理解Linux系列:总线、设备和驱动

    笔者成为博客专家后整理以前原创的嵌入式Linux系列博文,现推出以让更多的读者受益. <从需求的角度去理解linux系列:总线.设备和驱动>是一篇有关如何学习嵌入式Linux系统的方法论文 ...

  6. 深入理解linux系统下proc文件系统内容

    深入理解linux系统下proc文件系统内容 内容摘要:Linux系统上的/proc目录是一种文件系统,即proc文件系统. Linux系统上的/proc目录是一种文件系统,即proc文件系统.与其它 ...

  7. 读书笔记之Linux系统编程与深入理解Linux内核

    前言 本人再看深入理解Linux内核的时候发现比较难懂,看了Linux系统编程一说后,觉得Linux系统编程还是简单易懂些,并且两本书都是讲Linux比较底层的东西,只不过侧重点不同,本文就以Linu ...

  8. 理解Linux系统中的load average

    理解Linux系统中的load average(图文版) 博客分类: Linux linux load nagios  一.什么是load average? linux系统中的Load对当前CPU工作 ...

  9. 深入理解linux系统的目录结构(总结的非常详细)

    对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下面 ...

随机推荐

  1. TP5增加扩展配置目录

    ThinkPHP5.0.1版本开始增加了扩展配置目录的概念,在应用配置目录或者模块配置目录下面增加extra子目录,下面的配置文件都会自动加载,无需任何配置. 这极大的方便了我们进行扩展配置,比如在a ...

  2. Dockers(29)- 网络连通

    网络连通 背景 基于docker0建了两个容器tomcat01和tomcat02,网段位于172.12.0.0/16 我们又新建了一个网络,网段为192.168.0.0/16,基于此网段新建了两个容器 ...

  3. 接口管理工具swagger

    swagger,一款致力于解决接口规范化.标准化.文档化的开源库,一款真正的开发神器. swagger三大部分 Editor https://swagger.io/tools/swagger-edit ...

  4. 使用form插件 和ajax 结合使用 没有调用success的原因

    当我做文件上传的时候出现不调用success方法  将datype: 'json' 注释掉后成功响应 浏览器显示200状态码,并且响应头为json格式,格式ajax不认为它是json,所以一直执行错误 ...

  5. lua文件修改为二进制文件

    注意:lua编译跟luajit编译的二进制文件是不兼容,不能运行的 如果是使用luajit,请直接使用luajit直接编译二进制 第一种:luajit编译(以openresty为例,跟luac是相反的 ...

  6. python在iis获取header

    #print os.environ['QUERY_STRING']#print os.environ['HTTP_HOST'] #print '---------------------------- ...

  7. cas的基础配置

    去除HTTPS的j基础认证方式 cas的:deployerConfigContext.xml <!-- Required for proxy ticket mechanism. -->&l ...

  8. CF1446F-Line Distance【计算几何,树状数组,二分】

    正题 题目链接:https://www.luogu.com.cn/problem/CF1446F 题目大意 给出\(n\)个点,求所有点对构成的直线中与原点距离第\(k\)小的距离 \(2\leq n ...

  9. python操作Redis方法速记

    redis有5种数据结构,分别如下: 5种数据结构 python语言对5种数据结构的增删改查 全局函数 redis 连接 import redis pool = redis.ConnectionPoo ...

  10. TypeScript 枚举指南

    枚举是受 TypeScript 支持的数据类型.枚举允许您定义一组命名常量.使用它们可以更轻松地记录意图或创建一组不同的案例.枚举大多数用于面向对象的编程语言(如 Java 和 C#)中,现在也可以 ...