Linux'ta head, tail ve cat Komutlarını Kullanarak Dosyaları Etkili Bir Şekilde Yönetin


Dosya içeriğini görüntülemek için Linux tarafından sağlanan çeşitli komutlar ve programlar vardır. Dosyalarla çalışmak göz korkutucu görevlerden biridir; bilgisayar kullanıcılarının çoğu (yeni başlayanlar, normal kullanıcılar, ileri düzey kullanıcılar, geliştiriciler, yöneticiler vb.) bunu gerçekleştirir. Dosyalarla etkili ve verimli bir şekilde çalışmak bir sanattır.

Bugün bu yazıda head, tail ve cat olarak adlandırılan en popüler komutları tartışacağız, çoğumuz bu tür komutları zaten biliyoruz. ancak çok azımız bunu gerektiğinde uyguluyoruz.

1. baş Komuta

Head komutu herhangi bir dosya adının ilk on satırını okur. Head komutunun temel sözdizimi şöyledir:

head [options] [file(s)]

Örneğin, aşağıdaki komut '/etc/passwd' adlı dosyanın ilk on satırını görüntüleyecektir.

head /etc/passwd 

root:x:0:0:root:/root:/bin/bash 
daemon:x:1:1:daemon:/usr/sbin:/bin/sh 
bin:x:2:2:bin:/bin:/bin/sh 
sys:x:3:3:sys:/dev:/bin/sh 
sync:x:4:65534:sync:/bin:/bin/sync 
games:x:5:60:games:/usr/games:/bin/sh 
man:x:6:12:man:/var/cache/man:/bin/sh 
lp:x:7:7:lp:/var/spool/lpd:/bin/sh 
mail:x:8:8:mail:/var/mail:/bin/sh 
news:x:9:9:news:/var/spool/news:/bin/sh

Birden fazla dosya verilmişse head her dosyanın ilk on satırını ayrı ayrı gösterecektir. Örneğin, aşağıdaki komut her dosyanın on satırını gösterecektir.

head /etc/passwd /etc/shadow

==> /etc/passwd <== 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 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin ==> /etc/shadow <==
root:$6$85e1:15740:0:99999:7:::
bin:*:15513:0:99999:7:::
daemon:*:15513:0:99999:7:::
adm:*:15513:0:99999:7:::
lp:*:15513:0:99999:7:::
sync:*:15513:0:99999:7:::
shutdown:*:15513:0:99999:7:::
halt:*:15513:0:99999:7:::
mail:*:15513:0:99999:7:::
uucp:*:15513:0:99999:7:::

Varsayılan on satırdan daha fazla satır almak isteniyorsa, alınacak satır sayısını belirten bir tamsayı ile birlikte '-n' seçeneği kullanılır. Örneğin, aşağıdaki komut '/var/log/yum.log' dosyasındaki ilk 5 satırı görüntüleyecektir.

head -n5 /var/log/yum.log

Jan 10 00:06:49 Updated: openssl-1.0.1e-16.el6_5.4.i686
Jan 10 00:06:56 Updated: openssl-devel-1.0.1e-16.el6_5.4.i686
Jan 10 00:11:42 Installed: perl-Net-SSLeay-1.35-9.el6.i686
Jan 13 22:13:31 Installed: python-configobj-4.6.0-3.el6.noarch
Jan 13 22:13:36 Installed: terminator-0.95-3.el6.rf.noarch

Aslında ‘-n‘ seçeneğini kullanmaya gerek yok. Yukarıdaki komutla aynı sonucu elde etmek için yalnızca kısa çizgi ve boşluksuz tamsayıyı belirtin.

head  -5 /var/log/yum.log

Jan 10 00:06:49 Updated: openssl-1.0.1e-16.el6_5.4.i686
Jan 10 00:06:56 Updated: openssl-devel-1.0.1e-16.el6_5.4.i686
Jan 10 00:11:42 Installed: perl-Net-SSLeay-1.35-9.el6.i686
Jan 13 22:13:31 Installed: python-configobj-4.6.0-3.el6.noarch
Jan 13 22:13:36 Installed: terminator-0.95-3.el6.rf.noarch

Head komutu ayrıca '-c' seçeneğini ve ardından görüntülenecek bayt sayısını kullanarak istenen sayıda bayt görüntüleyebilir. Örneğin, aşağıdaki komut verilen dosyanın ilk 45 baytını görüntüleyecektir.

head -c45 /var/log/yum.log

Jan 10 00:06:49 Updated: openssl-1.0.1e-16.el

2. kuyruk Komutanlığı

Tail komutu herhangi bir metin dosyasının son on satırını görüntülemenizi sağlar. Yukarıdaki head komutuna benzer şekilde, tail komutu da 'n' satır sayısı ve 'n' karakter sayısı seçeneklerini destekler.

Tail komutunun temel sözdizimi şöyledir:

tail [options] [filenames]

Örneğin, aşağıdaki komut 'access.log' adlı bir dosyanın son on satırını yazdıracaktır.

tail access.log 

1390288226.042      0 172.16.18.71 TCP_DENIED/407 1771 GET http://download.newnext.me/spark.bin? - NONE/- text/html
1390288226.198      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html
1390288226.210   1182 172.16.20.44 TCP_MISS/200 70872 GET http://mahavat.gov.in/Mahavat/index.jsp pg DIRECT/61.16.223.197 text/html
1390288226.284     70 172.16.20.44 TCP_MISS/304 269 GET http://mahavat.gov.in/Mahavat/i/i-19.gif pg DIRECT/61.16.223.197 -
1390288226.362    570 172.16.176.139 TCP_MISS/200 694 GET http://p4-gayr4vyqxh7oa-3ekrqzjikvrczq44-if-v6exp3-v4.metric.gstatic.com/v6exp3/redir.html pg 
1390288226.402      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html
1390288226.437    145 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html
1390288226.445      0 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html
1390288226.605      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html
1390288226.808      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html

