16.04 /mnt에서 파일을 찾을 수 없습니다.

16.04 /mnt에서 파일을 찾을 수 없습니다.

보조 하드 드라이브를 가리키는 다운로드 폴더로 16.04 설치가 설정되어 있습니다( 표시 Downloads -> /mnt/data/Downloads). 파일 검색을 실행하면 locate이 드라이브에 파일이 표시되지 않습니다. 나는 a를 실행 sudo updatedb하고 내 것을 확인합니다 ( 내가 찾고 있는 디렉터리나 파일을 updatedb.conf제외한 항목은 아무것도 없습니다 )./mnt

나에게 흥미로운 점은 내가 cd /mnt/data/Downloads달릴 때입니다.위치하고 있다이 디렉토리의 모든 내용을 볼 수 있지만 기본 드라이브에서는 볼 수 없습니다. Ubuntu에는 내가 사용 중인 드라이브에 따라 두 개의 서로 다른 위치 데이터베이스가 있는 것과 거의 같습니다.

이 상황을 어떻게 해결할 수 있습니까?

추가의: 여기 내updatedb.conf

PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media /home/.ecryptfs /var/lib/schroot"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre tmpfs usbfs udf fuse.glusterfs fuse.sshfs curlftpfs ecryptfs fusesmb devtmpfs"

나는 달리기를 시도했지만 sudo locate결과는 바뀌지 않았습니다. 나는 달리기를 시도했지만 mlocate결과 sudo mlocate도 바뀌지 않았습니다.

또한 다른 파일을 찾아보았지만 updatedb.conf빈 파일이 나왔습니다.

업데이트 1:보조 드라이브의 파일 시스템은 ext4입니다.

업데이트 2:암호화된 것도 없습니다. 인터넷 검색을 해보니 일부 사용자에게 문제가 되는 것으로 나타났습니다.

업데이트 3:지금은 더 혼란스러워요. 내 컴퓨터에서 모든 .iso 파일을 찾으려고 합니다. 결과는 다음과 같습니다.

@:~$ FreeNAS 찾기

/mnt/data/Downloads/FreeNAS-9.3-RELEASE.iso

@:~$ *.iso 찾기

/home/hudsona/ubuntu-16.04.1-server-amd64.iso

@:~$ iso 찾기

/home//ubuntu-16.04.1-server-amd64.iso

/mnt/data/Downloads/FreeNAS-9.3-RELEASE.iso

(그리고 다른 결과들)

@:~$ 찾기 . -type f -name "*.iso"

./ubuntu-16.04.1-server-amd64.iso

업데이트 4:더 많은 결과:sudo find / -type f -name "*.iso"내가 원하는 결과를 제공하지만 해당 결과를 가져오는 데 오랜 시간이 걸립니다.

나는 내가 있는 드라이브에 따라 서로 다른 위치 찾기 결과를 얻었기 때문에 실제로 두 개의 서로 다른 데이터베이스가 있는지 알아보고 싶었습니다. MAN 페이지를 확인한 후 내 시스템에서 mlocate.db 파일을 검색했는데, 여기에 내 결과가 있습니다. :

  • /usr/share/man/man5/mlocate.db.5.gz
  • /var/lib/mlocate/mlocate.db
  • /var/lib/mlocate/mlocate.db.VEzhqO

.VEzhqO 파일이 보조 데이터베이스일 수도 있다고 생각했기 때문에 찾기 명령에 -d 플래그를 사용하여 지정해 보았습니다. 이로 인해 "통계할 수 없음" 오류가 발생했습니다. 미스터리는 계속됩니다.

업데이트 5:나는 이것을 다른 Ubuntu 시스템인 16.04 서버 에디션에서 재현했습니다.

업데이트 6:그래서 "*.iso"를 찾는 해결책이 있지만 이제 그것이 작동하는 "이유"가 궁금합니다. 나는 MAN 페이지와 다음 두 링크를 보았습니다.http://www.linfo.org/locate.html그리고http://www.howtogeek.com/112674/how-to-find-files-and-folders-in-linux-using-the-command-line/. 이들 중 어느 것도 그것이 왜 작동하는지에 대해 밝히지 않았습니다.

답변1

모든 셸에서 를 사용하면 *.iso명령을 호출하기 전에 파일 목록이 확장되므로

locate *.iso

쉘은 현재 디렉토리의 파일에서 파일 이름 목록을 생성하는 표현식을 자동으로 확장합니다. 현재 디렉토리에 두 개의 iso 파일 file1.isofile2.iso; 결과 명령은 실제로 다음과 같습니다:

locate file1.iso file2.iso

그러면 쉘이 이를 실행합니다. 따라서 locate이 두 문자열을 포함하는 파일을 찾으려고 시도하며 효과적으로 "*file1.iso*"또는 를 검색합니다 "*file2.iso*".

그렇기 locate iso때문에 locate *.iso; 실제로 첫 번째 경우를 locate검색하고 있습니다 . "*iso*"해결책(및 IMHO를 사용하는 올바른 방법)은 명령이 다음 find명령과 같이 표현식을 사용할 때 셸의 특수 문자를 인용하는 것입니다.

find /etc/ -type f -iname "*.conf"

현재 디렉토리에 두 개 이상의 conf 파일이 있고 따옴표를 사용하지 않으면 find 명령은 생성된 두 번째 파일 이름을 구문 분석하는 데 실패하고 절망과 인터넷 검색으로 머리카락 밀도가 심각하게 감소합니다. 따옴표가 없는 것과 관련이 없습니다.

답변2

몇 가지 이유,

locate *.iso 

현재 디렉터리에서 .iso 파일만 검색하는 동안

locate "*.iso" 

모든 드라이브를 검색합니다. 이것이 내 문제에 대한 해결책입니다.

답변3

*찾기는 문자열 앞뒤에 자동으로 적용되므로 가장 쉬운 해결책은 다음과 같습니다.

locate .iso

또한 두 개의 Windows 드라이브가 마운트되어 있습니다. Ubuntu 파티션에서 실행할 때 locate귀하의 질문과 비슷한 결과를 얻습니다. 이 답변을 사용하면 올바른 결과를 얻을 수 있습니다.

───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads/cfiles$ locate "*.iso" | wc -l
3
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads/cfiles$ locate *.iso | wc -l
3
───────────────────────────────────────────────────────────────────────────────────────────
rick@alien:~/Downloads/cfiles$ locate .iso | wc -l
45

관련 정보