Linux文件系统详解
Linux文件系统概述
Linux文件系统是Linux操作系统的核心组件之一,它定义了文件和目录在存储设备上的组织结构。Linux采用了层次化的树形文件系统结构,以根目录(/)为起点,所有文件和目录都从根目录开始组织。
文件系统的特点
- 单一根目录:整个文件系统只有一个根目录(/)
- 层次结构:所有文件和目录都组织在树形结构中
- 一切皆文件:在Linux中,设备、目录、普通文件等都被视为文件
- 挂载机制:可以将不同的存储设备挂载到文件系统的不同位置
Linux文件系统层次结构标准(FHS)
Linux文件系统层次结构标准(Filesystem Hierarchy Standard, FHS)定义了Linux发行版中主要目录的用途和内容。
根目录(/)下的重要目录
/bin - 基本命令
存放系统启动和运行必需的基本命令,如ls、cp、mv等,这些命令对所有用户都可用。
# 查看/bin目录中的命令
ls /bin
/boot - 启动文件
包含系统启动所需的文件,包括内核文件和引导加载程序文件。
# 查看启动文件
ls /boot
/dev - 设备文件
包含设备文件,Linux将所有硬件设备都视为文件来处理。
# 查看设备文件
ls /dev
常见设备文件:
/dev/sda- 第一块硬盘/dev/tty1- 虚拟终端/dev/null- 空设备/dev/zero- 零设备
/etc - 配置文件
存放系统和应用程序的配置文件。
# 查看重要配置文件
ls /etc
重要配置文件:
/etc/passwd- 用户账户信息/etc/group- 用户组信息/etc/fstab- 文件系统挂载信息/etc/hosts- 主机名解析
/home - 用户主目录
每个用户的个人目录都存放在此目录下。
# 查看用户主目录
ls /home
/lib - 系统库文件
存放系统启动和运行必需的共享库文件。
# 查看系统库文件
ls /lib
/media - 可移动媒体挂载点
用于挂载可移动媒体(如U盘、光盘)的目录。
# 查看媒体挂载点
ls /media
/mnt - 临时挂载点
用于临时挂载文件系统的目录。
# 查看临时挂载点
ls /mnt
/opt - 可选应用程序
用于安装可选的第三方应用程序。
# 查看可选应用程序
ls /opt
/proc - 进程信息
虚拟文件系统,提供有关进程和系统状态的信息。
# 查看进程信息
ls /proc
/root - root用户主目录
root用户的主目录(不是/root目录)。
# 查看root用户主目录
ls /root
/run - 运行时数据
存放系统运行时需要的变量数据。
# 查看运行时数据
ls /run
/sbin - 系统管理命令
存放系统管理员使用的系统管理命令。
# 查看系统管理命令
ls /sbin
/srv - 服务数据
存放系统服务相关的数据。
# 查看服务数据
ls /srv
/sys - 系统信息
虚拟文件系统,提供设备和驱动程序的信息。
# 查看系统信息
ls /sys
/tmp - 临时文件
存放临时文件,系统重启时通常会被清空。
# 查看临时文件
ls /tmp
/usr - 用户程序
存放用户程序和文件,是文件系统的重要组成部分。
重要子目录:
/usr/bin- 用户命令/usr/lib- 用户库文件/usr/local- 本地安装的软件/usr/share- 共享数据
# 查看用户程序目录
ls /usr
/var - 可变数据
存放经常变化的文件,如日志文件、邮件等。
重要子目录:
/var/log- 系统日志文件/var/mail- 用户邮件/var/spool- 等待处理的任务/var/tmp- 临时文件(重启后保留)
# 查看可变数据目录
ls /var
文件类型
Linux系统中有多种文件类型,可以通过ls -l命令的第一列字符来识别:
普通文件(-)
最常见的文件类型,包括文本文件、二进制文件、图像文件等。
# 查看普通文件
ls -l /etc/passwd
# 输出示例:-rw-r--r-- 1 root root 1234 date passwd
目录(d)
用于组织其他文件和目录的容器。
# 查看目录
ls -ld /etc
# 输出示例:drwxr-xr-x 100 root root 12345 date etc
符号链接(l)
指向另一个文件或目录的快捷方式。
# 查看符号链接
ls -l /var/run
# 输出示例:lrwxrwxrwx 1 root root 4 date run -> /run
字符设备文件(c)
提供对字符设备的访问接口。
# 查看字符设备文件
ls -l /dev/tty
# 输出示例:crw-rw-rw- 1 root tty 5, 0 date tty
块设备文件(b)
提供对块设备的访问接口。
# 查看块设备文件
ls -l /dev/sda
# 输出示例:brw-rw---- 1 root disk 8, 0 date sda
套接字文件(s)
用于进程间通信的特殊文件。
# 查看套接字文件
ls -l /run/systemd/private
# 输出示例:srw-rw-rw- 1 root root 0 date private
命名管道(p)
用于进程间通信的FIFO特殊文件。
# 创建命名管道
mkfifo mypipe
ls -l mypipe
# 输出示例:prw-r--r-- 1 user user 0 date mypipe
文件路径
绝对路径
从根目录开始的完整路径。
# 绝对路径示例
/etc/passwd
/home/user/document.txt
/usr/bin/bash
相对路径
相对于当前目录的路径。
# 相对路径示例(假设当前目录为/home/user)
document.txt
./document.txt
../otheruser/file.txt
特殊路径符号
.- 当前目录..- 父目录~- 用户主目录-- 上一个工作目录
# 使用特殊路径符号
cd ~ # 切换到用户主目录
cd .. # 切换到父目录
cd - # 切换到上一个工作目录
pwd # 显示当前目录
文件系统操作命令
查看文件系统信息
# 查看文件系统挂载信息
df -h
# 查看文件系统类型
df -T
# 查看inode使用情况
df -i
挂载和卸载文件系统
# 挂载文件系统
sudo mount /dev/sdb1 /mnt/mydisk
# 查看挂载信息
mount | grep sdb1
# 卸载文件系统
sudo umount /mnt/mydisk
创建和管理目录
# 创建单个目录
mkdir mydir
# 创建多级目录
mkdir -p parent/child/grandchild
# 创建带权限的目录
mkdir -m 755 secure_dir
# 删除空目录
rmdir empty_dir
# 删除非空目录
rm -rf full_dir
查看目录内容
# 基本列出
ls
# 详细列表
ls -l
# 包含隐藏文件
ls -a
# 人类可读的文件大小
ls -lh
# 递归列出
ls -R
# 按时间排序
ls -lt
# 按大小排序
ls -lS
文件系统维护
检查文件系统
# 检查文件系统(需要卸载)
sudo fsck /dev/sdb1
# 检查根文件系统(在启动时)
sudo fsck -f /
磁盘配额管理
# 启用配额(需要在/etc/fstab中配置)
sudo quotacheck -cum /home
# 编辑用户配额
sudo edquota user
# 查看配额报告
quota -u user
实践练习
练习1:浏览文件系统结构
# 1. 查看根目录内容
ls /
# 2. 进入/etc目录并查看内容
cd /etc
ls -la
# 3. 查看passwd文件内容
cat /etc/passwd
# 4. 查看当前工作目录
pwd
# 5. 返回上一级目录
cd ..
练习2:创建目录结构
# 1. 在家目录创建项目目录结构
mkdir -p ~/projects/webapp/{src,docs,tests,config}
# 2. 查看创建的目录结构
tree ~/projects/webapp
# 或使用find命令
find ~/projects/webapp -type d
# 3. 在src目录下创建文件
touch ~/projects/webapp/src/{main.py,utils.py,config.py}
# 4. 查看文件创建结果
ls -l ~/projects/webapp/src
练习3:查看文件系统信息
# 1. 查看磁盘空间使用情况
df -h
# 2. 查看特定目录的磁盘使用情况
du -sh /home
# 3. 查看最大的目录
du -h /home | sort -hr | head -10
# 4. 查看inode使用情况
df -i
总结
Linux文件系统是Linux操作系统的基础,理解文件系统的结构和操作对于Linux用户和系统管理员至关重要。通过掌握FHS标准、文件类型、路径概念和相关命令,可以更好地管理和使用Linux系统。
关键要点:
- Linux采用单一根目录的树形文件系统结构
- FHS定义了主要目录的标准用途
- 理解不同文件类型的特征和用途
- 掌握文件系统操作命令的使用方法
- 定期维护文件系统以确保系统稳定运行