Yang's blog Yang's blog
首页
后端开发
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

xiaoyang

尽人事,听天命
首页
后端开发
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • System

    • HomeBrew介绍
  • Git

    • Git 命令入门指南
  • shell

    • shell编程中常用的符号
  • docker

    • Docker介绍
    • Dockerfile :构建自己的 Docker 镜像
    • Docker Compose :容器编排工具
  • Linux

    • Linux基础知识
    • Linux 文件系统
      • 1. 文件系统概述
        • 1.1 什么是文件系统?
        • 1.2 文件系统的核心组成
      • 2. 文件系统的类型
        • 2.1 常见文件系统
        • 2.2 Linux 文件类型
      • 3. 挂载与分区基础
        • 3.1 什么是分区?
        • 3.11 分区的概念
        • 3.12 查看分区
        • 3.13 分区工具
        • 3.2 什么是挂载?
        • 3.21 挂载的定义
        • 3.22 Linux 文件系统的特点
        • 3.3 挂载与分区的关系
        • 3.31 分区是前提,挂载是桥梁
        • 3.32 自动挂载 vs 手动挂载
        • 3.4 挂载操作实战
        • 3.41 查看当前挂载情况
        • 3.42 手动挂载分区
        • 3.43 卸载分区
        • 3.44 挂载其他设备
      • 4.符号链接与硬链接
        • 4.1 硬链接(Hard Link)
        • 4.2 符号链接(Symbolic Link)
        • 4.3 硬链接与符号链接的区别
        • 4.4 何时使用硬链接和符号链接?
        • 4.5 测试两者的行为
      • 5. 文件权限与管理
        • 5.1 Linux 访问权限
        • 5.11 文件权限的组成
        • 5.12 查看文件权限
        • 5.2 修改文件权限
        • (1)文字设定法
        • (2)数字设定法
        • 5.3 修改文件所有者与组
        • 5.31 修改文件所有者
        • 5.32 修改文件所属组
        • 5.33 修改文件所有者和组
    • Linux 用户管理
    • Linux 权限与安全
    • Linux 网络管理
    • Linux 进程管理
    • Linux 常用命令
  • 命令手册
  • Linux
xiaoyang
2025-03-03
目录

Linux 文件系统

# Linux 文件系统详解

# 1**. 文件系统概述**

# 1.1 什么是文件系统?

文件系统(File System)是操作系统用来组织、存储和管理数据的一套机制,主要作用是:

  • 存储数据(文件存在哪里?)
  • 管理数据(如何快速找到文件?)
  • 访问控制(谁可以访问哪些文件?)

💡 通俗理解:

  • 把硬盘看成一本书,文件系统就是书的 目录+索引+内容排布规则。
  • 书有章节编号(类似于文件索引 inode),内容按页码存放(类似于数据块),不同书籍可能采用不同的目录结构(类似于不同的文件系统类型)。

# 1.2 文件系统的核心组成

Linux 文件系统主要包含以下几个部分:

组件 作用 类比
超级块(Superblock) 记录文件系统的元数据,如大小、文件数等 书籍目录页
索引节点(Inode) 存储文件的元信息(权限、大小、时间等) 书籍的章节索引
数据块(Data Block) 存储文件的实际内容 书籍的正文内容
目录(Directory) 组织文件结构,保存文件名和 inode 对应关系 书籍的章节列表

💡 查看 inode 信息

ls -i /etc/passwd  # 查看文件的 inode 号
stat /etc/passwd   # 查看文件的详细 inode 信息
1
2

# 2. 文件系统的类型

# 2.1 常见文件系统

文件系统 适用操作系统 特点
ext2/ext3/ext4 Linux ext4是目前主流的Linux文件系统
XFS Linux 适用于大规模存储
NTFS Windows Linux 只读支持(需额外安装 ntfs-3g 才能写入)
FAT16/FAT32 Windows 兼容性好,适用于U盘
iso9660 光盘 只读文件系统
NFS Linux/Unix 用于网络文件共享

# 2.2 Linux 文件类型

  1. 普通文件 (-):文本、图片、视频等。
  2. 目录文件 (d):包含子目录和文件。
  3. 链接文件 (l):类似 Windows 快捷方式。
  4. 设备文件 (b、c):硬件设备,如 /dev/sda。
  5. 管道文件 (p):用于进程间通信。

# 3. 挂载与分区基础

