第三次笔记

Vim它是一个模式化的编辑器,一共有三个模式:命令模式、末行模式、编辑模式。

命令模式下的常用按键

命令模式就是输入vim进入的界面

(1)光标跳转按键

功能

按键

光标按单个字符移动

↑、↓、←、→

光标按照单词向后跳转

w

光标按照单词向前跳转

b

光标跳转至行首

^

光标跳转至行尾

$

文档首行第一个字符

gg

文档最后一行第一个字符

G

跳转到指定行

行号gg 或者 行号G

(2)复制、粘贴、删除

功能

按键

删除光标所在行

dd

删除从光标处开始的n行

ndd

删除光标前至行首字符

d^

删除光标及之后的所有字符

d$

复制光标所在行

yy

复制从光标处开始的n行

nyy

将缓冲区的内容粘贴到光标所在行的下一行

p(小写)

将缓冲区的内容粘贴到光标所在行的上一行

P(大写)

撤销操作

u

编辑模式

可通过如下任意一种功能键从命令模式切换到编辑模式。按esc键可从编辑模式切换到命令模式。

功能

按键

在光标前插入

i

在光标所在行行首第一个非空字符前插入

I(大写字母i)

在光标后插入

a

在光标所在行末尾插入

A

在光标所在行上一行插入

O(大写字母)

在光标所在行下一行插入

o(小写字母)

删除光标所在字符并进入插入模式

s(小写字母)

删除当前行并进入插入模式

S(大写字母)

末行模式

按:或者/可从命令模式切换到末行模式。按esc键可从末行模式切换到命令模式。

(1)查找关键字并替换

功能

按键

从上而下在文件中查找字符串“word”(可按n键定位到下一个匹配的被查找字符串)

/word

将当前行中查找到的第一个字符“old”替换为“new”

:s /old/new

将当前行中查找到的所有字符“old”替换为“new”

:s /old/new/g

在行号“n1,n2”范围内替换所有的字符串“old”为“new”

:n1,n2 s/old/new/g

将整个文件内的字符串“old”替换为“new”

:% s/old/new/g

(2)保存退出

功能

按键

退出vi/vim编辑器,未对文件做任何编辑操作才可退出

:q

不保存文档内容,强制退出vi/vim编辑器

:q!

保存文件

:w

将文件另存为/dir/file

:w /dir/file

保存文件内容并退出vi/vim编辑器

:wq 或者 ZZ

强制保存并退出

:wq!

(3)其他操作

功能

按键

在当前文件中读入其他文件内容

:r /dir/file

查找含有"word"的行并删除

:g/word/d

显示行号

:set nu

关闭行号显示

:set nonu

删除n1-n2行内容

:n1,n2 d

复制n1-n2行到第n行后面

:n1,n2 co n

浏览普通文件内容

cat

