cal Komutu: Linux Terminalde Takvim ve Tarih İşlemleri

Terminal ekranında takvim görüntülemek kulağa belki gereksiz bir lüks gibi gelebilir. “Telefonuma bakayım zaten” diyebilirsiniz, haklısınız da. Ama bir sunucuda çalışırken, script yazarken ya da tarih hesaplamaları yaparken cal komutunun ne kadar işe yaradığını ilk kez fark ettiğinizde o küçük araç için içten bir sempati gelişiyor. Bu yazıda cal komutunu her yönüyle inceleyeceğiz, gerçek dünyada ne işe yaradığını göstereceğiz ve aklınızda kalmayacak parametreleri pratik senaryolarla pekiştireceğiz.

cal Komutu Nedir?

cal, Unix ve Linux sistemlerinde terminal üzerinden takvim görüntülemeye yarayan küçük ama kullanışlı bir araçtır. Çoğu Linux dağıtımında util-linux paketi içinde gelir, dolayısıyla neredeyse her sistemde hazır bulunur. Basit görünümünün arkasında oldukça esnek bir araç yatıyor: belirli bir ayı, yılı, birden fazla ayı yan yana görüntüleyebilir, Julian takvimini kullanabilir, haftanın başlangıç gününü değiştirebilirsiniz.

cal komutunun iki ana versiyonu vardır. Geleneksel cal ve daha gelişmiş ncal. Bu iki araç arasındaki farkları ve her birinin güçlü yönlerini ayrıntılı olarak ele alacağız.

Temel Kullanım

En basit haliyle cal komutunu argümansız çalıştırdığınızda bulunduğunuz ayın takvimine ulaşırsınız:

cal

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

   Kasım 2024
Pt Sa Ça Pe Cu Ct Pz
             1  2  3
 4  5  6  7  8  9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

Bugünün tarihi otomatik olarak vurgulanır (terminalde ters video efektiyle gösterilir). Bu özellik özellikle “bugün ayın kaçı?” sorusunu akılda tutmak zorunda kalmadan tarih bağlamında çalışırken işe yarar.

Temel Parametreler

Belirli Bir Ayı Görüntülemek

Geçmiş ya da gelecekteki bir ayı görüntülemek için ay ve yıl parametrelerini verebilirsiniz:

cal 3 2025

Bu komut Mart 2025 takvimine ulaştırır. Parametre sırası önemlidir: önce ay (1-12 arası rakam), sonra yıl (dört haneli).

Belirli Bir Yılın Tamamını Görüntülemek

Sadece yıl numarası verirseniz o yılın tüm aylarını ekrana getirir:

cal 2025

Bu komutun çıktısı oldukça geniş olur; tüm yıl üç sütun halinde görüntülenir. Yıllık planlama yaparken ya da bir yılın hangi gün hangi tarihe denk geldiğini hızlıca kontrol ederken kullanışlıdır.

Önceki, Şimdiki ve Sonraki Ayı Birlikte Görmek

Bu benim kişisel favorim. Günlük çalışırken “geçen ay kaç çektik, bu ay neredeyiz, gelecek ay ne var?” sorusuna tek komutla cevap alırsınız:

cal -3

Üç aylık görünüm yan yana gelir. Toplantı tarihleri, sprint dönemleri, yedekleme periyotları gibi konuları kafanızda canlandırmanız kolaylaşır.

Önemli Parametreler

-1: Sadece mevcut ayı gösterir (varsayılan davranış).

-3: Önceki ay, mevcut ay ve sonraki ayı yan yana gösterir.

-n [sayı]: Belirtilen sayıda ay gösterir. Örneğin -n 6 altı ay gösterir.

-y: Mevcut yılın tamamını gösterir.

-Y: Önümüzdeki yılı gösterir.

-j: Julian takvimini kullanır. Günleri 1 Ocak’tan itibaren sırayla numaralandırır (1-365/366).

-m [gün]: Haftanın başlangıç gününü ayarlar. 1 pazartesi, 7 pazar anlamına gelir.

-S: Haftayı pazar günü başlatır.

-M: Haftayı pazartesi günü başlatır (Avrupa standardı).

-w: Hafta numaralarını gösterir.

-h: Bugünün vurgusunu devre dışı bırakır (script çıktısı için kullanışlı).

Julian Takvimi ve Günlük Numaralandırma

