*nix' lerde Etkin ve Pratik Arama Yöntemleri



Benzer belgeler
$ echo $PATH /sbin:/bin:/usr/sbin:/usr/bin:/usr/x11r6/bin: /usr/local/sbin:/usr/local/bin:/usr/games:.

man komut man ls (ls komutu hakkında bilgi verir.) man pwd (pwd komutu hakkında bilgi verir.)

Komutlar (Devam) ls -a > deneme (ls -a komutunun çıktısı deneme isimli. ls -a >> deneme (ls -a komutunun çıktısı deneme

Linux ta komutlar hakkında yardım almak için aşağıdaki komutlar kullanılır : - man - info - whatis - apropos

Temel Linux Eğitimi. İçindekiler

Temel Linux Eğitimi 1., 2. ve 3. Bölümler

Dosya/Dizin İzinleri. Okuma (r) Yazma (w) Çalıştırma (x) Dosya içeriğini görebilir mi? (Klasörler için) dosya listesini alabilir mi?

Sun Solaris ve RBAC ( Role Based Access Control List)

Komut Penceresi ile Çalışmaya Başlamak

Aşağıda listelenen temel linux komutları bilgisayarınızın komut satırında çalıtırılacaktır.

Linux Dosya ve Dizin Yapısı

FreeBSD Erişim Kontrol Listeleri

Temel Linux Komutları

Temel LINUX Komutları

Regular Expressions Version 0.1

1 STUNNEL NEDİR? 2 STUNNEL KURULUMU

CHAPTER 3. ZAMANLANMIŞ GÖREVLER (Automated Tasks)

Linux altında komut satırında...

Temel Li nux Eği t i mi Böl üm

Linux Dosya Yapısı. Eren BAŞTÜRK.

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Bir üst dizinde yer alan prog1 programını çalıştırmak için aşağıdaki komutlardan hangisini çalıştırmak gerekir?

Yrd. Doç. Dr. A. Burak İNNER

Kabuk Programlama (Bash)

Öğr. Gör. Serkan AKSU 1

Kazanımlar. Linux nedir? Linux dizin yapısı. Linux kabuğu nedir? Temel kabuk komutları. Bash programlama. Dosya işlemleri. Süreç yönetimi.

Sun Solaris Jumpstart Sistemi

Kullanım şekli: cal <ay> <yıl> Bu komut ile takvim görüntülenebilir.

BIND ile DNS Sunucu Kurulumu

BİLGİ İŞLEM DERS 1. Yrd Doç Dr. Ferhat ÖZOK MSGSU FİZİK BÖLÜMÜ MSGSU FİZİK BÖLÜMÜ

Linux işletim sistemlerinde dosya hiyerarşisinde en üstte bulunan dizindir. Diğer bütün dizinler kök dizinin altında bulunur.

LİNUX. Dosyalar ve dizinler

Debian GNU/Linux'da BootSplash & Grub Temalarının Kurulumu

Paralel Hesaplama - Beowulf Cluster

WebInstaller. 1. Kurulum Đçin Gereksinimler

3. DOSYA SİSTEMİ VE ÇALIŞMA MANTIĞI

Autofs. Hüseyin Kaya

Linux Sunucuları için Güvenlik İpuçları. Korhan Gürler, Burç Yıldırım

Aktif Dizin Logon/Logoff Script Ayarları Versiyon

Üst Düzey Programlama

OPENBSD İŞLETİM SİSTEMİ ÜZERİNE PFW KURULUMU

16-18 Nisan 2012 Pazartesi-Çarsamba 9:30-12:30. Temel Linux Eğitimi. Süha TUNA.

AÇIK KAYNAK İŞLETİM SİSTEMLERİ - BÖLÜM 1. Temel komutlar,dosya ve Dizin İşlemleri, Kullanıcı ve Grup İşlemleri

Exploit Nedir, Nasıl Kullanılır?

Kurumsal Güvenlik ve Web Filtreleme

C Konsol ve Komut Satırı

Kurumsal Güvenlik ve Web Filtreleme

SquidGuard Kurulumu. Öncelikle gerekli paket temin edilmelidir. adresinden temin edilebilir. Basitçe kurulumu ;

UFS SNAPSHOT. Hazırlayan: Asiye Yigit Agustos

İNTERNET PROGRAMCILIĞI HAFTA MYSQL - PHPMYADMIN. Hazırlayan Fatih BALAMAN. İçindekiler. Hedefler. Mysql Nedir.

Kimsin Sen? /in/ahmet-dervis /adervis3 SauSiber adrvs.wordpress.com

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

Proje 1. Arayüz Tasarımı

Bilindik engelleme yöntemlerinin dışında olan, kurumsal web filitreleri nasıl aşılır?

Sözü fazla uzatmadan bu durumlar için bir çözüm yolunu sizlere paylaşmak istiyorum..

CYGWIN KURULUMU ve KULLANIMI

WEB SUNUCU GÜVENLİĞİ: Web Siteleri Neden Hacklenir?

FreeBSD DİZİN DÜZENİ. Ömer Faruk Şen EnderUNIX Çekirdek Takımı Üyesi

Bu makalede 2003 sunucu, Windows 2003 Server anlamına gelmektedir. Aşağıda yapılan işlemler 2003 R2 sunucu üzerinde denenmiş ve çalıştırılmıştır.

Kaynak Kodlardan Derleme. Turquaz Muhasebe. Versiyon 0.2. Hüseyin Ergün. 26 Mart 2005

PYTHON PROGRAMLAMA DİLİ

STORED PROCEDURE LER (Saklı Yordamlar)

30 Mayıs ETASQLMNG Programına giriş

Yrd. Doç. Dr. A. Burak İNNER

$ rm dosya1 dosya2 dosya3 dosya4 dosya5 dosya6 dosya7 dosya8

ALGORİTMA VE PROGRAMLAMA II

PBS Betiği Hazırlama ve PBS Komutları. Feyza Eryol

Temel Linux Bilgileri Türk Standardları Enstitüsü Yazılım Test ve Belgelendirme Dairesi Başkanlığı

Denetim Masası/Programlar/Windows özelliklerini Aç/Kapat

2. HTML Temel Etiketleri

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü

Bölüm 10: PHP ile Veritabanı Uygulamaları

İnternet Programcılığı

E-fatura Yenilikler. E-fatura uygulaması ile ilgili çeşitli yenilikler seti ile birlikte yayınlandı:

qmail ile üniversite mail sistemi yönetimi Devrim Sipahi Dokuz Eylül Üniversitesi

BİLGİSAYAR UYGULAMALARI Şırnak Üniversitesi Mühendislik Fakültesi Güz Dönemi Arş.Gör. Eren DEMİR ve Arş.Gör. Veysel KIŞ (

Ağ Üzerinde MATLAB kurulum rehberi (Sunucu makine)

DBMAIL KURULUMU BELGESI (Howto Install Dbmail) Yazan: Ozgur Karatas

SAKLI YORDAM (Stored Procedure) Sibel Somyürek

05 - Veritabanı Sızma Testleri

Bilgi ve İletişim Teknolojileri (JFM 102) Ders 7. LINUX OS (Sistem Yapısı) BİLGİ & İLETİŞİM TEKNOLOJİLERİ. LINUX Yapısı

Google Hacking. Gelişmiş Google Operatörleri

DESTEK DOKÜMANI. Ürün : Tiger Enterprise/ Tiger Plus/ Go Plus/Go Bölüm : Kurulum İşlemleri

Linux Komutları. Temel Linux Komutları - Sed ve Awk, Kabuk Programlama - Bash / Csh, Süreç Otomasyonu - crontab vb.

1.PROGRAMLAMAYA GİRİŞ

3. Metin ve Görünüm Etiketleri

08217 Internet Programcılığı II

Web Formlar ve Sayfalar Arasında Bilgi Gönderme. BATML İnternet Programcılığı 1

Linux/Unix Sistem Yönetimi Prosedürleri - 1

Pardus ta Komutlarla Çalışmak

LABORATUVAR ÇALIŞMASI 1 - Python a Giriş

4. Bağlantı (Köprü) Oluşturma

Linux'ta Kabuk ve Kabuk Programlama

VERİ TABANI YÖNETİM SİSTEMLERİ I

SIMAN KULLANIM KILAVUZU

4 Front Page Sayfası Özellikleri

1. HAFTA KBT204 İNTERNET PROGRAMCILIĞI II. Öğr.Gör. Hakan YILMAZ.

qmail ile üniversite mail sistemi yönetimi Devrim Sipahi Dokuz Eylül Üniversitesi

GRAFİK TASARIM. ACTION SCRIPT 3.0 Ders1 YARD. DOÇ. DR. MEHTAP YALÇINKAYA

Transkript:

*nix' lerde Etkin ve Pratik Arama Yöntemleri

/****************************************************************************** * Bâkır EMRE * * emre [at] enderunix [dot] org * * EnderUNIX Yazılım Geliştirme Takımı * * http://www.enderunix.org * * * * Sürüm : 1.0 * * Tarih : 20.02.2007 * * Etiketler : arama,find,locate,which,whereis,freebsd,linux * * Seviye : Başlangıç - Orta Seviye * * Makalenin en yeni versiyonu : http://www.enderunix.org/docs/etkinpratikarama.pdf * * adresinden elde edilebilir. * ******************************************************************************/ İçindekiler Giriş......3 1.Locate......3 2. rlocate......5 3. find......7 4. which......11 5. whereis......11 Kaynaklar......13

Giriş Unix sistemlerde dosya aramak için kullanabileceğimiz bir kaç yöntem vardır bunları kullanışlılık, cabuk sonuç vermesi dogru sonuc vermesi (dosyaların güncellenmemiş konumlarını göstermesi) bakımından değişiklik gösterir. Aşağıda kullanılan bir kaç program incelenmiş en son bölümde ise zaman karşılaştırmaları gösterilmiştir. 1.Locate Locate yaptığı iş kısaca, aranacak olan dosyayı veya dizini daha önceden kaydettiği veritabanı üzerinden aramasından ibarettir. /var/lib/mlocate/mlocate.db /var/lib/slocate/slocate.db Freebsd için locate kullanımında kullanılan komut ve dosyaların yerleri aşağıda listelenmiştir. /var/db/locate.database : locate veritabanin varsayilan konumu /usr/libexec/locate.updatedb : locate veritabani güncelleyen script /etc/periodic/weekly/310.locate : veritabanını yeniden oluşturan script freebsd öntanımlı olarak locate veritabanını güncellemez Freebsd locate veritabanını güncellemek için /usr/libexec/locate.updatedb linuxta güncellemek için updatedb komutunu çalıştırmalısınız yada yine freebsd' de /etc/periodic/weekly/310.locate altında yer alır periodic scripti vardır ve periodic komutunun çalıştırılmasıyla haftada bir olarak veritabanını günceller ki bu süre zarfında birçok dosya değişmekte silinmekte ve yeni oluşmaktadır dolayısıyla bu veritabanı eski kalacaktır siz bunu günlük olacak şekilde yapmak isterseniz /etc/periodic/daily/ altinda bir tane periodic scripti oluşturursanız en azından günlük veritabanınız olur Bunun için /etc/periodic.conf

dosyasina son eklediğiniz günlük locate scriptini de eklemeniz gerekir # 305.locate daily_locate_enable="yes" diğer seçeneğimiz bahsettiğimiz gibi /usr/libexec/locate.updatedb komutu fakat bu komutu root olarak çalıştırırsanız bütün dosyalar indexlenecektir. locate Bunun olmasını engellemek için farklı veritabanları kullanmanıza izin vermektedir. locate d parametresi farklı veritabanlarını oluşturmak için kullanılır. Örnek kullanım olarak şu şekilde bir script işimiz görecektir. Öncelikle locate için conf dosyası oluşturalım bu dosya linux için /etc/updatedb.conf içerisinde iken, freebsd' de /usr/libexec/locate.updatedb yani güncellemek için kullandığımız komutun kendisidir FCODES="/root/locate/db/root_locate.veritabani" Diye veritabanının yerini belirtelim daha sonra hangi klasörleri taraması gerektiğini atayalım SEARCHPATH= / Biz burada / altındaki herşeyi indexlemesini istiyoruz Hangi klasörleri taramaması gerektiğini belirtelim PRUNEPATHS="/tmp /usr/tmp /var/tmp /var/db/portsnap /dev" conf dosyasına bunları yazdıktan sonra, Ortam değişkeni olarak bu ayar dosyasını shell ekleyelim env -i LOCATE_CONFIG=/root/locate/conf/locate.rc \ /usr/libexec/locate.updatedb root kullanıcısına ait locate veritabanını /root dizini altında oluşturalım Varsayılan locate veritabanı ise /var/db/locate.database şeklindedir.

locate -d /root/locate.veritabani root kullanıcı için her defasında root a has veritabanını yerini belirtmemek için alias tanımlayabiliriz diye... alias locate locate d /root/locate.veritabani böylece root kullanıcısı bütün dosyları görebilecekken sıradan kullanıcıların bütün dosyların görmesi engellenecektir. Aşağıda ise sırdan kullanıcılar için oluşturulan locate veritabanının güncellenmesi ve haklarının belirtilmesi gösterilmektedir #!/bin/sh touch /var/db/locate.database chown nobody /var/db/locate.database chmod 644 /var/db/locate.database cd / echo "/usr/libexec/locate.updatedb su - -fm "nobody" locate in kullanışlı olmasına karşın yukarıda görüldüğü gibi güncellenme sorunu vardır 2. rlocate locate in göncellenme sorununu çözmesine karşın sadece linux 2.6 çekirdekler üzerinde çalışır. Deamon yada kernel modulu olarak çalışabilmektedir. Kaynak kodundan derledikten sonra Kernel modulu olarak modprobe rlocate eğer FATAL: Error inserting rlocate (/lib/modules/2.6.17-11- generic/misc/rlocate.ko): Invalid argument şeklinde bir hata alıyorsanız SELinux özeliğini kapatmanız gerekiyor kullandığınız linux dağıtımına göre selinux.conf dosyasına disable yazmanız yada

dosyasına /boot/grub/menu.lst kernel single selinux=0 /boot/vmlinuz-2.6.17-11-generic root=/dev/sda5 ro gibi satır sonuna selinux=0 yazmanız gerekmektedir çekirdek modulu olarak yukarıdaki şekilde yükledik. Eğer programın deamon olarak başlatılmasını istiyorsak /etc/init.d/rlocate start komutu verilerek yüklenir. /etc/cron.daily/rlocate komutu verilerekten güncel kalması sağlanır. Aşağıda ise parametreleriyle beraber örnek bir iki kullanım gösterilmektedir. Verilen klasör için indexleme yapmak için rlocate -U <dir> verilen klasörleri indexlememesi için e parametresi ve klasörlerin ismi yazılır. rlocate -e "/proc,/dev/,/tmp" -u verilen dosya sistemleri üzerindeki dosyların indexlenmemesi için isi f parametresi kullanılır. rlocate -f "NFS,iso9660" -u

3. find En basit kullanımından başlarsak find aranacakdizin -parametre nearanacaksao find. name aradığımdosya bulundugumuz dizinde aradığımdosya adındaki dosyaları listeler find / -name neredebudosya / dizininden itibaren butun dosyalari arar neredebudosya adındaki dosyaları listeler.aynı şekilde birden fazla yer gösterilipte arama yapılabilir find /usr/src / /home/emre/kaynak_kodlar/ -name arp.c Diğer parametlerine gelince /home/emre/kaynak_kodlar/src/contrib/ipfilter/ipsend/arp.c /usr/src/lib/libstand/arp.c -iname n : name ile ayni fakat küçük büyük harfe duyarsız -atime n : n gün önce erişilmiş dosyaları bulmak için kulanılır. -amin n : n dakika içiersinde erişilmiş dosyaları bulmak için kullanılır. -mtime n : n gün içerisinde içeriği değişmiş dosyalar. -mmin n : n dakika içerisinde içeriği değişmiş dosyalar. -ctime n : n gün içerisinde dosya özellikleri değişmiş dosyalar. -cmin n : n dakika içerisinde dosya özellikleri değişmiş dosyalar burada n parametresinden evvel kullanılacak + - kullanılabilir ve komutun anlamını değiştirir. -atime -n : n gun once ile günümüz arasındaki erişim yapılmış dosyalar -atime +n : n günden daha eski erişilmiş dosyalar Şu şekilde örnek verecek olursak find /etc -mmin -10 /etc klasörü altındaki dosya içeriği on dakika içerisinde değişmiş dosyaların listesi verir. ayrıca dosya boyutuna göre arama yapmak istersek size paramatresini kullanmamız gerekmektedir find / size +500k -name dosyaadi boyutu 500k dan fazla olan dosyaadi adındaki dosyalari bulmak için kulanabiliriz. Aynı şekilde

find /root size -300k root altındaki boyutu 300k dan küçük olan dosyaları listeler. %p\n' find. -size +100M -fprintf /home/emre/buyuk_dosyalar.txt '%-10s yukaridaki komut ise bulunulan dizindeki 100 Mb dan büyük dosyları bulup buyuk_dosyalar.txt adlı dosyaya satır satır yazmaktadır. size dan sonra gelen sayı ile beraber c kullanırsak karakter sayısına göre arama yapmıs olacağız find. -size +50000c içierisinde 50000 karakter olan dosyaları listeler Eğer find i normal kullanıcı olarak çalıştırırsanız listelemeye hakkınız olmayan klasörlerde hata verecektir. $ find / -name "*arıyorumbulamıyoru*" find: /lost+found: Permission denied find: /var/log/setup/tmp: Permission denied find: /var/log/setup/apache: Permission denied find: /var/man/cat1: Permission denied Bu hataları almamak (daha doğrusu gizlemek için:) için /dev/null a yönlendirebilirsiniz. $ find / -name "*ariyorumbulami*" 2> /dev/null... /usr/local/share/ariyorumbulami.conf /home/kullaniciadim/ariyorumbulamiyorum.mp3 Şimdide söyle bişeyler deneyelim diyelimki mp3lerimiz bir klasör içerisinde ve bunun bir üst dizininde mp3 dosyası varmı.bunu şu şekilde ararsak $ find /home/kullaniciadim -name "*.mp3" /home/kullaniciadim/mepeuclerim/1.mp3 /home/kullaniciadim/mepeuclerim/2.mp3 /home/kullaniciadim/mepeuclerim/3.mp3 /home/kullaniciadim/mepeuclerim/4.mp3 /home/kullaniciadim/mepeuclerim/5.mp3 /home/kullaniciadim/mepeuclerim/6.mp3 /home/kullaniciadim/mepeuclerim/numaraatladi.mp3 /home/kullaniciadim/mepeuclerim/7.mp3 /home/kullaniciadim/mepeuclerim/yemedi.mp3

... /home/kullaniciadim/mepeuclerim/8.mp3 /home/kullaniciadim/mepeuclerim/9.mp3 bu komutu su sekilde calistirirsak $ find /home/kullaniciadim -path "mepeuclerim/" -prune -name "*.mp3" /home/kullaniciadim/birtaneburadakalmis.mp3 /home/kullaniciadim/baskabidizin/birtanedeburadakalmis.mp3 Tam olarak istediğimiş şeyi yapmış olacağız. Parametrelere gelince -path parametresiyle hangi klasör olduğu belirtildi ve -prune kullanarak bu dizini es gectik ve mepeuclerim klasörü dışında ama /home/kullaniciadim altındaki bütün dosyaları bu şekilde bulabiliriz Find in diğer parametrelerine gelince Dosya tipine göre arama yapmak için type kullanılabilir. Aşağıda belirtilen seçenekler ile beraber kullanılır. b c d p f l s D Örnek kullanımı block (buffered) special character (unbuffered) special directory named pipe (FIFO) regular file symbolic link socket door (Solaris) socketleri listelemek istersek find /tmp -type s /tmp/ksocket-root/kdeinit 0 /tmp/ksocket-root/kdeinit-:0 /tmp/ksocket-root/klauncherc133f4.slave-socket /tmp/mcop-root/bilgisayarim_bizimev-02e8-45b8b09c /tmp/.ice-unix/dcop725-1169731733 /tmp/.ice-unix/749 /tmp/.x11-unix/x0 /tmp/.s.pgsql.5432 Sadece klasor aramak istersek

find /etc/ -type d...... /etc/ /etc/defaults /etc/x11 /etc/x11/wmconfig find: /etc/isdn: Permission denied /etc/mail /etc/mtree /etc/ntp find: /etc/ntp: Permission denied /etc/pam.d /etc/periodic /etc/periodic/daily /etc/periodic/weekly /etc/ppp /etc/rc.d /etc/skel /etc/ssh... /etc/.java/deployment /etc/security eğer boş dosyaları ya da klasörleri bulmak istersek find. -empty /etc/ntp /etc/skel /etc/dumpdates /etc/opiekeys paramatresiyle kullanabiliriz. Bir dosya değilde dosya içerisinde geçen bir kelimeyi arıyorsanız find / -type f -exec grep "text" {} /dev/null \; dosya izinlerine görede arama yapmamız mümkün bunu için -perm parametresini kullanacağız. find. -perm 777 -exec chmod 755 {} \; yukarıdaki örnekte izni 777 olan dosyaları listeleyip bunları yeni bi parametre olan -exec ile bu dosyların modlarını 755 olarak değiştiriyoruz find / -perm -0002 -type f -print

yukarıdaki komut ise yazılabilir bütün dosyaları listelemektedir 4. which Çevre değişkenlerinde belirtilen (PATH) dosyaları aramak için kullanılır. Dosyanın tam yolunu belirtir. a parametresiyle aranan dosya için bütün yolları gösterir. 5. whereis which -a mono /usr/bin/mono /usr/bin/x11/mono Aranacak olan program, man sayfaları ya da kaynak klasörlerin yerini veren komuttur. ikili dosyaların dosya yolu için -b parametresi whereis -b mono /usr/local/bin/mono kaynak kodlar için -s paramatresi whereis -s echo /usr/src/bin/echo man sayfaları için -m parametresi whereis -m perl /usr/local/man/man1/perl.1.gz kullanılabilir. u parametresi kullanılmayan aşağıdaki komut ise /usr/bin altında manual sayfaları olmayan programları listeler whereis -m -u /usr/x11r6/bin/* aclocal-1: acpi_fakekey: activation-client: afmdiff: akodeplay:

amsn: amsn-remote:... gibi yukarıda gördüğümüz komutların kullanıldığı yerlere göre arama yaparsak sonuçları daha etkin ve hızlı şekilde arayabiliriz. örneğin arayacağımız bir komut (program ) ise which i kullanmamız daha mantıklıdır time locate locate time whereis locate time which locate locate whereis which real 0m0.057s real 0m0.031s real 0m0.002s user 0m0.039s user 0m0.002s user 0m0.000s sys 0m0.016s sys 0m0.009s sys 0m0.002s find için path belirtmek gerektiği için yukarıdaki listeye eklemedim aramak istediğimiz şey sıradan bir dosya ise locate in find dan hızlı olmasınan karşın find'in parametreleri ile daha etkin bir sonuç elde edebiliriz. time find /root -name *.pdf find locate time locate *.pdf real 0m1.238s real 0m0.042s user 0m0.027s user 0m0.041s sys 0m0.063s sys 0m0.001s

Kaynaklar 1- http://rlocate.sourceforge.net/ 2- man find 3- man whereis 4- man locate