(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上。

语法格式:cat  选项  文件

例如:读取f1文件的内容

cat f1

参数

**-n 或 --number**:由 1 开始对所有输出的行数编号。

**-b 或 --number-nonblank**:和 -n 相似,只不过对于空白行不编号。

把 f1 的文档内容加上行号后输入 f2 这个文档里:

cat -n f1 > f2

把 f1 和 f2 的文档内容加上行号(空白行不加)之后将内容附加到 f3 文档里:

cat -b f1 f2 >> f3

head

head 命令可用于查看文件的开头部分的内容,有一个常用的参数 **-n** 用于显示行数,默认为 10,即显示 10 行的内容。

语法格式:head 参数 文件

-q 隐藏文件名

-v 显示文件名

-c<数目> 显示的字节数。

-n<行数> 显示的行数。

  显示passwd文件的前十行。 head /etc/passwd

  显示passwd文件的前5行。 head -n 5 /etc/passwd

  显示文件前20个字节。 head -c 20 /etc/passwd

tail

tail 命令可用于查看文件的内容,有一个常用的参数 **-f** 常用于查阅正在改变的日志文件。

语法格式:tail 参数 文件

例如:显示passwd文件的最后10行(默认显示最后10行)

tail passwd

more

more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示。

more 文件名

cut

cut命令用于按列提取文本内容,

语法为:`cut [选项] 文件名称`

cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。

如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

- b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。

-c :以字符为单位进行分割。

-d :自定义分隔符,默认为制表符。

-f :与-d一起使用,指定显示哪个区域。

-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的 范围之内,该字符将被写出;否则,该字符将被排除

系统文件在保存用户数据信息时,每一项值之间是采用冒号来间隔的,先查看一下:

[root@kongd ~]# head -n 2 /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

``

接下来使用下述命令尝试提取出passwd文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容

```shell

[root@kongd ~]# cut -d: -f1 /etc/passwd

如果打印第二列的内容

[root@kongd ~]# cut -d: -f2 /etc/passwd

显示前三行的第三个字符

[root@server ~]# cut  -c   3 /etc/passwd | head -3

o

n

e

```

排序显示sort

sort命令用于对文本内容进行排序显示,

语法为:`sort [选项] 文件名称`

| 选项 | 作用               |

| ---- | ------------------ |

| -f   | 忽略大小写         |

| -b   | 忽略缩进与空格     |

| -n   | 依照数值的大小排序 |

| -r   | 反向排序           |

| -u   | 去除重复行         |

| -t   | 指定间隔符         |

| -k   | 设置字段范围       |

首先,sort命令执行后默认会按照字母顺序进行排序,非常方便:

[root@kongd ~]# cat passwd

[root@kongd ~]# sort passwd

```

sort -u参数进行去重操作:

[root@kongd ~]# sort -u f1

对数字进行排序

[root@kongd ~]# cat number.txt

[root@kongd ~]# sort -n f2

去重显示uniq

uniq命令用于检查及删除文本文件中重复出现的行列

语法为:`uniq [选项] 文件名称`

-c或--count 在每列旁边显示该行重复出现的次数。

我们对两个文本内容进行操作,区别一目了然:

[root@kongd ~]# uniq uniq.txt

[root@master ~]# uniq -c uniq.txt

    

5.6  替换文件中的字符显示tr

tr 指令从标准输入读取数据,经过替换或者删除后,将结果输出到标准输出。

**语法**:`tr [OPTION]…SET1[SET2]`

**参数说明:**

-c   反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换

-d   删除指令字符

-s   缩减连续重复的字符成指定的单个字符

示例:将文件testfile中的小写字母全部转换成大写字母,可使用如下命令:

[root@master ~]#cat testfile |tr a-z A-Z

```

文本内容统计wc

wc命令用于统计指定文本文件的行数、字数或字节数,语法为:`wc [选项] 文件名称`

wc -l文件名

第一个数字代表行数,第二个代表单词数,第三个代表字节数(统计字节的时候会把换行符也统计进去),最后是文件名。

可以在末行模式下输入set list显示换行符

压缩和解压缩

​ .zip:zip 程序压缩打包的档案;(很常见,但是因为不包含文档名编码信息,跨平台可能会乱码)

.rar:rar 程序压缩打包的档案;(在windows上很常见,但是是商业软件。)

.gz:gzip 程序压缩的档案; (linux目前使用最广泛的压缩格式)

.bz2:bzip2 程序压缩的档案

.xz:xz程序压缩的档案

.tar:tar 程序打包的资料,并没有压缩过。(但是tar打包的时候可以指定文件格式,就相当于压缩了)

.tar.gz:tar程序打包的档案,其中并且经过gzip 的压缩(最常见)

.tar.bz2:tar 程序打包的档案,其中并且经过 bzip2的压缩

.tar.xz:tar程序打包的档案,其中并且经过xz的压缩(新一代压缩选择)

.7Z:.7zip 程序压缩打包的档案

首先我们来看zip和unzip命令

zip: 可以压缩文件和目录。

语法:`zip FILE`

      语法: `unzip FILE`  、

tar

格式:tar 选项 包名(压缩文件) 文件名

选项(选项中任选其一):

-c 创建.tar格式的包文件

-x 释放.tar格式的包文件

-t  查看包中的文件列表 (选项中任选其一)

必选项:

-f 用于指定打包文件名。当与-c选项一起使用时,创建的tar包文件使用该选项指定的文件名。当与-x选项一起使用时,则释放该选项指定的tar包文件

辅助选项:

-v 表示在命令执行时显示详细的提示信息       

-p 打包时保留文件及目录的权限                 

-z 调用gzip程序,以gzip格式压缩或解压缩文件(.tar.gz)     

-j  调用bzip2程序,以bzip2格式压缩或解压缩文件(.tar.bz2)    

-J 使用xz压缩或解压缩文件(.tar.xz),xz的压缩率通常比bzip2更高

-C(大写字母C) 和-x选项一起使用,表示释放包时指定释放的目标路径  

这边要注意一点,我们一般一起使用选项的时候,f要最后写,因为f是指定打包的文件名。  

压缩:tar -cjvf  ad.tar.bz2(压缩的名) 1(要压缩的文件名)

解压缩:tar -xvf ad.tar.bz2 -C test2 (-C指明解压后存放的路径)

文件的上传和下载

  1. xftp
  2. scp

  scp,具有和ssh一样的验证机制,从而可以实现2台机器安全的远程拷贝文件

文件发送  格式:scp -r(如果发送的是目录文件需要-r选项) 当前主机文件  目标主机的对应路径

文件接收格式:scp 目标主机路径的文件 接收到当前主机路径 接收文件

Linux中的特殊符号

Linux中的特殊符号

;演示

?演示

反引号演示:

单引号是强引用(就是不管你里面是啥字符,都把它当做标准字符输出,不解释字符的含义)

双引号是弱引用(),可以解释字符的含义

shell:壳,命令解释器,负责解析用户输入的命令。命令分两类:

- 内置命令 (shell内置),shell为了完成自我管理和基本的管理,不同的shell内置不同的命令,但是大部分都差不多

- 外置命令,在文件系统的某个目录下,有个与命令名称相同的文件

file命令用于辨识文件类型。格式就是file 文件名 :file aa.txt

type这个命令是用来查看命令类型的

查看内置命令 type pwd

查看外置命令:type passwd

内置命令与外置命令的区别就是,shell为了完成自我管理和基本的管理,不同的shell内置不同的命令,但是大部分是差不多的。

系统为了让用户在命令行快速方便地执行命令,将可执行文件的路径存储在环境变量PATH中。当用户每次执行外部命令的时候都会去该变量所记录的路径下搜索和命令同名的二进制文件,如果有则执行该二进制文件,如果没有则提示命令找不到。

# echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

命令别名

别名是命令的快捷方式。对于需要经常执行,并需要很长时间输入的长命令创建快捷方式很有用。

语法:`alias 别名=’原命令 [选项]…… [参数]……’`

#查看设置的别名

[root@node13 ~]# alias

那假设我给haha起个别名‘ls’,

alias haha='ls'

#删除别名:

[root@node13 ~]#unalias 别名

> 在命令行中使用alias命令设置的别名仅在该次登入有效,如果重新开启一个 Shell,或者重新登录系统,则这些alias将无法使用。

命令历史

`history`命令可以查阅命令历史记录 ,也可在命令行利用向上或向下光标键来进行查询。

语法:`history [选项] [参数]`

选项:

number:显示最近number条命令历史

-c:清空当前历史命令

-a  [file]:后面没跟文件时,默认将缓冲区中历史命令写入~/.bash_history中

-r [file]:将历史命令文件中的命令读入当前历史命令缓冲区中

-w:将当前历史命令缓冲区命令写入历史命令文件中;

然后我们之前输入的命令都可以看到,但这些机器重启后还会不会在,一共能存多少行,都是有要求的。

可以通过cat命令查看/etc/profile中有个HISTSIZE=1000 这边说的是最多能保存1000条命令

-c 清空整个命令历史

-d 删除指定命令历史(删除的时候是按照序号进行删除的)

-w 将缓冲区中的命令历史保存到命令历史文件

这个的意思是我们输入-c清空整个历史的时候,输入history的命令去查看的时候发现是清除完的,但是输入cat查看配置文件的时候会发现还没清完,再输入history -w,然后再通过cat命令去查看配置文件的时候就清干净了。

!n 执行命令历史中第n条命令

例如我们执行第二个命令就输入:!2

!-n执行命令历史中倒数第n个命令

!! 执行上一条命令

!KEY执行最近一次以指定KEY开头的命令

!$ 引用上一个命令中最后一个参数

ESC+  同上,多次按还可以切换

ALT+  同上,在远程终端无效?

用户和组管理

在Linux中用户可以分为三类:

第一种是超级用户——用户名为root,它具有一切权限,只有进行系统维护(例如:建立用户等)或其他必要情形下才用超级用户登录,以避免系统出现安全问题。

第二种是系统用户(伪用户)——是Linux系统正常工作所必需的用户。主要是为了满足相应的系统进程对文件属主的要求而建立的,专门用来运行后台进程和服务的用户,系统用户不能用来登录系统。例如:bin、daemon、adm、lp等用户。

第三种是普通用户——是为了让使用者能够使用Linux系统资源而建立的,我们的大多数用户属于此类。

在Linux中的组有两类:

第一种是基本组(私有组):建立账户时,若没有指定账户所属的组,系统会建立一个和用户名相同的组,这个组就是基本组。

第二种是附加组(公有组):可以容纳多个用户,组中的用户都具有组所拥有的权利。

然后除了这两个之外,我们还需要知道他们的配置文件,就是说在Linux中用户账号、密码、用户组信息和用户组密码均是存放在不同的配置文件中的。

(1)用户账号文件——/etc/passwd

 ll /etc/passwd

passwd 是一个文本文件,用于定义系统的用户账号,由于所有用户都对passwd有读权限,所以该文件中只定义用户账号,而不保存口令。

/etc/passwd文件中字段说明

\> 账号名称:用户登录Linux系统时使用的名称。

\> 密码:以前是以加密格式保存密码的位置,现在密码保存在/etc/shadow文件中,此处只是密码占位符“x”或“*”。若为“x”,说明密码经过了shadow的保护。

\> UID:用户的标识,是一个数值,用它来区分不同的用户,每个用户都有一个UID数值:

超级用户的UID——0系统用户的UID——1~999普通用户的UID——≥1000

\> GID:用户所在基本组的标识,是一个数值,用它来区分不同的组,相同的组具有相同的GID。

\> 个人资料:可以记录用户的完整姓名、地址、办公室电话、家庭电话等个人信息。

\> 主目录:类似Windows 的个人目录,通常是/home/username,这里username是用户名,用户执行“cd~”命令时当前目录会切换到个人主目录。

\> Shell:定义用户登录后激活的Shell,默认是Bash Shell

(2)用户密码文件——/etc/shadow

 ll /etc/shadow

/etc/shadow文件中的每行9个字段的含义分别为

| 字段       |  含义                         

| 登录名      | 登录名                           

| 加密口令     | 使用SHA-512/SHA-256/MD5算法加密后的密码($id$,id为1表示md5,5表示sha256,6为sha512),若为空,表示该用户无需密码即可登录,若为“*”表示该账号不能用于登录系统,若为“!!”表示该账号密码已被锁定 |

| 最后一次修改时间 | 最近一次更改密码的日期,以距离1970年1月1日的天数表示     

| 最小时间间隔   | 密码在多少天内不能被修改。默认值为0,表示不限制        

| 最大时间间隔   | 密码在多少天后必须被修改。默认值为99999,表示不进行限制    

| 警告时间     | 提前多少天警告用户密码将过期,默认值为7天,0表示不提供警告   

| 不活动时间    | 密码过期多少天后禁用此用户                 

| 失效时间     | 密码失效日期,以距离1970年1月1日的天数表示,默认为空,表示永久可用 |

| 标志       | 保留未用,以便以后发展之用                  

(3)用户组账号文件——/etc/group

ll /etc/group

系统中的每个组,在/etc/group文件中有一行记录,任何用户均可以读取用户组账户信息配置文件。

|  字段  | 说明                             |

| Groupname | 组的名字                           |

| Passwd  | 组的加密口令                         |

|  GID   | 是系统区分不同组的ID,在/etc/passwd域中的GID字段是用这个数来指定用户的基本组 |

| Userlist | 是用“,”分开的用户名,列出的成员以该组为附加组        |

首先来看怎么添加新用户,例如我们添加一个叫做zhangsan的用户

 useradd zhangsan

添加后我们可以通过id去查看张三的信息

 id zhangsan

这边要注意一下,就是在创建张三这个用户之前是没有张三这个组的,就是如果没有指定组则系统在你创建用户的时候会自动给你创一个和用户名字一模一样的组,这个就是基本组。

useradd要用到的选项

-u UID 指定uid

-g GID 指定基本组

-G GID1,GID2,… 指定附加组

-c “注释信息”  指定用户注释信息

-d /path/to/dir/ 指定某个目录为用户家目录

-s /shell    指定用户使用的shell

useradd -G rhcsa -g zhangsan -u 2001 -c "putongyonghu" -d /data/wangwu -s /usr/bin/sh wangwu

这个的意思是说我们创建了一个用户叫做王五,并且指定他的附加组是redhat的附加组,基本组是zhansgan的基本组,uid为2001,注释信息说他是一个普通用户,并将他的家目录指定为根下的data目录下面的xiaoming,它使用的shell是/usr/bin/sh 。

passwd wangsi

我们如果拿xshell远程登录的话,拿昵称是不能登录的,因为昵称是可以重复的,但是名字是不能重复的。所以还是通过名字加IP的方式进行登录

然后刚刚咱用了一个命令passwd,我们来了解一下,它是用来更改使用者的密码

然后来看下里面的选项:

​           -n 指定密码最短使用权限

​           -x 指定密码最长使用权

​           -w 指定警告时间

​           -d 删除用户密码,在红帽系统中,空密码用户禁止登录

修改用户信息,通过usermod命令来修改

usermod -u 2004 wangsi

常用的选项包括`-c,-d,-m,-g,-G,-s,-u`等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。另外,还可以使用如下选项:  

 -l 新用户名——更改账户的名称,必须在该用户未登录的情况下才能使用。  

 -L——锁定(暂停)用户账户,使其不能登录使用。                   

-U——解锁用户账户

删除用户

 userdel wanger

删除的时候带上r的选项,-r——在删除该账户的同时,一并删除该账户对应的主目录。

如果删除的时候没有带r的选项,把用户删除后,用户的家目录和邮箱还是在的,但如果这些实在不想要的话可以通过这个方法进行删除,

查看邮箱,然后通过rm进行删除。

 ll /var/spool/mail

首先创建组groupadd 用户组的名称

groupadd zhangsan

创建时常用的选项:-g GID——指定新用户组的组标识号(GID),默认值是已有的最大的GID加1。  -r——建立一个系统组账号,与-g不同时使用时,则分配一个1~999的GID。

删除组groupdel 用户组的名称,在删除组的时候,如果是基本组,则必须要先删除引用该基本组的用户,然后再删除该基本组。

 groupdel zhangsan

修改组

 groupadd zhangsan

groupmod -g 2008 zhangsan

修改组中常用的选项

-g GID——为用户组指定新的组标识号。

 -n 新用户组——将用户组的名字改为新名字修改用户组的名称和  用户组的GID值。

组的名字:组的密码:组的ID:哪个用户把这个组作为附加组

/etc/gshadow 通过gpasswd给组设置密码后可查看

然后我们就开始手动去创建一个用户

进入到passwd这个配置文件中

![image-20231103222306109](C:\Users\15121\AppData\Roaming\Typora\typora-user-images\image-20231103222306109.png)

然后在最后一行按照之前用户的格式重新创建一个新的用户就好。

如果手动创建组的话就进入到group这个配置文件中按照之前的组的格式到最后一行重新创建一个新的组就好。

# 权限

rw-r--r--.我们把这10个分为四个部分,前三组每组三个,最后一组是那个点

第一组:指的是该文件拥有者对该文件的权限。owner 属主,缩写u

第二组:指的是该文件所属组对该文件的权限。group 属组,缩写g

第三组:指的是既不是该文件的拥有者,也不是该文件所属组的成员,也就是其他人对该文件的权限。other 其他,缩写o

第四组:指的是扩展权限

对文件来讲:r表示对该文件可读;w表示对该文件可写;x表示对该文件可执行。

对目录来讲:r表示可以列出目录下的文件;w表示可以在目录下创建删除文件;x表示可以进入该目录(也就是可以切换到目录)。

修改文件或目录的权限使用的命令是chmod(英文全拼:change mode)

`+``或``-``或``=`:表示设置权限的操作动作,+代表添加某个权限;-代表取消某个权限;=表示只赋予给定的权限,并取消原有的权限。 然后接下来我们挨个都来演示一下。

给1号文件的用户所有者添加执行的权限。

 chmod u+x 1

给1号文件的用户所属组赋予写的权限

 chmod g+w 1

如果想要同时给所有用户添加执行的权限,不需要我们三种身份挨个赋予

这里有个a代表的所有用户

chmod a+x 1

还有减掉某个权限、赋予某个并代替掉之前的权限也是都演示一下。

 chmod u-x 文件名

chmod  u=x 文件名

以上这些设置权限的方法我们统称为文字设定法,

还有一种叫做数字设定法。

在这里面:

​     -代表没有权限,可以用数字0表示;

​     x代表执行权限,可以用数字1表示

​     w代表写的权限,可以用数字2表示;

​     r代表读的权限,可以用数字4表示;

那假如我们要对1文件的三种身份全部只设置写的权限

 chmod 222 文件名

这里一定要记住这三个数字分别对应了三种身份,每种身份的权限加起来就是该身份所在位的数值。

特殊权限 

SUID

   作用:是为了让一般用户执行某些程序的时候,在程序运行的期间,暂时获得该程序文件的所属者的权限。

Chmod u+s 文件名称

Chmod 0777 文件  去掉该文件的suid权限

Chmod 4777 文件  增加该文件的suid权限

SGID

  文件:如果SGID设置在二进制文件上面,则不论用户是谁,都可以在执行该程序的时候程序的所属组将变成该文件的所属组。

  目录:如果SGID设置A目录上,则在该目录内创建的文件或者目录的所属组会变成A目录的所属组。

Chmod 0777 文件  去掉该文件的sgid权限

Chmod 2777 文件  增加该文件的sgid权限

Chgrp (change group)

Sticky Bit   t

   SBit 只针对目录有效,在具有SBit权限的目录下,如果该用户在该目录下拥有wx权限,则当用户在该目录下创建文件或者目录的时候,只有文件拥有者和root用户才有权限去删除里面的东西。

Chmod 0777 文件  去掉该文件的sbit权限

Chmod 1777 文件  增加该文件的sbit权限

拓展权限

ACL:给指定的用户分配指定的权限。

查看acl权限

getfacl 文件名

设定acl权限

语法:`setfacl 选项 文件名`

选项:

> -m:设定 ACL 权限。

如果是给予用户 ACL 权限,则使用`u:用户名:权限`格式赋予;

如果是给予组 ACL 权限,则使用`g:组名:权限"`格式赋予;

> -x:删除指定的 ACL 权限;

> -b:删除所有的 ACL 权限;

> -d:设定默认 ACL 权限。只对目录生效,指目录中新建立的文件拥有此默认权限;

> -k:删除默认 ACL 权限;

> -R:递归设定 ACL 权限。指设定的 ACL 权限会对目录下的所有子文件生效;

管理Linux的联网

linux的IP地址配

动态配置IP地址:当前主机通过DHCP的方式去自动获取IP地址。

静态配置IP地址:根据动态获取的地址后期手动的去给他配置地址。

**nat模式**:主机网卡直接与虚拟NAT设备相连,然后虚拟NAT设备与虚拟DHCP服务器一起连接在虚拟交换机VMnet8上,这样就实现了虚拟机联网。VMware Network Adapter VMnet8虚拟网卡主要是为了实现主机与虚拟机之间的通信。

**桥接模式:**桥接模式就是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接的作用下,类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干扰。在桥接模式下,虚拟机ip地址需要与主机在同一个网段,如果需要联网,则网关与DNS需要与主机网卡一致。更改桥接模式的时候大家注意一下,有些主机按照咱之前的方式选择桥接就断卡网卡重新连接就可以获得IP,但是有些主机是拿不到地址的,拿不到地址的话需要点击编辑—虚拟网络编辑器-点击右下角的更改设置,桥接的原理是将虚拟的网卡桥接到真实的物理网卡上。桥的时候注意要选择你现在真实物理机上网的网卡,是有线就选择有线,是无线就选择无线。

仅主机模式:Host-Only模式其实就是NAT模式去除了虚拟NAT设备,然后使用VMware Network Adapter VMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机通信的,Host-Only模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯。

配置IP地址

红帽9的配置文档

[root@localhost ~]# vim /etc/NetworkManager/systemconnections/ens160.nmconnection

注意一下,就是我们去更改的时候不要直接对配置文件进行更改,因为更改后系统是不会提示错误的

通过命令去更改IP地址

通过命令去更改的时候我们用的是软件NetworkManager提供的nmcli命令。

显示设备的状态信息

``[root@localhost ~]# nmcli device status`

显示设备的配置信息**

`[root@localhost ~]# nmcli device show`

connection选项

``[root@localhost ~]# nmcli connection`

add      clone    delete   down     edit     export   help     import   load     modify   monitor  reload   show     up`     

add 重新添加一个配置文件

delete删除配置文件;

edit编辑指定的配置文件

help 帮助;

load加载配置文件;

modify修改配置文件的内容;

reload重载

up 启用;

down禁用。

通过该选项对配置文件修改去更改IP地址。(非交互式)

示例:将模式更改为静态的模式并手动配置IP地址、子网掩码、网关、DNS。

`[root@localhost ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.192.120/24 ipv4.gateway 192.168.192.2 ipv4.dns 114.114.114.114 +ipv4.dns 8.8.8.8`

**通过cat获取配置文件查看更改后的内容**

`[root@localhost ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection`

**重新激活配置文件**[root@localhost ~]# nmcli connection up ens160

**创建一个新的配置文件**

**一个网卡可以对应多个配置文件,但是在应用的时候只能应用一个。**

`[root@localhost ~]# nmcli connection add type ethernet con-name work ifname ens160`

`Connection 'work' (ddb5861f-c520-46cb-9a8e-6f4d8e86b86f) successfully added.`

指定设备类型是ethernet,通过con-name起的连接名字是work,也就是我的新的配置文件名,通过ifname指定的是设备名。

**查看新的配置文件**

[root@localhost ~]# cat /etc/NetworkManager/system-connections/work.nmconnection

**激活work配置文件**

``[root@localhost ~]# nmcli connection up work`

`Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)`

**通过edit的方式去更改IP地址(交互式)****

[root@localhost ~]# nmcli connection edit work    

nmcli> 通过tab键查看选项

activate  back   describe  goto  help    nmcli     print     quit      remove    save      set   verify  

通过goto进入Ipv4中

nmcli> goto ipv4

nmcli ipv4> 通过tab键查看选项

activate  back  describe  goto  help   nmcli     print     quit  remove    save      set   verify    

通过set将ipv44模式改为manual手动配置

nmcli ipv4> set method manual

改地址、掩码、网关、DNS,并保存退出

nmcli ipv4> set method manual

nmcli ipv4> set addresses 192.168.197.120/24

nmcli ipv4> set gateway 192.168.197.2

nmcli ipv4> set dns 114.114.114.114

nmcli ipv4> save

Connection 'work' (ddb5861f-c520-46cb-9a8e-6f4d8e86b86f) successfully updated.

nmcli ipv4> quit

激活。

两种更改方式推荐modify。

静态更改为动态之后配置文件中关于手动配置IP的部分还是存在的,需要通过eidt交互式删除。

通过delete删除配置文件

[root@localhost ~]# nmcli connection delete work

Connection 'work' (ddb5861f-c520-46cb-9a8e-6f4d8e86b86f) successfully deleted.

10.4 网络测试命令

ping命令 测试网络的连通性的。

命令一般格式为:`ping  [选项]  <目标主机名或IP地址>`

选项:

-c 数字——用于设定本命令发出的ICMP消息包的数量,若无此选项,则会无限次发送消息包直到用户按【Ctrl+C】组合键才终止命令。

-s 字节数——设置ping命令发出的消息包的大小,默认发送的测试数据大小为56字节;自动添加8字节的ICMP协议头后,显示的是64字节;再添加20字节的IP协议头,则显示的为84字节。最大设置值为65507B。

-i 时间间隔——设定前后两次发送ICMP消息包之间的时间间隔,无此选项时,默认时间间隔为1秒。为了保障本机和目标主机的安全,一般不要小于0.2秒。

-t——设置存活时间TTL(Time To Live)

`[root@localhost ~]# ping -c 4 www.baidu.com`

[root@localhost ~]# ping localhost

tracepath追踪并显示报文到达目的主机所经过的路由信息

命令一般格式为:`tracepath   [选项]  <目标主机名或目标IP地址>`

通过-b的选项对沿途各主机节点同时显示IP地址和主机名。

[root@localhost ~]# tracepath -b  www.baidu.com

从网站下载文件

wget命令用于在终端命令行里下载网络文件,英文全称为:“web get”,语法格式为:`wget [选项] 网址`

在下载之前首先需要测试网络连通性,只有网络正常连通才可以

[root@localhost ~]# wget https://down.qq.com/qqweb/LinuxQQ/linuxqq_2.0.0-b2-1089_x86_64.rpm

选项:

-P  下载到指定目录

-t  最大尝试次数(这个如果不指定次数的话,在网络环境不好的时候下载中断了,是不会继续下载的,但如果我们设置了最大尝试次数,例如设置为3次,他会在中断后再次下载,尝试3次。)

-b  后台下载模式

-c  断点续传  (基于之前断点的位置继续下载)

-p  下载页面内所有资源,包括图片、视频等

-r  递归下载   (指定一个路劲,可以将路劲下的目录全部下载)

```

curl命令是一个网络工具,其主要作用是通过http、https、ftp等方式下载/上传文件,,还可以访问网站(这边访问的网站不是一个具体的页面,而是开发者的代码)。

[root@localhost ~]# curl http://www.baidu.com

[root@node12 ~]# curl www.baidu.com -o index.html   -o的选项是将要访问的信息输出到指定文件

管理Linux软件包和进程

rpm

RPM(Red Hat Package Manager,Red Hat软件包管理器)是一种开放的软件包管理系统,按照GPL条款发行,可以运行于各种Linux系统上。RPM简化了Linux系统安装、卸装、更新和升级的过程,只需要使用简短的命令就可完成。RPM维护一个已经安装软件包和它们的文件的数据库,因此,可以在系统上使用查询和校验软件包功能。

红帽中的软件包它的管理格式是rpm的格式。

(1)RPM是红帽包管理(Redhat Package Manager)的缩写。

- 由Red Hat公司提出的一种软件包管理标准。

- 是Linux各发行版中应用最广泛的软件包格式之一(还有debian的发行版deb安装包)。

- RPM功能通过rpm命令使用不同参数来实现。  

不同的发行系统它默认的管理格式是不一样的,它后续是通过统一的格式去开发的。

在Linux中它的软件包的格式就相当于是运行程序的格式。

rpm软件包中包含有关于本软件包的相关信息, 便于对软件包信息进行查询。

**RPM软件包的典型命名格式:**

`软件名-版本号-发行号.操作系统版本.硬件平台的类型.rpm`,比如 `zsh-5.0.2-14.el7.x86_64.rpm`

| zsh    | -5       | 0        | 2      | 14           | el7         | x86         | 64           |

| ------ | -------- | -------- | ------ | ------------ | ----------- | ----------- | ------------ |

| 软件名 | 主版本号 | 次版本号 | 修订号 | 软件发布次数 | 发行商RHEL7 | CPU架构平台 | 支持系统位数 |

**软件包的获取方式**

一种是通过互联网的方式去下载,这种叫做网络源去获取。

一种是在本地去获取,通过光驱去获取软件包,这种叫做本地源去获取。

本地源获取软件包

首先我们需要去加载软件包,我们需要通过挂载的方式将当前主机下的某个目录和我的文件系统做一个连接,连接后类似于是我通过当前目录连接到某个设备的访问入口,切换到该目录就相当于切换到该设备,该文件系统。

查看本地光盘是否连接

[root@localhost ~]# ll /dev/sr0

brw-rw----+ 1 root cdrom 11, 0 Jul 13 11:42 /dev/sr0

[root@localhost ~]#

sr0中的s代表的设备类型SATA,r代表的是ROM存储介质,0是光盘中的数据读取接口,第一个接口用0来标记。

cdrom也可以对光盘进行标记

[root@localhost ~]# ll /dev/cdrom

lrwxrwxrwx. 1 root root 3 Jul 13 11:42 /dev/cdrom -> sr0

[root@localhost ~]#

```

手动挂载光盘到目录中

mount用于挂载Linux系统外的文件。**

格式:mount  要挂载的文件  需挂载的目录

需挂载的目录:系统默认挂载目录:/media ;手动挂载的目录:/mnt。

通过mount查看当前已经挂载的文件

`[root@localhost ~]# mount`

**将光盘挂载到/mnt目录下**

[root@localhost ~]# mount /dev/sr0 /mnt

mount: /mnt: WARNING: source write-protected, mounted read-only.

提示信息:对光盘有一个写保护,就是我们我只能读取,不能写。

提示:警告不影响命令的执行。

**一个设备可以同时挂载到多个目录下,也就是说一个设备可以同时指定多个挂载点。**

AppStream、BaseOS里面存放了红帽中的软件包。

packages中存放了rpm的软件包。

**RPM包的依赖性指的是一个软件依赖于其他的软件包或者库才能够正常运行。**

安装rpm包(不带依赖关系的 )

| 参数          | 说明                         |

| ------------- | ---------------------------- |

| -i, --install    | 安装软件包                   |

| --nodeps      | 不验证软件包依赖             |

| -v, --verbose | 提供更多的详细信息输出       |

| -h, --hash    | 软件包安装的时候列出哈希标记 |

| -U            | 软件包升级                   |

| -e            | 软件包卸载                   |

```

[root@localhost Packages]# rpm -ivh zenity-3.32.0-7.el9.x86_64.rpm

warning: zenity-3.32.0-7.el9.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY

Verifying...                          ################################# [100%]

Preparing...                          ################################# [100%]

package zenity-3.32.0-7.el9.x86_64 is already installed

[root@localhost Packages]#

```

警告:没有密钥验证。(软件包在安装的时候是可以输入密钥进行验证的,如果忽略的话就会有一个警告)

处理秘钥验证:*

gpg就是公钥私钥的软件包的验证。

秘钥配置文件:

[root@localhost Packages]# ll /etc/pki/rpm-gpg/

total 8

-rw-r--r--. 1 root root 1669 Apr  6  2022 RPM-GPG-KEY-redhat-beta   测试版本

-rw-r--r--. 1 root root 3682 Apr  6  2022 RPM-GPG-KEY-redhat-release  发行版本

[root@localhost Packages]#

将发行版本秘钥导出

[root@localhost Packages]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

执行这个命令之后再去安装rpm软件包的时候就不会再提示警告信息了。

(这个不验证只基于本地的rpm软件包,如果是互联网上下载的可能还需要)。

卸载rpm包

[root@localhost Packages]# rpm -e 软件名 

rpm查询功能(跟-q结合使用)

| 参数 | 说明                                 |

| ---- | ------------------------------------ |

| -a   | 查询所有已安装的软件包               |

| -l   | 显示已安装软件包的相关文件列表和信息 |

| -f   | 查询文件所属软件包                   |

| -i   | 显示已经安装的rpm软件包信息          |

-q  (查询已安装的软件包则显示该软件包信息,查询未安装的软件包则显示该包不存在)

[root@localhost Packages]# rpm -q zenity   

zenity-3.32.0-7.el9.x86_64

[root@localhost Packages]# rpm -q httpd

package httpd is not installed

-qa (查询所有已经安装的软件包)

[root@localhost Packages]# rpm -qa

[root@localhost Packages]# rpm -qa | wc -l

1172

-ql    将安装软件以文件列表的形式展现出来(释放软件程序的所有文件)

[root@localhost Packages]# rpm -ql tar

-qf   (查询文件是由哪个软件包释放的)

[root@localhost Packages]# rpm -qf /usr/share/man/man1/gtar.1.gz

tar-1.34-3.el9.x86_64

-qpi  (查看一个包的详细信息,查看时需要指明绝对路径)

[root@localhost Packages]# rpm -qpi /mnt/BaseOS/Packages/coreutils-8.32-31.el9.x86_64.rpm

YUM/DNF管理工具  

YUM (Yellow dog Updater,Modified) ,RHEL8中默认使用的软件批量管理工具由原版本的yum换成了速度更快的dnf(DNF = Dandified YUM),原有的yum命令仅为dnf的软链接,当然依旧可以使用。

[root@kongd ~]# ll `which yum`

lrwxrwxrwx. 1 root root 5 2月  14 2019 /usr/bin/yum -> dnf-3

(1)YUM/DNF 功能

- 在线下载、 安装、 卸载、 升级rpm软件包

- 自动查找并解决rpm包之间的依赖关系,一次性安装所有具有依赖关系的rpm包,而无需管理员逐个、 手工地去安装每一个rpm包

(2)如何实现yum/DNF安装

系统会去读取`/etc/yum.repos.d/`目录下的`.repo`结尾的文件,从该文件中读取以下内容实现装包:

- 包含各种rpm安装文件的软件仓库(rhel8有两个仓库,rhel7只有一个仓库)

  - BaseOS存储库:提供一套核心的底层操作系统功能,为基础软件安装库

  - AppStream存储库:包括额外的用户空间应用程序、运行时语言和数据库

- 软件仓库的地址信息

1、配置`.repo`文件,即yum源

配置文件就是一个软件程序的默认参数初始化的文件,程序在执行的时候,它会匹配初始化的信息。

在系统当中可以自定义yum的初始化文件。

repo文件是Linux系统中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,比如从哪里下载需要安装或者升级的软件包,repo文件中的设置内容将被yum读取和应用。软件仓库配置文件默认存储在/etc/yum.repos.d目录中建立本地源

  [root@localhost Packages]# vim /etc/yum.repos.d/base.repo  创建base.repo配置文件

  [AppStream]                    仓库名称

  name=REEL8.5-AppStream         仓库的描述名称

  baseurl=file:///mnt/AppStream  软件包的路径,url是统一资源定位符,file指本地协议,//表示的是协议符,是固定用法,后边这个/表示的是根目录

  gpgcheck=0                     公私钥的验证,0代表关闭,1代表开启,为了避免公私钥验证失败,一般我们都将它关闭。

  enable=1                       是否启用该仓库,0代表关闭。1代表启用

  [BaseOS]

  name=BaseOS

  baseurl=file:///mnt/BaseOS

  gpgcheck=0

  enable=1

- 建立网络源(Redhat9暂时无公开的网络源,暂不可配置,其他发行版本可自行选择对应网源仓库)

  - 阿里云网络源,aliyun的镜像站点为https://mirrors.aliyun.com/

  #此处以redhat8.5为例

  [root@master ~]# cat /etc/redhat-release

  Rocky Linux release 8.5 (Green Obsidian)

  注:此处先查看自己的发行版本信息,选择相应的仓库。

  #仓库文件可以自己写也可以从aliyun网站下载

  [root@master ~]# cat /etc/yum.repos.d/aliyun.repo

  [appstream]

  name=appstream

  baseurl=https://mirrors.aliyun.com/rockylinux/8.5/AppStream/x86_64/os/

  gpgcheck=0

  #gpgcheck=1        #如果gpgcheck为1,需要写秘钥文件路径

  #gpgkey=https://mirrors.aliyun.com/rockylinux/RPM-GPG-KEY-rockyofficial

  [baseos]

  name=baseos

  baseurl=https://mirrors.aliyun.com/rockylinux/8.5/BaseOS/x86_64/os/

  gpgcheck=0

  #gpgcheck=1        

  #gpgkey=https://mirrors.aliyun.com/rockylinux/RPM-GPG-KEY-rockyofficial

  ```

```

  

  - 清华源镜像站点为https://mirrors.tuna.tsinghua.edu.cn/

  - 中国科技大学镜像站点https://mirrors.ustc.edu.cn/

  - 网易开源镜像站http://mirrors.163.com/

  - ……等等很多大学开源镜像站点……

2、通过yum安装rpm软件包

格式:yum -y install  软件名

[root@localhost Packages]# yum -y install httpd

```

3、通过yum卸载rpm软件包

[root@localhost ~]# yum -y remove httpd

```

4、查看软件库里面的所有包组,并按照包组安装

[root@localhost ~]# yum grouplist    查看软件库里面的所有包组   

[root@localhost ~]# yum group install "Development Tools"   按照包组名安装

```

5、搜索文件由哪个包产生

[root@localhost ~]# yum provides touch

[root@localhost ~]# yum whatprovides touch

```

6、模糊搜索包名

[root@localhost ~]# yum search rz  模糊搜索包含rz的文件

[root@localhost ~]# yum -y install lrzsz.x86_64 安装该文件

[root@localhost ~]# rz   通过rz打开弹窗,双击要传输的文件,就可以将文件传到Linux下面。

[root@localhost ~]# sz anaconda-ks.cfg  通过sz 文件名 将该文件从Linux下传到Windows中。

```

源代码编译

1)使用源代码安装软件的优点

- 由于自由软件的最新版本大都以源码的形式最先发布,编译安装可以获得软件的最新版本,及时修复bug

- 如果当前安装的程序无法满足需求,用户可以根据需要重新配置、自由修改源代码,加入新的功能

2)编译需求

- 确认源代码编译环境:需安装支持 C/C++程序语言的编译器`yum install gcc`

- 下载相应的源码软件包

3)安装

1、配置阶段:基于代码进行安装的时候检测有没有选择对应的路径。

[root@localhost ~]# mkdir /test  创建目录

[root@localhost ~]# cd /test

通过xftp将tar压缩包从Windows中传到Linux中

[root@localhost test]# ll

total 3872

-rw-r--r--. 1 root root 3962257 Jul 13 16:16 tar-1.29.tar.gz

[root@localhost test]# tar -xvzf tar-1.29.tar.gz tar-1.29/   将该压缩包解压

[root@localhost test]# yum remove tar -y   卸载掉之前安装好的tar包

[root@localhost test]# yum -y install gcc*    安装gcc编译工具

[root@localhost test]# cd tar-1.29/

[root@localhost tar-1.29]# ./configure 运行该脚本文件

这边它只能够以普通用户的身份去执行,但如果之前拿root身份执行了会出错,出错后要先删除其中的config.log文件才能再去执行。

[root@localhost tar-1.29]# rm -rf config.log

[root@localhost tar-1.29]# su - rhcsa  切换到普通用户

[rhcsa@localhost ~]$ cd /test

[rhcsa@localhost test]$ cd tar-1.29/

[rhcsa@localhost tar-1.29]$ ./configure  重新运行该脚本文件

```

2、编译阶段:将源码编译成二进制文件。

    [rhcsa@localhost tar-1.29]$ exit

    logout

    [root@localhost tar-1.29]# make   make命令会将所有的.c文件生成.o文件。

3、安装。

[root@localhost tar-1.29]# make install  通过make install去将所有的.o文件安装

```

4、测试

[root@localhost test]# touch 1 2 3

[root@localhost test]# tar -cvzf a.tar.bz2 1 2 3

1

2

3

```

进程

(1)程序、进程、线程

**程序**: 二进制文件,文件存储在磁盘中,例如/usr/bin/目录下

**进程**:进程是已启动的可执行程序的运行实例。

**线程:**是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

(2)进程分类

ps命令查看进程显示当前运行进程

[root@localhost ~]# ps

    PID TTY          TIME CMD

  12313 pts/1    00:00:01 bash

  86367 pts/1    00:00:00 ps

选项:

-a :显示所有用户的进程

-u :显示用户名和启动时间

-x :显示 没有控制终端的进程

-e :显示所有进程,包括没有控制终端的进程

-l :长格式显示

-w:宽行显示,可以使用多个 w 进行加宽显示

-f:做一个更完整的输出

```

显示所有运行进程

[root@localhost ~]# ps -aux

#查看当前用户的进程

[root@localhost ~]# ps -l

F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD

4 S     0  42097  42091  0  80   0 - 29040 wait   pts/0    00:00:00 bash

0 R     0  43256  42097  0  80   0 - 34857 -      pts/0    00:00:00 ps

说明:

F:代表这个程序标志(process flags),说明这个程序的权限。常见号码有:4表示此程序的权限为root;1表示此子程序仅进行复制(fork)而没有实际执行(exec)

S:代表这个程序的状态(STAT),主要的状态有:

R(Running):该程序正在运作中;

S(Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒;

D:不可被唤醒的睡眠状态,通常可能是在等待I/O的情况;

T:停止状态(stop),可能是在工作控制(后台暂停)或traced状态;

Z(Zombie):僵尸状态,程序已经终止但却无法被移除至记忆体外。

+:位于后台的进程组

UID/PID/PPID:代表此程序被该UID所拥有/程序的PID号码/此程序的父进程PID号码。

C:代表CPU使用率,单位为百分比;

PRI/NI:Priority/Nice的缩写,代表此程序被CPU所执行的优先顺序,数值越小代表该程序越快被CPU执行。

ADDR/SZ/WCHAN:都与内存有关,ADDR是kernel funcition,指出该程序在内存的哪个部分,如果是running的程序,一般会显示-。SZ代表此程序用掉多少内存,WCHAN表示目前程序是否运作中,若为-表示正在运行。

TTY:登入者的终端机位置,若为远程终端登入则使用动态终端界面(pts/n)。

TIME:使用掉的CPU时间,即此程序实际花费CPU运作的时间。

CMD:触发此进程的指令是什么。

```

#查看当前用户的进程

[root@localhost ~]# ps -u

USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root        1280  2.2  0.2 237304  5408 tty1     Ss+  15:54   0:00 -bash

root        1415  0.1  0.2 237172  5092 pts/0    Ss   15:55   0:00 -bash

root        1452  0.0  0.2 268484  4008 pts/0    R+   15:55   0:00 ps -u

[root@localhost ~]# ps aux |less

USER       PID %CPU %MEM    VSZ   RSS TTY     STAT START   TIME COMMAND

root         1     0.0     0.0          2164   648 ?          Ss   08:47     0:00 init [5]  

说明:

USER: 运行进程的用户

PID: 进程ID

%CPU:  CPU占用率

%MEM: 内存占用率

VSZ: 占用虚拟内存

RSS:   占用实际内存 驻留内存

TTY: 进程运行的终端

STAT: 进程状态  man ps (/STATE)

      R 运行

      S 可中断睡眠 Sleep

      D     不可中断睡眠

      T 停止的进程

      Z 僵尸进程

      X     死掉的进程

      

   s     进程的领导者,父进程

   <     <优先级较高的进程

  N     N优先级的进程

  +     +表示是前台的进程组

  l   以线程的方式运行

START: 进程的启动时间

TIME: 进程占用CPU的总时间

COMMAND: 进程文件,进程名

```

查看指定进程的PID

[root@localhost ~]# pgrep -l sshd

5945 sshd

12308 sshd

12312 sshd

根据ID号结束进程

[root@localhost ~]# kill 5945

结束所有批处理进程

[root@localhost ~]# killall sshd

这边将sshd的进程结束后,要从虚拟机的终端内重新启动

[root@localhost ~]# systemctl start sshd

```

top命令查看进程

语法:`top [-d 数字]  |  [-bnp]`

-d:后面可以接秒数,就是整个进程界面更新的秒数,默认是5秒

-b:以批次的方式执行top,还有更多的参数可用。通常会搭配数据流重定向来将批处理的结果输出为文件。

-n:与-b搭配,进行几次top的输出结果

-i:不显示闲置或者僵死的进程信息

-c:显示进程的整个命令路径,而不是只显示命令名称

-s:使top命令在安全模式下运行,此时top的交互式指令被取消,避免潜在危险

-p:指定某些个PID来进行查看检测

top - 17:21:03 up 4:32, 5 users, load average: 0.19, 0.08, 0.06

Tasks: 483 total,  3 running, 480 sleeping,  0 stopped,  0 zombie

%Cpu(s): 0.3 us, 0.7 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

MiB Mem :   1790.0 total,   1278.5 free,    240.5 used,    271.0 buff/cache

MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   1393.8 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND

      1 root      20   0  179104  13540   8728 S   0.0   0.7   0:01.22 systemd

      2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd

      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp

      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par+

      6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker+

      9 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_perc+

     10 root      20   0       0      0      0 S   0.0   0.0   0:00.01 ksoftir+

     11 root      20   0       0      0      0 I   0.0   0.0   0:00.13 rcu_sch+

- 统计信息区

  第一行为任务队列信息:top - 17:21:03 up 4:32, 5 users, load average: 0.19, 0.08, 0.06

  > 17:21:03表示当前系统时间;up 4:32表示系统已经启动4小时32分钟了;

  >

  > 5 users表示当前登录系统的用户数;

  >

  > load average: 0.19, 0.08, 0.06表示系统1分钟、5分钟、15分钟前到现在的平均负载(如果是1表示满负载)

  ```bash

  第二行:Tasks: 483 total,  3 running, 480 sleeping,  0 stopped,  0 zombie

  > 483 total进程的总数;  3 running正在运行的进程数,;480 sleeping处于休眠状态的进程数, ; 0 stopped停止的进程数, ; 0 zombie僵死的进程数。

  第三行:%Cpu(s): 0.3 us, 0.7 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

  > 0.3 us表示用户进程占用CPU的百分比;0.7 sy系统进程占用CPU的百分比;

  >

  > 0.0 ni用户进程空间内改变过优先级的进程占用CPU的百分比; 99.0 id空闲CPU占用的百分比;0.0 wa代表I/Owait表示等待输入、输出的进程占用CPU的百分比;

  >

  > 0.0 hi表示cpu服务于硬件中断所耗费的时间总额; 0.0 si表示cpu服务于软件中断所耗费的时间总额;

  >

  > 0.0 st表示虚拟机被hypervisor偷去的cpu时间。另外,如果是多内核设备,可按下数字键“1”来切换成不同cpu的负载率。

  MiB Mem :   1790.0 total,   1278.5 free,    240.5 used,    271.0 buff/cache

  MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   1393.8 avail Mem

  > total系统的内存大小;free目前空余内存大小;used已经使用的内存大小

- 进程信息区:显示了每个进程的运行状态

  ```bash

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND

    1 root      20   0  179104  13540   8728 S   0.0   0.7   0:01.22 systemd

  ```

  > PID:进程的id

  > USER:进程所有者的用户名

  > PR:进程优先级

  > NI:nice值。负值表示高优先级,正值表示低优先级

  > VIRT:进程使用的虚拟内存总量,单位为KB

  > RES:进程使用的、未被换出的物理内存大小,单位KB

  > SHR:共享内存大小,单位KB

  > S:进程状态,D表示不可中断的睡眠状态,R表示运行状态,S表示睡眠状态,T表示跟踪/停止,Z表示僵死进程

  > %CPU:上次更新到现在的CPU时间占用百分比

  > %MEM:进程占用的物理内存百分比

  > TIME+:进程总计使用的CPU时间,单位为1/100秒

  > COMMAND:正在运行进程的命令名或者命令路径

在top执行过程中可以使用的按键命令:

| 交互式命令 | 说明                                                         |

| ---------- | ------------------------------------------------------------ |

| h或?      | 显示帮助信息,给出交互式命令的一些说明                       |

| k          | 终止一个进程,系统将提示用户输入一个需要终止进程的PID        |

| i          | 忽略闲置进程和僵死进程,这是一个开关式命令                   |

| s          | 改变top输出信息两次刷新之间的时间,系统将提示输入新的时间,单位是秒。如果输入小数,就换算成毫秒;如果输入0,系统输出将不断刷新,默认刷新时间是3秒;需要注意的是,如果设置太短的时间,可能会引起系统不断刷新,无法看清输出显示情况,而且系统负载也会加大 |

| o或者O     | 改变top输出信息中显示项的顺序。按小写的a-z键可以将相应的列向右移动,而按大写的A-Z键可以将相应的列向左移动。最后按enter确定 |

| f或者F     | 从当前显示列表中添加或者删除项,按f键之后会显示列的列表,按a-z键即可显示或隐藏对应的列。最后按enter确定 |

| m          | 切换显示内存信息                                             |

| t          | 切换显示进程和cpu状态信息                                    |

| r          | 重新设置一个进程的优先级,系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10 |

| l          | 切换显示平均负载和启动时间信息                               |

| q          | 退出top显示                                                  |

| c          | 切换显示完整命令行和命令名称信息                             |

| M          | 根据驻留内存大小进行排序输出                                 |

| N          | 以PID来排序                                                  |

| P          | 根据CPU使用百分比大小进行排序输出                            |

| T          | 根据时间/累计时间进行排序输出                                |

| S          | 切换到累计模式                                               |

| W          | 将当前top设置写入~/.toprc文件中                              |

磁盘管理

什么是磁道呢?每个盘片都在逻辑上有很多的同心圆,最外面的同心圆就是 0 磁道。我们将每个同心圆称作磁道(注意,磁道只是逻辑结构,在盘面上并没有真正的同心圆)。硬盘的磁道密度非常高,通常一面上就有上千个磁道。但是相邻的磁道之间并不是紧挨着的,这是因为磁化单元相隔太近会相互产生影响。

在磁盘上每个同心圆是磁道,从圆心向外呈放射状地产生分割线(扇骨),将每个磁道等分为若干弧段,每个弧段就是一个扇区。每个扇区的大小是固定的,为 512Byte。扇区也是磁盘的最小存储单位。

柱面又是什么呢?如果硬盘是由多个盘片组成的,每个盘面都被划分为数目相等的磁道,那么所有盘片都会从外向内进行磁道编号,最外侧的就是 0 磁道。具有相同编号的磁道会形成一个圆柱,这个圆柱就被称作磁盘的柱面。

磁盘分区

磁盘分区是指对硬盘物理介质的逻辑划分。

分区的意义:

1、数据的安全性:2、系统的效能考虑:

分区类型

1、MBR分区

MBR(Master Boot Record,主引导记录)是传统的分区机制,使用BIOS引导PC设备,寻址空间只有32bit长。

- 分区空间最大支持2.2TB

- 支持的分区数量:4个主分区或者3个主分区1个扩展分区

MBR分区类型

- 主分区(primary partition)

  > 一块硬盘最多4个主分区,主分区不可以再进行二次分区。

  > 主分区可以直接建立文件系统,存放数据

  > 可以用来引导、启动操作系统

- 扩展分区(extended partition)

  > 一块硬盘最多一个扩展分区,加主分区最多4个

  > 不能创建文件系统

  > 可以划分逻辑分区

- 逻辑分区(logical partition)

    > 可以创建文件系统,存放数据

    > 逻辑分区的数量没有限制。 

2、GPT分区**

GPT(GUID Partition Table,全局唯一标识分区表)是一种比MBR分区更先进、更灵活的磁盘分区模式

- 在默认情况下,GPT最多可支持128个分区

- 支持大于2.2TB的总容量及大于2.2TB的分区,最大支持18EB(1EB=1024PB,1PB=1024TB,1TB=1024GB)

- GPT分区表自带备份

- 向后兼容MBR,GPT分区表上包含保护性的MBR区域

[root@localhost ~]# lsblk

NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS

sr0            11:0    1   8G  0 rom  /mnt

nvme0n1       259:0    0  20G  0 disk

├─nvme0n1p1   259:1    0   1G  0 part /boot

└─nvme0n1p2   259:2    0  19G  0 part

  ├─rhel-root 253:0    0  17G  0 lvm  /

  └─rhel-swap 253:1    0   2G  0 lvm  [SWAP]

[root@localhost ~]#

```

使用fdisk管理分区

fdisk命令工具默认将磁盘划分为mbr格式的分区

命令:`fdisk  设备名`

fdisk命令以交互方式进行操作的,在菜单中选择相应功能键即可

实验步骤:

创建一块新的硬盘。

把虚拟机关机,找到硬盘的位置,然后双击,

点击添加,全部下一步,大小改为10,然后全部下一步,点击完成,点击确定。

查看硬盘信息

[root@localhost ~]# lsblk

NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS

sr0            11:0    1   8G  0 rom  /run/media/root/RHEL-9-0-0-BaseOS-x86_64

nvme0n1       259:0    0  20G  0 disk

├─nvme0n1p1   259:1    0   1G  0 part /boot

└─nvme0n1p2   259:2    0  19G  0 part

  ├─rhel-root 253:0    0  17G  0 lvm  /

  └─rhel-swap 253:1    0   2G  0 lvm  [SWAP]

nvme0n2       259:3    0  10G  0 disk

使用fdisk管理分区。

先找到本地硬盘位置

[root@localhost ~]# ll /dev/nvme0n2

brw-rw----. 1 root disk 259, 3 Jul 15 09:50 /dev/nvme0n2

了解fdisk的选项

选项:

| 指令 | 作用                     | 指令 | 作用                                   |

| ---- | ------------------------ | ---- | -------------------------------------- |

| a    | 调整磁盘的启动分区       | p    | 显示当前磁盘的分区信息                 |

| d    | 删除磁盘分区             | t    | 更改分区类型                           |

| l    | 显示所有支持的分区类型   | u    | 切换所显示的分区大小单位               |

| m    | 查看所有指令的帮助信息   | n    | 创建新分区                             |

| q    | 不保存更改,退出fdisk命令 | w    | 把修改写入磁盘分区表,然后退出fdisk命令 |

| g    | 新建一个空的GPT分区表    | o    | 新建一个空的DOS分区表                  |

进入fdisk管理工具的交互界面

[root@localhost ~]# fdisk /dev/nvme0n2

Welcome to fdisk (util-linux 2.37.4).

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.

Device does not contain a recognized partition table.

Created a new DOS disklabel with disk identifier 0x350daeb6.

进来之后会有一个欢迎提示,也就是缓冲区,接下来在缓冲区内进行操作,

DOS的意思是默认是BIOS引导的,但如果是gpt的话,就是UEFI引导的,默认会有128个分区。

Command (m for help): m       查看所有指令的帮助信息

Command (m for help): p        显示当前磁盘的分区信息

通过n命令新建分区

Command (m for help): n        创建新分区

Partition type

   p   primary (0 primary, 0 extended, 4 free)         主分区

   e   extended (container for logical partitions)     拓展分区

Select (default p): p          这边输入p、直接回车都是默认创建主分区

Partition number (1-4, default 1): 1      这边输入1、直接回车都是默认创建分区1

First sector (2048-20971519, default 2048):  起始扇区,一个扇区是512个字节,它是从2048扇区开始的,从这个开始的原因是前面需要预留空间存放磁盘的引导信息,这边它并不是全部被占用,会有一些空余,目的是防止引导信息发生变化。

Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-20971519, default 20971519): +2G  结束扇区,该扇区大小为2G

删除的时候需要Ctrl+del一起按才可以删除,只按del它会认为输入字符。

Command (m for help): n        创建新分区

Partition type

   p   primary (1 primary, 0 extended, 3 free)          主分区

   e   extended (container for logical partitions)      扩展分区

Select (default p): e                                   创建拓展分区

Partition number (2-4, default 2): 2                    创建分区2

First sector (4196352-20971519, default 4196352):       起始扇区

Last sector, +/-sectors or +/-size{K,M,G,T,P} (4196352-20971519, default 20971519): +5G    结束扇区,该扇区大小设置为5G

Command (m for help): n       创建逻辑分区

Partition type

   p   primary (2 primary, 1 extended, 1 free)          主分区

   l   logical (numbered from 5)                        逻辑分区

Select (default p): l                                   创建逻辑分区

Adding logical partition 5

First sector (4198400-14682111, default 4198400):       起始扇区

Last sector, +/-sectors or +/-size{K,M,G,T,P} (4198400-14682111, default 14682111):   结束扇区,直接默认最大

Created a new partition 5 of type 'Linux' and of size 5 GiB.

注意一下如果把扩展分区删除,那它下面的逻辑分区也会全部被删掉。所以后续就可以通过直接删除拓展分区的方式将逻辑分区全部删掉。还有就是逻辑分区的编号是没有办法选择的。

Command (m for help): p

Disk /dev/nvme0n2: 10 GiB, 10737418240 bytes, 20971520 sectors

Disk model: VMware Virtual NVMe Disk

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x3675abb3

Device         Boot    Start      End  Sectors  Size Id Type

/dev/nvme0n2p1          2048  4196351  4194304    2G 83 Linux

/dev/nvme0n2p2       4196352 14682111 10485760    5G  5 Extended

/dev/nvme0n2p3      14682112 18876415  4194304    2G 83 Linux

/dev/nvme0n2p4      18876416 20971519  2095104 1023M 83 Linux

/dev/nvme0n2p5       4198400 14682111 10483712    5G 83 Linux

Partition table entries are not in disk order.

Command (m for help): w                               保存并退出

The partition table has been altered.

Calling ioctl() to re-read partition table.

Syncing disks.

```

查看分区

[root@localhost ~]# fdisk /dev/nvme0n2 -l

Disk /dev/nvme0n2: 10 GiB, 10737418240 bytes, 20971520 sectors

Disk model: VMware Virtual NVMe Disk

Units: sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disklabel type: dos

Disk identifier: 0x3675abb3

Device         Boot    Start      End  Sectors  Size Id Type

/dev/nvme0n2p1          2048  4196351  4194304    2G 83 Linux

/dev/nvme0n2p2       4196352 14682111 10485760    5G  5 Extended

/dev/nvme0n2p3      14682112 18876415  4194304    2G 83 Linux

/dev/nvme0n2p4      18876416 20971519  2095104 1023M 83 Linux

/dev/nvme0n2p5       4198400 14682111 10483712    5G 83 Linux

Partition table entries are not in disk order.

```

分区的原因:不划分分区没有办法直接把数据写入到硬盘的,要存放数据之前必须要指定文件类型,指定文件类型只能对分区进行一个格式要求,对硬盘是没办法的。就跟在Windows下面可以格式化C盘,但是没有办法直接格式化硬盘。

###### 3、格式化

格式化的目的: 是为了形成文件系统,文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。

命令格式: `mkfs|mkfs.xfs|mkfs.ext4  [选项]  分区的设备名`

选项:

> -t 文件系统类型——当命令名为mkfs时,指定要创建的文件系统的类型(如:xfs、ext4、vfat等)。当命令名为mkfs.xfs、mkfs.ext4等时,不需要该选项。

> -c——建立文件系统前先检查坏块。

> -V——输出建立文件系统的详细信息。

注意:如果已有其他文件系统创建在此分区,必须在`mkfs.xfs` 命令中加上选项`-f`强行进行格式化

我们在这里选择mkfs.xfs,因为红帽自7后默认都是xfs.

对p1分区进行格式化

[root@localhost ~]# mkfs.xfs /dev/nvme0n2p1

4、挂载

挂载就是将一个分区或者设备挂载至挂载点目录。

将格式化后的分区(我们接下来称之为源)比作水桶,而挂载操作就相当于给源接了一根水管,之后,我们要往源中写入数据,就是通过这跟水管进行的。如果没有这根水管,数据就存不到源中,也就是数据无法保存到硬盘里面。因此,格式化操作后的硬盘,必须挂载在一个文件目录下,才能对此分区进行数据的书写。

#创建挂载点目录

[root@localhost ~]# mkdir  /p1

#查看格式化后的磁盘分区信息

[root@localhost ~]# blkid

挂载分区

[root@localhost ~]# mount /dev/nvme0n2p1 /p1   将分区挂载到根下的P1的目录中

#查看挂载信息

[root@localhost ~]# mount | grep /p1

/dev/nvme0n2p1 on /p1 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)

```

手动挂载的分区会在系统重启后失效,若用户需要永久挂载分区,则需要通过编辑`/etc/fstab`文件来实现。当系统启动的时候,系统会自动地从这个文件读取信息,并且会自动将此文件中指定的文件系统挂载到指定的目录。

设置系统启动时的自动挂载

​       打开配置文件:[root@localhost ~]# vim /etc/fstab

设备文件                 挂载目录                 格式类型  权限选项    是否备份 是否自检

/dev/mapper/rhel-root   /                       xfs     defaults        0 0

UUID=8504ce6d-661d-4c96-b3ff-452313748cd6 /boot xfs     defaults        0 0

/dev/mapper/rhel-swap   none                    swap    defaults        0 0

```

用于挂载信息的指定填写格式中,各字段所表示的意义

| 字段     | 意义                                                         |

| -------- | ------------------------------------------------------------ |

| 设备文件 | 一般为设备的路径+设备名称,也可以写唯一识别码(UUID,Universally Unique Identifier) |

| 挂载目录 | 指定要挂载到的目录,需在挂载前创建好                         |

| 格式类型 | 指定文件系统的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等 |

| 权限选项 | 若设置为defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async |

| 是否备份 | 若为1则开机后使用dump进行磁盘备份,为0则不备份               |

| 是否自检 | 若为1则开机后自动进行磁盘自检,为0则不自检                   |

```

/dev/nvme0n2p1     /p1           xfs   defaults        0 0             自己在配置文件中写的挂载信息                保存并退出

```

通过mount -a命令去读取配置文件中新添加的信息。

取消挂载:

- 卸载分区,要移除USB磁盘、U盘、光盘和硬盘时,需要先卸载。

命令:`umount  挂载点目录或存储设备名`

[root@localhost ~]# umount /p1

[root@localhost ~]# mount | grep /p1

[root@localhost ~]#

```

注意一点,就是之前有挂载的时候需要先取消挂载,再通过mount -a命令去读取配置文件中新添加的信息。

```

[root@localhost ~]# mount -a

[root@localhost ~]# mount | grep /p1

/dev/nvme0n2p1 on /p1 type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)

