教程 linux tutorial

Linux 文件系统概述

文件系统是操作系统用于管理和存储数据的机制,它定义了数据如何组织、存储和访问。Linux 支持多种文件系统类型,每种都有其特定的用途和特点。

文件系统基本概念

文件系统的定义

文件系统是操作系统用来管理磁盘或分区上文件的方法和数据结构,它负责:

  • 文件的存储和检索
  • 文件和目录的命名规则
  • 文件属性的维护(如权限、所有权、时间戳)
  • 磁盘空间的管理和分配
  • 文件的访问控制

Linux 文件系统特点

层次化结构

Linux 使用单一的层次化目录结构,以根目录 / 开始,所有其他目录都从根目录分支。

一切皆文件

Linux 遵循"一切皆文件"的哲学,包括:

  • 普通文件
  • 目录
  • 设备文件
  • 管道和套接字
  • 符号链接

挂载机制

Linux 使用挂载机制将不同的分区和设备附加到文件系统树中。

Linux 支持的文件系统类型

磁盘文件系统

ext2, ext3, ext4

  • ext2:第二代扩展文件系统,无日志
  • ext3:在 ext2 基础上添加了日志功能
  • ext4:当前主流的 Linux 文件系统,支持更大的文件和分区,更快的性能
bash
# 创建 ext4 文件系统
sudo mkfs.ext4 /dev/sdb1

XFS

  • 高性能 64 位文件系统
  • 适合处理大文件和大容量存储
  • 常用于企业级应用和高性能计算
bash
# 创建 XFS 文件系统
sudo mkfs.xfs /dev/sdb1

Btrfs (B-tree File System)

  • 新一代文件系统,支持高级功能
  • 特性:快照、校验和、增量备份、RAID 支持
  • 仍在积极开发中
bash
# 创建 Btrfs 文件系统
sudo mkfs.btrfs /dev/sdb1

ZFS

  • 企业级文件系统,具有强大的数据完整性和存储功能
  • 特性:数据校验和、快照、复制、RAID-Z
  • 在某些发行版中需要单独安装
bash
# 在 Ubuntu 上安装 ZFS
sudo apt install zfsutils-linux
# 创建 ZFS 文件系统
sudo zpool create data /dev/sdb1

虚拟文件系统

procfs

  • 虚拟文件系统,提供内核和进程信息的接口
  • 挂载在 /proc 目录
  • 不占用实际磁盘空间
bash
# 查看 CPU 信息
cat /proc/cpuinfo
# 查看内存使用情况
cat /proc/meminfo

sysfs

  • 挂载在 /sys 目录
  • 提供内核设备树的接口
  • 用于设备管理和配置

tmpfs

  • 临时文件系统,存储在内存中
  • 挂载在 /tmp 和 /run 目录
  • 系统重启后数据丢失

网络文件系统

NFS (Network File System)

  • 允许不同计算机之间共享文件系统
  • 基于 TCP/IP 协议
bash
# 安装 NFS 客户端
sudo apt install nfs-common
# 挂载 NFS 共享
sudo mount server:/share /mnt

SMB/CIFS

  • Windows 使用的网络文件共享协议
  • Linux 通过 Samba 支持
bash
# 安装 Samba 客户端
sudo apt install cifs-utils
# 挂载 SMB 共享
sudo mount -t cifs //server/share /mnt -o username=user,password=pass

Linux 文件系统层次结构

根目录结构

Linux 文件系统层次标准 (FHS) 定义了主要目录的用途:

  • /:根目录,所有其他目录的起点
  • /bin:基本命令二进制文件
  • /boot:引导加载程序文件和内核
  • /dev:设备文件
  • /etc:系统配置文件
  • /home:用户主目录
  • /lib:共享库文件
  • /media:可移动媒体挂载点
  • /mnt:临时挂载点
  • /opt:可选软件包
  • /proc:进程信息虚拟文件系统
  • /root:root 用户主目录
  • /run:运行时数据
  • /sbin:系统管理命令
  • /srv:服务数据
  • /sys:系统设备和内核信息虚拟文件系统
  • /tmp:临时文件
  • /usr:用户程序和数据
  • /var:可变数据(日志、缓存等)

文件系统管理工具

分区和格式化工具

fdisk/gdisk

bash
# 列出所有磁盘和分区
sudo fdisk -l
# 编辑磁盘分区表
sudo fdisk /dev/sdb

parted

bash
# 启动交互式分区工具
sudo parted /dev/sdb

mkfs 系列工具

bash
# 格式化分区为指定文件系统
sudo mkfs.ext4 /dev/sdb1
sudo mkfs.xfs /dev/sdb2
sudo mkfs.btrfs /dev/sdb3

挂载和卸载

bash
# 挂载文件系统
sudo mount /dev/sdb1 /mnt/data

# 使用特定选项挂载
sudo mount -t ext4 -o rw,noatime /dev/sdb1 /mnt/data

# 卸载文件系统
sudo umount /mnt/data
# 或
sudo umount /dev/sdb1

自动挂载

通过 /etc/fstab 配置文件实现系统启动时自动挂载:

bash
# 编辑 fstab 文件
sudo nano /etc/fstab

# 添加类似以下的行
/dev/sdb1   /mnt/data   ext4    defaults    0   2

文件系统检查和修复

bash
# 检查并修复 ext 文件系统
sudo fsck.ext4 /dev/sdb1

# 检查并修复 XFS 文件系统
sudo xfs_repair /dev/sdb1

# 扫描所有文件系统(通常在启动时自动运行)
sudo fsck -A

文件系统性能

性能调优

挂载选项优化

bash
# 在 /etc/fstab 中添加性能优化选项
/dev/sdb1   /mnt/data   ext4    defaults,noatime,discard    0   2

文件系统特定优化

bash
# ext4 优化
sudo tune2fs -o journal_data_writeback /dev/sdb1

# XFS 优化
sudo xfs_info /dev/sdb1

监控文件系统

bash
# 查看磁盘使用情况
df -h

# 查看 inode 使用情况
df -i

# 查看磁盘 I/O 性能
iostat -x

# 查看文件系统统计信息
sudo dumpe2fs -h /dev/sdb1

文件系统安全

文件系统加密

LUKS (Linux Unified Key Setup)

bash
# 加密分区
sudo cryptsetup luksFormat /dev/sdb1
# 打开加密分区
sudo cryptsetup open /dev/sdb1 encrypted_data
# 创建文件系统
sudo mkfs.ext4 /dev/mapper/encrypted_data
# 挂载
sudo mount /dev/mapper/encrypted_data /mnt/encrypted

fscrypt

  • 支持对特定目录或文件进行加密
  • 不需要加密整个分区

数据备份

bash
# 使用 rsync 备份
sudo rsync -avz /source /backup

# 使用 tar 创建归档
tar -czvf backup.tar.gz /source

通过本教程,您应该已经了解了 Linux 文件系统的基本概念、类型和管理方法。文件系统是 Linux 系统的核心组件之一,深入理解它对于系统管理和故障排除至关重要。