Linux常用命令学习笔记:tree

1. 命令概述

  • 命令名称tree(英文全拼:tree)
  • 核心功能以树状图形式列出目录内容
  • 主要用途:递归显示目录结构,直观展示文件和子目录的层次关系
  • 特点:支持多种输出格式,可显示文件权限、大小、时间等信息

2. 语法格式

tree [选项] [目录名]

3. 常用选项

选项说明
-a显示所有文件和目录(包括隐藏文件)
-d只显示目录
-f显示完整路径
-i不显示树状结构,只显示文件列表
-l跟随符号链接
-p显示文件权限
-s显示文件大小
-u显示文件所有者
-g显示文件所属组
-D显示文件修改时间
-t按修改时间排序
-r按修改时间倒序排序
-n不显示颜色
-C显示颜色
-L限制目录深度
-I忽略指定模式的文件
-P只显示匹配指定模式的文件
-F在文件后添加标识符
-q用问号代替不可打印字符
-N直接显示文件名,不处理控制字符
-o将结果输出到文件
--help显示帮助信息
--version显示版本信息

4. 基本操作

(1) 基本目录树显示

# 显示当前目录的树状结构
tree

# 显示指定目录的树状结构
tree /path/to/dir

# 显示多个目录的树状结构
tree dir1 dir2 dir3

# 显示根目录的树状结构
tree /

(2) 显示隐藏文件

# 显示所有文件和目录(包括隐藏文件)
tree -a

# 显示指定目录的所有文件和目录
tree -a /path/to/dir

# 显示多个目录的所有文件和目录
tree -a dir1 dir2 dir3

(3) 只显示目录

# 只显示目录
tree -d

# 只显示指定目录的目录结构
tree -d /path/to/dir

# 只显示多个目录的目录结构
tree -d dir1 dir2 dir3

(4) 显示完整路径

# 显示完整路径
tree -f

# 显示指定目录的完整路径
tree -f /path/to/dir

# 显示多个目录的完整路径
tree -f dir1 dir2 dir3

(5) 显示文件信息

# 显示文件权限
tree -p

# 显示文件大小
tree -s

# 显示文件所有者
tree -u

# 显示文件所属组
tree -g

# 显示文件修改时间
tree -D

# 显示文件权限和大小
tree -p -s

# 显示文件权限、大小和修改时间
tree -p -s -D

# 显示文件权限、大小、修改时间和所有者
tree -p -s -D -u

# 显示文件权限、大小、修改时间、所有者和所属组
tree -p -s -D -u -g

5. 常用实例详解

(1) 基本显示示例

# 显示当前目录的树状结构
tree
# 输出:
# .
# ├── dir1
# │   ├── file1.txt
# │   └── file2.txt
# ├── dir2
# │   ├── subdir1
# │   │   └── file3.txt
# │   └── subdir2
# │       └── file4.txt
# └── file5.txt
#
# 3 directories, 5 files

# 显示指定目录的树状结构
tree /home/user
# 输出:显示/home/user目录的树状结构

# 显示多个目录的树状结构
tree dir1 dir2 dir3
# 输出:分别显示三个目录的树状结构

(2) 显示隐藏文件示例

# 显示所有文件和目录(包括隐藏文件)
tree -a
# 输出:
# .
# ├── .hidden
# ├── dir1
# │   ├── .hidden_file
# │   ├── file1.txt
# │   └── file2.txt
# ├── dir2
# │   ├── subdir1
# │   │   └── file3.txt
# │   └── subdir2
# │       └── file4.txt
# └── file5.txt
#
# 3 directories, 6 files

# 显示指定目录的所有文件和目录
tree -a /path/to/dir
# 输出:显示指定目录的所有文件和目录

# 显示多个目录的所有文件和目录
tree -a dir1 dir2 dir3
# 输出:分别显示三个目录的所有文件和目录

(3) 只显示目录示例

# 只显示目录
tree -d
# 输出:
# .
# ├── dir1
# ├── dir2
# │   ├── subdir1
# │   └── subdir2
# └── dir3
#
# 5 directories

# 只显示指定目录的目录结构
tree -d /path/to/dir
# 输出:显示指定目录的目录结构

# 只显示多个目录的目录结构
tree -d dir1 dir2 dir3
# 输出:分别显示三个目录的目录结构

