本文石墨链接:https://shimo.im/docs/pD68dP3PP9PxwKj3

本文全部整理自:

Linux 系统启动过程 | 菜鸟教程 https://www.runoob.com/linux/linux-system-boot.html

一、Linux 系统启动过程

1、分为 5 个阶段

  1. 内核的引导

    打开电源 → BIOS 开机自检 → 按 BIOS 中设置的启动设备(通常是硬盘)来启动→ 操作系统接管硬件 → 首先读入 /boot 目录下的内核文件。
  2. 运行 init
  3. init 进程

    init 进程是系统所有进程的起点,你可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。

    init 程序首先读取配置文件 /etc/inittab。
  4. 运行级别(7 个:0-6。)

    Linux 允许为不同的场合,分配不同的开机启动程序,这就叫做 "运行级别"(runlevel)。

    也就是说,启动时根据 "运行级别",确定要运行哪些程序。
  5. 系统初始化
  6. init 的配置文件执行/etc/rc.d/rc.sysinit

    主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。
  7. rc.sysinit中l5:5:wait:/etc/rc.d/rc 5
  • 以 5 为参数运行 /etc/rc.d/rc,/etc/rc.d/rc 是一个 Shell 脚本,它接受 5 作为参数,去执行 /etc/rc.d/rc5.d/ 目录下的所有的 rc 启动脚本。
  • /etc/rc.d/rc5.d/ 目录中的这些启动脚本实际上都是一些连接文件,而不是真正的 rc 启动脚本,真正的 rc 启动脚本实际上都是放在 /etc/rc.d/init.d/ 目录下。
  1. 建立终端
  2. rc 执行完毕后,返回 init。这时基本系统环境已经设置好了,各种守护进程也已经启动了。
  3. init 接下来会打开 6 个终端,以便用户登录系统。

    注:为什么会是6个终端?
  4. 用户登录系统
  5. 登录方式有三种
    1. 命令行登录

      2. ssh 登录

      3. 图形界面登录

2、Linux 关机

正确的关机流程为:sync > shutdown > reboot > halt。

3、shell、操作系统、内核的关系

  • 操作系统是一个整体,包括shell、内核和其他没说明的东西;
  • 内核是操作系统最重要的部分;
  • shell 是用户交互界面。

4、参考:

shell、操作系统、内核是一个东西吗-知乎 https://www.zhihu.com/question/37695460

二、Linux 系统目录结构

每个目录的作用直接看原文吧,没必要重复整理。

Linux 系统目录结构 | 菜鸟教程 https://www.runoob.com/linux/linux-system-contents.html

三、Linux 文件基本属性

1、Linux文件属性

注:"-" 字符表示没有权限。

文件类型还有:

  • d表示目录
  • -表示文件
  • l表示链接文档 (link file)
  • b表示装置文件里面的可供储存的接口设备 (可随机存取装置)
  • c表示装置文件里面的串行端口设备,例如键盘、鼠标 (一次性读取装置)

2、Linux用户的划分。

在 Linux 系统中,用户是按组分类的,一个用户属于一个或多个组。(一个而用户必定属于一个组么?有没有不属于任何组的用户?)

  • 用户自身(对文件所有者来说,又叫属主)
  • 同组用户(对文件所有者来说,又叫属主)
  • 其他用户(对文件所有者来说,就是其他组的用户和其他用户)

root 用户来说,一般情况下,文件的权限对其不起作用。

3、更改文件属性:

见原文。注意用数字更改文件属性,很精妙的一种实现。

四、Linux 文件与目录管理

1、绝对路径和相对路径

  • 绝对路径:以/开始
  • 相对路径:不以/开始
    • ..表示父级
    • .表示自己

2、常用命令说明

文件和目录操作

ls
cd
pwd
mkdir
redir
cp
rm
mv
  • 注意命令对于文件和目录的操作不同,有时候对文件和目录需要不同的选项。

文件查看

cat
tac
nl
more
less
head
tail

五、Linux 用户和用户组管理

1、用户管理

  • 添加新用户:useradd
  • 删除帐号:userdel
  • 修改帐号:usermod
  • 密码(口令)管理:passwd

2、用户组管理:

  • 添加用户组:groupadd
  • 删除用户组:groupdel
  • 修改用户组的属性:groupmod
  • 用户切换用户组:newgrp

用户组的属性:组标识号、组名

组标识号(GID)是什么?同用户号。多个组名可以有同一个组标识号。Linux系统内部实际是根据组标识号进行区分的。

3、用户的属性和常用文件解读