[root@localhost ~]#

```

交换分区

在Linux系统中,swap交换分区的作用类似于Windows系统中“虚拟内存”。当有程序被调入内存后,但是该程序又不是常被CPU所取用时,那么这些不常被使用的程序将会被放到硬盘的swap交换分区当中,而将速度较快的内存空间释放给真正需要的程序使用,以避免由于物理内存不足而造成的系统效能低的问题。如果系统没有swap交换分区,或者现有交换分区的容量不够用时,可扩展swap交换分区。

扩展swap交换分区的方式有两种:

| 命令                       | 功能                                           |

| -------------------------- | ---------------------------------------------- |

| mkswap 分区设备名          | 将指定的分区格式化为swap交换文件系统           |

| swapon 交换分区设备名\|-a  | 启用(或激活)指定的交换分区或所有交换分区       |

| swapoff 交换分区设备名\|-a | 禁用指定的交换分区或所有交换分区               |

| swapon -s                  | 查看交换分区的使用情况                         |

| free -m                    | 以兆字节为单位显示物理内存、交换分区的使用情况 |

交换分区和之前分区的区别就是格式化的时候不一样的

格式化:

将P3分区格式化为交换分区

[root@localhost ~]# mkswap /dev/nvme0n2p3   (挂载)

激活swap分区(临时生效),并查看这个分区是否生效

[root@localhost ~]# swapon /dev/nvme0n2p3     激活swap分区

[root@localhost ~]# swapon -s     查看该分区是否生效

Filename               Type      Size   Used   Priority(优先级不看前面的-,数字越小优先级越高)

/dev/dm-1                               partition 2097148 0 -2

/dev/nvme0n2p3                          partition 2097148 0 -3

永久挂载和刚刚方式一样也是需要修改配置文件,并激活。

管理逻辑卷

在对磁盘进行分区大小规划时,有时往往不能确定这个分区要使用的总空间大小。而用fdisk对磁盘进行分区后,每个分区的大小就已经固定了,如果分区设置的过大,会白白浪费磁盘空间;分区设置的过小,就会导致空间不够用的情况。这个时候,就可以用到LVM(Logical Volume Manager,逻辑卷管理)。

LVM是 Logical Volume Manager(逻辑卷管理)的简写,LVM将若干个磁盘或者磁盘分区连接为一个整块的卷组,形成一个存储池。管理员可以在卷组上任意创建逻辑卷,并进一步在逻辑卷上创建文件系统。管理员通过LVM可以方便的调整存储卷组的大小,并且可以对磁盘存储按照组的方式进行命名、管理和分配。(其实就是在标准分区上添加一个逻辑层)

- LVM基本概念

通过LVM技术,屏蔽了磁盘分区的底层差异,在逻辑上给文件系统提供了一个卷的概念,然后在这些卷上建立相应的文件系统。在了解LVM之前,先熟悉LVM中几个常用的术语。

(1)**物理存储设备**(The physical media):指系统的存储设备文件,如:/dev/hda1、/dev/sda等等。硬盘

(2)**物理卷**(physical volume):简称PV,物理卷可以是整个硬盘、硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。

(3)**卷组**(Volume Group)**:**简称VG,可以看成单独的逻辑磁盘,建立在PV之上,一个卷组中至少要包括一个PV,在卷组建立之后可以动态的添加PV到卷组中。卷组的名称可以自定义。

部署逻辑卷

常用的LVM部署命令

| 功能/命令 | 物理卷管理 | 卷组管理  | 逻辑卷管理 |

| --------- | ---------- | --------- | ---------- |

| 扫描      | pvscan     | vgscan    | lvscan     |

| 建立      | pvcreate   | vgcreate  | lvcreate   |

| 显示      | pvdisplay  | vgdisplay | lvdisplay  |

| 删除      | pvremove   | vgremove  | lvremove   |

| 扩展      |            | vgextend  | lvextend   |

| 缩小      |            | vgreduce  | lvreduce   |

1、再添加一块硬盘,将目前添加的两块硬盘整和成一个硬盘

先通过lsblk看是都将硬盘添加成功

[root@localhost ~]# lsblk

将每个硬盘都做成一个分区

查看lvm工具在主机上是否存在

[root@localhost ~]# rpm -qa | grep lvm

llvm-libs-13.0.1-1.el9.x86_64

lvm2-libs-2.03.14-4.el9.x86_64

lvm2-2.03.14-4.el9.x86_64

libblockdev-lvm-2.25-11.el9.x86_64

udisks2-lvm2-2.9.4-3.el9.x86_64

```

