openEuler公开课

openEuler课程(7 Days)

虽然说是openEuler,不如说是Linux系统的观光旅游

Day 1

今天主要学习了什么是openEuler,如何将openEuler安装到云上

Day 2

开源许可证

GPL,GPL V2, LGPL, MulanPSL v2

学习Linux(基于openEuler)

Linux From Scratch

可以去构建并编译一个属于自己的Linux的操作系统

Linux内核只是一个符合POSIX标准的内核,提供一套应用程序接口(API),并不是一个完整的操作系统

image-20220712193216583

openEuler脱胎于EulerOS,是华为发行的基于Linux内核的服务器操作系统

如何登录Linux

本地登录/远程登录

shell

shell是用c语言写的程序,是用户使用Linux的桥梁,用户通过shell命令来控制Linux

Linux用户

root是Linux是系统中的一个特殊管理员,拥有最高的权限,甚至无限破坏系统

使用su -username的方式切换用户

Linux命令行基础知识

登录命令

login

使用Alt + F1-F6 来切换不同的虚拟控制台

last

显示近期用户或者终端的登录情况

exit

退出系统

电源管理

shutdown

关闭计算机,权限是超级用户

halt

关闭系统,权限是超级用户

reboot

重启,权限是系统管理者

文件管理命令

在Linux中,一切皆是文件

/为根目录

/bin binary 存放常用命令

/boot存放Linux启动时的核心文件,包括镜像文件和连接文件

/devdevice 设备,存放外部设备

/etc存放管理系统的配置文件和子目录

/lib存放动态连接共享库

/mnt让用户临时挂在别的文件系统,例如光驱

/opt给主机额外安装软件的目录

/proc提供系统内存映射,此目录是虚拟目录

/root系统管理员目录

/run临时文件系统,系统重启时会清空

/sbin super bin 系统管理员目录

srvserver 存放一些服务启动后所需的数据

/sys文件系统sysfs

/tmp存放临时文件

/usr用户的许多应用和文件

/var存放不断扩充的东西,例如各种日志文件

/home主目录

Linux文件路径

绝对路径:从根目录/开始的路径

相对路径:相对于当前文件夹的路径

pwd

打印当前的目录

cd

改变目录

1
2
3
4
5
cd .. 进入上一目录
cd . 进入当前目录
cd 返回home目录
cd - 进入前一个目录
cd ~ 返回home目录

ls

列出文件目录或文件信息

1
2
3
ls -l 列出详细资料(后可以接指定文件)
ls -a/-A 显示所有文件目录(包括隐藏、不包括隐藏)
ls -R 若目录下有文件亦同时列出

mkdir [name]

创建文件夹

touch

创建空文件或者修改文件的时间戳

cp

复制文件或者目录,一个或多个

mv

移动文件或目录

rm

删除文件或目录

1
2
rm -r 将目录即子目录递归删除
rm -f 强制删除

cat

读取文件或者将多个文件合并为一个文件

head/tail

显示文件的前/后文件的x行

more

以一页一页的形式显示

1
2
3
4
SPACE:下一屏
RETURN:下一行
q:退出
Ctrl+B:返回上一屏

less

读取内容,附带搜索功能

1
2
3
4
5
-f 强制打开
/字符串 向下搜索
?字符串 向上搜索
b enter 上下一页
u d 上下半页

find

在指定目录下寻找文件

locate

快速查找文件系统内是否有指定文件

which

查看某个命令的位置及是否存在

gzip/tar

压缩包

ln

创建链接文件

软连接:类似快捷方式,删除源文件后失效,可以对目录链接甚至跨文件系统

硬链接:以副本形式存在,但不占用空间,不可跨文件系统,补课链接目录

1
2
ln    默认为硬链接
ln -s 软连接

Day 3

文本编辑器和文本处理

常用的有emacs vi vim nano gedit kedit

使用vim

自行查找文档

Day 4

用户和权限管理

管理用户和组

Linux是一个多用户的操作系统

每个用户使用系统资源前要先向系统管理员申请一个账号,再用这个账号进行登录

