Linux(CentOS)系统管理入门笔记(第三期)——文件系统(上篇):目录结构与路径导航——FHS 与 cdpwdls

Linux(CentOS)系统管理入门笔记(第三期)——文件系统(上篇):目录结构与路径导航——FHS 与 cd/pwd/ls

我的主页:AOwhisky,这里有更多运维系统性知识整理和其他有趣内容,欢迎与我一起探讨学习~

引言:文件系统,Linux 世界的“城市地图”

想象你刚搬到一座陌生的城市。这座城市规划得井井有条:住宅区、商业区、工业区、政府办公区、临时活动区各归其位。你不需要记住每一栋楼的精确坐标,只要知道“商业区在城东”“政府大院在市中心”,就能快速找到银行、邮局或派出所。

Linux 的文件系统就是这座“城市”。它的目录结构由 FHS(文件系统层次结构标准) 统一规划,确保了无论在哪个发行版上,配置文件都在 /etc,日志文件都在 /var/log,用户数据都在 /home。这套规范让 Linux 管理员可以“跨发行版迁徙”而不会迷路。

但仅有“地图”还不够,你还需要学会“导航”——当前在哪个位置?怎么去另一个目录?有哪些文件?它们是什么时候创建的?本期,我们将从根目录 / 出发,走遍 Linux 的“主要街区”,同时掌握 pwdcdlstreestattouch 六位“导航神器”。读完这一期,你将拥有在 Linux 文件王国中精准定位、自由穿行的能力。

— Compiled and Authored by Whisky — July 7 th, 2026

目录

  1. FHS:Linux 目录世界的“宪法”
  2. 根目录下的“十大地标”
  3. 路径导航基石:pwd 与 cd
  4. 目录内容查看:ls 的十八般武艺
  5. 目录可视化:tree 命令
  6. 文件元数据:stat 与 touch
  7. 总结与速查手册

1. FHS:Linux 目录世界的“宪法”

1.1 为什么需要 FHS?

Linux 是开源的,任何人都可以下载内核源码,制作自己的发行版。如果没有统一规范,A 发行版把配置文件放在 /cfg,B 发行版放在 /configs,C 发行版放在 /etc——那系统管理员每次换发行版都要重新学习,软件包在安装时也无法预知配置路径,整个生态将陷入混乱。

为了解决这个问题,FHS(Filesystem Hierarchy Standard,文件系统层次结构标准) 应运而生。它采用树形结构组织文件,明确定义了:

  • 根目录 / 下各个一级目录的用途(例如 /etc 必须放配置文件,/bin/sbin 必须放可执行文件)
  • /usr/var 两个关键目录的子目录规范(例如 /var/log 放日志,/usr/share 放共享数据)

💡 白话理解:FHS 就像是城市规划局颁布的“土地使用规范”——市中心(/)周围,哪块地建住宅、哪块地建工厂、哪块地做公园,都有明确规定。任何开发商(发行版制作者)都必须遵守。

1.2 FHS 的两层规范

规范层级适用范围典型示例
第一层/ 下的一级目录/etc(配置)、/bin(命令)、/home(用户数据)
第二层/usr/var 的子目录/usr/bin(用户命令)、/var/log(日志)

FHS 并非一成不变,它会随着 Linux 生态演进定期更新。但近二十年来,其核心框架已非常稳定,成为所有主流发行版(Red Hat、Debian、Ubuntu、SUSE)共同遵守的规范。

2. 根目录下的“十大地标”

让我们从根目录 / 出发,逐个了解最重要的系统目录。你可以用以下命令亲自查看:

# 查看根目录下的一级目录
ls -l /

2.1 一级目录详解

目录用途关键特征比喻
/usr系统软件与库的安装位置只读(理论),可被多台机器共享城市的“商业区”——所有商店、图书馆都在这
/etc系统配置文件永久、静态、本地特定城市的“政府大院”——规章制度都存于此
/var可变数据(日志、缓存、数据库)永久存储,但内容会增长/变化城市的“档案馆+物流中心”——不断有新增记录
/run运行时数据(PID 文件、锁文件)非永久,重启即清空城市的“临时指挥所”——只在当次开机有效
/home普通用户的主目录每个用户一个子目录,如 /home/laoma城市的“住宅小区”——每个住户一个门牌号
/rootroot 管理员的主目录不在 /home 下,独立存放城市“市长官邸”——独立于普通住宅区
/tmp全局临时文件空间全局可写,10 天自动清理城市的“临时堆场”——用完即走
/var/tmp长期临时文件30 天自动清理城市的“中转仓库”——比临时堆场保留更久
/boot启动引导文件(内核、GRUB)系统启动必需,通常单独分区城市的“地铁总控室”——启动整个交通系统的关键
/dev设备文件(硬盘、终端、随机数)特殊文件,供系统访问硬件城市的“各种管道接口”——通往硬件设备的通道

