찾기보다 업데이트 속도가 얼마나 빠릅니까?


11

updatedb보다 얼마나 빠릅 find니까?

다음은 비슷한 작업을 수행 updatedb하는 find명령 과 시간을 비교 한 것입니다.

compare.sh

#!/usr/bin/env bash

cmd="sudo updatedb"
echo $cmd
time eval $cmd

cmd="sudo find / \
    -fstype ext4 \
    -not \( \
        -path '/afs/*' -o \
        -path '/net/*' -o \
        -path '/sfs/*' -o \
        -path '/tmp/*' -o \
        -path '/udev/*' -o \
        -path '/var/cache/*' -o \
        -path '/var/lib/pacman/local/*' -o \
        -path '/var/lock/*' -o \
        -path '/var/run/*' -o \
        -path '/var/spool/*' -o \
        -path '/var/tmp/*' -o \
        -path '/proc/*' \
    \) &>/dev/null"

echo $cmd
time eval $cmd

내 /etc/updatedb.conf :

PRUNE_BIND_MOUNTS = "yes"
PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset cramfs debugfs devpts devtmpfs ecryptfs exofs ftpfs fuse fuse.encfs fuse.sshfs fusectl gfs gfs2 hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs shfs smbfs sockfs sshfs sysfs tmpfs ubifs udf usbfs vboxsf"
PRUNENAMES = ".git .hg .svn"
PRUNEPATHS = "/afs /net /sfs /tmp /udev /var/cache /var/lib/pacman/local /var/lock /var/run /var/spool /var/tmp"

find 명령의 경우 ext4파일 시스템 만 지정 했기 때문에 파일 시스템을 지정했습니다 updatedb. 파일 확장명을 신경 쓰지 않았으며 바인드 마운트를 제외하는 방법을 find모르지만 아무것도 없습니다. 또한 updatedb무시 되는 것처럼 보이는 '/ proc'에 대한 제외를 추가했습니다 . '/ sys'도 무시 했어야합니다.

차이점이 있다면 find 명령이 규칙이 조금 더 간단하고 디스크에 쓸 필요가 없기 때문에 find 명령이 조금 더 빠를 것으로 예상됩니다. 대신 updatedb훨씬 빠릅니다.

$ ./compare.sh
sudo updatedb

real    0m0.876s
user    0m0.443s
sys 0m0.273s

sudo find / -fstype ext4 -not \( -path '/afs/*' -o -path '/net/*' -o -path '/sfs/*' -o -path '/tmp/*' -o -path '/udev/*' -o -path '/var/cache/*' -o -path '/var/lib/pacman/local/*' -o -path '/var/lock/*' -o -path '/var/run/*' -o -path '/var/spool/*' -o -path '/var/tmp/*' -o -path '/proc/*' \) &>/dev/null

real    6m23.499s
user    0m14.527s
sys 0m10.993s

그들은 다르게 무엇을하고 있습니까?


set -x명령이 실행되기 전에 인쇄를 켜는 데 사용 되므로 eval shenanigan이 필요하지 않습니다.
Peter Cordes

답변:


15

updatedb"데이터베이스가 이미 존재하는 경우 변경되지 않은 디렉토리를 다시 읽지 않도록 데이터가 재사용됩니다" 맨 페이지를 참조하십시오 .

반면 find명령 변경 여부와 상관없이 모든 디렉토리를 통과.


1
그러한 것을 확인하는 방법 : stackoverflow.com/questions/3620684/…
Praxeolitic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.