`plocate`는 내 홈 디렉토리에서 결과를 찾지 못하지만 `mlocate`는 찾습니다. 홈 디렉토리에서 결과를 검색하는 방법은 무엇입니까?

`plocate`는 내 홈 디렉토리에서 결과를 찾지 못하지만 `mlocate`는 찾습니다. 홈 디렉토리에서 결과를 검색하는 방법은 무엇입니까?

mlocate현재 에서 마이그레이션하려고 합니다 plocate.

mlocate내 스크립트에서 사용합니다(참고: 별칭 locate은 내가 설치한 별칭에 따라 mlocate또는 입니다).plocate

홈 디렉토리가 성공적으로 검색되었습니다.mlocate

실행 후 처음 10개의 출력은 다음과 같습니다 locate home(locate의 별칭 mlocate).

/home
/etc/apparmor.d/tunables/home
/etc/apparmor.d/tunables/home.d
/etc/apparmor.d/tunables/home.d/site.local
/etc/systemd/homed.conf
/home/username
/home/username/.bash_history
/home/username/.bash_profile
/home/username/.bashrc
/home/username/.cache
/home/username/.cargo

보시다시피 mlocate.

홈 디렉토리 검색 실패 plocate:

그러나 설치한 후 plocate등에서 결과를 얻었고 내가 얻은 것은 다음과 같습니다./etc//usr//home

실행 후 locate home( locate별칭: plocate):

/home
/etc/apparmor.d/tunables/home
/etc/apparmor.d/tunables/home.d
/etc/apparmor.d/tunables/home.d/site.local
/etc/systemd/homed.conf
/usr/bin/addgnupghome
/usr/bin/homectl

보시다시피 plocate파일과 디렉터리가 내 홈 디렉터리에 없습니다.

내가 시도한 것

1. 저자의 코멘트plocate

이 만자로 스레드포지셔닝을 사용하는 방법은 무엇입니까?저자는 plocate다음과 같이 논평합니다.

먼저 데이터베이스가 최근에 업데이트되었는지 확인하세요. 대부분의 사용자는 plocate의 updateb를 사용하기를 원할 것입니다. plocate 1.1.0 이후로 plocate-build(mlocate의 데이터베이스에서 변환)는 일반적으로 원하는 것이 아닙니다. [...]

파일이 표시되지 않는 또 다른 이유는 일반적으로 권한 때문입니다. 루트로 파일을 찾을 수 있는지 확인하십시오(sudo plocate test). 가능하다면 루트에서 디렉터리까지 액세스할 수 없는 것이 문제일 가능성이 높습니다. plocate는 / -name이 발견된 모든 것을 찾아야 합니다.시험사실이지만 그 이상은 아닙니다.

나는 도망 갔다 sudo updatedb.

내 홈 디렉터리 액세스 권한:

/ 
➜ ll
drwxr-xr-x - root 17 Jul  2022 home/
drwxr-xr-x - root 16 Apr 21:44 usr/

/home 
➜ ll
drwxr-xr-x - username 16 Apr 21:51 username/

plocate내 홈 디렉토리 아래의 파일과 디렉토리에 액세스할 수 없는 것처럼 보이지만 그 아래에 파일과 디렉토리가 있습니다. 왜 볼 수는 있지만 그 아래의 파일과 디렉토리는 볼 수 없는지 usr모르겠습니다 .plocateusrhome

2. 실행하면 결과가 다르다sudo

plocate실행해 보면 결과가 다릅니다 sudo.

일반적인 내용은 다음과 같습니다 locate.

➜  locate ranger
/usr/bin/ranger
/usr/lib/python3.10/site-packages/ranger
/usr/lib/python3.10/site-packages/ranger_fm-1.9.3-py3.10.egg-info
/usr/lib/python3.10/site-packages/ranger/__init__.py
/usr/lib/python3.10/site-packages/ranger/__pycache__

다음은 다음과 같이 실행됩니다 sudo.

➜  sudo locate ranger
/root/.config/ranger
/root/.local/share/ranger
/root/.local/share/ranger/bookmarks
/root/.local/share/ranger/history
/root/.local/share/ranger/tagged
/usr/bin/ranger
/usr/lib/python3.10/site-packages/ranger
/usr/lib/python3.10/site-packages/ranger_fm-1.9.3-py3.10.egg-info

내 홈 디렉토리에서 결과(예: 상위 5개 결과)를 볼 수 있습니다.

내가 원하는 건

plocateuse 와 같은 작업을 수행할 수 있기를 원합니다 mlocate. 즉, 다음을 사용할 때 홈 디렉터리의 결과를 기대합니다 plocate.

$ locate home
/home
/etc/apparmor.d/tunables/home
/etc/apparmor.d/tunables/home.d
/etc/apparmor.d/tunables/home.d/site.local
/etc/systemd/homed.conf
/home/username
/home/username/.bash_history
/home/username/.bash_profile
/home/username/.bashrc
/home/username/.cache
/home/username/.cargo

답변1

TL:DR: 다음을 사용하는 경우 btrfs:

  1. 편집하다/etc/updatedb.conf
  2. PRUNE_BIND_MOUNTS = "yes"사용. . . 교체PRUNE_BIND_MOUNTS = "no"
  3. 문서 저장
  4. 데이터베이스 갱신sudo updatedb
  5. locate home디렉토리의 출력을 보려면 다시 테스트하십시오 home.

설명하다

plocate저자에게 연락했더니 친절하게도 올바른 방향을 알려주셨고 다음과 같은 답변을 해주셨습니다.

이러한 문제 중 90%는 btrfs 구성 오류로 보입니다. 어떤 파일 시스템에서 실행 중인지는 밝히지 않았지만 그렇다면 PRUNE_BIND_MOUNTS 아래의 Updateb.conf 매뉴얼 페이지를 참조하고 fstab을 확인하세요.

나는 실제로 btrfs(확인하기 위해 lsblk -f:)를 사용하고 있습니다.

상담 내용은 man updatedb.conf다음과 같습니다.

PRUNE_BIND_MOUNTS

문자열 0, no, 1 또는 yes 중 하나입니다. PRUNE_BIND_MOUNTS가 1 또는 yes인 경우,updateb(8)는 바인드 마운트를 검색하지 않습니다. 바인드 마운트 하위 트리에 마운트된 모든 파일 시스템은 바인드 마운트되지 않은 경우에도 건너뜁니다. 예외적으로 디렉터리 자체의 바인드 마운트는 건너뛰지 않습니다. Btrfs 하위 볼륨 마운트는 커널 내부에서 바인드 마운트로 처리되므로(btrfs-subvolume(8) 참조) 파일 시스템 루트 자체도 마운트하는 경우 건너뛸 수 있습니다. 이 문제를 해결하려면 루트 디렉터리도 Btrfs 하위 볼륨으로 만드십시오.

기본적으로 번들 마운트는 건너뛰지 않습니다.

해결 방법은 위의 TL;DR을 참조하세요.

관련 정보