创建pv

pv常用工具

[root@localhost ~]# pv

pvchange   pvck       pvcreate   pvdisplay  pvmove     pvremove   pvresize    pvs        pvscan     

更改        检查        创建        显示       移动        移除       重置大小     显示       显示

```

创建物理卷 (创建前需要将该挂载的分区取消挂载)

[root@localhost ~]# pvcreate /dev/nvme0n2p1 /dev/nvme0n3p1

WARNING: xfs signature detected on /dev/nvme0n2p1 at offset 0. Wipe it? [y/n]: y

  Wiping xfs signature on /dev/nvme0n2p1.

  Physical volume "/dev/nvme0n2p1" successfully created.

  Physical volume "/dev/nvme0n3p1" successfully created.

```

检查是否创建成功

[root@localhost ~]# pvs

  PV             VG   Fmt  Attr PSize   PFree  

  /dev/nvme0n1p2 rhel lvm2 a--  <19.00g      0

  /dev/nvme0n2p1      lvm2 ---    2.00g   2.00g

  /dev/nvme0n3p1      lvm2 ---  <10.00g <10.00g

```

创建vg

将两个硬盘整合成一个空间,需要用的是卷组的命令,这边指定卷组名为vg1,并指明要整合的是哪些逻辑卷。

[root@localhost ~]# vgcreate vg1 /dev/nvme0n2p1 /dev/nvme0n3p1

  Volume group "vg1" successfully created

```

