파일은 삭제할 수 없지만 상위 디렉터리는 삭제할 수 있습니다.

파일은 삭제할 수 없지만 상위 디렉터리는 삭제할 수 있습니다.

기본적으로 다음 파일을 삭제하려고 합니다.

/var/lib/mysql/db/nomNomina2.*

찾기를 사용하여 찾으면 다음과 같은 결과가 나타납니다.

/var/lib/mysql/db/nomNomina2.MYD
/var/lib/mysql/db/nomNomina2.MYI
/var/lib/mysql/db/nomNomina2.frm

하지만 난 노력해

 $ rm -fv  /var/lib/mysql/db/nomNomina2.frm

출력이 나오지 않지만 찾기를 사용할 때 파일이 계속 표시됩니다.

동일한 위치에서 동일한 파일 이름을 가진 파일을 생성하고 삭제할 수 있지만 찾기를 사용할 때 여전히 표시되며 동일한 이름을 가진 다른 테이블을 생성할 수 없습니다.

이 문제의 원인은 무엇입니까? 파일 시스템 혼란? 수정하는 방법?

답변1

locate신뢰할 수 없는시스템에 존재하는 파일에 대한 실시간 최신 정보. 정보는 데이터베이스에 캐시됩니다.

또한 다음과 연결된 유명한 대사를 고려해보세요:

이건 작동하지 않습니다!캐시를 탓해야 할까요?

상자에 어떤 파일/디렉토리가 있는지에 대한 실제 최신 정보지금, ls또는 find또는 stat또는 test -e filename && echo it is there심지어 를 사용하세요 printf %s\\n *. 거의아무것Except locate파일 시스템에 대한 최신 정보를 제공합니다.

LESS=+/BUGS man locate(내 시스템에서) 다음 섹션 도 참조하세요 .

BUGS
 The locate program may fail to list some files that are present, or may
 list files that have been removed from the system.  This is because
 locate only reports files that are present in the database...

를 실행할 수 있지만 updatedb솔직히 말해서 파일이 어디에 있는지 정확히 알고 locate이를 사용하여 찾는다면... 그냥 잘못하고 있는 것입니다. locate방법을 알려주세요. 해당 경로에 파일이 존재하는지 여부는 알려주지 않습니다. 파일의 경로를 이미 알고 있다면 필요없겠죠 locate?

이것목적찾기는 "빠른 파일 이름 찾기"를 의미하며 반드시 정확하거나 신뢰할 수 있는 것은 아닙니다.


참고: "사용하지 마세요"라고 말하는 것이 아닙니다 locate. 시스템에서 파일이 어디에 있는지 모를 때 유용합니다. 그러나 경로 이름을 얻은 후에는 locate해당 목적에 부합하므로 이제 다음을 사용해야 합니다.다른확인/검증 등을 위한 도구 당신이 찾은 파일.

답변2

찾기 명령은 디스크의 파일을 검색하지 않고 데이터베이스의 파일 경로를 검색합니다. 데이터베이스는 시스템의 파일 및 해당 경로에 대한 정보를 포함하는 파일입니다.

따라서 "locate" 명령의 한 가지 제한 사항은 다른 유틸리티 "updatedb"에 의해 업데이트될 수 있는 데이터베이스에 대한 의존성입니다. 따라서 "locate" 명령을 통해 신뢰할 수 있는 최신 결과를 얻으려면 해당 명령이 작동하는 데이터베이스를 정기적으로 업데이트해야 합니다.

따라서 파일을 삭제한 후에는 #find 명령어를 이용하여 실시간으로 해당 파일을 검색하여 해당 파일이 존재하는지 확인해야 합니다. #find /var/lib/mysql/db/ -iname "nomNomina2.*"

관련 정보