Yıllarca Linux kullandıktan sonra fark ettiğim bir şey var: En iyi sysadmin’ler Google’a koşmadan önce man komutuna bakarlar. Bu alışkanlık, hem internetsiz ortamlarda hayat kurtarır hem de bir komutun tüm yeteneklerini keşfetmenizi sağlar. Ama dürüst olmak gerekirse, man sayfaları ilk bakışta biraz ürkütücü gelebilir. Bu yazıda man komutunu gerçek anlamda kullanmayı, aramayı, filtrelemeyi ve hayatınızı kolaylaştıracak ipuçlarını öğreneceğiz.
man Komutu Nedir?
man, “manual” (kılavuz) kelimesinin kısaltmasıdır ve Linux sistemlerinde her komutun, sistem çağrısının, kütüphane fonksiyonunun ve yapılandırma dosyasının dokümantasyonuna erişmenizi sağlar. Bu sayfalar sistemin kendi içinde bulunur, internet bağlantısı gerekmez ve çoğu zaman resmi dokümantasyonun en güncel ve doğru versiyonudur.
Temel kullanımı son derece basittir:
man ls
man grep
man nginx
Ama işin güzelliği bu kadar değil. man komutu çok daha fazlasını yapabilir ve doğru kullanıldığında sizi gerçek anlamda güçlü kılar.
man Sayfalarının Bölüm Yapısı
man sayfaları rastgele yazılmamıştır. Her sayfanın standart bölümleri vardır ve bunları tanımak okuma hızınızı ciddi ölçüde artırır.
Bir man sayfasını açtığınızda şu bölümleri görürsünüz:
- NAME: Komutun adı ve tek cümlelik açıklaması
- SYNOPSIS: Komutun sözdizimi, hangi parametrelerle nasıl kullanıldığı
- DESCRIPTION: Komutun ne yaptığının ayrıntılı açıklaması
- OPTIONS: Tüm seçenekler ve bayraklar
- EXAMPLES: Kullanım örnekleri (her sayfada olmayabilir)
- FILES: İlgili yapılandırma dosyaları
- SEE ALSO: İlgili diğer komutlar ve sayfalar
- BUGS: Bilinen hatalar veya sınırlamalar
- AUTHOR: Yazarlar hakkında bilgi
- EXIT STATUS: Komutun döndürdüğü çıkış kodları
Bir sayfayı açtığınızda direkt OPTIONS bölümüne atlamak istiyorsanız, birazdan göreceğimiz arama özelliğini kullanabilirsiniz.
man Bölüm Numaraları
Bu konu çoğu kişinin bilmediği ama gerçekten önemli bir ayrıntıdır. man sayfaları 9 farklı bölüme ayrılmıştır:
- Bölüm 1: Kullanıcı komutları (ls, grep, find vb.)
- Bölüm 2: Sistem çağrıları (open, read, write, fork vb.)
- Bölüm 3: Kütüphane fonksiyonları (printf, malloc, fopen vb.)
- Bölüm 4: Özel dosyalar ve aygıtlar (/dev altındaki dosyalar)
- Bölüm 5: Dosya formatları ve yapılandırma dosyaları (passwd, fstab vb.)
- Bölüm 6: Oyunlar
- Bölüm 7: Çeşitli konular, makrolar, standartlar
- Bölüm 8: Sistem yönetimi komutları (mount, iptables, useradd vb.)
- Bölüm 9: Kernel rutinleri
Neden önemli? Çünkü bazı isimler birden fazla bölümde geçer. Örneğin passwd hem bir komuttur (bölüm 1) hem de bir yapılandırma dosyasıdır (bölüm 5). Sadece man passwd yazdığınızda bölüm 1’i görürsünüz. Dosya formatını görmek istiyorsanız:
man 5 passwd
man 1 passwd
man 2 open
man 3 printf
Bir terimin hangi bölümlerde geçtiğini görmek için:
man -f passwd
# ya da eşdeğeri:
whatis passwd
Bu komut şuna benzer bir çıktı verir:
passwd (1) - change user password
passwd (5) - the password file
man Sayfası İçinde Gezinme
man sayfaları genellikle less pager’ı ile açılır. Bu yüzden less komutunun kısayollarını bilmek hayatınızı kolaylaştırır.
Temel gezinme tuşları:
- j veya aşağı ok: Bir satır aşağı
- k veya yukarı ok: Bir satır yukarı
- Space veya Page Down: Bir sayfa aşağı
- b veya Page Up: Bir sayfa yukarı
- g: Sayfanın başına git
- G: Sayfanın sonuna git
- q: Çıkış
Arama yapmak için:
- /kelime: İleriye doğru ara
- ?kelime: Geriye doğru ara
- n: Sonraki eşleşmeye git
- N: Önceki eşleşmeye git
Örneğin man rsync açıkken --exclude seçeneğini aramak için:
# man rsync açıkken:
# /--exclude yazıp Enter'a basın
# n ile sonraki eşleşmeye gidin
man -k ile Arama: Komutu Unuttuğunuzda
Bir işlemi yapmak istiyorsunuz ama komutun adını tam hatırlamıyorsunuz. İşte burada man -k devreye girer. Bu, apropos komutunun eşdeğeridir ve tüm man sayfası açıklamalarında arama yapar.
man -k "disk usage"
man -k partition
man -k "network interface"
Bu komutu çalıştırdığınızda ilgili tüm komutların listesini görürsünüz. Örneğin man -k partition şuna benzer bir çıktı verir:
cfdisk (8) - display or manipulate a disk partition table
fdisk (8) - manipulate disk partition table
parted (8) - a partition manipulation program
sfdisk (8) - display or manipulate a disk partition table
Eğer apropos veya man -k “nothing appropriate” hatası veriyorsa, mandb veritabanını yenilemeniz gerekiyor:
sudo mandb
man -K ile Tam Metin Arama
Küçük -k ile büyük -K arasındaki fark önemlidir. -k sadece başlık ve kısa açıklamalarda arama yapar. -K ise tüm man sayfalarının içeriğinde arama yapar. Bu yavaştır ama çok daha kapsamlıdır.
man -K "inode limit"
man -K "tcp keepalive"
Bu komut çalışırken her eşleşme bulduğunda size sorar: bu sayfayı görmek istiyor musunuz, geçmek mi istiyorsunuz, yoksa aramayı durdurmak mı? y, n veya q ile yanıt verebilirsiniz.
Gerçek Dünya Senaryosu: Bir Sunucuda Sorun Giderme
Diyelim ki bir üretim sunucusunda find komutuyla eski log dosyalarını silmeniz gerekiyor ama -mtime parametresinin tam olarak nasıl çalıştığını hatırlamıyorsunuz. Google’a gitmeye gerek yok:
man find
# Açılan sayfada:
# /-mtime yazıp Enter'a basın
Ya da doğrudan terminalde hızlıca bakmak istiyorsunuz:
man find | grep -A 5 "-mtime"
Bu komut -mtime parametresini ve ardından gelen 5 satırı doğrudan terminale yazdırır. Çok pratik bir yöntemdir.
Başka bir senaryo: Yeni bir sunucu kuruyorsunuz ve crontab sözdizimini unutmuşsunuz:
man 5 crontab
Dikkat edin, burada bölüm 5 kullandık çünkü crontab dosya formatını görmek istiyoruz, komutu değil.
–help ile man Arasındaki Fark
Pek çok kişi --help ile man sayfasını karıştırır veya birini kullanıp diğerini ihmal eder. İkisi birbirini tamamlar ama farklı durumlarda daha kullanışlıdır.
--help seçeneği:
ls --help
grep --help
--help hızlı bir özet verir, terminalden ayrılmadan seçeneklere bakmanızı sağlar. Ama genellikle eksiktir, örnekler içermez ve kaydırma/arama özelliği yoktur.
man ise tam, kapsamlı dokümantasyonu sunar. Örnekler, bölümler arası çapraz referanslar, ilgili komutlar ve çok daha fazla bağlam bilgisi içerir.
Pratik kural şudur: Hızlıca bir parametre sözdizimini hatırlamak için --help, bir konuyu gerçekten anlamak veya tüm seçenekleri keşfetmek için man kullanın.
man Sayfalarını Farklı Formatlarda Okumak
man sayfalarını her zaman terminal içinde okumak zorunda değilsiniz. Farklı ihtiyaçlar için farklı formatlar kullanabilirsiniz.
PDF olarak kaydetmek:
man -t ls | ps2pdf - ls_manual.pdf
HTML formatına çevirmek (bazı sistemlerde):
man2html ls > ls_manual.html
Düz metin olarak kaydetmek, örneğin başka bir araca geçirmek için:
man ls | col -b > ls_plain.txt
col -b komutu, man sayfalarındaki arka plan kalınlaştırma karakterlerini temizler ve okunabilir düz metin elde edersiniz.
MANPATH ve Özel man Sayfaları
Sistem yöneticisi olarak kendi geliştirdiğiniz araçlar veya şirkete özel scriptler için man sayfası yazabilirsiniz. Önce MANPATH değişkenini anlamak gerekir:
manpath
echo $MANPATH
Bu komut, sistemin man sayfalarını nerede aradığını gösterir. Genellikle /usr/share/man, /usr/local/share/man gibi dizinler görürsünüz.
Kendi man sayfanızı eklemek için:
# Kendi man dizini oluştur
mkdir -p ~/mytools/man/man1
# Oraya man sayfası yaz (groff formatında)
# Sonra MANPATH'e ekle
export MANPATH="$HOME/mytools/man:$MANPATH"
# Artık şu çalışır:
man mytool
Bu özellikle kurumsal ortamlarda, kendi geliştirdiğiniz araçları belgelendirmek için çok değerlidir.
man ile Sistem Çağrılarını Öğrenmek: Geliştiriciler için
Sysadmin olarak zaman zaman uygulama geliştiricilerle çalışmanız gerekir. Bir uygulama /proc dosya sistemini kullanıyorsa veya belirli sistem çağrıları yapıyorsa, bunları man ile anlayabilirsiniz:
man 2 open
man 2 fork
man 2 mmap
man 7 tcp
man 7 socket
Örneğin bir uygulama TCP bağlantısı ayarlarında sorun yaşıyorsa:
man 7 tcp
Bu sayfa, TCP_KEEPIDLE, TCP_KEEPINTVL, SO_REUSEADDR gibi socket seçeneklerini, kernel parametrelerini ve bunların nasıl çalıştığını detaylı anlatır. Hangi sysctl parametresinin ne işe yaradığını anlamak için mükemmeldir.
pinfo ve info: man’ın Kardeşleri
Bazı GNU araçları man yerine info formatında daha ayrıntılı dokümantasyon sunar. info hiyerarşik bir yapıya sahiptir ve man‘dan daha kapsamlı olabilir:
info coreutils
info bash
info grep
pinfo ise info‘nun daha kullanıcı dostu bir alternatifidir:
pinfo ls
Bir kural olarak: Bir komut için man sayfası yüzeysel geliyorsa info sayfasına bakın. Özellikle bash, make, gcc gibi GNU araçları için info çok daha zengin içerik sunar.
Gerçek Dünya Senaryosu: Nginx Yapılandırması
Nginx’in man sayfası genellikle çok kısa olsa da, nginx ve ilgili modüller için şunları yapabilirsiniz:
man nginx
man 5 nginx.conf # Eğer varsa
Daha verimli bir yaklaşım şudur. Bir yapılandırma direktifini anlamak istiyorsanız ve online dokümana erişiminiz yoksa:
nginx -h
man nginx
# Sonra SEE ALSO bölümüne bakın
Benzer şekilde systemd birimlerini anlamak için:
man systemd.service
man systemd.unit
man systemd.timer
Bu sayfalar inanılmaz derecede kapsamlıdır. systemd.service man sayfası, bir service dosyasında kullanabileceğiniz her direktifi örnekleriyle açıklar. Bunu bilmeden systemd servis dosyası yazmak çok daha zordur.
man Sayfalarını Daha Verimli Okumak için İpuçları
Yıllar içinde geliştirdiğim bazı alışkanlıklar:
Renklendirme ekleyin: Varsayılan man görünümü biraz sıkıcıdır. LESS_TERMCAP değişkenlerini ayarlayarak renkli man sayfaları elde edebilirsiniz. Bunun yerine daha kolay bir yol olarak bat aracını kullanabilirsiniz:
# bat kuruluysa:
export MANPAGER="sh -c 'col -bx | bat -l man -p'"
man ls
tldr ile hızlı özet: man sayfaları kapsamlı ama uzundur. tldr (Too Long Didn’t Read) aracı, pratik örneklerle kısa özet sayfaları sunar:
# Kurulum (çoğu distro'da)
sudo apt install tldr
# ya da
sudo dnf install tldr
tldr tar
tldr rsync
tldr find
Ama dikkat: tldr tüm seçenekleri göstermez, sadece yaygın kullanım örnekleri verir. Tam bilgi için her zaman man sayfasına dönün.
SYNOPSIS bölümünü okumayı öğrenin: Pek çok kişi bu bölümü atlar ama sözdizimini anlamak için kritiktir. Köşeli parantez [] opsiyonel parametreleri, ... tekrarlanabilir parametreleri, | “veya” seçeneğini gösterir. Örneğin:
man cp
# SYNOPSIS:
# cp [OPTION]... [-T] SOURCE DEST
# cp [OPTION]... SOURCE... DIRECTORY
Bu bize cp‘nin birden fazla kullanım biçimi olduğunu gösteriyor.
Bash Alias’larıyla man Kullanımını Hızlandırma
Sık kullandığınız man komutlarını alias haline getirin:
# .bashrc veya .zshrc dosyasına ekleyin:
alias mank='man -k' # hızlı arama
alias manf='man -f' # hangi bölümlerde var
alias mans='man -K' # tam metin arama
# Kullanım:
mank "file permission"
manf chmod
Bir de şunu ekleyebilirsiniz: Bir komutun man sayfası yoksa otomatik olarak --help çıktısını göster:
function h() {
man "$1" 2>/dev/null || "$1" --help 2>&1 | less
}
# Kullanım:
h ls
h docker
h myCustomScript
Bu fonksiyon önce man sayfasına bakar, bulamazsa --help çıktısını less ile gösterir. Hayat kurtarıcıdır.
man Sayfaları Olmayan Araçlar
Bazı araçların man sayfası yoktur, özellikle üçüncü parti araçlar. Bu durumda alternatiflere bakın:
# man sayfası yoksa:
docker help
docker run --help
# git için bölümlere göre:
man git
man git-commit
man git-rebase
man git-config
git konusunda özellikle dikkat edin: man git ile man git-commit farklı sayfalardır. Git’in her alt komutu için ayrı man sayfası vardır ve bunlar son derece kapsamlıdır.
Sonuç
man komutu, Linux’un en az takdir edilen ama en güçlü araçlarından biridir. Sadece man ls yazıp birkaç satır okumakla sınırlı kalmayın. man -k ile komut arayın, bölüm numaralarını kullanın, sayfa içinde arama yapın, SEE ALSO bölümünü takip edin ve zamanla SYNOPSIS sözdizimini okumayı içgüdüsel hale getirin.
Bir sysadmin olarak şunu söyleyebilirim: İnternetsiz bir ortamda kritik bir sorunla karşılaştığınızda, man sayfaları sizi kurtarır. Ama daha da önemlisi, man sayfalarını düzenli kullanan kişiler komutları çok daha derinlemesine anlıyor. find, rsync, awk, sed gibi güçlü araçların yüzde onunu biliyorsanız, man sayfaları size geri kalan yüzde doksanı gösterir.
Alışkanlık haline getirmek için basit bir kural koyun kendinize: Bir komutu kullanmadan önce, emin olmadığınız bir parametre varsa, direkt man sayfasını açın. İlk hafta yavaş hissedebilirsiniz ama bir ay sonra hem çok daha hızlı olduğunuzu hem de komutları çok daha iyi anladığınızı fark edersiniz.