(4) 显示完整路径示例

# 显示完整路径
tree -f
# 输出:
# .
# ├── ./dir1
# │   ├── ./dir1/file1.txt
# │   └── ./dir1/file2.txt
# ├── ./dir2
# │   ├── ./dir2/subdir1
# │   │   └── ./dir2/subdir1/file3.txt
# │   └── ./dir2/subdir2
# │       └── ./dir2/subdir2/file4.txt
# └── ./file5.txt
#
# 3 directories, 5 files

# 显示指定目录的完整路径
tree -f /path/to/dir
# 输出:显示指定目录的完整路径

# 显示多个目录的完整路径
tree -f dir1 dir2 dir3
# 输出:分别显示三个目录的完整路径

(5) 显示文件信息示例

# 显示文件权限
tree -p
# 输出:
# .
# ├── [drwxr-xr-x] dir1
# │   ├── [-rw-r--r--] file1.txt
# │   └── [-rw-r--r--] file2.txt
# ├── [drwxr-xr-x] dir2
# │   ├── [drwxr-xr-x] subdir1
# │   │   └── [-rw-r--r--] file3.txt
# │   └── [drwxr-xr-x] subdir2
# │       └── [-rw-r--r--] file4.txt
# └── [-rw-r--r--] file5.txt
#
# 3 directories, 5 files

# 显示文件大小
tree -s
# 输出:
# .
# ├── [    4096] dir1
# │   ├── [    1024] file1.txt
# │   └── [    2048] file2.txt
# ├── [    4096] dir2
# │   ├── [    4096] subdir1
# │   │   └── [    3072] file3.txt
# │   └── [    4096] subdir2
# │       └── [    4096] file4.txt
# └── [    5120] file5.txt
#
# 3 directories, 5 files

# 显示文件所有者
tree -u
# 输出:
# .
# ├── [user   ] dir1
# │   ├── [user   ] file1.txt
# │   └── [user   ] file2.txt
# ├── [user   ] dir2
# │   ├── [user   ] subdir1
# │   │   └── [user   ] file3.txt
# │   └── [user   ] subdir2
# │       └── [user   ] file4.txt
# └── [user   ] file5.txt
#
# 3 directories, 5 files

# 显示文件所属组
tree -g
# 输出:
# .
# ├── [user   ] dir1
# │   ├── [user   ] file1.txt
# │   └── [user   ] file2.txt
# ├── [user   ] dir2
# │   ├── [user   ] subdir1
# │   │   └── [user   ] file3.txt
# │   └── [user   ] subdir2
# │       └── [user   ] file4.txt
# └── [user   ] file5.txt
#
# 3 directories, 5 files

# 显示文件修改时间
tree -D
# 输出:
# .
# ├── [Jan 01 12:00] dir1
# │   ├── [Jan 01 12:00] file1.txt
# │   └── [Jan 01 12:00] file2.txt
# ├── [Jan 01 12:00] dir2
# │   ├── [Jan 01 12:00] subdir1
# │   │   └── [Jan 01 12:00] file3.txt
# │   └── [Jan 01 12:00] subdir2
# │       └── [Jan 01 12:00] file4.txt
# └── [Jan 01 12:00] file5.txt
#
# 3 directories, 5 files

# 显示文件权限和大小
tree -p -s
# 输出:
# .
# ├── [drwxr-xr-x    4096] dir1
# │   ├── [-rw-r--r--    1024] file1.txt
# │   └── [-rw-r--r--    2048] file2.txt
# ├── [drwxr-xr-x    4096] dir2
# │   ├── [drwxr-xr-x    4096] subdir1
# │   │   └── [-rw-r--r--    3072] file3.txt
# │   └── [drwxr-xr-x    4096] subdir2
# │       └── [-rw-r--r--    4096] file4.txt
# └── [-rw-r--r--    5120] file5.txt
#
# 3 directories, 5 files

