whatis Komutu: Linux’ta Komut Açıklamalarına Hızlı Erişim

Terminal ekranına bakıp “Bu komut ne yapıyordu acaba?” diye düşündüğün oldu mu? Yıllarca Linux kullansanız bile bazı komutların tam olarak ne iş yaptığını unutabilirsiniz. İşte tam bu noktada whatis komutu devreye giriyor. Tek satırlık, öz açıklamalarla komutlar hakkında anında bilgi sunan bu küçük ama değerli araç, günlük sistem yönetimi işlerinde ciddi zaman kazandırıyor.

whatis Komutu Nedir?

whatis, Linux sistemlerinde herhangi bir komut, sistem çağrısı veya konfigürasyon dosyası hakkında kısa ve öz bir açıklama sunan bir yardımcı programdır. Bu açıklamalar doğrudan man (manual) sayfalarından alınır ve genellikle tek satırdan oluşur. Yani man ls yazıp uzun bir kılavuz sayfası okumak yerine, whatis ls yazarak saniyeler içinde “ls ne yapar?” sorusuna cevap alabilirsiniz.

whatis komutu aslında man -f komutunun kısayolu gibi davranır. İkisi de aynı veritabanına, yani mandb tarafından oluşturulan manuel sayfa veritabanına erişir.

whatis ls
# Çıktı: ls (1)  - list directory contents

Basit, temiz, direkt. Tam bir sysadmin aracı.

Temel Kullanım

whatis komutunun temel sözdizimi şu şekildedir:

whatis [SEÇENEKLER] KOMUT_ADI

En basit haliyle tek bir komut adı yazmanız yeterlidir:

whatis cp
whatis grep
whatis chmod
whatis systemctl

Çıktılar genellikle şöyle görünür:

cp (1)          - copy files and directories
grep (1)        - print lines that match patterns
chmod (1)       - change file mode bits
systemctl (1)   - Control the systemd system and service manager

Parantez içindeki rakamlar, man sayfası bölümlerini (section) temsil eder. Bu konuya biraz sonra daha ayrıntılı değineceğiz.

Man Sayfası Bölümleri Hakkında

whatis çıktısında gördüğünüz (1), (2), (3) gibi ifadeler aslında çok önemli bilgiler taşır. Linux man sayfaları farklı kategorilere ayrılmıştır:

  • (1): Kullanıcı komutları (ls, cp, grep gibi)
  • (2): Sistem çağrıları (open, read, write gibi kernel fonksiyonları)
  • (3): Kütüphane fonksiyonları (C standart kütüphanesi)
  • (4): Özel dosyalar (/dev dizini altındaki cihaz dosyaları)
  • (5): Dosya formatları ve kurallar (/etc/passwd, /etc/hosts gibi)
  • (6): Oyunlar ve ekran koruyucular
  • (7): Çeşitli bilgiler (standartlar, protokoller, karakter setleri)
  • (8): Sistem yönetimi komutları (mount, fdisk, useradd gibi)

Bu ayrım özellikle aynı isimde birden fazla man sayfası olan durumlarda önem kazanır. Örneğin passwd hem bir komut (section 1) hem de bir dosya formatıdır (section 5):

whatis passwd
# Çıktı:
# passwd (1)  - change user password
# passwd (5)  - the password file

Birden Fazla Komut Sorgulama

whatis komutunun güzel özelliklerinden biri aynı anda birden fazla komutu sorgulamanıza izin vermesidir:

whatis find locate grep awk sed

Çıktı:

find (1)    - search for files in a directory hierarchy
locate (1)  - find files by name
grep (1)    - print lines that match patterns
awk (1)     - pattern scanning and text processing language
sed (1)     - stream editor for filtering and transforming text

Bu özellik özellikle “hangi komutu kullanmalıyım?” diye düşündüğünüzde, benzer işlev gören araçları hızlıca karşılaştırmanız için oldukça kullanışlıdır.

Önemli Parametreler ve Seçenekler

whatis komutu birkaç kullanışlı parametre sunar:

-d, –debug: Hata ayıklama bilgilerini gösterir, veritabanı sorunlarını tespit etmek için kullanılır.