cal -j
cal -j 2 2025

Julian takvimi, yılın kaçıncı günündeyiz sorusunu anında yanıtlar. Örneğin meteoroloji, tarım, lojistik ve bilimsel hesaplamalarda “yılın 045. günü” gibi ifadeler sıkça kullanılır. Backup scriptlerinde ya da log dosyası isimlendirmesinde Julian günü kullanmak bazen çok pratik olur.

# Bugünün Julian gün numarasini öğrenmek
date +%j

Bu komutla cal -j birleşimini kullanarak “yılın hangi gündeyiz ve o günün hangi tarihe karşılık geldiği” bilgisine ulaşabilirsiniz.

ncal Komutu: cal’ın Gelişmiş Kardeşi

ncal, cal‘ın yeniden yazılmış ve genişletilmiş versiyonudur. Aynı pakette gelir ama farklı bir görüntüleme modeli kullanır: günler satırda, haftalar sütunda gösterilir.

ncal

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

    Kasım 2024
Pt  4 11 18 25
Sa  5 12 19 26
Ça  6 13 20 27
Pe  7 14 21 28
Cu  1  8 15 22 29
Ct  2  9 16 23 30
Pz  3 10 17 24

Bu format başta garip görünebilir ama alıştıkça “bu haftanın tüm perşembeleri hangileri?” gibi sorulara anında cevap verdiğini fark edersiniz.

ncal komutunun bazı ek parametreleri:

-b: cal tarzı görünüme geçer (klasik yatay format).

-e: Paskalya gününü gösterir.

-o: Ortodoks Paskalyasını gösterir.

-p: Ülkelerin hafta başlangıç günleri listesini gösterir.

-w: ISO hafta numaralarını ekler.

# ISO hafta numaralariyla takvim
ncal -w

# Paskalya tarihini bul
ncal -e 2025
ncal -e 2026

Hafta Numaraları ile Çalışmak

Kurumsal ortamlarda “22. hafta sprinti”, “hafta 15 raporu” gibi ifadeler çok yaygındır. cal ve ncal ile hafta numaralarını kolayca takip edebilirsiniz:

# Mevcut ay hafta numaralariyla
ncal -w

# Belirli bir ay hafta numaralariyla
ncal -w 6 2025

ISO 8601 standardına göre hafta numaralandırması yapıldığı için kurumsal sistemlerle uyumludur. Özellikle proje yönetimi araçlarıyla çalışırken “şu an kaçıncı haftadayız?” sorusuna hızlıca cevap bulmak için bu kombinasyon çok işe yarar.

Gerçek Dünya Senaryoları

Senaryo 1: Aylık Yedekleme Planı Hazırlama

Bir müşteri için aylık yedekleme takvimi oluşturuyorsunuz. Hangi günlerin hafta içi, hangi günlerin hafta sonu olduğunu hızlıca görmek istiyorsunuz:

# Sonraki 3 ayi goster
cal -3

# Belirli bir yilin tum ayi-gun bilgisini cek
cal 2025 | head -40

Bu çıktıyla hangi ayda kaç iş günü olduğunu görebilir, yedekleme pencerelerini buna göre planlayabilirsiniz. Tabi bu işi tamamen otomatize etmek için date komutuyla birleştirmeniz gerekecek, ama başlangıç noktası olarak cal çıktısı çok işe yarar.

Senaryo 2: Sunucu Sözleşme Tarihi Takibi

Birden fazla müşteriyle çalışıyorsanız ve her birinin sözleşme yenileme tarihi farklıysa:

# Belirli ay ve yili hizli kontrol
cal 3 2025   # Mart 2025
cal 9 2025   # Eylul 2025

Takvimi görerek “bu tarih hangi güne denk geliyor?” sorusunu saniyeler içinde yanıtlayabilirsiniz.

Senaryo 3: Cron Job Planlaması

Bir cron job yazıyorsunuz ve bu işin her ayın ilk pazartesi günü çalışmasını istiyorsunuz. Hangi tarihlerin pazartesi olduğunu bulmak için:

# Ocak 2025 takvimini goster, ilk pazartesiyi bul
cal 1 2025

# ncal ile daha net gorunum
ncal 1 2025

ncal çıktısında pazartesi satırına bakarak doğrudan tarihleri görürsünüz.

Senaryo 4: Geçmiş Tarih Doğrulama