在 Linux 系统中,分区 和 挂载 是存储管理的核心概念。无论是硬盘、U 盘还是光盘,要在 Linux 中访问这些设备上的数据,都离不开这两个步骤。本文将详细介绍什么是分区、挂载的作用,以及如何在 Linux 中操作它们,带你从零基础理解存储管理的奥秘。

# 3.1 什么是分区?

# 3.11 分区的概念

分区是将物理存储设备(如硬盘)分割成多个独立逻辑单元的过程。每个分区可以看作一个单独的“磁盘”,拥有自己的文件系统和数据存储空间。

  • 为什么要分区?

    • 隔离数据:将系统文件、用户数据分开,增强安全性。
    • 多系统支持:在一块硬盘上安装多个操作系统(如 Linux 和 Windows)。
    • 优化性能:不同分区可以用不同文件系统(如 ext4、NTFS)。
    • 管理方便:限制某些分区的大小,避免数据无序增长。
  • 分区类型:

    • 主分区:一块硬盘最多 4 个,直接存储数据。
    • 扩展分区:解决主分区数量限制,本身不存储数据,包含逻辑分区。
    • 逻辑分区:在扩展分区内创建,分区数量无严格限制。

# 3.12 查看分区

在 Linux 中,可以用命令查看硬盘的分区情况:

  • lsblk:列出块设备及其分区。

    • 示例输出:
      NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      sda      8:0    0  1.8T  0 disk 
      |-sda1   8:1    0  200G  0 part /
      |-sda2   8:2    0    1K  0 part 
      \-sda5   8:5    0  1.6T  0 part /home
      
      1
      2
      3
      4
      5
      • sda 是硬盘,sda1、sda2、sda5 是分区。
      • MOUNTPOINT 表示挂载点(如 / 和 /home)。
  • fdisk -l:列出所有分区表(需 root 权限)。

    • 示例:sudo fdisk -l /dev/sda

# 3.13 分区工具

  • fdisk:传统的分区工具,适合初学者。
    • 示例:sudo fdisk /dev/sda 进入交互模式。
  • parted:更现代,支持大容量磁盘。
  • gparted:图形化工具,适合桌面用户。

# 3.2 什么是挂载?

# 3.21 挂载的定义

挂载(mount) 是将分区或存储设备(包括文件系统)与 Linux 文件系统中的某个目录关联起来的过程。这个目录称为挂载点,挂载后,你可以通过该目录访问设备中的内容。

  • 比喻:挂载像是给硬盘分区“插上电源”,让它融入 Linux 的文件系统“大家庭”。未挂载的分区就像未通电的设备,无法直接使用。

  • 挂载的作用:

    • 访问数据:让分区内容以目录形式可见。
    • 统一管理:所有设备通过 / 下的目录访问,形成树状结构。
    • 灵活性:随时挂载或卸载设备。

# 3.22 Linux 文件系统的特点

Linux 的文件系统是单一的树状结构,以根目录(/)为起点。无论是本地硬盘还是外部 U 盘,都需要挂载到某个目录才能使用。这种设计与 Windows 的多盘符(如 C:、D:)不同。

  • 示例:
    • 分区 /dev/sda1 挂载到 /,成为根文件系统。
    • 分区 /dev/sda5 挂载到 /home,存放用户数据。

# 3.3 挂载与分区的关系

# 3.31 分区是前提,挂载是桥梁

  • 分区:物理上划分存储空间,创建独立的文件系统。
  • 挂载:将分区的文件系统接入 Linux 的目录树。

例如:

  1. 硬盘 sda 分成 sda1(200GB,ext4)和 sda5(1.6TB,ext4)。
  2. sda1 挂载到 /,运行系统;sda5 挂载到 /data,存储文件。
  3. 未挂载的 sda5,无法通过目录访问其数据。

# 3.32 自动挂载 vs 手动挂载

  • 自动挂载:
    • 系统启动时,根据 /etc/fstab 文件自动挂载关键分区(如 /、/home)。
    • 示例 /etc/fstab 配置:
      /dev/sda1  /  ext4  defaults  0  1
      /dev/sda5  /home  ext4  defaults  0  2
      
      1
      2
  • 手动挂载:
    • 用户通过 mount 命令挂载临时设备(如 U 盘、光盘)。
    • 示例:mount /dev/sdb1 /mnt

# 3.4 挂载操作实战

# 3.41 查看当前挂载情况

  • df -h:显示已挂载的分区及其使用情况。
    • 示例:
      Filesystem      Size  Used Avail Use% Mounted on
      /dev/sda1       200G   50G  140G  26% /
      /dev/sda5       1.6T  500G  1.1T  32% /home
      
      1
      2
      3
  • mount:列出所有挂载点。
    • 示例:/dev/sda1 on / type ext4 (rw,relatime)

