在我初学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. jQuery <= 1.11.3 DomXSS漏洞

    听团里说WordPress又爆跨站漏洞了:" XSS漏洞在Jetpack和二十五默认主题影响百万WordPress用户 ",分析发现原来是jQuery老版本的DOM XSS漏洞[错 ...

  2. Shell系列(33) - 多分支if语句简介及计算器例子

    多分支if条件语句 if [ 条件判断式1 ] then 当条件判断式1成立时,执行程序1 elif [ 条件判断式2 ] then 当条件判断式2成立时,执行程序2 ...省略更多条件... els ...

  3. java eclipse 使用随笔

    1,无法import java.awt. 等各种文件,解决办法:(在module-info.java文件中加入requires java,desktop这句话)

  4. [转]js之this,call,apply用法

    (一)关于this 首先关于this我想说一句话,这句话记住了this的用法你也就差不多都能明白了:this指的是当前函数的对象.这句话可能比较绕,我会举出很多例子和这句话呼应的!(看下文)1.首先看 ...

  5. 对代理IP进行检测是否可用

    第一种方法是使用telnetlib import telnetlib import requests from lxml import etree #解析此url页面的IP url = 'http:/ ...

  6. 【译】.NET Core 3.0 发布小尺寸 self-contained 单体可执行程序

    .NET Core 提供的发布应用程序选项 self-contained 是共享应用程序的好方法,因为应用程序的发布目录包含所有组件.运行时和框架.您只需要告诉使用者应用程序的入口 exe 文件,就可 ...

  7. 轻量级 Java 基础开发框架,Solon & Solon Cloud 1.5.40 发布

    Solon 已有120个生态扩展插件,此次版本以细节打磨为主: 增加 mybatisplus-solon-plugin 插件 //至此,Solon 已完成国内外主流的5个ORM框架插件适配 插件 so ...

  8. 分布式锁Redission

    Redisson 作为分布式锁 官方文档:https://github.com/redisson/redisson/wiki 引入依赖 <dependency> <groupId&g ...

  9. 详解build-gradle文件

    目录 gradle 两个build.gradle文件 最外层目录下的build.gradle文件 jcenter dependencies闭包 app目录下的build.gradle文件 com.an ...

  10. 用例图示例:使用系统边界表示多个项目 / Using System Boundary to model Multiple Projects in Use Case Diagram

    什么是用例图? 用例是一种捕获系统功能需求的技术.用例描述了一个独立于实现细节的期望行为.用例的目标是捕获用户设想的所有系统级功能.从用户的角度来看,用例是关于系统应该做什么的.用例捕获系统利益相关者 ...