Birden fazla dosya sağlanmışsa, tail aşağıda gösterildiği gibi her dosyanın son on satırını yazdıracaktır.

tail access.log error.log

==> access.log <== 1390288226.042      0 172.16.18.71 TCP_DENIED/407 1771 GET http://download.newnext.me/spark.bin? - NONE/- text/html 1390288226.198      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.210   1182 172.16.20.44 TCP_MISS/200 70872 GET http://mahavat.gov.in/Mahavat/index.jsp pg DIRECT/61.16.223.197 text/html 1390288226.284     70 172.16.20.44 TCP_MISS/304 269 GET http://mahavat.gov.in/Mahavat/i/i-19.gif pg DIRECT/61.16.223.197 - 1390288226.362    570 172.16.176.139 TCP_MISS/200 694 GET http://p4-gayr4vyqxh7oa-3ekrqzjikvrczq44-if-v6exp3-v4.metric.gstatic.com/v6exp3/redir.html pg  1390288226.402      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.437    145 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html 1390288226.445      0 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html 1390288226.605      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.808      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html ==> error_log <==
[Sun Mar 30 03:16:03 2014] [notice] Digest: generating secret for digest authentication ...
[Sun Mar 30 03:16:03 2014] [notice] Digest: done
[Sun Mar 30 03:16:03 2014] [notice] Apache/2.2.15 (Unix) DAV/2 PHP/5.3.3 mod_ssl/2.2.15 OpenSSL/1.0.0-fips configured -- resuming normal operations

Benzer şekilde, aşağıda gösterildiği gibi '-n' seçeneğini kullanarak son birkaç satırı da yazdırabilirsiniz.

tail -5 access.log

1390288226.402      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html
1390288226.437    145 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html
1390288226.445      0 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html
1390288226.605      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html
1390288226.808      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html

Aşağıda gösterildiği gibi '-c' bağımsız değişkenini kullanarak karakter sayısını da yazdırabilirsiniz.

tail -c5 access.log

ymantec.com:443 - NONE/- text/html

3. kedi Komutu

'cat' komutu en yaygın kullanılan evrensel araçtır. Standart girişi standart çıktıya kopyalar. Metin dosyası geçerli ekrana sığmıyorsa komut kaydırmayı destekler.

cat komutunun temel sözdizimi şöyledir:

cat [options] [filenames] [-] [filenames]

Cat'in en sık kullanımı dosyaların içeriğini okumaktır. Bir dosyayı okumak amacıyla açmak için gereken tek şey cat yazıp ardından bir boşluk ve dosya adını yazmaktır.

cat /etc/passwd 

root:x:0:0:root:/root:/bin/bash 
daemon:x:1:1:daemon:/usr/sbin:/bin/sh 
bin:x:2:2:bin:/bin:/bin/sh 
sys:x:3:3:sys:/dev:/bin/sh 
sync:x:4:65534:sync:/bin:/bin/sync 
games:x:5:60:games:/usr/games:/bin/sh 
man:x:6:12:man:/var/cache/man:/bin/sh 
lp:x:7:7:lp:/var/spool/lpd:/bin/sh 
…

Cat komutu aynı zamanda birden fazla dosyayı birleştirmek için de kullanılır.

echo 'Hi Tecmint-Team' > 1 
echo 'Keep connected' > 2 
echo 'Share your thought' > 3 
echo 'connect us [email ' > 4
cat 1 2 3 4 > 5
cat 5 

Hi Tecmint-Team 
Keep connected 
Share your thought 
connect us [email 

Ayrıca dosya oluşturmak için de kullanılabilir. Bu, cat komutunun çalıştırılması ve ardından çıktı yönlendirme operatörünün ve oluşturulacak dosya adının çalıştırılmasıyla gerçekleştirilir.

cat > tecmint.txt

Tecmint is the only website fully dedicated to Linux.

'Kedi' komutu için özel sonlandırıcıya sahip olabiliriz. Burada uygulanıyor.

cat > test.txt << end 

I am Avishek 
Here i am writing this post 
Hope your are enjoying 
end
# cat test.txt 

I am Avishek 
Here i am writing this post 
Hope your are enjoying

"Kedi" komutunun gücünü asla küçümsemeyin ve dosyaları kopyalamak için yararlı olabilir.

cat avi.txt

I am a Programmer by birth and Admin by profession
cat avi.txt > avi1.txt
cat avi1.txt

I am a Programmer by birth and Admin by profession

Peki kedinin zıttı nedir? Evet, 'tac'. 'tac' Linux altında bir komuttur. Onun hakkında konuşmaktansa 'tac'ın bir örneğini göstermek daha iyidir.

Bir satırda tek bir kelime görünecek şekilde tüm ayın adlarını içeren bir metin dosyası oluşturun.

cat month

January
February
March
April
May
June
July
August
September
October
November
December
tac month

December
November
October
September
August
July
June
May
April
March
February
January

Cat komut kullanımına ilişkin daha fazla örnek için 13 cat Komut Kullanımı'na bakın.

Şimdilik bu kadar. Bilmeye değer başka bir İlginç Makaleyle tekrar karşınızda olacağım. O zamana kadar bizi izlemeye devam edin ve Tecmint'e bağlı kalın. Değerli görüşlerinizi yorum bölümümüzde bize iletmeyi unutmayın.