Skip to content

tree 命令详解:树状看目录结构 ​

本文是 Linux 命令速查 中 tree 的从 0 到 1 详解。 目标:把 tree --help 里的每个选项讲清楚,多看几遍后,你在服务器上敲 tree --help 就知道该用哪个选项。 环境依据:tree v2.0.2(本沙箱已装;属 tree 包,未装系统用 yum install tree 或 apt install tree 安装)。

一、命令是干什么的 ​

tree 把一个目录的内容用树状图画出来,让你一眼看清"谁是谁的子目录、里面有哪些文件"。

  • 不带参数:以当前目录为根画一棵树;
  • 给目录名:画那个目录;
  • 加 -L 2:只看两层,避免整棵树刷屏。

ls 是平铺列表,tree 是立体结构——看项目骨架时 tree 舒服得多。

类比:ls 像把文件夹里的东西排成一行平铺出来;tree 像把文件夹一层层展开成一棵倒挂的树,父子关系一目了然。

它不随系统默认安装:Ubuntu/Debian 用 sudo apt install tree,RHEL/CentOS/Rocky 用 sudo yum install tree。

二、命令语法 ​

bash
tree [选项]... [目录]
  • [选项]:控制显示几层、含不含隐藏文件、要不要大小/权限/颜色等;
  • [目录]:要看谁;不写就看当前目录。

最简单的用法:

bash
tree

三、选项全表(对照 tree --help) ​

1. 控制"显示哪些内容、多深" ​

选项中文含义什么场景用
-a显示所有文件,包括隐藏文件想看 .git、.env 等
-d只列目录,不列文件只看骨架结构时
-L 层数只往下看指定层数最常用,tree -L 2 防刷屏
-l把软链接当目录继续跟随想顺着链接看真实目录时
-f每个名字前打印完整路径需要路径方便复制时
-x只在当前文件系统内,不进挂载点避免连带列出其他盘
-R到达最大层数后在每个目录里再跑一次配合 -L 用
--noreport结尾不打印"N directories, M files"统计输出要干净时

2. 控制"按名字筛" ​

选项中文含义什么场景用
-P 模式只显示匹配通配符的文件如 -P '*.py' 只看 Python 文件
-I 模式排除匹配的文件如 -I '*.py' 不看 py 文件
--matchdirs让 -P 连目录名一起匹配想按目录名过滤时
--ignore-case匹配时忽略大小写文件名大小写不一时
--filelimit #文件数超过 # 的目录不进入跳过 node_modules 这种大目录
--gitignore按 .gitignore 规则过滤看 git 项目时忽略被忽略的文件

3. 控制"显示哪些元信息" ​

选项中文含义什么场景用
-p显示权限看每个文件什么权限
-u显示属主看谁建的
-g显示属组看属组
-s显示字节大小精确大小
-h大小用人类可读(K/M)配合 -s,看大小舒服
--si同 -h,但按 1000 换算厂商口径
-D显示修改日期看新旧
--timefmt 格式自定义时间格式想要特定日期样式
-F给名字加类型标记(/目录、*可执行等)一眼区分类型
--inodes显示每个文件的 inode 号排查硬链接
--device显示每个文件所在设备号跨文件系统排查
-Q文件名加双引号文件名带空格时

4. 控制"排序和图形" ​

选项中文含义什么场景用
-v按版本号自然排序文件名带数字时
-t按修改时间排序找最近改动
-c按状态改变时间排序看属性改动
-r逆序倒过来
-U不排序(最快,按磁盘顺序)追求速度
--dirsfirst目录排在文件前看结构更清晰
--sort=X显式指定排序(name/version/size/mtime/ctime)用长选项
-i不画缩进连线输出给程序处理
-A用 ANSI 字符画缩进线终端不支持 Unicode 时
-n / -C关闭/开启颜色终端颜色异常时手动控

5. 导出成 XML / HTML / JSON ​

