Apa perbedaan antara cari / whereis / yang

13

Apa perbedaan mendasar antara locate whereisdan whichperintah.

Perbedaan mendasar yang saya amati adalah bahwa locatemenempatkan semua nama file terkait di seluruh sistem file, sedangkan whereisdan whichperintah hanya memberikan lokasi (sistem / alamat file lokal) aplikasi yang diinstal. Seberapa akurat pengamatan saya?

Bagaimana perintah-perintah ini diimplementasikan secara internal. Mengapa locatebekerja sangat cepat dibandingkan dengan pencarian dasbor, sementara locateharus mencari nama file yang cocok dengan string target di seluruh hierarki sistem file?

Chinmaya B
sumber
2
dan bagaimana type? : P
jamesmstone
@jamesmstone apa maksudmu type, jelaskan
Chinmaya B
2
Maaf saya hanya mencoba menambahkan ke pertanyaan Anda. typeadalah perintah lain yang tampaknya (di mata saya) melakukan hal serupa dengan yang Anda sebutkan.
jamesmstone
@ jamesmstone Saya tidak berpikir ada perintah tipe apa pun yang bekerja di sistem saya. Saya tidak dapat menemukan halaman manual atau info untuk typeperintah. Saya mencoba man typedan info type.
Chinmaya B
Hmm saya bertanya-tanya mengapa ... Apakah Anda menggunakan bash?
jamesmstone

Jawaban:

17

whichmenemukan biner yang dapat dieksekusi dari program (jika ada di PATH Anda). man whichmenjelaskan lebih jelas:

yang mengembalikan nama path dari file (atau tautan) yang akan dieksekusi di lingkungan saat ini, seandainya argumennya diberikan sebagai perintah dalam shell yang benar-benar sesuai dengan POSIX. Ini dilakukan dengan mencari PATH untuk file yang dapat dieksekusi yang cocok dengan nama argumen. Itu tidak mengikuti tautan simbolis.

whereismenemukan biner, sumber, dan file halaman manual untuk suatu program. Sebagai contoh

$ whereis gimp
/usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz

Anda bisa mendapatkan detail ekstra dengan mengirimkan output dari perintah ini sebagai argumen ke ls -lataufile

$ ls -l $(which gimp)
lrwxrwxrwx 1 root root 8 Jun 30 19:59 /usr/bin/gimp -> gimp-2.8

$ file $(which gimp)
/usr/bin/gimp: symbolic link to gimp-2.8

locatememang menemukan semua file yang memiliki pola yang ditentukan di mana saja di jalur mereka. Anda bisa mengatakannya hanya untuk menemukan file dan direktori yang namanya (bukan path lengkap) termasuk pola dengan -bopsi, yang biasanya apa yang Anda inginkan, dan memberikan daftar yang kurang berat.

locatecepat karena menggunakan basis data biner yang diperbarui secara berkala (sekali sehari, oleh cron). Anda dapat memperbarui sendiri untuk memastikan file yang baru ditambahkan ditemukan dengan menjalankansudo updatedb

Satu hal lagi tentang locate- tidak peduli apakah file masih ada atau tidak, jadi untuk menghindari mencari file yang baru dihapus, gunakan -e. Seringkali saya juga pipa lesskarena daftar bisa panjang. Biasanya saya lakukan:

sudo updatedb && locate -b -e gimp | less

Cara kerja dasbor Unity dijelaskan di sini - ia menggunakan Zeitgeist untuk mengindeks file sistem dan belajar dari pola penggunaan, dan memungkinkan aplikasi lain untuk menggunakan data ini, sehingga ia melakukan lebih banyak pekerjaan daripada locate.

Zanna
sumber
dapatkah Anda membandingkan tanda hubung dan menemukan kinerja perintah dan detail implementasi? Pemutakhiran basis data biner harus dilakukan setelah pembuatan file baru dalam sistem, bukankah itu periode yang tidak pasti benar atau dikelola oleh proses sistem?
Chinmaya B
2
@Creator memperbarui database secara otomatis dilakukan oleh cron, sekali per hari. Anda dapat memeriksa kapan Anda menginstal sesuatu yang tidak dapat Anda temukan dengan segera locate. Tanda hubung menggunakan indeks yang sama sekali berbeda - lebih lambat karena melakukan lebih banyak hal (saya mengedit jawaban saya)
Zanna
1
Jadi ringkasnya lokasi berguna dan lebih kuat daripada yang atau dimana tetapi bodoh sedangkan dash lebih kuat dan menerapkan pembelajaran mesin. dan terima kasih untuk sudo updatedbperintah Anda sangat membantu tidak tahu itu meskipun saya menggunakan -e secara teratur.
Chinmaya B
@Creator ya Anda mengucapkannya lebih baik :) senang bahwa itu membantu
Zanna
0

Secara sederhana

$ which samba

perintah mana yang mencari daftar program yang terdaftar melalui pengaturan PATH

$ whereis samba

perintah whereis juga mencari program yang tidak ada dalam pengaturan PATH

$locate samba

Juga menemukan file dengan nama file tetapi tidak mencari struktur direktori itu sendiri tetapi hanya database yang disiapkan oleh updatedb. Karena lokasi itu lebih cepat daripada menemukan tetapi kurang akurat. Contoh:

Nullpointer
sumber