man locate
설명하다:
The locate database is typically built by user ``nobody'' and the
locate.updatedb(8) utility skips directories which are not readable for
user ``nobody'', group ``nobody'', or world. For example, if your HOME
directory is not world-readable, none of your files are in the database.
다른 사람이 읽을 수 없는 홈 디렉토리를 갖는 것이 보안상 더 좋으므로 내 홈 디렉토리를 검색 가능하게 하려면 어떻게 해야 합니까(나만을 위해)?
find ~ -type f > .locate
분명히 추가 crontab
하고 do 를 수행하면 이 문제를 해결할 수 있지만 grep <search> ~/.locate
, 이를 수행하는 기본 제공 표준 방법이 있습니까 locate
?
답변1
대부분의 배포판은 locate
findutils 도구를 사용자 none으로 updateb를 실행하는 crontab에서 호출되는 스크립트와 함께 패키지로 제공합니다. 이 스크립트를 찾아(예: Debian 9에서는 위치 /etc/cron.daily/locate
) 수정하여 사용자 처리를 제거하고 데이터베이스 파일을 변경하기만 하면 됩니다. 따라서 최종 기본 형식은 다음과 같습니다.
updatedb --output="$HOME/locatedb" --localpaths="$HOME"
이것은 아마도 crontab에 배치되어야 할 것입니다.
그러면 사용법은 다음과 같습니다.
locate --database="$HOME/locatedb" somefilepattern
네트워크 설치를 사용하고 이를 색인화하려는 경우에는 더 많은 옵션을 추가해야 합니다.
시스템에 대한 루트 액세스 권한이 있고 가능한 보안/개인 정보 보호 문제를 고려하면 생활을 단순화하고 대안을 사용할 수 있습니다.mlocate
사용자가 직접 액세스할 수 없는 데이터베이스에 모든 것을 루트로 색인화한다는 점을 제외하면 대부분의 배포판에는 위치 도구와 똑같이 작동하는 도구가 있을 수 있습니다. setuid/setgid를 사용한 명령은 이를 읽고 해당 사용자가 처음으로 결과에 액세스할 수 있는 경우에만 해당 사용자에게 결과가 표시되도록 허용합니다.
답변2
/usr/libexec/locate.updatedb
AB가 제안한 옵션을 내 시스템(BSD 변형)에서 사용할 수 없는 것 같습니다. 대신 다음과 같은 기능이 있습니다.
: ${FCODES:=/var/db/locate.database}
: ${SEARCHPATHS:="/"}
그래서 나는 이렇게 해야 합니다:
export SEARCHPATHS=$HOME
export FCODES=$HOME/locatedb
/usr/libexec/locate.updatedb
그 다음에:
$ locate -d ~/locatedb <pattern>
내 시스템에서 환경 변수를 설정하는 방법이 있습니까?