Não é possível excluir o arquivo, mas pode excluir o diretório pai

1

Então, basicamente, estou tentando excluir os arquivos:

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

e quando eu procuro por eles com locate, recebo a seguinte saída:

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

mas depois tento

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

Eu não recebo saída, mas os arquivos ainda são exibidos ao usar o locate.

Observe que posso criar e excluir um arquivo com o mesmo nome de arquivo no mesmo local, mas ele ainda será exibido ao usar o locate e não poderei criar outra tabela com o mesmo nome.

Alguma idéia do que poderia estar causando isso? bagunça do sistema de arquivos? como corrigir isso?

    
por Snivs 02.04.2016 / 04:31

2 respostas

6

locate não é confiável para informações atuais e atuais sobre quais arquivos estão presentes em seu sistema. A informação é armazenada em cache em um banco de dados.

Considere também a famosa linha, com link:

It's not working! Should I blame caching?

Para informações atuais reais sobre quais arquivos / diretórios existem na sua caixa agora , use ls ou find ou stat ou test -e filename && echo it is there ou mesmo printf %s\n * . Muito qualquer coisa , exceto locate , lhe dará informações atualizadas sobre seu sistema de arquivos.

Veja também LESS=+/BUGS man locate , que (no meu sistema) lê em parte:

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...

Você pode executar updatedb , mas honestamente, se você sabe exatamente onde estão os arquivos e está usando locate para encontrá-los ... você está simplesmente fazendo errado. locate informa um caminho. Não informa nada sobre a existência ou inexistência de arquivos nesse caminho. Se você já conhece o caminho para o arquivo, você não precisa de locate , não é?

O propósito de locate é "encontrar nomes de arquivos rapidamente", não necessariamente com precisão ou confiabilidade.

Observação: não estou dizendo "não use locate ". Ele tem um propósito, quando você não tem idéia de onde no seu sistema um determinado arquivo pode estar. Mas uma vez que você tenha o nome de caminho de locate , ele cumpriu seu propósito e agora você precisa usar outras ferramentas para examinar / verify / etc. o arquivo que você encontrou.

    
por 02.04.2016 / 05:19
0

O comando locate não pesquisa os arquivos no disco, mas procura caminhos de arquivos em um banco de dados. O banco de dados é um arquivo que contém informações sobre os arquivos e seu caminho no sistema.

Portanto, uma limitação do comando "locate" é a dependência do banco de dados, que pode ser atualizada por outro utilitário "updatedb". Assim, para obter os resultados mais recentes e confiáveis do comando "localizar", o banco de dados no qual ele funciona deve ser atualizado em intervalos regulares.

Portanto, após excluir o arquivo, você deve verificar a existência do arquivo usando o comando #find, que pesquisa o arquivo em tempo real. #find / var / lib / mysql / db / -iname "nomNomina2. *"

    
por 02.04.2016 / 09:49

Tags