用户名,用户主目录,用户组,用户附加组,用户登录Shell,用户号,口令,注释性描述

  • 用户名
  • 用户标识号:
    • 一般情况下它与用户名是一一对应的。
    • 如果几个用户名对应的用户标识号是一样的,系统内部将把它们视为同一个用户,但是它们可以有不同的口令、不同的主目录以及不同的登录 Shell 等。
  • 主目录:用户的起始工作目录。
  • 用户登录Shell
    • 什么是Shell?

      • Shell 是用户与 Linux 系统之间的接口。
      • Linux 的 Shell 有许多种,每种都有不同的特点。常用的有 sh (Bourne Shell), csh (C Shell), ksh (Korn Shell), tcsh (TENEX/TOPS-20 type C Shell), bash (Bourne Again Shell) 等。
      • 所以,实际Shell就是用户登陆后使用的具体某个软件。
    • 用户登录Shell:即指定用户登陆后使用的软件。
      • 如果不指定 Shell,那么系统使用 sh 为默认的登录 Shell,即这个字段的值为 /bin/sh。
      • 如果登录 Shell 为空,则用户无法登录。(就是伪用户)
  • 伪用户
    • 常用伪用户
  • 用户组和用户附加组:
    • 当一个用户同时是多个组中的成员时,在 /etc/passwd 文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。

常用文件解读:

  • /etc/passwd 文件 :存放用户信息
  • /etc/passwd:存放用户口令信息
  • /etc/group:存放用户组的所有信息

4、添加批量用户操作

具体见原文

六、Linux 磁盘管理

1、常用命令

  • df:列出文件系统的整体磁盘使用量

    • 检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
  • du:检查磁盘空间使用量
    • 与 df 命令不同的是 Linux du 命令是对文件和目录磁盘使用的空间的查看
  • fdisk:用于磁盘分区
    • 格式化:mkfs
  • 磁盘检验:fsck
  • 磁盘挂载与卸除:
    • 挂载使用 mount 命令
    • 卸载使用 umount 命令

2、关于磁盘分区和挂载

  • 磁盘:

    • 就是你买的硬件,比如你买的1T影盘
  • 分区:
    • 逻辑上将该磁盘分为几部分,一个部分就是一个区。
    • 为什么要分区?
      • 便于管理和使用。

        • 不分区,一个磁盘就是一整块。
        • 分区后,磁盘被分成了多个部分,每个部分户部干扰。
        • 虽然物理上他们都是同一个磁盘,但逻辑上互不干扰。是不是很方便。
        • 同时分区还有其他作用,比如分区能提高文件系统管理效率,然后操作系统启动时也需要从特定分区加载系统文件等等。不是很清楚,先不写了,不过这些不影响对分区的理解。
  • 挂载:
    • 以Linux的文件系统来说明。

      • Linux的树形文件结构只是逻辑上的结构,一个文件可以在这个树上,但这个文件本身必须保存在磁盘的某个分区上。
      • 而树形结构要和磁盘的某个分区之间有一个映射关系。这个关系的建立就是挂载。
        • 比如你创建一个文件,实际上有两块:

          • 第一步,文件系统中有这个文件;
          • 第二步:磁盘上有这个文件本身。
        • 如果你不挂载,你就无法创建文件。想一想呀,文件该存在哪里呢?空气中么?
        • 但为什么你不挂载依然可以创建文件。
          • 因为操作系统启动时肯定有一个你没有手动操作的挂载(这个步骤可能不叫挂载,不过和挂载作用一致,就是建立映射关系)。
          • 然后,即使你不主动指定挂载,当你创建文件时,系统会一直向上找,直到找到一个可用的挂载,然后创建文件。
        • 如果你想指定另外的挂载
          • 使用挂载命令即可。解除挂载就使用解除挂载命令。
        • 挂载操作之后有什么影响?
          • 当你将一个已有目录挂载到新的分区上。即使文件系统中有这个我呢见,但是文件系统会找不到。因为文件实际在之前的分区上。新的分区上可能就是空白。
          • 所以:你更换了分区,也就破坏了联系,就无法在找到之前的文件了。
          • 如果你在新的挂载分区上创建新的文件和目录,就没有任何问题。

参考:

  1. Linux 系统分区和挂载浅谈 - CC 的技术专栏 - CSDN 博客 https://blog.csdn.net/cc_net/article/details/2894510
  2. Linux 文件系统下的分区和挂载 - 小小呆的博客 - CSDN 博客 https://blog.csdn.net/gui951753/article/details/79032190

    注:详细讲解了为什么要分区,以及分区的到底是什么?

    挂载就是利用一个目录当成进入点,将磁盘分区的数据放置在该目录下,进入该目录就可以读取该分区。
  3. 能否通俗易懂,深入浅出地解释一下linux中的挂载的概念? - 知乎 https://www.zhihu.com/question/266907637
  4. Linux 学习笔记(二):什么是挂载?mount 的用处在哪? - Machine Learning with Peppa - CSDN 博客 https://blog.csdn.net/qq_39521554/article/details/79501714

七、Linux vi/vim

