สิ่งที่แตกต่างกัน


112

ความแตกต่างระหว่างwhichและwhereisคืออะไร


ฉันขอโทษ แต่ในระบบ X 10.5.8 OS ของฉันซึ่ง whereis และมักจะให้ผลลัพธ์ที่เหมือนกัน บางทีนี่อาจเป็นคำถามเฉพาะของ OS X เนื่องจากฉันเห็นด้วยคาดว่าจะได้ผลลัพธ์ที่แตกต่าง บางทีที่ซึ่งไม่สอดคล้องกับสิ่งที่ควรทำ อย่างน้อยสองตัวอย่าง (ดูด้านล่าง) ไม่ทำงาน: whereis ls และ whereis php ให้ผลเช่นเดียวกับที่ ... ทุกคนสามารถยืนยันได้หรือไม่ Snow Leopard มีพฤติกรรมเหมือนกันหรือไม่?
Wolf

ใช่ฉันรู้ว่านั่นเป็นเหตุผลที่ฉันถามคำถามนี้
mk12

@ หมาป่านี่เป็นตัวอย่างwhichและwhereisให้ผลผลิตที่แตกต่างกัน (บน macOS Sierra) apple.stackexchange.com/questions/259047/…
แมทธิว

@ mk12 ฉันรู้สึกว่าtypeดีกว่า นอกจากนี้ยังรู้เกี่ยวกับนามแฝงที่กำหนดไว้ฟังก์ชั่น ฯลฯ
phil294

คำตอบ:


121

เรียนรู้เกี่ยวกับwhereisและwhichใช้งาน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

โดยทั่วไปwhereisค้นหาไฟล์ "อาจมีประโยชน์" ในขณะที่whichค้นหาไฟล์ที่เรียกทำงานได้เท่านั้น

whereisผมไม่ค่อยใช้ ในทางกลับกันwhichมีประโยชน์มากโดยเฉพาะในสคริปต์ whichคำตอบสำหรับคำถามต่อไปนี้: คำสั่งนี้มาจากไหน?

$  which ls
/bin/ls

$  whereis ls
ls: /bin/ls /usr/share/man/man1p/ls.1p.bz2 /usr/share/man/man1/ls.1.bz2

34
ไม่รู้อะไรเลยขอบคุณ
mk12

1
BTW ฉันจะลบแท็ก "osx" เนื่องจากคำถามนี้นำไปใช้กับตัวแปร unix ทั้งหมด (รวมถึง Linux, BSD, Mac OS X, ... )
Denilson Sá Maia

เปลี่ยนเป็นยูนิกซ์
mk12

1
มีมากกว่านั้น บนระบบของฉันที่ซึ่งและที่ใดจะส่งคืนพา ธ ปฏิบัติการที่แตกต่างกัน ฉันเท่านั้นที่สามารถได้รับเส้นทางไปยังหนึ่งที่จริงทำงานกับไม่หนึ่งสำหรับwhereis which
Jordan Reiter

1
@ JordanReiter: มันเป็นไปไม่ได้! whichแสดงเส้นทางที่แท้จริง คุณแน่ใจหรือไม่ว่าเส้นทางที่ชี้ไปwhichไม่ใช่แค่ symlink ไปยังเส้นทางที่ชี้ไปwhereis? อาจเป็นชื่อแทนเชลล์ type your_cmd_hereในทุบตีลองใช้
Denilson Sá Maia

23

whereis ค้นหาตำแหน่งมาตรฐาน * nix สำหรับคำสั่งที่ระบุ

whichค้นหา PATH เฉพาะผู้ใช้ของคุณ (ซึ่งอาจรวมถึงสถานที่บางแห่งที่มีการค้นหาและอาจไม่รวมถึงสถานที่อื่น ๆ ซึ่งอาจรวมถึงบางสถานที่ที่whereisไม่ได้ค้นหาถ้าคุณเพิ่มใน PATH ของคุณ)


* ระวังคืออะไร?
mk12

2
Unix, Linux และอื่น ๆ (Mac OS X ที่เป็นของ ฯลฯ )

8
Ohhh ฮ่าฮ่าฉันคิดเสมอว่ากองล้นถูกตัดทอน U ในยูนิกซ์เมื่อใดก็ตามที่ผมเห็นว่าด้วยเหตุผลบางอย่าง ..
MK12

Nope การใช้สัญลักษณ์แทนความคิดสร้างสรรค์ที่ค่อนข้างธรรมดาใช้เพื่ออ้างถึงตระกูลของระบบปฏิบัติการที่คล้ายคลึงกัน ;)

6

อ้างถึงหน้าคนของพวกเขา:

โดยที่ :

whereis หาตำแหน่งส่วนต้นทาง / ไบนารีและคู่มือสำหรับไฟล์ที่ระบุ

ตัวอย่างเช่น

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

เช่นไฟล์ปฏิบัติการ "php" และอื่น ๆ (เช่น man pages)


และที่ :

ซึ่งส่งคืนชื่อพา ธ ของไฟล์ที่จะถูกดำเนินการในสภาพแวดล้อมปัจจุบัน

ตัวอย่างเช่น

$ which php
/usr/bin/php

นั่นคือมีเพียงปฏิบัติการ "php"


1

ซึ่งค้นหาไฟล์เรียกทำงานในไดเร็กทอรีที่ระบุโดยตัวแปรสภาวะแวดล้อม PATH และหากค้นพบชื่อพา ธ แบบเต็มของไฟล์เรียกทำงานนี้จะถูกพิมพ์

$ ซึ่ง ls
/ bin / ls
$ ซึ่ง ifconfig
$ # ไม่มีเอาต์พุตเนื่องจาก ifconfig มีอยู่ใน PATH ของรูทเท่านั้น

whereisค้นหา executables แฟ้มแหล่งที่มาและหน้าคู่มือการใช้ฐานข้อมูลที่สร้างขึ้นโดยระบบอัตโนมัติ

$ whereis น้อย
กว่า: / bin / less / usr / bin / less / usr / bin / X11 / less /usr/share/man/man1man1/less.1.gz

แต่ดูเหมือนว่าwhereisและหาไม่ได้ใช้ฐานข้อมูลเดียวกัน เมื่อติดตั้งซอฟต์แวร์และจากนั้นก็ใช้whereisและหาทันทีเพื่อค้นหาซอฟต์แวร์นี้ ผลที่ได้คือwhereisสามารถหาไฟล์ที่เกี่ยวข้องกับซอฟแวร์ในขณะนี้หาได้ไม่ พวกเขาใช้ฐานข้อมูลที่แตกต่างกันจริงๆหรือ ฐานข้อมูลทำงานอย่างไร - ดี, วิธีการปฏิเสธที่จะเป็นคนอวดรู้? :)


คุณเรียกใช้คำสั่ง updatedb หรือไม่ ค้นหาที่พึ่งเท่าที่ฉันจำได้
Oliver M Grech
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.