locate / whereis / what의 차이점은 무엇입니까?


13

locate whereiswhich명령 의 기본적인 차이점은 무엇입니까?

내가 관찰하는 기본적인 차이점은입니다 locate반면, 전체 파일 시스템에있는 모든 있는지 찾아 관련 파일 이름 whereiswhich명령은 설치된 응용 프로그램의 위치 (파일 시스템 / 로컬 주소)를 제공합니다. 내 관찰은 얼마나 정확합니까?

이러한 명령은 내부적으로 어떻게 구현됩니까? 전체 파일 시스템 계층에서 대상 문자열과 일치하는 특정 파일 이름을 검색 locate해야하는 이유는 대시 검색에 비해 왜 그렇게 빨리 작동 locate합니까?


2
그리고 type어때요? : P
jamesmstone

@jamesmstone 무엇을 의미합니까 type, 자세히 설명하십시오
Chinmaya B

2
죄송 합니다만 귀하의 질문에 추가하려고했습니다. type(내 눈에) 당신이 언급 한 것과 비슷한 일을하는 또 다른 명령입니다.
jamesmstone

@ jamesmstone 내 시스템에서 작동하는 모든 유형 명령이 있다고 생각하지 않습니다. type명령에 대한 매뉴얼 또는 정보 페이지를 찾을 수 없습니다 . 나는 시도 man type하고 info type.
친 마야 B

흠 나는 왜 궁금해 ... bash를 사용하고 있습니까?
jamesmstone

답변:


17

which프로그램의 바이너리 실행 파일을 찾습니다 (PATH에있는 경우). man which보다 명확하게 설명합니다 :

이는 현재 환경에서 실행될 파일 (또는 링크)의 경로 이름을 리턴하며, 인수가 엄격하게 POSIX 호환 쉘에 명령으로 제공되었을 경우. PATH에서 인수 이름과 일치하는 실행 파일을 검색하여이를 수행합니다. 기호 링크를 따르지 않습니다.

whereis프로그램의 바이너리, 소스 및 매뉴얼 페이지 파일을 찾습니다. 예를 들어

$ whereis gimp
/usr/bin/gimp /usr/lib/gimp /etc/gimp /usr/share/gimp /usr/share/man/man1/gimp.1.gz

이러한 명령의 출력을 인수로 ls -l또는file

$ ls -l $(which gimp)
lrwxrwxrwx 1 root root 8 Jun 30 19:59 /usr/bin/gimp -> gimp-2.8

$ file $(which gimp)
/usr/bin/gimp: symbolic link to gimp-2.8

locate실제로 경로의 어느 곳에 나 패턴이 지정된 모든 파일을 찾습니다. 전체 경로가 아닌 이름-b옵션이 있는 패턴이 포함 된 파일 및 디렉토리 만 찾도록 지시 할 수 있습니다. 이 패턴 은 일반적으로 원하는 패턴이며 덜 다루기 어려운 목록을 제공합니다.

locate주기적으로 업데이트되는 이진 데이터베이스를 사용하기 때문에 빠릅니다 (매일,에 의해 cron). 다음을 실행하여 최근에 추가 한 파일을 찾을 수 있도록 직접 업데이트 할 수 있습니다sudo updatedb

한 가지 더 locate-파일이 여전히 존재하는지 여부는 신경 쓰지 않으므로 최근에 삭제 된 파일을 찾지 않으려면을 사용하십시오 -e. less목록이 길 수 있기 때문에 종종 파이프 하기도합니다. 일반적으로 나는 :

sudo updatedb && locate -b -e gimp | less

여기에 Unity 대시가 작동하는 방법이 설명되어 있습니다. Zeitgeist 를 사용 하여 시스템 파일을 색인화하고 사용 패턴을 학습하고 다른 응용 프로그램이이 데이터를 사용할 수 있도록함으로써보다 많은 작업을 수행하고 있습니다 locate.


대시를 비교하고 명령 성능 및 구현 세부 사항을 찾을 수 있습니까? 이진 데이터베이스의 업데이트는 시스템에서 새 파일을 만든 후에 수행해야하므로 기간이 무한정이거나 시스템 프로세스에서 관리합니까?
Chinmaya B

2
데이터베이스를 자동으로 업데이트하는 @Creator는 cron에 의해 하루에 한 번 수행됩니다. 당신이 즉시 파일을 찾을 수없는 무언가를 설치할 때 확인할 수 있습니다 locate. 대시는 완전히 다른 색인을 사용합니다. 더 많은 일을하기 때문에 느려집니다 (내 답변을 편집했습니다)
Zanna

1
즉, locate는 유용하고 강력하지만 어느 것이나 어디에 있더라도 멍청하지만 dash는 더 강력하고 기계 학습을 구현합니다. 그리고 sudo updatedb귀하의 명령에 감사드립니다- 나는 정기적으로 -e를 사용했지만 알고하지 못했습니다.
친 마야 B

@Creator yep 당신은 그것을 더 잘 표현했습니다 :) 그것이 도움이 된 행복
Zanna

0

간단히

$ which samba

다음 명령은 PATH 설정을 통해 나열된 프로그램 목록을 검색합니다.

$ whereis samba

whereis 명령은 또한 PATH 설정에없는 프로그램을 검색합니다

$locate samba

또한 파일 이름으로 파일을 찾지 만 디렉토리 구조 자체는 검색하지 않고 updatedb에서 준비한 데이터베이스 만 검색합니다. 그 위치 때문에 찾기보다 빠르지 만 정확도는 떨어집니다. 예 :

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.