Linux'ta Etkili Dosya İşlemleri İçin Metni Filtrelemeye Yönelik 12 Yararlı Komut


Bu yazıda Linux'ta filtre görevi gören bir dizi komut satırı aracını inceleyeceğiz. Filtre, standart girişi okuyan, üzerinde bir işlem gerçekleştiren ve sonuçları standart çıktıya yazan bir programdır.

Bu nedenle, yararlı raporlar oluşturmak için çıktıyı yeniden yapılandırmak, dosyalardaki metni değiştirmek ve diğer birçok sistem yönetimi görevi gibi bilgileri güçlü yollarla işlemek için kullanılabilir.

Bununla birlikte, aşağıda Linux'taki bazı yararlı dosya veya metin filtreleri verilmiştir.

1. Garip Komut

Awk dikkat çekici bir desen tarama ve işleme dilidir; Linux'ta kullanışlı filtreler oluşturmak için kullanılabilir. Awk serimiz Bölüm 1'den Bölüm 13'e kadar okuyarak kullanmaya başlayabilirsiniz.

Ayrıca daha fazla bilgi ve kullanım seçeneği için awk kılavuz sayfasını da okuyun:

man awk

2. SED Komutanlığı

sed, metni filtrelemek ve dönüştürmek için güçlü bir akış düzenleyicisidir. Sed hakkında zaten iki faydalı makale yazdık, buradan inceleyebilirsiniz:

  1. Linux'ta Dosya Oluşturmak, Düzenlemek ve Değiştirmek için GNU 'sed' Komutu nasıl kullanılır?
  2. Günlük Linux Sistem Yönetimi Görevleri için 15 Yararlı 'sed' Komut İpuçları ve Püf Noktaları

Sed kılavuz sayfasına kontrol seçenekleri ve talimatlar eklendi:

man sed

3. Grep, Egrep, Fgrep, Rgrep Komutları

Bu filtreler belirli bir modelle eşleşen satırların çıktısını alır. Bir dosyadan veya standart girdiden satırları okurlar ve eşleşen tüm satırları varsayılan olarak standart çıktıya yazdırırlar.

Not: Ana program grep'tir, varyasyonları aşağıdaki gibi belirli grep seçeneklerinin kullanılmasıyla aynıdır (ve geriye dönük uyumluluk için hala kullanılmaktadırlar):

egrep = grep -E
fgrep = grep -F
rgrep = grep -r  

Aşağıda bazı temel grep komutları verilmiştir:

tecmint@TecMint ~ $ grep "aaronkilik" /etc/passwd
aaronkilik:x:1001:1001::/home/aaronkilik:

tecmint@TecMint ~ $ cat /etc/passwd | grep "aronkilik"
aaronkilik:x:1001:1001::/home/aaronkilik:

Linux'ta Grep, Egrep ve Fgrep Arasındaki Fark Nedir? hakkında daha fazla bilgi edinebilirsiniz.

4. baş Komuta

head bir dosyanın ilk bölümlerini görüntülemek için kullanılır; varsayılan olarak ilk 10 satırın çıktısını verir. Görüntülenecek satır sayısını belirtmek için -n num bayrağını kullanabilirsiniz:

tecmint@TecMint ~ $ head /var/log/auth.log  
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root
Jan  2 10:51:34 TecMint sudo:  tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
Jan  2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan  2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root
Jan  2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session closed for user root
Jan  2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session closed for user root
Jan  2 11:09:01 TecMint CRON[4146]: pam_unix(cron:session): session opened for user root by (uid=0)

tecmint@TecMint ~ $ head  -n 5 /var/log/auth.log  
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root
Jan  2 10:51:34 TecMint sudo:  tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
Jan  2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan  2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root

Linux'ta etkili kullanım için head komutunu tail ve cat komutlarıyla birlikte nasıl kullanacağınızı öğrenin.

5. kuyruk Komutanlığı

tail bir dosyanın son bölümlerini (varsayılan olarak 10 satır) çıkarır. Görüntülenecek satır sayısını belirtmek için -n num anahtarını kullanın.