2.2 深入解读:几个容易混淆的目录

/usr — 不只是“用户”目录

很多新手以为 /usr 是“user”的缩写,存放用户数据。这是错的/usrUnix System Resources 的缩写,存放的是系统级的软件、库和文档,是所有用户共享的只读数据。

# /usr 的子目录结构
/usr/bin/      # 用户命令(普通用户可执行)
/usr/sbin/     # 系统管理命令(通常需要 root 权限)
/usr/lib/      # 32 位库文件
/usr/lib64/    # 64 位库文件(CentOS 7 默认)
/usr/local/    # 本地编译安装的软件(默认路径 /usr/local/bin)
/usr/share/    # 架构无关的共享数据(文档、图标、时区等)
/usr/src/      # 源码存放位置
/etc — 配置中心

/etc 存放几乎所有的系统级配置文件。无论是什么软件(网络、安全、服务),它的全局配置通常都在这里:

# 几个关键配置文件
/etc/hosts          # 主机名与 IP 映射(手动 DNS 解析)
/etc/hostname       # 系统主机名
/etc/fstab          # 文件系统挂载表(开机自动挂载)
/etc/passwd         # 用户账户信息
/etc/shadow         # 用户密码信息(加密)
/etc/sudoers        # sudo 权限配置
/etc/yum.repos.d/   # yum 软件源配置目录
/var — 动态数据的“大本营”

/var 存放的是运行时会发生变化的永久数据——它会增长、被修改、被轮转,但重启后数据依然存在。

/var/log/       # 系统日志(messages、secure、cron 等)
/var/cache/     # 应用程序缓存
/var/spool/     # 打印队列、邮件队列
/var/lib/       # 数据库文件(MySQL、PostgreSQL 等)
/var/tmp/       # 长期临时文件(30 天清理)
/tmp vs /var/tmp vs /run — 三大临时区
目录清理策略用途重启后
/tmp10 天未访问/未修改则自动删除短期临时文件(如编译器临时输出)清空
/var/tmp30 天未访问/未修改则自动删除长期临时文件(如编辑器备份文件)保留
/run不清理(但重启即消失)进程运行时数据(PID 文件、socket)清空

⚠️ 常见误区:有些新手会直接往 /tmp 里放重要的长期数据,结果 10 天后发现文件“不翼而飞”——这不是系统故障,是 FHS 的清理策略在正常工作。重要的东西请放 /home/var

2.3 静态 vs 动态 vs 运行时 对比

维度/usr/etc/var/run
内容特征静态、只读静态、可配置动态、增长瞬时、临时
跨机器共享✅ 可以(NFS 挂载)❌ 不建议(本地特定)❌ 不建议❌ 不可以
重启后完整保留完整保留完整保留清空重建
典型内容二进制程序、库文件配置文件日志、数据库、缓存PID 文件、锁文件

3. 路径导航基石:pwd 与 cd

有了“城市地图”,现在我们来学“导航”。三个最基础的命令构成了路径操作的核心。

3.1 绝对路径与相对路径

在开始命令之前,先厘清一个核心概念:

路径类型定义示例识别方法
绝对路径以根目录 / 开头,从根开始描述位置/home/laoma/file.txt第一个字符是 /
相对路径不以 / 开头,相对于当前工作目录./file.txt../etc/hosts第一个字符不是 /

相对路径的两个特殊符号:

符号含义示例
.当前目录cd .(原地不动)
..上一级目录(父目录)cd ..(回到上一级)

💡 最佳实践:在命令行交互中,相对路径更方便(省去大量输入);在脚本和配置文件中,优先使用绝对路径,避免因脚本在未知位置执行而找不到目标文件。

3.2 pwd — 我在哪?

pwd(Print Working Directory)显示当前所在目录的绝对路径,是你时刻需要的“定位仪”。

[laoma@centos7 ~]$ pwd
/home/laoma

[laoma@centos7 ~]$ cd /usr/share/doc/
[laoma@centos7 doc]$ pwd
/usr/share/doc

3.3 cd — 我要去哪?

cd(Change Directory)是切换目录的唯一命令。

基础用法
# 切换到绝对路径
[laoma@centos7 ~]$ cd /usr/bin
[laoma@centos7 bin]$ pwd
/usr/bin

# 切换回上一个目录(超级实用!)
[laoma@centos7 bin]$ cd -
/usr/share/doc
[laoma@centos7 doc]$ pwd
/usr/share/doc

