Perintah Linux find mengalami kesalahan fungsi

14

Mencari layanan yang diselesaikan sistem setelah pengungkapan kerentanan terbaru, saya datang untuk melihat perilaku yang sangat aneh dari perintah find.

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

Perintah mengembalikan 0 atau dua baris sebagai output untuk menjalankan pertama. Tetapi jika saya menjalankan perintah yang kedua kalinya saya dapatkan:

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

Ini berarti pertama kali, "temukan" sebenarnya tidak menemukan segalanya. Ini juga hanya terjadi satu kali. Menjalankan perintah kali berikutnya menunjukkan output yang benar. Saya memeriksa ini pada beberapa sistem lain dengan Debian 8 (jessie) diinstal. Pada mereka yang memiliki Kernel 4.9+ masalah persis ini selalu terjadi tetapi pada sistem dengan kernel 3.16 itu tidak terjadi.
Setelah sistem reboot semua ini terjadi lagi. Tetapi perilaku ini sama untuk setiap sistem individu. Itu berarti bahwa jika pengujian pada sistem tertentu mengembalikan (salah) dua baris output untuk menjalankan pertama dan mengoreksi output untuk menjalankan kedua, maka jalankan perintah pertama setelah me-reboot sistem lagi mencetak 2 baris. Jadi sistem menunjukkan perilaku yang sama setelah setiap reboot (menurut tes saya). Rincian file adalah sebagai berikut:

-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

EDIT: Untuk semua orang yang menyarankan masalah mungkin terkait dengan kasus khusus ini untuk file-file spesifik ini: " sistem-diselesaikan " hanyalah sebagai contoh. Ini terjadi ketika mencari kata kunci lain juga. Ini adalah contoh lain yang memberikan hasil yang salah untuk proses pertama:

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

Tidak ada orang di sini yang dapat memeriksa masalah ini pada Debian 8 dengan kernel terbaru dari repositori backport?

pengguna2808671
sumber
2
Bisakah Anda mencoba membandingkan jejak kedua panggilan, misalnya menggunakan strace? Di OS mana Anda mengamati perilaku yang salah? Apa yang Anda maksud dengan "mengembalikan 0 atau dua hasil seperti di atas"? Nol atau dua baris output, atau keluar kode 0 + dua baris? Apakah itu terjadi lagi setelah memulai shell baru atau me-reboot? Mungkin relevan bahwa panggilan pertama hanya mengembalikan file, sedangkan panggilan kedua mengembalikan file dan direktori.
l0b0
1
@ l0b0 Seperti yang saya katakan itu terjadi pada Debian dengan Kernel 4.9 di banyak sistem. Saya tidak memeriksa distro lain. 0 atau 2 berarti nol atau dua garis output. Itu terjadi setelah setiap reboot. Pernyataan terakhir Anda tidak berlaku di sini. Ia berusaha mengembalikan segalanya. Baik direktori dan file.
user2808671
1
@ l0b0 Yah saya tidak yakin apa yang Anda cari, tetapi seperti yang Anda lihat saya telah menyebutkan perintah sehingga orang dapat mereproduksi masalah. Perintah itu harus mengembalikan semua jalur yang mengandung "systemd-resolved" tetapi tidak. Ada total lima jalur yang memuaskan kondisi ini, tetapi program "find" hanya mengembalikan dua dari mereka atau satu atau nol. Yang penting di sini adalah bahwa alat tersebut memberikan output yang salah dan melewatkan beberapa jalur yang benar. Dan seperti yang saya sebutkan saya memeriksa ini pada sistem lain dengan Debian, mereka yang dengan kernel 4.9 memiliki masalah ini. Ini mungkin sesuatu yang serius di luar ruang pengguna.
user2808671
2
@MarkWagner No. Saya mengisi laporan bug ke gnu findutils dan milis backports Debian. Ini tampaknya sangat serius bagi saya karena sumber masalah ini dapat memengaruhi banyak hal lain meskipun saya tidak tahu apakah kalian setuju dengan saya. Anyways "find" adalah alat yang sangat populer dan hasilnya harus dapat diandalkan.
user2808671
2
Bagaimana cara /lib/systemddipasang? Sistem file apa itu? Jika itu terpisah mount point, apa waktu itu itu dipasang?
Andrew Henle

Jawaban:

4

Versi default findutils yang diinstal pada Debian 8 adalah 4.4.2 dan ini adalah versi terbaru pada repositori jessie. Saya mengunduh kode sumber findutils versi terbaru (4.6.0) dan membuat binari dari sumber. Kemudian saya melakukan tes yang sama dan perintah "find" menunjukkan output yang benar untuk proses pertama.

Kemudian saya mengunduh kode sumber findutils versi 4.4.2 dari arsip gnu dan mengompilasinya. Masalah yang sama terjadi pada perintah find yang dikompilasi. Jadi masalah ini tidak terjadi dengan findutils 4.6.0.

Tapi saya masih tidak tahu mengapa beberapa pengguna tidak mendapatkan hasil yang sama menggunakan findutils 4.4.2 (versi default dari utilitas yang diinstal pada Debian), dan tidak tahu mengapa Debian masih harus dirilis dengan findutils versi lama ini. dan mungkin utilitas Linux lainnya dan menyebabkan situasi bermasalah ini. Dan hal terakhir adalah bahwa alasan teknis yang tepat dari apa yang anehnya terjadi masih belum diketahui yang tidak diinginkan. Karena saya tidak yakin apakah ada sesuatu yang mengkhawatirkan di lingkungan OS saya.

pengguna2808671
sumber