เท่าที่ฉันชอบ Oli (ซึ่งเป็นจำนวนมาก!) ฉันไม่เห็นด้วยกับเขาในfind
คำสั่ง ฉันไม่ชอบมัน
find
คำสั่งใช้เวลาสามนาที
ยกตัวอย่างคำสั่งง่ายๆนี้:
$ time find / -type f -name "mail-transport-agent.target"
find: ‘/lost+found’: Permission denied
find: ‘/etc/ssmtp’: Permission denied
find: ‘/etc/ssl/private’: Permission denied
(... SNIP ...)
find: ‘/run/user/997’: Permission denied
find: ‘/run/sudo’: Permission denied
find: ‘/run/systemd/inaccessible’: Permission denied
real 3m40.589s
user 0m4.156s
sys 0m8.874s
มันต้องใช้เวลากว่าสามนาทีสำหรับการค้นหาทุกอย่างเริ่มต้นจากfind
/
โดยค่าเริ่มต้นรีมของข้อความแสดงข้อผิดพลาดปรากฏขึ้นและคุณต้องค้นหาผ่านพวกเขาเพื่อค้นหาสิ่งที่คุณกำลังมองหา ยังดีกว่าgrep
การค้นหาทั้งไดรฟ์สำหรับสตริงที่ใช้เวลา53 ชั่วโมง : `grep`ing ไฟล์ทั้งหมดสำหรับสตริงใช้เวลานาน
ฉันรู้ว่าฉันสามารถเล่นกับพารามิเตอร์ของคำสั่ง find เพื่อให้ทำงานได้ดีขึ้น แต่ประเด็นที่นี่คือระยะเวลาที่ใช้ในการรัน
locate
คำสั่งใช้เวลาน้อยกว่าหนึ่งวินาที
ตอนนี้มาใช้locate
:
$ time locate mail-transport-agent.target
/lib/systemd/system/mail-transport-agent.target
real 0m0.816s
user 0m0.792s
sys 0m0.024s
ค้นหาคำสั่งใช้เวลาน้อยกว่าสอง!
updatedb
เริ่มต้นวันละครั้งเท่านั้น
เป็นจริงupdatedb
คำสั่งที่อัพเดตฐานข้อมูลค้นหาจะรันเพียงวันละครั้งโดยค่าเริ่มต้น คุณสามารถรันด้วยตนเองก่อนค้นหาไฟล์ที่เพิ่มโดยใช้:
$ time sudo updatedb
real 0m3.460s
user 0m0.503s
sys 0m1.167s
แม้ว่าจะใช้เวลา 3 วินาที แต่ก็เล็กเมื่อเทียบกับfind
3+ นาทีของคำสั่ง
ฉันได้อัปเดตsudo crontab -e
เพื่อรวมบรรทัดที่ด้านล่าง:
# m h dom mon dow command
0 0 1 * * /bin/journalctl --vacuum-size=200M
*/5 * * * * /usr/bin/updatedb
ตอนนี้ทุก ๆ ห้านาทีupdatedb
จะรันและlocate
ฐานข้อมูลคำสั่งเกือบจะเป็นข้อมูลล่าสุดเสมอ
แต่ไม่มีคุณสมบัติหรือไม่
คุณสามารถไพพ์locate
เอาต์พุตไปยังคำสั่งอื่น ตัวอย่างเช่นหากคุณต้องการคุณลักษณะของไฟล์คุณสามารถใช้:
$ locate mail-transport-agent.target | xargs stat
File: '/lib/systemd/system/mail-transport-agent.target'
Size: 473 Blocks: 8 IO Block: 4096 regular file
Device: 10305h/66309d Inode: 667460 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-03-31 18:11:55.091173104 -0600
Modify: 2017-10-27 04:11:45.000000000 -0600
Change: 2017-10-28 07:18:24.860065653 -0600
Birth: -
สรุป
locate
ผมโพสต์คำตอบนี้จะแสดงความเร็วและความสะดวกในการใช้งานของ ฉันพยายามพูดสั้น ๆ เกี่ยวกับคำสั่งของคนอื่นที่ชี้ให้เห็น
find
คำสั่งต้องมีการสำรวจโครงสร้างไดเรกทอรีทั้งหมดเพื่อหาไฟล์ locate
คำสั่งมีฐานข้อมูลเป็นของตัวเองซึ่งจะทำให้มันฟ้าผ่าความเร็วในการเปรียบเทียบ