# 直接 cd(不带参数)→ 回到用户家目录
[laoma@centos7 doc]$ cd
[laoma@centos7 ~]$ pwd
/home/laoma

# cd ~ 同样回到家目录
[laoma@centos7 ~]$ cd /etc
[laoma@centos7 etc]$ cd ~
[laoma@centos7 ~]$ pwd
/home/laoma
利用 .. 向上导航
# 从深层目录逐级向上
[laoma@centos7 ~]$ cd /usr/share/doc/at-spi2-core-2.28.0/
[laoma@centos7 at-spi2-core-2.28.0]$ pwd
/usr/share/doc/at-spi2-core-2.28.0

# 返回上一级(到 /usr/share/doc)
[laoma@centos7 at-spi2-core-2.28.0]$ cd ..
[laoma@centos7 doc]$ pwd
/usr/share/doc

# 连续向上两级(到 /usr/share)
[laoma@centos7 doc]$ cd ../../
[laoma@centos7 share]$ pwd
/usr/share

# 从深层目录直接跳到 /etc/yum(利用多个 ..)
[laoma@centos7 ~]$ cd /usr/share/doc/at-spi2-core-2.28.0/
[laoma@centos7 at-spi2-core-2.28.0]$ cd ../../../../etc/yum
[laoma@centos7 yum]$ pwd
/etc/yum

3.4 何时用绝对路径,何时用相对路径?

场景推荐原因
交互式操作(手敲命令)相对路径输入少、效率高
Shell 脚本绝对路径脚本可能在不同目录被调用,相对路径会错位
配置文件引用(如 fstab)绝对路径系统启动时工作目录未定义,必须用绝对路径
深度嵌套目录绝对路径(从根写起)避免一串 ../../../../ 让人眼花缭乱

4. 目录内容查看:ls 的十八般武艺

ls 是 Linux 中最常用的命令之一。它的核心功能是列出目录内容,但通过不同选项的组合,它可以展示文件权限、大小、时间、排序等丰富信息。

4.1 基础用法

# 列出当前目录所有非隐藏文件
ls

# 列出指定目录内容
ls /etc/yum

# 列出所有文件(包括 . 开头的隐藏文件)
ls -a

# 单列输出(每个文件占一行)
ls -1
# 输出:
# 公共
# 模板
# 视频
# 图片
# 文档
# 下载
# 音乐
# 桌面

4.2 长列表模式:-l —— 信息密度之王

[laoma@centos7 ~]$ ls -l /etc/hosts
-rw-r--r--. 1 root root 197 113 14:35 /etc/hosts

逐个字段解读:

字段示例值含义
第1位-文件类型(-普通文件、d目录、l软链接)
第2-4位rw-文件所有者(root)的权限:读+写
第5-7位r--文件所属组(root)的权限:只读
第8-10位r--其他人(other)的权限:只读
第2字段1硬链接数
第3字段root文件所有者(user owner)
第4字段root文件所属组(group owner)
第5字段197文件大小(字节)
第6-8字段11月 3 14:35最近修改时间
第9字段/etc/hosts文件名

4.3 排序与筛选选项

ls 默认按文件名字母顺序正向排序。以下几个选项在日常运维中极高频:

# 按时间排序(最新在前)—— 找最近改过的文件
ls -lt

# 按时间反向排序(最旧在前)
ls -ltr

# 只查看目录本身的信息(不列出目录内容)
ls -ld /etc/yum
# 输出:drwxr-xr-x. 6 root root 100 12月 13 10:42 /etc/yum

# 按大小排序(配合 -h 人类可读)
ls -lSh

# 递归查看子目录内容
ls -R /etc/yum

4.4 ls 常用选项速查表

