系列:Linux 命令基础
- Tmux 入门教程:让 SSH 断线和多任务终端不再中断
- Tree 命令教程:快速查看和导出目录结构
- Linux 搜索命令教程:find、grep、locate、rg 应该怎么选
- Linux 压缩与解压命令教程:tar、zip、gzip、xz、zstd 一次讲清
- Linux 文本处理命令教程:cat、less、head、tail、wc、sort、uniq
- Linux 权限命令教程:chmod、chown、umask
- Linux 进程查看与管理:ps、top、htop、kill、jobs
- Linux 网络排查命令:ss、curl、dig、ping、traceroute
- systemctl 与 journalctl 入门:管理服务和查看日志
- rsync 使用指南:服务器文件同步与备份
- Linux 服务器安全基础:SSH、用户权限、防火墙和 fail2ban
- 线上问题排查流程:日志、端口、进程、磁盘、网络怎么一步步看
- 深入浅出:Linux 树状目录神器 tree 命令的安装与使用指南
- Linux 系统 Vim 编辑器终极指南:从入门到精通
- SSH 隧道实战:本地转发、远程转发和动态转发
- SSH Config 使用指南:别名、跳板机与多服务器管理
背景
在 Linux 服务器、开发项目或本地文件整理过程中,经常需要快速回答这些问题:
- 一个项目有哪些目录和关键文件?
- 某个目录下面的文件层级是否正确?
- 如何把项目结构贴到 README、需求文档或发给 AI 编程工具?
- 怎样排除
node_modules、.git、构建产物等无关目录?
只使用 ls 虽然能查看当前目录内容,但不方便观察完整层级。tree 是一个用于以树状结构展示目录和文件的命令行工具,特别适合项目初始化检查、服务器排障、生成目录说明和提交代码前的结构核对。
如果你还需要在目录中定位文件或内容,可以继续看 Linux 搜索命令教程:find、grep、locate、rg 应该怎么选;如果要把目录打包备份,可以参考 Linux 压缩与解压命令教程:tar、zip、gzip、xz、zstd 一次讲清。
本文以 Debian / Ubuntu 为例,介绍 tree 的安装、常用参数、实用组合和常见问题。
步骤
1. 安装 tree
Debian / Ubuntu 可以使用 apt 安装:
sudo apt updatesudo apt install -y tree安装后进入一个目录测试:
tree输出会类似:
.├── README.md├── backend│ ├── app│ ├── pyproject.toml│ └── tests├── docker-compose.yml└── frontend ├── package.json └── src
6 directories, 4 files其他常见系统的安装方式:
# Fedora / Rocky Linux / AlmaLinuxsudo dnf install -y tree
# CentOS 7sudo yum install -y tree
# macOS(已安装 Homebrew)brew install treeWindows 用户可以在 WSL 中安装并使用:
sudo apt updatesudo apt install -y tree2. 查看指定目录的结构
直接查看当前目录:
tree查看指定目录:
tree /path/to/project例如查看当前项目的 backend 目录:
tree backend如果目录路径包含空格,使用引号包起来:
tree "/home/username/My Projects/demo-app"3. 限制显示层级
大型项目直接执行 tree 往往会输出大量内容。最常用的参数是 -L,用于限制目录深度。
只显示当前目录下一层:
tree -L 1显示两层:
tree -L 2查看一个 Web 项目时,推荐先使用:
tree -L 2效果类似:
.├── backend│ ├── app│ ├── pyproject.toml│ └── tests├── frontend│ ├── package.json│ └── src├── docker-compose.yml└── README.md这可以在不被大量文件淹没的情况下,快速判断项目的整体结构。
4. 只显示目录
有时只关心目录划分,不想看到每一个文件。可以使用 -d:
tree -d结合层级限制:
tree -d -L 3例如,一个 FastAPI + Flutter 项目可以快速查看为:
.├── backend│ ├── app│ │ ├── api│ │ ├── core│ │ ├── models│ │ └── services│ └── tests├── docs├── frontend│ ├── lib│ ├── test│ └── web└── infra对于检查模块划分、准备架构文档或向 AI 描述项目结构,这种输出最清晰。
5. 显示隐藏文件
默认情况下,tree 不会显示以 . 开头的隐藏文件或隐藏目录,例如:
.git.env.github.vscode使用 -a 可以显示全部内容:
tree -a例如:
tree -a -L 2常用于检查:
.gitignore是否存在;.env、.env.example是否放在正确位置;- GitHub Actions 配置是否位于
.github/workflows; - VS Code 项目配置是否存在。
注意:不要在公开文章、截图或提交到仓库的文档中直接暴露
.env文件内容。tree只会显示文件名,但文件名本身也可能暴露部署结构。
6. 忽略无关目录和文件
前端项目中的 node_modules、Python 项目中的 .venv、Git 目录中的 .git,通常会让输出变得非常大。
使用 -I 可以忽略匹配的文件或目录:
tree -I 'node_modules|.git|.venv'推荐的项目结构查看命令:
tree -L 3 -I 'node_modules|.git|.venv|__pycache__|dist|build'参数说明:
-L 3:最多显示三层目录-I :忽略符合规则的名称| :表示“或”,可以同时排除多个目录或文件对于 Python 项目:
tree -L 3 -I '.git|.venv|__pycache__|.pytest_cache|*.pyc'对于 Node.js / React / Vue 项目:
tree -L 3 -I '.git|node_modules|dist|build|.next|coverage'对于 Flutter 项目:
tree -L 3 -I '.git|.dart_tool|build|.idea|.vscode'7. 只显示匹配的文件类型
使用 -P 可以只显示匹配规则的文件或目录。
只显示 Python 文件:
tree -P '*.py'只显示 Markdown 文件:
tree -P '*.md'只显示 Docker 相关文件:
tree -P 'Dockerfile|docker-compose*.yml'结合目录深度使用:
tree -L 3 -P '*.py'如果希望连同包含这些文件的目录一起展示,可以增加 --prune:
tree -L 4 -P '*.py' --prune这在检查 FastAPI、Django 或脚本项目的 Python 代码分布时很有用。
8. 显示文件大小和修改时间
查看文件大小:
tree -h查看人类可读的文件大小和修改时间:
tree -h -D输出示例:
[Jun 21 12:00] README.md[Jun 21 12:10] docker-compose.yml[Jun 21 12:20] backend排序方式也可以调整:
# 按修改时间排序tree -t
# 按文件大小排序tree -s
# 将目录排在文件前面tree --dirsfirst一个实用组合:
tree -L 2 -h -D --dirsfirst适合快速查看某个部署目录中哪些内容最近被修改过。
9. 将目录结构导出到文件
tree 最实用的场景之一,是把项目结构导出为文本文件,放进 README、开发文档或交给 AI 工具分析。
导出当前目录:
tree -L 3 -I 'node_modules|.git|.venv|__pycache__' > project-tree.txt查看导出内容:
cat project-tree.txt如果希望追加到已有文件,而不是覆盖:
tree -L 3 >> project-tree.txt导出到 Markdown 文档时,建议使用代码块包裹:
{ echo '```text' tree -L 3 -I 'node_modules|.git|.venv|__pycache__' echo '```'} > project-structure.md生成的 project-structure.md 可以直接放到项目文档中。
10. 生成 HTML 格式目录树
tree 还可以生成 HTML 文件,便于通过浏览器查看或作为静态文档保存。
tree -H . -L 3 -o project-tree.html参数含义:
-H .:设置 HTML 输出中的基础路径-L 3:限制显示深度-o :指定输出文件生成后可以在本地浏览器中打开:
xdg-open project-tree.html在 macOS 上可以使用:
open project-tree.html对于不方便直接打开桌面浏览器的服务器,可以把文件下载到本地后查看。
11. 常用命令速查
日常使用中,下面几条命令已经足够覆盖大多数场景:
# 查看当前目录tree
# 只看两层结构tree -L 2
# 只显示目录tree -d -L 3
# 显示隐藏文件tree -a -L 2
# 忽略依赖、缓存和 Git 目录tree -L 3 -I 'node_modules|.git|.venv|__pycache__|dist|build'
# 查看 Python 文件结构tree -L 4 -P '*.py' --prune
# 导出项目结构tree -L 3 -I 'node_modules|.git|.venv|__pycache__' > project-tree.txt
# 显示文件大小、日期,并让目录排在前面tree -L 2 -h -D --dirsfirst12. 为项目设置一个快捷命令
如果经常在项目目录中查看结构,可以在 ~/.bashrc 或 ~/.zshrc 中加入别名。
编辑 Bash 配置:
nano ~/.bashrc加入:
alias ptree="tree -L 3 -I 'node_modules|.git|.venv|__pycache__|dist|build|.dart_tool'"重新加载配置:
source ~/.bashrc之后进入项目目录后,只需要执行:
ptree即可快速得到一个适合开发场景的目录结构。
常见问题
1. 执行 tree 提示 command not found 怎么办?
这通常表示系统还没有安装 tree。
Debian / Ubuntu:
sudo apt updatesudo apt install -y tree安装完成后重新执行:
tree -V如果仍然无法使用,检查命令路径:
which tree2. 为什么执行 tree 后终端卡住或输出特别多?
通常是因为项目中存在大量依赖目录,例如:
node_modules.venv.gitdistbuild先按:
Ctrl-c停止输出,然后改用限制层级和忽略目录的方式:
tree -L 3 -I 'node_modules|.git|.venv|__pycache__|dist|build'不要直接对大型项目、用户主目录或系统根目录执行无限层级的 tree。
3. 为什么 tree -I 没有忽略目录?
确认忽略规则使用了单引号,并使用 | 分隔多个名称:
tree -I 'node_modules|.git|.venv'错误示例:
tree -I node_modules .git .venv上面的写法会被 Shell 视为多个独立参数,不能正确表达忽略规则。
4. 如何避免把敏感文件名写进公开文档?
输出项目目录结构前,可以排除常见敏感文件:
tree -L 3 -a -I '.git|.env|.env.*|node_modules|.venv|__pycache__'如果项目中有私有密钥、备份文件或客户数据目录,也应一并加入忽略列表。
例如:
tree -L 3 -I '.git|.env*|secrets|backup|data|node_modules|.venv'5. tree 能代替 find 吗?
不能完全代替。
tree 更适合人类阅读目录结构,重点是可视化层级。
find 更适合批量查找、筛选和脚本自动化,例如:
find . -name '*.log' -mtime +7日常开发中可以这样理解:
tree:看目录结构find:按条件查找文件ls:快速查看当前目录6. tree 能在服务器上安全使用吗?
一般来说是安全的,因为它只读取目录和文件名,不会修改内容。
但要注意两点:
- 不要在包含海量文件的目录中无限制执行;
- 不要将包含敏感文件名的输出直接公开到 GitHub、博客或工单系统。
对于服务器排障,建议从小目录开始,并限制深度:
tree -L 2 /opt/my-app总结
tree 是一个简单但高频的命令行工具,适合快速观察项目、服务器目录和文件组织方式。
最值得记住的几个用法是:
tree -L 2 限制目录层级tree -d -L 3 只显示目录tree -a 显示隐藏文件tree -I 'node_modules|.git|.venv' 排除无关内容tree -P '*.py' --prune 只看指定类型文件tree ... > project-tree.txt 导出目录结构对于日常开发,建议把下面的命令作为默认习惯:
tree -L 3 -I 'node_modules|.git|.venv|__pycache__|dist|build'它既能保持输出清晰,也足够展示一个项目的大部分核心结构。