ความแตกต่างระหว่างค้นหา / ที่ไหน / ซึ่ง


13

ความแตกต่างพื้นฐานระหว่างlocate whereisและwhichคำสั่งคืออะไร

ความแตกต่างพื้นฐานที่ฉันสังเกตคือlocateตำแหน่งของชื่อไฟล์ที่เกี่ยวข้องทั้งหมดในระบบไฟล์ทั้งหมดในขณะที่whereisและwhichคำสั่งจะให้ตำแหน่ง (ระบบ / ที่อยู่ของไฟล์) ของแอปพลิเคชันที่ติดตั้งเท่านั้น การสังเกตของฉันแม่นยำแค่ไหน

คำสั่งเหล่านี้มีการนำไปใช้อย่างไรภายใน เหตุใดจึงlocateทำงานได้เร็วเมื่อเปรียบเทียบกับการค้นหาเส้นประในขณะที่locateต้องค้นหาชื่อไฟล์ที่ตรงกับสตริงเป้าหมายในลำดับชั้นของระบบไฟล์ทั้งหมด


2
แล้วมันเกี่ยวกับtypeอะไร? : P
jamesmstone

@jamesmstone คุณหมายถึงอะไรtypeกรุณาอธิบายอย่างละเอียด
Chinmaya B

2
ขออภัยฉันเพิ่งพยายามเพิ่มคำถามของคุณ typeเป็นอีกคำสั่งที่ดูเหมือน (ต่อตาฉัน) ทำสิ่งที่คล้ายกับคำที่คุณพูดถึง
jamesmstone

@ jamesmstone ฉันไม่คิดว่าจะมีคำสั่งประเภทใดที่ทำงานในระบบของฉัน ฉันไม่พบหน้าข้อมูลหรือคู่มือใด ๆ สำหรับtypeคำสั่ง ฉันพยายามและman type info type
Chinmaya B

อืมฉันสงสัยว่าทำไม ... คุณใช้ทุบตีหรือเปล่า
jamesmstone

คำตอบ:


17

whichค้นหาไบนารีที่ปฏิบัติการได้ของโปรแกรม (หากอยู่ใน PATH ของคุณ) man whichอธิบายให้ชัดเจนยิ่งขึ้น:

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

whereisค้นหาไบนารีไฟล์ซอร์สและไฟล์ man page สำหรับโปรแกรม ตัวอย่างเช่น

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

คุณสามารถรับรายละเอียดเพิ่มเติมได้โดยส่งผ่านคำสั่งเหล่านี้เป็นอาร์กิวเมนต์ไปที่ls -lหรือfile

$ 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

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

locateรวดเร็วเพราะใช้ฐานข้อมูลไบนารีที่ได้รับการอัปเดตเป็นระยะ ๆ (วันละครั้งโดยcron) คุณสามารถอัปเดตได้ด้วยตัวเองเพื่อให้แน่ใจว่าจะพบไฟล์ที่เพิ่มล่าสุดโดยการเรียกใช้sudo updatedb

สิ่งหนึ่งที่เพิ่มเติมเกี่ยวกับlocate- มันไม่สนใจว่าไฟล์ที่ยังคงมีอยู่หรือไม่ดังนั้นเพื่อหลีกเลี่ยงการหาไฟล์ที่ถูกลบเมื่อเร็ว ๆ -eนี้การใช้งาน บ่อยครั้งที่ฉันไปป์ด้วยlessเนื่องจากรายการอาจมีความยาว โดยทั่วไปแล้วฉัน:

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

วิธีเอกภาพของงานประจะมีการอธิบายที่นี่ - มันใช้Zeitgeistระบบไฟล์ดัชนีและเรียนรู้จากรูปแบบการใช้และช่วยให้การใช้งานอื่น ๆ locateที่จะทำให้การใช้งานของข้อมูลนี้จึงเป็นสิ่งที่ทำผลงานมากขึ้นกว่า


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

2
@Creator การอัพเดตฐานข้อมูลโดยอัตโนมัติจะดำเนินการโดย cron วันละครั้ง locateคุณสามารถตรวจสอบเมื่อคุณติดตั้งสิ่งที่คุณไม่สามารถหาไฟล์ได้ทันทีด้วย เส้นประใช้ดัชนีที่แตกต่างอย่างสิ้นเชิง - ช้าลงเพราะมันทำสิ่งต่าง ๆ ได้มากขึ้น (ฉันแก้ไขคำตอบของฉัน)
Zanna

1
ดังนั้นการหาที่ตั้งจึงมีประโยชน์และมีประสิทธิภาพมากกว่าที่ใดหรือที่ไหน แต่เป็นใบ้ในขณะที่เส้นประมีประสิทธิภาพมากขึ้นและใช้การเรียนรู้ของเครื่อง และขอบคุณสำหรับsudo updatedbคำสั่งของคุณมีประโยชน์มากไม่ทราบว่าแม้ว่าฉันใช้ -e เป็นประจำ
Chinmaya B

@Creator ครับคุณเรียบเรียงได้ดี :) มีความสุขที่จะช่วย
Zanna

0

ง่ายดาย

$ which samba

คำสั่งที่ค้นหารายการโปรแกรมที่แสดงรายการลงในการตั้งค่า PATH

$ whereis samba

คำสั่ง whereis ยังค้นหาโปรแกรมที่ไม่มีอยู่ในการตั้งค่า PATH

$locate samba

ค้นหาไฟล์ด้วยชื่อไฟล์ แต่ไม่ค้นหาโครงสร้างไดเรกทอรีด้วยตัวเอง แต่มีเฉพาะฐานข้อมูลที่จัดทำโดย updatedb เนื่องจากการค้นหานั้นเร็วกว่าการค้นหา แต่แม่นยำน้อยกว่า ตัวอย่าง:

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