查看卷组信息

[root@localhost ~]# vgs

  VG   #PV #LV #SN Attr   VSize   VFree

  rhel   1   2   0 wz--n- <19.00g     0

  vg1    2   0   0 wz--n-  11.99g 11.99g

创建lv

有两种方式,一种是通过-L指定逻辑卷大小,一种是通过-l指定所占卷组的百分比。

在这边我们通过-l来实现。

[root@localhost ~]# lvcreate -n lv1 -l 100%FREE vg1

  Logical volume "lv1" created.

[root@localhost ~]#

```

查看lv

[root@localhost ~]# lvs

  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

  root rhel -wi-ao---- <17.00g                                                    

  swap rhel -wi-ao----   2.00g                                                    

  lv1  vg1  -wi-a-----  11.99g     

```

格式化逻辑卷

[root@localhost ~]# mkfs.xfs /dev/vg1/lv1

meta-data=/dev/vg1/lv1           isize=512    agcount=4, agsize=785920 blks

         =                       sectsz=512   attr=2, projid32bit=1

         =                       crc=1        finobt=1, sparse=1, rmapbt=0

         =                       reflink=1    bigtime=1 inobtcount=1

data     =                       bsize=4096   blocks=3143680, imaxpct=25

         =                       sunit=0      swidth=0 blks

