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 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
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)
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? :)
which
danwhereis
memberikan keluaran yang berbeda (pada macOS Sierra) apple.stackexchange.com/questions/259047/…type
lebih unggul. Ia juga tahu tentang alias yang didefinisikan, fungsi dllJawaban:
Bagaimana dengan mempelajari
whereis
danwhich
menggunakanwhatis
?Pada dasarnya,
whereis
mencari file "mungkin berguna", sementarawhich
hanya mencari file executable.Saya jarang menggunakan
whereis
. Di sisi lain,which
sangat berguna, khususnya dalam skrip.which
adalah jawaban untuk pertanyaan berikut: Dari mana datangnya perintah ini?sumber
whereis
, bukan untukwhich
.which
menunjukkan jalan yang sebenarnya. Apakah Anda yakin jalur yang ditunjukkanwhich
bukan hanya symlink ke jalur yang ditunjukkanwhereis
? Mungkin itu adalah shell alias. Dalam bash, coba jalankantype your_cmd_here
.whereis
mencari lokasi * nix standar untuk perintah yang ditentukan.which
mencari PATH khusus pengguna Anda (yang mungkin menyertakan beberapa lokasi tempat pencarian, dan mungkin tidak menyertakan yang lain - ini mungkin juga mencakup beberapa tempat yangwhereis
tidak mencari jika Anda menambahkan ke PATH Anda)sumber
Mengutip halaman manual mereka:
dimana :
Misalnya :
yaitu, "php" dieksekusi, dan beberapa hal lainnya (seperti halaman manual).
dan yang :
Misalnya :
yaitu, hanya "php" yang dapat dieksekusi.
sumber
yang mencari executable di direktori yang ditentukan oleh PATH variabel lingkungan. Dan jika ditemukan, pathname lengkap dari executable ini akan dicetak.
di mana mencari file executable, source, dan halaman manual menggunakan database yang dibangun oleh sistem secara otomatis.
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? :)
sumber