每个用户都会有一个单独的UID

超级用户,root用户 UID 0

普通用户 UID 1000-60000

虚拟用户 UID 1-999

使用id命令来查看用户的id和信息

每个用户有自己的用户名,密码,主目录等信息

useradd

用于创建用户账号,并保留在/etc/passwd

usermod

用于修改用户账号的各类信息

用户信息 name:password:uid:gid:comment:home:shell

1
2
3
4
5
6
7
8
9
10
11
-c     修改备注
-d 修改登陆目录
-e 修改有效期
-f 修改缓冲天数(密码过期后多少天关闭该账号)
-g 修改群组
-G 修改用户所属的附加群组
-l 修改
-L 锁定用户密码使密码无效
-s<shell> 修改登录后使用的shell
-u<uid> 修改用户ID
-U 解除密码锁定

userdel

删除用户

1
2
-f  强制删除
-r 删除用户包括用户文件

passwd

用于修改用户的密码及其相关的信息

1
2
3
4
5
6
-n      设置修改密码最短天数
-x 设置修改密码最长天数
-w 设置过期多少天前收到警告信息
-i 密码过期后多少天禁用账户
-d 删除用户密码
-S 显示用户密码

用户组的相关概念

用户组是具有相同特性用户的逻辑集合,通过组的形式来统一管理,每个用户组有一个特有的id号GID

每个用户添加时默认有一个与用户名同名且UID和GID相同的用户组

root组 UID0

普通用户组 UID500-60000

系统用户 UID1-499

管理用户组

groupadd

创建新的用户组,并将组的信息添加到系统文件

使用cat /etc/group查看是否创建成功

groupmod

用于修改用户组的识别码或者名称

groupdel

删除用户组,但用户需要先删除再删除用户组

gpasswd

添加或者删除用户到组中

1
2
gpasswd -a user usergroup     将user用户关联到用户组usergroup
groups user 查看user用户加入的用户组

用户和组的关联文件

/etc/passwd文件 用户账号信息

/etc/shadow文件 用户账号信息加密文件

/etc/group文件 组信息文件

/etc/gshadow文件 组加密文件

文件权限管理

文件权限的基本概念

文件权限一般分为读,写,执行

在Linux系统中,不同的用户所处的地位也不尽相同,不同地位的用户拥有不同的权限等级

分为三种:

  1. 只允许自己访问
  2. 允许一个特定的用户组访问
  3. 允许任意用户访问

文件的权限位说明

​ d r w x r - x r - x

文件类型 读 写 执行 读 - 执行 读 - 执行

​ 属主权限 属组权限 其他用户权限

chmod

修改文件权限

操作对象 操作符 权限
u 属主 + 添加权限 r 读
g 属组 - 减少权限 w 写
o 其他用户 = 给予特定权限 x 执行
a 所有用户

亦可以直接修改权限码

1
chmod 644 usertxt

chown

修改文件属主或属组

chgrp

修改文件属组

umask

遮罩码

1
2
umask  查看权限掩码
umask 0022 修改为0022

文件的ACL(Access Control List)权限控制列表

ACL又文件系统支持,可以更加细化的去修改不同用户的权限

其他权限管理

su 仅切换用户身份

su - 切换用户身份和shell

sudo 允许普通用户执行管理员才能执行的命令

Day 5

安装软件并管理服务

rpm安装

rpm是一种用于互联网下载包的打包和自动安装工具,会生成具有.RPM拓展名的文件

命名格式name-version-release.arch.rpm(名称-版本号-发行版号-处理器架构)

优点:

  1. 简单便捷兼容版本
  2. 参数信息记录在数据库中,便于查询,升级和卸载

缺点:

  1. 安装环境需要和打包环境一致
  2. 具有很强的依赖关系

DNF安装

配置DNF

创建本地软件源仓库

软件源是Linux系统的应用程序安装仓库

可以是网络服务器,光盘甚至是硬盘的一个目录

自动安装,方便更新,解决软件依赖,提高安装效率