# 显示文件权限、大小和修改时间
tree -p -s -D
# 输出:
# .
# ├── [drwxr-xr-x    4096 Jan 01 12:00] dir1
# │   ├── [-rw-r--r--    1024 Jan 01 12:00] file1.txt
# │   └── [-rw-r--r--    2048 Jan 01 12:00] file2.txt
# ├── [drwxr-xr-x    4096 Jan 01 12:00] dir2
# │   ├── [drwxr-xr-x    4096 Jan 01 12:00] subdir1
# │   │   └── [-rw-r--r--    3072 Jan 01 12:00] file3.txt
# │   └── [drwxr-xr-x    4096 Jan 01 12:00] subdir2
# │       └── [-rw-r--r--    4096 Jan 01 12:00] file4.txt
# └── [-rw-r--r--    5120 Jan 01 12:00] file5.txt
#
# 3 directories, 5 files

# 显示文件权限、大小、修改时间和所有者
tree -p -s -D -u
# 输出:
# .
# ├── [drwxr-xr-x    4096 Jan 01 12:00 user   ] dir1
# │   ├── [-rw-r--r--    1024 Jan 01 12:00 user   ] file1.txt
# │   └── [-rw-r--r--    2048 Jan 01 12:00 user   ] file2.txt
# ├── [drwxr-xr-x    4096 Jan 01 12:00 user   ] dir2
# │   ├── [drwxr-xr-x    4096 Jan 01 12:00 user   ] subdir1
# │   │   └── [-rw-r--r--    3072 Jan 01 12:00 user   ] file3.txt
# │   └── [drwxr-xr-x    4096 Jan 01 12:00 user   ] subdir2
# │       └── [-rw-r--r--    4096 Jan 01 12:00 user   ] file4.txt
# └── [-rw-r--r--    5120 Jan 01 12:00 user   ] file5.txt
#
# 3 directories, 5 files

# 显示文件权限、大小、修改时间、所有者和所属组
tree -p -s -D -u -g
# 输出:
# .
# ├── [drwxr-xr-x    4096 Jan 01 12:00 user   user   ] dir1
# │   ├── [-rw-r--r--    1024 Jan 01 12:00 user   user   ] file1.txt
# │   └── [-rw-r--r--    2048 Jan 01 12:00 user   user   ] file2.txt
# ├── [drwxr-xr-x    4096 Jan 01 12:00 user   user   ] dir2
# │   ├── [drwxr-xr-x    4096 Jan 01 12:00 user   user   ] subdir1
# │   │   └── [-rw-r--r--    3072 Jan 01 12:00 user   user   ] file3.txt
# │   └── [drwxr-xr-x    4096 Jan 01 12:00 user   user   ] subdir2
# │       └── [-rw-r--r--    4096 Jan 01 12:00 user   user   ] file4.txt
# └── [-rw-r--r--    5120 Jan 01 12:00 user   user   ] file5.txt
#
# 3 directories, 5 files

6. 高级功能

(1) 限制目录深度

# 限制目录深度为1
tree -L 1

# 限制目录深度为2
tree -L 2

# 限制目录深度为3
tree -L 3

# 限制目录深度为指定值
tree -L n

# 限制目录深度并显示文件信息
tree -L 2 -p -s -D

(2) 忽略指定文件

# 忽略指定模式的文件
tree -I "*.txt"

# 忽略多个模式的文件
tree -I "*.txt|*.log"

# 忽略隐藏文件
tree -I ".*"

# 忽略指定目录
tree -I "dir1"

# 忽略多个目录
tree -I "dir1|dir2"

# 忽略指定模式的文件并显示文件信息
tree -I "*.txt" -p -s -D

(3) 只显示匹配文件

# 只显示匹配指定模式的文件
tree -P "*.txt"

# 只显示匹配多个模式的文件
tree -P "*.txt|*.log"

# 只显示匹配指定模式的文件并显示文件信息
tree -P "*.txt" -p -s -D

# 只显示匹配指定模式的文件并限制目录深度
tree -P "*.txt" -L 2

(4) 文件后添加标识符

# 在文件后添加标识符
tree -F

# 在文件后添加标识符并显示文件信息
tree -F -p -s -D

# 在文件后添加标识符并限制目录深度
tree -F -L 2

# 在文件后添加标识符并忽略指定文件
tree -F -I "*.txt"

(5) 排序和颜色

# 按修改时间排序
tree -t

# 按修改时间倒序排序
tree -r

# 按修改时间排序并显示文件信息
tree -t -p -s -D

# 按修改时间倒序排序并显示文件信息
tree -r -p -s -D

# 显示颜色
tree -C

# 不显示颜色
tree -n

# 显示颜色并显示文件信息
tree -C -p -s -D

