第4课:Linux文件系统

【腾讯云】语音识别准确率高,支持多语种,多场景,限时特惠,最低14.9元起

推广

【腾讯云】语音识别准确率高,支持多语种,多场景,限时特惠,最低14.9元起

Linux文件系统

Linux文件系统结构

1. 文件系统层次结构 (FHS)

根目录 (/)

# Linux文件系统是一个倒置的树形结构
# 所有文件和目录都从根目录 / 开始

ls -la /                      # 查看根目录内容

主要目录说明

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

2. 重要目录详解

/etc - 配置文件目录

/etc/passwd                   # 用户账户信息
/etc/group                    # 组信息
/etc/shadow                   # 用户密码 (加密)
/etc/fstab                    # 文件系统挂载配置
/etc/hosts                    # 主机名解析
/etc/resolv.conf              # DNS配置
/etc/crontab                  # 定时任务配置
/etc/ssh/                     # SSH配置目录
/etc/nginx/                   # Nginx配置目录
/etc/apache2/                 # Apache配置目录

/var - 可变数据目录

/var/log/                     # 系统日志
/var/cache/                   # 应用程序缓存
/var/lib/                     # 应用程序状态信息
/var/spool/                   # 队列数据 (邮件、打印等)
/var/tmp/                     # 临时文件 (重启后保留)
/var/www/                     # Web服务器文档根目录

/usr - 用户程序目录

/usr/bin/                     # 用户命令
/usr/sbin/                    # 系统管理命令
/usr/lib/                     # 库文件
/usr/share/                   # 共享数据
/usr/local/                   # 本地安装的软件
/usr/src/                     # 源代码

/proc - 进程信息目录 (虚拟)

/proc/cpuinfo                 # CPU信息
/proc/meminfo                 # 内存信息
/proc/version                 # 内核版本
/proc/mounts                  # 挂载信息
/proc/[PID]/                  # 进程信息目录

文件类型

1. 文件类型标识

ls -l 输出中的文件类型

-rw-r--r--                    # 普通文件 (-)
drwxr-xr-x                    # 目录 (d)
lrwxrwxrwx                    # 符号链接 (l)
crw-rw-rw-                    # 字符设备 (c)
brw-rw----                    # 块设备 (b)
prw-r--r--                    # 命名管道 (p)
srwxrwxrwx                    # 套接字 (s)

file命令查看文件类型

file /bin/ls                  # ELF 64-bit LSB executable
file /etc/passwd              # ASCII text
file /dev/sda1                # block special
file /home                    # directory

2. 特殊文件

设备文件

ls -l /dev/                   # 查看设备文件
/dev/sda                      # 第一个SATA硬盘
/dev/sda1                     # 第一个分区
/dev/tty1                     # 第一个虚拟终端
/dev/null                     # 空设备 (数据黑洞)
/dev/zero                     # 零设备 (产生零字节)
/dev/random                   # 随机数设备

虚拟文件系统

# /proc 文件系统
cat /proc/cpuinfo             # 查看CPU信息
cat /proc/meminfo             # 查看内存信息
cat /proc/version             # 查看内核版本

# /sys 文件系统
ls /sys/class/net/            # 查看网络接口
cat /sys/class/thermal/thermal_zone0/temp  # 查看温度

文件权限

1. 权限基础

权限表示

# 权限位组成
-rwxrwxrwx
│││││││││
│││││││└┴┴─ 其他用户权限 (other)
│││└┴┴──── 组权限 (group)  
│└┴─────── 所有者权限 (owner)
└────────── 文件类型

# 权限含义
r (read)    = 4           # 读权限
w (write)   = 2           # 写权限
x (execute) = 1           # 执行权限

数字权限表示

# 权限计算
rwx = 4+2+1 = 7           # 读写执行
rw- = 4+2+0 = 6           # 读写
r-x = 4+0+1 = 5           # 读执行
r-- = 4+0+0 = 4           # 只读
-wx = 0+2+1 = 3           # 写执行
-w- = 0+2+0 = 2           # 只写
--x = 0+0+1 = 1           # 只执行
--- = 0+0+0 = 0           # 无权限

# 常见权限组合
755 = rwxr-xr-x           # 所有者全权限,其他读执行
644 = rw-r--r--           # 所有者读写,其他只读
600 = rw-------           # 所有者读写,其他无权限

2. 权限管理命令

chmod - 修改权限

# 数字模式
chmod 755 file.txt            # 设置权限为755
chmod 644 *.txt               # 设置所有txt文件权限为644
chmod -R 755 directory        # 递归设置目录权限

# 符号模式
chmod u+x file.txt            # 给所有者添加执行权限
chmod g-w file.txt            # 移除组的写权限
chmod o=r file.txt            # 设置其他用户只有读权限
chmod a+r file.txt            # 给所有用户添加读权限