选项作用示例场景
-l长格式显示(权限、大小、时间)查看文件详细信息
-a显示所有文件(含隐藏文件 . 开头)查看配置文件、环境变量文件
-A显示所有文件(不含 ...同上,但更干净
-h人类可读的大小(K/M/G)查看大文件时配合 -lh
-R递归列出子目录内容查看完整的目录树结构
-d只显示目录本身(不展开内容)查看目录自身的权限和属性
-t按修改时间排序(最新优先)定位最近修改的文件
-r反向排序配合 -t 看最旧文件
-S按文件大小排序找占用空间最大的文件
-1单列输出适合脚本处理或在终端中清晰展示

5. 目录可视化:tree 命令

ls -R 虽然能递归显示目录内容,但输出格式不够直观。tree 命令以树形结构展示目录层级,一目了然。

5.1 安装 tree

CentOS 7 默认不安装 tree,需要手动安装:

[root@centos7 ~]# yum install -y tree

5.2 基本用法

[laoma@centos7 ~]$ tree /etc/yum
/etc/yum
├── fssnap.d
├── pluginconf.d
│   ├── fastestmirror.conf
│   └── langpacks.conf
├── protected.d
│   └── systemd.conf
├── vars
│   ├── contentdir
│   └── infra
└── version-groups.conf

4 directories, 6 files

5.3 常用选项

# 限制显示层级(只看两层)
tree -L 2 /etc/yum

# 只显示目录(不显示文件)
tree -d /etc/yum

# 显示完整路径
tree -f /etc/yum

💡 实用场景:当你想快速了解一个陌生目录的结构时,tree -L 2 是最佳选择——它不会像 ls -R 那样输出成百上千行,而是给你一个“概览图”。

6. 文件元数据:stat 与 touch

6.1 stat —— 查看文件的“身份证”

stat 命令显示文件的元数据(metadata)——即“关于文件的数据”,而非文件内容本身。

[laoma@centos7 ~]$ stat /etc/fstab
  文件:"/etc/fstab"
  大小:541       	块:8          IO 块:4096   普通文件
设备:fd00h/64768d	Inode:67160130    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:system_u:object_r:etc_t:s0
最近访问:2022-12-14 11:09:49.628179033 +0800
最近更改:2022-12-13 10:38:44.625179973 +0800
最近改动:2022-12-13 10:53:38.563774524 +0800
创建时间:-
三种时间戳的区别(核心知识)
时间戳英文术语更新时机查看选项(ls
访问时间Access Time (atime)读取文件内容时更新(如 catlessls -lu
修改时间Modify Time (mtime)修改文件内容时更新(如 echo >>vim 保存)ls -l(默认)
状态改变时间Change Time (ctime)修改文件元数据时更新(如 chmodchownmvls -lc

⚠️ 常见误区:很多初学者把“修改时间”和“状态改变时间”混为一谈。记住——mtime 变的是内容,ctime 变的是属性mv 命令不改变文件内容,但会改变父目录的元数据,所以文件本身的 ctime 会更新,但 mtime 不变。

6.2 touch —— 创建文件与更新时间戳

touch 有两个核心功能:

  1. 文件不存在时 → 创建一个空文件
  2. 文件存在时 → 将其 atimemtime 更新为当前时间
创建空文件
# 创建单个文件
[laoma@centos7 ~]$ touch file1.txt
[laoma@centos7 ~]$ ls -l file1.txt
-rw-rw-r--. 1 laoma laoma 0 77 15:30 file1.txt

# 批量创建多个文件
[laoma@centos7 ~]$ touch file-{1..5}.txt
[laoma@centos7 ~]$ ls
file-1.txt  file-2.txt  file-3.txt  file-4.txt  file-5.txt
更新时间戳
# 将文件时间戳更新为当前时间
[laoma@centos7 ~]$ stat file1.txt | grep 最近
最近访问:2026-07-07 15:30:00.000000000 +0800
最近更改:2026-07-07 15:30:00.000000000 +0800

# 等待几秒后执行 touch
[laoma@centos7 ~]$ touch file1.txt
[laoma@centos7 ~]$ stat file1.txt | grep 最近
最近访问:2026-07-07 15:32:15.000000000 +0800
最近更改:2026-07-07 15:32:15.000000000 +0800
高级用法:参考时间戳
# 使用 -r 选项,将文件 A 的时间戳复制给文件 B
[laoma@centos7 ~]$ touch -r file1.txt file2.txt

# 使用 -t 选项,手动指定时间戳 [[CC]YY]MMDDhhmm[.ss]
[laoma@centos7 ~]$ touch -t 202401011200.00 oldfile.txt
[laoma@centos7 ~]$ ls -l oldfile.txt
-rw-rw-r--. 1 laoma laoma 0 11 2024 oldfile.txt
-c 选项:仅更新时间戳,不创建文件
# 文件不存在时不创建
[laoma@centos7 ~]$ touch -c non-existent-file.txt
[laoma@centos7 ~]$ ls non-existent-file.txt
ls: 无法访问non-existent-file.txt: 没有那个文件或目录

💡 实用场景

  • touch *.log 批量更新日志文件时间戳。
  • touch -r 将配置文件的时间戳标准化,便于版本对比。
  • touch -t 创建具有特定时间戳的文件,用于测试脚本的时间逻辑。

7. 总结与速查手册

7.1 核心知识点一览

主题关键点
FHS文件系统层次结构标准,统一了 Linux 目录布局
一级目录/usr(软件)、/etc(配置)、/var(动态数据)、/home(用户)、/tmp(临时)
绝对路径/ 开头,从根开始描述位置
相对路径不以 / 开头,相对于当前目录,... 是核心符号
pwd显示当前工作目录的绝对路径
cd切换目录,cd - 返回上一目录,cd ~ 回家
ls-l 长格式、-a 显示隐藏、-t 时间排序、-R 递归
tree树形结构展示目录,需安装
stat显示文件的三个时间戳:atime/mtime/ctime
touch创建空文件或更新时间戳,-r 参考模式、-t 指定时间

7.2 一级目录速查卡

目录一句话作用关键特性
/usr系统软件与库只读、可共享
/etc系统配置文件永久、本地特定
/var动态数据(日志/缓存/数据库)永久、可增长
/run运行时数据(PID/锁文件)重启即清空
/home普通用户家目录每个用户独立子目录
/rootroot 用户家目录独立于 /home
/tmp全局临时文件10 天自动清理、全局可写
/var/tmp长期临时文件30 天自动清理
/boot启动文件通常独立分区
/dev设备文件特殊文件、访问硬件接口

7.3 本章命令速查表

命令最常用法作用
pwdpwd显示当前绝对路径
cdcd /etccd -cd ~切换目录
lsls -lals -ltls -R列出目录内容
treetree -L 2 /etc树形展示目录结构
statstat /etc/hosts查看文件元数据与时间戳
touchtouch filetouch -r ref.txt target.txt创建文件或更新时间戳

7.4 常见错误排查指南

错误信息原因解决方案
-bash: cd: /xxx: No such file or directory目标目录不存在先用 ls 确认路径拼写,注意大小写敏感
Permission denied无权限进入该目录或查看文件使用 ls -ld 查看权限,联系管理员
command not found命令不存在或路径不在 PATH使用 which 命令名 检查,或用绝对路径执行
ls: cannot access 'xxx': Permission denied对父目录没有执行权限(x)检查父目录权限,用 chmod +x 修复(需授权)
文件“突然消失”文件放在 /tmp 超过 10 天被自动清理重要文件放 /home/var
cd .. 无法回到预期的目录当前目录是软链接,cd .. 回到链接所在的父目录而非目标父目录使用 cd -P .. 或先 cd -P 解析软链接

7.5 思考与拓展(原课后作业转化)

  1. 为什么 Linux 不像 Windows 那样有 C:、D: 盘符?
    → Linux 采用单一根目录树,所有存储设备都挂载(mount)到树中的某个目录(如 /mnt/data)下。这种设计更统一、更灵活,且与“一切皆文件”哲学一致。
  2. /usr/bin/usr/local/bin 有什么区别?
    /usr/bin 由系统包管理器(如 yum/dnf)管理,更新软件包时会覆盖;/usr/local/bin 供用户手动编译安装的软件使用,不会被系统包管理器覆盖。按 FHS 标准,本地编译的软件应当放在 /usr/local 下。
  3. 什么时候 cd 命令后不加任何参数?
    → 不加参数时,cd 会切换到用户的家目录($HOME),等价于 cd ~。如果当前已在根目录,cd 不会有任何变化。
  4. 如何在不进入目录的情况下,查看某个目录自身的详细信息(而非其内容)?
    → 使用 ls -ld 目录名-d 选项是关键,否则 ls 会展开目录内容。
  5. stat 中的三个时间戳,哪些会被 touch 命令更新?
    → 默认情况下,touch 更新 atime(访问时间)mtime(修改时间),而 ctime(状态改变时间) 会被系统自动更新为当前时间(因为文件元数据本身发生了变化)。

7.6 生产环境最佳实践

场景建议
日常导航多用 cd - 在“当前目录”和“上一个目录”之间快速切换
脚本编写文件路径一律使用绝对路径,避免因脚本执行位置变化而出错
查找最近修改的文件`ls -lt
理解系统目录定期用 tree -L 2 / 熟悉根目录结构,做到“脑中有图”
临时文件管理永远不要把重要数据放在 /tmp/var/tmp,它们会被自动清理
文件时间戳调试touch -t 创建指定时间的测试文件,验证脚本的时间逻辑

下期预告:掌握了文件系统的“地图”和“导航”,下一期我们将进入文件的增删改查实操——用 cp 复制、mv 移动/重命名、mkdir 创建目录、rm 删除文件/目录,以及软链接和硬链接的区别与实战。同时,我们还会学习 Shell 通配符(\*?[]{} 的批量匹配技巧——让你的文件操作效率提升一个数量级。敬请期待第四期!

— Compiled and Authored by Whisky — July 7 th, 2026
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值