Linux ve Unix Komutunu kullanma: bulmak

Linux ve Unix komut bul , bir dizin hiyerarşisindeki dosyalar için bir arama yürütür.

Bul komutu için sözdizimi:

[yolunu ...] [ifade] bul

Açıklama

Bu kılavuz sayfası, bulgunun GNU versiyonunu belgelemektedir. Komut bulmak , verilen ifadeyi soldan sağa doğru değerlendirerek, verilen her bir dosya adında köklenen dizin ağacını, sonuca ulaşılana kadar öncelik kurallarına göre (aşağıdaki Operatörler ile ilgili bölüme bakınız) arar; Başka bir deyişle, sol taraf yanlıştır ve işlemler için doğrudur, ya da bu noktada bir sonraki dosya adına ilerler.

Şununla başlayan ilk argüman:

ifadenin başlangıcı olarak alınır; aramadan önce herhangi bir argüman, arama yolları ve ifadenin geri kalanı sonra herhangi bir argümanlar. Hiçbir yol verilmediyse, geçerli dizin kullanılır. Herhangi bir ifade verilmezse, ifade -print kullanılır.

Tüm dosyalar başarıyla işlenirse, hata oluşursa 0'dan büyükse find komutu 0 durumundan çıkar.

İfade

İfade, (belirli bir dosyanın işlenmesinden ziyade genel işlemi etkileyen ve her zaman doğru olarak döndüren), testlerden (doğru veya yanlış bir değer döndüren) ve (yan etkileri olan ve bir doğru döndüren) eylemlerden oluşur. yanlış değer), tümü operatör tarafından ayrılmıştır. İfade -ve operatörün ihmal edildiği varsayılmaktadır. İfadenin -prune dışında bir eylem içermemesi durumunda, -print , ifadenin doğru olduğu tüm dosyalarda gerçekleştirilir.

Seçenekler

Tüm seçenekler her zaman doğrudur. Her zaman, yalnızca ifadedeki yerlerine ulaşıldığında işlenmekten çok, etkili olurlar. Bu nedenle, açıklık için, onları ifadenin başlangıcına yerleştirmek en iyisidir.

-daystart Günün başlangıcından 24 saat öncesine kadar ( -amin, -atime, -cmin, -cime, -mmin ve -mtime için) ölçüm süreleri.
-depth Her yöneticinin içeriğini dizinin kendisinden önce işleyin.
-takip et Dereference sembolik bağlar. -noleaf ima eder .
-help veya --help Bul ve çık komutunun komut satırı kullanımının bir özetini yazdırın.
-maxdepth [sayı] Komut satırı argümanlarının altındaki sayıların çoğunda (negatif olmayan bir tamsayı) inin. -maxdepth 0 ifadesi, yalnızca komut satırı argümanlarına yapılan testleri ve eylemleri uygulamak anlamına gelir.
-mindepth [sayı] Sayıdan daha düşük düzeylerde herhangi bir test veya eylem uygulamayın (negatif olmayan bir tamsayı). -mindepth 1 ifadesi, komut satırı bağımsız değişkenleri dışındaki tüm dosyaları işlemek anlamına gelir.
-montaj Diğer dosya sistemlerinde dizinleri inmeyin. Diğer bazı sürümleriyle uyumluluk için -xdev için alternatif bir ad.
-noleaf Dizinlerin, sabit bağlantı sayısından 2 daha az alt dizin içerdiğini varsayarak optimizasyon yapmayın. *
-version veya --version Bul sürüm numarasını yazdırın ve çıkın.
-xdev Diğer dosya sistemlerinde dizinleri inmeyin.

* Bu seçenek, CD-ROM veya MS-DOS dosya sistemleri veya AFS birim bağlama noktaları gibi Unix dizin bağlantısı sözleşmesini takip etmeyen dosya sistemleri ararken gereklidir. Normal bir Unix dosya sistemindeki her dizin en az 2 sabit bağlantıya sahiptir: adı ve onun adı . (dönem) giriş. Ayrıca, alt dizinlerinin (varsa) her biri, bu dizine bağlı bir girişe sahiptir.

Buluntu, bir dizini incelerken, yönetmenin bağlantı sayısından iki tane daha alt dizin oluşturduktan sonra, dizindeki diğer girişlerin dizin dışı olduğunu bilir (dizin ağacındaki yaprak dosyaları). Sadece dosyaların isimlerinin incelenmesi gerekiyorsa, bunları belirtmeye gerek yoktur; Bu, arama hızında önemli bir artış sağlar.

Testler

Sayısal bağımsız değişkenler şu şekilde belirtilebilir:

+ n N'den büyük için .
-n N'den daha az için .
n Tam olarak n.
-amin n Dosyaya n dakika önce ulaşıldı.
-anewer [dosya] Dosya son zamanlarda dosya değiştirildiğinden daha yeni erişildi. -anewer sadece -follow komut satırında -ewew önce gelirse -follow tarafından etkilenir.
-atime n Dosyaya en son 24 saat önce erişildi.
-cmin Dosyanın durumu en geç n dakika önce değiştirildi.
-cnewer [dosya] Dosyanın durumu en son değiştirildi, dosya değiştirildi.
- cnewer , -follow komut satırında -cnewer önce gelirse -follow tarafından etkilenir.
-lik n Dosyanın durumu en geç 24 saat önce n * olarak değiştirildi.
-boş Dosya boş ve normal bir dosya veya dizin.
-yanlış Her zaman yanlış.
-fstype [tür] Dosya belirtilen türde bir dosya sistemindedir. Geçerli dosya sistemi türleri, farklı Unix sürümleri arasında değişir; Bazı Unix veya başka bir sürümünde kabul edilen bir dosya sistemi türü eksik listesi: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Dosya sisteminizin türlerini görmek için% F yönergesi ile -printf'i kullanabilirsiniz.
-gid n Dosyanın sayısal grup kimliği n .
-group [gname] Dosya grup ismine aittir (izin verilen sayısal grup kimliği).
-ilname [desen] -Anname gibi, ama maç büyük küçük harf duyarsız.
-iname [desen] -Ad gibi , ama maç büyük / küçük harfe duyarsız. Örneğin, fo * ve F ?? Foo , FOO , foo , fOo , vb. isimleri eşleştirin
-in n Dosyada nod numarası var.
-ipat [desen] -Path gibi , ama maç büyük küçük harf duyarsız.
-iregex [desen] -regex gibi, ama maç büyük / küçük harfe duyarsız.
-n bağlantıları Dosya n bağlantıları var.
-name [desen] Dosya, içerikleri kabuk düzeniyle eşleşen sembolik bir bağlantıdır. Metakarakterler tedavi etmez . Özel olarak.
-mmin n Dosyanın verileri en geç n dakika önce değiştirildi.
-saat n Dosyanın verileri en geç 24 saat önce değiştirildi.
-name [desen] Dosya adının tabanı (önde gelen dizinlerin kaldırıldığı yol) kabuk deseniyle eşleşir. Meta karakterleri ( * ,? Ve [] ) eşleşmiyor a . taban adının başında. Bir dizini ve altındaki dosyaları yok saymak için -prune kullanın; -path açıklamasında bir örnek bakın.
-yeni [dosya] Dosya dosyadan daha yakın bir zamanda değiştirildi. -Yeni ifade, -follow komut satırında -başlangıçtan önce gelirse -follow tarafından etkilenir.
-nouser Hiçbir kullanıcı dosyanın sayısal kullanıcı kimliğine karşılık gelmez.
-nogroup Hiçbir grup, dosyanın sayısal grup kimliğine karşılık gelmez.
-path [desen] Dosya adı kabuk desen kalıbıyla eşleşir. Metakarakterler tedavi etmez . özel olarak; örneğin, bulmak. -path './sr*sc ./src/misc (varsa) için bir dizin için bir giriş yazdıracaktır. Tüm dizin ağacını yok saymak için, ağaçtaki her dosyayı kontrol etmek yerine -prune kullanın. Örneğin, src / emacs dizinini ve altındaki tüm dosyaları ve dizinleri atlamak ve bulunan diğer dosyaların adlarını yazdırmak için, bunun gibi bir şey yapın: bul. -path './src/emacs' -prune -o -print
-perm [mod] Dosyanın izin bitleri tam olarak [mod] (sekizlik veya sembolik). Sembolik modlar, hareket noktası olarak 0 modunu kullanır.
-perm-mode Tüm izin bitleri [mod] dosya için ayarlanır.
-perm + modu Dosya için izin bitlerinden [mod] herhangi biri ayarlanır.
-regex [desen] Dosya adı düzenli ifade kalıbıyla eşleşiyor. Bu, tüm yol üzerindeki bir eşleşme, bir arama değil. Örneğin, ./fubar3 isimli bir dosyayı eşleştirmek için normal ifadeyi kullanabilirsiniz . veya . * b. * 3 , ancak b. * r3 değil .
-size n [bckw] Dosya n alanı kullanır. Birim, varsayılan olarak 512 baytlık bloklardır veya eğer n , n'yi izlerse n , baytlar n ise kilobayt, veya w izlerse 2 baytlık kelimeler ise, n , baytları takip eder. Boyut, dolaylı blokları saymaz, ancak aslında ayrılmamış seyrek dosyalarda blokları sayar.
-doğru Herzaman doğru.
-type c Dosya c tipi:
b Blok (tamponlanmış) özel
c Karakter (engelsiz) özel
d rehber
p Adlandırılmış boru (FIFO)
f Düzenli dosya
l Sembolik bağlantı
s Priz
D kapı (Solaris)
-u n Dosyanın sayısal kullanıcı kimliği n .
-siz n Dosya en son değiştirildikten sonra n gün sonra erişildi.
-user uname Dosya kullanıcı uname'e aittir (sayısal kullanıcı kimliği girilebilir).
-yazıt c Dosya sembolik bir bağlantı olmadığı sürece -type ile aynıdır. Sembolik linkler için: eğer -follow verilmemişse, dosya c tipi bir dosyaya bir linkse ; -follow verilmişse, c , l ise doğrudur. Başka bir deyişle, sembolik bağlar için,
-xtype , -type'ın kontrol etmediği dosyanın türünü denetler.