# 3.42 手动挂载分区

假设你有一个未挂载的分区 /dev/sda5,想访问其中的数据:

  1. 创建挂载点:
    mkdir /mnt/data
    
    1
  2. 挂载分区:
    mount /dev/sda5 /mnt/data
    
    1
    • 如果是 NTFS 分区:mount -t ntfs /dev/sda5 /mnt/data
    • 支持中文:mount -t vfat /dev/sda5 /mnt/data -o utf8
  3. 验证挂载:
    df -h
    
    1
  4. 访问数据:
    ls /mnt/data
    
    1

# 3.43 卸载分区

用完后卸载:

umount /mnt/data
1
  • 或:umount /dev/sda5
  • 注意:卸载前确保没有进程在使用该挂载点,否则会报错。

# 3.44 挂载其他设备

意思就是你插入优盘,光盘,物理盘并不能用,你要挂载才能访问

  • U 盘:
    mount /dev/sdb1 /mnt/usb
    
    1
  • 光盘:
    mount /dev/sr0 /media/cdrom
    
    1
  • ISO 文件:
    mount -o loop disk.iso /mnt/iso
    
    1

# 4.符号链接与硬链接

符号链接(Symbolic Link)和硬链接(Hard Link)是两种不同的文件链接方式,在 Linux 和 Unix 系统中广泛使用。它们的主要作用是提供对文件的不同访问路径,但在底层的实现方式和行为上存在显著区别。

# 4.1 硬链接(Hard Link)

硬链接是指向同一个文件数据块(inode)的多个文件名。它们共享相同的 inode 号,即多个文件名指向同一物理文件,因此无论哪个名称被修改,数据都会同步变化。

特点

  • 硬链接与原文件共享相同的 inode 号 和 数据块,即指向同一个物理文件。
  • 删除其中一个硬链接,文件数据不会被删除,只有当所有硬链接都被删除时,数据才会真正被移除。
  • 硬链接只能用于同一文件系统(因为 inode 号在不同文件系统中是独立的)。
  • 不能对目录创建硬链接(防止形成循环)。

创建硬链接

ln 原文件 硬链接文件
1

示例:

touch file1          # 创建一个文件
ln file1 file2       # 创建 file1 的硬链接 file2
ls -li               # 查看 inode 号
1
2
3

输出示例:

1001 -rw-r--r-- 2 user user 0 Mar 3 12:00 file1
1001 -rw-r--r-- 2 user user 0 Mar 3 12:00 file2
1
2

可以看到 file1 和 file2 共享相同的 inode 号(1001)。


# 4.2 符号链接(Symbolic Link)

符号链接类似于 Windows 的快捷方式,它只是一个指向目标文件路径的特殊文件,而不是直接指向数据块。

特点

  • 符号链接拥有独立的 inode 号,但其内容仅存储了目标文件的路径。
  • 可以跨文件系统,甚至可以指向不存在的文件(即“悬空”或“死链接”)。
  • 可以对目录创建符号链接(这在管理目录结构时非常有用)。
  • 删除符号链接不会影响目标文件,但如果删除目标文件,符号链接就会变成“悬空”状态(无法访问)。

创建符号链接

ln -s 原文件 符号链接文件
1

示例:

ln -s file1 symlink1   # 创建指向 file1 的符号链接
ls -l
1
2

输出示例:

lrwxrwxrwx 1 user user 5 Mar 3 12:00 symlink1 -> file1
1

这里 symlink1 指向 file1,l 表示这是一个符号链接。


# 4.3 硬链接与符号链接的区别

特性 硬链接(Hard Link) 符号链接(Symbolic Link)
inode 共享 是(指向同一 inode) 否(拥有独立 inode)
指向目标 直接指向数据块 仅存储目标路径
可跨文件系统 否 是
可指向目录 否 是
影响目标文件 共享数据,影响同步 只存储路径,不影响目标数据
删除目标文件的影响 不影响其他硬链接 符号链接变成“悬空”状态

# 4.4 何时使用硬链接和符号链接?

  • 使用硬链接的情况
    • 需要多个文件名共享同一数据,确保文件数据一致(如日志文件的不同版本)。
    • 目标文件不会移动或跨文件系统。
  • 使用符号链接的情况
    • 需要在不同文件系统间创建链接(如 /usr/bin 下的命令工具指向 /bin 目录)。
    • 需要创建目录的快捷方式(如 /var/www/html 软链接到 /home/user/website)。
    • 可能删除和替换目标文件,而不影响符号链接的路径指向。