目录/etc/dnf/dnf.conf

参数配置(目录etc/yum/yum.repos.d)

1
2
3
4
5
6
7
cachedir: 缓存目录
best: 升级时总是尝试安装最高版本,默认为true
installonly_limit: 设置同时安装的数量,默认为3
clean_requirements_on_remove: 删除在dnf remove期间不再使用的依赖项,默认为true
repository 允许用户自定义软件源仓库,各个仓库不能同名
name = repository_name: 软件仓库描述的字符串
baseurl = repository_url: 软件仓库的地址,例如http://, ftp://, file://
管理软件包/软件包组

搜索软件包

更新

检查更新

源码安装

优点:

  1. 可以根据自身需求来设置参数
  2. 经过编译兼容性好

缺点:

  1. 过程繁琐
  2. 难以升级

安装过程

  1. 下载源码包,解压,校验完整性
  2. 创建makefile文件,./configure
  3. 编译-通过make install安装命令,默认安装路径为/usr/local/

configure/make/make install

使用systemd管理服务(systemctl)

systemd是与SysV和LSB初始化简本兼容的系统和服务管理器,开启systemd服务可以提供基于守护进程的按需启动策略

支持快照和系统状态恢复,维护挂载和自挂载点

使用systemctl命令

Day 6

文件系统

文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构(fs: file system)

提供API,管理磁盘或分区

FAT, NTFS, NFS, RAW, Ext, XFS

系统交换空间

Linux系统交换空间(swap)就是磁盘上的一块区域,当物理内存资源紧张时,将内存中不常访问的资源保存到预先设定的硬盘上的交换空间来释放该资源占用的内存。

创建swap分区:fdisk,mkswap,swapon

创建swap文件:常见文件,mkswap格式化文件,swapon启用swap文件

磁盘的挂载和使用

磁盘类型

HDD:机械硬盘

SSD:固态硬盘

接口类型:

IDE

SCSI

SATA

SAS

FC

查看磁盘信息

1
2
3
fdisk -l       查看所以磁盘的信息,包括已挂载和未挂载的
df -h 查看系统挂载,磁盘空间大小和利用率

磁盘分区

磁盘分区将硬盘驱动分成多个逻辑存储单元,以实现不同的功能,例如多系统,限制应用和用户的使用空间

硬盘分区分为两部分,主分区和拓展分区,主分区不可再划分。拓展分局可以划分为多个逻辑分区

Linux没有盘符的概念,通过设备名来访问,设备名放在/dev/xxyN xx代表磁盘类型,y为分区设备,N代表分区

/dev/sdb6表示第二个SCSI硬盘的第二逻辑分区

MBR方案

主启动记录(Master Boot Record)分区方案指定了再运行BIOS的固件上的系统如何进行分区

SCSI接口的硬盘最多只能有15个,IDE接口最多63个(包括主分区和拓展分区,主分区最多4个)

磁盘大小限制为2TB

fdisk分区工具的使用(小于2TB)

  1. 选择某块硬盘,进入交互模式进行分区操作

    fdisk /dev/sdb

  2. 创建拓展分区

​ n:创建新分区

​ e:创建拓展分区

​ 回车默认起始柱面

​ 回车默认使用全部空间

​ n:新建分区

​ l:创建逻辑分区

​ 回车使用默认起始柱面

​ 定义大小 柱面值/直接 + size

​ p:打印分区信息

​ w:保存退出

GPT方案

GPT意味GUID分区表,驱动器上的每个分区都有一个全局唯一的标识符,对于运行统一课拓展固件接口(UEFI)固件的系统,GPT是再物理英凡上布置分区的标砖

GPT方案没有主分区和逻辑分区之分

每个硬盘最多128个分区,最多支持18EB的分区大小

parted分区工具的使用

使用parted命令

  1. 选择某块硬盘,进入交换式

    parted /dev/sdb

    输入mklable gpt 创建分区表,用print查看分区表是否为gpt格式

    输入mkpart 新建分区

    q保存退出

