Column, en yaygın Linux dağıtımlarının hepsinde genellikle util-linux paketinin bir parçası olarak kurulan ve bu nedenle en minimal kurulumlara bile dahil edilen ücretsiz ve açık kaynaklı bir yardımcı programdır. Bu yardımcı program ile dosyaların içeriğini veya diğer komutların çıktılarını sütunlar halinde düzenleyebilir, güzel tablolar oluşturabilir ve hatta JSON formatlı belgeler üretebiliriz.
Çıktıyı tablo olarak biçimlendirme
Girişte söylediğimiz gibi, bir dosyanın içeriğini veya bir tablodaki diğer komutların çıktısını düzenlemek için “Column” yardımcı programını kullanabiliriz. Unix benzeri işletim sistemlerinde, /etc/fstab dosyası, açılışta otomatik olarak bağlanması gereken dosya sistemleri hakkında bilgi içerir. Söz konusu bilgiler, her biri belirli bir bilgiyi içeren sütunlar halinde düzenlenmiştir. Dosyanın nasıl göründüğüne dair minimal bir örnek:
# # /etc/fstab # Created by anaconda on Wed Nov 2 08:18:43 2022 # # Accessible filesystems, by reference, are maintained under '/dev/disk/'. # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info. # # After editing this file, run 'systemctl daemon-reload' to update systemd # units generated from this file. # /dev/mapper/rl-root / xfs defaults 0 0 UUID=2a9dc637-e858-407c-81dc-26ea16ac6c57 /boot xfs defaults 0 0 /dev/mapper/rl-swap none swap defaults 0 0
Gördüğünüz gibi, /etc/fstab dosyasına yalnızca iki dosya sistemi dahil edilmiştir ve dizelerin farklı uzunlukları nedeniyle sütunlar iyi hizalanmamıştır. Bu, elbette, işlevsellik açısından alakalı değil, ama oldukça çirkin; onu “güzelleştirmek” için “column” yardımcı programını kullanabiliriz.
“Column” komutu, bir girdi dosyasının yolunu argüman olarak kabul eder, ancak bu durumda, işlemeden önce dosyanın içeriğinden yorumları kaldırmak istiyoruz. Bu görevi gerçekleştirmek için sed ve pipe kullanabiliriz:
$ sed /^#/d /etc/fstab | column --table
Yukarıdaki örnekte –table seçeneği (-t) ile “column” yardımcı programını çağırdık: bu bir tablo oluşturmak için gereklidir. İşte elde ettiğimiz sonuç:
/dev/mapper/rl-root / xfs defaults 0 0 UUID=2a9dc637-e858-407c-81dc-26ea16ac6c57 /boot xfs defaults 0 0 /dev/mapper/rl-swap none swap defaults 0 0
Sütun adları sağlama
“Column” tarafından üretilen çıktı güzel bir şekilde hizalanmıştır, ancak bazı durumlarda sütun adlarını içeren ek bir “satır” eklemek isteyebiliriz. Bunu yapmak için, yardımcı programı –table-columns seçeneğiyle (-N) başlatabilir ve virgülle ayrılmış sütun adları listesini argüman olarak iletebiliriz. Bu durumda şunları çalıştırabiliriz:
$ sed /^#/d /etc/fstab | column --table --table-columns BLOCK_DEVICE,MOUNTPOINT,FILESYSTEM,MOUNT_OPTIONS,DUMP,FSCK_ORDER
Yukarıdaki komut aşağıdaki sonucu üretir:
BLOCK_DEVICE MOUNTPOINT FILESYSTEM MOUNT_OPTIONS DUMP FSCK_ORDER /dev/mapper/rl-root / xfs defaults 0 0 UUID=2a9dc637-e858-407c-81dc-26ea16ac6c57 /boot xfs defaults 0 0 /dev/mapper/rl-swap none swap defaults 0 0
Giriş ayırıcısını değiştirme
Varsayılan olarak, “column” yardımcı programı, bir dosyanın içeriğini sütunlar halinde düzenlemek için boşluk karakterini giriş sınırlayıcı olarak kullanır. Bu, önceki örnekte gördüğümüz gibi belirli durumlarda işe yarar, ancak bazen ayırıcı olarak kullanılacak farklı bir karakter belirtmemiz gerekebilir. Örneğin, /etc/passwd dosyasındaki bilgilerin nasıl düzenlendiğine bir göz atalım. Bu dosya, bildiğimiz gibi, hesap bilgilerini depolamak için kullanılır; iki nokta üst üste karakteri (“:”) her girişteki alanları ayırmak için kullanılır:
tux:x:1000:1000:tux:/home/tux:/bin/bash
Yukarıdaki satırda “tux” kullanıcısı hakkında bilgiler yer almaktadır. Satırın ilk alanı kullanıcı adını bildirir. İkincisi parola için kullanılır: burada x, parolanın hash edildiği ve /etc/shadow dosyasında saklandığı anlamına gelir. Üçüncü ve dördüncü alanlar, kullanıcı birincil grubunun sırasıyla UID’sini (Kullanıcı Kimliği) ve GID’sini (Grup Kimliği) bildirir. Beşinci alan sözde GECOS alanıdır: tam adı veya telefon numarası gibi ek kullanıcı bilgilerini içerebilir. Altıncı alan, kullanıcının HOME dizininin yolunu içerir. Yedinci ve son alan, bunun yerine, bu durumda “/bin/bash” olan, kullanıcı için varsayılan kabuk veya komut hakkında bilgi içerir.
Bu dosyanın içeriğini “pretty” tablosunda biçimlendirmek için “column” yardımcı programına ayırıcı olarak “:” kullanmasını söylemeliyiz. Bunu –separator seçeneği (-s) ile yapabiliriz:
$ column --table --separator=":" /etc/passwd
Elde ettiğimiz sonuç şudur:
root x 0 0 root /root /bin/bash bin x 1 1 bin /bin /sbin/nologin daemon x 2 2 daemon /sbin /sbin/nologin adm x 3 4 adm /var/adm /sbin/nologin lp x 4 7 lp /var/spool/lpd /sbin/nologin sync x 5 0 sync /sbin /bin/sync shutdown x 6 0 shutdown /sbin /sbin/shutdown halt x 7 0 halt /sbin /sbin/halt mail x 8 12 mail /var/spool/mail /sbin/nologin operator x 11 0 operator /root /sbin/nologin games x 12 100 games /usr/games /sbin/nologin ftp x 14 50 FTP User /var/ftp /sbin/nologin nobody x 65534 65534 Kernel Overflow User / /sbin/nologin systemd-coredump x 999 997 systemd Core Dumper / /sbin/nologin dbus x 81 81 System message bus / /sbin/nologin polkitd x 998 996 User for polkitd / /sbin/nologin avahi x 70 70 Avahi mDNS/DNS-SD Stack /var/run/avahi-daemon /sbin/nologin rtkit x 172 172 RealtimeKit /proc /sbin/nologin sssd x 997 993 User for sssd / /sbin/nologin pipewire x 996 992 PipeWire System Daemon /var/run/pipewire /sbin/nologin libstoragemgmt x 995 991 daemon account for libstoragemgmt /var/run/lsm /sbin/nologin tss x 59 59 Account used for TPM access /dev/null /sbin/nologin geoclue x 994 989 User for geoclue /var/lib/geoclue /sbin/nologin cockpit-ws x 993 988 User for cockpit web service /nonexisting /sbin/nologin cockpit-wsinstance x 992 987 User for cockpit-ws instances /nonexisting /sbin/nologin rpc x 32 32 Rpcbind Daemon /var/lib/rpcbind /sbin/nologin flatpak x 991 986 User for flatpak system helper / /sbin/nologin colord x 990 985 User for colord /var/lib/colord /sbin/nologin setroubleshoot x 989 984 SELinux troubleshoot server /var/lib/setroubleshoot /sbin/nologin clevis x 988 983 Clevis Decryption Framework unprivileged user /var/cache/clevis /usr/sbin/nologin gdm x 42 42 /var/lib/gdm /sbin/nologin gnome-initial-setup x 987 982 /run/gnome-initial-setup/ /sbin/nologin rpcuser x 29 29 RPC Service User /var/lib/nfs /sbin/nologin sshd x 74 74 Privilege-separated SSH /usr/share/empty.sshd /sbin/nologin chrony x 986 981 /var/lib/chrony /sbin/nologin dnsmasq x 985 980 Dnsmasq DHCP and DNS server /var/lib/dnsmasq /sbin/nologin tcpdump x 72 72 / /sbin/nologin systemd-oom x 978 978 systemd Userspace OOM Killer / /usr/sbin/nologin tux x 1000 1000 tux /home/tux /bin/bash
Çıkış ayırıcısını değiştirme
Girdi ayırıcı, gördüğümüz gibi, bir dosyanın içeriğini sütunlar halinde düzenlemek için hangi karakterin kullanılması gerektiğini “column”a söylemek için kullanılır. Bunun yerine çıktı ayırıcı, çeşitli alanları sınırlandırmak için komutun çıktısında kullanılır. Varsayılan olarak, çıktı ayırıcı olarak iki boşluk kullanılır; farklı bir karakter kullanmak için bunu –output-separator seçeneğine (-o) argüman olarak iletmeliyiz.
Aşağıdaki örnekte | çıktı ayırıcı olarak karakter:
$ column --table --separator ":" --output-separator "|" /etc/passwd
Şunu elde ederiz:
root |x|0 |0 |root |/root |/bin/bash bin |x|1 |1 |bin |/bin |/sbin/nologin daemon |x|2 |2 |daemon |/sbin |/sbin/nologin adm |x|3 |4 |adm |/var/adm |/sbin/nologin lp |x|4 |7 |lp |/var/spool/lpd |/sbin/nologin sync |x|5 |0 |sync |/sbin |/bin/sync shutdown |x|6 |0 |shutdown |/sbin |/sbin/shutdown halt |x|7 |0 |halt |/sbin |/sbin/halt mail |x|8 |12 |mail |/var/spool/mail |/sbin/nologin operator |x|11 |0 |operator |/root |/sbin/nologin games |x|12 |100 |games |/usr/games |/sbin/nologin ftp |x|14 |50 |FTP User |/var/ftp |/sbin/nologin nobody |x|65534|65534|Kernel Overflow User |/ |/sbin/nologin systemd-coredump |x|999 |997 |systemd Core Dumper |/ |/sbin/nologin dbus |x|81 |81 |System message bus |/ |/sbin/nologin polkitd |x|998 |996 |User for polkitd |/ |/sbin/nologin avahi |x|70 |70 |Avahi mDNS/DNS-SD Stack |/var/run/avahi-daemon |/sbin/nologin rtkit |x|172 |172 |RealtimeKit |/proc |/sbin/nologin sssd |x|997 |993 |User for sssd |/ |/sbin/nologin pipewire |x|996 |992 |PipeWire System Daemon |/var/run/pipewire |/sbin/nologin libstoragemgmt |x|995 |991 |daemon account for libstoragemgmt |/var/run/lsm |/sbin/nologin tss |x|59 |59 |Account used for TPM access |/dev/null |/sbin/nologin geoclue |x|994 |989 |User for geoclue |/var/lib/geoclue |/sbin/nologin cockpit-ws |x|993 |988 |User for cockpit web service |/nonexisting |/sbin/nologin cockpit-wsinstance |x|992 |987 |User for cockpit-ws instances |/nonexisting |/sbin/nologin rpc |x|32 |32 |Rpcbind Daemon |/var/lib/rpcbind |/sbin/nologin flatpak |x|991 |986 |User for flatpak system helper |/ |/sbin/nologin colord |x|990 |985 |User for colord |/var/lib/colord |/sbin/nologin setroubleshoot |x|989 |984 |SELinux troubleshoot server |/var/lib/setroubleshoot |/sbin/nologin clevis |x|988 |983 |Clevis Decryption Framework unprivileged user|/var/cache/clevis |/usr/sbin/nologin gdm |x|42 |42 | |/var/lib/gdm |/sbin/nologin gnome-initial-setup|x|987 |982 | |/run/gnome-initial-setup/|/sbin/nologin rpcuser |x|29 |29 |RPC Service User |/var/lib/nfs |/sbin/nologin sshd |x|74 |74 |Privilege-separated SSH |/usr/share/empty.sshd |/sbin/nologin chrony |x|986 |981 | |/var/lib/chrony |/sbin/nologin dnsmasq |x|985 |980 |Dnsmasq DHCP and DNS server |/var/lib/dnsmasq |/sbin/nologin tcpdump |x|72 |72 | |/ |/sbin/nologin systemd-oom |x|978 |978 |systemd Userspace OOM Killer |/ |/usr/sbin/nologin tux |x|1000 |1000 |tux |/home/tux |/bin/bash
İçeriği JSON olarak biçimlendirme
“Column” yardımcı programının gerçekten güzel bir özelliği, bir dosyanın içeriğini, sütunların içeriğini değerler ve sütun adlarını anahtar olarak kullanarak JSON olarak biçimlendirme yeteneğidir. Bu görevi gerçekleştirmek için –json seçeneği (-J) kullanılır. Seçenek yalnızca –table-columns ile birlikte kullanıldığında kabul edilir, ki bu daha önce gördüğümüz gibi sütun adlarını belirtmek için kullanılır:
$ column --table --separator=":" --table-columns username,password,uid,gid,gecos,home,shell --json /etc/passwd
İşte yukarıdaki komut tarafından üretilen çıktı (uygun şekilde kısalttık):
{ "table": [ { "username": "root", "password": "x", "uid": "0", "gid": "0", "gecos": "root", "home": "/root", "shell": "/bin/bash" },{ "username": "bin", "password": "x", "uid": "1", "gid": "1", "gecos": "bin", "home": "/bin", "shell": "/sbin/nologin" },{ "username": "daemon", "password": "x", "uid": "2", "gid": "2", "gecos": "daemon", "home": "/sbin", "shell": "/sbin/nologin" }, # remaining output truncated ] }
Yukarıda da görebileceğiniz gibi, tüm dosya girişlerini içeren listeyle ilişkilendirilen anahtara “tablo” adı verilir. Bunu –table-name seçeneğini (-n) kullanarak değiştirebilir ve argüman olarak kullanmak istediğimiz ismi iletebiliriz.
Yazının orijinalini buradan okuyabilirsiniz.

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.