# 4.5 测试两者的行为

touch testfile
ln testfile hardlink
ln -s testfile symlink
ls -li
1
2
3
4

输出:

1002 -rw-r--r-- 2 user user 0 Mar 3 12:00 testfile
1002 -rw-r--r-- 2 user user 0 Mar 3 12:00 hardlink
1003 lrwxrwxrwx 1 user user 8 Mar 3 12:00 symlink -> testfile
1
2
3
  • testfile 和 hardlink 共享 inode 号 1002。
  • symlink 具有自己的 inode 1003,指向 testfile。

删除 testfile 后:

rm testfile
ls -l
1
2

输出:

-rw-r--r-- 1 user user 0 Mar 3 12:00 hardlink
lrwxrwxrwx 1 user user 8 Mar 3 12:00 symlink -> testfile (broken)
1
2
  • hardlink 仍然保留数据。
  • symlink 变成了“悬空”链接(broken link)。

# 5. 文件权限与管理

在 Linux 中,文件和目录的访问权限至关重要,它决定了谁能查看、修改或执行文件。正确的权限管理可以防止数据泄露和误操作。

# 5.1 Linux 访问权限

# 5.11 文件权限的组成

Linux 中,每个文件或目录的权限分为三类用户:

  • 所有者 (User, u): 创建文件的用户
  • 同组用户 (Group, g): 与所有者属于相同用户组的用户
  • 其他用户 (Others, o): 以上两者之外的所有用户

权限由 10 个字符组成:

-rwxr-xr--
1
位置 含义 示例
第 1 个字符 文件类型 - 普通文件, d 目录, l 软链接
2~4 位 所有者权限 rwx(可读、可写、可执行)
5~7 位 组权限 r-x(可读、可执行)
8~10 位 其他用户权限 r--(可读)

# 5.12 查看文件权限

使用 ls -l 命令查看文件权限:

ls -l example.txt
1

示例输出:

-rw-r--r--  1 user group  1024 Mar 3 10:00 example.txt
1

说明:

  • -:普通文件(若为 d 表示目录)
  • rw-:所有者权限(可读写)
  • r--:同组用户权限(仅可读)
  • r--:其他用户权限(仅可读)
  • user:文件所有者
  • group:文件所属组

# 5.2 修改文件权限

# (1)文字设定法

chmod [用户类别] [操作符] [权限] 文件名
1
符号 作用
+ 添加权限
- 删除权限
= 设定权限(清空其他权限)

示例

chmod u+x file.txt   # 赋予所有者执行权限
chmod o-r file.txt   # 取消其他用户的读权限
chmod g=rw file.txt  # 设定同组用户可读写
chmod a+x script.sh  # 赋予所有用户执行权限
1
2
3
4

# (2)数字设定法

每种权限对应一个数值:

  • 读(r)= 4
  • 写(w)= 2
  • 执行(x)= 1

组合方式

  • rwx = 4+2+1 = 7
  • rw- = 4+2 = 6
  • r-- = 4

示例

chmod 755 file.txt   # rwxr-xr-x(所有者可读写执行,其他用户可读执行)
chmod 644 file.txt   # rw-r--r--(所有者可读写,其他用户仅可读)
chmod 700 file.txt   # rwx------(仅所有者可读写执行)
1
2
3

# 5.3 修改文件所有者与组

# 5.31 修改文件所有者

使用 chown 命令修改文件所有者:

sudo chown newuser file.txt
1

示例:

sudo chown alice document.txt  # 将文件所有者改为 alice
1

# 5.32 修改文件所属组

使用 chgrp 命令修改文件所属组:

sudo chgrp newgroup file.txt
1

示例:

sudo chgrp developers project_code.py  # 将文件所属组改为 developers
1

# 5.33 修改文件所有者和组

sudo chown newuser:newgroup file.txt
1

示例:

sudo chown alice:developers report.doc  # 更改所有者为 alice,所属组为 developers
1
编辑 (opens new window)
上次更新: 2025/04/03, 09:58:11

← Linux基础知识 Linux 用户管理→

最近更新
01
SseEmitter vs Flux 的本质区别与底层原理解析
05-12
02
操作系统
03-18
03
Nginx
03-17
更多文章>
Theme by Vdoing | Copyright © 2023-2025 xiaoyang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式