tree Komutu Nedir ve Neden Kullanılır?
ls komutu sadece tek bir dizinin içeriğini gösterirken, tree komutu bir dizin ve tüm alt dizinlerini hiyerarşik bir şekilde görüntüler. Bu özellik, özellikle büyük projelerin dizin yapısını anlamak için son derece kullanışlıdır.
tree komutunun sunduğu avantajlar şunlardır:
- Tüm dizin hiyerarşisini tek bir bakışta görme imkanı
- Dosya ve dizinleri derinlik seviyesine göre sınırlandırma
- Gizli dosyaları ve dizinleri gösterme
- Dosya boyutlarını insan tarafından okunabilir formatta görüntüleme
- Çıktıyı dosyaya kaydetme ve farklı formatlarda dışa aktarma
- Dosya ve dizinleri filtreleme ve dışlama
Zorluk Seviyesi: Beginner
tree Komutunu Kurulum
tree komutu çoğu Linux dağıtımında varsayılan olarak yüklü değildir, ancak standart paket depolarında mevcuttur. Aşağıda farklı dağıtımlarda kurulum adımları yer almaktadır:
Debian ve Ubuntu Tabanlı Dağıtımlar
$ sudo apt update
$ sudo apt install tree
Fedora, RHEL ve Türevleri
$ sudo dnf install tree
Arch Linux ve Türevleri
$ sudo pacman -S tree
Kurulumu Doğrulama
Kurulumun başarılı olduğunu doğrulamak için:
$ tree --version
Temel Kullanım
tree komutunun genel sözdizimi aşağıdaki gibidir:
tree [SEÇENEKLER] [DİZİN]
Herhangi bir argüman olmadan kullanıldığında, tree komutu mevcut dizini ve tüm alt dizinlerini görüntüler. Örnek olarak basit bir Node.js projesinde kullanımı:
$ tree
Çıktı aşağıdaki gibi görünecektir:
.
├── package.json
├── README.md
└── src
├── app.js
└── utils
└── helpers.js
3 directories, 4 files
Her seviye girintili olarak gösterilir ve çizgi karakterleriyle birbirine bağlanır. Bu sayede helpers.js dosyasının src/utils dizini altında olduğu açıkça görülür. Son satırda toplam dosya ve dizin sayısı gösterilir.
Belirli Bir Dizin İçin Kullanım
Başka bir dizinin yapısını görüntülemek için dizin yolunu belirtmeniz yeterlidir:
$ tree /etc/nginx
Derinlik Sınırlama
Büyük dizinlerde varsayılan olarak tüm hiyerarşi görüntülendiğinde binlerce satır çıktı oluşabilir. -L seçeneği ile kaç seviye derine inileceğini sınırlayabilirsiniz:
$ tree -L 2 /var/log
-L 2 seçeneği ile tree komutu sadece /var/log dizini ve bir seviye alt dizinlerini gösterir. Bu özellik, terminalinizde gereksiz çıktı oluşmasını engellemek için ilk başvuracağınız seçenek olmalıdır.
Gizli Dosyaları ve Dizinleri Gösterme
ls komutunda olduğu gibi, tree komutu da varsayılan olarak nokta (.) ile başlayan gizli dosyaları ve dizinleri göstermez. Gizli dosyaları da görüntülemek için -a seçeneğini kullanın:
$ tree -a
Çıktı aşağıdaki gibi görünecektir:
.
├── .env
├── .git
│ ├── config
│ └── HEAD
├── package.json
├── README.md
└── src
├── app.js
└── utils
└── helpers.js
4 directories, 7 files
-a seçeneği ile .env ve .git dizini de listede görüntülenir. -a seçeneğini -L 1 ile birlikte kullanmak, dizinde bulunan tüm dosyaları (gizli olanlar dahil) hızlı bir şekilde incelemenizi sağlar.
Sadece Dizinleri Listeleme
Sadece dizin yapısını görmek ve dosyaları görüntülemek istemiyorsanız -d seçeneğini kullanın:
$ tree -d
Çıktı aşağıdaki gibi görünecektir:
.
└── src
└── utils
3 directories
Dosyalar listeden çıkarılır ve sadece dizin iskeleti görüntülenir. Bu özellik, özellikle bir projenin dizin yapısını belgeleyeceğiniz zaman kullanışlıdır.
Dosya Boyutlarını Gösterme
-s seçeneği her dosyanın boyutunu bayt cinsinden gösterir. Pratikte ise -h seçeneği daha kullanışlıdır, çünkü dosya boyutlarını insan tarafından okunabilir birimlerde (KB, MB, GB) gösterir:
$ tree -h
Çıktı aşağıdaki gibi görünecektir:
[4.0K] .
├── [ 412] package.json
├── [1.2K] README.md
└── [4.0K] src
├── [3.4K] app.js
└── [4.0K] utils
└── [ 890] helpers.js
3 directories, 4 files
Dizinler için gösterilen boyut, dizin girişinin kendisinin boyutudur, içerdiği dosyaların toplam boyutu değildir. Dizinlerin toplam boyutunu görmek için --du seçeneğini ekleyin:
$ tree --du -h
--du seçeneği ile her dizin, içerdiği tüm dosyaların toplam boyutunu gösterir. Bu seçenek tüm hiyerarşiyi okuduktan sonra çıktı verdiği için büyük dizin ağaçlarında daha uzun sürebilir ve daha fazla bellek tüketebilir.
Dosyaları Desene Göre Filtreleme
-P seçeneği sadece belirli bir desenle eşleşen dosyaları listeler. Deseni kabuk tarafından genişletilmemesi için tırnak içine alın:
$ tree -P "*.js"
Dizinler, eşleşen dosya içermeyenler de dahil olmak üzere yine de gösterilir. Boş dalları kaldırmak için --prune seçeneğini ekleyin:
$ tree -P "*.js" --prune
Sadece JavaScript dosyaları ve bunlara ulaşan dizinler kalır. Desenler kabuk glob kurallarını takip eder. Daha fazla bilgi için Linux wildcards ve globbing rehberimize bakabilirsiniz.
-I seçeneği ise tam tersini yapar ve belirli desenlerle eşleşen girişleri hariç tutar. Birden fazla desen | karakteri ile ayrılır:
$ tree -I "node_modules|.git"
Bu, tree komutunun günlük kullanımda en yaygın şeklidir, çünkü bağımlılık dizinleri ve VCS dizinlerinin gürültüsünü gizler. tree 2.0 ve üzeri sürümlerinde --gitignore seçeneğini kullanarak projenizin .gitignore dosyalarında tanımlanan tüm dosyaları da hariç tutabilirsiniz.
Tam Yolları Gösterme
Varsayılan olarak her giriş sadece kendi adını gösterir. -f seçeneği tam yol ön ekini gösterir:
$ tree -f src
Çıktı aşağıdaki gibi görünecektir:
src
├── src/app.js
└── src/utils
└── src/utils/helpers.js
2 directories, 2 files
Tam yollar, çıktıyı kaydettiğinizde ve orijinal dizinden uzakta görüntülediğinizde her girişin içeriğini koruduğu için kullanışlıdır.
Çıktıyı Dosyaya Kaydetme
-o seçeneği çıktıyı terminal yerine bir dosyaya yazar:
$ tree -o structure.txt
Çizgi karakterleri varsayılan olarak UTF-8 formatındadır. Eğer çıktı UTF-8 desteklemeyen bir ortama gidecekse, düz ASCII karakterleri zorlamak için:
$ tree --charset=ascii -o structure.txt
tree komutu ayrıca yapısal formatlarda doğrudan çıktı üretebilir: -J JSON, -X XML ve -H taranabilir HTML listesi üretir:
$ tree -J -L 2 > structure.json
Çıktıyı Sıralama
Girişler varsayılan olarak alfabetik olarak sıralanır. En kullanışlı alternatifler şunlardır:
-t- Son değiştirilme zamanına göre sırala (en eskiden başlayarak)-r- Mevcut sıralama düzenini tersine çevir-v- Sürüm dizelerini doğal olarak sırala (örneğinfile2file10'dan önce gelir)--sort=size- Dosya boyutuna göre sırala
-t seçeneği en eski girişleri ilk sıraya koyar, bu ls -t'nin yaptığına ters bir davranıştır. Her dizinin en son değiştirilmiş dosyalarını üstte görmek için -t seçeneğini -r ile birlikte kullanın:
$ tree -t -r
Hızlı Referans Tablosu
| Komut | Açıklama |
|---|---|
tree |
Mevcut dizini özyinelemeli olarak listele |
tree -L 2 |
Listelemeyi iki seviye ile sınırla |
tree -a |
Gizli dosyaları da dahil et |
tree -d |
Sadece dizinleri göster |
tree -h --du |
İnsan tarafından okunabilir birimlerde toplam boyutları göster |
tree -P "*.js" --prune |
Desene uyan dosyaları göster |
tree -I "node_modules|.git" |
Desene uyan girişleri hariç tut |
tree -f |
Tam yolları göster |
tree -o file.txt |
Çıktıyı bir dosyaya kaydet |
tree -J |
JSON formatında çıktı üret |
Sonuç
tree komutu, karmaşık dizin hiyerarşilerini tek bir okunabilir listede sunar. -L, -I ve --du gibi seçenekler sayesinde çıktınızı ihtiyacınız olan bilgilerle sınırlayabilirsiniz. Dosyalar yerine çalışan süreçlerin ağaç yapısını görüntülemek isterseniz, pstree komutuna da göz atabilirsiniz.
İpucu:
treekomutunun daha da güçlü bir versiyonu olanexakomutunu da inceleyebilirsiniz.examodern bir dosya listeleyicisi olup, varsayılan olarak ağaç yapısında çıktı verir ve renkli gösterim sunar.


