How to Visualise Directory Hierarchies in Linux Terminal Using the tree Command

When exploring an unfamiliar software repository, inspecting nested configuration structures, or auditing server directories in Linux, standard file listing utilities often fall short. While ls -R lists subdirectories recursively, it outputs a flat, fragmented wall of text that makes understanding parent-child filesystem relationships challenging.

The tree command-line utility provides a visual, hierarchically indented representation of directories and files. It produces clean ASCII or Unicode branches directly inside your terminal, allowing you to comprehend directory layouts, file permissions, and storage footprints at a glance.


Installing the tree Package on Linux

Because tree is a dedicated binary, it may not be included in minimal cloud server images. You can install it quickly using your package manager:

Ubuntu, Debian, and Linux Mint

sudo apt update
sudo apt install -y tree

Fedora, RHEL, and AlmaLinux

sudo dnf install -y tree

Arch Linux and Manjaro

sudo pacman -S tree

Basic Syntax and Traversing Hierarchies

Running tree without arguments scans the current working directory recursively, generating an indented map followed by a summary of total directories and files:

tree

Sample output:

.
├── config
│   ├── app.json
│   └── database.yml
├── src
│   ├── controllers
│   │   └── user.py
│   └── index.py
└── README.md

3 directories, 4 files

To inspect an explicit filesystem path rather than your current location, provide the directory path as an argument:

tree /var/log

Essential tree Options and Practical Filtering Flags

In large projects, running an unconstrained tree scan can flood your terminal buffer with thousands of files. You can constrain depth, filter out noisy directories, and display detailed file attributes using core flags.

Flag Parameter Operational Behaviour Practical Application
-L <depth> Limits directory traversal to a specific recursion level. tree -L 2 prevents runaway output in massive repositories.
-d Lists directories only, completely omitting individual files. Rapidly audit top-level project folder taxonomy.
-a Includes hidden dotfiles (e.g. .env, .gitignore). Full visibility into hidden configuration files.
-I "<pattern>" Excludes matching wildcard file and folder patterns. Ignore dependency bloat: -I "node_modules|venv|.git".
-P "<pattern>" Matches and displays only files matching a specific wildcard. Isolate specific source files: tree -P "*.py".
-h Prints file sizes in human-readable units (K, M, G). Evaluate storage usage per individual file.
-p Displays file types and permissions (e.g. [drwxr-xr-x]). Audit permission discrepancies across nested assets.

Advanced Tree Recipes for Developers and Administrators

Combining multiple parameters allows you to extract precise project documentation in seconds.

1. Excluding Noisy Dependency Folders

Modern Node.js and Python projects contain massive dependency folders that render plain tree scans unusable. Filter them out using the -I pattern:

tree -L 3 -I "node_modules|venv|__pycache__|.git"

2. Displaying Permissions and Human-Readable Sizes

To audit security permissions and file footprints simultaneously alongside tree branches:

tree -hp -L 2 /etc/nginx

This prints output resembling:

/etc/nginx
├── [-rw-r--r--  2.4K]  fastcgi.conf
├── [drwxr-xr-x  4.0K]  conf.d
│   └── [-rw-r--r--   850]  default.conf
└── [-rw-r--r--  1.1K]  nginx.conf

3. Exporting Tree Output to JSON or HTML

If you need to incorporate directory maps into web dashboards or automated ingestion pipelines, tree can format its output natively as valid JSON or clean HTML:

tree -J -L 2 > directory_structure.json

To generate a styled HTML document with hyperlinks:

tree -H "." -o directory_index.html

Whether combined with du for disk storage auditing or shell pipelines using sponge for clean stream management, tree remains an essential navigation tool in the Linux administrator’s toolkit.

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.