Linux find komutu yanlış davranıyor


14

En son güvenlik açığı açıklamasının ardından sistem tarafından çözümlenen hizmeti ararken, find komutundan çok garip bir davranış görmeye geldim.

 root@localhost:/# find . -name "*systemd-resolved*"
./usr/share/man/man8/systemd-resolved.service.8.gz
./usr/share/man/man8/systemd-resolved.8.gz

Komut, ilk çalıştırma için çıkış olarak 0 veya iki satır döndürür. Ama komutu ikinci kez çalıştırırsam:

root@localhost:/# find . -name "*systemd-resolved*"
./usr/share/man/man8/systemd-resolved.service.8.gz
./usr/share/man/man8/systemd-resolved.8.gz
./lib/systemd/systemd-resolved
./lib/systemd/system/systemd-resolved.service.d
./lib/systemd/system/systemd-resolved.service

Bu, ilk kez "find" ın aslında her şeyi bulamadığı anlamına gelir. Ayrıca bu sadece bir kez olur. Komutu bir sonraki sefer çalıştırmak doğru çıktıyı gösterir. Debian 8 (jessie) kurulu diğer bazı sistemlerde bunu kontrol ettim. Çekirdek 4.9 ve sonraki sürümleri olanlarda bu kesin sorun her zaman oluşur, ancak çekirdek 3.16 olan sistemlerde bu olmaz.
Sistem yeniden başlatıldıktan sonra tüm bunlar tekrar olur. Ancak davranış her bir sistem için aynıdır. Bu, belirli bir sistemde test yapılması, ilk çalıştırma için iki çıkış satırı ve ikinci çalıştırma için doğru çıkış döndürürse, sistemi yeniden başlattıktan sonra komutun ilk çalıştırılmasının tekrar 2 satır yazdırdığı anlamına gelir. Böylece sistemler her yeniden başlatmadan sonra aynı davranışları gösterir (testlerime göre). Dosya detayları aşağıdaki gibidir:

-rw-r--r-- 1 root root  ./usr/share/man/man8/systemd-resolved.service.8.gz
lrwxrwxrwx 1 root root  ./usr/share/man/man8/systemd-resolved.8.gz -> systemd-resolved.service.8.gz
-rwxr-xr-x 1 root root  ./lib/systemd/systemd-resolved
drwxr-xr-x 2 root root  ./lib/systemd/system/systemd-resolved.service.d
-rw-r--r-- 1 root root  ./lib/systemd/system/systemd-resolved.service

DÜZENLEME: Sorunu öneren herkese, bu belirli dosyalar için bu özel durumla ilgili olabilir: " sistem tarafından çözümlendi " örnek olarak verilebilir. Bu, diğer anahtar kelimeleri ararken de olur. Bu, ilk çalıştırma için yanlış sonuçlar veren başka bir örnektir:

root@localhost:/# find . -name "*apache*"

Burada kimse backport deposundan en son çekirdeği olan bir Debian 8'de bu sorunu kontrol edemiyor mu?


2
Örneğin, iki aramanın izlerini karşılaştırmayı deneyebilir misiniz strace? Hangi işletim sistemi üzerinde hatalı davranış gözlemlediniz? "Yukarıdaki gibi 0 veya iki sonuç döndürür" ile ne demek istiyorsun? Sıfır veya iki satır çıkış veya çıkış kodu 0 + iki satır? Yeni bir kabuk başlattıktan veya yeniden başlattıktan sonra tekrar olur mu? İlk aramanın yalnızca dosyaları döndürdüğü, ikincisinin ise dosya ve dizin döndürdüğü önemli olabilir.
l0b0

1
@ l0b0 Dediğim gibi çoklu sistemlerde Kernel 4.9 ile Debian üzerinde oluyor. Diğer dağıtımları kontrol etmedim. 0 veya 2 sıfır veya iki çıkış satırı anlamına gelir. Her yeniden başlatmadan sonra olur. Son ifadeniz burada geçerli değil. Her şeyi geri döndürmeye çalışır. Hem dizinler hem de dosyalar.
user2808671

1
@ l0b0 Peki ne aradığınızdan emin değilim, ama gördüğünüz gibi komuttan bahsettim, böylece bir kişi sorunu yeniden üretebilsin. Bu komut "systemd-resolved" içeren tüm yolları döndürmelidir, ancak geri dönmeyecektir. Bu koşulu karşılayan toplam beş yol vardır, ancak "find" programı bunlardan yalnızca ikisini veya bir veya sıfırını döndürür. Burada önemli olan araç yanlış çıktı veriyor ve bazı doğru yolları kaçırıyor. Daha önce de belirttiğim gibi, Debian'lı diğer sistemlerde bunu kontrol ettim, 4.9 çekirdeği olanlarda bu sorun var. Bu kullanıcı alanının ötesinde ciddi bir şey olabilir.
user2808671

2
@MarkWagner Hayır. Hem gnu findutils hem de Debian backports posta listesine bir hata raporu doldurdum. Bu benim için çok ciddi görünüyor çünkü bu sorunun kaynağı başka şeyleri de etkileyebilir, ancak benimle aynı fikirde olup olmadığınızı bilmiyorum. Her neyse "find" çok popüler bir araçtır ve çıktısı güvenilir olmalıdır.
user2808671

2
Nasıl /lib/systemdmonte edilir? Ne tür bir dosya sistemi? Ayrı bir bağlama noktasıysa, saat kaçta monte edildi?
Andrew Henle

Yanıtlar:


4

Debian 8'de yüklü olan findutils varsayılan sürümü 4.4.2'dir ve bu jessie depolarındaki en yeni sürümdür. Findutils kaynak kodunun en son sürümünü (4.6.0) indiriyorum ve ikili dosyaları kaynaktan oluşturdum. Sonra aynı testleri yaptım ve "find" komutu ilk çalıştırma için doğru çıktı gösterdi .

Sonra findutils sürümü indirilebilir 4.4.2 gnu arşivinden kaynak kodu ve derlenmiş. Derlenmiş find komutu için de aynı sorun oldu. Bu nedenle, 4.6.0 bulucuları ile bu sorun yaşanmıyor.

Ancak yine de bazı kullanıcıların neden Find.2.4.2 (Debian üzerinde yüklü olan yardımcı programın varsayılan sürümü) kullanarak aynı sonuçları almadığını bilmiyorum ve Debian'ın neden bu eski findut sürümleriyle birlikte yayınlanması gerektiğini bilmiyorum. ve muhtemelen diğer Linux yardımcı programları ve bu sorunlu duruma neden olur. Ve son şey, garip olanların kesin teknik nedeninin hala bilinmeyen, ki bu arzu edilmiyor. Çünkü işletim sistemi ortamımda endişe verici bir şey olup olmadığından emin değilim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.