Linux基础 | 青训营笔记

78 阅读10分钟

本文参与青训营笔记创作活动

学习Linux的价值

  • Linux是现代化应用程序交付的首选平台,无论是部署在裸机、虚拟化还是容器化环境
  • 公司内部服务(TCE、FaaS、SCM)统一使用Debian Linux系统
  • 熟悉Linux基础指令,熟悉运维前端常用服务(Nginx,Node.js)
  • 加深对操作系统概念和实现的理解。

计算机硬件

计算机由五大基本单元组成:

  • 控制器:协调和指挥计算器中其他部件工作
  • 运算器:进行算数和逻辑运算,和控制器共同组成CPU单元
  • 存储器单元:分为内存和外存(磁盘、光盘等)
  • 输入单元:鼠标、键盘等
  • 输出单元:显示器、音响等

image.png

计算机操作系统

操作系统的定义:
操作系统Operating System,OS)是管理和控制计算机系统中的硬件和软件资源,用于在用户和系统硬件之间传递信息,简单来说就是一个承上启下的中间人作用

操作系统的作用:

image.png

主流操作系统:

image.png

问题:程序启动必须由操作系统执行,那么操作系统本身也是一个程序,它是如何在开机时被执行的?

操作系统执行流程:

image.png 其中,BIOS和UEFI都是固化在主板上的一段程序,它们的作用都是在计算机启动时运行,进行一系列初始化操作,然后去寻找Bootloader操作系统引导程序并执行,从而加载OS程序。
UEFI是BIOS的优化,是现在主流的模式

Linux系统概览

Linux发展简史

  1. 1969年,Unix诞生于贝尔实验室
  2. 1984年,贝尔实验室将Unix商业化
  3. 1984年,Tanenbaum开发Minix操作系统用于教学并开放源码
  4. 1984年,Richard M.Stallman发起自由软件(FSF)与GNU项目,起草GPL(通用公共许可协议)
  5. 1991年,Linus Torvalds受Minux影响实现初版Linux内核
  6. 1992年,Linux内核以GPL协议发行V1.0

Linux发行版本

  • 分为内核版本和发行版本,发行版本其实就是内核+常用软件 image.png
  • 查看Linux系统内核版本
#方法一
uname -a
#方法二
cat /proc/version
  • 查看Linux系统版本
cat /etc/os-release

Linux系统应用领域

  • IT服务器(操作系统、虚拟化和云计算)
  • 嵌入式和智能设备
  • 个人办公桌面
  • 学术研究和软件研发

Linux系统结构

Linux基本组成

Linux系统一般有四个主要部分

  • 内核:提供操作系统的一些底层能力,如内存管理、进程管理、文件系统管理、应急资源管理等。
  • shell:命令解释器,可以通过输入一些指令与内核进行交互,从而达到管理和使用内核中一些资源
  • 文件系统:负责管理和请求数据的子系统,负责把用户文件存到磁盘中
  • 应用程序:在Linux上运行的一些程序。

image.png

Linux体系结构

image.png

  • 内核是软硬件之间的中间层
  • 内核是一个资源管理程序
  • 内核提供一组面向系统的命令

Linux进程管理

  • 进程是正在执行的一个程序或命令
  • 进程有自己的地址空间,占用一定的系统资源
  • 一个CPU核同一时间只能运行一个进程
  • 一个进程由它的进程ID(PID)和它父进程的进程ID(PPID)唯一识别
    因为创建进程的时候是由它的父进程为模板创建的,而不是通过程序直接创建进程,pid0是初始化进程

image.png

查看进程信息

image.png

问题:系统中运行的程序远远大于CPU的核数,那Linux系统是如何实现同步运行那么多程序的? 回答:进场调度

进程调度

进程调度是指操作系统按某种策略或规则选择进程占用CPU进行运行的过程。

