찾기 대 찾기: 서로의 사용법, 장점 및 단점

찾기 대 찾기: 서로의 사용법, 장점 및 단점

Linux 및 Unix 시스템에는 두 가지 일반적인 검색 명령이 있습니다.locate그리고find.

각각의 장점과 단점은 무엇입니까? 한 사람이 다른 사람보다 유리한 때는 언제입니까?

답변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 유형 운영 체제에서는 이를 옵션으로 제공하지도 않으며, 사용 가능한 경우 반드시 사용해야 하는 최소 기능 집합을 지정하는 독립적인 표준이 없기 때문에 구현 시 원하는 기능이 부족할 수 있습니다.

    하나 있다사실은표준, 예BSDlocate(1), 그러나 이는 다른 두 가지 기본 스타일이 locate모든 옵션( -0, -c, -d, -i, -l, -m-s) 을 구현하기 때문입니다 -S.mlocateBSD에 없는 6개의 추가 옵션을 구현했습니다 : locate, -b, -e, -P-qBSD 에 없는 구현--regex-w암소 비슷한 일종의 영양locate이 6가지와 다른 것을 구현하세요.4개: -A, -D, -E, 그리고 -p. ( -?vs -hvs 와 같은 별칭과 뉘앙스는 무시합니다 --help.)

    BSDMac OS X은 BSD를 제공합니다 locate.

    대부분의 Linux는 GNU를 제공 locate하지만 Red Hat Linux 및 Arch는 mlocate대안을 제공합니다. 데비안은 기본 설치에 두 버전을 모두 설치하지 않지만 기본 패키지 저장소에 두 버전을 모두 설치하는 경우 locate""를 실행합니다 mlocate.

    Oracle이 mlocateSolaris에서 출시되었습니다.11.2부터, 2014년 12월 출시. 이전에는 locateSolaris에 기본적으로 설치되지 않았습니다. (아마도 이는 다음과 관련된 Solaris 명령의 수를 줄이기 위해 수행되었습니다.오라클리눅스,지금 바로Red Hat Enterprise Linux 기반, 도 사용됩니다 mlocate. )

    IBM AIX아직 버전이 출시되지 않았는데요 locate,최소한 AIX 7.2부터 시작, findutilsGNU를 설치 하지 않은 경우Linux 애플리케이션용 AIX 도구 상자.

    HP-UX반품나타나다기본 시스템이 부족합니다 locate.

    장로"진짜" 유닉스구현은 일반적으로 포함되지 않습니다 locate.

  • find(1)강력한 표현 구문과 많은 기능을 가지고 있습니다.부울 연산자, 등.

  • find(1)이름으로 파일을 선택하는 것만이 가능한 것은 아닙니다. 다음을 통해 선택할 수 있습니다.

    • 나이
    • 크기
    • 소유자
    • 파일 유형
    • 타임스탬프
    • 권한
    • 하위 트리 내의 깊이...
  • 이름으로 파일을 찾을 때 다음을 사용하여 검색할 수 있습니다.파일 글로빙 구문모든 버전 find(1)이나 GNU 또는 BSD 버전에서는 다음을 사용합니다.일반적인 표현.

    현재 버전은 locate(1)glob 패턴도 허용 find하지만 BSD는 locate정규식을 전혀 구현하지 않습니다. 나와 마찬가지로 다양한 머신 유형을 사용하여 작업해야 한다면 grepor에 대한 종속성을 개발하는 것보다 필터링을 선호하게 될 것입니다.-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)출력이 최신이 아닐 수 있습니다. (이것은오래된 캐시 문제.) 이 동전에는 양면이 있습니다.

    1. locate더 이상 존재하지 않는 파일에는 이름을 지정할 수 있습니다.

      GNU에는 발견한 각 파일의 이름을 인쇄하기 전에 파일이 존재하는지 확인하는 플래그가 있지만 locate이는 속도상의 이점을 일부 없애고 BSD에서는 사용할 수 없습니다 .mlocate-elocatelocate

    2. locate마지막 데이터베이스 업데이트 이후 생성된 파일에는 이름이 지정되지 않습니다.

    locate결과가 틀릴 수도 있다는 것을 알기 때문에 결과에 대해 어느 정도 불신하는 법을 배웁니다 .

    이 문제를 해결하는 방법은 여러 가지가 있지만 널리 사용되는 구현은 없습니다. 예를 들어,rlocate, 하지만 그것은나타나다최신 Linux 커널에서는 작동하지 않습니다.

  • find(1)이를 실행하는 사용자보다 더 많은 권한을 갖지는 않습니다.

    locate시스템의 모든 사용자에게 글로벌 서비스를 제공하기 때문에 updatedb프로세스 가 root전체 파일 시스템을 볼 것으로 기대합니다. 이로 인해 보안 문제가 선택됩니다.

    1. 루트로 실행 updatedb하되 출력 파일을 locate실행하는 데 특별한 권한이 필요하지 않도록 모든 사람이 읽을 수 있도록 만듭니다. 이렇게 하면 시스템의 모든 파일 이름이 모든 사용자에게 효과적으로 노출됩니다. 이는 실제 문제를 일으키기에 충분할 수 있습니다.

      BSD는 locateMac OS X 및 FreeBSD에서 이러한 방식으로 구성됩니다.

    2. 읽기로만 데이터베이스에 쓴 root다음locate setuid뿌리이렇게 하면 데이터베이스를 읽을 수 있습니다. 이것이 locate실제로 의미하는 바는 일반적으로 볼 수 없는 파일을 표시하지 않도록 운영 체제의 권한 시스템을 다시 구현해야 한다는 것입니다. 그것은 또한 추가한다공격 표면특히 위험에 처한 시스템루트 업그레이드공격.

    3. locate데이터베이스 파일을 소유할 특별한 " " 사용자 또는 그룹을 생성하고 해당 사용자/그룹이 데이터베이스를 읽을 수 있도록 locate바이너리 에 태그를 지정합니다. setuid/setgid이 자체로는 권한 상승 공격을 방지할 수는 없지만 발생할 수 있는 피해를 크게 완화할 수 있습니다.

      mlocate이렇게 구성되어 있어요레드햇 엔터프라이즈 리눅스.

      locate하지만 디버거를 사용하거나 만들 수 있다면 여전히 문제가 있습니다.코어 덤프데이터베이스의 권한 있는 부분에 액세스할 수 있습니다.

    locate시스템의 각 사용자에 대해 개별적으로 실행하지 않고 진정으로 "안전한" 명령을 생성하는 방법을 찾지 못했습니다 find(1).

