用户和组管理
在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 | 以兆字节为单位显示物理内存、交换分区的使用情况 |
交换分区和之前分区的区别就是格式化的时候不一样的