image.png 进程状态

  • R(TASK_RUNNING),可执行状态
  • S(TASK_INTERRUPTIBLE),可中断的睡眠状态
  • D(TASK_UNINTERRUPTIBLE),不可中断的睡眠状态
  • T(TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态
  • Z(TASK_DEAD-EXIT_ZOMBIE),退出状态,进程成为僵尸进程
  • X(TASK_DEAD-EXIT_DEAD),退出状态,进程即将被销毁

进程调度原则:

  • 一个CPU核同一时间只能运行一个进程
  • 每个进程有近乎相等的执行时间
  • 对于逻辑CPU而言进程调度使用轮询的方式进行,当轮询完成则回到第一个进程反复
  • 进程执行消耗时间和进程量成正比

进程系统调用流程

进程会反复在用户态和内核态之间进行切换 image.png

Linux文件系统

文件系统是负责管理持久化数据的子系统,负责把用户的文件存到磁盘硬件中。
其中,Linux文件系统是采用自上而下的树状目录结构进行文件管理,最上层是根目录

image.png

  • /bin:bin 是 Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令。
  • /boot:这里存放的是启动 Linux 时使用的一些核心文件,包括一些连接文件以及镜像文件。
  • /dev :dev 是 Device(设备) 的缩写, 该目录下存放的是 Linux 的外部设备,在 Linux 中访问设备的方式和访问文件的方式是相同的。
  • /etc:etc 是 Etcetera(等等) 的缩写,这个目录用来存放所有的系统管理所需要的配置文件和子目录。
  • /home:用户的主目录,在 Linux 中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
  • /lib:lib 是 Library(库) 的缩写这个目录里存放着系统最基本的动态连接共享库,其作用类似于 Windows 里的 DLL 文件。几乎所有的应用程序都需要用到这些共享库。
  • /mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在 /mnt/ 上,然后进入该目录就可以查看光驱里的内容了。
  • /opt:opt 是 optional(可选) 的缩写,这是给主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
  • /proc:proc 是 Processes(进程) 的缩写,/proc 是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
  • /root:该目录为系统管理员,也称作超级权限者的用户主目录。
  • /sbin:s 就是 Super User 的意思,是 Superuser Binaries (超级用户的二进制文件) 的缩写,这里存放的是系统管理员使用的系统管理程序。
  • /usr: usr 是 unix shared resources(共享资源) 的缩写,这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于 windows 下的 program files 目录。

问题思考:Linux有这么多不同的文件系统,如何实现对用户提供统一调用接口的?
回答:Linux在中间做了一层抽象——虚拟文件系统VFS

虚拟文件系统VFS

  • 对应用层提供一个标准的文件操作接口
  • 对文件系统提供一个标准的文件接入接口 image.png

查看文件系统类型

image.png

文件基本操作

ls //查看文件夹下内容

mkdir demo //创建文件夹

mv demo /home //移动demo文件夹到/home

rm -r demo //删除demo文件夹

touch file.txt //创建空文件

cp file.txt file_bak.txt //复制文件

文件读取流程

image.png

以Nginx为例,当接收到用户请求的时候,首先Nginx进程会去用户缓冲区进行寻找,也就是看看以前是否有命中过相关的文件,如果有的话之直接调用;没有的话发起一次系统调用(系统IO),Nginx进程从用户态切换到内核态,从内核缓冲区查看以前是否有相关文件,有的话从内核缓冲区通过CPU拷贝到用户缓冲区;如果还没有的话通过DMA到磁盘中读取
写的流程类似

  • DMA可以直接和磁盘交互,将磁盘中的数据从硬件客空间写到内核缓冲区
  • 有多层缓冲区的意义就是为了不频繁调度资源

Linux用户权限

用户账户

  • 用户账户
    • 普通用户账户:在系统中进行普通作业
    • 超级用户账户:在系统中对普通用户和整个系统进行管理
  • 用户组
    • 标准组:可以容纳多个用户
    • 私有组:只有用户自己

查看用户信息

image.png

文件权限

文件权限关于用户有三个概念:

  • 所有者: 文件的所有者
  • 所在组: 文件的所有者所在的组
  • 其他人: 除文件所有者及所在组外的其他人

每个用户对于文件都有不同权限,包括读(R)、写(W)、执行(X),比如在下图可以看到所有者拥有读写执行权限,而所在组只有读和执行的权限

image.png 用户权限操作

#在根目录创建一个文件夹,查看当前用户拥有文件夹的权限
cd / && mkdir demo && 1s -1d demo
// drwxr-Xr-x 2 root root 4096 Nov 28 15:55 demo

sudo useradd ceshi #创建一个用户,并赋予可写操作
sudo passwd ceshi #设置用户密码
su ceshi#切换ceshi用户登录
cd demo #进入demo文件夹
touch index.js #创建index.js文件,提示无权限,需要给ceshi用户demo文件夹的权限

sudo chmod o+r ./ demo # demo文件夹写权限赋予其他人
su ceshi #切换ceshi用户登录
cd demo #进入demo文件夹
touch index.js #创建index.js文件成功

Linux软件包的管理

  • 软件包:通常指的是一个应用程序,它可以是一个GUI应用程序、命令行工具或(其他软件程序需要的)软件库
  • 软件包管理
    • 底层工具:主要用来处理安装和删除软件包文件等任务,DPKG,RPM
    • 上层工具:主要用于数据的搜索任务和依赖解析任务,APT,YUM,DNF

常见的软件包管理工具

  • RPM (Red Hat Package Manager):为 Red hat操作系统的包管理系统
  • DPKG (Debian package):为Debian 操作系统的包管理系统

image.png

Debain APT常用命令

  • 列出所有可更新的软件清单命令: apt update
  • 安装指定的软件命令: apt install <package_name>
  • 安装多个软件包: apt install <package_1> <package_2> <package_3>
  • 更新指定的软件命令: apt update <package_name>
  • 删除软件包命令: apt remove <package_name>
  • 查找软件包命令: apt search < keyword>
  • 列出所有已安装的包: apt list --installed

Debain配置软件源

通常Debain系的Linux软件源配置文件:/etc/apt/sources.list image.png 镜像地址:mirrors.aliyun.com/debian/ /dists:查看系统代号 /pool:查看软件分支

nginx安装

#更新包缓存
apt update
    #安装nginx包
apt insta17 nginx
#查找nginx路径,/etc/nginx配置文件路径,/usr/sbin/nginx可执行文件
whereis nginx
#访问nginx部署的默认站点
curl http://1ocalhost: 80
#关闭ng
sudo /usr/sbin/nginx -s stop
#启动ng
sudo /usr/sbin/nginx

nginx配置修改

#进入nginx配置文件夹
cd /etc/nginx
#打开nginx配置文件nginx.conf,发现默认的站点配置位于/etc/nginx/sites-enabled
cat nginx.conf
#进入sites-enabled 文件夹,并对 default文件进行配置,修改80端口为8080
cd sites-enabled && vim default
#重启nginx服务
sudo /usr/sbin/nginx -s re1oad
#访问nginx部署的默认站点
curl http: //locaThost: 8080

总结

image.png