Aşağıdaki komut, belirtilen dosyanın son 5 satırının çıktısını verecektir:

tecmint@TecMint ~ $ tail -n 5 /var/log/auth.log
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.

Ek olarak, tail'in bir dosyadaki değişiklikleri (özellikle günlük dosyaları) gerçek zamanlı olarak izlemek için özel bir -f seçeneği vardır.

Aşağıdaki komut belirtilen dosyadaki değişiklikleri izlemenizi sağlayacaktır:

tecmint@TecMint ~ $ tail -f /var/log/auth.log
Jan  6 12:58:01 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 12:58:11 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 12:58:12 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 12:58:12 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.

Kullanım seçeneklerinin ve talimatlarının tam listesi için ayrıntılı kılavuz sayfasını okuyun:

man tail

6. sıralama Komutu

sıralama bir metin dosyasının veya standart girdinin satırlarını sıralamak için kullanılır.

Aşağıda domains.list adlı dosyanın içeriği yer almaktadır:

tecmint@TecMint ~ $ cat domains.list
linux-console.net
linux-console.net
news.linux-console.net
news.linux-console.net
linuxsay.com
linuxsay.com
windowsmint.com
windowsmint.com

Dosya içeriğini şu şekilde sıralamak için basit bir sıralama komutunu çalıştırabilirsiniz:

tecmint@TecMint ~ $ sort domains.list
linuxsay.com
linuxsay.com
news.linux-console.net
news.linux-console.net
linux-console.net
linux-console.net
windowsmint.com
windowsmint.com

sort komutunu birçok şekilde kullanabilirsiniz; sort komutuyla ilgili yararlı makalelerden bazılarını aşağıda bulabilirsiniz:

  1. Linux 'sort' Komutunun 14 Faydalı Örneği – Bölüm 1
  2. 7 İlginç Linux 'sıralama' Komut Örneği – Bölüm 2
  3. Dosyaları Değişiklik Tarihine ve Saatine Göre Bulma ve Sıralama
  4. 'Ls' Komutunun Çıktısını Son Değiştirilme Tarihi ve Saatine Göre Sıralama

7. benzersiz Komut

uniq komutu tekrarlanan satırları raporlamak veya atlamak için kullanılır, standart girişteki satırları filtreler ve sonucu standart çıktıya yazar.

Bir giriş akışında sort'u çalıştırdıktan sonra, aşağıdaki örnekte olduğu gibi tekrarlanan satırları uniq ile kaldırabilirsiniz.

Bir satırın tekrarlanma sayısını belirtmek için -c seçeneğini kullanın ve -i seçeneğini ekleyerek karşılaştırma yaparken büyük/küçük harf farklarını göz ardı edin:

tecmint@TecMint ~ $ cat domains.list
linux-console.net
linux-console.net
news.linux-console.net
news.linux-console.net
linuxsay.com
linuxsay.com
windowsmint.com

tecmint@TecMint ~ $ sort domains.list | uniq -c 
2 linuxsay.com
2 news.linux-console.net
2 linux-console.net
1 windowsmint.com 

Daha fazla kullanım bilgisi ve işaretler için uniq kılavuz sayfasını okuyun:

man uniq

8. fmt Komutu

fmt basit optimum metin biçimlendirici, belirtilen dosyadaki paragrafları yeniden biçimlendirir ve sonuçları standart çıktıya yazdırır.

domain-list.txt dosyasından çıkarılan içerik aşağıdadır:

1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com

Yukarıdaki içeriği standart bir liste halinde yeniden biçimlendirmek için, maksimum satır genişliğini tanımlamak üzere kullanılan -w anahtarıyla aşağıdaki komutu çalıştırın:

tecmint@TecMint ~ $ cat domain-list.txt 
1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com

tecmint@TecMint ~ $ fmt -w 1 domain-list.txt
1.linux-console.net 
2.news.linux-console.net 
3.linuxsay.com 
4.windowsmint.com

9. pr Komutu

pr komutu, metin dosyalarını veya standart girişi yazdırma için dönüştürür. Örneğin Debian sistemlerinde kurulu tüm paketleri aşağıdaki gibi listeleyebilirsiniz:

