ความแตกต่างระหว่างค้นหาและใน Linux


27

อะไรคือความแตกต่างระหว่างlocateและwhichใน Linux?

ทำไมเมื่อฉันใช้locate mentorมันจะแสดงรายการผู้ให้คำปรึกษาทั้งหมด แต่เมื่อฉันใช้which mentorมันบอกว่า "ไม่มีผู้ให้คำปรึกษาใน ... " - สิ่งนี้หมายความว่าอย่างไร


เห็นนี้เกี่ยวข้องunix.stackexchange.com/a/60208/84427
pun

นอกจากนี้ยังมีและwhere whereis
Jan Tojnar

ในทุบตีต้องการ: type -all acommand. และถ้าฉันอ่าน XYProblem ด้านหลังคำถามของคุณ: คุณมีคำสั่งคุณสามารถดูได้ผ่านการค้นหา แต่ไม่สามารถดำเนินการได้ จากนั้นแก้ไข PATH ไม่ว่าจะเป็น~/.profileไฟล์ของผู้ใช้ของคุณหรือถ้าคุณมั่นใจว่าคุณรู้ว่าต้องทำอะไรใน/etc/profileไฟล์โกลบอล[คำเตือน: คุณอาจทำลายสคริปต์ของระบบ (และอาจจะเป็นระบบปฏิบัติการจำนวนมาก) $ PATH ของ / etc / profile ... (เช่น: พา ธ ที่มีคำสั่งมักจะพบได้ทุกที่) ต้องการเพิ่มที่ส่วนท้ายของตัวแปรเท่านั้น และโปรดอย่าใส่::หรือ. ที่ใดก็ได้ในเส้นทางนั้น
Olivier Dulac

มีความเป็นไปได้ที่ซ้ำกันของ'ค้นหา' และ 'ค้นหา' ใน Linux คืออะไร?
Abraxas

คำตอบ:


45

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

locate ใช้ฐานข้อมูลที่สร้างขึ้นก่อนหน้านี้เพื่อค้นหาไฟล์

locateอ่านหนึ่งหรือมากกว่าหนึ่งฐานข้อมูลที่จัดทำโดยupdatedb(8) และเขียนชื่อไฟล์ที่ตรงกันอย่างน้อยหนึ่งในรูปแบบไปยังเอาต์พุตมาตรฐานหนึ่งต่อบรรทัด

แหล่งค้นหา (1) - หน้าลินุกซ์

updatedbสร้างหรืออัพเดทฐานข้อมูลที่ใช้โดยlocate(1) หากฐานข้อมูลมีอยู่แล้วข้อมูลจะถูกนำมาใช้ซ้ำเพื่อหลีกเลี่ยงการอ่านซ้ำไดเร็กทอรีที่ไม่เปลี่ยนแปลง

updatedbมักจะทำงานทุกวันโดยcron(8) เพื่ออัปเดตฐานข้อมูลเริ่มต้น ( /var/lib/mlocate/mlocate.db)

Source updatedb (8) - หน้า man Linux


whichค้นหาไฟล์เรียกทำงานได้โดยค้นหาไฟล์ในไดเรกทอรีในPATHตัวแปรสภาพแวดล้อม

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

ใช้อัลกอริทึมเดียวกันกับbash(1)

แหล่งที่มา(1) - หน้าลินุกซ์


locate mentorแสดงที่ปรึกษา แต่which mentorบอกว่า "ไม่มีที่ปรึกษาใน ... "

นั่นหมายความว่าอย่างไร?

คุณมีไฟล์บางชื่อmentorที่สามารถพบได้ในlocateฐานข้อมูล

คุณไม่มีไฟล์ปฏิบัติการหรือชื่อสคริปต์mentorในPATHในของคุณ


2
"updatedb" - รู้ดีว่าไม่ใช่แค่ Microsoft เท่านั้นที่มีชื่อที่ไม่เฉพาะเจาะจงสำหรับสิ่งต่าง ๆ (ใน Win32 ให้DeleteObjectลบวัตถุ GDI CloseHandleปิดหมายเลขอ้างอิงเคอร์เนลและอื่น ๆ ในทำนองเดียวกันupdatedbปรับปรุงlocateDB)
user253751

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

11

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

locateคือการค้นหาไฟล์ตามชื่อ ( locateอ่านฐานข้อมูลupdatedbอย่างน้อยหนึ่งรายการที่จัดทำและเขียนชื่อไฟล์ที่ตรงกับรูปแบบอย่างน้อยหนึ่งรูปแบบไปยังเอาต์พุตแบบสแตนด์อโลนหนึ่งรายการต่อบรรทัด)


2
โปรดระบุที่มาสำหรับแหล่งที่มาของคุณ - คำอธิบายในคำตอบของคุณจะถูกนำมาจากหน้าคู่มือสำหรับค่าสาธารณูปโภคเหล่านั้นโดยตรง
Reinstate Monica iamnotmaynard

5

locate ใช้รูปแบบ glob โดยค่าเริ่มต้น (สามารถใช้รูปแบบ Regex ด้วย) และค้นหาฐานข้อมูล /var/lib/mlocate/mlocate.dbสำหรับชื่อไฟล์ใด ๆ ที่ตรงกับรูปแบบ

whichเป็นคำสั่งเพื่อค้นหาเส้นทางแบบเต็มของคำสั่งในไดเรกทอรีที่ตีความโดยPATHตัวแปรสภาพแวดล้อม

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