当前位置: 首页 > news >正文

linux学习(十)(磁盘和文件系统(索引节点,文件系统,添加磁盘,交换,LVM公司,挂载))

Linux 磁盘文件系统

Linux 使用各种文件系统来允许我们从计算机系统的硬件(例如磁盘)存储和检索数据。文件系统定义了如何在这些存储设备上组织、存储和检索数据。流行的 Linux 文件系统示例包括 EXT4、FAT32、NTFS 和 Btrfs。

每个文件系统都有自己的优点、缺点和用例。例如,EXT4 由于其稳健性和与 Linux 的兼容性而通常用于 Linux 系统卷,而 FAT32 可用于 USB 驱动器等可移动媒体,因为它与几乎所有作系统兼容。

以下是如何在 Linux 中使用 “df” 命令显示已挂载设备的文件系统类型的示例:

df -T

输出显示磁盘的名称、其文件系统类型以及其他其他信息,例如总空间、已用空间和磁盘上的可用空间。

💾 Linux文件系统就像图书馆的管理方式

核心概念:

  • 磁盘 = 图书馆大楼

  • 文件系统 = 图书分类和管理规则

  • 文件 = 一本本藏书


📚 常见图书馆类型(文件系统)对比

文件系统适用场景特点类比
EXT4Linux系统盘稳定可靠,支持大文件国家图书馆(严谨系统)
FAT32U盘/跨系统传输兼容性强,但单文件≤4GB社区阅览室(简单通用)
NTFSWindows兼容支持权限和大文件,适合双系统双语图书馆(中英兼容)
Btrfs高级用户/服务器支持快照、压缩等高级功能智能数字图书馆

🔍 查看图书馆信息(磁盘文件系统)

1️⃣ 查看所有"图书馆"概况

df -T  # 显示各磁盘的文件系统类型
 

输出示例:

文件系统      类型  容量 已用 可用 使用% 挂载点
/dev/sda1    ext4   50G  30G  18G   63% /
/dev/sdb1    ntfs   1T  500G 500G   50% /mnt/data
 
2️⃣ 详细书架列表

lsblk -f  # 显示块设备及其文件系统
 

🛠️ 日常管理操作

1️⃣ 挂载新图书馆(连接U盘)

sudo mount /dev/sdc1 /mnt/usb  # 把sdc1分区挂载到/mnt/usb
 
2️⃣ 查看当前开放图书馆

mount | grep "^/dev"  # 显示所有已挂载的磁盘
 
3️⃣ 扩建图书馆(格式化磁盘)

sudo mkfs.ext4 /dev/sdd1  # 将sdd1分区格式化为EXT4
 

🌰 实战场景:处理U盘文件

  1. 插入U盘后查看信息

sudo fdisk -l  # 确认U盘设备路径(如/dev/sdb1)
df -T /dev/sdb1
 
  1. 若需要转换为Linux专用格式

sudo umount /dev/sdb1        # 先卸载
sudo mkfs.ext4 /dev/sdb1     # 格式化为EXT4(⚠️会清空数据!)
 
  1. 跨系统使用建议

sudo mkfs.exfat /dev/sdb1    # 格式化为exFAT(适合大文件且Win/Mac/Linux通用)

⚠️ 重要注意事项

  1. 操作前备份:格式化就像重建图书馆,会清空所有藏书!

  2. 权限管理:EXT4/NTFS支持详细权限设置,FAT32无权限控制

  3. 系统目录:不要随意卸载/ /home等系统必备"图书馆"

  4. SSD优化:对固态硬盘建议使用fstrim定期清理:

sudo fstrim -v /  # 对根目录执行TRIM
 

💡 高级技巧

  • Btrfs 快照功能(时光机功能):

sudo btrfs subvolume snapshot / /snapshots/2023-10  # 创建系统快照
  • EXT4 日志功能:突然断电时能像图书馆的借阅记录本,快速恢复数据完整性


最终效果:像资深图书管理员一样,轻松管理各种存储设备的数据仓库! 📚🔧

索引节点

在 Linux 文件系统中,inode(索引节点)是表示文件系统对象(如文件或目录)的核心概念。更具体地说,inode 是一种数据结构,用于存储有关文件的关键信息,但其名称和实际数据除外。此信息包括文件大小、所有者、访问权限、访问时间等。

Linux 文件系统中的每个文件或目录都有一个唯一的 inode,每个 inode 都由其自己的文件系统中的 inode 编号标识。此 inode 编号提供了一种跟踪每个文件的方法,充当 Linux作系统的唯一标识符。

每当在 Linux 中创建文件时,系统都会自动为其分配一个存储其元数据的 inode。inode 的结构和存储由文件系统处理,这意味着 inode 中元数据的种类和数量可能因文件系统而异。

尽管在日常使用中不会直接与 inode 交互,但在处理高级文件作(例如创建链接或恢复已删除的文件)时,了解 inode 可能非常有帮助。

# Retrieve the inode of a file
ls -i filename

📚 Inode 就像书的目录页