naming   =version 2              bsize=4096   ascii-ci=0, ftype=1

log      =internal log           bsize=4096   blocks=2560, version=2

         =                       sectsz=512   sunit=0 blks, lazy-count=1

realtime =none                   extsz=4096   blocks=0, rtextents=0

[root@localhost ~]#

挂载后就可以使用了。

部署逻辑卷(从小分区扩大成大分区)

提示:在做分区之前都得先取消挂载。

删除逻辑卷

[root@localhost ~]# lvremove /dev/vg1/lv1

Do you really want to remove active logical volume vg1/lv1? [y/n]: y

  Logical volume "lv1" successfully removed.

重新创建逻辑卷

[root@localhost ~]# lvcreate -n lv1 -L 8G vg1

WARNING: xfs signature detected on /dev/vg1/lv1 at offset 0. Wipe it? [y/n]: y

  Wiping xfs signature on /dev/vg1/lv1.

  Logical volume "lv1" created.

[root@localhost ~]# lvs

  LV   VG   Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

  root rhel -wi-ao---- <17.00g                                                    

  swap rhel -wi-ao----   2.00g                                                    

  lv1  vg1  -wi-a-----   8.00g    

格式化

[root@localhost ~]# mkfs.xfs /dev/vg1/lv1

meta-data=/dev/vg1/lv1           isize=512    agcount=4, agsize=524288 blks

         =                       sectsz=512   attr=2, projid32bit=1

         =                       crc=1        finobt=1, sparse=1, rmapbt=0

         =                       reflink=1    bigtime=1 inobtcount=1

