답변1
locate(1)
이에 비해 단 하나의 큰 장점이 있습니다 find(1)
. 바로 속도입니다.
find(1)
그러나많은이점 locate(1)
:
find(1)
원본이고,AT&T Unix의 첫 번째 버전으로 돌아가기. 임베디드 리눅스의 간단한 버전에서도 찾을 수 있습니다.by 비지박스. 이것은 거의 보편적입니다.locate(1)
그것보다 훨씬 어리다find(1)
. 최초의 조상은locate(1)
1983년까지 나타나지 않았다locate
, 1994년에 채택되기 전까지 는 널리 사용되지 않았습니다.GNU findutils를 입력하세요그리고4.4BSD 진입.locate(1)
도비표준이므로 기본적으로 모든 곳에 설치되지는 않습니다. 일부 POSIX 유형 운영 체제에서는 이를 옵션으로 제공하지도 않으며, 사용 가능한 경우 반드시 사용해야 하는 최소 기능 집합을 지정하는 독립적인 표준이 없기 때문에 구현 시 원하는 기능이 부족할 수 있습니다.하나 있다사실은표준, 예BSD
locate(1)
, 그러나 이는 다른 두 가지 기본 스타일이locate
모든 옵션(-0
,-c
,-d
,-i
,-l
,-m
및-s
) 을 구현하기 때문입니다-S
.mlocate
BSD에 없는 6개의 추가 옵션을 구현했습니다 :locate
,-b
,-e
,-P
및-q
BSD 에 없는 구현--regex
-w
암소 비슷한 일종의 영양locate
이 6가지와 다른 것을 구현하세요.4개:-A
,-D
,-E
, 그리고-p
. (-?
vs-h
vs 와 같은 별칭과 뉘앙스는 무시합니다--help
.)BSDMac OS X은 BSD를 제공합니다
locate
.대부분의 Linux는 GNU를 제공
locate
하지만 Red Hat Linux 및 Arch는mlocate
대안을 제공합니다. 데비안은 기본 설치에 두 버전을 모두 설치하지 않지만 기본 패키지 저장소에 두 버전을 모두 설치하는 경우locate
""를 실행합니다mlocate
.Oracle이
mlocate
Solaris에서 출시되었습니다.11.2부터, 2014년 12월 출시. 이전에는locate
Solaris에 기본적으로 설치되지 않았습니다. (아마도 이는 다음과 관련된 Solaris 명령의 수를 줄이기 위해 수행되었습니다.오라클리눅스,지금 바로Red Hat Enterprise Linux 기반, 도 사용됩니다mlocate
. )IBM AIX아직 버전이 출시되지 않았는데요
locate
,최소한 AIX 7.2부터 시작,findutils
GNU를 설치 하지 않은 경우Linux 애플리케이션용 AIX 도구 상자.HP-UX반품나타나다기본 시스템이 부족합니다
locate
.장로"진짜" 유닉스구현은 일반적으로 포함되지 않습니다
locate
.find(1)
강력한 표현 구문과 많은 기능을 가지고 있습니다.부울 연산자, 등.find(1)
이름으로 파일을 선택하는 것만이 가능한 것은 아닙니다. 다음을 통해 선택할 수 있습니다.- 나이
- 크기
- 소유자
- 파일 유형
- 타임스탬프
- 권한
- 하위 트리 내의 깊이...
이름으로 파일을 찾을 때 다음을 사용하여 검색할 수 있습니다.파일 글로빙 구문모든 버전
find(1)
이나 GNU 또는 BSD 버전에서는 다음을 사용합니다.일반적인 표현.현재 버전은
locate(1)
glob 패턴도 허용find
하지만 BSD는locate
정규식을 전혀 구현하지 않습니다. 나와 마찬가지로 다양한 머신 유형을 사용하여 작업해야 한다면grep
or에 대한 종속성을 개발하는 것보다 필터링을 선호하게 될 것입니다.-r
--regex
locate
이보다 더 강력한 필터링이 필요한find
이유는...find(1)
전체 파일 시스템이 반드시 검색되는 것은 아닙니다. 일반적으로 작업하려는 모든 파일이 포함된 상위 디렉터리인 하위 디렉터리를 가리킵니다. 구현의 일반적인 동작locate(1)
은 패턴과 일치하는 모든 파일을 내보내어grep
필터링 등을 수행하여 버스트 크기를 줄이는 것입니다.(나쁜 팁:
locate /
시스템에 있는 모든 파일 목록을 제공할 수도 있습니다!)locate(1)
사용자 권한에 따라 출력을 제한 하는 몇 가지 변형이 있지만 이는 주요 운영 체제의 기본 버전slocate(1)
이 아닙니다 .locate
find(1)
할 수 있는일하다파일을 찾는 것 외에도 찾은 파일에 액세스할 수도 있습니다. 가장 강력하고 널리 지원되는 연산자는 이지만-exec
다른 연산자도 있습니다. 예를 들어, 최근 GNU 및 BSD 검색 구현에는-delete
및 연산자가 있습니다-execdir
.find(1)
실시간으로 실행되므로 출력이 항상 최신 상태로 유지됩니다.지난 몇 시간 또는 며칠 동안 업데이트된 데이터베이스에 의존하기 때문에
locate(1)
출력이 최신이 아닐 수 있습니다. (이것은오래된 캐시 문제.) 이 동전에는 양면이 있습니다.locate
더 이상 존재하지 않는 파일에는 이름을 지정할 수 있습니다.GNU에는 발견한 각 파일의 이름을 인쇄하기 전에 파일이 존재하는지 확인하는 플래그가 있지만
locate
이는 속도상의 이점을 일부 없애고 BSD에서는 사용할 수 없습니다 .mlocate
-e
locate
locate
locate
마지막 데이터베이스 업데이트 이후 생성된 파일에는 이름이 지정되지 않습니다.
locate
결과가 틀릴 수도 있다는 것을 알기 때문에 결과에 대해 어느 정도 불신하는 법을 배웁니다 .이 문제를 해결하는 방법은 여러 가지가 있지만 널리 사용되는 구현은 없습니다. 예를 들어,
rlocate
, 하지만 그것은나타나다최신 Linux 커널에서는 작동하지 않습니다.find(1)
이를 실행하는 사용자보다 더 많은 권한을 갖지는 않습니다.locate
시스템의 모든 사용자에게 글로벌 서비스를 제공하기 때문에updatedb
프로세스 가root
전체 파일 시스템을 볼 것으로 기대합니다. 이로 인해 보안 문제가 선택됩니다.루트로 실행
updatedb
하되 출력 파일을locate
실행하는 데 특별한 권한이 필요하지 않도록 모든 사람이 읽을 수 있도록 만듭니다. 이렇게 하면 시스템의 모든 파일 이름이 모든 사용자에게 효과적으로 노출됩니다. 이는 실제 문제를 일으키기에 충분할 수 있습니다.BSD는
locate
Mac OS X 및 FreeBSD에서 이러한 방식으로 구성됩니다.읽기로만 데이터베이스에 쓴
root
다음locate
setuid
뿌리이렇게 하면 데이터베이스를 읽을 수 있습니다. 이것이locate
실제로 의미하는 바는 일반적으로 볼 수 없는 파일을 표시하지 않도록 운영 체제의 권한 시스템을 다시 구현해야 한다는 것입니다. 그것은 또한 추가한다공격 표면특히 위험에 처한 시스템루트 업그레이드공격.locate
데이터베이스 파일을 소유할 특별한 " " 사용자 또는 그룹을 생성하고 해당 사용자/그룹이 데이터베이스를 읽을 수 있도록locate
바이너리 에 태그를 지정합니다.setuid/setgid
이 자체로는 권한 상승 공격을 방지할 수는 없지만 발생할 수 있는 피해를 크게 완화할 수 있습니다.mlocate
이렇게 구성되어 있어요레드햇 엔터프라이즈 리눅스.locate
하지만 디버거를 사용하거나 만들 수 있다면 여전히 문제가 있습니다.코어 덤프데이터베이스의 권한 있는 부분에 액세스할 수 있습니다.
locate
시스템의 각 사용자에 대해 개별적으로 실행하지 않고 진정으로 "안전한" 명령을 생성하는 방법을 찾지 못했습니다find(1)
.
대체로 둘 다 매우 유용합니다. locate(1)
이는 이름으로 특정 파일을 찾으려고 할 때 더 잘 작동합니다(파일이 존재한다는 것을 알고 있지만 정확한 위치를 기억하지 못하는 경우). find(1)
검사할 중점 영역이 있거나 많은 장점이 필요할 때 더 좋습니다.
답변2
locate
find
파일 시스템을 반복하여 파일을 찾는 동안 정기적으로 업데이트해야 하는 사전 구축된 데이터베이스를 사용합니다 .
보다 locate
훨씬 빠르지만 find
데이터베이스(캐시로 간주될 수 있음)가 업데이트되지 않으면 updatedb
잠재적으로 부정확할 수 있습니다 (명령 참조).
또한 파일 이름과 일치하는 패턴을 사용하여 find
각 속성별로 파일을 필터링할 수 있으므로 더 세밀하게 사용할 수 있습니다 .locate
답변3
find
Unix를 처음 사용하거나 일반 사용자가 사용하는 경우 매뉴얼 페이지를 주의 깊게 읽지 않고서는 Unix를 성공적으로 사용하는 것이 불가능합니다. 역사적으로 일부 버전에서는 find
이 옵션이 기본적으로 설정되지 않았으며 -print
이로 인해 사용자의 적대감이 높아졌습니다.
locate
유연성은 떨어지지만 일반적인 상황에서 사용하기에는 더 직관적입니다.
답변4
찾기의 작은 단점은 관심 있는 파일 시스템 영역을 색인화하지 못할 수 있다는 것입니다. Linux Mint 17.2와 같은 Debian 데스크탑 시스템에서 /etc/updatedb.conf 파일은 /tmp, /var/spool 및 /home/.ecryptfs를 포함하여 특정 영역을 고려 대상에서 제외하도록 구성됩니다.
/home/.ecryptfs를 무시하면 암호화된 디렉터리의 파일 이름이 승인되지 않은 사용자에게 노출되는 것을 방지할 수 있습니다. 그러나 홈 디렉토리가 ecryptfs를 사용하여 암호화된 경우 이는 홈 디렉토리가 색인화되지 않았음을 의미하므로 찾기는 홈 디렉토리에서 아무것도 찾지 못한다는 것을 의미합니다. 이로 인해 본질적으로 귀하와 나에게도 쓸모가 없게 될 수 있습니다. 결과를 찾을 수 없을 뿐만 아니라,updateb 프로세스는 어떤 이점도 없이 주기적으로 디스크를 로드하며, 귀하가 시스템의 주 사용자이거나 유일한 사용자인 경우 비활성화될 수 있습니다.