格式化和挂载

磁盘格式化

使用mkfs命令

1
mkfs.ext4 /dev/sdb2 

格式化根下的sdb2分区,格式化类型为.ext4

磁盘挂载

磁盘格式化后需要挂载才可以使用

Linux下一切皆为文件,要使用磁盘需要先建立一个联系,这个联系就是一个目录,建立联系的过程我们叫做挂载

例如,我们要访问sdb2这个目录的时候,我们其实是在访问sdb2这个设备,这个目录就是我们和设备交互的接口

fsab

/etc/fstab文件用于存放文件系统的静态信息文件

当系统启动时,会自动从这个文件读取信息冰挂载。

逻辑卷管理

逻辑卷基础

LVM-逻辑卷管理是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上,文件系统之下的逻辑层

逻辑卷(lv)可以将多个磁盘分区或者块设备(pv)合并组织成为一个大的拓展分区,可以格式化成为不同的文件系统,挂载后使用

逻辑卷的创建

pvcreate

1
2
pvcreate /dev/hda{6,7,8,9}       将磁盘hda的6-9分区创建成pv
pvs 查看物理卷概要信息

逻辑卷的管理

vgcreate用于创建LVM卷组

1
2
bgcreate vg1000 /dev/sdb1 /dev/sdb2       创建卷组vg1000       并且将物理卷/dev/sdb1 和 /dev/sdb2添加进入
vgdisplay vg1000 查看卷组信息

lvcreate命令用于创建LVM逻辑卷

逻辑卷是创建在卷组之上的

逻辑卷同样需要mkfs格式化创建文件系统,mount挂载至目录

动态调整逻辑卷

逻辑卷的拓展无需卸载,可以动态的扩容

  1. vgs查看空间是否足够
  2. 使用命令lvextend -L +SIZE lv_device
  3. 调整文件系统的大小resize2fs device lv_device

逻辑卷的缩容有风险,要卸载文件系统(umount)并强行检测(e2fsck -f)

系统管理

任务管理

计划执行at

at 命令可以直到Linux 在特定时刻运行脚本

atd 是 at 的守护进程,在系统启动时就会以后台模式运行

atd 会定期检查 /var/spool/at目录, 获取通过at命令写入的任务

1
2
yum install -y at  //安装
systemctl start at //运行

设置时间 绝对计时/相对计时

以2025年6月7日为例

1
2
at now + 4 hours         at 16:30 7.6.15
at 16:30 at 16:30 6/7/15

执行权限

对于普通用户,是否执行某个脚本和命令取决于/etc/at.allow 和 /etc/at.deny 文件

周期执行corn

搜索 /var/spool/cron 目录,寻找以/etc/passwd文件中的用户名的命名的crontab文件,然后将crontab文件装入内存

1
2
3
4
crontab -u //设置某个用户的corn
crontab -l //列出某个用户的cron服务
crontab -r //删除某个任务的cron
crontab -e //编辑某个用户的corn服务

格式

1
minute hour day-of-month month-of-year day-of-week commands

00 08 * * 1 commands每周一早上8点执行命令

编辑配置文件

使用crontab配置是针对某个任务的,直接编辑/etc/crontab是针对系统的任务

网络管理

openEuler 系统网络

设备:主机内的网卡

广播地址:到达本网段上所有主机的地址

接口:为使用设备,驱动程序在设备上创建了接口

子网掩码:将IP地址分成网络地址和主机地址两部分的掩码

路由:IP包跨网段访问时候的下一跳地址

链路:身背到网络的链接

配置文件

/etc/sysconfig/network-scripts/ifcfg-*

修改后记得重启

1
systemctl reload NetworkManager

查看IP地址

1
2
ip addr show [设备名]
id -s link show [设备名] RX表示接受的,TX表示传送的
NetworkManager

NetworkManager是系统中动态控制及配置网络的守护进程

使用nmcli命令

1
2
nmcli con add con-name 'Demo' type Ethernet ifname eth0  //创建链接
nmcli con up 'Demo' //启动链接