Eylemler

-exec komutu ;

Yürüt komutu ; 0 durumu döndüğünde doğrudur. Bulunacak tüm argümanlar, `; ' karşılaşıldı. `{} 'Dizgisi, argümanlarda her yerde işlenen geçerli dosya ismiyle değiştirilir, sadece bulmanın bazı sürümlerinde olduğu gibi sadece tek başına olduğu argümanlarda değil. Bu yapıların her ikisinin de kaçması (“\” ile) veya kabuk tarafından genişlemesini önlemek için alıntı yapılması gerekebilir. Komut, başlangıç ​​dizininde yürütülür.

-fls dosyası

Doğru; -ls gibi ama -fprint gibi dosyaya yaz.

-baskı dosyası

Doğru; Tam dosya adını dosya dosyasına yazdır. Bul , çalıştırıldığında dosya mevcut değilse, oluşturulur; Varsa, kesilir. `` / Dev / stdout '' ve `` / dev / stderr '' dosya isimleri özel olarak ele alınır; sırasıyla standart çıktı ve standart hata çıktısını belirtirler.

-fprint0 dosyası

Doğru; -print0 gibi ama -fprint gibi dosyaya yaz.

-fprintf dosya formatı

Doğru; -printf gibi ama -fprint gibi dosyaya yaz.

-ok komutu ;

-exec gibi ama önce kullanıcıya sor (standart girişte); Yanıt, "y" veya "Y" ile başlamazsa, komutu çalıştırmayın ve yanlış döndürmeyin.

-print

Doğru; Tam dosya adını standart çıktıya yazdırın, ardından bir satırsonu izleyin.

-print0

Doğru; Tam dosya adını standart çıktıya, ardından boş bir karaktere yazdır. Bu, yeni çıktıları içeren dosya adlarının, bulma çıktısını işleyen programlar tarafından doğru şekilde yorumlanmasına olanak tanır.

-printf formatı

Doğru; standart çıktıda baskı formatı , `\ 'kaçar ve`%' direktiflerini yorumlar. Alan genişlikleri ve kesitler, printf C işleviyle belirtilebilir. -print'in aksine -printf, dizenin sonuna yeni satır eklemez. Kaçış ve direktifler:

\ a

Alarm zili.

\ b

Geri tuşu.

\ c

Bu formattan yazdırmayı hemen durdurun ve çıkışı temizleyin.

\ f

Form besleme.

\ n

Yeni hat.

\ r

Satırbaşı.

\ t

Yatay sekme.

\ v

Dikey sekmesi.

\\