# 符号说明
u = user (所有者)
g = group ()
o = other (其他)
a = all (所有)

+ = 添加权限
- = 移除权限
= = 设置权限

chown - 修改所有者

chown user file.txt           # 修改文件所有者
chown user:group file.txt     # 修改所有者和组
chown :group file.txt         # 只修改组
chown -R user:group directory # 递归修改目录

# 示例
sudo chown root:root /etc/passwd
sudo chown www-data:www-data /var/www/html/

chgrp - 修改组

chgrp group file.txt          # 修改文件所属组
chgrp -R group directory      # 递归修改目录组

3. 特殊权限

SUID (Set User ID)

# SUID权限 (4000)
chmod 4755 file               # 设置SUID权限
ls -l /usr/bin/passwd         # 查看passwd命令的SUID权限
-rwsr-xr-x                    # s表示SUID权限

# SUID作用:以文件所有者身份执行

SGID (Set Group ID)

# SGID权限 (2000)
chmod 2755 directory          # 设置目录SGID权限
ls -ld /var/mail              # 查看邮件目录的SGID权限
drwxrwsr-x                    # s表示SGID权限

# SGID作用:
# - 文件:以文件所属组身份执行
# - 目录:新建文件继承目录的组

Sticky Bit

# Sticky权限 (1000)
chmod 1777 directory          # 设置Sticky权限
ls -ld /tmp                   # 查看/tmp目录的Sticky权限
drwxrwxrwt                    # t表示Sticky权限

# Sticky作用:只有文件所有者才能删除自己的文件

文件链接

创建硬链接

ln source.txt hardlink.txt    # 创建硬链接
ls -li source.txt hardlink.txt # 查看inode号 (相同)

# 硬链接特点
# 1. 共享相同的inode
# 2. 删除原文件不影响硬链接
# 3. 不能跨文件系统
# 4. 不能链接目录

查看链接数

ls -l file.txt                # 第二列显示链接数
stat file.txt                 # 查看详细信息包括链接数

创建符号链接

ln -s source.txt symlink.txt  # 创建符号链接
ln -s /path/to/source /path/to/link

# 符号链接特点
# 1. 有独立的inode
# 2. 可以跨文件系统
# 3. 可以链接目录
# 4. 删除原文件会导致链接失效

查看符号链接

ls -l symlink.txt             # 显示链接目标
lrwxrwxrwx 1 user user 10 Dec 20 10:30 symlink.txt -> source.txt

readlink symlink.txt          # 显示链接目标
file symlink.txt              # 显示链接信息

3. 链接管理

查找链接

find / -samefile source.txt   # 查找所有硬链接
find / -lname "*pattern*"     # 查找符号链接

删除链接

rm hardlink.txt               # 删除硬链接
rm symlink.txt                # 删除符号链接
unlink link.txt               # 删除链接 (另一种方法)

文件系统类型

1. 常见文件系统

Linux原生文件系统

ext4                          # 第四代扩展文件系统 (默认)
ext3                          # 第三代扩展文件系统
ext2                          # 第二代扩展文件系统
xfs                           # 高性能文件系统
btrfs                         # B-tree文件系统 (写时复制)
zfs                           # Z文件系统 (需要额外安装)

其他文件系统

ntfs                          # Windows NT文件系统
fat32                         # FAT32文件系统
exfat                         # 扩展FAT文件系统
iso9660                       # CD-ROM文件系统
nfs                           # 网络文件系统
cifs/smb                      # Windows共享文件系统

2. 查看文件系统信息

查看挂载的文件系统

df -T                         # 显示文件系统类型
mount                         # 显示所有挂载点
cat /proc/mounts              # 查看内核挂载信息
findmnt                       # 树形显示挂载信息

查看文件系统详细信息

# ext4文件系统
tune2fs -l /dev/sda1          # 查看ext4文件系统信息
dumpe2fs /dev/sda1            # 详细的ext4信息

# xfs文件系统
xfs_info /dev/sda1            # 查看xfs文件系统信息

# 通用方法
blkid                         # 显示所有块设备信息
lsblk -f                      # 显示块设备和文件系统

文件系统挂载

1. 挂载基础

mount命令

# 基本挂载
sudo mount /dev/sda1 /mnt     # 挂载分区到/mnt
sudo mount -t ext4 /dev/sda1 /mnt  # 指定文件系统类型

# 挂载选项
sudo mount -o ro /dev/sda1 /mnt     # 只读挂载
sudo mount -o rw /dev/sda1 /mnt     # 读写挂载
sudo mount -o noexec /dev/sda1 /mnt # 禁止执行
sudo mount -o nosuid /dev/sda1 /mnt # 禁止SUID

umount命令

