linux的目录划分
bin目录中都为二进制相关的执行文件
/opt、/usr/local 都是安装第三方软件
/media、/mnt 可以用来挂载目录
/tmp 为用户使用的共享文件夹,/var/tmp为系统使用
目录名称 | 应放置文件的内容 |
---|---|
/root | 系统管理员的家目录 |
/bin | 存放单用户模式下还可以操作的命令(开机时不需要) |
/boot | 开机所需文件—内核、开机菜单以及所需配置文件等(开机驱动、引导文件) |
/dev | 以文件形式存放任何设备与接口 |
/etc | 配置文件 |
/home | 用户主目录 |
/lib | 开机时用到的函数库,以及/bin与/sbin下面的命令要调用的函数 |
/sbin | 开机过程中需要的命令 |
/media | 用于挂载设备文件的目录(光盘、硬盘、网络存储) |
/opt | 放置第三方的软件 |
/srv | 一些网络服务的数据文件目录 |
/tmp | 任何人均可使用的“共享”临时目录 |
/proc | 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等(里面的文件不是真实的文件,是设备映射的文件) |
/usr/local | 用户自行安装的软件 |
/usr/sbin | Linux系统开机时不会使用到的软件/命令/脚本 |
/usr/share | 帮助与说明文件,也可放置共享文件 |
/var | 主要存放经常变化的文件,(日志、网络、数据库) |
/lost+found | 当文件系统发生错误时,将一些丢失的文件片段存放在这里(异常断电、宕机的一些文件可能在此找到) |
物理设备的命名规则
硬件设备 | 文件名称 |
---|---|
IDE设备(几乎没有了) | /dev/hd[a-d] |
SCSI/SATA/U盘 | /dev/sd[a-z] |
virtio设备 | /dev/vd[a-z] |
软驱 | /dev/fd[0-1] |
打印机 | /dev/lp[0-15] |
光驱 | /dev/cdrom |
鼠标 | /dev/mouse |
磁带机 | /dev/st0或/dev/ht0 |
硬盘的命名规则
内核识别主板的硬盘插槽时,是从第一个插槽处开始识别的。
# 规则
/dev/sd{系统内核识别到第n个的插槽处的硬盘}{分区的标号}
# 例子
/dev/sda5
硬盘的分区:
硬盘的第一个扇区保存着主引导记录和分区表信息,但分区表信息只能存储4个,因此如果需要分4个以上的分区,需要将第4个作为一个逻辑分区,用来存储其他的分区信息。
文件系统与数据资料
用户在硬件存储中执行的文件建立、写入、读取、修改、转存与控制等操作都是依靠文件系统来完成的,常见的文件系统包括:
- Ext3:日志文件系统,能够在系统异常宕机时,避免文件系统资料的丢失(不能100%保证),会将硬盘的每个写入动作都记录下来,当系统宕机时通过回溯到中断的部分来进行恢复。
- Ext4:改进了Ext3,支持无限的子目录,能够批量分配block块,从而极大的提高了读写效率。
- XFS:高性能日志文件系统,是RHEL78默认的文件管理系统,在宕机后可以快速的恢复。
在linux中存在一个硬盘地图,文件的信息都存储在‘硬盘地图’中,里面记录着文件系统的信息。文件的权限和属性记录在inode中,而文件的实际内容存储在block中。在inode中存在以下信息:
- 该文件的访问权限(read、write、execute);
- 该文件的所有者与所属组(owner、group);
- 该文件的大小(size);
- 该文件的创建或内容修改时间(ctime);
- 该文件的最后一次访问时间(atime);
- 该文件的修改时间(mtime);
- 文件的特殊权限(SUID、SGID、SBIT);
- 该文件的真实数据地址(point)
在我们对不同文件系统 的文件进行操作时,不需要关心底层,是因为linux中为用户提供了一个VFS,让用户对底层没有感觉。
硬件设备的挂载
挂载时,可以使用mount命令或者编辑/etc/fstab文件,使用mout命令只能临时挂载。挂载前需要进行格式化(下边讲解)
# 临时挂载硬盘到目录
mount {硬盘} {挂载到的目录}
# 卸载
umount {硬盘|目录}
# 例:
mount /dev/sdb2 /backup
umount /dev/sdb2
参数 | 作用 |
---|---|
-a | 挂载所有在/etc/fstab中定义的文件系统,编辑fatab文件后,可以使用此命令挂载,或者开机时自动挂载,如果开机后,未修改文件的内容,则该命令不会生效。 |
-t | 指定文件系统的类型(不需要加,系统会自动判断) |
# /etc/fstab文件的格式
{设备文件} {挂载的目录} {格式类型} {权限} {是否备份} {是否自检}
字段 | 意义 |
---|---|
设备文件 | 一般为设备的路径+设备名称,也可以写唯一识别码(UUID,Universally Unique Identifier) |
挂载目录 | 指定要挂载到的目录,需在挂载前创建好 |
格式类型 | 指定文件系统的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此为光盘设备)等 |
权限选项 | 若设置为defaults,则默认权限为:rw, suid, dev, exec, auto, nouser, async |
是否备份 | 若为1则开机后使用dump进行磁盘备份,为0则不备份 |
是否自检 | 若为1则开机后自动进行磁盘自检,为0则不自检 |
在rhel7开始,任何一个硬盘有错误都没法启动
如果允许自检,自检没通过时,会不能开机,一般用于网络设备
安装硬盘后,可以使用lsblk看硬盘编号
mkfs. 加两个table可以看到能被格式化的格式,
添加硬盘设备
添加硬盘设备并挂载的两种方法:
- 分区->格式化->挂载
- 格式化->挂载
fdisk分区
当新添加一块硬盘设备时,我们可以进行协助分区。
# 分区
fdisk
# 格式化分区
mkfs.{格式} 设备
# 查看设备信息
lsblk
# 查看硬盘占用
df -h
>>>
# 因为创建虚拟机的时候第一块硬盘使用的是时nvme,此处添加的硬盘为scic所有新添加的硬盘为sda
[root@linuxprobe /]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
sr0 11:0 1 1024M 0 rom
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@linuxprobe /]# fdisk /dev/sda
Welcome to fdisk (util-linux 2.32.1).
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 0xe27b2145.
# 使用n命令,来新建分区
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
# 使用p命令来创建主分区
Select (default p): p
# 指定分区的编号
Partition number (1-4, default 1): 1
# 硬盘从2048开始
First sector (2048-41943039, default 2048):
# 指定2G的大小
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): +2G
Created a new partition 1 of type 'Linux' and of size 2 GiB.
# 保存分区
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
[root@linuxprobe /]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
└─sda1 8:1 0 2G 0 part
sr0 11:0 1 1024M 0 rom
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]
# 按两次tab可以查看,可选的格式
[root@linuxprobe /]# mkfs
mkfs mkfs.ext2 mkfs.ext4 mkfs.minix mkfs.vfat
mkfs.cramfs mkfs.ext3 mkfs.fat mkfs.msdos mkfs.xfs
[root@linuxprobe /]# mkfs.xfs /dev/sda1
meta-data=/dev/sda1 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
[root@linuxprobe /]# mkdir /mysda1
[root@linuxprobe /]# mount /dev/sda1 /mysda1
[root@linuxprobe /]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 969M 0 969M 0% /dev
tmpfs 984M 0 984M 0% /dev/shm
tmpfs 984M 9.6M 974M 1% /run
tmpfs 984M 0 984M 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 3.9G 14G 23% /
/dev/nvme0n1p1 1014M 152M 863M 15% /boot
tmpfs 197M 16K 197M 1% /run/user/42
tmpfs 197M 3.5M 194M 2% /run/user/0
/dev/sda1 2.0G 47M 2.0G 3% /mysda1
[root@linuxprobe /]# vim /etc/fstab
# 文件末尾写入以下内容
/dev/sda1 /mysda1 xfs defaults 0 0
# 检查文件格式是否正确
[root@linuxprobe /]# mount -a
常用的一些参数:
参数 | 作用 |
---|---|
m | 查看全部可用的参数 |
n | 添加新的分区 |
d | 删除某个分区信息 |
l | 列出所有可用的分区类型 |
t | 改变某个分区的类型 |
p | 查看分区表信息 |
w | 保存并退出 |
q | 不保存直接退出 |
du
查看目录中文件占用空间的大小。
[root@linuxprobe /]# du -sh /root
8.5M /root
添加交换分区
交换分区的大小一般建议为物理内存的1.5-2倍。需要先分区,让后使用格式化交换分区命令,并写入/etc/fstab文件
# 将磁盘格式化为
mkswap {磁盘分区}
# 文件格式
/dev/sda2 swap swap defaults 0 0
# 删除分区
# 查看内存占用
free -m
# 同步分区信息
partprobe
>>>
# 分区
[root@linuxprobe /]# fdisk /dev/sda
Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (4196352-41943039, default 4196352):
Last sector, +sectors or +size{K,M,G,T,P} (4196352-41943039, default 41943039): +3G
Created a new partition 2 of type 'Linux' and of size 3 GiB.
Command (m for help): p
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
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: 0xe27b2145
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 4196351 4194304 2G 83 Linux
/dev/sda2 4196352 10487807 6291456 3G 83 Linux
Command (m for help): m
Help:
DOS (MBR)
a toggle a bootable flag
b edit nested BSD disklabel
c toggle the dos compatibility flag
Generic
d delete a partition
F list free unpartitioned space
l list known partition types
n add a new partition
p print the partition table
t change a partition type
v verify the partition table
i print information about a partition
Misc
m print this menu
u change display/entry units
x extra functionality (experts only)
Script
I load disk layout from sfdisk script file
O dump disk layout to sfdisk script file
Save & Exit
w write table to disk and exit
q quit without saving changes
Create a new label
g create a new empty GPT partition table
G create a new empty SGI (IRIX) partition table
o create a new empty DOS partition table
s create a new empty Sun partition table
Command (m for help): w
The partition table has been altered.
Syncing disks.
# 格式化
[root@linuxprobe /]# mkswap /dev/sda2
Setting up swapspace version 1, size = 3 GiB (3221221376 bytes)
no label, UUID=fffdecbf-5cee-4f19-a2d1-5ed5118d71f3
# 写入文件
[root@linuxprobe /]# vim /etc/fstab
# 写入以下内容
/dev/sda2 swap swap defaults 0 0
[root@linuxprobe /]# mount -a
磁盘容量配额
可以用来限制用户占用的文件夹最大的容量或者文件数量。限制包括两种:
- 软限制:当达到软限制时,会提示用户,但仍然允许用户使用
- 硬限制:当达到硬限制时,会提示用户,强行终止用户的操作
流程:为磁盘增加容量配额的支持 -> 配置用户容量
参数 | 意义 |
---|---|
bsoft | 硬盘软限制 |
bhard | 硬盘硬限制 |
isoft | 文件数量软限制 |
ihard | 文件数量硬限制 |
# 设置硬盘支持容量配额
/dev/sda1 /mysda1 xfs defaults,uquota 0 0
# 使用xfs_quota命令设置限制,-x 代表专家模式,-c 代表使用参数的形式设置限制
xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 tom' {目录}
# 查看限制
xfs_quota -x -c report {目录}
# 修改或者查看配额
edquota -u {用户名}
>>>
[root@linuxprobe /]# mount | grep sda1
/dev/sda1 on /mysda1 type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
[root@linuxprobe /]# vim /etc/fstab
# 加uquota
/dev/sda1 /mysda1 xfs defaults,uquota 0 0
[root@linuxprobe /]# reboot
[root@linuxprobe ~]# mount | grep sda1
/dev/sda1 on /mysda1 type xfs (rw,relatime,seclabel,attr2,inode64,usrquota)
[root@linuxprobe ~]# useradd tom
[root@linuxprobe ~]# xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 tom' /mysda1
[root@linuxprobe ~]# xfs_quota -x -c report /mysda1
User quota on /mysda1 (/dev/sda1)
Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 0 0 0 00 [--------]
tom 0 3072 6144 00 [--------]
[root@linuxprobe ~]# chmod -Rf 777 /mysda1
[root@linuxprobe ~]# su - tom
[tom@linuxprobe ~]$ dd if=/dev/zero of=/mysda1/tom bs=5M count=1
1+0 records in
1+0 records out
5242880 bytes (5.2 MB, 5.0 MiB) copied, 0.00694646 s, 755 MB/s
[tom@linuxprobe ~]$ dd if=/dev/zero of=/mysda1/tom bs=10M count=1
# 此处会报错
dd: error writing '/mysda1/tom': Disk quota exceeded
1+0 records in
0+0 records out
4194304 bytes (4.2 MB, 4.0 MiB) copied, 0.00848284 s, 494 MB/s
# 编辑配额
[root@linuxprobe ~]# edquota -u tom
# 会显示以下内容,可以进行编辑
Disk quotas for user tom (uid 1002):
Filesystem blocks soft hard inodes soft hard
/dev/sda1 5120 3072 6144 1 3 6
tip:ext4不能进行容量的配额
软硬链接
可以使用ln命令来创建文件的链接,包括两种:
- 硬链接:每创建一个链接会对原文件增加一个引用计数inode,只有inode为0的时候,文件才会被删除。
- 软链接:创建一个指向原文件的链接,如果原文件被删除,则软链接不能正常使用
# 创建硬链接
ln {原文件} {链接名}
# 创建软链接
ln -s {原文件} {链接名}
>>>
[root@linuxprobe ~]# echo 'nihao!' > readme.txt
[root@linuxprobe ~]# ll readme.txt
-rw-r--r--. 1 root root 7 Feb 10 07:50 readme.txt
[root@linuxprobe ~]# ln readme.txt readme.hard
[root@linuxprobe ~]# ll readme.txt
-rw-r--r--. 2 root root 7 Feb 10 07:50 readme.txt
[root@linuxprobe ~]# ln -s readme.txt readme.soft
[root@linuxprobe ~]# ln -s readme.txt readme.soft
ln: failed to create symbolic link 'readme.soft': File exists
[root@linuxprobe ~]# ln -si readme.txt readme.soft
ln: replace 'readme.soft'? y
[root@linuxprobe ~]# cat readme.soft
nihao!
[root@linuxprobe ~]# cat readme.hard
nihao!
参数 | 作用 |
---|---|
-s | 创建“符号链接”(如果不带-s参数,则默认创建硬链接) |
-f | 强制创建文件或目录的链接 |
-i | 覆盖前先询问 |
-v | 显示创建链接的过程 |