软件管理,磁盘存储,文件系统以及网络协议
目录[*]硬盘存储术语CHS
[*]磁盘存储管理
[*]LVM
[*]RAID硬盘阵列
[*]软件包管理
[*]搭建私有yum仓库
[*]系统安装之后的常用初始化步骤
[*]OSI七层模型
[*]linux端口的简单介绍
[*]TCP简单介绍
[*]ip地址分类
硬盘存储术语CHS
[*]head:磁头 磁头数=盘面数
[*]track:磁道 磁道=柱面数
[*]sector:扇区,512bytes
[*]cylinder:柱面 1柱面=512 * sector数/trackhead数=51263*255=7.84M
#查看CHS
# fdisk -l /dev/sda
Disk /dev/sda:30 GiB,32212254720 字节,62914560 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x69b7b195
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sda1* 204820991992097152 1G 83 Linux
/dev/sda2 2099200 62914559 6081536029G 8e Linux LVM
#0代表SSD,1代表机械
# lsblk -d -o name,rota
NAME ROTA
sda 1
sr0 1磁盘存储管理
磁盘分区的优点:
[*]优化I/O性能
[*]实现磁盘空间配额限制
[*]提高修复速度
[*]隔离系统和程序
[*]采用不同文件系统
分区方式:
两种分区方式:MBR,GPT
MBR结构Boot Sector(引导扇区):
位置:硬盘的第一个扇区(LBA 0)。
大小:512 字节。
内容:
Bootstrap Code(引导代码):占用前 446 字节,用于启动操作系统的代码。
Partition Table(分区表):占用接下来的 64 字节,包含最多 4 个主分区的描述信息。
Signature(签名):最后 2 字节,固定为 0xAA55,用于标识这是一个有效的 MBR 扇区。
Partition Table(分区表):
每个分区条目:16 字节。
条目数量:最多 4 个条目。
内容:
Status(活动标志):1 字节,表示该分区是否为活动分区。
CHS Address(柱面-磁头-扇区地址):6 字节,表示分区的起始和结束位置。
Partition Type(分区类型):1 字节,表示分区的类型(如 NTFS、FAT32 等)。
LBA Address(逻辑块地址):8 字节,表示分区的起始 LBA 地址和分区的大小。
Extended Partitions(扩展分区):
逻辑分区:扩展分区可以包含多个逻辑分区,每个逻辑分区有自己的分区表。
链式结构:逻辑分区的分区表位于扩展分区的第一个扇区,每个逻辑分区指向下一个逻辑分区的分区表。
优点
兼容性:广泛支持旧操作系统和 BIOS。
简单:结构简单,容易理解和实现。
缺点
分区限制:最多只能有 4 个主分区(或 3 个主分区加 1 个扩展分区)。
最大容量:支持的最大分区大小为 2 TB(使用 512 字节扇区)GPT结构Protective MBR(保护性 MBR):
位置:硬盘的第一个扇区(LBA 0)。
内容:类似于传统的 MBR,但只有一个占位的分区,用于防止旧的操作系统误认为硬盘是未分区的。
Primary GPT Header(主 GPT 头):
位置:硬盘的第二个扇区(LBA 1)。
大小:通常为 512 字节。
内容:
Signature(签名):固定为 EFI PART。
Version(版本号):GPT 规范的版本。
Size(大小):GPT 头的大小。
CRC32 Checksum(校验和):用于验证 GPT 数据的完整性。
Current LBA(当前 LBA 地址):GPT 头所在的位置。
Backup LBA(备份 LBA 地址):备份 GPT 头所在的位置。
Partition Entries LBA(分区条目 LBA 地址):分区条目表的起始位置。
Number of Partition Entries(分区条目数量):分区条目的总数。
Size of Partition Entry(分区条目大小):每个分区条目的大小。
Partition Entries(分区条目表):
位置:从 Partition Entries LBA 开始。
内容:
Partition Type GUID(分区类型 GUID):表示分区的类型。
Unique Partition GUID(唯一分区 GUID):表示分区的唯一标识。
Starting LBA(起始 LBA 地址):分区的起始位置。
Ending LBA(结束 LBA 地址):分区的结束位置。
Attributes(属性):分区的属性。
Name(名称):分区的名称。
Backup GPT Header(备份 GPT 头):
位置:硬盘的最后一个扇区(LBA -1)。
内容:与主 GPT 头相同,用于冗余和恢复。
优点
分区数量:支持最多 128 个分区。
最大容量:支持超过 2 TB 的分区大小,理论上支持到 EB(Exabyte)级别的分区。
冗余:主 GPT 头和备份 GPT 头提供冗余,增强了数据的可靠性。
唯一标识:每个分区都有唯一的 GUID,便于管理和识别。
缺点
兼容性:不被所有旧操作系统和 BIOS 支持,需要 UEFI 引导。
复杂性:结构相对复杂,实现和管理较为复杂总结
[*]MBR:适用于小容量硬盘( 2 TB),支持更多分区(最多 128 个),提供冗余和唯一标识,需要 UEFI 引导。
分区管理
#列出块设备
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 030G0 disk
├─sda1 8:1 0 1G0 part /boot
└─sda2 8:2 029G0 part
├─rl-root 253:0 026G0 lvm/
└─rl-swap 253:1 0 3G0 lvm
sr0 11:0 1 2G0 rom
#查看分区情况
# blkid
/dev/sdb1: UUID="b47109a2-041c-4c77-97c3-bf37caf8b307" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="058053f9-01"
/dev/sdb5: UUID="1687a324-305d-4821-aa09-c6ce363ff5be" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="058053f9-05"
/dev/sda1: UUID="982d5922-9968-45a9-9859-6ef07c69a7ec" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="69b7b195-01"
/dev/sda2: UUID="98V7kE-7aau-G2sA-extU-3uaQ-Oq56-5AfVXZ" TYPE="LVM2_member" PARTUUID="69b7b195-02"
/dev/sr0: BLOCK_SIZE="2048" UUID="2021-11-14-09-30-59-00" LABEL="Rocky-8-5-x86_64-dvd" TYPE="iso9660" PTUUID="6b8b4567" PTTYPE="dos"
/dev/mapper/rl-root: UUID="30bcee18-3966-47e9-8b91-cd0e8ae0312a" BLOCK_SIZE="512" TYPE="xfs"
/dev/mapper/rl-swap: UUID="eda505fd-1f26-4fd4-89fd-980c9789c618" TYPE="swap"
创建分区命令
fdisk 管理MBR分区
gdisk 管理GPT分区(和fdisk用法类似)
parted 高级分区操作,可以是交互或非交互方式分区类型
主分区
标识:主分区的编号通常是从 1 开始的连续数字,例如 /dev/sda1、/dev/sda2。
限制:最多 4 个主分区。
扩展分区
标识:扩展分区通常编号为 /dev/sda4(如果前三个是主分区)。
限制:一个磁盘上只能有一个扩展分区。
逻辑分区
标识:逻辑分区的编号从 5 开始,例如 /dev/sda5、/dev/sda6。
限制:逻辑分区只能从扩展分区里分,例如:扩展分区有10G,那么创建逻辑分区时最大只有10G,且创建个数没有限制。fdisk命令
fdisk [设备名]
常用选项:
p:打印当前磁盘的分区表
n:创建新分区
d:删除分区
t:更改分区类型
w:保存更改并退出 fdisk
q:不保存更改并退出 fdisk
l:列出所有已知的分区类型
m:显示所有可用的命令
范例:
#创建主分区
# lsblk -l
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 030G0 disk
sda1 8:1 0 1G0 part /boot
sda2 8:2 029G0 part
sdb 8:16 020G0 disk
sr0 11:0 1 2G0 rom
rl-root 253:0 026G0 lvm/
rl-swap 253:1 0 3G0 lvm
# lsblk /dev/sdb -l
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 020G0 disk
# fdisk /dev/sdb
设备不包含可识别的分区表。
创建了一个磁盘标识符为 0x058053f9 的新 DOS 磁盘标签。
命令(输入 m 获取帮助):n #创建新分区
分区类型
p 主分区 (0个主分区,0个扩展分区,4空闲)
e 扩展分区 (逻辑分区容器)
选择 (默认 p):p #创建主分区
分区号 (1-4, 默认1): #选择分区号
第一个扇区 (2048-41943039, 默认 2048): #从2048往后开始
上个扇区,+sectors 或 +size{K,M,G,T,P} (2048-41943039, 默认 41943039): +5G
创建了一个新分区 1,类型为“Linux”,大小为 5 GiB。
命令(输入 m 获取帮助):p #查看分区表
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x058053f9
设备 启动起点 末尾 扇区 大小 Id 类型
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
命令(输入 m 获取帮助):w #保存退出
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。
# lsblk /dev/sdb
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 020G0 disk
└─sdb1 8:17 0 5G0 part
#创建扩展分区和逻辑分区
# fdisk /dev/sdb
命令(输入 m 获取帮助):n
分区类型
p 主分区 (1个主分区,0个扩展分区,3空闲)
e 扩展分区 (逻辑分区容器)
选择 (默认 p):e
分区号 (2-4, 默认2):
第一个扇区 (10487808-41943039, 默认 10487808):
上个扇区,+sectors 或 +size{K,M,G,T,P} (10487808-41943039, 默认 41943039): +5G
创建了一个新分区 2,类型为“Extended”,大小为 5 GiB。
命令(输入 m 获取帮助):p
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x058053f9
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
/dev/sdb2 10487808 20973567 10485760 5G5 扩展
命令(输入 m 获取帮助):n
分区类型
p 主分区 (1个主分区,1个扩展分区,2空闲)
l 逻辑分区 (从 5 开始编号)
选择 (默认 p):l
添加逻辑分区 5
第一个扇区 (10489856-20973567, 默认 10489856):
上个扇区,+sectors 或 +size{K,M,G,T,P} (10489856-20973567, 默认 20973567): +2G
创建了一个新分区 5,类型为“Linux”,大小为 2 GiB。
命令(输入 m 获取帮助):p
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x058053f9
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
/dev/sdb2 10487808 20973567 10485760 5G5 扩展
/dev/sdb5 10489856 146841594194304 2G 83 Linux
命令(输入 m 获取帮助):w
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。
# lsblk /dev/sdb -l
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 020G0 disk
sdb1 8:17 0 5G0 part
sdb2 8:18 0 1K0 part
sdb5 8:21 0 2G0 part
扩展分区:显示为 1K 是正常的,因为它是一个容器分区,不直接存储数据。
验证方法:使用 fdisk -l 或 parted print 命令可以查看扩展分区和逻辑分区的详细信息文件系统
[*]创建好分区后,只是相当于创建了一个容量空间,需要创建一个文件系统来负责管理和存储文件信息。
[*]从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。
[*]创建文件系统可以理解为windows的磁盘格式化,一个新加盘,如果没有进行格式化处理是没有办法使用的。
[*]在创建文件系统时可以指定块大小,块即存放文件的最小单位,例如:指点块大小为4k,无论存放的文件有多小,它都要占据4k的存储空间。
linux中常用的文件系统
Ext4 (Fourth Extended File System)
特点:
* EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本
* Ext4的文件系统容量达到1EB,而支持单个文件则达到16TB
* 理论上支持无限数量的子目录
* Ext4文件系统使用64位空间记录块数量和 inode数量
* Ext4的多块分配器支持一次调用分配多个数据块
* 修复速度更快
应用场景:目前最常用的 Linux 文件系统之一,广泛应用于各种 Linux 发行版。
XFS (Extended File System)
特点:
* 根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
* 用优化算法,日志记录对整体文件操作影响非常小
* 是一个全64-bit的文件系统,最大可以支持8EB的文件系统,而支持单个文件则达到8EB
* 能以接近裸设备I/O的性能存储数据
应用场景:适用于需要高性能存储的场景,如数据库服务器和文件服务器。挂载
[*]挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为。
[*]卸载:为解除此关联关系的过程。
[*]挂载点下原有文件在挂载完成后会被临时隐藏,因此,挂载点目录一般为空。
[*]进程正在使用中的设备无法被卸载。
创建文件系统
#sda的文件系统是xfs,挂载到了/root下,sdb什么都没有
# lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 982d5922-9968-45a9-9859-6ef07c69a7ec /boot
└─sda2 LVM2_membe 98V7kE-7aau-G2sA-extU-3uaQ-Oq56-5AfVXZ
├─rl-root xfs 30bcee18-3966-47e9-8b91-cd0e8ae0312a /
└─rl-swap swap eda505fd-1f26-4fd4-89fd-980c9789c618
sdb
├─sdb1
├─sdb2
└─sdb5
sr0 iso9660 Rocky-8-5-x86_64-dvd 2021-11-14-09-30-59-00
#给sdb1创建了ext4
# mkfs.ext4 /dev/sdb1
mke2fs 1.45.6 (20-Mar-2020)
创建含有 1310720 个块(每块 4k)和 327680 个inode的文件系统
文件系统UUID:b47109a2-041c-4c77-97c3-bf37caf8b307
超级块的备份存储于下列块:
32768, 98304, 163840, 229376, 294912, 819200, 884736
正在分配组表: 完成
正在写入inode表: 完成
创建日志(16384 个块)完成
写入超级块和文件系统账户统计信息: 已完成
#给sdb5创建xfs
# mkfs.xfs /dev/sdb5
meta-data=/dev/sdb5 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=524288, 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
#检查和修复文件系统错误
# fsck.ext4 /dev/sdb1
e2fsck 1.45.6 (20-Mar-2020)
/dev/sdb1 已挂载。
e2fsck: 无法继续,已中止。
# xfs_repair /dev/sdb5
xfs_repair: /dev/sdb5 contains a mounted filesystem
Unmount or use the dangerous (-d) option to repair a read-only mounted filesystem
fatal error -- couldn't initialize XFS library
#显示 XFS 文件系统的详细信息
# xfs_info /dev/sdb5
meta-data=/dev/sdb5 isize=512 agcount=4, agsize=131072 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=524288, 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挂载命令
mount file
常见选项:
-t fstype 指定要挂载的设备上的文件系统类型,如:ext4,xfs
-o ro只读挂载
-o rw只写挂载
-o remount重新挂载
-w read and write, 读写挂载,此为默认设置,可省略
-n 不更新/etc/mtab,mount不可见
-a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有
auto功能)
-L 'LABEL' 以卷标指定挂载设备
-U 'UUID' 以UUID指定要挂载的设备
-B, --bind 绑定目录到另一个目录上
#查看挂载情况
# mount
#临时挂载
# mount /dev/sdb1 /logs
#只读挂载,只能在/mysql目录里读文件
# mount -o ro /dev/sdb5 /mysql
#取消挂载
# umount /dev/sdb1 /logs
#永久挂载(defaults代表默认规则即rw,也可以直接修改为ro)
# blkid/dev/sdb1
/dev/sdb1: UUID="b47109a2-041c-4c77-97c3-bf37caf8b307" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="058053f9-01"
#复制sdb1的UUID,按照格式写入
# vim /etc/fstab
/dev/mapper/rl-root / xfs defaults 0 0
UUID=982d5922-9968-45a9-9859-6ef07c69a7ec /boot xfs defaults 0 0
/dev/mapper/rl-swap none swap defaults 0 0
UUID=b47109a2-041c-4c77-97c3-bf37caf8b307 /logs ext4 defaults 0 0
#配置文件生效 (-a代表新增加的行会生效,如果是在原基础上进行修改则不会生效)
# mount -a
#重新挂载(只修改了fstab的内容,没有新加行)
# mount -o remount /logsswap虚拟内存
查看swap大小
# free -h
total used free sharedbuff/cache available
Mem: 3.6Gi 205Mi 3.0Gi 8.0Mi 440Mi 3.2Gi
Swap: 3.0Gi 0B 3.0Gi禁用swap
# swapoff -a
#用#注释掉swap那行
# vim /etc/fstab启用swap
# swapon -a
#删除swap那行的#
# vim /etc/fstab添加swap分区
#使用 l 查看id编号 , 使用 t 修改id为82,即swap
# fdisk /dev/sdb
命令(输入 m 获取帮助):n
分区类型
p 主分区 (1个主分区,1个扩展分区,2空闲)
l 逻辑分区 (从 5 开始编号)
选择 (默认 p):l
添加逻辑分区 6
第一个扇区 (14686208-20973567, 默认 14686208):
上个扇区,+sectors 或 +size{K,M,G,T,P} (14686208-20973567, 默认 20973567): +1G
创建了一个新分区 6,类型为“Linux”,大小为 1 GiB。
命令(输入 m 获取帮助):l
0空 24NEC DOS 81Minix / 旧 Linu bfSolaris
1FAT12 27隐藏的 NTFS Win 82Linux swap / So c1DRDOS/sec (FAT-
2XENIX root 39Plan 9 83Linux c4DRDOS/sec (FAT-
3XENIX usr 3cPartitionMagic84OS/2 隐藏 或 In c6DRDOS/sec (FAT-
4FAT16 <32M 40Venix 80286 85Linux 扩展 c7Syrinx
5扩展 41PPC PReP Boot 86NTFS 卷集 da非文件系统数据
6FAT16 42SFS 87NTFS 卷集 dbCP/M / CTOS / .
7HPFS/NTFS/exFAT 4dQNX4.x 88Linux 纯文本 deDell 工具
8AIX 4eQNX4.x 第2部分8eLinux LVM dfBootIt
9AIX 可启动 4fQNX4.x 第3部分93Amoeba e1DOS 访问
aOS/2 启动管理器 50OnTrack DM 94Amoeba BBT e3DOS R/O
bW95 FAT32 51OnTrack DM6 Aux 9fBSD/OS e4SpeedStor
cW95 FAT32 (LBA) 52CP/M a0IBM Thinkpad 休 eaRufus 对齐
eW95 FAT16 (LBA) 53OnTrack DM6 Aux a5FreeBSD ebBeOS fs
fW95 扩展 (LBA)54OnTrackDM6 a6OpenBSD eeGPT
10OPUS 55EZ-Drive a7NeXTSTEP efEFI (FAT-12/16/
11隐藏的 FAT12 56Golden Bow a8Darwin UFS f0Linux/PA-RISC
12Compaq 诊断 5cPriam Edisk a9NetBSD f1SpeedStor
14隐藏的 FAT16 <3 61SpeedStor abDarwin 启动 f4SpeedStor
16隐藏的 FAT16 63GNU HURD 或 Sys afHFS / HFS+ f2DOS 次要
17隐藏的 HPFS/NTF 64Novell Netwareb7BSDI fs fbVMware VMFS
18AST 智能睡眠 65Novell Netwareb8BSDI swap fcVMware VMKCORE
1b隐藏的 W95 FAT3 70DiskSecure 多启 bbBoot Wizard 隐fdLinux raid 自动
1c隐藏的 W95 FAT3 75PC/IX bcAcronis FAT32 L feLANstep
1e隐藏的 W95 FAT1 80旧 Minix beSolaris 启动 ffBBT
命令(输入 m 获取帮助):t
分区号 (1,2,5,6, 默认6): 6
Hex 代码(输入 L 列出所有代码):82
命令(输入 m 获取帮助):p
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x058053f9
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
/dev/sdb2 10487808 20973567 10485760 5G5 扩展
/dev/sdb5 10489856 146841594194304 2G 83 Linux
/dev/sdb6 14686208 167833592097152 1G 82 Linux swap / Solaris
已将分区“Linux”的类型更改为“Linux swap / Solaris”。
命令(输入 m 获取帮助):p
Disk /dev/sdb:20 GiB,21474836480 字节,41943040 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x058053f9
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdb1 2048 10487807 10485760 5G 83 Linux
/dev/sdb2 10487808 20973567 10485760 5G5 扩展
/dev/sdb5 10489856 146841594194304 2G 83 Linux
/dev/sdb6 14686208 167833592097152 1G 82 Linux swap / Solaris
来源:https://www.cnblogs.com/mqhLearn/p/18539316
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页:
[1]