data     =                       bsize=4096   blocks=2097152, imaxpct=25

         =                       sunit=0      swidth=0 blks

naming   =version 2              bsize=4096   ascii-ci=0, ftype=1

log      =internal log           bsize=4096   blocks=2560, version=2

         =                       sectsz=512   sunit=0 blks, lazy-count=1

realtime =none                   extsz=4096   blocks=0, rtextents=0

挂载

[root@localhost ~]# mount /dev/vg1/lv1 /mnt

[root@localhost ~]# mount | grep /mnt

/dev/mapper/vg1-lv1 on /mnt type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)

```

扩大

扩大的时候如果卷组空间不够的话,应该先扩大卷组,再扩大逻辑卷(这边因为空间是够的,所以直接去扩大逻辑卷)

扩大的时候是不需要去取消挂载的

[root@localhost ~]# lvextend /dev/vg1/lv1 -L +2g

  Size of logical volume vg1/lv1 changed from 8.00 GiB (2048 extents) to 10.00 GiB (2560 extents).

  Logical volume vg1/lv1 successfully resized.

对新添加的空间格式化

[root@localhost ~]# xfs_growfs /mnt

meta-data=/dev/mapper/vg1-lv1    isize=512    agcount=4, agsize=524288 blks

         =                       sectsz=512   attr=2, projid32bit=1

         =                       crc=1        finobt=1, sparse=1, rmapbt=0

         =                       reflink=1    bigtime=1 inobtcount=1

data     =                       bsize=4096   blocks=2097152, imaxpct=25

         =                       sunit=0      swidth=0 blks

naming   =version 2              bsize=4096   ascii-ci=0, ftype=1

log      =internal log           bsize=4096   blocks=2560, version=2

         =                       sectsz=512   sunit=0 blks, lazy-count=1

realtime =none                   extsz=4096   blocks=0, rtextents=0

data blocks changed from 2097152 to 2621440

```

