Linux内存与磁盘管理

目录

内存和磁盘使用率查看

内存使用率查看

磁盘使用率查看

ext4文件系统

ext4文件系统结构

磁盘的分区和挂载

磁盘配额的使用

交换分区(虚拟内存)的创建和查看


内存和磁盘使用率查看

内存使用率查看

free:显示系统内存使用情况,包括物理内存,交换分区。

参数-h:以人类可读的单位显示数字,而不是字节。

参数-m:将单位显示为MB.

输出字段含义

total显示物理安装的内存总量

used

已经使用的
free未被使用的
shared多个进程可以共享的内存
buff/cache内核缓冲区使用的内存和界面缓存使用的内存
availale剩余内存。剩余内存=free+buff/cache

top

top命令之前在进程管理讲述过,这里不过多赘述

Linux进程管理-CSDN博客

磁盘使用率查看

df:用于显示文件系统(=磁盘分区或挂载点)上的磁盘使用情况

du:估算文件和目录所占用的磁盘空间。

常用参数

选项全称作用示例与场景
-h--human-readable最常用。以易读的单位(K, M, G)显示大小。du -h ~/Downloads
-s--summarize汇总。只显示指定目录的总大小,不显示其内部子目录的详情。du -sh /var/log
-c--total总计。在最后显示所有参数的总大小。常与 -s 连用。du -sch /home/*
-a--all显示所有文件。默认 du 只显示目录的大小,此选项会同时显示每个文件的大小。du -ah /tmp
--max-depth=N控制遍历深度。只深入到第 N 层目录。-s 等同于 --max-depth=0du -h --max-depth=1 /usr
-x--one-file-system不跨越文件系统。忽略其他挂载点(如 /mnt/boot),只统计当前文件系统。du -shx /
--exclude=PATTERN排除符合模式的文件或目录。du -sh --exclude='*.log' /var
-t SIZE--threshold=SIZE阈值。只显示大于指定大小的条目。du -ah -t 100M / (找大于100M的文件)
-d N同 --max-depth=Ndu -d 1 -h /opt
--time显示文件或目录的最后修改时间。du -ha --time /tmp

du与ls区别

特性ls 命令du 命令
测量对象文件内容本身的逻辑大小(“文件有多长”)文件内容在磁盘上占用的物理块空间(“在硬盘上占了多大地方”)
默认行为列出目录下的文件和子目录名称计算目录及其所有子目录的磁盘使用总和
显示单位字节(Byte)磁盘块(Block,通常为 4KB)
关键选项-l(显示详情),-h(易读格式)-s(汇总),-h(易读格式),--apparent-size
主要用途浏览文件系统,查看文件列表、属性和大小分析磁盘空间占用情况,找出大文件

ext4文件系统

ext4文件系统结构

超级块:是这个文件系统的总配置与信息中心。存储着整个文件系统的元数据。如果超级块损坏,整个文件系统将无法挂载,因此ext4有多个备份。

超级块副本:分布于不同磁盘位置的超级块冗余备份。

i节点(inode);记录着文件的元数据(文件权限,所有者,文件大小,时间戳,指向文件数据块的指针)。incode不存储文件名,文件名存储在目录文件中。

数据块(datablock):实际存储文件内容和目录条目的磁盘空间。块(Block):ext4 分配磁盘空间的基本单位(通常为 4KB)。即使文件只有 1 字节,也会占用一个完整的块。

目录:在 ext4 中,目录本身也是一种特殊的文件。它的数据块里不存储文件内容,而是存储一个列表,列表中的每一项都包含一个文件名和其对应的 inode 号码

硬链接:多个不同的文件名指向同一个节点。删除任何一个链接都不会影响其他链接的存在,只有当最后一个指向该incode的链接被删除后,系统才会释放incode和磁盘数据块。

创建硬链接命令:

ln <源文件> <链接名称>
# 1. 创建源文件
echo "Hello, World!" > myfile.txt

# 2. 创建硬链接
ln myfile.txt my_hard_link.txt

# 3. 检查 inode (确认它们相同)
ls -i myfile.txt my_hard_link.txt

# 4. 检查链接计数 (确认是2)
ls -l myfile.txt my_hard_link.txt

# 5. 通过链接修改内容
echo "New content" >> my_hard_link.txt
cat myfile.txt # 会显示 "Hello, World!" 和 "New content"

# 6. 删除源文件,验证链接是否有效
rm myfile.txt
cat my_hard_link.txt # 内容依然可读

符号链接:是一个特殊的文件,包含的是另一个文件或目录的路径引用。有独立的incode,存储的是路径,可以跨文件系统

创建符号链接命令:

ln -s <目标文件或目录> <链接名称>
# 1. 创建绝对路径的符号链接
ln -s /absolute/path/to/target link_name

# 2. 创建相对路径的符号链接
# (相对路径是相对于链接文件所在目录的位置,而不是你当前所在的目录)
ln -s ../relative/path/to/target link_name

# 3. 强制覆盖已存在的链接文件
ln -sf /new/target existing_link_name

# 4. 查看符号链接指向的真实命令(常用于查看软件版本的链接)
readlink -f /usr/bin/python3

# 5. 查找当前目录下的所有符号链接
find . -type l

# 6. 查找所有损坏的(悬空的)符号链接
find . -type l ! -exec test -e {} \; -print

磁盘的分区和挂载

常用命令

1.创建磁盘分区fdsik:适用于MBR分区表,支持的分区大小最大为2TB.

# 1. 查看所有磁盘及分区信息
sudo fdisk -l

# 2. 对特定磁盘(如 /dev/sdb)进行操作
sudo fdisk /dev/sdb

# 进入交互模式后的常用指令:
#   n - 新建一个新分区
#   d - 删除一个分区
#   p - 打印当前分区表
#   w - 将变更写入分区表并退出
#   q - 放弃变更并退出
#   t - 更改分区的类型(例如,将分区类型改为 Linux LVM 的 8e)
#   m - 查看帮助菜单

2.对磁盘分区进行格式化

# 1. 在 /dev/sdb1 分区上创建 ext4 文件系统(最常用)
sudo mkfs.ext4 /dev/sdb1

# 2. 创建 XFS 文件系统(适用于大文件和高并发)
sudo mkfs.xfs /dev/sdb1

# 3. 创建 FAT32 文件系统(用于跨平台兼容,如U盘)
sudo mkfs.vfat -F 32 /dev/sdb1

# 4. 创建交换分区(Swap)
sudo mkswap /dev/sdb2
sudo swapon /dev/sdb2 # 启用该交换分区

3.对磁盘分区进行挂载

创建好的文件系统的分区需要挂载到目录树的某个位置(挂载点),才能被访问

# 1. 将 /dev/sdb1 挂载到 /mnt/mydata 目录
sudo mount /dev/sdb1 /mnt/mydata

# 2. 挂载时指定参数,如设置只读(ro)
sudo mount -o ro /dev/sdb1 /mnt/mydata

# 3. 挂载 ISO 镜像文件
sudo mount -o loop ubuntu-22.04.iso /mnt/iso

# 4. 查看当前所有已挂载的文件系统
mount

# 5. 卸载已挂载的文件系统
sudo umount /mnt/mydata  # 或者使用设备名 sudo umount /dev/sdb1

4.常见的配置文件 - /etc/fstab

手动使用 mount 命令进行的挂载在系统重启后会失效。为了能让系统在启动时自动挂载所需的文件系统,需要编辑 /etc/fstab(文件系统表)配置文件。

文件结构:/etc/fstab 的每一行定义一个需要自动挂载的文件系统,每行包含 6 个字段,用空格或制表符分隔

<file system>    <mount point>    <type>    <options>    <dump>    <pass>

<file system>: 要挂载的设备。

可以是设备文件(如 /dev/sdb1)。

可以使用 UUID=(推荐)或 LABEL= 来标识,避免设备名(sdasdb)变化导致挂载错误。使用 blkid 命令查看分区的 UUID。

<mount point>: 挂载点的目录路径(必须存在)。

<type>: 文件系统类型,如 ext4xfsswapvfatnfs 等。

<options>: 挂载选项,多个选项用逗号分隔。

defaults:默认选项(rw, suid, dev, exec, auto, nouser, async)。

noauto:启动时不自动挂载。

user:允许普通用户挂载。

ro/rw:只读/读写。

<dump>: 被 dump 备份工具使用的标志。通常设为 0(表示不需要备份)。

<pass>: 被 fsck 磁盘检查工具使用的顺序。

0:表示不检查。

1:表示优先检查(通常只用于根目录 /)。

2:表示其次检查(用于其他分区)。

配置示例

# /etc/fstab: static file system information.
#
# <file system>      <mount point>  <type>  <options>  <dump>  <pass>
UUID=abcd1234-5678   /             ext4    defaults   0       1
UUID=efgh9012-3456   /home         ext4    defaults   0       2
UUID=ijkl7890-1234   none          swap    sw         0       0
/dev/sr0             /mnt/cdrom    iso9660 ro,user,noauto 0   0
LABEL=MyData         /mnt/mydata   ext4    defaults   0       2

磁盘配额的使用

磁盘配额:磁盘配额石一种限制用户或组在文件系统上所能使用的磁盘空间(块配额)或文件数量(inode)的机制,它主要包含两种限制:软限制 和 硬限制。

软限制:允许暂时超出的限制,通常会有宽限期,超过后需要在规定时间内清理文件。

硬限制:绝对不允许超越的上限。

操作步骤:

1.格式化磁盘为xfs文件系统

mkfs.xfs /dev/sdb1

2.创建挂载点:

mkdir /mnt/disk1

3.挂载并启用配额功能

mount -o uquota,gquota /dev/sdb1 /mnt/disk1

注;quota:启用用户磁盘配额,gquota:启用组磁盘配额

4.设置挂载点权限

chmod 1777 /mnt/disk1

5.查看配额报告

xfs_quota -x -c 'report -ugibh' /mnt/disk1

6.为用户设置incode配额

xfs_quota -x -c 'limit -u isoft=5 ihard=10 user1' /mnt/disk1

交换分区(虚拟内存)的创建和查看

交换分区石磁盘的一块特殊区域,当系统的物理内存不足时,操作系统会将内存中不常用的数据暂时移动到交换分区中,从而为需要运行的程序释放内存空间。

创建交换分区的两种方式:

1.独立的磁盘分区   2.交换文件

增加交换分区的大小(使用独立分区)

使用fdisk创建一个新的分区

将其格式化为交换空间

swapon /dev/sdb2

2.使用文件制作交换分区

不需要重新分区,更加灵活方便

dd if=/dev/zero bs=4M count=1024 of=/swapfile

创建完文件后的步骤

1.设置正确的权限

chmod 600 /swapfile  # 只有 root 可读写

2.格式化为交换空间

mkswap /swapfile     # 格式化和创建交换分区签名

3.启动交换文件

swapon /swapfile     # 激活交换文件

4.永久生效,编辑/etc/fstab文件,添加一行

/swapfile none swap defaults 0 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值