核心概念:

  • 文件名 = 书籍标题(方便人类记忆)

  • Inode = 书籍版权页(记录书籍的真实信息

  • 数据块 = 书籍的正文内容


🔍 Inode 信息清单(元数据)

信息项说明类比
Inode编号文件的唯一身份证号ISBN书号
文件大小实际数据占用量书籍页数
权限信息谁可以读/写/执行书籍借阅权限
时间戳创建/修改/访问时间出版/修订日期
数据块指针存储实际内容的磁盘位置书籍存放的货架号

🛠️ 日常操作指南

1️⃣ 查看文件的"身份证"(Inode编号)

ls -i 文件名      # 查看单个文件的Inode
stat 文件名      # 查看详细Inode信息
 

示例输出:

文件:example.txt  
Inode:123456  权限:(0644/-rw-r--r--)  
所有者:user    所属组:users  
大小:4096      块:8          IO块:4096   普通文件  
最近访问:2023-10-01 09:00:00  
最近更改:2023-09-30 15:30:00  
 
2️⃣ 通过Inode找回文件

当文件名被删除但Inode仍存在时:

find / -inum 123456  # 在全盘搜索指定Inode的文件
 
3️⃣ 查看磁盘的Inode容量

df -i  # 显示各分区的Inode使用情况(防小文件撑爆磁盘)
 

🌰 实战场景分析

场景: 网站服务器突然报错 "No space left on device",但 df -h 显示磁盘还有空间

  1. 检查Inode使用:

df -i

文件系统       Inode 已用(I) 可用(I) 已用(I)% 挂载点
/dev/sda1     1.2M    1.2M      0      100%   /
 

👉 诊断结论:Inode耗尽(常见于大量小文件场景)

  1. 查找占用大户:

# 统计目录下的文件/目录数量(每个文件占用1个Inode)
find /var/log -type f | wc -l  

⚠️ 重要特性须知

  1. 硬链接的秘密

    • 硬链接共享相同Inode(像同一本书的多个别名)

    • ln 源文件 硬链接文件 创建后,ls -i 显示相同Inode

  2. 删除文件的真相

    • rm 只是删除了文件名到Inode的链接

    • 当所有硬链接被删除且无进程占用时,Inode才会被释放

  3. 跨分区限制

    • 硬链接不能跨磁盘分区(不同图书馆的书架号无法通用)

    • 软链接(符号链接)可以跨分区,但有独立的Inode


💡 Inode 冷知识

  • 特殊Inode
    / 根目录的Inode通常是2(EXT4文件系统)
    通过 ls -i / 查看验证

  • Inode分配策略
    格式化磁盘时可通过 -i 指定字节/Inode比例(如针对大量小文件优化)

    mkfs.ext4 -i 1024 /dev/sdb1  # 每1KB分配一个Inode

最终效果:理解Inode后,就像获得了透视眼,能看透文件系统的底层运作机制! 🔍👁️

文件系统

Linux作系统通过磁盘下文件系统的概念提供了多种处理数据存储的方法。从本质上讲,文件系统是在存储磁盘上存储和组织文件的方式。它是系统的关键组成部分,因为它确保了数据的完整性、可靠性和对数据的高效访问。

安装在 Linux 系统中的磁盘可以分为多个分区,每个分区都有自己的文件系统。Linux 支持各种类型的文件系统,例如 EXT4、XFS、BTRFS 等。它们中的每一个在性能、数据完整性和恢复选项方面都有自己的优势。

这些文件系统的配置依赖于定义的层次结构。所有文件和目录都从根目录开始,由 '/' 表示。

了解文件系统的概念和管理是成功管理 Linux 系统的关键,因为它涉及日常任务,例如挂载/卸载驱动器、检查磁盘空间、管理文件权限和修复损坏的文件系统。

在 Linux 中显示文件系统的代码片段:

df -T

此命令将显示文件系统的类型以及磁盘使用状态。

🗄️ Linux文件系统就像智能图书馆管理系统

核心功能:

  • 数据分类存储:像图书馆分楼层存放不同书籍

  • 快速定位检索:通过目录结构快速找到文件

  • 安全保障:权限控制防止未授权访问


📚 图书馆架构解析(文件系统组成)

1️⃣ 书架分区(磁盘划分)

sudo fdisk -l  # 查看磁盘分区情况
 
  • EXT4区:常规图书区(稳定可靠)

  • Btrfs区:数字阅读区(支持快照恢复)

  • NTFS区:外文图书区(兼容Windows系统)

2️⃣ 图书分类法(目录结构)

/
├── bin     # 基础工具书(所有用户可读)
├── home    # 个人书房(用户专属空间)
├── etc     # 管理手册(系统配置文件)
├── var     # 动态资料(日志/数据库)
└── mnt     # 临时展区(U盘等外接设备)
 
3️⃣ 借阅规则(权限管理)

/
├── bin     # 基础工具书(所有用户可读)
├── home    # 个人书房(用户专属空间)
├── etc     # 管理手册(系统配置文件)
├── var     # 动态资料(日志/数据库)
└── mnt     # 临时展区(U盘等外接设备)
 

🛠️ 日常维护操作

1️⃣ 查看图书馆容量

df -Th  # 显示各分区的文件系统类型及使用情况
 

输出示例:

文件系统      类型   容量  已用  可用 使用% 挂载点
/dev/sda1    ext4   50G   30G   18G   63% /
/dev/sdb1    xfs    1T    500G  500G  50% /data
 
2️⃣ 新增图书区(挂载磁盘)

sudo mount /dev/sdc1 /mnt/新书区  # 连接新书架
 
3️⃣ 图书搬迁(扩容操作)

sudo resize2fs /dev/sda1  # EXT4在线扩容
sudo xfs_growfs /data    # XFS文件系统扩容
 

🌰 实战场景:应对突发情况

场景1:图书馆漏水(文件系统损坏)

sudo fsck /dev/sda1  # 启动图书修复程序(需先卸载分区)
 

场景2:读者投诉找不到书(磁盘空间不足)

du -sh /* | sort -hr  # 找出占用最大的目录
# 发现/var/log占用10G
journalctl --vacuum-size=100M  # 清理日志
 

⚠️ 重要注意事项

风险点应对措施
误删文件使用Btrfs/zfs的快照功能
权限混乱定期审计 find / -nouser -o -nogroup
硬盘老化监控SMART状态 smartctl -a /dev/sda

💡 高级功能推荐

  • Btrfs时空穿梭

sudo btrfs subvolume snapshot / /snapshots/$(date +%Y%m%d)  # 创建系统快照
 
  • EXT4日志恢复:突然断电后自动检查日志恢复数据完整性

  • XFS高性能存储:适合大型数据库,支持并行IO操作


📋 文件系统选择指南

使用场景推荐文件系统优势
个人电脑EXT4稳定兼容性好
服务器存储XFS处理大文件性能卓越
数据备份Btrfs支持压缩和快照
跨平台U盘exFATWin/Mac/Linux通用

最终效果:像专业图书馆管理员一样,轻松管理海量数据,既保证安全又提升效率! 📚🔧

挂载

在 Linux 环境中,与磁盘管理相关的一个非常重要的概念是文件系统的 “挂载”。从根本上说,在 Linux 中挂载是指允许作系统访问存储在底层存储设备(如硬盘驱动器或 SSD)上的数据的过程。此过程将文件系统(在某些存储介质上可用)附加到 Linux 目录树中的特定目录(也称为挂载点)。

这种方法的美妙之处在于 Linux 以统一和无缝的方式处理所有文件,无论它们是驻留在本地磁盘、网络位置还是任何其他类型的存储设备上。

Linux 中的命令用于挂载文件系统。当特定文件系统“挂载”到特定目录时,系统可以开始从设备读取数据并根据文件系统的规则对其进行解释。mount

值得注意的是,Linux 有一个特殊的目录 ,它通常用作手动挂载和卸载作的临时挂载点。/mnt

mount /dev/sdb1 /mnt

上面的命令会将文件系统(假设它是有效的)挂载到该目录下第二个硬盘驱动器的第二个分区上。挂载分区后,您可以使用该目录访问文件。/mnt /mnt

了解和管理挂载对于有效的 Linux 磁盘和文件系统管理至关重要。

🖇️ Linux挂载就像给U盘插上电脑

核心概念:

  • 存储设备 = U盘/移动硬盘

  • 挂载点 = USB接口(接入系统的入口)

  • 挂载操作 = 插入U盘的动作


🔌 挂载三步曲

1️⃣ 寻找U盘(识别设备)

sudo fdisk -l  # 查看所有存储设备
# 输出示例:发现新U盘是/dev/sdb1
 
2️⃣ 创建接口(准备挂载点)

sudo mkdir /mnt/myusb  # 新建"USB接口"
 
3️⃣ 插入设备(执行挂载)

sudo mount /dev/sdb1 /mnt/myusb  # 把U盘挂载到指定接口
 

🗂️ 访问数据

cd /mnt/myusb   # 进入U盘目录
ls              # 查看文件
cp photo.jpg ~/Pictures/  # 复制照片到本地
 

⚡ 快速操作技巧

🔍 查看所有已插入的"U盘"

mount | grep "/dev/sd"  # 显示所有物理设备挂载点
 
📌 卸载设备(安全弹出)

sudo umount /mnt/myusb  # 卸载前确保没有文件在占用
# 或
sudo eject /dev/sdb1    # 针对光盘/U盘的特殊弹出方式
 
🔄 开机自动挂载(设置固定接口)

编辑 /etc/fstab 文件添加:

/dev/sdb1  /mnt/myusb  ntfs  defaults  0 0

然后执行:

sudo mount -a  # 立即生效

🌰 实战场景

sudo mount -o loop ubuntu.iso /mnt/iso

3️⃣ -o loop

  • -o(options):指定挂载选项,这里的 loop 选项表示:
    • loop(loop device):使用环回设备(loopback device)将 ubuntu.iso 当作一个虚拟磁盘 挂载。
    • 这样就可以像访问普通磁盘一样访问这个 ISO 文件。

💡 为什么要用 -o loop ISO 文件是一个光盘镜像,它本质上是一个文件,而不是一个物理设备。Linux 通过 loop 设备模拟一个“虚拟光盘”来访问 ISO 文件的内容。

-o loop:表示用**“环回设备”**(loopback device)来模拟一个虚拟光盘,而不是挂载一个物理设备。
💡 简单比喻
就像你下载了一部电影 movie.iso,但你不能直接播放它。用 mount -o loop 挂载后,就像你“插入”了一张 DVD,现在可以打开 /mnt/iso 来浏览电影里的文件了!

场景1:挂载Windows共享文件夹

sudo mkdir /mnt/win_share
sudo mount -t cifs //192.168.1.100/share /mnt/win_share -o username=user

这条命令的作用是把 Windows 共享的文件夹“连接”到 Linux 上的 /mnt/win_share,相当于 Windows 里的“映射网络驱动器”。

逐部分解释:

  • sudo → 需要管理员权限。
  • mount → 挂载(连接)一个存储设备或共享资源。
  • -t cifs → 说明使用 CIFS(Common Internet File System)协议,也叫 SMB(Windows 共享协议)。
  • //192.168.1.100/share → Windows 共享文件夹的网络路径
    • 192.168.1.100 → 共享文件夹所在的 Windows 电脑的IP 地址
    • /share → 这台 Windows 电脑上共享的文件夹名称
  • /mnt/win_share → 挂载的位置(前面创建的文件夹),挂载后你可以在这里访问 Windows 共享的文件
  • -o username=user → 选项(options),这里是指定 Windows 共享的用户名(你可能需要输入密码)。

💡 直白比喻

  • 就像你用 Windows 访问局域网里的共享文件夹,但现在你在 Linux 里用 mount 让它变成 Linux 里的一个本地文件夹。
  • Windows 的共享文件夹 就像是一个“U 盘”,
  • mount 命令 把这个“U 盘”插入到 Linux 里的 /mnt/win_share 文件夹里,这样你可以直接访问它。 

场景2:挂载ISO镜像文件

sudo mount -o loop ubuntu.iso /mnt/iso
 

⚠️ 注意事项

常见问题解决方案
设备忙无法卸载lsof /mnt/myusb 查占用进程
挂载点非空原有文件会被隐藏直到卸载
文件系统损坏先修复 fsck /dev/sdb1

💡 高级用法

  • 绑定挂载(镜像目录)

sudo mount --bind /var/www /mnt/mirror_web  # 同步显示网站目录
  • sudo → 需要管理员权限,因为 mount 需要更高权限。
  • mount → 用于挂载(连接)文件系统或目录。
  • --bind“绑定挂载”,让一个目录映射到另一个位置。
  • /var/www原始目录(网站文件通常存放在这里)。
  • /mnt/mirror_web目标目录(这个文件夹会显示 /var/www 里的内容)。

💡 直白比喻

想象你家有一个书架 /var/www,里面放着很多书。
你想在另一个房间 /mnt/mirror_web 也能看到这些书,但不想复制它们,于是你用 mount --bind 创建了一个“魔法书架”,它显示的内容和 /var/www 完全同步,但实际上这些书还在原来的书架上。📚✨


📌 什么时候用?

  • 你想在多个位置访问同一个目录,但又不想复制数据。
  • 你需要给某些程序或用户提供一个只读副本(可以加 -o ro 选项)。
  • 你在做chroot 隔离环境,需要让某些目录保持可访问。

🛠 取消挂载

如果不需要这个“镜像映射”了,可以用:

sudo umount /mnt/mirror_web

这样 /mnt/mirror_web 目录就不再显示 /var/www 里的内容了,但 /var/www 本身不会受到影响。🚀

  • 临时内存盘

sudo mount -t tmpfs -o size=1G tmpfs /mnt/ramdisk  # 创建1G内存虚拟盘
  • sudo → 需要管理员权限,因为 mount 操作涉及系统级挂载。
  • mount → 用于挂载(连接)文件系统。
  • -t tmpfs → 说明要挂载tmpfs(临时文件系统,存放在内存中)。
  • -o size=1G → 设定 tmpfs 的大小为 1GB,防止它占用太多内存。
  • tmpfs → 指定使用 tmpfs 作为文件系统(这个是虚拟的,不需要提供物理设备)。
  • /mnt/ramdisk → 目标挂载点,也就是我们用来存放临时文件的目录

💡 直白比喻

  • 你的电脑有一块“超级快”的存储空间(RAM),但它的内容在关机后会消失
  • 你用 mount -t tmpfs 创建了一个“虚拟U盘”,这个 U 盘实际上是从 RAM 里划分出来的,访问速度极快,但断电就没了。🚀💾

📌 什么时候用?

  • 存放临时文件(比 SSD 甚至 NVMe 还快)。
  • 编译大项目时加速构建(比如放 build 目录,加快编译速度)。
  • 作为缓存目录(存放需要频繁读取但不重要的文件,比如 /tmp)。

🛠 取消挂载(释放内存)

如果不需要了,可以用:

sudo umount /mnt/ramdisk

这样就会释放这 1GB 内存,目录 /mnt/ramdisk 仍然存在,但不再是 RAM Disk 了。🎯


最终效果:像玩拼插积木一样,自由组合各种存储设备到系统目录树! 🔌🗂️

添加磁盘

在 Linux 中,硬盘和便携式驱动器通过一系列目录和文件(通常称为 Linux 文件系统)进行管理和控制。在 Linux 中添加新磁盘时,您需要先准备它们,然后才能使用它们。

该过程包括在磁盘上创建分区,在分区上创建文件系统,然后将文件系统挂载到系统目录树中的目录。这在使用多个磁盘驱动器或大型数据存储单元时尤其重要,以便创建无缝的用户体验。

以下是管理磁盘的常用命令:

  • 用于列出所有块设备(磁盘和分区)。lsblk
  • 用于在磁盘上创建新分区。fdisk /dev/sdX
  • 用于在分区上创建新的文件系统。mkfs.ext4 /dev/sdX1
  • 用于将文件系统挂载到目录。mount /dev/sdX1 /mount/point
# example commands to add new disk
lsblk                     # list all disks and partitions
sudo fdisk /dev/sdb       # let's suppose new disk is /dev/sdb
sudo mkfs.ext4 /dev/sdb1  # make filesystem(e.g., ext4) on partition 1
sudo mount /dev/sdb1 /mnt # mount new filesystem to /mnt directory

请记住将 and 替换为您的实际磁盘和分区标识符。挂载点也可以根据您的系统结构和首选项替换为任何其他目录。/dev/sdb /dev/sdb1 /mnt

💽 给Linux系统添加新磁盘就像安装新储物柜

核心步骤:

  1. 安装储物柜 → 连接新硬盘

  2. 划分隔间 → 创建分区

  3. 贴标签整理 → 格式化文件系统

  4. 开柜门使用 → 挂载到目录


🛠️ 四步安装指南

1️⃣ 查看储物柜布局(识别新磁盘)

lsblk  # 显示所有"储物柜"(磁盘)结构
# 输出示例:
# sdb      8:16   0   1T  0 disk  ← 发现新储物柜(1TB新硬盘)
2️⃣ 划分储物隔间(创建分区)

sudo fdisk /dev/sdb  # 开始规划新储物柜
# 按n创建新分区 → 选p主分区 → 设置大小 → 按w保存
 
3️⃣ 安装隔板标签(格式化)

sudo mkfs.ext4 /dev/sdb1  # 给第一个隔间贴上"EXT4"标签(格式化)
# 可选其他标签:xfs、ntfs、btrfs...
 
4️⃣ 连接储物柜到房间(挂载使用)

sudo mkdir /data       # 在房间建个新门(创建挂载点)
sudo mount /dev/sdb1 /data  # 把储物柜隔间连接到这扇门
 

🔄 设置自动连接(开机自动挂载)

编辑 /etc/fstab 添加:

/dev/sdb1  /data  ext4  defaults  0 0
 

验证配置:

sudo mount -a  # 测试配置是否正确
 

🌰 实战场景:扩容家庭照片库

  1. 插入新硬盘 → 连接SATA/USB线

  2. 创建专属分区 → 用fdisk划分500G空间

  3. 格式化为EXT4 → mkfs.ext4 /dev/sdb1

  4. 挂载到/photo → mount /dev/sdb1 /photo

  5. 设置自动挂载 → 编辑fstab文件


⚠️ 安全须知

风险点防护措施
数据丢失操作前备份重要数据!
错误分区lsblk反复确认设备名称
权限问题chmod设置目录访问权限
兼容性问题跨系统使用选exFAT/NTFS格式

💡 高级技巧

  • LVM动态扩容

pvcreate /dev/sdb1          # 创建物理卷
vgextend vg_data /dev/sdb1  # 加入卷组
lvextend -L +500G /dev/vg_data/lv_photos  # 扩容逻辑卷
resize2fs /dev/vg_data/lv_photos  # 调整文件系统
  • SSD优化

sudo tune2fs -O fast_commit /dev/sdb1  # 启用快速提交(EXT4)
sudo mount -o discard /dev/sdb1 /data  # 启用TRIM

🔍 常用检查命令

df -Th                  # 查看已连接的"储物柜"
blkid                   # 显示所有存储设备UUID
sudo hdparm -I /dev/sdb # 查看硬盘详细信息

最终效果:像在房间添加新储物柜一样,轻松扩展Linux系统的存储空间! 🗄️🔧

Disks Filesystems 下的 Linux Swap

当物理内存 (RAM) 量已满时,将使用 Linux 中的交换空间。如果系统需要更多内存资源,并且物理内存已满,则内存中的非活动页将移动到交换空间。交换空间是硬盘驱动器 (HDD) 中用于虚拟内存的一部分。

拥有交换空间可确保每当系统的物理内存不足时,它可以将一些数据移动到交换空间,从而释放 RAM 空间,但这会带来性能影响,因为基于磁盘的存储比 RAM 慢。

在磁盘和文件系统的上下文中,交换空间可以位于两个位置:

  1. 在它自己的专用分区中。
  2. 在现有文件系统中的常规文件中。

例如,要添加交换文件,我们可以使用 fallocate 命令创建特定大小的交换文件,并使用 mkswap 命令使其适合交换使用。

fallocate -l 1G /swapfile # creates a swap file
chmod 600 /swapfile # secures the swap file by preventing regular users from reading it
mkswap /swapfile # sets up the Linux swap area
swapon /swapfile # enables the file for swapping

请记住,决定将交换空间放置在何处、拥有多少交换空间以及如何利用交换空间都是优化系统性能的重要考虑因素。

💾 Linux交换空间就像应急备用仓库

核心概念:

  • 物理内存(RAM) = 工厂的临时货架(存取极快但容量有限)

  • 交换空间(Swap) = 后方备用仓库(空间大但搬运速度慢)


🔄 Swap 工作原理

当临时货架(RAM)堆满时,系统会把暂时不用的货物(内存数据)搬到后方仓库(Swap),腾出货架空间。虽然能缓解燃眉之急,但频繁搬运会导致效率下降(性能影响)。


🛠️ 创建Swap的两种方式

1️⃣ 专用仓库(Swap分区)

适合长期使用,性能更稳定

# 安装系统时预先划分独立分区(如8GB)
2️⃣ 临时储物箱(Swap文件)

灵活创建,适合临时扩容

# 创建1G大小的Swap文件
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile       # 上锁防止他人查看
sudo mkswap /swapfile          # 改装成专用仓库
sudo swapon /swapfile          # 开放仓库使用
 

📊 查看仓库使用情况

free -h              # 查看内存和Swap总量
swapon --show        # 显示活动的Swap空间
 

🌰 实战场景:服务器内存不足

  1. 临时扩容

# 创建4GB Swap文件
sudo fallocate -l 4G /swap_temp
sudo mkswap /swap_temp && sudo swapon /swap_temp
  • sudo → 需要管理员权限,因为 Swap 影响系统内存管理。
  • fallocate -l 4G → 直接在磁盘上分配 4GB 空间(比 dd 命令快)。
  • /swap_temp → 这个是新创建的 Swap 文件的路径(就像一个大空白文件)。

📌 比喻:你在磁盘上划分出 4GB 空间,准备当作“虚拟内存”使用。

  • mkswap → 把 /swap_temp 转换为 Swap 交换分区的格式,系统才能识别。

📌 比喻:就像是你买了一块新硬盘,必须格式化才能用

  • swapon → 启用这个 Swap 文件,让 Linux 识别并开始使用它。

📌 比喻:你买的“备用内存条”终于装上了,系统可以用了!

💡 这有什么用?

  • 当内存(RAM)不够时,系统会把不常用的数据放进 Swap,防止程序崩溃
  • 让没有足够物理内存的老电脑运行得更稳定
  • 用于测试,或者临时增加 Swap,而不需要重新分区
  1. 永久生效
    编辑 /etc/fstab 添加:

/swap_temp none swap sw 0 0
  1. 移除Swap(升级内存后):

sudo swapoff /swap_temp  # 先停用 Swap
sudo rm /swap_temp       # 删除 Swap 文件,释放磁盘空间
 

⚠️ 配置建议

物理内存推荐Swap大小适用场景
≤ 2GB2倍内存老旧设备
2-8GB等于内存大小普通PC/服务器
>8GB0.5倍内存(至少4G)高性能服务器

💡 性能优化技巧

  • Swappiness调节
    控制系统使用Swap的积极程度(0-100,默认60)

    sudo sysctl vm.swappiness=10  # 更倾向使用物理内存
  • SSD优化
    使用SSD作为Swap时,启用discard选项支持TRIM

    # /etc/fstab 中添加
    /swapfile none swap defaults,discard 0 0

❗ 注意事项

  1. 频繁交换警告:若Swap使用率持续>50%,应考虑升级内存

  2. 文件位置:Swap文件建议放在高速存储(如SSD)

  3. 安全删除:移除Swap文件前务必先swapoff


最终效果:像给系统配备了一个智能应急仓库,内存不足时自动调度,确保系统平稳运行! 🚚💨

Linux 逻辑卷管理器 (LVM)

Linux Logical Volume Manager (LVM) 是一个设备映射器框架,可为 Linux 内核提供逻辑卷管理。创建它是为了简化磁盘管理,允许使用抽象存储设备(称为逻辑卷),而不是直接使用物理存储设备。

LVM 非常灵活,其功能包括调整卷大小、跨多个物理磁盘镜像卷以及在磁盘之间移动卷而无需关闭电源。

LVM 在 3 个级别上工作:物理卷 (PV)、卷组 (VG) 和逻辑卷 (LV)。

  • PV 是实际的磁盘或分区。
  • VG 将 PV 合并到单个存储池中。
  • LV 从 VG 中分出部分供系统使用。

要创建 LVM,您需要在 Linux 中按照以下步骤作:

pvcreate /dev/sdb1
vgcreate my-vg /dev/sdb1
lvcreate -L 10G my-vg -n my-lv

在上面的命令中,我们在 上创建一个物理卷,然后创建一个名为 的卷组。最后,我们从卷组中划出一个 10GB 的逻辑卷并将其命名为 。/dev/sdb1 my-vg my-lv

这些功能共同为管理存储系统提供了极大的便利,特别是对于通常使用大量磁盘阵列的大型企业级系统。

Linux 逻辑卷管理器(LVM)就像给你的硬盘装了一个“智能储物柜系统”——它能把多块硬盘或分区灵活组合、动态调整,像搭积木一样管理存储空间!以下是通俗解释和操作指南:


核心概念:3层结构

  1. 物理卷(PV) → 砖块

    • 实际的硬盘或分区(如 /dev/sdb 或 /dev/sdb1)。

    • 相当于“原材料”,需要先加工成砖块才能用。

  2. 卷组(VG) → 砖墙

    • 把多个“砖块”(PV)堆成一堵墙,形成一个大存储池。

    • 比如:把 2 块 1TB 硬盘合并成 2TB 的池子。

  3. 逻辑卷(LV) → 房间

    • 在“砖墙”里隔出一个个房间(分区),供系统使用(挂载到目录)。

    • 房间大小可随时调整,甚至跨越多块硬盘!


LVM 核心优势

  • 动态扩容/缩容:LV(房间)大小随时调整,不用格式化硬盘!

  • 跨硬盘合并:把多块硬盘(PV)当一块大硬盘(VG)用。

  • 快照备份:给LV拍“照片”,备份数据时不中断服务。


实战操作:手把手创建LVM

假设你有一块新硬盘 /dev/sdb,想用它创建一个逻辑卷:

1. 将硬盘做成“砖块”(PV)

pvcreate /dev/sdb  # 把/dev/sdb初始化为物理卷(PV)
 
2. 堆砌“砖墙”(VG)

vgcreate my_vg /dev/sdb  # 创建名为 my_vg 的卷组(VG)
3. 在墙上隔出“房间”(LV)

lvcreate -L 500G -n my_lv my_vg  # 从my_vg分出500G,命名my_lv
 
4. 格式化并挂载使用

mkfs.ext4 /dev/my_vg/my_lv  # 格式化为ext4文件系统
mkdir /data
mount /dev/my_vg/my_lv /data  # 挂载到/data目录
 

LVM 日常管理场景

场景一:给“房间”扩容(LV扩容)

# 1. 先扩逻辑卷(+500G)
lvextend -L +500G /dev/my_vg/my_lv# 2. 再扩文件系统(让系统识别新空间)
resize2fs /dev/my_vg/my_lv  # ext4文件系统适用
# 或 xfs_growfs /data       # XFS文件系统用这条
 
场景二:添加新硬盘到“砖墙”(VG扩容)

pvcreate /dev/sdc          # 初始化新硬盘为PV
vgextend my_vg /dev/sdc    # 将新PV加入my_vg卷组
# 现在可以给LV扩容了!
lvcreate -s -n snap_lv -L 10G /dev/my_vg/my_lv  # 为my_lv创建10G快照
mount /dev/my_vg/snap_lv /mnt/snapshot          # 挂载快照并备份
lvremove /dev/my_vg/snap_lv                     # 删除快照释放空间
  • lvcreate → 创建一个新的逻辑卷(Logical Volume,简称 LV)。
  • -s → 这个选项表示 创建的是快照(snapshot),而不是普通的逻辑卷
  • -n snap_lv → 给快照取名 snap_lv,可以自定义名字。
  • -L 10G → 分配 10GB 空间 来存储快照数据。
  • /dev/my_vg/my_lv快照的目标,也就是要备份的逻辑卷 my_lv,它属于卷组 my_vg

📌 通俗比喻

  • 你的 /dev/my_vg/my_lv 逻辑卷 就像一本书📖。
  • 你创建了一个 10GB 快照(snap_lv),相当于拍了一张书的快照📸。
  • 只要快照存在,即使你修改或删除原书的内容,你仍然可以恢复到拍照时的状态
  • 但快照需要额外空间(10GB),如果原书改动太多,超出 10GB,快照就会失效

💡 快照的作用

备份数据:创建快照后,你可以备份它,而不会影响正在运行的系统。
防止误操作:如果你误删了数据,可以从快照恢复。
测试新软件:你可以先创建快照,安装软件,如果出现问题,直接恢复快照。

 

场景三:创建快照(备份不中断服务)

lvcreate -s -n snap_lv -L 10G /dev/my_vg/my_lv  # 为my_lv创建10G快照
mount /dev/my_vg/snap_lv /mnt/snapshot          # 挂载快照并备份
lvremove /dev/my_vg/snap_lv                     # 删除快照释放空间
 

LVM vs 传统分区的优势

场景传统分区LVM
硬盘空间不足时必须停机、备份、重分区、恢复数据动态扩容,无需停机
管理多块硬盘每块硬盘独立分区,无法合并多块硬盘合并成一个存储池,统一管理
调整分区大小需格式化,数据丢失风险高随时调整,数据安全
快照备份不支持支持快速创建快照,备份效率高

总结

  • 物理卷(PV) → 砖块

  • 卷组(VG) → 砖墙

  • 逻辑卷(LV) → 房间

  • 操作口诀

    • 想扩容 → vgextend加砖块 → lvextend扩房间。

    • 要备份 → lvcreate -s拍快照。

    • 加硬盘 → pvcreate初始化 → vgextend合并到卷组。

有了LVM,存储管理就像玩乐高一样灵活! 🧱

相关文章:

linux学习(十)(磁盘和文件系统(索引节点,文件系统,添加磁盘,交换,LVM公司,挂载))

Linux 磁盘文件系统 Linux 使用各种文件系统来允许我们从计算机系统的硬件(例如磁盘)存储和检索数据。文件系统定义了如何在这些存储设备上组织、存储和检索数据。流行的 Linux 文件系统示例包括 EXT4、FAT32、NTFS 和 Btrfs。 每个文件系统都有自己的…...

k8s v1.28.15部署(kubeadm方式)

k8s部署(kubeadm方式) 部署环境及版本 系统版本:CentOS Linux release 7.9.2009 k8s版本:v1.28.15 docker版本:26.1.4 containerd版本:1.6.33 calico版本:v3.25.0准备 主机ip主机名角色配置1…...

Python开发Scikit-learn面试题及参考答案

目录 如何用 SimpleImputer 处理数据集中的缺失值? 使用 StandardScaler 对数据进行标准化的原理是什么?与 MinMaxScaler 有何区别? 如何用 OneHotEncoder 对类别型特征进行编码? 解释特征选择中 SelectKBest 与 VarianceThreshold 的应用场景。 如何通过 PolynomialFe…...

Java在小米SU7 Ultra汽车中的技术赋能

目录 一、智能驾驶“大脑”与实时数据 场景一:海量数据的分布式计算 场景二:实时决策的毫秒级响应 场景三:弹性扩展与容错机制 技术隐喻: 二、车载信息系统(IVI)的交互 场景一:Android Automo…...

蓝队第三次

1.了解什么是盲注 盲注(Blind SQL Injection)是SQL注入的一种形式,攻击者无法直接通过页面回显或错误信息获取数据,而是通过观察页面的布尔状态(真/假)或时间延迟来间接推断数据库信息。例如,通…...

Element Plus中的树组件的具体用法(持续更新!)

const defaultProps {//子树为节点对象的childrenchildren: children,//节点标签为节点对象的name属性label: name, } 属性 以下是树组件中的常用属性以及作用: data:展示的数据(数据源) show-checkbox:节点是否可…...

nodejs使用WebSocket实现聊天效果

在nodejs中使用WebSocket实现聊天效果(简易实现) 安装 npm i ws 实现 创建 server.js /*** 创建一个 WebSocket 服务器,监听指定端口,并处理客户端连接和消息。** param {Object} WebSocket - 引入的 WebSocket 模块&#xff0c…...

通领科技冲刺北交所

高质量增长奔赴产业新征程 日前,通领科技已正式启动在北交所的 IPO 进程,期望借助资本市场的力量,加速技术升级,推动全球化战略布局。这一举措不仅展现了中国汽车零部件企业的强大实力,也预示着行业转型升级的新突破。…...

利用LLMs准确预测旋转机械(如轴承)的剩余使用寿命(RUL)

研究背景 研究问题:如何准确预测旋转机械(如轴承)的剩余使用寿命(RUL),这对于设备可靠性和减少工业系统中的意外故障至关重要。研究难点:该问题的研究难点包括:训练和测试阶段数据分布不一致、长期RUL预测的泛化能力有限。相关工作:现有工作主要包括基于模型的方法、数…...

comctl32!ListView_OnSetItem函数分析LISTSUBITEM结构中的image表示图标位置

第一部分: BOOL ListView_SetSubItem(LV* plv, const LV_ITEM* plvi) { LISTSUBITEM lsi; BOOL fChanged FALSE; int i; int idpa; HDPA hdpa; if (plvi->mask & ~(LVIF_DI_SETITEM | LVIF_TEXT | LVIF_IMAGE | LVIF_STATE)) { …...

Django工程获取请求参数的几种方式

在 Django 中获取请求参数的完整方法如下: 一、GET 请求参数获取 def view_func(request):# 获取单个参数(推荐方式)name request.GET.get(name, default) # 带默认值age request.GET.get(age, 0)# 获取多个同名参数(如复选框…...

使用Qt调用HslCommunication(C++调用C#库)

使用C/CLI 来调用C#的dll 任务分解: 1、实现C#封装一个调用hsl的dll; 2、实现C控制台调用C#的dll库; 3、把调用C#的dll用C再封装为一个dll; 4、最后再用Qt调用c的dll; 填坑: 1、开发时VS需要安装CLI项目库…...

C++中的构造函数

目录 一、什么是构造函数: 二、构造函数的特性和使用: 1、构造函数的特性: 2、构造函数的重载: 三、默认生成的构造函数: 一、什么是构造函数: 在C中,当创建一个对象之后,就会自…...

MySQL知识点(第一部分)

MySQL 基础: 1、SQL语句的分类: DDL:用于控制数据库的操作DML:用于控制表结构的字段,增、删、修DQL:用于查询语句DCL:用于管理数据库,用户,数据库的访问 权限。 2、M…...

Lua怎么学?Lua编程实战:从基础语法到高级特性

朋友们,大家好,我是袁庭新。我的《Lua编程实战:从基础语法到高级特性》教程上线了!这是一套从零掌握Lua编程,涵盖基础到高级,以实战驱动,快速上手Lua开发的精品教程! 我为什么要研发…...

Qt常用控件之 纵向列表QListWidget

纵向列表QListWidget QListWidget 是一个纵向列表控件。 QListWidget属性 属性说明currentRow当前被选中的是第几行。count一共有多少行。sortingEnabled是否允许排序。isWrapping是否允许换行。itemAlignment元素的对齐方式。selectRectVisible被选中的元素矩形是否可见。s…...

Manus无需邀请码即可使用的平替方案-OpenManus实测

文章目录 Manus 简介核心定位技术架构核心特点应用场景性能表现用户体验发展计划OpenManus技术架构与设计理念核心功能特性应用场景案例与闭源Manus的差异对比安装使用与实战演示执行过程记录简单案例-快速写一个helloworld的java程序复杂案例-分析特斯拉汽车近三年财务数据并生…...

git如何解除远程仓库 改变远程仓库地址

这三个命令通常一起使用来更改项目的远程仓库地址: 查看当前远程仓库配置:git remote -v移除旧的远程仓库配置:git remote remove origin添加新的远程仓库配置:git remote add origin 新的远程仓库地址 要解除当前项目的远程仓库…...

VSCode 配置优化指南:打造高效的 uni-app、Vue2/3、JS/TS 开发环境

VSCode 配置优化指南,适用于 uni-app、Vue2、Vue3、JavaScript、TypeScript 开发,包括插件推荐、设置优化、代码片段、调试配置等,确保你的开发体验更加流畅高效。 1. 安装 VSCode 如果你还未安装 VSCode,可前往 VSCode 官网 下载最新版并安装。 2. 安装推荐插件 (1) Vue…...

云计算:虚拟化、容器化与云存储技术详解

在上一篇中,我们深入探讨了网络安全的核心技术,包括加密、认证和防火墙,并通过实际案例和细节帮助读者全面理解这些技术的应用和重要性。今天,我们将转向一个近年来迅速发展的领域——云计算。云计算通过提供按需访问的计算资源,彻底改变了IT基础设施的构建和管理方式。本…...

oracle 数据导出方案

工作中有遇到需要将oracle 数据库表全部导出,还需要去除表数据中的换行符。 方案 shell 设计 封装函数 1 function con_oracle() 用于连接oracle 2 function send_file() 用于发送文件 3 主程序 使用循环将所有表导出并发送到数据服务器 主程序 程序代码 #!…...

电商项目-秒杀系统(四)秒杀异步下单防止重复秒杀

一、 防止恶意刷单解决 在生产场景下,可能会有一些人会恶意访问当前网站,来进行恶意的刷单。这样会造成当前系统出现一些业务上的业务混乱,出现脏数据,或者造成后端访问压力大等问题。 一般要解决这个问题的话,前端可…...

Express 中 get 参数获取

1. 使用 req.query 获取 URL 查询字符串参数 在 GET 请求中,参数通常以查询字符串的形式附加在 URL 后面,格式为 ?参数名1值1&参数名2值2 。Express 里可通过 req.query 对象获取这些参数。 const express require("express"); const …...

《Python实战进阶》No17: 数据库连接与 ORM(SQLAlchemy 实战)

No17: 数据库连接与 ORM(SQLAlchemy 实战) 摘要 本文深入探讨SQLAlchemy在复杂场景下的高级应用,涵盖四大核心主题: 会话生命周期管理:通过事件钩子实现事务监控与审计追踪混合继承映射:结合单表/连接表继…...

运行OpenManus项目(使用Conda)

部署本项目需要具备一定的基础:Linux基础、需要安装好Anaconda/Miniforge(Python可以不装好,直接新建虚拟环境的时候装好即可),如果不装Anaconda或者Miniforge,只装过Python,需要确保Python是3.…...

Linux一键美化命令行,一键安装zsh终端插件

zsh应该是很多人第一个用的Linux终端美化软件 但是其安装略微复杂,让人有些困扰 所以我花了两天写了一键安装脚本,实测运行后直接安装好 适用于Ubuntu、Debian、Red Hat、macOS等系统 直接安装好zsh 以及常用插件 autojump 跳转插件 zsh-syntax-highlig…...

OpenManus介绍及本地部署体验

1.OpenManus介绍 OpenManus,由 MetaGPT 团队精心打造的开源项目,于2025年3月发布。它致力于模仿并改进 Manus 这一封闭式商业 AI Agent 的核心功能,为用户提供无需邀请码、可本地化部署的智能体解决方案。换句话说,OpenManus 就像…...

2025-03-09 学习记录--C/C++-PTA 习题10-7 十进制转换二进制

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 裁判测试程序样例&#xff1a; #include <stdio.h>void dectobin( int n );int main() {int n;scanf(…...

计算机网络----主要内容简介

这里写目录标题 章节概览每章的大体结构结构功能与服务的关系 一些概念概念一概念二传统的网络层的工作方式&#xff08;路由IP&#xff09;现代的网络层的工作方式&#xff08;SDN&#xff09; 章节概览 其中&#xff0c;网络层分为了两章 下面的红色部分是部分选修 每章的大…...

基于python大数据的招聘数据可视化与推荐系统

博主介绍&#xff1a;资深开发工程师&#xff0c;从事互联网行业多年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有…...

VBA高级应用30例Excel中ListObject对象:提取表内单元格的格式元素

《VBA高级应用30例》&#xff08;版权10178985&#xff09;&#xff0c;是我推出的第十套教程&#xff0c;教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开&#xff0c;这套教程案例与理论结合&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以…...

数据结构基础之《(19)—矩阵处理》

一、zigzag打印矩阵 Z字形打印矩阵 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 打印顺序&#xff1a;1,2,7,13,8,3,4,9,14... 核心技巧&#xff1a;找到coding上的宏观调度 左上角有A、B两个点&#xff0c;A往右一步一步走&#xff0c;B往下一步一步走 写一个…...

用Python写一个算24点的小程序

一、运行界面 二、显示答案——递归介绍 工作流程&#xff1a; 1. 基本情况&#xff1a;函数首先检查输入的数字列表 nums 的长度。如果列表中只剩下一个数字&#xff0c;它会判断这个数字是否接近 24&#xff08;使用 abs(nums[0] - 24) < 1e-10 来处理浮点数精度问题&…...

基于深度学习的网络摄像头图像实时分类实践:从理论到完整实现

引言&#xff1a;智能视觉感知的新可能 在人工智能技术蓬勃发展的今天&#xff0c;实时图像分类作为计算机视觉的基础任务之一&#xff0c;正在深刻改变着我们的生活。从智能手机的人脸解锁到无人超市的自动结算系统&#xff0c;从工业质检的缺陷检测到医疗影像的辅助诊断&…...

C++ 算法竞赛STL以及常见模板

目录 STL /*═══════════════ Vector ═══════════════*/ /*════════════════ Pair ════════════════*/ /*══════════════ String ════════════════*/ /*══════════…...

【资料分享】wireshark解析脚本omci.lua文件20250306版本发布(独家分享)

引言 omci.lua文件是Wireshark的OMCI协议解析插件的核心组件。它配合BinDecHex.lua&#xff0c;可以解析OMCI协议的数据包&#xff0c;提取出消息类型、受管实体标识、受管实体属性等关键信息&#xff0c;并以人类可读的形式显示在Wireshark的解码视图中&#xff0c;方便研发人…...

(dfs 单词搜索)leetcode 79

核心思路 用双重循环以所有的位置都作为起始点开始遍历 设置边界条件 上下左右都搜一次&#xff0c;不合适就回来&#xff0c;二叉树思想 经过的结点设置"#避免重复搜索导致数据混乱 递归完后要还原原字符 #include<iostream> #include<vector> #include&l…...

Java常用集合与映射的线程安全问题深度解析

Java常用集合与映射的线程安全问题深度解析 一、线程安全基础认知 在并发编程环境下&#xff0c;当多个线程同时操作同一集合对象时&#xff0c;若未采取同步措施&#xff0c;可能导致以下典型问题&#xff1a; 数据竞争&#xff1a;多个线程同时修改数据导致结果不可预测状…...

【实战ES】实战 Elasticsearch:快速上手与深度实践-5.1.1热点分片识别与均衡策略

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 5.1.1 Filebeat Logstash ES Kibana 全链路配置实1. 架构设计与组件选型1.1 技术栈对比分析1.2 硬件配置推荐 2. Filebeat 高级配置2.1 多输入源配置2.2 性能优化参数 3.…...

服务端和客户端通信(TCP)

服务端 using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading.Tasks;namespace TeachTcpServer {class Program{static void Main(string[] args){#region 知识点一 …...

练习题:76

目录 Python题目 题目 题目分析 需求理解 关键知识点 实现思路分析 复杂度分析 可能遇到的问题及注意事项 代码实现 代码解释 1. 类的定义与属性初始化 2. 定义属性的访问器&#xff08;getter&#xff09;方法 3. 定义属性的修改器&#xff08;setter&#xff09…...

SpringBoot3项目-创建及使用

简单的介绍后端SpringBoot3项目&#xff0c;从0到1搭建一个完整项目&#xff0c;给老项目源码升级备用的知识点 一、创建项目 1、打开IDEA&#xff0c;通过New Project创建项目&#xff0c;如下图&#xff1a; 2、选择Spring Initializr&#xff0c;配置好项目信息&#xf…...

前端 | 向后端传数据,判断问题所在的调试过程

目录 ​编辑 1. 在 vue 文件中&#xff0c;在调用函数之前 先打印传入的数据 2. 在 js 文件中&#xff0c;打印接收到的数据 3. 在浏览器 Network 面板查看请求数据 4. 在 server.js 中查看请求数据 5. 确保 JSON 格式正确 知识点&#xff1a;JSON.stringify(req.body, …...

Python爬虫入门实战:爬取博客文章数据并保存

Python爬虫入门实战&#xff1a;爬取博客文章数据并保存 概述 本文将介绍如何使用Python的requests和BeautifulSoup库实现一个简单的网页爬虫&#xff0c;通过实际案例演示如何爬取博客文章数据并存储到本地文件。本文适合Python爬虫初学者&#xff0c;通过案例快速掌握基本爬…...

用python 的 sentiment intensity analyzer的情感分析器,将用户评论进行分类

SentimentIntensityAnalyzer 是 nltk&#xff08;Natural Language Toolkit&#xff09;库中的一个工具&#xff0c;用于进行情感分析。它会为文本返回四个得分&#xff1a;负向情感得分&#xff08;neg&#xff09;、中性情感得分&#xff08;neu&#xff09;、正向情感得分&a…...

Android Framework 常见面试题

以下是常见的 Android Framework 面试题&#xff0c;涵盖基础到高级知识点&#xff0c;帮助准备面试&#xff1a; 一、基础问题 Android 系统架构分层 描述 Android 系统的四层架构&#xff08;Linux Kernel、Native、Framework、Application&#xff09;及各层职责。 Zygote …...

如何面向DeepSeek编程,打造游戏开发工具集,提升工作效率

最近我在思考&#xff1a; 如何基于DeepSeek&#xff0c;来提升工作效率&#xff0c;构建高效游戏开发工作流。 方向有两个: A: 基于DeepSeek私有代码框架&#xff0c;让它完成项目代码的续写; B: 基于DeepSeek来创作一些工具&#xff0c;使用工具来提升效率&#xff0c;如…...

IDE集成开发环境MyEclipse中安装SVN

打开Myeclipse的help菜单----install from site 点击add弹出对话框 在输入框中输入对应内容 http://subclipse.tigris.org/update_1.10.x 点击OK之后&#xff0c;会刷新出两个选项&#xff0c;需要选中的 点击next&#xff0c;出现许可的时候选中同意&#xff0c;一直结束等…...

QT中使用C++调用 python脚本

1、使用QT Creator 新建项目 2、添加Python解释器 在.pro 文件中添加python头文件与链接库 INCLUDEPATH -I /usr/include/python3.8/ LIBS -L /usr/lib/python3.8/config-3.8-x86_64-linux-gnu -lpython3.8本文实验为ubuntu自带python3.8&#xff0c;虚拟环境中的python解释…...

C语言学习day25:WinAPI编程进阶07-游戏辅助时钟周期事件、定时器消息

接下来我们说一下时间周期&#xff08;定时器&#xff09;事件 我们接下来继续用上一章中的代码来举例 这次课程我们需要用的函数SetTimer&#xff08;&#xff09;函数和KillTimer&#xff08;&#xff09;函数 SetTimer() 语法&#xff1a; UINT_PTR SetTimer([in, opti…...