通过df -h 查看

[root@localhost ~]# df -h

Filesystem             Size  Used Avail Use% Mounted on

devtmpfs               845M     0  845M   0% /dev

tmpfs                  875M     0  875M   0% /dev/shm

tmpfs                  350M  9.7M  341M   3% /run

/dev/mapper/rhel-root   17G  4.8G   13G  28% /

/dev/nvme0n1p1        1014M  261M  754M  26% /boot

tmpfs                  175M   92K  175M   1% /run/user/0

/dev/sr0               8.0G  8.0G     0 100% /run/media/root/RHEL-9-0-0-BaseOS-x86_64

/dev/mapper/vg1-lv1     10G  104M  9.9G   2% /mnt

```

删除逻辑卷

怎么创建,倒着往回一层一层删除。

先取消挂载

[root@localhost ~]# umount /mnt

[root@localhost ~]# mount | grep /mnt

移除逻辑卷

[root@localhost ~]# lvremove /dev/vg1/lv1

Do you really want to remove active logical volume vg1/lv1? [y/n]: y

  Logical volume "lv1" successfully removed.

移除vg

[root@localhost ~]# vgremove /dev/vg1

  Volume group "vg1" successfully removed

移除pv

[root@localhost ~]# pvremove /dev/nvme0n2p1

  Labels on physical volume "/dev/nvme0n2p1" successfully wiped.

[root@localhost ~]# pvremove /dev/nvme0n3p1

  Labels on physical volum

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值