路由:要让网络上的两台主机能相互通信,就需要有一种能够描述如何从一台主机到另一台主机的机制,称为路由选(Routing)

路由项:一对预先定义的地址,包括目的地(Destination)和网关(Gateway)

路由项的意义在于能够通过网关完成通信,路由表是多个路由项的集合

openEuler使用route来查看配置管理本机路由

直接在命令行下执行route命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了;可以在/etc/rc.local中添加route命令来保证该路由设置永久有效。

1
route -n       //查看路由表
主机名

主机名是一个局域网中唯一标识一台机器的名称

主机不一定是物理机器,也可以是虚拟机,信息存放于文件/etc/hostname中

1
2
3
hostname new-name  //临时设置主机名
hostnamectl set-hostname new-name //永久设置主机名
或者直接在文件/etc/hostname中写入

host文件

主机可以通过IP访问

但是随着主机数量的增加,IP难以记忆,希望通过主机名直接访问其他主机

host就是一张记录主机名和IP地址的表

DNS

当host找不到域名对应的IP时,就会将域名提交给域名解析服务器(DNS),然后DNS返回IP给主机,这个过程成为域名解析

DNS就像是一个公共的hosts文件/分布式数据库

查询DNS

使用nslookup命令查询DNS中的记录

1
nslookup domain [dns-server](非必选)

进程管理

进程

进程(Process)是计算机中已运行程序的实体,是程序的一个具体实现

每个Linux进程被创建的时候会被分配给一段内存空间(PCB)

进程的生命周期

每个进程都有一个唯一的进程ID(PID),用于追踪

任何进程都可以通过复制自己地址空间的方式创建子进程,子进程中记录着父进程的(PID)

第一个系统进程是systemd,其他进程都是其后代

进程的优先级

CPU的资源(时间片)分配是按照进程的优先级(priority)

优先级高的进程有优先执行的权利

PRI 优先级

实时进程:0-99

非实时进程:100-139

使用nice和renice命令来调整进程的优先级

前台程序与后台程序

Day 7

shell脚本

shell是系统的用户界面,提供用户与内核进行交互操作的一种接口。将输入的命令提交到内核,并返回结果给用户

查看shell

1
2
3
4
cat /etc/shells       查看系统默认安装shell
echo $SHELL 查看当前登陆用户默认shell
echo $0 查看当前shell

一个程序和命令只做好一件事,复杂的问题通过多个命令的组合来解决

最简单的shell的脚本就是一系列命名构成的可执行文件,并且可以被其他脚本复用

没 有 银 弹

编写shell

在任意文本编辑器中均可编写

1
vim demo.sh

开头注明使用的解释器,和对脚本的描述

1
2
3
#! /bin/bash
# My first shell script
echo 'hello world'

shell是脚本语言,无需编译,仅是提供接口

执行脚本

执行时要注意权限

1
./demo.sh

一个shell想要可执行,还得脚本所在的路径在$PATH变量中

后台执行脚本

1
2
./my_script.sh &       后台执行脚本
nohup ./my_script & 退出shell后继续运行(stdout和stderr均重定向到nohup.out文件

shell编程基础

文本流

标准输入,标准输出,标准错误

标准输入通过命令行输入,标准输出和错误将会回显

重定向

1
2
3
4
5
command < inputfile   从右边的文件读取输入
例:wc -l < /dev/null
command << maker 内联重定向
ls > dir_log 将标准输出覆盖文件内容
ls >> dir_log 将标准输出追加到文件中

管道

将一个命令的输出连到另一个命令的输入

字符变量和运算

# 注释

shell的变量是无类型的

变量分为环境变量和用户自定义的变量

用 printenv查看全局变量

结构化命令

条件

循环

for,while,until

1
2
3
4
for var in list
do
commands
done
1
2
3
4
5
for i in {1..100..2}
do
let "sum+=i"
done
echo $sum

展示目录下所有文件

1
2
3
4
5
6
#! /bin/bash

for file in $(ls)
do
echo "file:$file"
done