Bir literal ters eğik çizgi (`\ ').

\ NNN

ASCII kodu NNN (sekizlik) olan karakter.

Başka bir karakterin izlediği bir "\" karakteri, sıradan bir karakter olarak kabul edilir, böylece ikisi de yazdırılır.

%%

Bir gerçek yüzde işareti.

% bir

Dosyanın son erişim zamanı C `ctime 'fonksiyonu tarafından döndürülen formatta.

% A k

Dosyanın son erişim zamanı, k tarafından belirtilen biçimde, `@ 'ya da C` strftime' fonksiyonu için bir direktiftir. K için olası değerler aşağıda listelenmiştir; Bazı sistemler, sistemler arasındaki "strftime" farklılıklarından dolayı tüm sistemlerde mevcut olmayabilir.

@

1 Ocak 1970'den beri GMT.

Zaman alanları:

'H

saat (00.23)

ben

saat (01..12)

k

saat (0,23)

l

saat (1..12)

M

dakika (00.,59)

p

yerel ayar AM veya PM

r

saat, 12 saat (ss: dd: ss [AP] M)

S

ikinci (00..61)

T

saat, 24 saat (ss: dd: ss)

X

locale'nin zaman gösterimi (H: M: S)

Z

saat dilimi (örneğin EDT) veya hiçbir zaman dilimi belirlenemiyorsa hiçbir şey

Tarih alanları:

bir

locale'nin kısaltılmış hafta içi adı (Sun..Sat)

bir

locale'nin tam hafta içi adı, değişken uzunluk (Sunday..Saturday)

b

locale'nin kısaltılmış adı (Jan..Dec)

B

locale'nin tam ay adı, değişken uzunluk (January..December)

c

locale tarihi ve saati (Cts Nov 04 12:02:33 EST 1989)

d

ayın günü (01..31)

D

tarih (aa / gg / yy)

h

b ile aynı

j

yılın günü (001..366)

m

ay (01..12)

U

Haftanın ilk günü olarak Pazar gününün hafta sayısı (00.,53)

w

haftanın günü (0.,6)

W

Haftanın ilk günü olan pazartesi haftası (00.,53)

x

yerel ayarların tarih gösterimi (mm / gg / yy)

y

yılın son iki hanesi (00..99)

Y

yıl (1970 ...)

% b

Dosyanın boyutu 512 bayt blokta (yuvarlatılmış).

% c

Dosyanın son durumu, C `ctime 'işlevi tarafından döndürülen biçimde değişir.

% C k

Dosyanın son durumu, k tarafından belirtilen formatta,% A ile aynıdır.

% D

Dosyanın dizin ağacındaki derinliği; 0, dosyanın bir komut satırı argümanı olduğunu gösterir.

% f

Herhangi bir öncü dizinin kaldırılmış olduğu dosya adı (sadece son eleman).

% F

Dosyanın açık olduğu dosya sisteminin tipi; Bu değer -fstype için kullanılabilir.

% g

Grubun adı yoksa grubun grup adı veya sayısal grup kimliği.

% G

Dosyanın sayısal grup kimliği.

% h

Dosya adının önde gelen dizinleri (son öğe hariç).

% H,

Dosyanın bulunduğu komut satırı argümanı.

%ben

Dosyanın inode numarası (ondalık).

% k

Dosyanın boyutu 1K'lık bloklarda (yuvarlatılmış).

% l

Sembolik bağın nesnesi (dosya sembolik bir bağlantı değilse boş dize).

% m

Dosyanın izin bitleri (sekizlik).

% n

Dosyaya sabit bağlantı sayısı.

% p

Dosyanın adı.

% P

Dosya adı, altında bulunduğu komut satırı argümanının adıyla kaldırıldı.

% s

Dosyanın boyutu bayt cinsinden.

% t

Dosyanın son değişiklik zamanı C `ctime 'fonksiyonu tarafından döndürülen formatta.

% T k

Dosyanın son değişiklik zamanı,% A ile aynı olan k ile belirtilen biçimde.

% u

Kullanıcının adı yoksa, kullanıcının kullanıcı adı veya sayısal kullanıcı kimliği.

% U

Dosyanın sayısal kullanıcı kimliği.

Başka bir karakterin izlediği bir "%" karakteri atılır (ancak diğer karakter yazdırılır).

-kuru erik

-dep belirtilmemişse, doğru; Geçerli dizini yok etmeyin.
-depth verilirse, false; etkisi yok.

-ls

Doğru; Geçerli dosyayı `ls -dils 'formatında standart çıktıda listeleyebilir. POSIXLY_CORRECT ortam değişkeni ayarlanmadığı sürece blok sayımları 1K'lık bloklardır, bu durumda 512 baytlık bloklar kullanılır.

Operatörler

Öncelik sırasına göre listelenmiştir:

( expr )

Önceliği zorla.

! İfade

Expr yanlışsa doğrudur.

-not değil

İle aynı ! expr .

expr1 expr2

Ve (ima); expr1 false ise expr2 değerlendirilmez.

expr1 -a expr2

Expr1 expr2 ile aynı.

expr1 ve expr2

Expr1 expr2 ile aynı.

expr1 -o expr2

Veya; expr1 doğruysa expr2 değerlendirilmez.

expr1 -or expr2

Expr1 -o expr2 ile aynı.

expr1 , expr2

Liste; Hem expr1 hem de expr2 her zaman değerlendirilir. Expr1 değeri atılır; Listenin değeri expr2 değeridir.

Örnekler

bul / home -user joe

Kullanıcı joe tarafından sahip olunan dizin / ev altındaki her dosyayı bulun.

bulmak / usr -name * stat

".stat" ile biten / usr dizini altındaki her dosyayı bulun.

bul / var / spool -mtime +60

60 günden daha önce değiştirilmiş olan dizin / var / spool altındaki tüm dosyaları bulun.

bul / tmp -name göbeği-türü f-izi | xargs / bin / rm -f

Dizin / tmp içinde veya altında çekirdek adlı dosyaları bulun ve bunları silin. Yeni satırlar, tek veya çift tırnak işaretleri veya boşluklar içeren bir dosya adı varsa bu durumun yanlış çalışacağını unutmayın.

find / tmp -name göbeği -type f -print0 | xargs -0 / bin / rm -f

Dizin / tmp içinde veya altında çekirdek adında dosya bulun ve bunları silin, dosya adlarını tek veya çift tırnak, boşluk veya satır sonu satırları içeren dosya veya dizin adları doğru şekilde işlenecek şekilde işleyin. -name testi, her dosyada stat (2) çağırmaktan kaçınmak için -type testinden önce gelir.

bul. -type f -exec dosyası '{}' \;

Geçerli dizinin içindeki veya altındaki her dosyada `dosya 'çalıştırır. Kabuk betikleri noktalama işareti olarak yorumlanmaya karşı korumak için parantezlerin tek tırnak işareti içine alındığına dikkat edin. Noktalı virgül, benzer şekilde bir ters eğik çizgi ile korunur, yine de ';' Bu durumda da kullanılmış olabilirdi.

/ \ (-perm -4000 -fprintf /root/suid.txt '% # m% u% p \ n' \), \ \ (-size + 100M -fprintf /root/big.txt '% -10s% dosyasını bulun p \ n '\)

Dosya sistemini sadece bir kez çaprazlayın , setuid dosyalarını ve dizinleri /root/suid.txt dosyasına ve büyük dosyaları /root/big.txt dosyasına girin.

$ HOME -mtime bulmak 0

Son yirmi dört saat içinde değiştirilmiş olan ana dizininizdeki dosyaları arayın. Bu komut, bu şekilde çalışır, çünkü her dosyanın en son değiştirildiği zaman, 24 saate bölünür ve kalanlar atılır. Bu, maçın eşleşmesi anlamına geliyor

0 , bir dosya 24 saatten daha kısa bir geçmişte bir değişiklik olması gerekecek.

bul. -perm 664

Sahipleri ve grupları için okuma ve yazma izni olan ancak diğer kullanıcıların okuyabileceği ancak yazamayacağı dosyaları arayın. Bu ölçütleri karşılayan ancak diğer izin bitlerine sahip dosyalar (örneğin, bir dosyayı çalıştırabilirse) eşleştirilmeyecektir.

bul. -perm -664

Sahipleri ve grupları için okuma ve yazma izni olan ve diğer kullanıcıların okuyabileceği dosyaları, herhangi bir ek izin bitinin varlığı (örneğin, yürütülebilir bit) bulunmadan arayın. Bu, örneğin 0777 moduna sahip bir dosyayla eşleşecektir.

bul. -perm / 222

Birisi tarafından yazılabilir olan dosyaları (sahiplerini veya gruplarını veya başkalarını) arayın.

bul. -perm / 220 bulabilirsiniz. -perm / u + w, g + w bulmak. -perm / u = w, g = w

Bu komutların üçü de aynı şeyi yapar, ancak ilki dosya modunun sekizlik gösterimini kullanır ve diğer ikisi de sembolik formu kullanır. Bu komutlar, sahiplerinin veya gruplarının yazabileceği dosyaları arar. Dosyaların eşleştirilecek sahip ve grup tarafından yazılabilir olması gerekmez; ya yapacak.

bul. -perm -220'yi bul. -perm -g + w, u + w

Her iki komut da aynı şeyi yapar; hem sahiplerinin hem de gruplarının yazabileceği dosyaları arayın.

bul. -perm -444 -perm / 222! -perm / 111 bulmak. -perm -a + r -perm / a + w! -perm / a + x

Bu iki komut hem herkes için okunabilen dosyaları arar (-perm -444 veya -perm -a + r), en azından yazma bit kümesine (-perm / 222 veya -perm / a + w) sahiptir, ancak çalıştırılamazlar. herkes için (! -perm / 111 ve! -perm / a + x)

Önemli: Komutunuzun belirli bir bilgisayarda nasıl kullanıldığını görmek için man komutunu ( % adam ) kullanın.