Linux基础和Shell脚本 | 青训营笔记

73 阅读4分钟

Linux基础

Linux是现代化应用程序交付的首选平台,我们一般将其部署在裸机、虚拟化或容器化环境中。

1. 计算机硬件

冯·诺依曼结构:控制器、运算器、存储器、输入设备、输出设备

2. 计算机操作系统

操作系统(Operating System,OS):管理和控制计算机的硬件和软件资源,负责在用户与系统硬件之间传递信息

  1. 管理计算机资源:

    • 处理器管理
    • 存储器管理
    • 设备管理
    • 文件管理
  2. 提供用户接口:

    • 命令接口
    • 图形用户接口
    • 程序接口

操作系统启动流程:

  1. 接通电源 —— BIOS —— BIOS自检 —— Bootloader —— OS
  2. 接通电源 —— UEFI —— Bootloader —— OS

3. Linux系统概览

(不谈历史)

  1. Linux 版本

    • Debian 系列
    • Red Hat 系列
    • Slackware 系列
    • 国产系列 Linux 内核 + 常用软件 = Linux 发行版本
  2. Linux 系统应用领域

    • IT 服务器(云服务器)
    • 嵌入式和智能设备
    • 学术研究和软件研发
    • 个人使用

4. Linux 系统结构

  1. 基本组成

    • 内核
    • Shell
    • 文件系统
    • 应用程序
  2. 体系结构

    1. 用户空间:应用程序、GNU C Library
    2. 内核空间:系统调用、内核、平台架构 内核时硬件与软件的中间层 内核是一个资源管理程序 内核提供一组面向系统的命令
  3. 进程管理 进程:

    • 进程是正在执行的一个程序或命令
    • 进程有自己的地址空间、占用一定系统资源
    • 一个CPU核同一时间只能运行一个进程
    • 进程由进程ID(PID)和其父进程ID(PPID)唯一识别
  4. 进程调度 操作系统按某种策略先择进程占用CPU进行运行的过程

    6种状态 R / S / D / T / Z / X

    进程调度原则:

    • 一个CPU核同一时间只能运行一个进程
    • 每个进程执行时间近乎相等
    • 逻辑CPU采取轮询方式执行,轮询完成后回到第一个反复
    • 进程执行消耗时间和进程量成正比
  5. 文件系统 Linux 中一切皆文件,文件系统负责管理持久化数据的子系统,负责把用户的文件存到磁盘硬件中

    文件系统采用树状的目录结构,最上层是根目录 包括,普通文件、目录、设备、套接字四种文件类型

    文件读取流程:

    • read:用户缓冲区——内核缓冲区——磁盘
    • write:用户缓冲区——Socket缓冲区——网卡
  6. 用户权限 用户账户:普通用户、超级用户 组账户:标准组、私有组

    文件权限:所有者、所在组、其他人 包括 R / W / X 三种权限类型

5. Linux 软件包管理

软件包:通常指一个应用程序

软件包管理:

  • 底层工具:处理安装和删除软件包文件等任务
  • 上层工具:用于数据的搜索任务和依赖解析任务

Shell脚本编程

Shell 脚本的应用场景: Linux 服务器的基本操作和管理 Node.js 服务的进程管理、问题排查、资源监控等 编写TCE、SCM、Docker 脚本,完成服务器编译和部署

1. Shell 基本概念

  • 终端:获取用户输入、展示运算结果的硬件设备
  • TTY:TeletypeWriter,等价于终端
  • 终端模拟器:关联 tty 的输入/输出设备
  • Shell:command interpreter,处理终端数据的脚本语言
  • Bash:shell的一种实例

Shell 的构成: - 解释器:Bash内置命令、GNU 核心工具集、第三方库 - 编程语言:变量、运算、语句、函数

2. 语法和命令

  1. 变量
  • 自定义变量
  • 环境变量
  • 系统环境变量
  1. 配置文件加载
  • login shell —— /etc/profile
  • non-login shell —— ~./bashrc
  1. 运算符和引用
  • 算数运算符
  • 逻辑运算符
  • 比较运算符
  • 引号
  • 圆括号
  • 命令连接
  • 后台运行
  1. 管道

管道和管道运算符 | ,作用是将前一个命令的结果传递给后面的命令

  1. 重定向
  • 输入重定向
  • 输出重定向
  1. 判断命令
  • 整数测试
  • 字符串测试
  • 文件测试
  1. 分支语句
  • if else
  • case in
  1. 循环语句
  • while
  • until
  • for
  1. 函数
  • funcName(){}
  • function funcName(){}
  1. 模块化
  • source './path'

3. 执行过程和原理

  1. 执行:
  • shell脚本一般以 .sh 结尾,第一行需要声明用什么命令解释器来执行
  • 启动方式:文件名运行、解释器运行、source 运行
  1. 执行过程:
    1. 字符解析
    2. shell展开
    3. 重定向
    4. 执行命令
    5. 收集状态并返回