# 不显示颜色并显示文件信息
tree -n -p -s -D

(6) 输出到文件

# 将结果输出到文件
tree -o output.txt

# 将结果输出到文件并显示文件信息
tree -p -s -D -o output.txt

# 将结果输出到文件并限制目录深度
tree -L 2 -o output.txt

# 将结果输出到文件并忽略指定文件
tree -I "*.txt" -o output.txt

# 将结果输出到文件并只显示匹配文件
tree -P "*.txt" -o output.txt

(7) 特殊字符处理

# 用问号代替不可打印字符
tree -q

# 直接显示文件名,不处理控制字符
tree -N

# 用问号代替不可打印字符并显示文件信息
tree -q -p -s -D

# 直接显示文件名,不处理控制字符并显示文件信息
tree -N -p -s -D

7. 实际应用场景

场景一:项目目录结构展示

# 显示项目目录结构
tree project/

# 显示项目目录结构,包括隐藏文件
tree -a project/

# 显示项目目录结构,只显示目录
tree -d project/

# 显示项目目录结构,显示完整路径
tree -f project/

# 显示项目目录结构,显示文件权限、大小和修改时间
tree -p -s -D project/

# 显示项目目录结构,限制目录深度为2
tree -L 2 project/

# 显示项目目录结构,忽略日志文件
tree -I "*.log" project/

# 显示项目目录结构,只显示源代码文件
tree -P "*.py|*.js|*.java" project/

# 显示项目目录结构,按修改时间排序
tree -t project/

# 显示项目目录结构,按修改时间倒序排序
tree -r project/

# 显示项目目录结构,输出到文件
tree project/ -o project_structure.txt

场景二:系统目录结构分析

# 显示系统目录结构
tree /

# 显示系统目录结构,只显示目录
tree -d /

# 显示系统目录结构,限制目录深度为1
tree -L 1 /

# 显示系统目录结构,限制目录深度为2
tree -L 2 /

# 显示系统目录结构,显示文件权限、大小和修改时间
tree -p -s -D /

# 显示系统目录结构,忽略指定目录
tree -I "proc|sys|dev" /

# 显示系统目录结构,只显示配置文件
tree -P "*.conf|*.config" /

# 显示系统目录结构,按修改时间排序
tree -t /

# 显示系统目录结构,按修改时间倒序排序
tree -r /

# 显示系统目录结构,输出到文件
tree / -o system_structure.txt

场景三:用户目录结构管理

# 显示用户目录结构
tree ~/

# 显示用户目录结构,包括隐藏文件
tree -a ~/

# 显示用户目录结构,只显示目录
tree -d ~/

# 显示用户目录结构,显示完整路径
tree -f ~/

# 显示用户目录结构,显示文件权限、大小和修改时间
tree -p -s -D ~/

# 显示用户目录结构,限制目录深度为2
tree -L 2 ~/

# 显示用户目录结构,忽略缓存文件
tree -I "*.cache|*.tmp" ~/

# 显示用户目录结构,只显示文档文件
tree -P "*.txt|*.doc|*.pdf" ~/

# 显示用户目录结构,按修改时间排序
tree -t ~/

# 显示用户目录结构,按修改时间倒序排序
tree -r ~/

# 显示用户目录结构,输出到文件
tree ~/ -o user_structure.txt

场景四:脚本中的目录结构分析

#!/bin/bash

# 获取目录结构
DIR_STRUCTURE=$(tree -a -p -s -D)

# 获取目录结构,限制深度
DIR_STRUCTURE=$(tree -L 2 -a -p -s -D)

# 获取目录结构,忽略指定文件
DIR_STRUCTURE=$(tree -I "*.log|*.tmp" -a -p -s -D)

# 获取目录结构,只显示匹配文件
DIR_STRUCTURE=$(tree -P "*.py|*.js|*.java" -a -p -s -D)

# 获取目录结构,按修改时间排序
DIR_STRUCTURE=$(tree -t -a -p -s -D)

# 获取目录结构,按修改时间倒序排序
DIR_STRUCTURE=$(tree -r -a -p -s -D)

# 将目录结构输出到文件
tree -a -p -s -D -o structure.txt

# 将目录结构输出到文件,限制深度
tree -L 2 -a -p -s -D -o structure.txt

