Linux 教程学习笔记

时间:2021-09-07 23:52:00

本文石墨链接: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 教程学习笔记

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

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

三、Linux 文件基本属性

1、Linux文件属性

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、各命令模式

Linux 教程学习笔记

2、常用按键说明:

Linux 教程学习笔记

见原文。

八、linux yum 命令

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

以Window为例,来理解yum

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

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

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