选项中文含义什么场景用
-o 文件名输出到文件而不是屏幕存一份目录树文档
-X输出 XML给程序解析
-J输出 JSON给程序解析
-H 网址输出 HTML 网页版做可点的目录树
-T 标题配合 -H 改网页标题自定义 HTML 标题

四、由浅入深的典型示例 ​

示例 1:基本树状 ​

bash
tree project
text
project
├── assets
│   └── logo.png
├── docs
│   └── readme.md
└── src
    ├── components
    │   └── Button.py
    ├── main.py
    └── utils
        └── helper.py

5 directories, 5 files

结尾统计:5 个目录、5 个文件。

示例 2:-L 限制层数(最常用) ​

bash
tree -L 2 project
text
project
├── assets
│   └── logo.png
├── docs
│   └── readme.md
└── src
    ├── components
    ├── main.py
    └── utils

5 directories, 3 files

只看两层,再深的 components/Button.py 就不展开了。项目大时必加 -L。

示例 3:-a 看隐藏文件 ​

bash
tree -a project
text
project
├── assets
│   └── logo.png
├── docs
│   └── readme.md
├── .hidden
└── src
    ├── components
    │   └── Button.py
    ├── main.py
    └── utils
        └── helper.py

5 directories, 6 files

多了 .hidden 这个默认不显示的隐藏文件。

示例 4:-d 只看目录骨架 ​

bash
tree -d project
text
project
├── assets
├── docs
└── src
    ├── components
    └── utils

5 directories

不显示任何文件,只看目录层级。

示例 5:-f 带完整路径 ​

bash
tree -L 1 -f project
text
project
├── project/assets
├── project/docs
└── project/src

3 directories, 0 files

示例 6:-h 可读大小 + -p 权限 ​

bash
tree -L 2 -h -p project
text
[drwxr-xr-x 4.0K]  project
├── [drwxr-xr-x 4.0K]  assets
│   └── [-rw-r--r--    2]  logo.png
├── [drwxr-xr-x 4.0K]  docs
│   └── [-rw-r--r--    2]  readme.md
└── [drwxr-xr-x 4.0K]  src
    ├── [drwxr-xr-x 4.0K]  components
    ├── [-rw-r--r--    2]  main.py
    └── [drwxr-xr-x 4.0K]  utils

5 directories, 3 files

示例 7:-P 只看某类文件 ​

bash
tree -P '*.py' project
text
project
├── assets
├── docs
└── src
    ├── components
    │   └── Button.py
    ├── main.py
    └── utils
        └── helper.py

5 directories, 3 files

只保留 .py 文件(目录仍显示,否则树就断了)。

示例 8:-I 排除某类文件 ​

bash
tree -I '*.py' project
text
project
├── assets
│   └── logo.png
├── docs
│   └── readme.md
└── src
    ├── components
    └── utils

5 directories, 2 files

.py 文件全部不显示。

五、高频组合速记 ​

命令用途
tree看当前目录树
tree -L 2只看两层(最常用)
tree -L 3 -a三层 + 含隐藏文件
tree -d只看目录骨架
tree -h带可读大小
tree -I 'node_modules'排除某些目录
tree -P '*.conf'只看某类文件

六、RHEL 系与 Debian 系差异 ​

  • tree 两系都不默认安装:Debian/Ubuntu 用 sudo apt install tree,RHEL/CentOS/Rocky 用 sudo yum install tree(CentOS 8+ 用 dnf install tree);
  • 装完后选项行为基本一致;不同发行版自带的 tree 大版本可能略有差异,以本机 tree --help 为准。

七、新手易错点 ​

  1. 没装会报 command not found:先 apt install tree / yum install tree。
  2. 大树不限制层数会刷屏:tree 某超大目录 能吐几屏,养成 -L 2 的习惯。
  3. -P/-I 要加引号:通配符用单引号包起来,别让 shell 先把它展开了。
  4. 它只读不改:tree 纯展示,安全;不影响任何文件。
  5. 看隐藏文件要 -a:否则 .git、.env 默认不出现。

八、相关命令与文档 ​