dpkg -l

Listeyi yazdırmaya hazır sayfalar ve sütunlar halinde düzenlemek için aşağıdaki komutu verin.

tecmint@TecMint ~ $ dpkg -l | pr --columns 3 -l 20  

2017-01-06 13:19                                                  Page 1


Desired=Unknown/Install ii  adduser		ii  apg
| Status=Not/Inst/Conf- ii  adwaita-icon-theme	ii  app-install-data
|/ Err?=(none)/Reinst-r ii  adwaita-icon-theme- ii  apparmor
||/ Name		ii  alsa-base		ii  apt
+++-=================== ii  alsa-utils		ii  apt-clone
ii  accountsservice	ii  anacron		ii  apt-transport-https
ii  acl			ii  apache2		ii  apt-utils
ii  acpi-support	ii  apache2-bin		ii  apt-xapian-index
ii  acpid		ii  apache2-data	ii  aptdaemon
ii  add-apt-key		ii  apache2-utils	ii  aptdaemon-data


2017-01-06 13:19                                                  Page 2


ii  aptitude		ii  avahi-daemon	ii  bind9-host
ii  aptitude-common	ii  avahi-utils		ii  binfmt-support
ii  apturl		ii  aview		ii  binutils
ii  apturl-common	ii  banshee		ii  bison
ii  archdetect-deb	ii  baobab		ii  blt
ii  aspell		ii  base-files		ii  blueberry
ii  aspell-en		ii  base-passwd		ii  bluetooth
ii  at-spi2-core	ii  bash		ii  bluez
ii  attr		ii  bash-completion	ii  bluez-cups
ii  avahi-autoipd	ii  bc			ii  bluez-obexd

.....

Burada kullanılan bayraklar şunlardır:

  1. --column çıktıda oluşturulan sütun sayısını tanımlar.
  2. -l sayfa uzunluğunu belirtir (varsayılan 66 satırdır).

10.tr Komutanlığı

Bu araç, standart girişteki karakterleri çevirir veya siler ve sonuçları standart çıktıya yazar.

tr kullanımının sözdizimi aşağıdaki gibidir:

tr options set1 set2

Aşağıdaki örneklere bir göz atın, ilk komutta set1( [:upper:] ), giriş karakterlerinin büyük/küçük harf durumunu temsil eder (tümü büyük harf).

O halde set2([:lower:]), sonuçta ortaya çıkan karakterlerin olacağı durumu temsil eder. İkinci örnekte de durum aynıdır ve kaçış dizisi \n, çıktının yeni bir satırda yazdırılacağı anlamına gelir:

tecmint@TecMint ~ $ echo "WWW.TECMINT.COM" | tr [:upper:] [:lower:]
linux-console.net

tecmint@TecMint ~ $ echo "news.linux-console.net" | tr [:lower:] [:upper:]
NEWS.TECMINT.COM

11. daha fazla Komuta

daha fazla komutu, temel olarak sertifika görüntüleme için oluşturulmuş kullanışlı bir dosya inceleme filtresidir. Dosya içeriğini, kullanıcıların daha fazla bilgi görüntülemek için [Enter] tuşuna basabileceği sayfa benzeri bir formatta gösterir.

Aşağıdaki gibi büyük dosyaları görüntülemek için kullanabilirsiniz:

tecmint@TecMint ~ $ dmesg | more
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
 4.4.6)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
[    0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
--More--

12. daha az Komuta

less, yukarıdaki more komutunun tam tersidir ancak ekstra özellikler sunar ve büyük dosyalarda biraz daha hızlıdır.

Daha fazlasıyla aynı şekilde kullanın:

tecmint@TecMint ~ $ dmesg | less
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
 4.4.6)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
[    0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
:

'Daha az'ın neden 'daha fazla'dan daha hızlı olduğunu öğrenin Linux'ta etkili dosya navigasyonu için komut.

Şimdilik bu kadar, burada belirtilmeyen, Linux'ta metin filtresi görevi gören yararlı komut satırı araçlarını aşağıdaki yorum bölümü aracılığıyla bize bildirin.