Perbedaan antara temukan dan yang di Linux

27

Apa perbedaan antara locatedan whichdi Linux?

Mengapa ketika saya menggunakannya locate mentortidak mencantumkan semua mentor tetapi ketika saya menggunakannya which mentormengatakan "tidak ada mentor di ..." - apa artinya ini?

Naddy
sumber
Ada juga wheredan whereis.
Jan Tojnar
di bash, lebih memilih: type -all acommand. Dan Jika saya membaca XYProblem di belakang pertanyaan Anda: Anda memiliki perintah, Anda dapat melihatnya melalui loc, tetapi tidak dapat menjalankannya? kemudian edit PATH, baik dalam ~/.profilefile pengguna spesifik Anda , atau jika Anda yakin Anda tahu apa yang harus dilakukan, dalam /etc/profilefile global [PERINGATAN: Anda dapat memecahkan skrip sistem (dan mungkin banyak OS) jika Anda menambahkan jalur yang salah di $ PATH dari / etc / profile ... (mis: path yang berisi perintah biasanya ditemukan di tempat lain). Lebih suka menambahkan pada akhir variabel. Dan tolong jangan menaruh ::atau . di mana pun di PATH itu.
Olivier Dulac

Jawaban:

45

Apa perbedaan antara locatedan which?

locate menggunakan database yang dibangun sebelumnya untuk mencari file.

locatemembaca satu atau lebih database yang disiapkan oleh updatedb(8) dan menulis nama file yang cocok dengan setidaknya satu POLA dengan output standar, satu per baris.

Sumber cari (1) - Halaman manual Linux

updatedbmembuat atau memperbarui database yang digunakan oleh locate(1). Jika database sudah ada, datanya digunakan kembali untuk menghindari membaca ulang direktori yang tidak berubah.

updatedbbiasanya dijalankan setiap hari oleh cron(8) untuk memperbarui database default ( /var/lib/mlocate/mlocate.db)

Source updatedb (8) - Halaman manual Linux


whichmencari file yang dapat dieksekusi dengan mencarinya di direktori dalam PATHvariabel lingkungan.

whichmembutuhkan satu atau lebih argumen. Untuk setiap argumennya, ia mencetak ke stdoutjalur penuh dari executable yang akan dieksekusi ketika argumen ini telah dimasukkan pada prompt shell. Itu melakukan ini dengan mencari skrip yang dapat dieksekusi atau di direktori yang tercantum dalam variabel lingkungan PATH.

menggunakan algoritma yang sama seperti bash(1).

Sumber yang (1) - Halaman manual Linux


locate mentordaftar mentor, tetapi which mentormengatakan "tidak ada mentor di ..."

Apa artinya?

Anda memiliki beberapa file bernama mentoryang dapat ditemukan di locatedatabase.

Anda tidak memiliki nama file atau skrip yang dapat dieksekusi mentordi PATH.

DavidPostill
sumber
2
"updatedb" - senang mengetahui bahwa bukan hanya Microsoft yang memberikan nama yang tidak terlalu spesifik untuk banyak hal. (Di Win32, DeleteObjectmenghapus objek GDI, CloseHandlemenutup pegangan kernel, dll. Demikian pula updatedbmemperbarui locateDB)
user253751
"Yang" juga secara khusus berguna jika Anda mungkin memiliki beberapa versi dari program yang sama menendang di berbagai tempat di jalur Anda, jadi itu memberitahu Anda mana yang sebenarnya dieksekusi ketika Anda menjalankan perintah. Ini telah membantu saya sebelum mendiagnosis perilaku yang tidak diharapkan - misalnya, itu membantu saya menyadari bahwa saya telah meninggalkan versi utilitas yang diinstal secara manual pada sistem saya sehingga menggantikan versi yang diinstal oleh manajer paket.
Carcer
11

whichadalah untuk menemukan perintah ( whichmengembalikan nama jalur file / tautan yang akan dieksekusi di lingkungan saat ini)

locateadalah untuk menemukan file dengan nama ( locatemembaca satu atau lebih basis data yang disiapkan oleh updatedbdan menulis nama file yang cocok dengan setidaknya satu dari pola untuk output yang dikerjakan, satu per baris)

manjesh23
sumber
2
Berikan atribusi untuk sumber Anda - uraian dalam jawaban Anda diambil langsung dari halaman manual untuk utilitas tersebut.
Pasang kembali Monica iamnotmaynard
5

locatemengambil pola glob secara default (pola Regex dapat digunakan juga) dan mencari database /var/lib/mlocate/mlocate.dbuntuk nama file yang cocok dengan pola tersebut.

whichadalah perintah untuk mencari path lengkap dari suatu perintah dalam direktori yang ditafsirkan oleh PATHvariabel lingkungan.

heemayl
sumber