-v, –verbose: Daha ayrıntılı çıktı üretir.

-r, –regex: Verilen ifadeyi düzenli ifade (regex) olarak yorumlar ve eşleşen tüm sonuçları listeler.

-w, –wildcard: Joker karakter kullanımına izin verir, arama teriminde * ve ? karakterlerini kullanabilirsiniz.

-l, –long: Uzun biçimde çıktı verir, terminal genişliğine göre kesmez.

-s, –sections: Belirli bir man sayfası bölümünde arama yapar.

-m, –systems: Farklı sistemlerin man sayfalarına erişmek için kullanılır.

-M, –manpath: Man sayfası yolunu manuel olarak belirtir.

-L, –locale: Belirli bir dil/locale ayarıyla çalışır.

Regex ile Arama Yapma

-r parametresi ile regex kullanarak daha güçlü aramalar yapabilirsiniz:

whatis -r "^zip"

Bu komut adı “zip” ile başlayan tüm komutları listeler:

zip (1)      - package and compress (archive) files
zipcloak (1) - encrypt entries in a zipfile
zipgrep (1)  - search files in a ZIP archive for lines matching a pattern
zipinfo (1)  - list detailed information about a ZIP archive
zipnote (1)  - write the comments in zipfile to stdout
zipsplit (1) - split a zipfile into smaller zipfiles

Bir servis veya komut grubu hakkında bilgi toplarken bu özellik gerçekten işe yarıyor. Örneğin git ile başlayan tüm komutları görmek istiyorsanız:

whatis -r "^git"

Joker Karakter ile Arama

-w parametresi joker karakter araması yapmanızı sağlar:

whatis -w "ssh*"

Çıktı:

ssh (1)           - OpenSSH remote login client
ssh-add (1)       - adds private key identities to the authentication agent
ssh-agent (1)     - OpenSSH authentication agent
ssh-copy-id (1)   - use locally available keys to authorise logins on a remote machine
ssh-keygen (1)    - OpenSSH authentication key utility
ssh-keyscan (1)   - gather SSH public keys from servers
sshd (8)          - OpenSSH daemon

Bu yöntem, bir araç ailesinin tüm üyelerini keşfetmek için mükemmeldir.

Belirli Bir Bölümde Arama

Aynı isimde birden fazla man sayfası varsa -s parametresiyle belirli bir bölüme odaklanabilirsiniz:

whatis -s 5 passwd
# Çıktı: passwd (5)  - the password file

whatis -s 1 passwd
# Çıktı: passwd (1)  - change user password

Sistem programlama yapan veya kernel modülleriyle ilgilenen sysadmin’ler için bu parametre oldukça değerlidir.

whatis Veritabanını Anlamak

whatis komutunun çalışabilmesi için sistemde güncel bir mandb veritabanının bulunması gerekir. Bu veritabanı genellikle paket kurulumları sırasında veya periyodik olarak cron işleriyle otomatik güncellenir. Ancak bazen şu hatayı alabilirsiniz:

whatis: nothing appropriate.

Bu hata genellikle şu anlama gelir: ya ilgili paketin man sayfası kurulu değil, ya da veritabanı güncel değil. Çözüm için:

sudo mandb

Bu komut tüm man sayfası veritabanını yeniden oluşturur. Büyük sistemlerde birkaç dakika sürebilir. Tamamlandığında şöyle bir çıktı görürsünüz:

Processing manual pages under /usr/share/man...
Updating index cache for path `/usr/share/man/man1'...
...

Yeni bir yazılım kurduğunuzda ve whatis hata verdiğinde ilk yapmanız gereken şey mandb çalıştırmak olmalı.

Gerçek Dünya Senaryoları

Senaryo 1: Yeni Bir Sunucuya Bağlandınızda

Bir sunucuya SSH ile bağlandınız ve hangi araçların kurulu olduğunu ve ne işe yaradığını hızlıca öğrenmek istiyorsunuz. whatis bu durumda tam bir can kurtarıcı:

whatis iptables nftables ufw firewalld

Çıktıya bakarak hangi güvenlik duvarı aracının yüklü olduğunu ve ne işe yaradığını anında anlayabilirsiniz. Eğer sadece biri hakkında çıktı geliyorsa, sistemde hangisinin kurulu olduğunu da anlamış olursunuz.

Senaryo 2: Script Yazarken Komut Kontrolü

Bir bash script yazıyorsunuz ve kullandığınız komutların kısaca ne yaptığını bir başkasına açıklamanız gerekiyor ya da sadece kendiniz emin olmak istiyorsunuz:

for cmd in rsync tar gzip bzip2 xz; do
    echo -n "$cmd: "
    whatis $cmd 2>/dev/null | head -1
done

Bu döngü size her komut için tek satırlık açıklama verir. Özellikle dokümantasyon hazırlarken veya bir script’in başına yorum satırı eklerken kullanışlıdır.

Senaryo 3: Log Analizi Araçlarını Keşfetme

Bir sunucuda log analizi yapmanız gerekiyor ve hangi araçların kullanılabileceğini keşfetmek istiyorsunuz:

whatis -r "log" | grep -i "(1)"

Bu komut adında veya açıklamasında “log” geçen tüm kullanıcı komutlarını listeler. Belki daha önce duymadığınız bir araç keşfedebilirsiniz.

Senaryo 4: Konfigürasyon Dosyası Sözdizimini Anlamak

Bir konfigürasyon dosyasının formatı hakkında man sayfası olup olmadığını hızlıca kontrol etmek için:

whatis -s 5 fstab crontab sudoers

Çıktı:

fstab (5)    - static information about the filesystems
crontab (5)  - tables for driving cron
sudoers (5)  - default sudo security policy plugin

Bu şekilde man 5 fstab yazarak doğrudan konfigürasyon dosyası formatı hakkındaki man sayfasına ulaşabilirsiniz.

Senaryo 5: Ekip Onboarding Sürecinde

Ekibinize yeni katılan bir junior sysadmin var ve ona Linux komutlarını öğretmek istiyorsunuz. whatis ile interaktif bir öğrenme ortamı oluşturabilirsiniz:

whatis -r ".*" | grep "(8)" | sort | less

Bu komut sistemdeki tüm sistem yönetimi araçlarını (section 8) alfabetik sırayla listeler. Yeni başlayanlar için inanılmaz bir keşif aracı.

whatis ile apropos Farkı

whatis ve apropos komutlarını sıkça karıştırıyorum diyenler için farkı netleştirelim:

whatis: Tam komut adını bilmeniz gerekir, size o komutun açıklamasını verir.

apropos: Bir anahtar kelime aratırsınız, o kelimeyle ilgili tüm komutları ve açıklamalarını listeler.

# whatis - tam isim biliyorsunuz
whatis mount

# apropos - ne aradığınızı biliyorsunuz ama komutu bilmiyorsunuz
apropos "mount filesystem"

Pratik kural: Komutu biliyorsanız whatis, komutun adını bilmiyorsanız apropos kullanın. Aslında apropos komutu man -k ile eşdeğerdir, tıpkı whatis‘in man -f ile eşdeğer olduğu gibi.

# Bu iki komut aynı sonucu verir
whatis ls
man -f ls

# Bu iki komut da aynı sonucu verir
apropos "list files"
man -k "list files"

Alias ve Fonksiyon Önerileri

whatis komutunu daha da kullanışlı hale getirmek için bazı alias ve fonksiyon önerileri:

# .bashrc veya .zshrc dosyanıza ekleyin

# Komut hakkında hızlı özet - bulamazsa man'e yönlendir
function wtf() {
    whatis "$1" 2>/dev/null || echo "$1: man sayfası bulunamadı, 'man $1' deneyin"
}

# Birden fazla komut hakkında toplu bilgi
function whatare() {
    for cmd in "$@"; do
        printf "%-20s " "$cmd:"
        whatis "$cmd" 2>/dev/null | awk -F' - ' '{print $2}' | head -1
    done
}

Bu fonksiyonları tanımladıktan sonra:

wtf rsync
whatare find grep awk sed sort uniq

şeklinde kullanabilirsiniz.

Sistem Yönetimi İpuçları

Man Sayfası Kurulu Mu Kontrolü

Bir paketin man sayfasının kurulu olup olmadığını kontrol etmek için whatis pratik bir yol sunar:

if whatis docker &>/dev/null; then
    echo "Docker man sayfası kurulu"
else
    echo "Docker man sayfası bulunamadı"
    echo "Kurmak için: apt install docker.io"
fi

Hangi Bölümlerde Man Sayfası Var?

Bir komut için hangi bölümlerde man sayfası bulunduğunu görmek için:

whatis open
# Çıktı:
# open (1)  - start a program on a new virtual terminal (VT).
# open (2)  - open and possibly create a file

Böylece hem kullanıcı komutu hem de sistem çağrısı olan open hakkında bilgi alabilirsiniz.

Locale ve Dil Desteği

Eğer sisteminizde Türkçe man sayfaları kuruluysa:

whatis -L tr ls

Ancak çoğu sistemde Türkçe man sayfaları bulunmadığından bu genellikle İngilizce sonuç döner. Yine de çok dilli ortamlarda çalışıyorsanız -L parametresi işe yarıyor.

Potansiyel Sorunlar ve Çözümleri

“nothing appropriate” Hatası

En sık karşılaşılan sorun budur. Çözüm adımları sırasıyla:

# 1. Veritabanını güncelle
sudo mandb

# 2. Paketin man sayfasını kur (Debian/Ubuntu için)
sudo apt install man-db

# 3. Spesifik bir paketin man sayfası için
sudo apt install packagename-doc

# 4. Man path'i kontrol et
manpath

Eksik Paket Man Sayfaları

Bazı minimal kurulumlu sunucularda (özellikle Docker container’larında) man sayfaları kurulu gelmeyebilir:

# Ubuntu/Debian üzerinde
sudo apt update && sudo apt install -y man-db manpages

# CentOS/RHEL üzerinde  
sudo yum install -y man-db man-pages

Veritabanı Bozulması

Nadir de olsa mandb veritabanı bozulabilir. Temiz başlangıç için:

sudo rm -rf /var/cache/man/*
sudo mandb --create

Pratik Kombinasyonlar

whatis komutunu diğer araçlarla birleştirerek çok daha güçlü kullanım senaryoları oluşturabilirsiniz:

# Sistemde kurulu tüm network araçlarını bul
whatis -r ".*" | grep -iE "(network|socket|interface|ip|tcp|udp)"

# Section 8 komutlarını listele ve daha okunabilir format
whatis -r ".*" | awk -F'[()]' '$2 == "8" {print $1}' | sort

# Belirli bir komutun varlığını kontrol edip bilgi göster
command -v nginx &>/dev/null && whatis nginx || echo "nginx kurulu degil"

Sonuç

whatis komutu, sadeliğiyle göz dolduruyor. Yüzlerce parametre ve karmaşık sözdizimi gerektirmiyor, tek bir kelimeyle işinizi görüyor. Ancak bu sadeliğin arkasında güçlü bir altyapı var: mandb veritabanı, bölümlere ayrılmış man sayfası sistemi ve regex/wildcard desteği.

Günlük sysadmin işlerinde whatis komutunu şu durumlarda kullanmanızı öneririm: yeni bir sunucuya bağlandığınızda mevcut araçları keşfetmek için, bir komutun işlevini hızlıca hatırlamak istediğinizde, ekibinize yeni katılan kişilere araç ekosistemini tanıtmak için ve script’lerde araçların varlığını kontrol etmek amacıyla.

man sayfaları okumak zaman alır, --help çıktıları bazen fazla detaylıdır. Ama whatis size tam ihtiyacınız olan kadarını verir: ne olduğunu. Geri kalanını zaten biliyorsunuz ya da gerektiğinde öğrenirsiniz. Linux’ta her şeyde olduğu gibi, doğru aracı doğru yerde kullanmak en büyük beceridir ve whatis de kendi nişinde mükemmel bir iş çıkartıyor.

Yorum yapın