giriiş
Kullanıcıların Linux ile çalışmayı ilk öğrendiklerinde karşılaştıkları sorunlardan biri, aradıkları dosyaları nasıl bulacaklarıdır. Bu kılavuz, komutun nasıl kullanılacağını gösterecektir. bulmak Doğru adı kapsar. Çeşitli filtreler ve parametreler kullanarak sisteminizdeki dosyaları aramanıza yardımcı olur. Ayrıca komutu kısaca açıklar. yerini tespit etmek Dosyaları farklı bir şekilde aramak için kullanılabilir.
Ön koşullar
- Bu kılavuzu takip etmek için Linux tabanlı bir işletim sistemi çalıştıran bir bilgisayara erişiminiz olması gerekir. Bu, SSH veya yerel makinenizle bağlandığınız sanal bir özel sunucu olabilir. Bu eğitimin Ubuntu 20.04 çalıştıran bir Linux sunucusu kullanılarak doğrulandığını, ancak verilen örneklerin herhangi bir Linux dağıtımının herhangi bir sürümünü çalıştıran bir bilgisayarda çalışacağını unutmayın.
İsme göre bul
Dosyaları aramanın en kolay yolu adlarına göre arama yapmaktır. Bir dosyayı adına göre bulmak için şu komutu kullanın: bulmak, aşağıdaki komutu kullanmalısınız:
find -name "query"Bu, büyük/küçük harfe duyarlı olacaktır; yani sorguyu aramak, arama yapmakla aynı olacaktır. Sorgu Farklı. Bir dosyayı adına göre bulmak ancak sorgunun büyük/küçük harf kullanımını göz ardı etmek için -iname seçeneğini kullanın:
find -iname "query"Belirli bir kalıba uymayan tüm dosyaları bulmak istiyorsanız, aramayı daraltabilirsiniz. -Olumsuz Tersi:
find -not -name "query_to_avoid"Alternatif olarak, aramayı şu şekilde ünlem işareti (!) kullanarak tersine çevirebilirsiniz:
find \! -name "query_to_avoid"! işaretini kullanırsanız, kullanmadan önce karakteri ters eğik çizgi (\) ile kaçırmanız gerektiğini unutmayın. bulmak yorumlayabilir, ancak kabuk bunu yorumlamaya çalışmaz.
Türüne göre bul
Parametre ile -tip Bulmak istediğiniz dosya türlerini belirtebilirsiniz. Nasıl çalıştığı aşağıda açıklanmıştır:
find -type type_descriptor queryDosya türünü belirlemek için kullanabileceğiniz bazı tanımlayıcılar şunlardır:
- f: Düzenli dosya
- d: dizin
- l: sembolik bağlantı
- c: Karakter aygıtları
- b: Cihazları engeller
Örneğin, sisteminizdeki tüm karakter aygıtlarını bulmak istiyorsanız şu komutu verebilirsiniz:
find /dev -type cBu komut, yalnızca Linux sistemlerinde aygıt dosyalarının genellikle yüklendiği dizin olan /dev klasöründeki aygıtları arar:
Output
/dev/vcsa5
/dev/vcsu5
/dev/vcs5
/dev/vcsa4
/dev/vcsu4
/dev/vcs4
/dev/vcsa3
/dev/vcsu3
/dev/vcs3
/dev/vcsa2
/dev/vcsu2
/dev/vcs2
. . .Tüm dosyaları görüntüleyebilirsiniz .conf . ile biten dosyaları arayın. Bu örnek, klasördeki eşleşen dosyaları bulacaktır. /usr Aramalar:
find /usr -type f -name "*.conf"Output
/usr/src/linux-headers-5.4.0-88-generic/include/config/auto.conf
/usr/src/linux-headers-5.4.0-88-generic/include/config/tristate.conf
/usr/src/linux-headers-5.4.0-90-generic/include/config/auto.conf
/usr/src/linux-headers-5.4.0-90-generic/include/config/tristate.conf
/usr/share/adduser/adduser.conf
/usr/share/ufw/ufw.conf
/usr/share/popularity-contest/default.conf
/usr/share/byobu/keybindings/tmux-screen-keys.conf
/usr/share/libc-bin/nsswitch.conf
/usr/share/rsyslog/50-default.conf
. . .Zaman ve boyuta göre filtrele
bulmak Sonuçları boyuta ve zamana göre filtrelemenin farklı yollarını sunar.
Boyut
Parametreyi kullanarak -boyut Dosyaları boyutlarına göre filtreleyebilirsiniz. Bunu yapmak için, boyutu bayt, megabayt, gigabayt veya başka bir ölçü birimiyle mi saydığınızı belirtmek üzere sayısal boyut değerinin sonuna özel bir sonek eklemeniz gerekir. İşte yaygın olarak kullanılan bazı boyut sonekleri:
- c: bayt
- k: kilobayt
- m: megabayt
- g: gigabayt
- b: 512 baytlık bloklar
Örneğin, aşağıdaki komut /usr dizininde tam olarak 50 bayt uzunluğunda olan herhangi bir dosyayı bulacaktır:
find /usr -size 50c50 bayttan küçük dosyaları bulmak için şu sözdizimini kullanabilirsiniz:
find /usr -size -50c/usr klasöründeki 700 MB'tan büyük dosyaları bulmak için şu komutu kullanabilirsiniz:
find /usr -size +700MZaman
Linux, sistemdeki her dosya için erişim zamanı, değişiklik zamanı ve değişiklik zamanı için zaman damgalarını depolar.
- Erişim zamanı: Bir dosyanın son okunduğu veya yazıldığı zaman.
- Değiştirme zamanı: Dosya içeriğinin en son değiştirildiği zaman.
- Değiştirme zamanı: Dosyanın inode meta verilerinin son değiştirildiği zaman.
Seçenekleri kullanma bir zaman- ,mtime- Ve -ctime, Bul aramalarınızı bu parametrelere dayandırabilirsiniz. Bu seçeneklerin her biri için, geçmişte kaç gün aramak istediğinizi belirten bir değer girmelisiniz. Daha önce açıklanan boyut seçeneklerine benzer şekilde, bu seçeneklerin önüne artı veya eksi işaretleri ekleyerek "daha büyük" veya "daha küçük" değerlerini belirtebilirsiniz.
Örneğin, /usr klasöründeki son bir gün içinde değiştirilen dosyaları bulmak için aşağıdaki komutu çalıştırın:
find /usr -mtime 1Bir günden daha kısa bir süre önce eriştiğiniz dosyaları istiyorsanız şu komutu çalıştırabilirsiniz:
find /usr -atime -1Meta verileri en son 3 günden daha önce değiştirilen dosyaları bulmak için aşağıdakileri çalıştırabilirsiniz:
find /usr -ctime +3Bu seçeneklere, gün yerine dakikaları belirtmek için kullanabileceğiniz eşlik eden parametreler de dahildir:
find /usr -mmin -1Bu, en son değiştirilen dosyaları gösterecektir.
bulmak Ayrıca bir referans dosyasıyla karşılaştırma yapabilir ve daha yeni öğeleri döndürebilir:
find / -newer reference_fileBu sözdizimi, referans dosyasına göre sistemde yakın zamanda oluşturulmuş veya değiştirilmiş herhangi bir dosyayı döndürür.
Sahibine ve izinlere göre bul
Dosyaları, -user ve -group parametrelerini kullanarak dosyanın sahibi olan kullanıcı veya gruba göre de arayabilirsiniz. /var dizininde syslog kullanıcısına ait herhangi bir dosyayı bulmak için şu komutu çalıştırın:
find /var -user syslogBenzer şekilde, /etc dizinindeki gölge grubuna ait dosyaları şu komutu yazarak listeleyebilirsiniz:
find /etc -group shadowAyrıca belirli izinlere sahip dosyaları da arayabilirsiniz.
Tam bir izin kümesini eşleştirmek istiyorsanız, izinleri sekizli gösterim kullanarak belirten şu sözdizimini kullanabilirsiniz:
find / -perm 644Bu, belirtilen izinlere sahip dosyaları tam olarak eşleştirir.
En azından bu izinlere sahip bir şey belirtmek istiyorsanız, izin simgesinin önüne eksi işareti koyabilirsiniz:
find / -perm -644Bu, ek izinlere sahip herhangi bir dosyayla eşleşir. Bu örnekte izinleri 744 olan bir dosya eşleşir.
Derinliğe göre filtreleme
Bu bölümde, dosyaları yapıdaki derinliklerine göre filtrelemek için kullanacağınız örnek bir dizin yapısı oluşturacaksınız. Bu eğitimdeki örnekleri takip ediyorsanız, bu dosya ve dizinleri /tmp/ klasöründe oluşturmanız akıllıca olacaktır. /tmp/ geçici bir dizindir, yani içindeki tüm dosya ve dizinler sunucu bir sonraki açılışında silinecektir. Bu, bu kılavuzun amaçları doğrultusunda faydalı olacaktır, çünkü daha sonra sisteminizin çökmesi konusunda endişelenmeden istediğiniz kadar dizin, dosya ve bağlantı oluşturabilirsiniz. Bu bölümdeki komutları çalıştırdıktan sonra, /tmp/ dizininiz ilk düzeyde on dizin olmak üzere üç düzeyde dizin içerecektir. Her dizin (geçici dizin dahil) on dosya ve on alt dizin içerecektir.
Aşağıdaki komutla /tmp/ klasöründe örnek bir dizin yapısı oluşturun:
mkdir -p /tmp/test/level1dir{1..10}/level2dir{1..10}/level3dir{1..10}Daha sonra touch komutunu kullanarak bu dizinleri bazı örnek dosyalarla doldurun:
touch /tmp/test/{file{1..10},level1dir{1..10}/{file{1..10},level2dir{1..10}/{file{1..10},level3dir{1..10}/file{1..10}}}}Bu dosyalar ve dizinler yerindeyken, devam edin ve az önce oluşturduğunuz test/ dizinine geçin:
cd /tmp/testBu yapıdan dosyaların nasıl alınacağına dair temel bir anlayış edinmek için öncelikle file1 adlı herhangi bir dosyayla eşleşen normal adı arayın:
find -name file1Output
./level1dir7/level2dir8/level3dir9/file1
./level1dir7/level2dir8/level3dir3/file1
./level1dir7/level2dir8/level3dir4/file1
./level1dir7/level2dir8/level3dir1/file1
./level1dir7/level2dir8/level3dir8/file1
./level1dir7/level2dir8/level3dir7/file1
./level1dir7/level2dir8/level3dir2/file1
./level1dir7/level2dir8/level3dir6/file1
./level1dir7/level2dir8/level3dir5/file1
./level1dir7/level2dir8/file1
. . .Bu, birçok sonuç üretecektir. Çıktıyı bir sayaca aktarırsanız, toplam 1111 sonuç olduğunu göreceksiniz:
find -name file1 | wc -lOutput
1111Bu, çoğu durumda sizin için faydalı olamayacak kadar fazla sonuç olabilir. Bunu sınırlamak için, üst düzey arama listesinde maksimum arama derinliğini belirtebilirsiniz:
find -maxdepth num -name queryfile1'i yalnızca level1 ve daha üst dizinlerde bulmak için, maksimum derinliği 2 olarak belirleyebilirsiniz (en üst düzey dizin için 1 ve level1 dizinleri için 1):
find -maxdepth 2 -name file1Output
./level1dir7/file1
./level1dir1/file1
./level1dir3/file1
./level1dir8/file1
./level1dir6/file1
./file1
./level1dir2/file1
./level1dir9/file1
./level1dir4/file1
./level1dir5/file1
./level1dir10/file1Bu oldukça yönetilebilir bir liste.
Belirli bir noktadaki tüm dosyaların geçerli dizinin altında bulunduğunu biliyorsanız, minimum bir dizin de belirleyebilirsiniz:
find -mindepth num -name queryBunu yalnızca dizin dallarının sonundaki dosyaları bulmak için kullanabilirsiniz:
find -mindepth 4 -name file1Output
./level1dir7/level2dir8/level3dir9/file1
./level1dir7/level2dir8/level3dir3/file1
./level1dir7/level2dir8/level3dir4/file1
./level1dir7/level2dir8/level3dir1/file1
./level1dir7/level2dir8/level3dir8/file1
./level1dir7/level2dir8/level3dir7/file1
./level1dir7/level2dir8/level3dir2/file1
. . .Yine dal-dosya yapısından dolayı çok sayıda (1000) sonuç döndürüyor.
Dar bir aralığa odaklanmak için minimum ve maksimum derinlik parametrelerini birleştirebilirsiniz:
find -mindepth 2 -maxdepth 3 -name file1Output
./level1dir7/level2dir8/file1
./level1dir7/level2dir5/file1
./level1dir7/level2dir7/file1
./level1dir7/level2dir2/file1
./level1dir7/level2dir10/file1
./level1dir7/level2dir6/file1
./level1dir7/level2dir3/file1
./level1dir7/level2dir4/file1
./level1dir7/file1
. . .Bu seçeneklerin bu şekilde birleştirilmesi, sonuçları önemli ölçüde azaltacak ve önceki 1000 satır yerine yalnızca 110 satır döndürülecektir.
Sonuçları bulmak için komutları yürütme
Parametreyi kullanabilirsiniz -yürütücü Aşağıdaki komutu kullanarak eşleşen herhangi bir şey üzerinde özel bir yardımcı komut çalıştırın:
find find_parameters -exec command_and_options {} \;{} eşleşen dosyalar için yer tutucu olarak kullanılır. \; komutun nerede bittiğini bize bildirir.
Örneğin, bir önceki adımda oluşturduğunuz /tmp/ klasöründeki /test/ dizininde olduğunuzu varsayarak, bir önceki bölümde 644 izinlere sahip dosyaları bulup bunları 664 izinlere sahip olacak şekilde değiştirebilirsiniz:
find . -type f -perm 644 -exec chmod 664 {} \;Benzer şekilde dizin izinlerini de değiştirebilirsiniz:
find . -type d -perm 755 -exec chmod 700 {} \;Bu örnek, izinleri 755 olarak ayarlanmış herhangi bir dizini bulur ve ardından izinleri 700 olarak değiştirir.
Locate kullanarak dosyaları bulma
Kullanmaya alternatif bulmak Emir yerini tespit etmek Bu komut genellikle daha hızlıdır ve tüm dosya sistemini kolayca arayabilir.
Komutu Debian veya Ubuntu'ya apt ile paket listenizi güncelleyip molocate paketini kurarak kurabilirsiniz:
sudo apt update sudo apt install mlocate
Rocky Linux, CentOS ve diğer RedHat türevi dağıtımlarda mlocate'i yüklemek için dnf komutunu kullanabilirsiniz:
sudo dnf install mlocateLocate komutunun find komutundan daha hızlı olmasının nedeni, dosya sistemindeki tüm dosyaları listeleyen bir veritabanına dayanmasıdır. Bu veritabanı genellikle günde bir kez bir cron betiğiyle güncellenir, ancak updatedb komutuyla manuel olarak da güncelleyebilirsiniz. Şimdi şu komutu sudo ayrıcalıklarıyla çalıştırın:
sudo updatedbUnutmayın, yeni dosyalar bulmak istiyorsanız, konum veritabanı her zaman güncel olmalıdır. Cron betiği veya updatedb komutu çalışmadan önce yeni dosyalar eklerseniz, bunlar sorgu sonuçlarında görünmez.
Konum, sonuçları çeşitli şekillerde filtrelemenize olanak tanır. Dosyaları bulmak için kullanabileceğiniz en temel yol şu sözdizimini kullanmaktır:
locate queryBu, dosya yollarında herhangi bir yerde sorgu dizesini içeren tüm dosya veya dizinlerle eşleşecektir. Sorguya yol açan dizinlerde sorguyu içeren dosyalar yerine, yalnızca adları sorgunun kendisini içeren dosyaları döndürmek için, yalnızca "temel adı" sorguyla eşleşen dosyaları aramak üzere -b işaretini ekleyebilirsiniz:
locate -b queryLocate'in yalnızca dosya sisteminde hâlâ var olan sonuçları döndürmesini sağlamak için (yani, son updatedb çağrısı ile geçerli locate çağrısı arasında silinmemiş dosyalar), -e kullanın:
locate -e query-S seçeneğini kullanarak konumun listelendiği bilginin istatistiklerini alabilirsiniz:
locate -SOutput
Database /var/lib/mlocate/mlocate.db:
21015 directories
136787 files
7727763 bytes in file names
3264413 bytes used to store databaseBu, sisteminizdeki dosya ve dizin sayısı hakkında üst düzey bir anlayış edinmeniz için yararlı olabilir.
Sonuç
Hem find hem de locate, sisteminizdeki dosyaları bulmak için kullanışlı araçlardır. Her ikisi de, işlem hatları aracılığıyla diğer araçlarla birleştirilerek geliştirilebilen güçlü komutlardır, ancak durumunuz için hangi aracın doğru olduğuna karar vermek size kalmıştır. Buradan itibaren find ve locate ile denemeler yapmaya devam etmenizi öneririz. Bu kılavuzda ele alınmayan diğer seçenekler hakkında bilgi edinmek için ilgili kılavuz sayfalarını okuyabilir ve wc, sort ve grep gibi diğer komutlara aktararak arama sonuçlarını analiz edip değiştirebilirsiniz.









