Terminal çıktılarına baktığınızda gözleriniz yanıyorsa, sütunlar birbirine giriyorsa ve hangi bilginin nerede olduğunu bulmak için ekrana yaklaşmak zorunda kalıyorsanız, column komutu tam aradığınız şey. Basit ama bir o kadar güçlü olan bu araç, ham ve düzensiz metin çıktılarını düzgün, okunabilir tablolara dönüştürüyor. Günlük sysadmin işlerinde log analizi yaparken, sistem bilgilerini raporlarken ya da script çıktılarını daha anlaşılır hale getirirken column gerçekten hayat kurtarıcı oluyor.
column Nedir ve Ne İşe Yarar?
column komutu, standart girişten veya dosyadan aldığı metni sütunlar halinde hizalayarak ekrana basar. Unix/Linux sistemlerinde util-linux paketinin bir parçası olarak gelir ve neredeyse tüm dağıtımlarda hazır bulunur.
Temel mantığı şu şekilde: Verilen girdiyi belirtilen ayraçlara göre böler, her sütunun maksimum genişliğini hesaplar ve tüm satırları bu genişliğe göre hizalar. Sonuç olarak elle yazmış gibi düzgün bir tablo çıktısı elde edersiniz.
Peki neden awk veya printf kullanmayalım? Kullanabilirsiniz elbette, ama column bu iş için özelleşmiş bir araç. Sütun genişliklerini dinamik olarak hesaplar, sizin her şeyi elle belirtmenize gerek kalmaz. 10 satırlık bir çıktıda da 10.000 satırlık bir çıktıda da aynı kolaylıkla çalışır.
Temel Sözdizimi ve Parametreler
column [seçenekler] [dosya...]
Temel parametreler şunlardır:
- -t: En çok kullanılan seçenek. Girdiyi tablo formatına çevirir, sütunları otomatik hizalar
- -s: Sütun ayracını belirtir (varsayılan boşluk veya tab)
- -o: Çıktıda sütunlar arası kullanılacak ayracı belirtir
- -n: Başlık satırını belirtir (yeni sürümlerde)
- -H: Başlık satırını gizler
- -N: Sütun isimlerini virgülle belirtir
- -l: Maksimum sütun sayısını sınırlar
- -c: Çıktının maksimum genişliğini (karakter sayısı) belirtir
- -x: Sütunları önce sütun bazında, sonra satır bazında doldurur (varsayılan: önce satır)
- -R: Belirtilen sütunları sağa hizalar
- -W: Belirtilen sütunları kaydırır (wrap)
util-linux 2.23 sürümünden itibaren column komutu önemli iyileştirmeler aldı. Sisteminizde hangi sürümün kurulu olduğunu şu şekilde kontrol edebilirsiniz:
column --version
İlk Adımlar: Basit Kullanım Örnekleri
En basit kullanım şeklinden başlayalım. Diyelim ki bir dosyada şu şekilde düzensiz bir içerik var:
# Düzensiz metin verisi
echo -e "isim soyisim departman maasnAhmet Yilmaz IT 8500nFatma Kaya Muhasebe 7200nMehmet Demir Satis 6800nAyse Oz IT 9100" | column -t
Bu komut şöyle bir çıktı verir:
isim soyisim departman maas
Ahmet Yilmaz IT 8500
Fatma Kaya Muhasebe 7200
Mehmet Demir Satis 6800
Ayse Oz IT 9100
Hiçbir ekstra ayar yapmadan, sadece -t parametresi ile tüm sütunlar otomatik olarak hizalandı. Bu kadar basit.
Şimdi CSV tarzı bir veriyle çalışalım:
# Virgülle ayrılmış veriyi tablo formatına çevirme
cat /tmp/sunucular.csv | column -t -s ','
Burada -s ',' ile virgülün ayraç olduğunu söylüyoruz. Eğer dosyanız noktalı virgülle ayrılmışsa -s ';' kullanırsınız.
Gerçek Dünya Senaryosu 1: /etc/passwd Dosyasını Okumak
/etc/passwd dosyası iki nokta üst üste ile ayrılmış alanlardan oluşur ve ham haliyle okunması gerçekten zor. column ile bunu anında düzeltelim:
# /etc/passwd dosyasını okunabilir formata çevirme
column -t -s ':' /etc/passwd | head -20
Sadece belirli alanları görmek istiyorsak awk ile birleştirebiliriz:
# Sadece kullanıcı adı, UID, GID ve açıklama sütunlarını göster
awk -F: '{print $1, $3, $4, $5}' /etc/passwd | column -t | head -20
Bu kombinasyon sysadmin işlerinde çok sık kullanılır. awk ile istediğiniz sütunları seçip column ile hizalıyorsunuz. Sonuç son derece temiz bir çıktı oluyor.
Gerçek Dünya Senaryosu 2: Disk Kullanımı Raporu
df komutunun çıktısı zaten bir ölçüde formatlanmış olsa da bazen özelleştirilmiş raporlar üretmeniz gerekir. Özellikle birden fazla sunucudan disk bilgisi topluyorsanız column işinizi kolaylaştırır:
# Disk kullanım raporu oluşturma
echo "Aygit Boyut Kullanilan Bos YuzdeDolu MountPoint" > /tmp/disk_rapor.txt
df -h | tail -n +2 | awk '{print $1, $2, $3, $4, $5, $6}' >> /tmp/disk_rapor.txt
column -t /tmp/disk_rapor.txt
Ya da tek satırda pipe zinciriyle:
# df çıktısını özelleştirilmiş formatta göster
{ echo "AYGIT TOPLAM KULLANILAN BOS DOLU_YUZDE BAG_NOKTASI"; df -h | tail -n +2; } | column -t
Kritik disk kullanımını vurgulayan bir script yazalım:
#!/bin/bash
# Disk kullanım raporu - %80 üzerini işaretle
echo "=== Disk Kullanim Raporu ==="
echo ""
echo "AYGIT TOPLAM KULLANILAN BOS DOLUYU BAG_NOKTASI" | column -t
echo "-----------------------------------------------------------"
df -h | tail -n +2 | while read line; do
kullanim=$(echo $line | awk '{print $5}' | tr -d '%')
if [ "$kullanim" -ge 80 ] 2>/dev/null; then
echo "!!! $line" | column -t
else
echo "$line" | column -t
fi
done
Gerçek Dünya Senaryosu 3: Process Listesi Filtreleme
ps komutunun çıktısını filtreleyip özelleştirmek için column harika çalışır:
# Çalışan web sunucu processleri - temiz format
ps aux | grep -E "(nginx|apache|httpd)" | grep -v grep |
awk '{print $1, $2, $3, $4, $11}' |
column -t -N "KULLANICI,PID,CPU%,MEM%,KOMUT" 2>/dev/null ||
awk '{print $1, $2, $3, $4, $11}' | column -t
Daha gelişmiş bir process izleme scripti:
#!/bin/bash
# En fazla CPU kullanan 10 process
echo "Sira KULLANICI PID CPU_PCT MEM_PCT KOMUT" | column -t
echo "=============================================="
ps aux --sort=-%cpu |
awk 'NR>1 && NR<=11 {print NR-1, $1, $2, $3, $4, $11}' |
column -t
column ve grep/awk/sed Kombinasyonları
column tek başına güçlü bir araç, ama metin işleme komutlarıyla birleşince gerçek gücünü ortaya koyuyor.
grep ile Birlikte Kullanım
# Log dosyasından belirli hataları tablo formatında çıkar
grep "ERROR" /var/log/uygulama.log |
awk '{print $1, $2, $3, $NF}' |
column -t | tail -20
awk ile Birlikte Kullanım
# /etc/hosts dosyasını temiz formatta göster
grep -v "^#" /etc/hosts | grep -v "^$" |
awk '{print $1, $2, (NF>2 ? $3 : "-")}' |
column -t -N "IP_ADRESI,HOSTNAME,ALIAS"
sed ile Birlikte Kullanım
# Apache access log analizi
# Son 100 satırdan IP, metod ve yanıt kodunu çıkar
tail -100 /var/log/apache2/access.log |
sed 's/[.*] //' |
awk '{print $1, $6, $7, $9}' |
sed 's/"//g' |
column -t
Sütun Hizalama ve Gelişmiş Seçenekler
util-linux 2.33 ve üzeri sürümlerde bazı gelişmiş özellikler geldi. Bunları kullanabiliyorsanız işleriniz daha da kolaylaşır.
Sağa Hizalama
Sayısal verileri sağa hizalamak için -R parametresi kullanılır:
# Sayısal sütunları sağa hizala
echo -e "Sunucu CPU_Kullanim Bellek_MBnweb01 45.2 2048ndb01 78.9 8192nmail01 12.1 1024" |
column -t -R 2,3
Bu çıktıda 2. ve 3. sütunlar (CPU ve Bellek) sağa hizalanır, sayısal değerler alt alta düzgün görünür.
Özel Sütun Ayracı Çıktısı
# Çıktıda sütunlar arası çizgi koy
echo -e "isim departman maasnAhmet IT 8500nFatma Muhasebe 7200" |
column -t -o " | "
Çıktı şu şekilde olur:
isim | departman | maas
Ahmet | IT | 8500
Fatma | Muhasebe | 7200
Bu format özellikle raporları ekrana yazdırırken veya HTML’e dönüştürmeden önce görsel doğrulama yaparken çok kullanışlı.
Gerçek Dünya Senaryosu 4: Network Bağlantı Raporu
#!/bin/bash
# Aktif ağ bağlantılarını özetleyen rapor
echo "=== Aktif Network Baglantilari ==="
echo ""
# Durum bazlı özet
echo "DURUM SAYI" | column -t
echo "--------------------"
ss -tan |
awk 'NR>1 {print $1}' |
sort | uniq -c |
awk '{print $2, $1}' |
sort -k2 -rn |
column -t
echo ""
echo "=== En Fazla Baglanti Yapan IP'ler ==="
echo ""
echo "IP_ADRESI BAGLANTI_SAYISI" | column -t
echo "----------------------------"
ss -tan state established |
awk 'NR>1 {split($5,a,":"); print a[1]}' |
sort | uniq -c |
sort -rn | head -10 |
awk '{print $2, $1}' |
column -t
Gerçek Dünya Senaryosu 5: Kullanıcı Hesap Yönetim Raporu
Sistem yöneticisi olarak düzenli kullanıcı denetimleri yapmanız gerekir. column bu raporları okunabilir hale getirir:
#!/bin/bash
# Sistem kullanicilari ve son giris bilgileri
echo "=== Kullanici Hesap Raporu ==="
echo "Tarih: $(date '+%Y-%m-%d %H:%M')"
echo ""
echo "KULLANICI UID GRUP KABUK SON_GIRIS" | column -t
echo "=================================================="
while IFS=: read -r kullanici sifre uid gid aciklama ev_dizini kabuk; do
# Sistem kullanıcılarını atla (UID < 1000)
if [ "$uid" -ge 1000 ] && [ "$uid" -lt 65534 ] 2>/dev/null; then
son_giris=$(last -1 "$kullanici" 2>/dev/null |
awk 'NR==1 && $1!="wtmp" {print $4,$5,$6}' |
tr -s ' ')
[ -z "$son_giris" ] && son_giris="Hic_giris_yok"
echo "$kullanici $uid $gid $kabuk $son_giris"
fi
done < /etc/passwd | column -t
Dosya Listeleme ve column
ls komutunun çıktısını özelleştirmek için de column kullanabilirsiniz:
# Detaylı dosya listesini daha okunabilir yap
ls -lh /var/log/ |
awk 'NR>1 {print $1, $3, $4, $5, $9}' |
column -t -N "IZINLER,SAHIP,GRUP,BOYUT,DOSYA"
# Belirli uzantılı dosyaları bul ve detaylarını göster
find /etc -name "*.conf" -type f 2>/dev/null |
xargs ls -lh 2>/dev/null |
awk '{print $5, $9}' |
sort -k1 -rh | head -20 |
column -t -N "BOYUT,DOSYA_YOLU"
Script İçinde column Kullanımı
Monitoring ve raporlama scriptlerinde column kullanmak, çıktıların hem log dosyalarına hem de terminal ekranına düzgün yazılmasını sağlar:
#!/bin/bash
# Sistem durum ozeti
rapor_olustur() {
echo "=========================================="
echo " SISTEM DURUM RAPORU"
echo " $(hostname) - $(date '+%d.%m.%Y %H:%M:%S')"
echo "=========================================="
echo ""
echo "### SISTEM KAYNAKLARI ###"
echo "KAYNAK KULLANIM DURUM" | column -t
echo "-----------------------------------"
# CPU
cpu_yuk=$(uptime | awk -F'load average:' '{print $2}' | cut -d',' -f1 | tr -d ' ')
echo "CPU_Yuk $cpu_yuk Normal" | column -t
# Bellek
bellek=$(free -h | awk '/^Mem:/{print $3"/"$2}')
echo "Bellek $bellek Normal" | column -t
# Swap
swap=$(free -h | awk '/^Swap:/{print $3"/"$2}')
echo "Swap $swap Normal" | column -t
echo ""
echo "### DISK KULLANIMI ###"
{ echo "DOSYA_SISTEMI BOYUT KULLANILAN BOS YUZ BAG_NOKTASI";
df -h | grep -v tmpfs | tail -n +2; } |
column -t
}
# Raporu hem ekrana yaz hem dosyaya kaydet
rapor_olustur | tee "/var/log/sistem_raporu_$(date '+%Y%m%d').txt"
Sık Karşılaşılan Sorunlar ve Çözümleri
Sütunlar hala karışık görünüyor: Muhtemelen verinizdeki boşluklar düzensiz. column varsayılan olarak birden fazla boşluğu tek ayraç sayar. Eğer verinizdeyse boşluk içeren alanlar varsa, önce sed veya awk ile bunları farklı bir ayraçla değiştirin.
# Boşluk içeren alanları tırnak içine almak yerine
# ayraç olarak tab veya özel karakter kullan
awk '{OFS="t"; print $1, $2, $3}' veri.txt | column -t -s $'t'
Çok geniş terminal çıktısı: -c parametresiyle maksimum genişlik belirleyebilirsiniz:
column -t -c 120 veri.txt
Eski sistem uyumluluğu: Bazı eski sistemlerde column sadece -t ve -s parametrelerini destekler. -N, -R, -o gibi parametreler çalışmıyorsa sisteminizin util-linux sürümü eski demektir. Bu durumda awk ile printf kombinasyonuna geçmek daha güvenli olabilir.
Çok fazla sütun olduğunda: Veri sütun sayısı çok fazlaysa ve terminal genişliğiniz yetersizse çıktı bozulabilir. Bu durumda ya belirli sütunları awk ile seçin, ya da less -S ile yatay kaydırma yapın:
column -t buyuk_veri.txt | less -S
column Olmadan column Etkisi: Alternatifler
column komutuna erişiminiz yoksa veya daha fazla kontrol istiyorsanız alternatiflere bakalım.
awk ile benzer etki:
# awk ile basit sütun hizalama
awk '{printf "%-20s %-15s %-10sn", $1, $2, $3}' veri.txt
printf ile:
# printf ile başlık ve veri yazdırma
printf "%-20s %-15s %-10sn" "KULLANICI" "DEPARTMAN" "MAAS"
printf "%-20s %-15s %-10sn" "Ahmet Yilmaz" "IT" "8500"
Ancak bu alternatiflerde sütun genişliklerini elle belirlemeniz gerekir. Veri değiştikçe bu değerleri de güncellemeniz lazım. column ise bunu otomatik yapar.
Sonuç
column komutu, sysadmin araç kutusunda küçük ama vazgeçilmez bir yere sahip. Karmaşık log analizi, sistem raporlama veya yapılandırma dosyası okuma gibi günlük görevlerde terminal çıktılarını anında okunabilir hale getiriyor.
En önemli kullanım senaryolarını özetleyecek olursam:
/etc/passwd,/etc/group,/etc/fstabgibi iki nokta üst üste veya özel ayraçlı dosyaları okumak içinps,df,ss,netstatgibi sistem komutlarının çıktılarını özelleştirmek için- Shell scriptlerinde temiz raporlar üretmek için
- CSV veya TSV verilerini hızlıca incelemek için
grep,awk,sedgibi araçlarla pipe zinciri kurarak güçlü metin işleme akışları oluşturmak için
column -t muhtemelen günde en az birkaç kez kullanacağınız kadar temel bir komut. Buna -s ve -o parametrelerini ekleyince zaten ihtiyaçlarınızın büyük çoğunluğunu karşılıyor. Sisteminiz yeni bir util-linux sürümü destekliyorsa -R ve -N parametrelerini de keşfetmenizi tavsiye ederim.
Terminal çıktıları okunabilir olduğunda, sorunları daha hızlı tespit edersiniz. Ve sorunları hızlı tespit etmek, gece 2’de uyandırılmama şansınızı artırır. Bu tek başına bile column öğrenmek için yeterli bir sebep.