sudo umount /mnt              # 卸载挂载点
sudo umount /dev/sda1         # 卸载设备
sudo umount -f /mnt           # 强制卸载
sudo umount -l /mnt           # 懒卸载 (稍后卸载)

2. 自动挂载配置

/etc/fstab文件

# 查看fstab文件
cat /etc/fstab

# fstab格式
# <设备> <挂载点> <文件系统> <选项> <dump> <fsck>
/dev/sda1 / ext4 defaults 0 1
/dev/sda2 /home ext4 defaults 0 2
/dev/sda3 none swap sw 0 0
UUID=xxx-xxx /boot/efi vfat defaults 0 1

# 字段说明
# 设备:设备文件或UUID
# 挂载点:挂载目录
# 文件系统:文件系统类型
# 选项:挂载选项
# dump:备份标志 (0=不备份, 1=备份)
# fsck:检查顺序 (0=不检查, 1=根分区, 2=其他分区)

常用挂载选项

defaults                      # 默认选项 (rw,suid,dev,exec,auto,nouser,async)
ro                           # 只读
rw                           # 读写
noexec                       # 禁止执行
nosuid                       # 禁止SUID
nodev                        # 禁止设备文件
auto                         # 启动时自动挂载
noauto                       # 不自动挂载
user                         # 允许普通用户挂载
nouser                       # 只允许root挂载

3. 特殊挂载

挂载ISO文件

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

挂载网络文件系统

# NFS挂载
sudo mount -t nfs server:/path /mnt/nfs

# CIFS/SMB挂载
sudo mount -t cifs //server/share /mnt/smb -o username=user,password=pass

绑定挂载

sudo mount --bind /source /target    # 绑定挂载
sudo mount --rbind /source /target   # 递归绑定挂载

磁盘管理

1. 磁盘分区

查看磁盘信息

lsblk                         # 列出块设备
fdisk -l                      # 列出所有磁盘分区
parted -l                     # 使用parted查看分区

分区工具

# fdisk (MBR分区)
sudo fdisk /dev/sda           # 对sda进行分区

# parted (GPT分区)
sudo parted /dev/sda          # 使用parted分区

# cfdisk (图形界面)
sudo cfdisk /dev/sda          # 图形化分区工具

2. 文件系统创建

格式化分区

# 创建ext4文件系统
sudo mkfs.ext4 /dev/sda1

# 创建xfs文件系统
sudo mkfs.xfs /dev/sda1

# 创建fat32文件系统
sudo mkfs.fat -F32 /dev/sda1

# 创建swap分区
sudo mkswap /dev/sda2
sudo swapon /dev/sda2

实用技巧

1. 文件查找技巧

按大小查找文件

find / -size +100M            # 查找大于100MB的文件
find / -size -1k              # 查找小于1KB的文件
du -sh /* | sort -hr          # 按大小排序显示目录

按时间查找文件

find / -mtime -7              # 7天内修改的文件
find / -atime +30             # 30天前访问的文件
find / -ctime -1              # 1天内状态改变的文件

2. 权限管理技巧

批量权限设置

# 设置目录和文件不同权限
find /path -type d -exec chmod 755 {} \;  # 目录755
find /path -type f -exec chmod 644 {} \;  # 文件644

# 使用chmod的X选项
chmod -R u+X /path            # 只给目录添加执行权限

3. 磁盘空间管理

清理磁盘空间

# 查找大文件
find / -size +1G -ls 2>/dev/null

# 清理临时文件
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*

# 清理日志文件
sudo journalctl --vacuum-time=7d  # 保留7天日志
sudo find /var/log -name "*.log" -mtime +30 -delete

总结

Linux文件系统要点:

  1. 目录结构:理解FHS标准,熟悉重要目录的作用
  2. 文件权限:掌握rwx权限和特殊权限的使用
  3. 文件链接:了解硬链接和符号链接的区别
  4. 文件系统:熟悉常见文件系统类型和特点
  5. 挂载管理:掌握手动挂载和自动挂载配置

下一课预告

在下一课中,我们将学习用户和权限管理,包括:

  • 用户账户管理
  • 组管理
  • sudo权限配置
  • 用户环境配置

💡 小贴士:文件权限是Linux安全的基础。建议在实际操作中多练习权限设置,理解不同权限对文件和目录的影响。

Vue3 + TypeScript 企业级项目实战

课程推荐

Vue3 + TypeScript 企业级项目实战
Python 全栈开发工程师培训

热门课程

Python 全栈开发工程师培训

📚 文章对你有帮助?请关注我的公众号,万分感谢!

获取更多优质技术文章,第一时间掌握最新技术动态

关注公众号

关注公众号

第一时间获取最新技术文章

添加微信

添加微信

技术交流 · 问题答疑 · 学习指导

评论讨论

欢迎留下你的想法和建议