Linux 文件系统天花板:FHS全套文件命令速通 📅 2026/7/17 4:41:53 作为开源操作系统的标杆Linux 凭借其灵活的定制性和强大的稳定性成为服务器端、嵌入式设备及开发者工作站的首选。但正是这种高度的灵活性也带来了一个潜在问题若每个用户都按照自己的习惯随意创建目录、存放文件不同系统之间的兼容性将大打折扣。为解决这一痛点FHSFilesystem Hierarchy Standard文件系统层次标准应运而生为 Linux 文件系统目录结构制定了统一规范让不同发行版的 Linux 系统具备了一致的文件组织逻辑。与此同时命令行作为 Linux 最核心、最高效的操作方式掌握其文件管理技巧是从 Linux 新手进阶为运维高手的必经之路。本文将结合 FHS 标准全面拆解 Linux 目录结构逻辑并详细讲解常用命令行文件管理工具的实操技巧助力大家高效驾驭 Linux 系统。文章目录一、文件系统层次结构Linux 文件系统的“通用语言”二、文件路径导航Linux 系统的“定位神器”导航路径 cd 和 pwd1pwd查看当前工作目录2cd切换工作目录3ls列出目录内容4tree树形展示目录结构5stat查看文件元数据属性6touch创建空文件 \ 更新文件时间戳7mkdir创建目录8cp复制文件与目录9mv移动文件与目录 \ 重命名10rm删除文件与目录11rmdir删除空目录12软连接13硬连接shell 扩展匹配文件三、总结一、文件系统层次结构Linux 文件系统的“通用语言”Linux遵循开源协议所以任何人都可以根据Linux的核心代码制作和发行版本。如果每个人都按自己的喜好在/目录下创建目录、存放文件将导致其他人无法快速使用他人的linux系统。为避免这样的情况FHS就应运而生对linux文件系统目录结构进行规范化。FHS(Filesystem Hierarchy Standard)采用树形结构组织文件定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外处理与矛盾处理。FHS定义了两层规范定义了 / 下面的各个目录应该要放什么文件数据。例如/etc应该要放置设置文件/bin与/sbin则应该要放置可执行文件等等。针对/usr及/var这两个目录的子目录来定义。例如/var/log放置系统登录文件、/usr/share放置共享数据等等。位置全称/核心含义/usr系统安装的软件、共享的库。重要的子目录有/usr/bin: 用户命令。/usr/sbin: 系统管理命令。 /usr/lib、/usr/lib64应用程序可调用的通用库文件。 /usr/local: 本地自定义软件。/etc系统配置文件。/varvariable系统可变数据在系统启动之间保持永久性如数据库、 缓存目录、日志文件、打印机后台处理文档和网站内容。/run自本次系统启动以来运行中的进程的运行数据包括进程ID文件和锁定文件等等。此目录中的内容在重启时重新创建。此目录合并了早期版本的Linux 中的/var/run和/var/lock。/home主目录是普通用户存储其个人数据和配置文件的位置。 每个用户有自己的位置例如 /home/csh。/root管理员root的主目录。/tmp供临时文件使用的全局可写空间。 10天内未访问、未更改或未修改的文件将自动从该目录中删除。 还有一个临时目录/var/tmp该目录中的文件如果在30天内未曾访问、更改或修改过 将被自动删除。/boot开机启动过程所需的文件。/devdevice包含特殊的设备文件供系统用于访问硬件。二、文件路径导航Linux 系统的“定位神器”导航路径 cd 和 pwd常见路径说明绝对路径以根(/)开头的路径用于指定文件的确切位置。当前工作路径当前所处的位置。相对路径不是以根(/)开头的路径相对当前工作目录的路径。1pwd查看当前工作目录pwdPrint Working Directory命令用于显示当前所处的工作目录帮助我们明确自身在文件系统中的位置避免操作时出现路径错误。# 查看当前工作目录 [cshcentos7 ~]$ pwd /home/csh2cd切换工作目录cdChange Directory命令用于切换工作目录是日常操作中使用最频繁的命令之一支持绝对路径、相对路径及快捷切换方式满足不同场景的切换需求。# 1. 绝对路径切换 [cshcentos7 ~]$ cd /usr/bin [cshcentos7 bin]$ pwd /usr/bin # 2. 相对路径切换当前目录为/usr/bin切换到/usr/share/doc [cshcentos7 bin]$ cd ../share/doc [cshcentos7 doc]$ pwd /usr/share/doc # 3. 快捷切换返回上一次所在目录 [cshcentos7 doc]$ cd - /usr/bin # 4. 快捷切换回到当前用户家目录两种方式均可 [cshcentos7 bin]$ cd # 或 [cshcentos7 bin]$ cd ~ [cshcentos7 ~]$ pwd /home/laoma # 5. 快捷切换回到父目录上一级目录 [cshcentos7 ~]$ cd .. [cshcentos7 home]$ pwd /home3ls列出目录内容lsList命令用于列出指定目录下的文件和子目录通过搭配不同选项可实现文件详细信息查看、递归检索、排序等功能是文件检索的核心命令。# 1. 基础用法列出当前目录下的文件和目录 [cshcentos7 ~]$ ls 公共 模板 视频 图片 文档 下载 音乐 桌面 # 2. -1数字1单列格式展示清晰直观 [cshcentos7 ~]$ ls -1 公共 模板 视频 图片 文档 下载 音乐 桌面 # 3. -R递归查看子目录内容展示目录完整结构 [cshcentos7 ~]$ ls -R /etc/yum /etc/yum: fssnap.d pluginconf.d protected.d vars version-groups.conf /etc/yum/fssnap.d: /etc/yum/pluginconf.d: fastestmirror.conf langpacks.conf # 4. -l长列表格式查看文件详细信息权限、所有者、大小、修改时间等 [cshcentos7 ~]$ ls -l /etc/hosts -rw-r--r--. 1 root root 197 11月 3 14:35 /etc/hosts # 5. -r反向排序按文件名从后往前排列 [cshcentos7 ~]$ ls -rl 总用量 0 -rw-rw-r--. 1 csh csh 0 11月 3 17:18 hello -rw-rw-r--. 1 csh csh 0 11月 3 17:18 file-2 # 6. -t按修改时间排序最新修改的文件排在最前 [cshcentos7 ~]$ ls -tl 总用量 0 -rw-rw-r--. 1 csh csh 0 11月 3 17:22 hello -rw-rw-r--. 1 csh csh 0 11月 3 17:18 abc # 7. -d只查看目录本身信息不列出目录内的文件 [cshcentos7 ~]$ ls -ld /etc/yum drwxr-xr-x. 6 root root 100 12月 13 10:42 /etc/yum4tree树形展示目录结构tree 命令以树形格式直观展示目录的层级结构便于我们快速了解目录的组织方式默认未安装可通过 yum 命令安装需 root 权限。# 安装 tree 工具CentOS 系统 [rootcentos7 ~]# yum install -y tree # 树形展示/etc/yum目录结构 [cshcentos7 ~]$ 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 files5stat查看文件元数据属性stat查看文件元数据属性stat 命令用于查看文件的元数据属性包括文件大小、权限、所有者、访问时间、修改时间等关键信息是了解文件状态的重要工具。[cshcentos7 ~]$ stat /etc/fstab 文件/etc/fstab 大小541 块8 IO 块4096 普通文件 设备fd00h/64768d Inode67160130 硬链接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 创建时间-6touch创建空文件 更新文件时间戳touch 命令的核心功能有两个一是创建新的空文件二是更新已有文件的访问时间、修改时间和改动时间适用于文件创建、时间戳同步等场景。# 1. 创建新的空文件 [cshcentos7 ~]$ touch new_file.txt [cshcentos7 ~]$ ls new_file.txt new_file.txt # 2. 更新已有文件的时间戳同步为当前系统时间 [cshcentos7 ~]$ ls -l new_file.txt -rw-rw-r--. 1 csh csh 0 12月 14 10:51 new_file.txt [cshcentos7 ~]$ touch new_file.txt [cshcentos7 ~]$ ls -l new_file.txt -rw-rw-r--. 1 csh csh 0 12月 14 13:36 new_file.txt # 3. -c 选项若文件不存在不创建任何文件避免误创建 [cshcentos7 ~]$ touch -c no_exist_file.txt [cshcentos7 ~]$ ls no_exist_file.txt ls: 无法访问no_exist_file.txt: 没有那个文件或目录7mkdir创建目录mkdirMake Directory命令用于创建新目录支持单目录创建、多目录批量创建及级联创建创建多层嵌套目录满足不同场景的目录创建需求。# 1. 创建单个目录 [cshcentos7 ~]$ mkdir lab [cshcentos7 ~]$ ls lab 公共 模板 视频 图片 文档 下载 音乐 桌面 # 2. 批量创建多个目录 [cshcentos7 ~]$ mkdir lab1 lab2 [cshcentos7 ~]$ ls lab lab1 lab2 公共 模板 视频 图片 文档 下载 音乐 桌面 # 3. -p 选项级联创建多层嵌套目录若父目录不存在自动创建 [cshcentos7 ~]$ mkdir -p dir1/dir2/dir3/dir4 [cshcentos7 ~]$ tree dir1 dir1 └── dir2 └── dir3 └── dir4 3 directories, 0 files8cp复制文件与目录cpCopy命令用于复制文件和目录是文件备份、迁移的核心工具支持单文件复制、多文件批量复制、目录复制及文件重命名复制搭配选项可实现覆盖提示、递归复制等功能。# 1. 复制单个文件到目标位置当前目录用“.”表示 [cshcentos7 ~]$ cd lab [cshcentos7 lab]$ cp /etc/hosts . [cshcentos7 lab]$ ls hosts # 2. 复制文件并重新命名 [cshcentos7 lab]$ cp /etc/hosts ./hosts_backup [cshcentos7 lab]$ ls hosts hosts_backup # 3. -i 选项目标文件已存在时提示是否覆盖避免误覆盖 [cshcentos7 lab]$ cp -i /etc/hosts ./hosts_backup cp是否覆盖./hosts_backup yes # 4. 复制多个文件到目标目录目标必须是目录 [cshcentos7 lab]$ cp /etc/passwd /etc/hosts.allow . [cshcentos7 lab]$ ls hosts hosts_backup hosts.allow passwd # 5. -r 选项递归复制目录复制目录必须加该选项 [cshcentos7 lab]$ cp -r /etc/yum . [cshcentos7 lab]$ ls hosts hosts_backup hosts.allow passwd yum # 6. 复制目录并重新命名 [cshcentos7 lab]$ cp -r /etc/yum ./yum_backup [cshcentos7 lab]$ ls hosts hosts_backup hosts.allow passwd yum yum_backup9mv移动文件与目录 重命名mvMove命令具有双重功能一是移动文件和目录到指定位置二是对文件或目录进行重命名操作高效且不会改变文件的属性和内容是文件迁移、重命名的首选工具。# 1. 移动单个文件到目标目录 [cshcentos7 lab]$ mv hosts_backup ../lab1 [cshcentos7 lab]$ ls ../lab1 hosts_backup # 2. 批量移动多个文件到目标目录 [cshcentos7 lab]$ mv passwd hosts /home/csh/lab1/ [cshcentos7 lab]$ ls ../lab1 hosts hosts_backup passwd # 3. 重命名文件目标位置与原位置一致仅修改名称 [cshcentos7 lab]$ mv hosts.allow hosts.allow_new [cshcentos7 lab]$ ls hosts.allow_new yum yum_backup # 4. 移动单个目录到目标位置 [cshcentos7 lab]$ mv yum ../lab1 [cshcentos7 lab]$ ls ../lab1 hosts hosts_backup passwd yum # 5. 批量移动多个目录到目标位置 [cshcentos7 lab]$ mv yum_backup ../lab1 [cshcentos7 lab]$ ls ../lab1 hosts hosts_backup passwd yum yum_backup10rm删除文件与目录rmRemove命令用于删除文件和目录支持单文件删除、多文件批量删除、目录删除等功能搭配选项可实现强制删除、递归删除是清理文件和目录的核心工具。**注意**rm 命令删除的文件无法恢复操作时需谨慎尤其是 root 用户避免误删系统关键文件。# 1. 删除单个文件 [cshcentos7 lab1]$ rm hosts [cshcentos7 lab1]$ ls hosts_backup passwd yum yum_backup # 2. 批量删除多个文件 [cshcentos7 lab1]$ rm hosts_backup passwd [cshcentos7 lab1]$ ls yum yum_backup # 3. -f 选项强制删除文件不提示确认适用于批量删除 [cshcentos7 lab1]$ rm -f test_file.txt # 4. -r 选项递归删除目录删除目录必须加该选项 [cshcentos7 lab1]$ rm -r yum [cshcentos7 lab1]$ ls yum_backup # 5. -fr 选项递归强制删除目录不提示确认快速清理目录 [cshcentos7 lab1]$ rm -fr yum_backup [cshcentos7 lab1]$ ls # 6. 清理实验环境批量删除多个目录 [cshcentos7 lab1]$ cd .. [cshcentos7 ~]$ rm -fr lab lab1 lab2 dir1 [cshcentos7 ~]$ ls 公共 模板 视频 图片 文档 下载 音乐 桌面11rmdir删除空目录rmdir 命令仅用于删除空目录若目录中包含文件或子目录删除会失败适用于清理空目录操作更安全可避免误删目录内的文件。# 删除空目录 [cshcentos7 ~]$ rmdir lab2 # 目录非空时删除失败 [cshcentos7 ~]$ rmdir lab1 rmdir: 删除 lab1 失败: 目录非空12软连接soft link也成为 symbolic link符号链接。[cshcentos7 ~]$ ls -dl /bin lrwxrwxrwx. 1 root root 7 11月 2 17:32 /bin - usr/bin # 创建软连接 [cshcentos7 ~]$ ln -s /var/tmp/ mytmp [cshcentos7 ~]$ ls -l mytmp lrwxrwxrwx. 1 csh csh 9 11月 4 11:40 mytmp - /var/tmp/ [cshcentos7 ~]$ ls mytmp abrt systemd-private-cc2ca9fc4c76487786a01ace1c2d3c02-bolt.service-7QksBe systemd-private-cc2ca9fc4c76487786a01ace1c2d3c02-chronyd.service-sy8uDv systemd-private-cc2ca9fc4c76487786a01ace1c2d3c02-colord.service-ZHr5vc systemd-private-cc2ca9fc4c76487786a01ace1c2d3c02-cups.service-RPtndj systemd-private-cc2ca9fc4c76487786a01ace1c2d3c02-rtkit-daemon.service-YLtiRi [cshcentos7 ~]$ ls /var/tmp/ abrt systemd-private-cc2ca9fc4c76487786a01ace1c2d3c02-bolt.service-7QksBe systemd-private-cc2ca9fc4c76487786a01ace1c2d3c02-chronyd.service-sy8uDv systemd-private-cc2ca9fc4c76487786a01ace1c2d3c02-colord.service-ZHr5vc systemd-private-cc2ca9fc4c76487786a01ace1c2d3c02-cups.service-RPtndj systemd-private-cc2ca9fc4c76487786a01ace1c2d3c02-rtkit-daemon.service-YLtiRi [cshcentos7 ~]$ touch mytmp/myfile [cshcentos7 ~]$ ls /var/tmp/myfile /var/tmp/myfile13硬连接硬链接就是一个普通文件。相当于可以通过多个文件名访问同一个数据块。任何一个文件发生的变化其他文件也跟着变。[cshcentos7 lab]$ cp /etc/hosts ./hosts-1 # 创建硬链接 [cshcentos7 lab]$ ln hosts-1 hosts-2 [cshcentos7 lab]$ ls -l hosts-1 hosts-2 -rw-r--r--. 2 csh csh 158 11月 4 13:34 hosts-1 -rw-r--r--. 2 csh csh 158 11月 4 13:34 hosts-2 # 两个文件的inode是相同的 [cshcentos7 lab]$ ls -i1 hosts-1 hosts-2 33554556 hosts-1 33554556 hosts-2 # 更新hosts-1时间hosts-2也跟着一起变动 [cshcentos7 lab]$ touch hosts-1 [cshcentos7 lab]$ ls -l hosts-1 hosts-2 -rw-r--r--. 2 csh csh 158 11月 4 13:36 hosts-1 -rw-r--r--. 2 csh csh 158 11月 4 13:36 hosts-2 # 更新hosts-1文件内容hosts-2也跟着一起变动 [cshcentos7 lab]$ cat hosts-1 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 [cshcentos7 lab]$ cat hosts-2 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 [cshcentos7 lab]$ echo hello world hosts-1 [cshcentos7 lab]$ cat hosts-1 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 hello world [cshcentos7 lab]$ cat hosts-2 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 hello worldshell 扩展匹配文件模式匹配项*由零个或更多字符组成的任何字符串。单独*不匹配隐藏文件。?任何一个字符。[abc…]位于两个方括号之间中的任何一个字符。[^abc…]或[!abc…]不在括起的类中的任何一个字符。~当前用户的主目录。~usernameusername用户的主目录。[[:alpha:]]任何字母字符相当于[a-Z]。[[:lower:]]任何小写字符。[[:upper:]]任何大写字符。[[:alnum:]]任何字母字符或数字相当于[a-Z0-9]。[[:punct:]]除空格和字母数字以外的任何可打印字符。[[:digit:]]或[0-9]从 0 到 9 的任何单个数字。[[:space:]]任何一个空白字符。这可能包括制表符、 换行符、回车符、 换页符或空格。示例 *匹配由零个或更多字符组成的任何字符串。单独*不匹配隐藏文件。# 准备文件 [cshcentos7 lab]$ touch file-1 file-2 file-a file-a1 file-a2 file-ab file-b [cshcentos7 lab]$ ls file-* file-1 file-2 file-a file-a1 file-a2 file-ab file-b # 查看文件名称是 file- 后跟1个字母的文件 [cshcentos7 lab]$ ls file-? file-1 file-2 file-a file-b # 查看文件名称是 file- 后跟2个字母的文件 [cshcentos7 lab]$ ls file-?? file-a1 file-a2 file-ab # 查看文件名称是 file- 后跟3个字母的文件 [cshcentos7 lab]$ ls file-??? ls: 无法访问file-???: 没有那个文件或目录示例 ?匹配任何一个字符。# 准备文件 [cshcentos7 lab]$ touch file-1 file-2 file-a file-a1 file-a2 file-ab file-b [cshcentos7 lab]$ ls file-* file-1 file-2 file-a file-a1 file-a2 file-ab file-b # 查看文件名称是 file- 后跟1个字母的文件 [cshcentos7 lab]$ ls file-? file-1 file-2 file-a file-b # 查看文件名称是 file- 后跟2个字母的文件 [cshcentos7 lab]$ ls file-?? file-a1 file-a2 file-ab # 查看文件名称是 file- 后跟3个字母的文件 [cshcentos7 lab]$ ls file-??? ls: 无法访问file-???: 没有那个文件或目录示例 [ ]匹配位于两个方括号之间中的任何一个字符。[cshcentos7 lab]$ ls file-? file-1 file-2 file-a file-b [cshcentos7 lab]$ ls file-[abc] file-a file-b [cshcentos7 lab]$ ls file-[12] file-1 file-2 [cshcentos7 lab]$ ls file-[^12] file-a file-b集合示例# 准备文件 [cshcentos7 lab]$ touch file-9 file-A file-Z file-z # 匹配所有数字 [cshcentos7 lab]$ ls file-[0-9] file-1 file-2 file-9 [cshcentos7 lab]$ ls file-[[:digit:]] file-1 file-2 file-9 # 匹配所有大写字母 [cshcentos7 lab]$ ls file-[[:upper:]] file-A file-Z # 匹配所有小写字母 [cshcentos7 lab]$ ls file-[[:lower:]] file-a file-b file-z # 匹配所有字母 [cshcentos7 lab]$ ls file-[a-Z] file-a file-A file-b file-z file-Z [cshcentos7 lab]$ ls file-[[:alpha:]] file-a file-A file-b file-z file-Z # 匹配所有字母和数字 [cshcentos7 lab]$ ls file-[[:alnum:]] file-1 file-2 file-9 file-a file-A file-b file-z file-Z示例 ~匹配用户家目录。[cshcentos7 lab]$ echo ~ /home/csh [cshcentos7 lab]$ cd ~ [cshcentos7 ~]$ pwd /home/csh [cshcentos7 ~]$ echo ~root /root [cshcentos7 ~]$ cd ~root -bash: cd: /root: 权限不够示例 { }[cshcentos7 lab]$ ls file-[abc] file-a file-b [cshcentos7 lab]$ ls file-{a,b,c} # 相当于下面命令 [cshcentos7 lab]$ ls file-a file-b file-c ls: 无法访问file-c: 没有那个文件或目录 file-a file-b # {1..5}表达一个范围 [cshcentos7 lab]$ ls file-{1..5} ls: 无法访问file-3: 没有那个文件或目录 ls: 无法访问file-4: 没有那个文件或目录 ls: 无法访问file-5: 没有那个文件或目录 file-1 file-2三、总结Linux 以 FHS 锚定文件系统秩序用标准化目录消解自由带来的混乱让万千发行版拥有共通的底层语言。命令行并非晦涩的指令堆砌而是系统与运维者对话的极简法门路径跳转、文件增删、软硬链接、通配匹配每一条命令都是穿透层级、调度资源的钥匙。跳出图形化操作的表层依赖吃透目录层级逻辑与文件管理本质方能挣脱可视化工具的束缚直抵操作系统内核脉络。运维的根基始于文件管理于方寸目录间理清系统脉络以规范约束随性以指令掌控全局方能在服务器运维、嵌入式开发的场景里举重若轻从容驾驭庞大而精密的 Linux 生态。