Log analizi yaparken “3 ay önceki olayın tarihi neydi?” diye düşündünüz. Belirli bir tarihin hangi güne denk geldiğini doğrulamak için:

# 6 ay oncesini kontrol et
cal 5 2024

# Belirli bir tarihin hangi gune geldigi
ncal 5 2024

Bu özellikle müşteriye “olayınız 17 Mayıs Cuma gecesi olmuş” gibi kesin ve doğru bilgi vermeniz gerektiğinde çok kritik.

Senaryo 5: Yıl Sonu Planlama

Sistem bakım pencerelerini yıl bazında planlarken:

# Bu yilin tamamina bak
cal -y

# Gelecek yilin tamamina bak
cal -Y

# Sadece Aralik ve Ocak aylarini yan yana goster
cal -n 2 12 2024

Yıl geçiş döneminde bakım pencereleri seçmek, tatil günlerini dikkate alarak planlama yapmak için bu görünüm çok kullanışlı.

cal ve date Komutlarını Birlikte Kullanmak

cal kendi başına takvim gösterir ama date komutuyla birleşince çok daha güçlü hale gelir. İşte bazı pratik kombinasyonlar:

# Mevcut ayin takvimini goster
cal $(date +%m) $(date +%Y)

# Gecen ayin takvimini goster
cal $(date -d "last month" +%m) $(date -d "last month" +%Y)

# Bir sonraki ayin takvimini goster
cal $(date -d "next month" +%m) $(date -d "next month" +%Y)

# 90 gun sonraki tarihin hangi ayda oldugunu goster
cal $(date -d "+90 days" +%m) $(date -d "+90 days" +%Y)

Bu kombinasyonlar özellikle bash scriptlerde çok kullanışlıdır. Otomatik rapor sistemlerinde ya da monitoring araçlarında tarih bazlı ekran çıktıları oluştururken bu kalıpları kullanabilirsiniz.

Script İçinde cal Kullanımı

cal çıktısını bir script içinde kullanmak istediğinizde dikkat etmeniz gereken bir şey var: normal çalışmada bugünün tarihi terminal çıktısında vurgulanır, ama bu vurgulama için kullanılan escape karakterleri scriptte sorun çıkarabilir. Bu durumda -h parametresini kullanın:

#!/bin/bash
# Aylik rapor basligina takvim ekle
echo "=== Aylik Sistem Raporu ==="
echo "Raporun hazirlandigi ay:"
echo ""
cal -h $(date +%m) $(date +%Y)
echo ""
echo "Rapor tarihi: $(date '+%d %B %Y %H:%M')"

Yukarıdaki script bir aylık rapor dosyasına temiz takvim çıktısı ekler. Monitoring sistemlerinde, otomatik e-posta içeriklerinde ya da log başlıklarında bu tür eklemeler okunabilirliği artırır.

Haftalık Kontrol Scripti

#!/bin/bash
# Bu hafta ve gelecek haftayi gosteren basit kontrol scripti

CURRENT_WEEK=$(date +%V)
CURRENT_YEAR=$(date +%Y)

echo "Simdi: $(date '+%A, %d %B %Y')"
echo "ISO Hafta Numarasi: $CURRENT_WEEK"
echo ""
echo "Bu ay:"
ncal -w $(date +%m) $(date +%Y)
echo ""
echo "Gelecek ay:"
ncal -w $(date -d "next month" +%m) $(date -d "next month" +%Y)

Bu scripti ~/.bashrc dosyasına eklediğinizde ya da terminal açılışında çalıştırdığınızda haftalık bağlamı hızlıca kavrayabilirsiniz.

Farklı Dağıtımlarda cal Davranışı

cal komutunun davranışı dağıtıma göre küçük farklılıklar gösterebilir. Özellikle macOS ile Linux arasında belirgin farklar vardır.

Linux (util-linux paketi): En geniş parametre desteğine sahiptir. -n, -3, -Y gibi parametreler çalışır.

macOS/BSD: Daha eski ve kısıtlı bir versiyonu kullanır. -3 gibi bazı parametreler farklı davranabilir ya da çalışmayabilir.

Alpine Linux / minimal kurulumlar: busybox cal gelir, çok daha sınırlı özellik setiyle.

Dağıtımınızdaki versiyonu kontrol etmek için:

# Hangi pakettan geldigini gor
which cal
cal --version 2>/dev/null || cal --help 2>&1 | head -5

# util-linux versiyonunu kontrol et
cal --version

Eğer üzerinde çalıştığınız sistemde cal kısıtlıysa ve tam versiyonu istiyorsanız:

# Debian/Ubuntu
sudo apt install util-linux

# RHEL/CentOS
sudo yum install util-linux

# Alpine
apk add util-linux

Çeşitli Pratik Örnekler

# Bu yilin kac haftadan olusmadugunu goster (52 mi 53 mu?)
ncal -w 12 $(date +%Y) | tail -2

# Bir yilin ilk is gununun hangi gun oldugunu bul
ncal 1 2025 | head -3

# Belirli bir ayin son gununu bul (fatura kesim tarihi gibi durumlar icin)
# Bir sonraki ayin ilk gununden bir gun geri git
date -d "$(date -d 'next month' +%Y-%m-01) -1 day" +%d

# Son 12 ayi hizlica tara
for i in {11..0}; do
  cal $(date -d "-$i month" +%m) $(date -d "-$i month" +%Y)
  echo "---"
done

Takvim Çıktısını Dosyaya Kaydetmek

Bazen takvimi bir dosyaya yazmak isteyebilirsiniz. Özellikle müşteri raporlarına, wiki sayfalarına ya da README dosyalarına takvim eklemek gerektiğinde:

# Mevcut yilin takvimini dosyaya yaz
cal -y > yillik_takvim_2024.txt

# Belirli bir ayin takvimini log dosyasina ekle
echo "=== $(date +%B' '%Y) Takvimi ===" >> sistem_raporu.log
cal -h >> sistem_raporu.log

# Hafta numaralariyla birlikte kaydet
ncal -w $(date +%m) $(date +%Y) > bu_ay.txt

cal Komutuna Alternatifler

Bazı durumlarda cal‘dan daha fazlasına ihtiyacınız olabilir. İşte terminal üzerinde çalışan bazı alternatifler:

gcal: GNU Calendar. Bayramları, tatil günlerini ve daha fazlasını gösterebilir.

sudo apt install gcal
gcal --holiday-list=short

when: Basit bir komut satırı takvim ve görev takip aracı.

remind: Hatırlatıcı sistemi olan gelişmiş bir takvim aracı. Özellikle otomatik bildirim sistemleri kurmak isteyenler için güçlü bir seçenek.

Ama günlük sysadmin işleri için cal ve ncal zaten yeterinden fazla özellik sunar. Fazlasına nadiren ihtiyaç duyarsınız.

İpuçları ve Kısa Yollar

Sık kullandığınız cal komutlarını .bashrc ya da .bash_aliases dosyasına ekleyebilirsiniz:

# ~/.bash_aliases dosyasina ekle
alias cal3='cal -3'
alias calw='ncal -w'
alias caly='cal -y'
alias caln='ncal'

# Bu ayin pazartesi gunlerini listele
alias mondays='ncal | grep "^Pt" | tr -s " " | cut -d" " -f2-'

Bu alias’ları ekledikten sonra source ~/.bash_aliases komutunu çalıştırın ya da yeni bir terminal açın.

Sonuç

cal komutu sysadmin araç kutusundaki “küçük ama değerli” araçların güzel bir örneği. Günde belki bir kez kullanırsınız, bazen hiç kullanmazsınız. Ama ihtiyaç duyduğunuzda tam orada hazır, ssh oturumunuzu kesip telefonunuza ya da tarayıcınıza gitmenizi engeller.

Özellikle şu senaryolarda cal ve ncal ikilisini aklınızda tutun: cron job planlaması, bakım penceresi belirleme, geçmiş tarih doğrulama, hafta numarasına göre çalışma ve script içinde tarih bağlamı oluşturma. Julian takvim desteği ve ISO hafta numaralandırması gibi özellikleri ise daha teknik hesaplamalarda işinize yarayacak.

ncal -w kombinasyonunu haftaya bir çalıştırma alışkanlığı edinmek, o “bugün ne günüydük, şu an kaçıncı haftadayız, ay biterken mi başlarken miyiz?” zihinsel hesaplamasını sıfıra indirir. Sysadmin işinin temeli de zaten budur: küçük araçları iyi bilmek ve doğru anda kullanmak.

Yorum yapın