Vim的使用:

1、各命令模式

2、常用按键说明:

见原文。

八、linux yum 命令

yum 实际就是软件的安装,更新,卸载等操作。

以Window为例,来理解yum

当我们想安装一个软件时:

  • 首先需要一个应用商店,提供所有的团结。

    • 在Linux中,应用商品就是 yum 源
  • 软件有名字,我们也能根据名字找到软件。
    • 在Linux中,软件名在就是package
  • 然后,下载、安装、更新、卸载
    • Linux中。安装(install)时,会根据package同时执行查询、下载和安装操作。
    • 其他更新就是更新,卸载就是移除。

更换 yum 源就相当于更换应用商店,因为有的不好用。而且,为了防止总从yum源中后去,我们可以本地生成一个缓存。

Linux 教程学习笔记的更多相关文章

  1. 尚硅谷韩顺平Linux教程学习笔记

    目录 尚硅谷韩顺平Linux教程学习笔记 写在前面 虚拟机 Linux目录结构 远程登录Linux系统 vi和vim编辑器 关机.重启和用户登录注销 用户管理 实用指令 组管理和权限管理 定时任务调度 ...

  2. linux 驱动学习笔记01--Linux 内核的编译

    由于用的学习材料是<linux设备驱动开发详解(第二版)>,所以linux驱动学习笔记大部分文字描述来自于这本书,学习笔记系列用于自己学习理解的一种查阅和复习方式. #make confi ...

  3. Linux系统学习笔记:文件I/O

    Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...

  4. Linux内核学习笔记-2.进程管理

    原创文章,转载请注明:Linux内核学习笔记-2.进程管理) By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  5. Linux内核学习笔记-1.简介和入门

    原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...

  6. jfinal框架教程-学习笔记

    jfinal框架教程-学习笔记 JFinal  是基于 Java  语言的极速  WEB  + ORM  开发框架,其核心设计目标是开发迅速.代码量少.学习简单.功能强大.轻量级.易扩展.Restfu ...

  7. Webpack新手入门教程(学习笔记)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: center; font: 30.0px Helvetica; color: #000000 } ...

  8. Linux内核学习笔记二——进程

    Linux内核学习笔记二——进程   一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...

  9. 20135316王剑桥Linux内核学习笔记

    王剑桥Linux内核学习笔记 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 计算机是如何工作的 个人理 ...

随机推荐

  1. myeclipse2018修改主题

  2. reCAPTCHA打不开的解决方法

    reCAPTCHA打不开的解决方法 by WernerPosted on2018年1月8日 reCAPTCHA是国外广泛使用的验证码,但由于一些原因国内无法使用. 观察使用reCAPTCHA的网站,发 ...

  3. 洛谷 P3627 [APIO2009]抢掠计划 题解

    Analysis 建图+强连通分量+SPFA求最长路 但要保证最后到达的点中包含酒馆 虽然思路并不难想,但要求的代码能力很高. #include<iostream> #include< ...

  4. Vin2008 X64安装.Net Framework1.1

     http://www.iis.net/learn/install/installing-iis-7/how-to-install-aspnet-11-with-iis-on-vista-and- ...

  5. Linux操作系统常用命令合集——第五篇-磁盘和文件系统操作(15个命令)

    1.fdisk [命令作用] 用于观察硬盘实体使用情况.也可以对硬盘分区. 对于一块硬盘来讲,最多只能管理15个分区 [命令语法]  fidisk    [选项]    [参数] [常用选项] -b& ...

  6. Cogs 2221. [SDOI2016 Round1] 数字配对(二分图)

    [SDOI2016 Round1] 数字配对 ★★★ 输入文件:menci_pair.in 输出文件:menci_pair.out 简单对比 时间限制:1 s 内存限制:128 MB [题目描述] 有 ...

  7. NodeJS基础知识

    console.log方法: console.log("This is a test string"); node app.js 使用重定向标准输出流: node app.js 1 ...

  8. mac 安装rabbitmq出现的问题

    一直提示这个文件权限问题. 然后试了各种办法.chown user:group / chmod 777 等等.都没有解决. 最后查到 chmod 666 /users/xxx/.erlang.cook ...

  9. C++类*类型和其他类型相互转换

    类类型转换时会出现两种之间转换,下面我们说的是类类型 1.其他类型转换为本类类型 通过类带一个参数的构造函数:或者多个参数构造函数,除了第一个参数后面参数都有默认值时!这样在其他类型赋值给该类类型对象 ...

  10. C++标准库分析总结(三)——<迭代器设计原则>

    本节主要总结迭代器的设计原则,以及iterstor traits的设计作用 1.迭代器遵循的原则 迭代器是算法和容器的桥梁,它是类模板的设计,迭代器必须有能力回答算法提出的问题才能去搭配该算法的使用 ...