# 将目录结构输出到文件,忽略指定文件
tree -I "*.log|*.tmp" -a -p -s -D -o structure.txt

# 将目录结构输出到文件,只显示匹配文件
tree -P "*.py|*.js|*.java" -a -p -s -D -o structure.txt

# 将目录结构输出到文件,按修改时间排序
tree -t -a -p -s -D -o structure.txt

# 将目录结构输出到文件,按修改时间倒序排序
tree -r -a -p -s -D -o structure.txt

8. 与其他命令的区别

命令特点适用场景
tree以树状图形式列出目录内容递归显示目录结构
ls列出目录内容查看文件列表
ls -R递归列出目录内容查看目录及其子目录内容
find查找文件和目录根据条件查找文件
du显示文件或目录的磁盘使用情况查看文件或目录的磁盘使用情况
df显示文件系统磁盘空间使用情况查看文件系统磁盘空间使用情况

9. 注意事项

  1. 权限问题:普通用户只能查看有权限的目录
  2. 目录不存在:如果目录不存在,会报错”No such file or directory”
  3. 符号链接:默认不跟随符号链接,使用 -l选项可以跟随符号链接
  4. 目录深度:使用 -L选项可以限制目录深度,避免显示过多内容
  5. 文件过滤:使用 -I选项可以忽略指定文件,使用 -P选项可以只显示匹配文件

10. 常见问题解决

(1) 权限不足

# 错误:权限不足
tree /root  # 报错:Permission denied

# 正确:使用sudo
sudo tree /root

# 正确:查看有权限的目录
tree /home/user

# 正确:查看当前用户的主目录
tree ~/

# 正确:查看公共目录
tree /tmp

(2) 目录不存在

# 错误:目录不存在
tree nonexistent  # 报错:No such file or directory

# 正确:检查目录是否存在
ls -l dirname

# 正确:使用存在的目录
tree existing_dir

# 正确:创建目录
mkdir dirname
tree dirname

# 正确:忽略不存在的目录错误
tree nonexistent 2>/dev/null

(3) 目录深度过大

# 错误:目录深度过大,显示内容过多
tree /  # 可能显示过多内容

# 正确:限制目录深度
tree -L 2 /

# 正确:只显示目录
tree -d /

# 正确:忽略指定目录
tree -I "proc|sys|dev" /

# 正确:输出到文件
tree / -o structure.txt

# 正确:使用管道分页显示
tree | less
tree -L 2 | less
tree -d | less

(4) 符号链接问题

# 错误:符号链接指向不存在的目录
ln -s /nonexistent broken_link
tree broken_link  # 报错:No such file or directory

# 正确:检查符号链接
ls -l linkname

# 正确:修复符号链接
ln -sf /path/to/target linkname

# 正确:使用物理路径
tree /path/to/target

# 正确:使用绝对路径
tree $(readlink linkname)

# 正确:跟随符号链接
tree -l linkname

(5) 选项错误

# 错误:选项错误
tree -x dirname  # 报错:无效选项

# 正确:使用支持的选项
tree -a dirname
tree -d dirname
tree -f dirname
tree -p dirname
tree -s dirname
tree -D dirname

# 错误:缺少参数
tree --  # 报错:缺少参数

# 正确:使用正确的选项
tree --help
tree --version

# 错误:选项冲突
tree -a -d dirname  # 可能报错

# 正确:使用不冲突的选项
tree -a dirname
tree -d dirname

核心要点总结

  • tree是以树状图形式列出目录内容的命令,支持递归显示目录结构
  • 常用选项-a(显示所有文件)、-d(只显示目录)、-f(显示完整路径)、-p(显示文件权限)、-s(显示文件大小)、-D(显示文件修改时间)、-L(限制目录深度)、-I(忽略指定文件)、-P(只显示匹配文件)
  • 实际应用:项目目录结构展示、系统目录结构分析、用户目录结构管理、脚本中的目录结构分析
  • 注意事项:普通用户只能查看有权限的目录,使用 -L选项可以限制目录深度,使用 -I-P选项可以过滤文件

tree命令是Linux系统目录管理的基础工具,熟练掌握可以直观地查看目录结构,提高工作效率。


作 者:南烛
链 接:https://www.itnotes.top/archives/495
来 源:IT笔记
文章版权归作者所有,转载请注明出处!


上一篇
下一篇