대체로 둘 다 매우 유용합니다. locate(1)이는 이름으로 특정 파일을 찾으려고 할 때 더 잘 작동합니다(파일이 존재한다는 것을 알고 있지만 정확한 위치를 기억하지 못하는 경우). find(1)검사할 중점 영역이 있거나 많은 장점이 필요할 때 더 좋습니다.

답변2

locatefind파일 시스템을 반복하여 파일을 찾는 동안 정기적으로 업데이트해야 하는 사전 구축된 데이터베이스를 사용합니다 .

보다 locate훨씬 빠르지만 find데이터베이스(캐시로 간주될 수 있음)가 업데이트되지 않으면 updatedb잠재적으로 부정확할 수 있습니다 (명령 참조).

또한 파일 이름과 일치하는 패턴을 사용하여 find각 속성별로 파일을 필터링할 수 있으므로 더 세밀하게 사용할 수 있습니다 .locate

답변3

findUnix를 처음 사용하거나 일반 사용자가 사용하는 경우 매뉴얼 페이지를 주의 깊게 읽지 않고서는 Unix를 성공적으로 사용하는 것이 불가능합니다. 역사적으로 일부 버전에서는 find이 옵션이 기본적으로 설정되지 않았으며 -print이로 인해 사용자의 적대감이 높아졌습니다.

locate유연성은 떨어지지만 일반적인 상황에서 사용하기에는 더 직관적입니다.

답변4

찾기의 작은 단점은 관심 있는 파일 시스템 영역을 색인화하지 못할 수 있다는 것입니다. Linux Mint 17.2와 같은 Debian 데스크탑 시스템에서 /etc/updatedb.conf 파일은 /tmp, /var/spool 및 /home/.ecryptfs를 포함하여 특정 영역을 고려 대상에서 제외하도록 구성됩니다.

/home/.ecryptfs를 무시하면 암호화된 디렉터리의 파일 이름이 승인되지 않은 사용자에게 노출되는 것을 방지할 수 있습니다. 그러나 홈 디렉토리가 ecryptfs를 사용하여 암호화된 경우 이는 홈 디렉토리가 색인화되지 않았음을 의미하므로 찾기는 홈 디렉토리에서 아무것도 찾지 못한다는 것을 의미합니다. 이로 인해 본질적으로 귀하와 나에게도 쓸모가 없게 될 수 있습니다. 결과를 찾을 수 없을 뿐만 아니라,updateb 프로세스는 어떤 이점도 없이 주기적으로 디스크를 로드하며, 귀하가 시스템의 주 사용자이거나 유일한 사용자인 경우 비활성화될 수 있습니다.

관련 정보