yang mana perbedaannya

112

Apa perbedaan antara whichdan whereis?

mk12
sumber
Saya minta maaf tetapi pada sistem OS X 10.5.8 saya yang dan di mana selalu memberikan hasil yang sama. Mungkin ini adalah pertanyaan yang sangat spesifik OS X, karena saya setuju, hasil yang berbeda diharapkan. Mungkin whereis tidak mematuhi apa yang seharusnya dilakukan. Setidaknya dua contoh (lihat di bawah) tidak berfungsi: whereis ls dan whereis php selalu memberikan hasil yang sama seperti yang ... Adakah yang bisa mengkonfirmasi ini? Apakah Snow Leopard berperilaku sama?
Wolf
Ya saya tahu, itu sebabnya saya menanyakan pertanyaan ini.
mk12
@ Wolf di sini adalah contoh dari whichdan whereismemberikan keluaran yang berbeda (pada macOS Sierra) apple.stackexchange.com/questions/259047/…
Matthew
@ MK12 Saya merasa typelebih unggul. Ia juga tahu tentang alias yang didefinisikan, fungsi dll
phil294

Jawaban:

121

Bagaimana dengan mempelajari whereisdan whichmenggunakan whatis?

$  whatis which
which                (1)  - shows the full path of (shell) commands

$  whatis whereis
whereis              (1)  - locate the binary, source, and manual page files for a command

Pada dasarnya, whereismencari file "mungkin berguna", sementara whichhanya mencari file executable.

Saya jarang menggunakan whereis. Di sisi lain, whichsangat berguna, khususnya dalam skrip. whichadalah jawaban untuk pertanyaan berikut: Dari mana datangnya perintah ini?

$  which ls
/bin/ls

$  whereis ls
ls: /bin/ls /usr/share/man/man1p/ls.1p.bz2 /usr/share/man/man1/ls.1.bz2
Denilson Sa Maia
sumber
34
tidak tahu tentang whatis, terima kasih.
mk12
1
BTW, saya akan menghapus tag "osx", karena pertanyaan ini berlaku untuk semua varian unix (termasuk Linux, BSD, Mac OS X, ...)
Denilson Sá Maia
diubah menjadi unix
mk12
1
Ada lebih dari itu. Di sistem saya, di mana dan yang mengembalikan jalur yang dapat dieksekusi berbeda. Saya hanya bisa mendapatkan jalur ke yang benar-benar berjalan dengan whereis, bukan untuk which.
Jordan Reiter
1
@JordanReiter: Tidak mungkin! whichmenunjukkan jalan yang sebenarnya. Apakah Anda yakin jalur yang ditunjukkan whichbukan hanya symlink ke jalur yang ditunjukkan whereis? Mungkin itu adalah shell alias. Dalam bash, coba jalankan type your_cmd_here.
Denilson Sá Maia
23

whereis mencari lokasi * nix standar untuk perintah yang ditentukan.

whichmencari PATH khusus pengguna Anda (yang mungkin menyertakan beberapa lokasi tempat pencarian, dan mungkin tidak menyertakan yang lain - ini mungkin juga mencakup beberapa tempat yang whereistidak mencari jika Anda menambahkan ke PATH Anda)

Amber
sumber
Apa itu * nix?
mk12
2
Unix, Linux dll. (Mac OS X termasuk dalam dll)
8
Ohhh, haha, saya selalu berpikir bahwa stack overflow itu menyensor U di unix setiap kali aku melihat bahwa untuk beberapa alasan ..
Mk12
Nggak. Hanya konvensi penggunaan wildcard kreatif yang cukup umum untuk merujuk pada keluarga sistem operasi serupa. ;)
6

Mengutip halaman manual mereka:

dimana :

whereis menempatkan bagian sumber / biner dan manual untuk file yang ditentukan.

Misalnya :

$ whereis php
php: /usr/bin/php /usr/share/php /usr/share/man/man1/php.1.gz

yaitu, "php" dieksekusi, dan beberapa hal lainnya (seperti halaman manual).


dan yang :

yang mengembalikan nama path file yang akan dieksekusi di lingkungan saat ini

Misalnya :

$ which php
/usr/bin/php

yaitu, hanya "php" yang dapat dieksekusi.

Pascal MARTIN
sumber
1

yang mencari executable di direktori yang ditentukan oleh PATH variabel lingkungan. Dan jika ditemukan, pathname lengkap dari executable ini akan dicetak.

$ yang ls
/ bin / ls
$ yang ifconfig
$ # Tidak ada output, karena ifconfig hanya ada di PATH root.

di mana mencari file executable, source, dan halaman manual menggunakan database yang dibangun oleh sistem secara otomatis.

$ whereis lebih
sedikit: / bin / less / usr / bin / less / usr / bin / X11 / less / usr/share/man/man1/less.1.gz

Tetapi tampaknya dimana dan lokasi tidak menggunakan database yang sama. Ketika saya menginstal perangkat lunak dan kemudian digunakan di mana dan cari segera untuk mencari perangkat lunak ini. Hasilnya adalah bahwa di mana bisa menemukan beberapa file yang terkait dengan perangkat lunak ini sementara mencari tidak bisa. Apakah mereka benar-benar menggunakan basis data yang berbeda? Bagaimana cara kerja basis data? --Nah, bagaimana kalau menolak menjadi pedant? :)

pengguna192505
sumber
apakah Anda menjalankan perintah updatedb? Lokasi bergantung pada itu sejauh yang saya ingat
Oliver M Grech