내가 Oli를 좋아하는만큼 (많습니다!) 나는 그 find
명령 에 대해 그와 동의하지 않습니다 . 나는 그것을 좋아하지 않는다.
find
명령이 3 분 이상 걸립니다
이 간단한 명령을 예로 들어 보겠습니다.
$ 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 '하는 데 시간이 오래 걸립니다
find 명령의 매개 변수를 사용하여 더 잘 작동하도록 할 수 있지만 여기서 중요한 점은 실행하는 데 걸리는 시간입니다.
locate
명령은 1 초도 걸리지 않습니다
이제 사용하자 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
이제 5 분마다 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
명령에는 자체 데이터베이스가있어 비교 속도가 뛰어납니다.